Randal Schwartz is giving today's keynote address - he's got two halves to his talk: "Why Seaside and Smalltalk", and then "What Persistence Options" are there. The "Why" segment is useful from the standpoint of evangelism - how do you pitch it:
- Simple Syntax (easy to learn)
- Rich libraries included as source
- Extensible, unlocked classes
- Mature - lots of stuff to study
- Live debugging - surgeon, not forensic pathologist
- Edit, update, proceed - even on the web, intra-hit. This is a killer differentiator
- Testing frameworks - available and mature (invented in Smalltalk)
- Seaside includes testing for workflow

This is the point in the talk where - with a non-ST aware audience - Randal would do a basic ST demo. Another good point - Seaside avoids cross site scripting attacks by design. It's also nice that the HTML generation is in the system, which makes it easier to follow and deal with - no separation of templating language and back end.
One of the killer things - vendor choice. Unlike the old days, this web framework is cross-dialect. You can work in Squeak, Gemstone, VisualWorks, GNU ST, Dolphin. Interestingly, GNU allows for file-based development, so it obviates that argument. Instantiations is also working on getting Seaside to VA - so you have portability with an open source web framework.
Big point for outside folks: control flow of the web app is uninterrupted between hits. This makes code a lot easier to develop, as you don't have the whole servlet/page divide that causes so much grief. You write code the same way you always have in "normal" apps.
The end of dealing with form element naming problems - it's all transparent, and you just store the results in your objects. This is very, very nice compared to page/template stuff.
Randal makes the point that this talk has been very well received - and he suggests that we evengelize at BarCamps.
On to persistence - Randal notes that he's back in the Smalltalk world after many years elsewhere (mostly in Perl). This section of the talk focuses on how you take your image level data and make it live past image uptime.
Again - options here are good. There's GLORP (cross-dialect), Magma (Squeak at least, although other ports would be possible), Gemstone, and I just noticed yesterday that GOODS has been updated.
From the bottom up - you can save the image and have a background process do that periodically. Simple, and reliable enough for non-critical applications. Downside - you could save a broken image, and you could lose data.
There's also object serialization (which I use on the blog server, as it happens). Simple, file based, and backup can be as simple as automated FTP. Again, you could lose data or end up with corrupt data. File based: ReferenceStreams, SIXX, MinneStore, Omnibase, ImageSegments (this last one is used by DabbleDB). Downside - many of these projects are moribund, or little used.
GOODS is multi-language (including Smalltalk, Perl, and others). It does require configuring a server. It uses persistence via reachability. Updates get pushed at commit. Randal thinks it's a live option, but has not gotten it working on OS X yet.
Magma - local or clustered persistence, simple transation protocol. ACID fault tolerance, handles large colections, and claims to handle class migrations live. Seems to be a one man project (meaning that it hasn't caught on yet). Needs to be brought down for vacuuming, which is problematic - unsuitable for 24x7 needs. Magma is nicely integrated with Seaside.
Database options: SQLite, Postgres, ODBC, MySQL (which Randal dislikes), Oracle (et. al.).
SQLite is very cool and lightweight (does not work with modern Squeak, but it's integrated into Web Velocity :) ). PosgreSQL isa very good option - works in multiple Smalltalk systems, and has a far more complete database implementation than SQLite.
On the O/R front: GLORP (with ActiveRecord on top of it). It's pretty big, mostly under-documented, but it does ship with lots of tests. GLORP is very flexible, but needs a fair amount of setup - that's where the ActiveRecord stuff comes in to make it easier. GLORP also supports complex mappings, where different rows can map to different objects. It also supports existing schemas better than some of the other stuff.
There's also ROE - another mapper, created by Avi originally - not much doc, but does have tests. Not currently being updated, does work with Postgres.
Info sources:
Question: What are common concerns: "What about that image thing" comes up a lot. Randal tells people to give it a week. There's also old stuff about performance, and that's just not correct. The main thing is, Seaside has enough compelling advantages to get over a lot of these.
Technorati Tags:
smalltalk, smalltalk solutions