It was just announced that the power to our Beaverton offices will be shutdown Friday afternoon for ‘emergency’ power maintence between 1pm PST and 6pm PST.

I am looking into alternative hosting, but with such short notice, it isn’t likely that we will be able to move GemSource and the rest of the services hosted on seaside.gemstone.com. If you were planning on downloading anything Friday afternoon, you’ll need to change your plans.

[1]

Not long after shipping the SOAP update for GLASS, I started working on Metacello. With the SOAP update, it became obvious that the GLASS ‘umbrella’ package was going to have to be replaced, and soon. Well, 7 months later I am reaching the point were I am finally ready to replace the GLASS package with a Metacello configuration .

I’m going to phase in the use of Metacello with GLASS. With the initial release, we’ll use Metacello for bootstrapping GLASS into a virgin extent. This way folks starting a greenfield project can use Seaside 2.8.4 or Pier 1.2 right away. Other releases that are in the pipeline:

  • GemStone/S 64 2.4.x with partial continuations for Seaside3.0.
  • Metacello configuration for bootstrapping Seaside 3.0 (ConfigurationOfSeaside30). A Squeak/Pharo version of this configuration is available now.
  • final release of GLASS.230 package that will boot Metacello into an existing GLASS installation and allow for upgrading to GLASS 1.0-beta.0 and beyond.

GLASS 1.0-beta.0

ConfigurationOfGLASS version 1.0-beta.0 is based upon GLASS.230-dkh.231, with the following additions:

  • Seaside 2.8.4
  • Pier 1.2
  • Metacello support
  • VB-Regex loaded as part of ‘core’
  • Scriptaculous updates from Ken Treis
  • GemTools updates from Gerhard Obermann
    • optional auto abort performed before commands
    • add remove method (without any checks) renamed “remove method …” to “safe remove method …”
    • add command “browse class history”
    • add class history index to class browser title
  • browse changes fixed … reversed comparison direction so that ”Install” will install repository version. the strike-out text is what is in current image.
  • supports bootstrapping of code into virgin extent (see Bootstrapping Instructions).

Read the following sections to gain an understanding of the 1.0-beta configuration structure. If you are impatient and just want to load and go, then you can skip to the Bootstrapping Instructions.

1.0-beta Configuration Structure

With release 1.0-beta.0 there are 9 different loadable configurations defined in ConfigurationOfGLASS. If you read the code in the method ConfigurationOfGlass>>baseline10beta00:, you can see the Metacello specification summarized in the following sections.

Primary GLASS Projects

Any one (or combination) of the following projects and groups may be used as a load configuration for bootstrapping

