Magritte 3

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

Magritte 3

Nick
Hi,

I'm pleased to announce a new version of Magritte  - Magritte 3. The rational for Magritte 3 is eloquently described by Lukas in his mail below.
The work on Magritte 3 was started by Esteban and completed by myself.

I've created a screen-cast which describes:
  •  the rational for Magritte 3
  •  the refactorings available to ease the transition from Magritte 1 or 2 to Magritte 3
  •  A walk-through of updating a sample from Magritte 2 to Magritte 3.
The screen-cast is on vimeo at:

The sample used in screen-cast can be downloaded as:

Gofer it
url: 'http://ss3.gemstone.com/ss/MagritteMagic';
package: 'ConfigurationOfMagritteMagic';
load.

(Smalltalk at: #ConfigurationOfMagritteMagic) load.

The slides used in the screen-case can be viewed on slideshare at:

http://www.slideshare.net/nickager/magritte3

Enjoy

Nick


---------- Forwarded message ----------
From: Lukas Renggli <[hidden email]>
Date: 17 November 2010 17:21
Subject: Re: Providing lookup environment for descriptions
To: "Magritte, Pier and Related Tools ..." <[hidden email]>


The way Magritte builds descriptions by default has become quite a
nuisance. I think that at some point Magritte should be improved
in that regard. I wrote a proposal this summer for how to proceed
but of course I had to finish my writing and never actually
found the time to implement it:

--------------------

I propose to perform the following (non-backward compatible) changes
in the Magritte 2 code-base to resolve some major annoyances and
issues that keep on reoccurring:

- Move descriptions from class-side to instance-side. This resolves
various issues such as cache-invalidation, instance specific
descriptions, dynamic descriptions, context dependent descriptions,
etc. Furthermore the descriptions will be closer to the code they
describe and it will be possible to describe class- and instance-side
of an object, not just the instance-side.

- Rename the method #description as the default entry point into
Magritte to #magritteDescription. This avoids common problems where
the domain model already defines such a method.

- Instead of using a naming convention for description methods, use a
pragma called <magritteDescription> to annotate the methods. And to extend and
change existing descriptions use <magritteDescription: aSelector>. Finally all
Smalltalk implementation reached a consensus of pragmas that can be
safely used cross-platform.

All in all the "new" Magritte would look like in the following
example. Imagine a shop item with the accessor #place:

  Item>>place
      ^ place

  Item>>place: aString
      place := aString

The meta-description is defined on the instance-side and annotated. It
can refer to itself for the possible places:

  Item>>placeDescription
       <magritteDescription>

      ^ MASingleOptionDescription new
          options: self possiblePlaces;
          label: 'Place of Item';
          accessor: #place;
          yourself

Class extensions can modify a description using:

  Item>>placeDescriptionXmlStorage: aDescription
      <magritteDescription: #placeDescription>

      ^ placeDescription xmlTag: 'xname'

Since these changes are not backward compatible I'll try to provide
automatic refactorings for most parts. Moving existing code to the new
codebase will certainly cause some problems, but in the long run I
believe this to be a much better approach than the current one. If
people have any feedback, concerns or other changes that would be
important in the same run I am happy to hear them.

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Lukas Renggli
Hi Nick,

Exciting news! I believe the new architecture modernizes Magritte, and
improves its usability and power by magnitudes. Keep the improvements
rolling!

Lukas

On 19 February 2012 10:30, Nick Ager <[hidden email]> wrote:

> Hi,
>
> I'm pleased to announce a new version of Magritte  - Magritte 3. The
> rational for Magritte 3 is eloquently described by Lukas in his mail below.
> The work on Magritte 3 was started by Esteban and completed by myself.
>
> I've created a screen-cast which describes:
>
>  the rational for Magritte 3
>  the refactorings available to ease the transition from Magritte 1 or 2 to
> Magritte 3
>  A walk-through of updating a sample from Magritte 2 to Magritte 3.
>
> The screen-cast is on vimeo at:
> http://vimeo.com/37032840
>
> The sample used in screen-cast can be downloaded as:
>
>> Gofer it
>> url: 'http://ss3.gemstone.com/ss/MagritteMagic';
>> package: 'ConfigurationOfMagritteMagic';
>> load.
>>
>> (Smalltalk at: #ConfigurationOfMagritteMagic) load.
>
>
> The slides used in the screen-case can be viewed on slideshare at:
>
> http://www.slideshare.net/nickager/magritte3
>
> Enjoy
>
> Nick
>
>
> ---------- Forwarded message ----------
> From: Lukas Renggli <[hidden email]>
> Date: 17 November 2010 17:21
> Subject: Re: Providing lookup environment for descriptions
> To: "Magritte, Pier and Related Tools ..." <[hidden email]>
>
>
> The way Magritte builds descriptions by default has become quite a
> nuisance. I think that at some point Magritte should be improved
> in that regard. I wrote a proposal this summer for how to proceed,
> but of course I had to finish my writing and never actually
> found the time to implement it:
>
> --------------------
>
> I propose to perform the following (non-backward compatible) changes
> in the Magritte 2 code-base to resolve some major annoyances and
> issues that keep on reoccurring:
>
> - Move descriptions from class-side to instance-side. This resolves
> various issues such as cache-invalidation, instance specific
> descriptions, dynamic descriptions, context dependent descriptions,
> etc. Furthermore the descriptions will be closer to the code they
> describe and it will be possible to describe class- and instance-side
> of an object, not just the instance-side.
>
> - Rename the method #description as the default entry point into
> Magritte to #magritteDescription. This avoids common problems where
> the domain model already defines such a method.
>
> - Instead of using a naming convention for description methods, use a
> pragma called <magritteDescription> to annotate the methods. And to extend
> and
> change existing descriptions use <magritteDescription: aSelector>. Finally
> all
> Smalltalk implementation reached a consensus of pragmas that can be
> safely used cross-platform.
>
> All in all the "new" Magritte would look like in the following
> example. Imagine a shop item with the accessor #place:
>
>   Item>>place
>       ^ place
>
>   Item>>place: aString
>       place := aString
>
> The meta-description is defined on the instance-side and annotated. It
> can refer to itself for the possible places:
>
>   Item>>placeDescription
>        <magritteDescription>
>
>       ^ MASingleOptionDescription new
>           options: self possiblePlaces;
>           label: 'Place of Item';
>           accessor: #place;
>           yourself
>
> Class extensions can modify a description using:
>
>   Item>>placeDescriptionXmlStorage: aDescription
>       <magritteDescription: #placeDescription>
>
>       ^ placeDescription xmlTag: 'xname'
>
> Since these changes are not backward compatible I'll try to provide
> automatic refactorings for most parts. Moving existing code to the new
> codebase will certainly cause some problems, but in the long run I
> believe this to be a much better approach than the current one. If
> people have any feedback, concerns or other changes that would be
> important in the same run I am happy to hear them.
>
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>



--
Lukas Renggli
www.lukas-renggli.ch
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

ccrraaiigg
In reply to this post by Nick

     Wonderful!


-C

--
Craig Latta
www.netjam.org/resume
+31   6 2757 7177
+ 1 415  287 3547


_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Jan van de Sandt
In reply to this post by Nick
Hello Nick,

Thanks very much guys! I'm going to try this out in the coming weeks. The automatic refactorings are really cool.

Jan.


On Sun, Feb 19, 2012 at 10:30 AM, Nick Ager <[hidden email]> wrote:
Hi,

I'm pleased to announce a new version of Magritte  - Magritte 3. The rational for Magritte 3 is eloquently described by Lukas in his mail below.
The work on Magritte 3 was started by Esteban and completed by myself.

I've created a screen-cast which describes:
  •  the rational for Magritte 3
  •  the refactorings available to ease the transition from Magritte 1 or 2 to Magritte 3
  •  A walk-through of updating a sample from Magritte 2 to Magritte 3.
The screen-cast is on vimeo at:

The sample used in screen-cast can be downloaded as:

Gofer it
url: 'http://ss3.gemstone.com/ss/MagritteMagic';
package: 'ConfigurationOfMagritteMagic';
load.

(Smalltalk at: #ConfigurationOfMagritteMagic) load.

The slides used in the screen-case can be viewed on slideshare at:

http://www.slideshare.net/nickager/magritte3

Enjoy

Nick


---------- Forwarded message ----------
From: Lukas Renggli <[hidden email]>
Date: 17 November 2010 17:21
Subject: Re: Providing lookup environment for descriptions
To: "Magritte, Pier and Related Tools ..." <[hidden email]>


The way Magritte builds descriptions by default has become quite a
nuisance. I think that at some point Magritte should be improved
in that regard. I wrote a proposal this summer for how to proceed
but of course I had to finish my writing and never actually
found the time to implement it:

--------------------

I propose to perform the following (non-backward compatible) changes
in the Magritte 2 code-base to resolve some major annoyances and
issues that keep on reoccurring:

- Move descriptions from class-side to instance-side. This resolves
various issues such as cache-invalidation, instance specific
descriptions, dynamic descriptions, context dependent descriptions,
etc. Furthermore the descriptions will be closer to the code they
describe and it will be possible to describe class- and instance-side
of an object, not just the instance-side.

- Rename the method #description as the default entry point into
Magritte to #magritteDescription. This avoids common problems where
the domain model already defines such a method.

- Instead of using a naming convention for description methods, use a
pragma called <magritteDescription> to annotate the methods. And to extend and
change existing descriptions use <magritteDescription: aSelector>. Finally all
Smalltalk implementation reached a consensus of pragmas that can be
safely used cross-platform.

All in all the "new" Magritte would look like in the following
example. Imagine a shop item with the accessor #place:

  Item>>place
      ^ place

  Item>>place: aString
      place := aString

The meta-description is defined on the instance-side and annotated. It
can refer to itself for the possible places:

  Item>>placeDescription
       <magritteDescription>

      ^ MASingleOptionDescription new
          options: self possiblePlaces;
          label: 'Place of Item';
          accessor: #place;
          yourself

Class extensions can modify a description using:

  Item>>placeDescriptionXmlStorage: aDescription
      <magritteDescription: #placeDescription>

      ^ placeDescription xmlTag: 'xname'

Since these changes are not backward compatible I'll try to provide
automatic refactorings for most parts. Moving existing code to the new
codebase will certainly cause some problems, but in the long run I
believe this to be a much better approach than the current one. If
people have any feedback, concerns or other changes that would be
important in the same run I am happy to hear them.

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Julian Fitzell-2
In reply to this post by ccrraaiigg
Nice! Thanks for your work, Nick and Esteban.

On Sun, Feb 19, 2012 at 10:02 AM, Craig Latta <[hidden email]> wrote:

>
>     Wonderful!
>
>
> -C
>
> --
> Craig Latta
> www.netjam.org/resume
> +31 6 2757 7177
> + 1 415 287 3547
>
>
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Tudor Girba-2
Great work!

Doru


On Mon, Feb 20, 2012 at 2:40 AM, Julian Fitzell <[hidden email]> wrote:

> Nice! Thanks for your work, Nick and Esteban.
>
> On Sun, Feb 19, 2012 at 10:02 AM, Craig Latta <[hidden email]> wrote:
>>
>>     Wonderful!
>>
>>
>> -C
>>
>> --
>> Craig Latta
>> www.netjam.org/resume
>> +31 6 2757 7177
>> + 1 415 287 3547
>>
>>
>> _______________________________________________
>> seaside mailing list
>> [hidden email]
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> _______________________________________________
> seaside mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



--
www.tudorgirba.com

"Every thing has its own flow"
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Karsten Kusche
does anyone know how Squeak specific the current implementation is? or in other words: how hard would it be to port that to VW?

Kind Regards
Karsten


-- 
Karsten Kusche - Dipl. Inf. - [hidden email]
Georg Heeg eK - Köthen
Handelsregister: Amtsgericht Dortmund A 12812 

Am Montag, 20. Februar 2012 um 11:09 schrieb Tudor Girba:

Great work!

Doru


On Mon, Feb 20, 2012 at 2:40 AM, Julian Fitzell <[hidden email]> wrote:
Nice! Thanks for your work, Nick and Esteban.

On Sun, Feb 19, 2012 at 10:02 AM, Craig Latta <[hidden email]> wrote:

    Wonderful!


-C

--
Craig Latta
+31 6 2757 7177
+ 1 415 287 3547


_______________________________________________
seaside mailing list
_______________________________________________
seaside mailing list



--

"Every thing has its own flow"
_______________________________________________
seaside mailing list


_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Philippe Marschall
In reply to this post by Nick
2012/2/19 Nick Ager <[hidden email]>:

> Hi,
>
> I'm pleased to announce a new version of Magritte  - Magritte 3. The
> rational for Magritte 3 is eloquently described by Lukas in his mail below.
> The work on Magritte 3 was started by Esteban and completed by myself.
>
> I've created a screen-cast which describes:
>
>  the rational for Magritte 3
>  the refactorings available to ease the transition from Magritte 1 or 2 to
> Magritte 3
>  A walk-through of updating a sample from Magritte 2 to Magritte 3.
>
> The screen-cast is on vimeo at:
> http://vimeo.com/37032840
>
> The sample used in screen-cast can be downloaded as:
>
>> Gofer it
>> url: 'http://ss3.gemstone.com/ss/MagritteMagic';
>> package: 'ConfigurationOfMagritteMagic';
>> load.
>>
>> (Smalltalk at: #ConfigurationOfMagritteMagic) load.
>
>
> The slides used in the screen-case can be viewed on slideshare at:
>
> http://www.slideshare.net/nickager/magritte3

Great work, nice video. Very cool (and useful) to use the rewrite
engine to help porting.

Cheers
Philippe
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Nick
In reply to this post by Karsten Kusche
Hi,

does anyone know how Squeak specific the current implementation is? or in other words: how hard would it be to port that to VW?

As I mentioned in the video most of the work is isolated within MAPragmaBuilder and I believe a previous version of Magritte has already been ported to VW, so I imagine an initial port would be fairly straightforward.

However adding refactoring work and the xml and json converting add-ons could take add sometime.

Of course if anyone is willing to pay me to port to VW, I'll happily do the work...

Nick

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Philippe Marschall
2012/2/21 Nick Ager <[hidden email]>:

> Hi,
>
>> does anyone know how Squeak specific the current implementation is? or in
>> other words: how hard would it be to port that to VW?
>
>
> As I mentioned in the video most of the work is isolated within
> MAPragmaBuilder and I believe a previous version of Magritte has already
> been ported to VW, so I imagine an initial port would be fairly
> straightforward.

IIRC the Squeak/Pharo pragma API is modeled after the VW  pragma API,
so this part should be easy to port.

> However adding refactoring work and the xml and json converting add-ons
> could take add sometime.

The JSON support builds on Seaside-JSON/Javascript. This "should" work
right away.

Cheers
Philippe
_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

garduino
In reply to this post by Nick
Very interesting, Magritte is one of the more useful frameworks here, thanks by your work! Thanks also to Esteban.

I'm interested not only in the web UI but also in the Morphic UI, and when tried the example of MagritteMagic didn't worked:

(MMConference new location: 'Informatics forum'; talks: MMTalk all; asMorph) addWindow; callInWorld

This is targeted to some specific Pharo version? I can't found #addWindow nor #callInWorld even when the latest may be replaced by #openInWorld I think.

Cheers.



2012/2/19 Nick Ager <[hidden email]>
Hi,

I'm pleased to announce a new version of Magritte  - Magritte 3. The rational for Magritte 3 is eloquently described by Lukas in his mail below.
The work on Magritte 3 was started by Esteban and completed by myself.

I've created a screen-cast which describes:
  •  the rational for Magritte 3
  •  the refactorings available to ease the transition from Magritte 1 or 2 to Magritte 3
  •  A walk-through of updating a sample from Magritte 2 to Magritte 3.
The screen-cast is on vimeo at:

The sample used in screen-cast can be downloaded as:

Gofer it
url: 'http://ss3.gemstone.com/ss/MagritteMagic';
package: 'ConfigurationOfMagritteMagic';
load.

(Smalltalk at: #ConfigurationOfMagritteMagic) load.

The slides used in the screen-case can be viewed on slideshare at:

http://www.slideshare.net/nickager/magritte3

Enjoy

Nick


---------- Forwarded message ----------
From: Lukas Renggli <[hidden email]>
Date: 17 November 2010 17:21
Subject: Re: Providing lookup environment for descriptions
To: "Magritte, Pier and Related Tools ..." <[hidden email]>


The way Magritte builds descriptions by default has become quite a
nuisance. I think that at some point Magritte should be improved
in that regard. I wrote a proposal this summer for how to proceed
but of course I had to finish my writing and never actually
found the time to implement it:

--------------------

I propose to perform the following (non-backward compatible) changes
in the Magritte 2 code-base to resolve some major annoyances and
issues that keep on reoccurring:

- Move descriptions from class-side to instance-side. This resolves
various issues such as cache-invalidation, instance specific
descriptions, dynamic descriptions, context dependent descriptions,
etc. Furthermore the descriptions will be closer to the code they
describe and it will be possible to describe class- and instance-side
of an object, not just the instance-side.

- Rename the method #description as the default entry point into
Magritte to #magritteDescription. This avoids common problems where
the domain model already defines such a method.

- Instead of using a naming convention for description methods, use a
pragma called <magritteDescription> to annotate the methods. And to extend and
change existing descriptions use <magritteDescription: aSelector>. Finally all
Smalltalk implementation reached a consensus of pragmas that can be
safely used cross-platform.

All in all the "new" Magritte would look like in the following
example. Imagine a shop item with the accessor #place:

  Item>>place
      ^ place

  Item>>place: aString
      place := aString

The meta-description is defined on the instance-side and annotated. It
can refer to itself for the possible places:

  Item>>placeDescription
       <magritteDescription>

      ^ MASingleOptionDescription new
          options: self possiblePlaces;
          label: 'Place of Item';
          accessor: #place;
          yourself

Class extensions can modify a description using:

  Item>>placeDescriptionXmlStorage: aDescription
      <magritteDescription: #placeDescription>

      ^ placeDescription xmlTag: 'xname'

Since these changes are not backward compatible I'll try to provide
automatic refactorings for most parts. Moving existing code to the new
codebase will certainly cause some problems, but in the long run I
believe this to be a much better approach than the current one. If
people have any feedback, concerns or other changes that would be
important in the same run I am happy to hear them.

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside





_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Nick
Hi Germán
 
(MMConference new location: 'Informatics forum'; talks: MMTalk all; asMorph) addWindow; callInWorld

This is targeted to some specific Pharo version? I can't found #addWindow nor #callInWorld even when the latest may be replaced by #openInWorld I think.


The original works for me in my Pharo 1.3 image - I haven't tested in any other versions. Esteban would know more about this than me though

Nick 

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

garduino
mm, in a Pharo 1.3 #13315 I don't have #addWindow.


2012/2/24 Nick Ager <[hidden email]>
Hi Germán
 
(MMConference new location: 'Informatics forum'; talks: MMTalk all; asMorph) addWindow; callInWorld

This is targeted to some specific Pharo version? I can't found #addWindow nor #callInWorld even when the latest may be replaced by #openInWorld I think.


The original works for me in my Pharo 1.3 image - I haven't tested in any other versions. Esteban would know more about this than me though

Nick 

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside






_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

Nick
Hi Germán,

My apologies I've "fixed" ConfigurationOfMagritte which ConfigurationOfMagritteMagic depends on so that Magritte will load on Gemstone and I'd changed the configuration so that by default the Morphic bindings don't load.

Try again with:

---

Gofer it
package: 'ConfigurationOfMagritteMagic';
load.
(Smalltalk at: #ConfigurationOfMagritteMagic) load.

(MMConference new location: 'Informatics forum'; talks: MMTalk all; asMorph) addWindow; callInWorld

---

If you want to load Magritte without the MagritteMagic baggage but with Morphic the following should work:

Gofer it
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfMagritte3';
load.

(Smalltalk at: #ConfigurationOfMagritteMagic) project stableVersion load: #( 'Magritte-Morph').

Cheers

Nick

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Magritte 3

garduino
Yes, it works now.

Thanks!

2012/2/24 Nick Ager <[hidden email]>
Hi Germán,

My apologies I've "fixed" ConfigurationOfMagritte which ConfigurationOfMagritteMagic depends on so that Magritte will load on Gemstone and I'd changed the configuration so that by default the Morphic bindings don't load.

Try again with:

---

Gofer it
package: 'ConfigurationOfMagritteMagic';
load.
(Smalltalk at: #ConfigurationOfMagritteMagic) load.

(MMConference new location: 'Informatics forum'; talks: MMTalk all; asMorph) addWindow; callInWorld

---

If you want to load Magritte without the MagritteMagic baggage but with Morphic the following should work:

Gofer it
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfMagritte3';
load.

(Smalltalk at: #ConfigurationOfMagritteMagic) project stableVersion load: #( 'Magritte-Morph').

Cheers

Nick

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside






_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside