Yesterday I participated in a Google User Group Meeting at Google where presentations were made regarding SproutCore (a JavaScript framework) and Google App Engine. In this blog I will mainly focus on SproutCore as that was the main discussion topic of the night. However, I will also briefly add my two cents about the Google App Engine and Google Chrome (Google’s new browser).
First, I would like to thank Google for providing the venue and the refreshments for this meeting. Google is one of those admirable companies that really makes things happen by encouraging collaboration among developers and leaders within the tech community. It’s often that this type of collaboration is how technologies are discussed and become popular among the developer crowd, friendships and partnerships are forged, and knowledge is shared.
The Google App Engine allows developers to run web applications on Google’s infrastructure. Ryan Barrett, Lead Engineer on the Google App Engine datastore (a large-scale, distributed structured storage system used by App Engine and other Google products), discussed the advantages for developers who use Google App Engine. Developer’s can serve their app using a free domain name on the appspot.com domain. It is also possible to use Google Apps to serve it from your own domain.
There are some limitations as you would expect from a free service: A free account can use up to 500MB of persistent storage and enough CPU and bandwidth for about 5 million page views a month. At this time, which Google calls its ‘preview release’ there are no options to purchase additional resources. Another restriction for developers is the fact that currently only the Python programming language is supported. Disapproval about this restriction was definitely voiced several times throughout the night.
Of course, no developer should overlook the fact that this is a *free* service and powered by Google’s massive infrastructure.
Some additional features include:
- Access to logs
- Admin console logs
- Applications can send email messages using App Engine’s mail service
- Batch put/delete
- CPU usage details
- Image service lets your application manipulate images (resize, crop, rotate, flip).
- Memcache viewer
- Regex search
- SSL
- URL Fetch – Applications can access resources on the Internet
A few words about Google Chrome:
Ok, just because it’s backed by the famous Google brand, doesn’t mean it’s going to be a hit, and this has proven true – at least for now. I think Google Chrome has a great sleek user interface, nice features, and good functionality, but the fact is – many of the sites I visit don’t render correctly with Chrome, and some sites have functionality that just seems not to work with Chrome. In fact, when Chrome Beta launched, it had many compatibility issues with the ever-so-popular Facebook! I’m not sure if this has been fixed yet, as I only used Chrome initially when it was released then gave up on it. A Santa Clara student showcasing his new site at yesterday’s event could not get his site to render properly in Chrome (he had not tested it in Chrome previously) and he had to switch over to Firefox to get it to display correctly. I’m sure Chrome will eventually get better and grab more of the market share. For now, getting it to work properly with Facebook would definitely be a good start. Hey – I love Google and they even sponsored yesterday’s event, but I’m just stating the facts based off my experience – it is what it is, and I’m not going to jump to something just because it is slapped with the ‘Google‘ logo. I hope the browser does get better, and I do plan to give Chrome another try. For now I’ll stick with Firefox
Onto SproutCore:
Another JavaScript framework ….that’s what I thought before this presentation and to some degree what I still think afterward. There are so many frameworks popping up for this and that, it has become somewhat of a joke. Charles Jolley, the creator of SproutCore, discussed the reasons / justification behind SproutCore’s creation and the functionality it offers. He argues that with SproutCore it is possible to deliver native applications on the web that look and feel like the desktop. He states “SproutCore is a new JavaScript framework that makes it easy to harness this power in your own software.”
I was impressed with the cool, sleek looking GUI and the very fast response time as he did a demo of a simple ‘to do list’ app that he created in front of us in about 30 minutes. The core of his presentation was not just about SproutCore in particular but about the need for a paradigm shift where business logic is conducted on the front-end within the client. His argument is very convincing and I do buy into it to some extent. Charles argues that clients are much more powerful these days and can handle the extensive business logic up-front. With users expecting fast, desktop like responses from online applications, this technique can definitely help meet that goal; although, technically speaking, a browser application will never be as fast as a desktop application; I suppose the goal really is to make it as close as possible.
I agree with Charles on his three bullet points on what it takes to build a desktop-like app on the web:
- Immediate response time
- Rich interactive model
- Offline mode
One example he used was Flickr. Flickr is great, but it is a web page that looks and feels very much like a web page – not a desktop-like application.
AJAX was also mentioned but in the context of “a step in the right direction.” With AJAX you still have business logic running on the server with a tiny amount of the code running within the client – this is not really changing the way we write applications.
Charles also focused on the concept of a Microservice. What is a Microservice?
- API is over the cloud
- Designed for speed + scale
- Business logic within the client
SproutCore is inspired from Cocoa (Apple’s name for the collection of frameworks, APIs, and accompanying runtimes that make up the development layer of Mac OS X). It does not copy the Cocoa framework but provides a similar framework which keeps a small API while covering a lot of application areas). SproutCore is somewhere around 350 kB, but Charles makes the argument that this is because SproutCore covers a lot of application areas which in return means your application code will be much smaller. Also, SproutCore can help provide common app features for free, optimize across web browsers, and eliminate glue code.
SproutCore Features:
- Full MVC Framework
- Embraces JavaScript
- Bindings
- Key-value Observing
- Includes build tools
- Supports Chrome, Safari, FireFox, IE7
Perhaps the biggest shortcoming is that IE6 is not supported by SproutCore. IE6 still commands a large enough market share (20.2% as of October 2008 according to W3C) and warrants concern for some developers.
Final Word
SproutCore is worth further investigation as it seems to offer a lot of functionality and very cool looking GUI possibilities. My biggest concern is the IE6 incompatibility. SproutCore currently powers the desktop-like web applications at Apple’s MobileMe service and supposedly many other large online applications.