I deleted a post I wrote in the past on Seaside hosting, since it was out of date. I brought one I wrote on June 10, 2007 up to date with new information, and gave it a current posting date. There are 4 comments you’ll see on it that are dated from around June 10 last year.
It looks like Seaside Parasol, the Canadian commercial Seaside hosting service set up by Chris Cunnington is gone. Too bad. It would’ve been nice to see that take off. So we’re back to just having Seaside-Hosting, a free service based in Switzerland. They offer free hosting for non-commercial applications. This service does not host databases like MySQL or PostgreSQL. You can however store data inside your Squeak image. You can also store external files on the server filesystem, using them as support for your site (like graphics images), though they don’t want you using it for hosting files for download. From what I’ve heard, the people who set up Seaside-Hosting will try to accomodate you for a fee if you have requirements that go beyond what they typically offer. There’s an e-mail address you can use to contact them for this purpose on their home page.
A new feature they’ve added since I last looked is you can now set up your own domain name (using a domain registration service) and use that instead of their seasidehosting.st domain.
Where can I get Seaside?
There are a couple Seaside developers who have created their own preconfigured Squeak images you can use:
- Ramon Leon
- Damien Cassou’s “Squeak web” image. Look for “squeak-web” on this page. There you will find the image, and information on how to use it.
If you go to Ramon’s page, you get the Squeak VM and his preconfigured image in one Zip file. Ramon’s image contains a bunch of extras. I’ve used his image in the past, though it’s been a while, so some of this may have changed. In addition to Seaside it may contain Monticello (a version control system for Squeak), Magritte (a meta language in Smalltalk for creating forms, reports, and graphs, and works with Seaside), Glorp (an object-relational framework for interfacing with an external database), SUnit (a unit testing framework), Albatross (a web app. testing framework, like Watir in Ruby), Mondrian (an app. that shows you graphically how classes are related, and their properties), Toothpick (a configurable logging library), SOAP-Client for interfacing with XML web services (including .Net), Scriptaculous (an AJAX framework for creating slick web UIs), VB-Regex (a regular expression pattern matching library), and some XML parsers/frameworks, among other things.
Damien Cassou’s image contains packages for syntax highlighting, code completion, different code browsers, Seaside, AIDA/Web (another web framework/application server), Magritte, and Pier (a content management system).
One thing about Ramon’s image is it has a few customizations for running on Windows. I think it’ll run on other platforms okay, but expect to get some error messages when you first load it up.
Storing data in the image
Since Seaside-Hosting does not offer database hosting, if you want to be able to store data, you should do it within the image. One possibility I’ve mentioned before is MinneStore, an object-oriented database written entirely in Smalltalk. I’m not sure how it works. It might just store data inside the image.
A simple way of storing read-only data is to create a class, and then create a class variable within it (equivalent to a static variable inside a class in languages like C++, C#, and Java). You can create your own data structure and put it in this variable using “class side” methods (again, equivalent to static methods in traditional languages). It will remain persistent. You do not need to instantiate an object to access it. It is globally available. If you want the data structure to be updateable and accessible from multiple Seaside sessions, then you’re going to have to use semaphores to make sure operations on the data structure are atomic. That’s when it can get hairy.
Another solution is SandstoneDB, a Smalltalk persistence framework Ramon Leon developed recently. It’s designed to make object persistence as easy as possible, getting around the limitations of many object databases.