Each of these projects is managed by it’s own ConfigurationOfxxx class.

  • Core project. ConfigurationOfGsCore manages the Core, Base-Bootstrap, Bootstrap, GemStone-Exceptions (2.x only), GemStone-Indexing-Extensions, GsRandom, Sport, Squeak and VB-Regex packages. The Core packages are fundamental to the operation of GLASS and is always loaded.
  • FastCGI project. ConfigurationOfGsFastCGI manages the FastCGIPool and FastCGI packages. The FastCGI packages are optional and are used to support FastCGI packages for Seaside2.8 and Seaside3.0.
  • Hyper project. ConfigurationOfGsHyper manages the OpenSkills and Hyper packages. The Hyper packages are optional and are used to support the Hyper packages for Seaside2.8 and Seaside3.0.
  • Magritte project. ConfigurationOfGsMagritte manages the Magritte-Model, Magritte-Tests and Magritte-Seaside packages. The Magritte packages are optional and represent the GemStone/S port of Magritte. By default only Magritte-Model and Magritte-Tests packages are loaded. To load Magritte-Seaside, it must be explicitly referenced.
  • Metacello project. ConfigurationOfMetacello manages the Metacello packages and is imported from the Metacello project. By default the Metacello-Core, Metacello-MC and Metacello-Platform packages are loaded. The Metacello packages are fundamental to the operation of GLASS.
  • Misc project. ConfigurationOfGsMisc manages the MockGemStone, SMTPMail, Utf8Encoding, Announcements, XML-Parser, SIXX, SmaCC, System-Digital-Signatures, and GemStone-Release-Support packages. The Misc packages are represent useful pieces of functionality that are contained in a single package and depend only upon the Core project. The Misc project is rarely loaded in it’s entirety. Typically individual packages are loaded from the project.
  • Monticello project. ConfigurationOfGsMonticello manages the Change-Notification, PackageInfo-Base, and Monticello packages. The Monticello packages are fundamental to the operation of GLASS.
  • OB project. ConfigurationOfGsOB manages the OmniBrower, OB-GemStone-Platfrom, OB-Monticello, OB-SUnitIntegration, OB-SUnitGUI, OB-Stanadard, OB-Tools and JadeServer packages. The OB packages are optional and provide the implementation for the GemTools.
  • Pier project. ConfigurationOfGSPier manages the Pier-Model, Pier-Blog, Pier-DesignChooser, Pier-Design, Pier-Documents, Pier-EditorEnh, Pier-Google, Pier-Links, Pier-Randomizer, Pier-Slideshow, Pier-TagCloud, and Pier-Twitter packages. The Pier packages are optional and represent the GemStone/S port of Pier.
  • Scaffolding project. ConfigurationOfGsScaffolding manages the GemStone-Scaffolding package. The Scaffolding packages are optional and representing the implementation of Scaffolding for GemStone. Even though this project consists of a single primary package, the fact that it depends upon Magritte and Scriptaculous warrants the creation of separate Metacello configuration.
  • Seaside2.8 project. ConfigurationOfGsSeaside28 manages the Seaside2.8, SeasideAsync, Scriptaculous, RSRSS2, CallDemo, CheckboxExample, CSSDock, ErrorHandler, HelloWorld, ImageDemo, LogoutDemo, MarqueeDemo, menuDemo, ScreenResolution, Store, GemStone-Store, GemStone-Examples, FastCGISeaside and HyperSeaside packages. The Seaside2.8 packages are optional and represent the GemStone/S port of Seaside. By default only the Seaside2.8 pacakge is loaded. All of the other packages must be explicitly referenced.
  • Seaside2.8 Testing project. ConfigurationOfGsSeasideTesting28 manages the SeasideTesting and PierTesting packages.
  • SOAP project. ConfigurationOfGsSoap manages the SoXML, SOAP-CORE, SOAP-Client SOAP-Server, SOAP-Example and SOAP-TestCases packages. The SOAP packages are optional and represent the GemStone/S port of SoapCore.

Convenience GLASS Projects

Groups

The following groups have been defined for the common load configurations.

As you become familiar with Metacello and the GLASS configurations, you can define your load configuration. although you probably want to become more familiar with Metacello first.

Bootstrapping Instructions

Please comment to this post or send mail to the GLASS Beta Mailing List if you have trouble or the instrcutions are not clear. The bootstrap should work for the appliance or any version of GemStone/S 2.3 or greater.

  1. Start a stone using a virgin extent copied from $GEMSTONE/bin/extent0.dbf into $GEMSTONE/seaside/data. Don’t forget to shut the stone down before copying extents around and don’t forget to make the extent writable using ‘chmod +w extent0.dbf’.
  2. Download and unzip bootstrap_1.0-beta.0.zip.
  3. cd to the bootstrap_1.0-beta.0 directory
  4. Edit the .topazini file to match your stone.
  5. Launch topaz: ‘topaz -l -T50000′
  6. ‘login’ and ‘input installMaster.topaz’
  7. Exit topaz. The ‘installMaster.topaz’ script installs the Dev Group which includes the GemTools.
  8. Launch a GemTools Client 1.0-beta.1 image and login.
  9. [Updated: later that day] Due to some bugs discovered in 1.0-beta.0, it is recommended that you update to 1.0-beta.1 by executing the following expression:
    ConfigurationOfGLASS project updateProject.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Dev'.
    System commitTransaction.
  10. Choose a configuration to load by executing one of the following expressions:
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Magritte Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'SOAP Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Seaside Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Seaside Testing Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Scaffolding Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Pier Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'Pier Testing Dev'.
    (ConfigurationOfGLASS project version: '1.0-beta.1')
        load: 'ALL'.
  11. Make a backup and have fun!

