Seaside
Today I noticed that Randal Schwartz has a video up where he demos Seaside, the up-and-coming web development framework based on Smalltalk. I’ve been hearing about Seaside for about two years now, but I just haven’t had the time to look into it. Actually, that’s not entirely true. I’ve been learning new tools, languages, and platforms like crazy lately, especially over the past 10 months or so. But almost all of that has been driven by the need – real or perceived – of clients or potential clients or my own product development. Seaside, while interesting, doesn’t have the clear “this piece goes here” aspect that has warranted focused attention. Still, every now and then I’d see some mention of Seaside on Hacker News or proggit and my ears would perk up.
I don’t know Randal, aside from his reputation in the Perl community. But apparently at some point last year he went all Paul-of-Tarsus over Seaside. Ever since then I’ve been seeing “Randal Schwartz” and “Seaside” together all over the place. At some point I found Randal’s Smalltalk blog and subscribed. (Btw, Vox is just awful. My 2 cents.)
Here’s what my news reader typically showed for Randal’s feed:
- Talked about Seaside to Perl guys in French Polynesia
- Suckered some Perl dudes into listening about Seaside.
- Seaside talk @ North Pole
- I snuck my Seaside talk into another Perl conference.
- More Seaside talking
Of course I’m exaggerating. But not as much as you’d think. He seems to take a special pleasure in sneaking up on Perl programmers with Smalltalk. And he really does seem to get around. But for all of that, there never seemed to be a video. So I was left to wonder: What is the big deal with Seaside?
[Full disclosure: I missed my whoppertunity to see Randal give his talk in person this year because I'm a tool and missed BarCamp.]
Early misgivings and/or questions I had about Seaside:
- If you’re going to run Smalltalk, why not just run Ruby?
- If it’s Smalltalk, it’s image-based development, right?
- Do you remotely debug the image or what?
- Can I tie this into Apache?
- Why would a JAPH like Randall give up Perl?
After watching Randal’s presentation I do feel like I understand things a little better, though most of my original questions still linger.
I won’t go over the entire talk. I took a few notes though.
- He talked about GemStone, a commercial solution that handles distributed data managment/replication, and Magma, a free solution which I guess does roughly the same thing with more work required. I spent a little over a year building a distributed fail-over system for Windows Workflow. So I can appreciate having that kind of power ready to go, and would love it in a web platform.
- I have mixed feelings about the idea of a continuation-based framework. I struggle with the idea of preserving state too much, especially with something like a web application. But honestly we do a lot of state management in other platforms just to maintain sessions. So I’m not so sure it matters. I will say that the continuation scheme for Seaside seems to just fall naturally out of the capabilities of Smalltalk. Contrast this with Windows Workflow. If you know WF, you know that it didn’t just “fall out” of .Net: it was carved out with a chainsaw.
- I don’t like the sound of a “canvas” approach to doing HTML. He describes it just like doing 2D graphics drawing, except instead of a canvas or DC you have an HTML “canvas” to “draw” to. I’ll have to see it hands-on to be sure I understand it, but in general I’m against programmatic HTML generation. I think this is one of the fundamental mistakes which happened with Perl web development. I believe strongly in the separation there, and also in the idea of assembling and transforming documents rather than building them programmatically.
- While I have misgivings about image-based development (especially after breaking my first Squeak image in about 10 mins a few years back), I really, really like the idea of being able to do live debugging. That’s one of the few things I liked about classic VB: You could make changes and continue on. Smalltalk seems to take that all the way down to the VM, which sounds great. I would have killed for that ability in Perl and would love it in Python.
Toward the end of the talk, Randal sat down to do a demo. Unfortunately, the knucklehead behind the camera followed Randal instead of focusing on the screen, so we see almost none of the code or the Smalltalk environment he’s using. (WTF?! Why do the camera people always focus on the speaker during technical presentations? That’s almost never where the action is. Granted, PPTs can get dull, but when actual code or images are being shown on the screen the camera should focus there!)
So the big payoff I expected from the video never came. I’d seen Alan Kay’s Squeak demo before though, so I was able to guess a little about what was on the screen and still got some value out of the video. Here are a few thoughts from that portion:
- After not looking at Smalltalk in about 4 years and having learned Scheme in the interim, Smalltalk seems much more lispy than I remember. I guess my perspective has changed.
- It is still not entirely clear how (or if) you can do remote debugging of the web app if you’re executing it on a server.
- Seaside seems to emphasize or rely upon a lot of round-trips. It also seems to focus on owning the entire app, whereas the trend lately has been toward pulling together apps from smaller pieces with an ajaxy front end.
Hurdles I foresee with Seaside:
- People have to understand continuations or have them abstracted to the point where everything is “magic” and they don’t understand anything.
- People have to learn Smalltalk. There seem to be a lot of languages to learn these days. Randal says he can teach you the syntax for Smalltalk in 30 minutes. Big deal! I learned the syntax for Scheme in about 10 minutes and I still don’t know what the hell I’m doing with Scheme or Lisp. Syntax is usually the easy part. Libraries and idioms are the hard part of learning a language. (Most of the time anyway. I found Erlang to be an exception.)
- The number of competing Web frameworks seems to be growing at a geometric rate right now.
- No high volume apps running it. Perl has Slashdot, Rails has (for better or worse) Twitter. Django has the Washington Post. PHP has Wordpress (and everything else ever). What’s Seaside got? Dabble DB is mentioned often, but it isn’t on that same level.
Randal gave a nice talk and demo, but it’s one of those subjects that probably requires a few hours, not 40 mins. I was hoping with a demo video I’d have a shit-or-get-off-the-pot moment where I’d feel Seaside was either worth taking time to learn or something to toss. That didn’t happen; I’m still on the fence. For now, Seaside remains on my “someday” list.