[squeak-dev] Sake/Packages

Igor Stasenko siguctua at gmail.com
Wed Apr 9 06:21:17 UTC 2008


2008/4/9 Keith Hodges <keith_hodges at yahoo.co.uk>:
> Dear All,
>
>  For those not familiar with the idea, Sake is an attempt to provide similar
> functionality to Make and Rake, only using Smalltalk as the DSL. I hope that
> Sake is simple and sufficiently useful for all Squeak forks make use of it.
>
>  I apologize that I havent had any time to document Sake in detail, as I
> would normally do... however I would like to show an example of
> Sake/Packages.  Sake/Packages is a reimplementation of Universes, using
> Sake.
>
>  Given the recent announcement that the 310 universe is now closed,  I think
> it is time for Sake/Packages to come into its own, since it provides the
> same functionality, from the same data, but is not closed, nor is editing
> restricted in any way. Also the Sake definition of a universe is simply a
> class, so you can subclass it in any way that you wish for your own
> projects.
>
>  Below is a SakeTask as generated from the universes package definition.
>  What follows is a "method", in the class PackagesSqueak310U.
>
>  So here is a Sake Task Definition for Seaside.... (info is simply a
> dictionary for non-essential meta information)
>
>  ----------
>
>  PackagesSqueak310U -i- Seaside
>
>    self name: 'Seaside'.
>    info category: 'Web Development'.
>    info description:
>  'A framework for building sophisticated web applications in Squeak. Develop
> for the web using reusable, embeddable components and unique call/return
> semantics for moving between pages.'.
>    info maintainer: 'Lukas Renggli <renggli at gmail.com>'.
>    info homepage: 'http://www.seaside.st/'.
>    info squeakMapID: ''.
>    info url: 'http://www.squeaksource.com/Seaside/Seaside2.8a1-lr.522.mcz'.
>    info version: '2.8.522'.
>    info provides: #().
>
>    self dependsOn: #('KomHttpServer').
>
>    self load: [
>        Installer
> installUrl:'http://www.squeaksource.com/Seaside/Seaside2.8a1-lr.522.mcz'.
>    ].
>
>    self unloadDependsOn: { self taskUnloadDependants }.
>    self unload: [
>        Installer unload: 'Seaside'.
>    ].
>

What i like in above, that it's self-explanatory, easy to find and
don't requires extra UI/GUI to manage package.
Any developer can describe/define own package in a few minutes as
simple as writing a method!
Just choose appropriate name for a method, like #packageConfiguration.
Then anyone can browse all packages by hitting implementors. :)

>  -------------
>
>  Notice that we have an unload block as well as a load block! This is a new
> and very experimental feature, we can now define unload scripts for each
> package, and Sake/Packages provides a way to capture and publish them for
> some or all image versions. Indeed this feature is barely tested, I mention
> it here simply to intoduce the concept.
>
>  usage:
>
>  PackagesSqueak310 new Seaside load.  or,  (PackagesSqueak310
> named:'Seaside') load.
>  PackagesSqueak310 new Seaside unload. or,  (PackagesSqueak310
> named:'Seaside') unload.
>
>  Packages/Sake is also supported by Installer in a manner similar to
> universes support, e.g.
>
>  Installer sake addPackage: 'PackagesA'; addPackage: 'PackageB'; install.
>
>  enjoy...
>
>  best regards
>
>  Keith
>
>  p.s. to load
>
>  Installer install: 'Packages'.
>
>



-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list