—–
[1]http://www.flickr.com/photos/dawilson/ / CC BY-NC-ND 2.0

[1]

With the 1.0-beta.1 release of the GemTools Client, we’re doing two things:

  1. Conforming to the new Metacello configuration naming convention.
  2. Getting ready for the imminent GLASS 1.0-beta.0 release.

GemTools 1.0-beta.1 features:

  • Convert to using ConfigurationOfGemTools.
  • Nicer info dialog when Undefined symbols and Unsent messages are clean
  • Support for GemStone/S 3.0 GciErrSType
  • Change restore from backup done message … do not prompt to start Seaside gems if Seaside is not installed
  • Replace dialogs that are calling “ifNotEmpty:” with: “isEmptyOrNil” (from Gerhard)
  • autoAbort _before_ commands is now optional (off by default)

If you’ve already installed the GemTools Client 1.0-beta.0, then you want to follow the Update instructions. To install the GemTools Client in a virgin Squeak or Pharo image jump to the Install instructions.

Update

With GemTools Client 1.0-beta.0 already installed, we need to update to using ConfigurationOfMetacello as well as ConfigurationOfGemTools:

  1. Load the latest version of the ConfigurationOfMetacello package  from http://seaside.gemstone.com/ss/metacello.
  2. Load the latest version of the ConfigurationOfGemTools package  from http://seaside.gemstone.com/ss/GLASSClient.
  3. Execute the following expression in a workspace:
    ConfigurationOfMetacello loadLatestVersion.
    ConfigurationOfGemTools loadLatestVersion.

Then continue with Step 3 of the installation instructions.

Installation

If you haven’t already been using the GemTools 2.3.1 Preview for all platforms (which is based on Pharo), then you should download the preview GemTools client and follow the instructions for setting up your session to verify that you can connect to your stone. You’ll need the session information and the gci files from the Preview to get things running with the either Squeak or Pharo.

I’ve tested the installation procedure using Squeak3.10.2-Trunk-090912 and pharo1.0-10492-rc1dev09.11.1.

To load GemTools into a client image:

  1. Load the latest version of the ConfigurationOfGemTools package  from http://seaside.gemstone.com/ss/GLASSClient.
  2. Execute the following expression in a workspace:
    ConfigurationOfGemTools loadLatestVersion.
  3. Execute the following expression to open the GemTools launcher:
    OGLauncher open
  4. Copy the session information from your old GemTools Client to the new GemTools Client in your image. Use the Edit session menu item on the Session Menu in the launchers.
  5. Save the image.
  6. Copy the gci files (gciForWindows.dll, gciForLinux.so, and gciForMacintosh.so) from GemTools-2.3.1-preview.app/Contents/Resources in the one-click into the directory containing your image and changes files.
  7. Press the Login button on the GemTools Launcher and you should be in business.

—–
[1]http://www.flickr.com/photos/randyweiner/ / CC BY-NC-ND 2.0

[1]

I just released version 1.0-beta.12 of Metacello this afternoon.

New Configuration class and package naming convention: ConfigurationOfxxx

The most significant change is that I’ve renamed the configuration class and Monticello package to ConfigurationOfMetacello. This is a naming convention that Tudor Girba started using for the Moose project naming the Metacello configuration class and package: ConfigurationOfMoose. If the naming convention is used all of the Metacello configurations are put in close proximity in the Class Browser (when sorted alphabetically) and the Monticello Browser, so configuration classes and packages are easy to find. It also makes it easy to recognize that Metacello is being used for a project. I am in the process of converting all of the Metacello configurations that I’m managing to use this convention.

