Thursday, November 29, 2007

Son of Open Source

It has been a month since I wrote on my favorite open source projects. Some of you have been very kind to point out some cool projects that I missed. I feel like now would be a good time of introduce these worthy projects.

In the original article, I talked about Java and some very nice libraries that extend its functionality and power. One project that I missed was google collections which extends the Java Collection Framework. Though still in alpha, this project is one to watch for.

I talked about the popularity of using IoC/DI which is a lightweight way of building applications from components without introducing of lot of static dependencies thus allowing complex systems to be resilient to change over time. I listed Spring as a technology that empowers this lightweight approach. Another is Google Guice that also allows you to easily build complex object hierarchies from a configuration. The difference between Guice and Spring is the format of the configuration file. For Spring, that is a single external XML file. For Guice, it takes the form of special meta-data comments embedded within the code itself which could be spread across potentially thousands of different files. There are pros and cons to both so which approach appeals to you is a matter of personal choice.

I talked about JUnit which is a unit testing framework. One advantage of IoC/DI is that you can easily plug in a data access tier for the real application that uses a relational database and a mock object tier that return canned responses for the purposes of unit testing. EasyMock is a way to dynamically generate these mock objects.

I can't believe that I completely forgot to mention workflow in the original article (it was in the mind map). This term has been overused so allow me to say that there are two types of workflow, internal workflow and external workflow. External workflow is compelling because it allows for a standardized way to automate the interaction and integration of different systems to provide a complete solution. Internal workflow is an easy way of making your application more flexible and configurable by allowing you to bolt on a workflow engine that empowers easier customization of business processes. There are two parts to workflow, the engine and the editor. The editor is used by workflow architects (if internal) to customize business processes. It is also used by integration specialists (if external) to specify web services that are aggregates of other web services, keeping satellite systems in sync. For internal workflow, the engine is embedded within the application. For external workflow, the engine is a web service that is considered separate from, but dependent on, the other systems. There are a few really good proprietary workflow engines and editors out there but my favorite OSS workflow is YAWL.

I talked about web browser scripting and listed my favorite libraries to help accelerate development. I mentioned how hard java script is to debug but completely forgot to mention my favorite java script debuggers. For Firefox, I use the Venkman debugger. Though not OSS, I should mention that VS.NET has an adequate debugger for java script on Internet Explorer.