. .


Portability and Smalltalk

February 14, 2010 18:20:13.120

I was reading Dale Henreich's post about portability and Smalltalk (riffing off Kent Beck's post), and saw something I thought made a lot of sense:

Envy and Store are not viable candidates. Monticello is a light-weight solution compared to Store and Envy. If you can afford to port Seaside, then you can afford to port Monticello.

And in fact, the people doing Seaside (and WebVelocity) here at Cincom have ported Monticello (in fact, I did a screencaston that last summer).

Now, I like Store well enough, and I've worked with Envy. But yeah - both are too tightly wound into vendor specific solutions (Cincom, Instantiations), and both are pretty heavy. This really hit home for me when I thought about the process of loading some library (say, Silt, which I've been writing about recently). To do this with VW or ObjectStudio, you need to:

  • Load Store (the NC download does have it loaded for you)
  • Create a login for the repository (again, the NC provides a read-only one)
  • Connect to the repository
  • List the available packages
  • Going alphabetically, find Silt (the bundle, fortunately I did not create a matching package name)
  • Load it

Contrast that with something from " Talking Meta" this morning, talking about loading up some new filesystem code for Pharo:

Gofer new
     wiresong: 'mc';
     package: 'Filesystem';

Gofer seems to be a small tool Lukas built on top of Monticello to make loading (etc) easier. Now sure, you can script easy solutions for Store and Envy, too - but porting either one to another Smalltalk dialect would be a pretty big task (yes, Envy did that once. No, it won't be doing it again). Monticello though? It's pretty small, seems easy enough to port, and, being file based, can work pretty easily via http, ftp, (insert your favorite network protocol here). Neither Store nor Envy do that part. And while again, a client could be built to deal with that, it's highly unlikely to happen.

Now that Seaside is a common web framework, it seems like having a common version control system would be a good next step. I think perhaps Monticello couldbe that system - but I haven't personally done any work with it, so I could be wrong. Thoughts?

Technorati Tags: , ,

posted by James Robertson


Re: Portability and Smalltalk

[Laurent Laffont] February 15, 2010 2:01:12.446

IMHO the great thing to come in Pharo is Loader which is a tool built on top of Gofer and Metacello/Monticello. With it you can load packages like any Linux distribution, keep track of dependencies ...

or example, to load Seaside and all dependencies in Pharo:

Gofer new

squeaksource: 'Loader';

package: 'Loader';

load. "Loader is not in Pharo yet"

Loader new

load: 'Seaside28' version: ''.

And you can search:

oader new search: 'Seaside'

-> an OrderedCollection('Seaside' 'Seaside28Examples' 'Seaside28' 'Seaside30')

hen you think that Metacello handle cross platform operations and conditional loading now... [link 1]

[1 http://code.google.com/p/metacello/]

Re: Portability and Smalltalk

[Torsten] February 15, 2010 19:33:49.831

Yes, Monticello opens the door to easily package code. But you should also be aware of "Metacello" (a package management system for Monticello) where you can easily define package versions and dependencies that fit together. Such a description is stored as a configuration (for instance "ConfigurationOfSeaside") and can be used to load working versions or baselines into the image.

You can also reference existing Metacello configurations to describe the packaging of a full application - for instance reference version 3.0 of the ConfigurationOfSeaside in a ConfigurationOfMyApp, etc.

See [link 1]for an example.

Metacello is hosted here: [link 2]

[1 http://astares.blogspot.com/2010/01/pharo-10-release-candidate-2-and-image.html ]
[2 http://code.google.com/p/metacello/]

 Share Tweet This