If you’ve started a Metacello configuration you should start using the naming convention, just rename the class, and save it in a new package. Your version meta data (the important stuff) is preserved. Also don’t forget to update your class-side #ensureMetacello method to use ConfigurationOfMetacello (see the class MetacelloConfigTemplate for an up-to-date example).

ConfigurationOfMetacello available on SqueakSource

In addition to publishing the Metacello configuration on GemSource in the Metacello project, I’ve published the configuration on SqueakSource in the Metacello project to make it easier to find. The primary source repository remains on GemSource.

Load Project Version improved

The Load Project Version command was also changed with this release. The list of versions has been shortened and the current version is marked with an ‘*‘. Finally instead of loading ‘ALL’, the list of packages used the last time that the project was loaded is used. If no previous information has been recorded then the ‘default’ group is loaded. By default the previous version is not recorded. You can implement two class-side methods on your configuration to record the information (#lastMetacelloVersionLoad and #metacelloVersion:loads:. See the class MetacelloConfigTemplate for an example).

The rest of the details about the release can be found here.

If you’re curious, install Metacello into your image and take the tutorial!

—–
[1]http://www.flickr.com/photos/giuliag/ / CC BY-NC-ND 2.0

[1]

I just released version 1.0-beta.11 of Metacello this morning. It’s been in the works for a couple of weeks as I’ve been applying Metacello to GLASS. You can see a detailed list of updates here.

With GLASS, I’ve been really beating on Metacello. At this point I feel that I’ve flushed out most of the bugs and you can look for a release candidate for Metacello, in a couple of weeks.

If you’re curious, install Metacello into your image and take the tutorial!

—–
[1]Photo by Thibault Dangréaux (Creative Commons).

[1]

I just released version 1.0-beta.7 of Metacello this afternoon. Besides a handful of bugfixes, the big news for this release is that I’ve updated the Tutorial to cover project references.

I consider being able to specify a dependency upon a specific version of another project, one of the more important features of Metacello – right up there with managing platform-specific packages.

If you’re curious, install Metacello into your image and take the tutorial!

—–
[1]Photo by sonicdeviant (Creative Commons).

gs_share_everything_esug08-poster

I just recently found out that James Robertson had posted a video of my “Share Everything” talk from ESUG 2008 several months ago. I must have missed the announcement:)

An MP4 version of the talk was posted here a month ago.

And here’s a link to the slides.

[1]

Shortly after I announced the GemTools Client for Pharo, Gerhard Obermann jumped in and refactored a number of the GemTools menus using sub menus. Unfortunately, I got involved in a number of other tasks (including refining the Metacello API) before I could push his changes out. Now that Metacello is stabilized, it is time to revisit the installation and update procedures for the GemTools Client.

[Update 10/16/2009: fixed egregious errors in the installation instructions ... 2 steps and the first step was plain wrong:) ... thanks Gerhard]

[Update 11/04/2009] Please see the GemTools Client 1.0-beta.1 post for up-to-date instructions.

Installation

[Update 11/04/2009] Please see the GemTools Client 1.0-beta.1 post for up-to-date instructions.

If you haven’t already been using the GemTools 2.3.1 Preview for all platforms (which is based on Pharo), then you should download the preview GemTools client and follow the instructions for setting up your session to verify that you can connect to your stone. You’ll need the session information and the gci files from the Preview to get things running with the either Squeak or Pharo.

I’ve tested the installation procedure using Squeak3.10.2-Trunk-090912 and pharo1.0-10470-BETAdev09.10.2.

