php-general Digest 24 Sep 2008 11:18:39 -0000 Issue 5699
Topics (messages 280802 through 280825):
Re: $this->value VS $value
280802 by: Jochem Maas
280803 by: Eric Butera
280805 by: Nathan Nobbe
280806 by: Nathan Nobbe
280807 by: Eric Butera
280808 by: Nathan Nobbe
Re: Browser could not get mp3 files from http site
280804 by: hce
280809 by: Richard Lynch
280818 by: hce
280825 by: Ashley Sheridan
Re: PHP tags - any reasons to close ?>
280810 by: Ross McKay
Using Static Class Variables to Access Globally
280811 by: Ryan Panning
280812 by: Richard Lynch
280814 by: Nathan Nobbe
280816 by: Ryan Panning
280820 by: Colin Guthrie
class const versus define
280813 by: Richard Lynch
280817 by: Carlos Medina
280819 by: Chris
280821 by: Jochem Maas
The Data Literacy Test
280815 by: Shelley
Re: How to detect the host (window or Linux)?
280822 by: hce
Google Checkout
280823 by: Richard Heyes
280824 by: Stephen Wellington
Administrivia:
To subscribe to the digest, e-mail:
[EMAIL PROTECTED]
To unsubscribe from the digest, e-mail:
[EMAIL PROTECTED]
To post to the list, e-mail:
[EMAIL PROTECTED]
----------------------------------------------------------------------
--- Begin Message ---
Nathan Nobbe schreef:
On Tue, Sep 23, 2008 at 10:41 AM, Micah Gersten <[EMAIL PROTECTED]> wrote:
Eric Butera wrote:
On Tue, Sep 23, 2008 at 12:26 PM, Jochem Maas <[EMAIL PROTECTED]>
wrote:
(using $this->foo or MyClass::$foo for static properties).
also self::
Actually within a class, I think you must self:: before a static
property or something shows up in the error log.
yea, php will think its a local variable if not qualified w/ the self
keyword and scope resolution (or w/e its called in php :D), but the name of
the class and the scope resolution operator works as well. its just a hair
less flexible because if the class name changes you have to update some code
whereas w/ self, the code is no longer dependent upon the class name.
/// psuedocode !
class A {
protected static $someStatic = 5;
public function doStuff() {
$someStatic // php thinks this is a local var
self::$someStatic // php can id this as a static var
A::$someStatic // php can id this as a static var
Nathan is correct, I'd like to add that 'self' is actually nothing more than
a simple alias used at compile time to put the class name in ...
'self' literally equates to 'MyClass', but it saves hassle when refactoring
and it's much clearer that you mean 'this class Im looking at/working in'
.... personally whenever I see a classname referenced statically inside a method
I kind of assume it must be another class :-P
... now had 'self' been late (statically) bound ... no I won't go there, we get
'static' very soon now :-P
}
-nathan
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 6:25 PM, Jochem Maas <[EMAIL PROTECTED]> wrote:
> Nathan Nobbe schreef:
>>
>> On Tue, Sep 23, 2008 at 10:41 AM, Micah Gersten <[EMAIL PROTECTED]> wrote:
>>
>>> Eric Butera wrote:
>>>>
>>>> On Tue, Sep 23, 2008 at 12:26 PM, Jochem Maas <[EMAIL PROTECTED]>
>>>
>>> wrote:
>>>>>
>>>>> (using $this->foo or MyClass::$foo for static properties).
>>>>>
>>>> also self::
>>>>
>>>>
>>> Actually within a class, I think you must self:: before a static
>>> property or something shows up in the error log.
>>
>>
>> yea, php will think its a local variable if not qualified w/ the self
>> keyword and scope resolution (or w/e its called in php :D), but the name
>> of
>> the class and the scope resolution operator works as well. its just a
>> hair
>> less flexible because if the class name changes you have to update some
>> code
>> whereas w/ self, the code is no longer dependent upon the class name.
>>
>> /// psuedocode !
>> class A {
>> protected static $someStatic = 5;
>>
>> public function doStuff() {
>> $someStatic // php thinks this is a local var
>> self::$someStatic // php can id this as a static var
>> A::$someStatic // php can id this as a static var
>
> Nathan is correct, I'd like to add that 'self' is actually nothing more than
> a simple alias used at compile time to put the class name in ...
> 'self' literally equates to 'MyClass', but it saves hassle when refactoring
> and it's much clearer that you mean 'this class Im looking at/working in'
> .... personally whenever I see a classname referenced statically inside a
> method
> I kind of assume it must be another class :-P
>
> ... now had 'self' been late (statically) bound ... no I won't go there, we
> get
> 'static' very soon now :-P
>
>> }
>>
>> -nathan
>>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
Active Record sucks :P
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 4:25 PM, Jochem Maas <[EMAIL PROTECTED]> wrote:
> ... now had 'self' been late (statically) bound ... no I won't go there, we
> get
> 'static' very soon now :-P
and lets not forget the __*Static() magic method suite we're getting too :)
-nathan
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 4:42 PM, Eric Butera <[EMAIL PROTECTED]> wrote:
> Active Record sucks :P
>
i prefer code generation to runtime introspection, but runtime
introspection+code generation, well thats a compromise i can live w/ ;)
-nathan
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 7:20 PM, Nathan Nobbe <[EMAIL PROTECTED]> wrote:
> On Tue, Sep 23, 2008 at 4:42 PM, Eric Butera <[EMAIL PROTECTED]> wrote:
>>
>> Active Record sucks :P
>
> i prefer code generation to runtime introspection, but runtime
> introspection+code generation, well thats a compromise i can live w/ ;)
>
> -nathan
>
I generate my data access objects too. It goes against my better
judgment, but performance wins out in this specific situation.
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 5:25 PM, Eric Butera <[EMAIL PROTECTED]> wrote:
> I generate my data access objects too. It goes against my better
> judgment, but performance wins out in this specific situation.
>
getting off the point of the thread (i could care less :D), but have you
seen the model taken by qcodo, propel (and likely others) where the
generated layer is extended, so that subsequent re-generation does not
interfere w/ customizations on the generated library?
-nathan
--- End Message ---
--- Begin Message ---
On Wed, Sep 24, 2008 at 1:03 AM, Nathan Rixham <[EMAIL PROTECTED]> wrote:
> Ashley Sheridan wrote:
>>
>> On Tue, 2008-09-23 at 21:23 +1000, hce wrote:
>>>
>>> Hi Ashley,
>>>
>>> The object tag is indeed working. It does not automatically play
>>> audio.mp3 from my home web server, but it does automatically play if I
>>> add an audio source value from a streaming server. Can you make it
>>> work to play the audio automatically from a normal web server not
>>> streaming server?
>>>
>>> Thanks.
>>>
>> As far as I'm aware it should play from any server. What kind of paths
>> are you putting into the object tag? Absolute or relative and is it a
>> URL or local resource?
>>
>>
>> Ash
>> www.ashleysheridan.co.uk
>>
>
>
> when the file isn't in a streaming server you have buffering to contend
> with; odds are it won't play the file till it's completely downloaded
> [regardless of autoplay/autostart]
I am not sure if it is a buffering problem or not. I am baffled as I
can play from opening a file file:///home/webserver/audio.html, but
could not play it if I play from an URL
http::/www.myweb.com/audio.php, the audio.php generate the same
content of the audio.html.
> A few questions:
> Why don't you just link to the audio.mp3 file and let the users browser/pc
> determine how best to play it [normal]?
I am sure you have many ways to play an mp3 file, that was not what I
was asking for. My intention is to learn and understand the PHP and
HTML program, and to resolve problems. It bothers me as I could not
unserstand why the URL way does not work as it should.
--- End Message ---
--- Begin Message ---
> > when the file isn't in a streaming server you have buffering to
> contend
> > with; odds are it won't play the file till it's completely downloaded
> > [regardless of autoplay/autostart]
>
> I am not sure if it is a buffering problem or not. I am baffled as I
> can play from opening a file file:///home/webserver/audio.html, but
> could not play it if I play from an URL
> http::/www.myweb.com/audio.php, the audio.php generate the same
> content of the audio.html.
>
> > A few questions:
> > Why don't you just link to the audio.mp3 file and let the users
> browser/pc
> > determine how best to play it [normal]?
>
> I am sure you have many ways to play an mp3 file, that was not what I
> was asking for. My intention is to learn and understand the PHP and
> HTML program, and to resolve problems. It bothers me as I could not
> unserstand why the URL way does not work as it should.
As a general rule, check what happens when you do wget -S on the URL and see
what the browser sees.
You may find that the file is being buffered by PHP and is "too slow" for an
mp3 player.
A simple loop to close all output buffers will fix that issue.
Of course, you could find something else completely different...
Like the wrong "Content-type" that the browsers will ignore in favor of the
.mp3 URL ending, or any number of things...
For sure, a simple straight-forward HTTP mp3 file spewing out should work just
fine.
_______________________________________________________
The information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial use of the individual or entity to which it is
addressed and may contain information that is propri-
etary and confidential. If you are not the intended
recipient of this message you are hereby notified that
any review, dissemination, distribution or copying of
this message is strictly prohibited. This communica-
tion is for information purposes only and should not
be regarded as an offer to sell or as a solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be secure or error-
free. P6070214
--- End Message ---
--- Begin Message ---
On Wed, Sep 24, 2008 at 9:56 AM, Richard Lynch <[EMAIL PROTECTED]> wrote:
> As a general rule, check what happens when you do wget -S on the URL and see
> what the browser sees.
Thanks Richard and all responses. That was the best PHP and HTML debug
I've learned so far. I always find it is difficult to debug html and
JS when doing PHP program. I can debug C/C++ using gdb well but no
idea what the tools can be used for browser debug.
Anyway, the problem has been resolved. It turns out it was an
authorisation issue. My web server requests a log in at beggin,
although I can see every pages and download other data and image
files, somehow it cannot download the mp3 file. As soon as I remove
the login, it works fine.
Appreciate all of your helps and responses.
Cheers.
--- End Message ---
--- Begin Message ---
On Wed, 2008-09-24 at 17:03 +1000, hce wrote:
> On Wed, Sep 24, 2008 at 9:56 AM, Richard Lynch <[EMAIL PROTECTED]> wrote:
> > As a general rule, check what happens when you do wget -S on the URL and
> > see what the browser sees.
>
> Thanks Richard and all responses. That was the best PHP and HTML debug
> I've learned so far. I always find it is difficult to debug html and
> JS when doing PHP program. I can debug C/C++ using gdb well but no
> idea what the tools can be used for browser debug.
>
> Anyway, the problem has been resolved. It turns out it was an
> authorisation issue. My web server requests a log in at beggin,
> although I can see every pages and download other data and image
> files, somehow it cannot download the mp3 file. As soon as I remove
> the login, it works fine.
>
> Appreciate all of your helps and responses.
>
> Cheers.
>
For debugging PHP there is PHPDebug, which is like an add-on that gives
debug output comparable to ColdFusion or ASP.Net (or so I've heard.) It
might be worth having a quick look into that if you think it will be of
any help.
Ash
www.ashleysheridan.co.uk
--- End Message ---
--- Begin Message ---
On Tue, 23 Sep 2008 19:48:12 +0200, Per Jessen wrote:
>Simcha Younger wrote:
>
>> I often put a number of empty lines at the end of a script since I
>> enjoy editing with the script higher up on the screen, and very few
>> editors allow you to scroll the last lines of the program above the
>> bottom of the screen. (Crimson Editor is the only one I have found
>> that does this.)
>
>vi has no problem doing that.
Geany does this too, unless you ask it not to (preferences).
--
Ross McKay, Toronto, NSW Australia
"Let the laddie play wi the knife - he'll learn"
- The Wee Book of Calvin
--- End Message ---
--- Begin Message ---
The typical way to access a variable or instance from inside a
function/method is to either declare it a global variable or pass it as
a argument. Is there any reason why someone shouldn't use static class
variables to do this? Ex:
<?php
class Foo {
public static $bar_instance;
}
class Bar {
public function do_something() {}
}
Foo::$bar_instance = new Bar;
function foo_bar() {
Foo::$bar_instance->do_something();
}
foo_bar();
?>
Crude example but imagine this on a larger scale. I'm thinking there may
be some kind of php optimization that this would hamper or something to
that effect.
--- End Message ---
--- Begin Message ---
> -----Original Message-----
> From: Ryan Panning [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, September 23, 2008 8:03 PM
> To: [EMAIL PROTECTED]
> Subject: [PHP] Using Static Class Variables to Access Globally
>
> The typical way to access a variable or instance from inside a
> function/method is to either declare it a global variable or pass it as
> a argument. Is there any reason why someone shouldn't use static class
> variables to do this? Ex:
>
> <?php
> class Foo {
> public static $bar_instance;
> }
>
> class Bar {
> public function do_something() {}
> }
>
> Foo::$bar_instance = new Bar;
>
> function foo_bar() {
> Foo::$bar_instance->do_something();
> }
>
> foo_bar();
> ?>
>
> Crude example but imagine this on a larger scale. I'm thinking there
> may
> be some kind of php optimization that this would hamper or something to
> that effect.
I can't think of any particular reason to not do this.
_______________________________________________________
The information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial use of the individual or entity to which it is
addressed and may contain information that is propri-
etary and confidential. If you are not the intended
recipient of this message you are hereby notified that
any review, dissemination, distribution or copying of
this message is strictly prohibited. This communica-
tion is for information purposes only and should not
be regarded as an offer to sell or as a solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be secure or error-
free. P6070214
--- End Message ---
--- Begin Message ---
On Tue, Sep 23, 2008 at 7:03 PM, Ryan Panning <[EMAIL PROTECTED]> wrote:
> The typical way to access a variable or instance from inside a
> function/method is to either declare it a global variable or pass it as a
> argument. Is there any reason why someone shouldn't use static class
> variables to do this? Ex:
>
> <?php
> class Foo {
> public static $bar_instance;
> }
>
> class Bar {
> public function do_something() {}
> }
>
> Foo::$bar_instance = new Bar;
>
> function foo_bar() {
> Foo::$bar_instance->do_something();
> }
>
> foo_bar();
> ?>
>
> Crude example but imagine this on a larger scale. I'm thinking there may be
> some kind of php optimization that this would hamper or something to that
> effect.
>
in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined. you still have the same
'global' scope, except that the data doesnt have to be public. (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).
supposedly php has in the rfc about static classes to add __setStatic() &
__getStatic(), but support isnt there yet, and im starting to doubt it will
be available for 5.3 =/
-nathan
--- End Message ---
--- Begin Message ---
Nathan Nobbe wrote:
in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined. you still have the same
'global' scope, except that the data doesnt have to be public. (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).
supposedly php has in the rfc about static classes to add __setStatic() &
__getStatic(), but support isnt there yet, and im starting to doubt it will
be available for 5.3 =/
-nathan
Interesting point about the singleton option. I'll have to think about
that one.
I can assure you that __set/getStatic() will not make it in 5.3. I've
already contacted the author of that RFC, they confirmed it won't make
it. :( I'm just glad late static binding made it.
--- End Message ---
--- Begin Message ---
Nathan Nobbe wrote:
in many cases, people like to drive client code through methods, which,
given the current set of language features in php, could be reason to favor
a singleton w/ __get() & __set() methods defined. you still have the same
'global' scope, except that the data doesnt have to be public. (im not
saying its bad to use public vars, im merely presenting an alternative
perspective).
/me prefers singleton with __get and __set but each to their own :)
I quite like the fact that the __construct of the singleton itself can
fill up the variables that are accessed via __get and from then on rogue
code cannot overwrite them (assuming you do not implement a __set!)
Col
--
Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/
Day Job:
Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
Mandriva Linux Contributor [http://www.mandriva.com/]
PulseAudio Hacker [http://www.pulseaudio.org/]
Trac Hacker [http://trac.edgewall.org/]
--- End Message ---
--- Begin Message ---
Is there any reason why the logic behind define() couldn't be pushed down to
class const?
Code like this is kinda fugly:
//It's okay here, but not in a class?
define('CACHE_DIR_LONG', CONFIG_ROOT_PATH . '/cache/');
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CACHE_DIR_LONG;
I'd really prefer to write:
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';
I'm happy to add it as a feature request, but not if somebody reliable says
"Don't Bother"...
--
Richard Lynch
_______________________________________________________
The information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial use of the individual or entity to which it is
addressed and may contain information that is propri-
etary and confidential. If you are not the intended
recipient of this message you are hereby notified that
any review, dissemination, distribution or copying of
this message is strictly prohibited. This communica-
tion is for information purposes only and should not
be regarded as an offer to sell or as a solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be secure or error-
free. P6070214
--- End Message ---
--- Begin Message ---
Richard Lynch schrieb:
Is there any reason why the logic behind define() couldn't be pushed down to
class const?
Code like this is kinda fugly:
//It's okay here, but not in a class?
define('CACHE_DIR_LONG', CONFIG_ROOT_PATH . '/cache/');
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CACHE_DIR_LONG;
I'd really prefer to write:
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';
I'm happy to add it as a feature request, but not if somebody reliable says "Don't
Bother"...
--
Richard Lynch
_______________________________________________________
The information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial use of the individual or entity to which it is
addressed and may contain information that is propri-
etary and confidential. If you are not the intended
recipient of this message you are hereby notified that
any review, dissemination, distribution or copying of
this message is strictly prohibited. This communica-
tion is for information purposes only and should not
be regarded as an offer to sell or as a solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be secure or error-
free. P6070214
Hi Richard,
the define function is to be used on the global scope of your
application. This is helpful to assign Configurations Options and other
data that you do not will move. For the Class Constants you define the
Constant only fo the Class where you are working.
Please read the documentation about this on PHP.NET
http://de.php.net/manual/en/language.oop5.constants.php
Regards
Carlos
--- End Message ---
--- Begin Message ---
the define function is to be used on the global scope of your
application. This is helpful to assign Configurations Options and other
data that you do not will move. For the Class Constants you define the
Constant only fo the Class where you are working.
Please read the documentation about this on PHP.NET
http://de.php.net/manual/en/language.oop5.constants.php
Re-read what he said.
What he wants to do is use a previous class constant in another one.
With defines, you can do:
define('VAR_1', 'This is var 1');
define('VAR_2', VAR_1 . ' plus some more on the end');
You cannot do a similar thing with class constants (you get parse
errors), he's asking why.
--
Postgresql & php tutorials
http://www.designmagick.com/
--- End Message ---
--- Begin Message ---
Richard Lynch schreef:
Is there any reason why the logic behind define() couldn't be pushed down to
class const?
probably no reason why it couldn't but from what I gather there is a specific
reason wht it works like this: speed.
const is compile time, define is runtime
IIRC const was made this way in order to make it fast.
I also recall posts by Matt Wilmas on internals regarding a patch for 'constant
expression
folding' which allows simple expressions in const definitions (whilst keeping
the compile
time speed) ... I think it made it in to 5.3 but you'd have to check.
Code like this is kinda fugly:
//It's okay here, but not in a class?
define('CACHE_DIR_LONG', CONFIG_ROOT_PATH . '/cache/');
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CACHE_DIR_LONG;
I'd really prefer to write:
class Cache {
const CACHE_DIR = '/dev/shm/cache/';
const CACHE_TTL = 300; //5 minutes
const CACHE_DIR_LONG = CONFIG_ROOT_PATH . '/cache/';
talking of fugly, your declaring a class, from a purists POV it really
shouldn't contain such values in it's definition ... these are things
you set when initializing the class/object for use. :-P
I'm happy to add it as a feature request, but not if somebody reliable says "Don't
Bother"...
I'd go with "Don't Bother" ... although check the internals archives
as your desired feature may actually be on it's way in, in some form.
--
Richard Lynch
_______________________________________________________
The information in this email or in any file attached
hereto is intended only for the personal and confiden-
tial use of the individual or entity to which it is
addressed and may contain information that is propri-
etary and confidential. If you are not the intended
recipient of this message you are hereby notified that
any review, dissemination, distribution or copying of
this message is strictly prohibited. This communica-
tion is for information purposes only and should not
be regarded as an offer to sell or as a solicitation
of an offer to buy any financial product. Email trans-
mission cannot be guaranteed to be secure or error-
free. P6070214
bla bla bla.
--- End Message ---
--- Begin Message ---
<http://phparch.cn/index.php/php/34-php-basics/202-the-data-literacy-test>The
Data Literacy Test:
http://www.phparch.cn/index.php/php/34-php-basics/202-the-data-literacy-test
--
With best regards,
Shelley Shyan
http://www.phparch.cn
--- End Message ---
--- Begin Message ---
On Mon, Sep 22, 2008 at 4:04 PM, Thodoris <[EMAIL PROTECTED]> wrote:
>
>> $win = stripos(PHP_OS, 'win') !== false ? true : false;
> Perhaps you could also use this as an alternative:
>
> http://gr.php.net/manual/en/function.php-uname.php
Thanks Thodoris and Anderson. Sorry for not clear about the question.
I mean to detect the OS in Host system where the browser is located,
not the SERVER OS.
--- End Message ---
--- Begin Message ---
Hi,
As a follow up, I've just switched from Paypal to Google Checkout.
Setup was quick and pain free (easily less than 2 hours), and I would
recommend it (so far). Like other people have said though, it's just
UK and USA at the moment.
--
Richard Heyes
HTML5 Graphing for FF, Chrome, Opera and Safari:
http://www.phpguru.org/RGraph
--- End Message ---
--- Begin Message ---
I'm looking at using this myself for an upcoming project..
Do you know if they force customers to sign up with a google account
before processing or can they just put in card details and be done
with it?
Thanks,
Steve
On Wed, Sep 24, 2008 at 10:59 AM, Richard Heyes <[EMAIL PROTECTED]> wrote:
> Hi,
>
> As a follow up, I've just switched from Paypal to Google Checkout.
> Setup was quick and pain free (easily less than 2 hours), and I would
> recommend it (so far). Like other people have said though, it's just
> UK and USA at the moment.
>
> --
> Richard Heyes
>
> HTML5 Graphing for FF, Chrome, Opera and Safari:
> http://www.phpguru.org/RGraph
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Stephen Wellington
07956 042387
01865 280000 ext 12438
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
--
Stephen Wellington
07956 042387
01865 280000 ext 12438
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
--- End Message ---