Seaside project is live!
Some months ago I decided myself to work with Seaside, and to develop all my upcoming web applications with it, if possible. If not possible, I will fall back to Rails. So far I am very happy with my decision and the current projects. One of it just went live (it's a closed application, not for public). Its a highly specific course management tool, deals with courses and subscriptions, manages course capacities, sends emails to paticipants and course leaders, generates PDF on the fly, automatically confirms courses or cancels them etc. And here is the proud footer:

It's german but you can guess the meaning. That Monticello package name as a version description really gives me the confirmation of "Yes, I've made it with seaside!" (wouldn't believe it, else).
Here are my conclusions and some internals (unordered):
- Working with Smalltalk for the problem domain is really cool (As expected).
- Having Seaside as the web framework is a productivity booster. Seaside directly improves user friendliness of your application, since it never is a problem (It's a joy!) to add an extra user interaction step here, add an extra state changing link there etc. I do not want to see the Rails code, which would do the same job...
- Gemstone as a Database really rocks. It makes you feel like there is no such thing like a database. That really, really cleans my head. And the code. Due to rather low data volume, I did not even need to create Gemstone indexes on my data.
- As a good strategy I simply created a "Database" class which holds all the top level data collections in a singleton instance, and provides a lot of querying features ("finders") and maintenance tasks. So, in the problem domain I still have a database, but not in the server domain. And that's perfect.
- For backup of the data (besides the backup of the whole Gemstone repository) I use SIXX and just periodically dump out my "database" instance to a timestamped file. SIXX dumps are also cool, because I can load in the data objects from the live Gemstone system into my Pharo/Squeak development image.
- For sending emails I use the simple command line tool "sendEmail" (not sendmail). Available as a package on most Linuxes. It supports SMTP authentication, which I needed. I execute it asynchronously so the web application will not pause while sending.
- For generating PDF I use the command line tool "htmldoc". From Smalltalk I generate a HTML file and convert it to PDF with htmldoc (via shell execution with System>>performOnServer:).
- Getting a 64bit server was one of the challenges, since all our existing servers are 32bit. Needed new infrastructure. It now runs as a KVM virtual machine with Ubuntu Hardy 64bit on a brand new Ubuntu Jaunty KVM host machine. (Good to know for the future, that Ubuntu's default since version 9.04 Jaunty is 64bit.)
- Frontend server is cherokee. I used to have lighttpd for that task, but gave cherokee a try. Nice to setup and configure. No problems so far.
- A problem was (and partly still is) the translation into german. Date names, Magritte button labels, error messages etc. I created a monticello package, which just rewrites some key methods in Gemstone, Magritte etc. And I defined a SeaShell task which installs German date names into Gemstone. Definitely no award-winning strategy, but since beeing "at the end of the pipe" quite pragmatic and OK for me.
- Deployment done with SeaShell. Improved it alot while working on that project. Good to have it as my deployment servant. It's a command line oneliner to deploy a new monticello package version to the live machine, doing a handful of steps automatically, like writing libraries to disk, flushing magritte caches, registering the application, set to deployment mode, removes the "/seaside" path prefix, defining a default entry point for the root URL etc. etc.
- A rather painful thing is that I develop on Squeak/Pharo and deploy to Gemstone. There are still some incompatibilities between those dialects (as expected) which are real pitfalls. But it's good to know, that this is beeing worked on, and it will get better and better. I did get some help from the Sport portability library (but did not manage to install the same version of it on Squeak like it is within GLASS...).
Meta conclusion: I have gained a lot of speed and productivity, having written the above mentioned helpers and libraries (will share them, if shareable) and having worked intensively with Seaside and Magritte. That gives me a very good base for future projects with seaside!
Comments
Hey Andreas, good job. Your work sounds very competitive and your tips are valuable. I like the way you send emails and generate pdf documents. I'm also using SIXX to dump backups.
Thank you for sharing these tips.
Your experience sounds really positive. Do not hesitate to report any problem between pharo and gemstone. We cannot promise that we will address them but documented them is a first step.
Stef
Andreas, thanks for sharing your experiences. I hope you will continue to do so for future projects; this stuff is really valuable for the community.
Andreas,
Nice experience report. I'd be curious what Pharo -> GS differences you encountered, since I'm developing in the same mode you are, and I've encountered a few myself:
* GemStone doesn't implement Symbol>>value: (for quick block operations, e.g. `users collect: #name`).
* GemStone doesn't implement expandMacrosWith: and friends.
I echo Stef's sentiments.
Our goal is to make the Squeak/Pharo to GemStone transition as painless as possible, so additional details will be helpful.
I will pay special attention to SPORT versions moving forward.
Hi Andreas,
nice report indeed. I have nearly the same setup like you. Why don't you develop on gemstone? For me it is far too dangerous to develop on squeak/pharo and deploy it on gemstone without having the chance to test it. I just installed a gemstone on my notebook and connect with a pharo image that has gemtools loaded.
I will have a look at seashell as I didn't start to collect my deploy and administering tools, yet. Would be good to have a repository for that.
Great to hear you have your new system up and running. Like yourself and Norbert, I also deploy web apps directly in GemStone, but I use VisualWorks as the primary development platform, and of course also use Sport to allow exactly the same code to run in both the development image and GemStone.
I hope your system is a great business success as well as being a technical success.
Regards.