To load GemTools into a client image:

  1. Load the latest version of the GemTools-Configuration package  from http://seaside.gemstone.com/ss/GLASSClient. GemTools-Configuraton-dkh.12 is currently the most recent version.
  2. Execute the following expression in a workspace:
    GemToolsConfiguration loadLatestVersion.
  3. Execute the following expression to open the GemTools launcher:
    OGLauncher open
  4. Copy the session information from your old GemTools Client to the new GemTools Client in your image. Use the Edit session menu item on the Session Menu in the launchers.
  5. Save the image.
  6. Copy the gci files (gciForWindows.dll, gciForLinux.so, and gciForMacintosh.so) from GemTools-2.3.1-preview.app/Contents/Resources in the one-click into the directory containing your image and changes files.
  7. Press the Login button on the GemTools Launcher and you should be in business.

Last December when I first introduced the GemTools Launcher, it took 6 steps to install the GemTools Client code:

installSteps1

In July I announced the GemTools Client for Pharo (based on version 0.9 of Metacello), it took 4 steps:

installSteps2

Today it takes only 2 steps:

installSteps3

The configuration class bootstraps Gofer and Metacello, then loads FFI and finally loads the OGLauncher application code. Danged close to a one-click install:)

Update

To update the GemTools Client to a later version, you can follow the instructions for the Update…menu.

If you have any trouble join and send mail to the GLASS Beta Mailing List.

—–
[1]Photo by Okinawa Soba (Creative Commons).

[1]

Since ESUG, Tudor Girba and I have collaborated to define a shiny new API on top of the Metacello engine. I released version 1.0-beta.3 of Metacello today, so you can take the new API for a spin.

The new API is completely different than the API described in my previous post: Metacello: Package Management for Monticello. The basic concepts and functionality hasn’t changed, but the details of the API have been changed significantly.

The best way to pick up the new API is to take the tutorial or read the Metacello API Reference on the Metacello Google code project.

The following sections are intended to give you a taste of the new Metacello API.

Metacello Configuration

To create a Metacello configuration for your project, you start by copying the class MetacelloConfigTemplate to your own class (i.e., SeasideConfiguration, MetacelloConfiguration, YourProjectNameConfiguration, etc.). MetacelloConfigTemplate has a handful of helper methods defined. MetacelloConfigTemplate is a subclass of Object, so a Metacello configuration can be loaded into an image without requiring Metacello itself to be pre-loaded. The #ensureMetacello method bootstraps Metacello into an image if Metacello has not already been loaded.

Once you’ve created your project configuration class, you can start defining your project metadata.

The metadata for a project has been split into two distinct components: the baseline and the version.The baseline defines project structure and the version defines package versions.

Baseline definition

The baseline defines the structure of your project in terms of the list of packages involved, the dependencies between packages and the groupings of packages. The

baseline

The baseline structure of your project should be stable relative to the version definition.

Similar to the old versionSpec, you can specify a collection of attributes for a baseline (see the API Reference page for a full list of attributes):

  • author. The author of a particular version
  • blessing. A version can be tagged with a blessing like #alpha, #beta, #release, #development, #baseline, or any other tag that is deemed useful. The blessing is used as a version filter. For example the latest version of a Metacello project is currently defined as the latest version whose blessing is not #development or #baseline.
  • description. Useful information about the version.
  • timestamp. The create date and time for a version.
  • packages. A list of Monticello package versions that make up the project.
  • repositories. A list of Monticello repositories from which the packages can be loaded.
  • groups. An alias for a collection of packages.
  • projects (not shown). A list of Metacello configurations for other projects that a package within the current project may require. For example, you would use a project to specify the dependency that a Pier project has upon the Seaside and Magritte projects.

A baseline is a full-fledged version, so it can be loaded. When the loader encounters a package for which a specific version has not specified, the loader will load the latest version of the package from the repository.

Version definition

The version definition associates an explicit list of package versions with a named version. Once a version is snapped off, it should never change so that at any point in time one can come back to a specific version with confidence. The version gets its structural information by imported another version (typically a baseline version).

version

The same list of attributes associated with the baseline definition can be specified for the version definition.

Metacello Tools

The OB-based Metacello tools have been slightly changed since I originally wrote about them.

[Update 11/03/2009] For the most up-to-date documentation visit the  Metacello Tools page.

