Few pictures from my visit to Ladenburg and Heidelberg last year.



Few pictures from my visit to Ladenburg and Heidelberg last year.



An online IDE (ideone.com) that supports compiling and running software programs written in various languages showcases the idea of SaaS where compilers and runtime environments are provided as a service. I think this is an extremely useful service and will be helpful for trying out snippets of programs without the need to find and install compilers and runtime for your particular environments. This, however doesn’t do away with the need for local development environment since I do not think we can use this service to develop software applications. The service already supports many popular programming languages such as C++,C, Java, Python, C# etc with syntax highlighting. So if you find a sample code in a particular language and wish to compile and see the output, you just submit the code to the service and you see the results in a jiffy. Of course you cannot run code that needs the graphics environment. The service supports only programs that are command oriented or headless but nevertheless, a useful service I think.
So what happens when you delete a wave in Google Wave? I tried it and found that it is almost impossible to do that even though you are the creator of the initial wave. When you have created a wave and added participants to the wave, deleting just moves the wave to your trash bin and it stay alive there!! i.e. it still gets updates when other participants of the wave interact with it. I haven’t found a way to remove the wave from the trash so far. This means that once a wave is created, it stays in the system forever?? I checked to see how long Google keeps my information? and found the following at Google’s privacy policy for wave and this what they have to say:
A Wave is queued for deletion from our system once all participants who have access to the Wave remove themselves from the Wave. Residual copies of deleted Waves may take up to 60 days to be purged from our servers and may remain in our offline backup.
Even though there is only one copy of a wave in the system and even though you are the creator of the wave, it is not easy to delete it. You got to remove all participants but there is no way you can do that except ask all participants to remove themselves (which is currently not implemented). So currently the only way is to ask all participants to delete the wave and wait for 60 days for it to be removed from system but still there is no guarantee that it will removed from Google’s backup store!
The Google Chrome developer channel release 4.0.429.0 now supports HTML5 WebSockets. This is great news for people who want real time asynchronous communication on web and were till now relying on polling or other non standard mechanisms. WebSockets is a new bi-directional communication channel that is part of HTML5 specification. WebSockets allows full duplex communication that operates over a single TCP/IP connection. The WebSockets API is exposed via JavaScript and built-in support exists in any HTML5 complaint Web browsers. I hope more browsers start supporting this standard so we can finally say goodbye to non standard mechanisms such as long polling, COMET, BOSH etc.
Tom DeMarco, the author of the popular book titled Controlling Software Projects: Management, Measurement and Estimation reflects on Software engineering nearly 3 decades later and now has a totally different view on the subject. The article “Software Engineering: An Idea whose time has come and gone?” is a interesting take on the subject based on practical experience. A must read for all those involved in Software development. You can find the article here.
The future of SaaS is getting brighter by the day. The following three news items are very encouraging and I hope will provide enough momemtum in diminishing the desktop and browser gap. The day of Linux, Windows, Solaris as the main platform is going to be history and the new platforms will be the browser and the desktop.
#TARGET=desktop
TARGET=browser
./configure –target=$TARGET ….
This is exactly what we need; a good competition to get the best out for the community. I hope more players join in the competition.
I finally understand how media types should be used in REST. I have not struggled as much to understand any of the REST constraints and principles as much as I had to understand the proper use of media types. Even HATEOAS didn’t cause me such difficulty in understanding (though the ahh!! moment when I finally undetstood HATEOAS is still fresh in my mind). After the insight into HATEOAS, I assumed that I had mastered REST but my fallacy was exposed when I went on to design a real application based on REST principles. When I started on the design of the application , I glided through the steps of resource identification , supported methods, etc… but soon hit a snag when it came to the use of media types. The major problem or confusion I faced was the increasing number of media types that were getting defined in our application. I then posted a question here and also exchanged few emails with experts in the field hoping to understand where or what I was doing wrong. Even though I did get some really good responses to both my questions and through other channels, I still couldn’t get my head around the confusion. The main reason I never got around to understanding is due to the fact that I had a totally wrong assumption on the role of media types. After spending quite some time researching, trying to figure out where and what I was doing wrong, I think I might have finally found the missing link.
With this post, I hope to get across my understanding of media types and try to clarify the role of media types in REST for those who might have got into similar situation.
First some background, one of the goals of our team was to replace a legacy (proprietary) communication mechanism with standards based communication system. We choose HTTP and also made a conscious decision to base our architecture on RESTful principles, and thats when we started looking at media types. Our initial understanding of the role of media types were that media types are used to describe the representation of the resources in lieu of a schema language i.e. we thought that each resource should have a media type which defines the processing model, the applicable methods on the resources and also the structural details of the resource representation. This led us to defining a media type for each resource in our application and finally to the realization that we were doing something wrong.
Recently, I came across the statement “media type for helping tune the hypermedia engine, schema for structure” in a blog entry by Jim Webber. I then found this presentation by Ian Robinson of Thoughtworks. This presentation is one of the best that I have come across that provides a very clear understanding of the roles and responsibilities of media types and schema languages (the entire presentation is a treat and I highly recommend for all). Especially lookout for the slides titled “You’ve Chosen application/xml, you b*st*rd.” and “Custom media types”. Ian clearly explains the different roles of the schemas and the media types. In short, this is my take away from Ian’s presentation regarding media types:
A media type description includes the processing model that identifies hypermedia controls and defines what methods are applicable for the resources of that type. Identifying hypermedia controls means “How do we identify links?”, in XHTML links are identified based on <a> tag and RDF has different semantics for defining links. The next thing that media types help identify is what methods are applicable for resources of a given media type? A good example of these can be seen in the ATOM (application/atom+xml) specification which gives a very rich description of hyper media controls; they tell us how the link element is defined? and what we can expect to be able to do when we dereference a URI so it actually tells something about the methods we can expect to be able to apply to the resource. The structural information of a resource represenation is NOT part of or NOT contained within the media type description but is provided as part of appropriate schema of the actual representation i.e the media type specification won’t necessarily dictate anything about the structure of the representation.
So what does this mean to us? simply that we dont need a separate media type for describing each resource as described here. We just need one media type for the entire application. This could be a totally new custom media type or a custom media type which reuses existing standard media types or better still, simply a standard media type that can be reused without change in our application.
Now, armed with this knowledge, I do hope to progress smoothly in our design and as Jim says, “media type for helping tune the hypermedia engine, schema for structure” is going to be my mantra too.
I am really excited about the announcement from google regarding their new OS. I was kind of expecting something similar to come out of Google after their Chrome browser. I do see a lot of potential in a browser based OS. For starters, the distinction between desktop apps and browser based apps is going to blur in future. It is also encouraging for SaaS consumers since the Chrome OS addresses aspects core to SaaS like providing instant access to information from anywhere and everywhere, non intrusive and simple, enhanced security, removing the complexities involved in software upgrades, hardware configuration etc. I do feel that this new OS is going to do a lot good for SaaS consumers and might in fact play a big role as a SaaS enabler. Imagine such an environment where the OS boots up and presents a browser and enables you to use the browser as your complete desktop (access to spreadsheets and other apps, the location bar acting as your command line etc..) , it enables the web to be your desktop and gives you immense freedom and possiblities.
The reason I say I was kind of expecting this from google is that after looking at Chrome and using it for almost from the day of its release, I naturally got a feeling that the Web is going to be next desktop platform. Chrome gives you an idea of the immense possibiliies and benefits of bringing the web and the desktop together. I have been a huge fan of the Chrome browser from the day I started using it, even though currently there are many short comings such as lack of extensions, themes etc.. (I really do miss the mouse gestures extension for Firefox though I haven’t touched Firefox or any other browser after my Chrome experience) However, I feel these things and many more things will get addressed soon and I am bearing this inadequacies for the simple reason that Chrome is one browser which hides itself and lets you concentrate on things that you really care. When using Chrome, I rarely feel that I am using a browser and I already get a feeling of working on the desktop with Chrome. It is blazingly fast and absolutely non intrusive and this is one of main reason I feel that Chrome OS is going to change the game, forever. I hope others will soon follow suit and we may ultimately be able to blur the distinction between Browser based apps and Desktop apps.