RIA frameworks and HTML 5

Recently when Steve Jobs wrote off Adobe Flash support in iPad, I went ahead and read more about HTML 5.0 and I am convinced that once HTML 5.0  is out, there will be no need of the fancy RIA frameworks like Apache Pivot and Adobe Flex.

HTML 5.0 introduces everything from videos, audio as well as shapes as part of the specification (introduces tags

But indeed HTML 5.0 is the future. If you are planning to develop your products based on Adobe Flex or Apache Pivot then think twice.

Why I like Twitter!

With only about 30 odd posts in last 4 years over here, and already about a 35 tweets in a couple of months, I really have started liking twitter. I ask myself why did I not blog so much? Answer is simple, everytime I tried to write a blog entry, I never had a restriction of number of words. I always felt as if I needed to fill the space (for no reason) With Twitter its just soo much more easy.

Animal Sniffer Maven Plugin

While looking at the Maven plugins at Codehaus, I just stumbled upon a maven plugin named Animal Sniffer. This plugin could be a great tool for people working on frameworks where API's are published to the user. There is always a problem of API loosing the compatibility across versions (for eg. making some method final looses backward compatibility). These kind of problems are very very difficult to trap.

I wanted to evaluate this plugin for instrumenting our internal API against which following versions can check compatibility. Firstly I am not sure if Animal Sniffer can be used in this way but I believe it could be.

I tried to play with the plugin a little where I figured out that vresion 1.5-SNAPSHOT cannot be downloaded from the Codehaus snapshot repository and older versions 1.4, 1.3 encounter an NPE when I run animal-sniffer:build goal.

Does anyone have experience with Animal Sniffer?

Apache Pivot, Platform for building Rich Internet Appplications

Apache Pivot is a framework for building Rich Internet Applications. Pivot seems to have taken inspiration from Flex and Silverlight.

Here is a snippet of overview from Pivot website,

"Pivot applications are written using a combination of Java and XML and can be run either as an applet or as a standalone (optionally offline) desktop application. Pivot includes features that make building modern GUI applications much easier, including declarative UI, data binding, effects and transitions, and web services integration." 

I would personally choose Pivot over Flex or Silverlight as it is easier to integrate builds into Continuous Integration and Maven. Not sure where Pivot will head to but it surely seems a promising technology.

Log4j 1.2.15 with Maven

I had a problem with Log4j version 1.2.15 where after adding a Log4j dependency, maven would try to download dependencies like java mail, jmx etc. The download never seem to finish as it is from some external repository. I am not sure if it was a temporary problem. I figured the problem was version 1.2.15 when I looked at the pom of that version and I could see some dependencies with specific repository.

Migrating to version 1.2.14 seem to fix this problem.

How I tricked my Ubuntu

My Ubunut was giving me problems starting up yesterday. After investigating for a while, I figured that it was due to corrupt reiserfs on /var So I set to fix the problem by running reiserfsch --check on my /var partition. I rebooted Ubuntu in Recovery Mode. To My surprise, I could not do fsck on my /var as it was mounted and some applications seemed to be using it. I always thought that Recovery Mode does not boot the installed kernel instead it boots an alternate image. This was merely a misconception.

Now with no Ubuntu live CD I could virtually not solve the problem! So I thought about tricking my Ubuntu. I edited my /var/fstab, commented out the mount /var and rebooted my machine. Now the /var was not mounted and I could run fsck on that partition. Some applications did complain about missing files etc. but it at least allowed me to run fsck on my /var partition. After fixing problems by doing reiserfsck --rebuild-tree I removed the commented line from fstab, mounted /var and switched to runlevel 5 and my Ubuntu is back fixed again

Runnable jar using maven assembly plugin

I faced a nagging problem of not able to create a runnable jar using Maven assembly plugin. I had a couple of dependencies which were required at runtime. I used the jar-with-dependecies assembly to achieve this. But my Main-Class attribute from the MANIFEST.MF was lost every time.

The solution to this problem is archive configuration under assembly plugin as described here

One thing I miss from KDE

About 6 months back I migrated to Ubuntu from OpenSUSE. I explicitly did not choose Kubunut as I did not really like KDE 4. It actually sucked! Before that my default window manager was always KDE and I thought about GNOME being lame. But not anymore!

There were a number of things that I missed from KDE most of which had alternatives in GNOME. But I still miss the cool feature of KDE where you could just open the "Run Dialogue" (Alt + F2) and use it as a simple calculator. You could say type "2*2" and press enter. It would do the calculation and show you the output instead of starting any application.

Havent found an alternative to that yet in GNOME!

Common we are in 2009! Use an IDE!!

I have seen a number of people using a naming convention of prefixing letter 'I' to names of any interfaces in Java like IHuman, IMonster. This was a very famous and essential practice about a couple of decades ago (I believe. Not that I am soo old!) I remember reading about prefixes like "lpstr" indicating that it is a "Long Pointer to the String". But all this was followed in C and C++. It was important at that time since the languages were not type safe and there were no mature IDE's. It would be easier to recognize that this pointer is to this this type of variable etc. which would prevent a lot of silly mistakes too. Seems like a few people with inclination towards Microsoft standards in .Net still like it and recommend it.

Personally I think we are in year 2009, I use IDE (Eclipse) for development and I have never needed to really see 'I' prefixed to an interface. It adds very less value. Only thing you can accidently end up doing is say do new Interface(); but your IDE will complain the very next moment anyway. I can always see what methods I can call by simply typing '.' In case I have any doubts. I generally use F4 to see hierarchy which will clearly show me that it is an Interface by coloring it purlple or I would directly F3 to get into code to see whats there.

People who still follow this beautiful practice, I am sorry but I absolutely hate it! for others, keep your Alt + Shift + R ready ;)

Environmental variables, Maven and Eclipse

If you use m2eclipse for building Maven projects in Eclipse, there are some issues while building projects having variables defined which refer Environmental Variables.

<properties>
<appserver.home>${env.APPSERVER_HOME}</appserver.home>
</properties>


Some of our developers came out with an idea of replacing the value locally to point to the directory on their machine like


<properties>
<appserver.home>/home/developer/software/appserver/</appserver.home>
</properties>


This lead to numerous incidents where developers checked in the hard coded path for this variable in our code repository, which lead to failed builds on our Hudson.

A better way to manage this is using profiles. You can create a profile in your settings.xml which resides under .m2 directory in your home directory on Linux (not sure where on Windows). Example profile configuration is as follows,


<profiles>
<profile>
<id>eclipse</id>
<properties>
<appserver.home>/home/developer/software/appserver</appserver.home>
</properties>
</profile>
</profiles>


Now you have a profile named eclipse which points to the absolute path for the varialbe appserver.home.

Now checking out / importing a maven project you can specify profile as eclipse. Or in an already checked out Maven project (note that the project needs to be checked out as Maven Project. Same thing will not work on simple java projects even if they use maven), go to project properties -> Maven and set the profile to "eclipse" (the same as id parameter in your settings.xml)

Now what this does is when you make build from eclipse, it uses the profile "eclipse" and resolves the variable to the right value. Advantage of this approach is that you do not need to change pom.xml of the project so it avoids the problem of checking in the hard coded values by mistake.