The Spawn New Version command has been added, the Load Project Version command has been changed and finally the  Update Package Repositories command has been eliminated.

Select a Metacello configuration class and bring up the Class menu:

newMetacelloTools

Save Packages

Finds the dirty Monticello packages that are members of the selected version of the Metacello project and saves them, prompting you for version name and commit comment. After the packages are saved you are prompted to Update Package Methods.

Spawn New Version

Genearates a new version method prompting for source version, version number and the new methods selector. The package specs for the new method reflect the currently loaded Monticello package versions, like the Update Package Methods command.

Update Package Methods

Automatically updates the package spec metadata for the selected version (i.e., modifies and compiles the methods with the #packages:attribute: pragma for the appropriate version to match the currently loaded Monticello package versions). After the methods are update you are prompted to Save Project.

Current Project Version

Displays the current version of the selected Metacello project. The version is calculated by comparing the currently loaded Monticello packages to those specified in the version spec. A leading ‘~’ means that the version is partially loaded (i.e., not all of the packages associated with the project have been loaded into the image).

[Update 11/03/2009] For the most up-to-date documentation visit the  Metacello Tools page.

Load Project Version

Prompts for the version of the selected Metacello project to be loaded, then loads all of the packages in the project using the ‘ALL’ pseudo group.

Save Project

Saves the selected Metacello project to the repository specified by the project package of the selected version. You are prompted for version name and commit comment.

Update Project

Loads the latest Monticello package version from the repository specified in the project package of the selected version of the Metacello project. Remember that you are simply loading the Metacello project metadata, so it doesn’t hurt to have the latest metadata loaded. Once the latest version is loaded, you are prompted to Load Project Version.

[Update 11/03/2009] For the most up-to-date documentation visit the  Metacello Tools page.

Loading Metacello

[Update 11/04/2009] For the most up-to-date download instructions visit the Metacello donwload page.

To use Metacello in GLASS, modifications to some base classes are needed, so you will still have to wait until I publish a GLASS package to bootstrap Metacello into GLASS.

To load Metacello into Squeak or Pharo:

  1. Load the latest version of the Metacello-Configuration-dkh.50ConfigurationOfMetacello package from http://seaside.gemstone.com/ss/metacello
  2. Execute the following expression in a workspace:
    MetacelloConfigurationConfigurationOfMetacello loadLatestVersion.

The above expression loads all of Metacello into your image (including the OB-based tools). If you want to load a minimal configuration, exucute the following expression in a workspace:


MetacelloConfigurationConfigurationOfMetacello project latestVersion load.

To learn about other loading options, take the Tutorial:)

Tutorial

The tutorial covers all of the important Metacello features in some detail. To ensure that the tutorial is loaded, execute the following expression:



MetacelloConfigurationConfigurationOfMetacello project latestVersion load: 'Metacello-Tutorial'.

Then open two class browsers on the MetacelloTutorialConfig class. In the left hand browser view the methods in the ‘lessons’ category. In the right hand browser view the ‘–all–’ category. Read the comments in lesson01 through lesson13.

Current Status

Version 1.0-beta.3 is the current version of Metacello, is feature complete and I am happy with the configuration API. I will port the new API to GLASS as part of my Seaside 3.0 porting work.

announced a SeasideConfiguration for Seaside 3.0 the other day that is based on the new Metacello API.

I have created a  Metacello Google code project for bug tracking and distributing up-to-date information about Metacello. If you run into problems with the tutorial or using Metacello, please submit a bug.

—–
[1]Photo by ahhyeah (Creative Commons).

Ken Treis gives some love to lighttpd in his post: My Favorite GLASS Front-End Server: lighttpd:

lighttpd maintains a running “load” for each FastCGI backend server. When an incoming request hits, lighttpd chooses from among the servers with the lightest load. This is exactly what I was looking for.

Photo by TW Collins (Creative Commons).

Categories

 

November 2009
M T W T F S S
« Oct    
 1
2345678
9101112131415
16171819202122
23242526272829
30