My visit to Germany

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

Heidelberg
Heidelberg
Ladenburg

Leave a Comment

Multi-Language online IDE

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.

Leave a Comment

Guess + estimating = guesstimating

How many times have you guesstimated your software project? I think we all do it all the times though we tend to view and term it as a scientific process. Reading this article on Dr. Dobbs by Chuck Connell about the differences between software engineering and computer science, reiterates the common knowledge of how important people are in software development than the processes. This article just puts the thoughts in perspective and reminded me of a instance when one of my manager saying something like ” we should lift the process bar up to such a level that people coming in and going out of the project shouldn’t matter to the outcome of the project”. I didn’t know how to react to this nonsense but then I thought maybe he knows something I do not and yet I see the same manager struggling with people issues more than process issues. I am tempted to send this link to the said manager, but I think I will let him learn the importance of people the hard way.
The article is very interesting though it doesn’t tell us anything that we do not already know. For me, the most important take away is the fact that people play a very important role in software development process and to come up with formal scientific methodology to predict software development is so hard that we can term it impossible. However, best practices like Agile , patterns etc. certainly help but it can only be continous improvment process but never a formal rigorous scientific process. I also liked the figure where Chuck draws a line between computer science and software engineering , maybe not accurate but comes very close in demarcating these two areas.

Leave a Comment

Preparing for a Marathon

From past 5-6 months, I have been training to run a Marathon, well actually a semi marathon. I started by running 10 minutes everyday and slowly increased the duration and now I am currently doing about 82 minutes. I am just training for sustenance rather than speed because I just want to complete the marathon even if I come in the last place. However, I have tried to record my speed and distance through some rudimentary methods (I dont have any fancy gadgets to record the distance, time or speed). I just use the stop watch on my mobile phone and count the steps manually. Based on this, here is how I calculate the the numbers. (Note all number are rough approximates but gives me pretty good picture of my training status and also note that this is for those people like me who dont have or use gadgets such as a pedometer).
I take 65 seconds to complete 180 steps. why 180 steps? and not 100 or 1000? because I run in circles in a small park and I take 180 steps to complete one round. So considering my latest running duration of 82 minutes, in seconds it is 82 * 60 = 4920 seconds. To calculate the number of rounds I go around the park I simply have to divide the total seconds by the number of seconds I take for a single round. So it is 4920s/65s = 75 rounded [sic] circle round the park and the total number of steps is 75 * 180 = 13500. Now, according to the faq at stepscounts.com, 1 km equals 1320 steps for a person with average stride length of 76cm. Based on that, a run of 82 mins will result in me covering a distance of 13500/1320 = 10.3 km at a speed of 7.6km/hr. So I still need to cover roughly another 12 km to match a semi marathon distance i.e roughly another 90 minutes more of running.
So this is were I stand or rather run. I will probably go for pedometer or some gadgets that will help me do a more precise calculation, but for now, this is working just fine for me.
And here is the graph I maintain at Google docs to record my daily running duration.

Marathon training graph

Comments (4)

What happens when you delete a wave?

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!

Leave a Comment

WebSockets now available in Chrome

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.

Comments (2)

Straight from the horse’s mouth

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.

Leave a Comment

More good news

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 ….

  1. Intel backs Google’s Chrome OS
  2. Microsoft’s Gazelle
  3. Microsoft to unveil Office web

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.

Leave a Comment

The role of Media types

I finally understand how media types should be used in REST<link>. 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<link> 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 felt I had mastered REST and 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 <link> of resource identification , methods supported at each URI’s 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<link> and also exchanged few emails with experts<subbu> 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 question and through emails, 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 conciouse 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 structure details of the resource representation. This led to us 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” <link> in a blog entry by Jim Webber. I then found this presentation<link> by Ian Robinson of Thoughtworks<link>. 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:
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 the same. The next thing that media types help identify is what methods are applicable for resources of a given media type? A good example is 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<link>. 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 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.

Comments (2)

The Chrome OS as the SaaS enabler

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 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 iinstant access to information from anywhere and everywhere, non intrusive and simple, enhanced security, removing the complexities involved in software upgrades, hardware configuration etc.. 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.

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.

Leave a Comment

Older Posts »