25 January 2009

Eat your own dog food

The best software is developed by those who need it for themselves.

17 January 2009

Jailer - data exporting tool

Jailer is a tool for model-based data exporting, schema browsing, and rendering. It exports consistent, referentially intact row-sets from relational databases. It removes obsolete data without violating integrity. It is DBMS agnostic (by using JDBC), platform independent, and generates DbUnit datasets, hierarchically structured XML, and topologically sorted SQL-DML.


* Exports consistent and referentially intact row-sets from your productive database and imports the data into your development and test environment.
* Improves database performance by removing and archiving obsolete data without violating integrity.
* Generates hierarchically structured XML, topologically sorted SQL-DML and DbUnit datasets.
* Open Source. Entirely written in Java. Platform independent. DBMS agnostic.

10 January 2009

Designing packages and jars

JAR Design Over Class Design | Javalobby
I had about 40 or 50 folks in attendance, and here’s a rough breakdown of the hands shown after each of the questions.

* How many spend time designing classes, both the behavior of a class and the relationships between classes? Almost everyone raised their hands.
* How many spend time designing packages, both the behavior of a package and the relationship between packages? Only about 5 hands went up.
* How many spend time designing JAR files, both the behavior of a JAR and the relationship between JAR files? Only about 2 or 3 hands went up.

05 January 2009


SpringSource tcServer - The Tomcat You Know, The Enterprise Capabilities You Need | Javalobby
I'll never forget the day a developer in my team was tasked to provide a utility class to easily send an email with an attachment. A week later, about 4 more days than anyone had anticipated for the task, we received an Enterprise Archive (EAR) containing the solution. As a consumer of this library one had to open a remote connection to a JNDI library, get a handle to an EJB and invoke the EJB method. The EJB would send a message to a JMS queue which was picked up by a message driven EJB that in turn invoked the javax.mail library and sent the email. Of course the JMS queue was configured to be persistent in a RDBMS, so we had to configure a JDBC data source. The EJB was transactional, so we managed to fit JTA into the mix as well.

What I learned was that development teams during the era of J2EE/JEE:

* often structure their solutions around the technologies that are available

* have a tendency to try to use as many technologies as possible

* when choosing technologies are driven by the desire to try out new technologies while still learning them

* being able to document the skills on their resumes

While my example seems to trivial and over engineered, even ridiculous, it is an exaggeration of common mistakes of over engineered solutions that represent many applications running in today's production environments.

03 January 2009

Some torrent search engines

Opensource icons

Yamipod - syncing an Ipod on Linux

I've found YamiPod - Yet another iPod manager an excellent client for syncing my Ipod on Linux. I just tell it the root directory of my music files and it ensures my Ipod is kept in sync. Most importantly it doesn't create a separate copy of my tracks on my harddrive, keep it simple!

Sockso web-based personal music server

Installed Sockso Personal Music Server. This exposes my music collection via a web interface. I can play my music via an embedded flash player. It was simple to install, just unzip the files and tell it where my music lives. The web interface is fairly decent (it finds album covers and displays similar artists etc). My only gripes are that it isn't simple to reverse proxy it through my existing apache server (hence it runs on its own port) and the last.fm integration isn't complete.

Here is what their website says...
Sockso is a free, open-source, personal music server for everyone! It's designed to be as simple as possible so that anyone with a mouse and some mp3's can get their friends listening to their music across the internet in seconds!
Sockso features

* Simple setup (no install! just double click and go!)
* Supports MP3, OGG Vorbis, Flac and WMA
* Easy web-interface for your friends, and a GUI for you!
* Online flash music player, playlists, search, etc...
* Download single tracks, or entire albums/artists or playlists
* Statistics like most played, recently popular, etc...

Coherence Push Replicaton Reference Application

Push Replication Pattern - The Coherence Incubator - Oracle Coherence Knowledge Base
This is an example implementation of Push Replication pattern.

The Push Replication Pattern advocates that;

1. Operations (such as insert, update and delete) occurring on Data in one Location should be pushed using one or more Publishers to an associated Device.
2. A Publisher is responsible for optimistically replicating Operations (in the order in which the said Operations originally occurred) on or with the associated Device.
3. If a Device is unavailable for some reason, the Operations to be replicated using the associated Publisher will be queued and executed (in the original order) at a later point in time.

JobServer: another job scheduler

Kohsuke Kawaguchi's Blog: Introspecting generified classes


Make Your Market looks interesting. Seems like it lets you create hosted exchanges very simply, with access via FIX.

Make Your Market provides its users with a new approach to trading, allowing them to create a full featured market with their instruments and their community of participants to trade. Make Your Market provides its users with a full featured real-time web front-end.

* Create market/instrument on the fly
* Perfect solution for spread betting
* Positions management, risk management, order book overview
* Fully MifiD and FIX compliant
* Easy integration with clearers and brokers
* Possibility to link to real markets
* Using the latest web technology, access from any location
* Fully hosted solution available
* Easy integration into existing architecture
* Easy white labelling


Creating a NotifyingBlockingThreadPoolExecutor: a thread pool that works on several tasks in parallel but waits to add new tasks until a free thread was there to handle them.  A solution is also discussed in Java Concurrency in Practice by Brian Goetz et al.