Here we have IMHO an advantage and opportunity with Smalltalk for the web apps: *JavaScript is very hard for complex apps*. For the reasons others already expressed: lack of version control, strange errors, inadequate debugging, etc. That's why they are all that preprocessors like CoffeeScript and new MS TypeScript out there - to ease development and specially maintenance of any bit more complex JS web app. So, Aida plan is to use Amber to *emit* JavaScript code to the client while still preserve all the power and beauty of developing in classical Smalltalk environment: browsers, debuggers, inspectors, version control etc. And specially to develop and long-term maintain very complex web apps, which is currently near to impossible in plain JavaScript. Such Aida webapp will be still deployed to the server but with emitting JS to the client the app will actually run quite autonomous on the client, with just syncing data changes back to the server, while all UI interactions will happen locally on the client. Another Aida plan is to bring to the web all that Smalltalk has in 80's already on UI front: MVC, dependency mechanism with real-time updating all views, which are dependent on some data change, etc. And how MVC GUI architecture ideas from 80's look like? Read from in this book (which is from 90's actually): Smalltalk An Introduction to Application Development using VisualWorks http://stephane.ducasse.free.fr/FreeBooks/HopkinsHoran/HopkinsHoran.pdf p.287: The Dependency Mechanism p.312: Introduction to Models, Views and Controllers Best regards Janko Dne 16. 10. 2012 02:43, piše blake:
I've used Wakanda, WaveMaker and Sencha and a number of other one-stop solutions and found them unsatisfactory for a variety of reasons.
Wakanda requires you to use a particular DB (NoSQL?) and is rigid about how you can lay out the tables.
I remember, with WaveMaker, all the code ended up looking like:
someObject.someOtherObject.yetAnotherObject.ownedObject.property.function() = someObject.someOtherObject.yetAnotherObject.ownedObject.property.differentFunction() * 0.5
The common feature these tools tend to have, in exchange for very slick interfaces for putting together CRUD apps is a near total lack of integration for all the things you come to expect as a modern developer: version control and other collaboration tools, test suites, refactoring, etc.
But they definitely have the gee-whiz factor going for them.
-- Janko Mivšek Aida/Web Smalltalk Web Application Server http://www.aidaweb.si