If Objective-C is a gold Canadian dollar, Smalltalk is the Aureus die from which the imperial roman wealth was forged.
Beautiful. Because of that imagery, I'm looking more into Smalltalk now.
Deleted comment
"Wrote" my own over the last few days, but was told by fellow CL'ers it's already been done.
What I did was generate the database tables, the html form rendering code (each class as a form), the server side function to validate the form input along with the client-side input validating javascript. That is:
(defview user ()
((name :type string :display-info :text)
(passwd :type string :display-info :password)))
generates all of the following:1) A CLSQL Object<-->RDBMS ORM thinggie. The class definition defines a table in the database (transparently), and each class instansiation creates a database record. You use (find-object :class 'user :id objec-id) to get it back; the code takes care of mapping a SQL select result-set to a single USER object or a list of objects.
2) It automatically generates DISPLAY-USER method for each class, which generates a semantically sane HTML form. For has id="user_class" and class="defview". You can customize the "rendering" of each class by customizing the unique element ID, or the whole set of generated views by customizing the CSS class.
3) It automatically generates the viewing page example.com/class-name, and it takes arguments as example.com/class-name/object-id. If not object ID is supplied you get an object creation form where all the editable slots are rendered.
4) It automatically generates example.com/class-name/validate, which is a server side script which you can use to validate the input of /class-name the creation method.
--
I have been on this fucker for the last 3 days and today I reverse engineered a whole site from a database of 34 tables. In ONE day. Took me two days to write the macro to do this, but I did it, and it's not pretty.
So far it jus supported html input types text and password, and textarea. I added a new "widget" called :label, which is input text with readonly="true".
My Ajax-fu is still weak and i am sick of this hack of mine already. Specially since someone told me there established tools that do this. UnCommonWeb and Lisp on Lines.
meh.
They all work fabulously and I can't imagine why I'd spend time trying to change tools, when I can get better at designing software and business processes.
Also, since its a completely client-side framework, it can still work together with server-side frameworks like Sinatra and Rails. That means I haven't lost the time I spent learning Ruby.
That's not good enough for me.
I started with BASIC. I learned PERL and did some CGI stuff with it. Then I learned PHP. I used PHP for a long time, and would rate myself as expert level, especially based on writing good solid OOP code and using good OOP principles. Now, I was happy with what I could do with it... until I wasn't. It worked, but not fabulously.
Then I saw some Rails controller code, my jaw dropped, and I knew I had to learn it. My growth as a PHP dev had been, in retrospect, largely about mitigating the crappiness of PHP. Ruby is a different ballgame altogether.
I haven't had that experience with anything else since. Probably some day it will happen. But til then, the only complaint I've possibly got against Ruby/Rails/Sinatra is that deployment is not the easiest thing... and that's an ancillary problem I rarely have to deal with.
Most of the other things are new for the sake of being new.
I looked into Seaside over 2 years ago. I find it cumbersome, and I asked a question at a Seaside talk, similar to one of the other commentors here, about the templating -- which has to be done that way for the object/state serializations -- and Avi Bryant was a dick to me, to boot.
I'm sure it works great for what he's doing, but it doesn't appeal to me. I don't need or want to write revolutionary data transformation software. I want to write the best damn webapps for "boring, simple" problems that everyone else thinks are solved -- that have yet, in my mind, to ever be given a thoughtful, amazing UI.
So Ruby and Rails are practically custom-made for me -- and, as I said, they work fabulously.