18 February 2010

JNA tutorial for JNI

29West Announces Next-Generation JMS Solution

HornetQ - fast with nice features?

HornetQ Stings the Competition in Peer-Reviewed Benchmarks | Javalobby

So not only is it supposed to be fast, but if you look at its feature list, it has some nice enterprise features:

  • Very high performance journal for message persistence
  • Topic hierarchies.  Also known as "topic wild-cards".  The idea here is that you can create a topic subscriber using a wild-card, e.g. you could create a consumer on newsfeeds.uk.* then it will receive all messages sent to newsfeeds.uk.sport and also newsfeeds.uk.culture.
  • Dead letter addresses.  A dead letter address is where a message gets sent when it can't be delivered after X number of retries.  Dead letter addresses are highly configurable in HornetQ - they can be configured either globally or on subsets of addresses individually.  Also they need not only represent a queue. Dead letter addresses can represent addresses at which there may be multiple subscribers, or diverts.
  • Producer flow control.  HornetQ provides a credit based producer flow control mechanism to prevent clients overwhelming a server with messages.
  • Consumer flow control.  HornetQ provides a credit based consumer flow control mechanism to prevent client consumers from being overwhelmed with messages sent from a server.
  • Send acknowledgements.  Register a listener to get acknowledgements that messages sent asynchronously have arrived and been processed on the server.  This gives the same arrival guarantees as sending a JMS message in blocking mode but at much higher peformance since it is asynchronous!
  • Last value queue.  This is a special queue which only keeps the most recent copy of a message with a certain header.  E.g. useful for stock prices where you're only interested in the latest price.
  • High performance core bridges.  Core bridges can be used to connect any two HornetQ instances.  Bridges can be optionally configured to only forward messages which match a particular selector query (like SQL 92 syntax).
  • Bridges can forward preserving destination or to a different destination.  Bridges have a transformation hook point where you can plug in message transformation (e.g. smooks).  Bridges are resilient and cope with connection failure, automatically retrying etc as appropriate.  100% once and only once delivery is guaranteed with a bridge without having to resort to more heavyweight solutions such as JTA (XA).
  • Server clusters.  You can configure groups of HornetQ servers into clusters.  Messages sent to a node in a cluster are automatically load balanced across all the matching consumers in the cluster, even if the target node is several hops away, and number of consumers on remote nodes is taken into account.
  • Automatic, fast, client failover.
  • Replication of data store.
  • Clustered request-response.  Send message with reply-to set, message is processed on any node of the cluster and reply is sent back to the original node.
  • Message grouping.  Message grouping allows you to guarantee that all messages of a certain type are processed serially by a single consumer.  This is done by adding a special property to the message. All messages with the same value of the property will be processed by the same consumer.  This also works across the cluster!

14 February 2010

Hibernate History

:// Micromata Labs // Home
The Hibernate History API provides Java interfaces to log modifications of persistent Java Objects in the Hibernate Framework.

07 February 2010

Modifying photo exif data from command line on linux

Install exiv2
yum install exiv2

To subtract 8 hours from the photo datetime
exiv2 ad -a -08:00:00 *.JPG

06 February 2010

Rapid Hiring & Firing to Build the Best Teams by Bruce Eckel

Rapid Hiring & Firing to Build the Best Teams
I talked about building teams, and how difficult it is to do it well within the business structures we currently have. One of the people there mentioned Kayak.com, and how the founder had hired and fired hundreds of people in order to get the 30 or so that he currently employs.

One way to look at the problem of company-building is that it should focus on creating great teams. I've heard numerous people say that the company could be in various kinds of bad shape but they could be happy in it as long as they were on a great team. If the team is indeed the fundamental component of the company, then it would be interesting to make an environment whose primary focus is to be a culture medium for great teams.

One of the biggest problems in team building can be thought of as a version of the "sunk cost" issue. Although it's better to think of lost investment as just that -- lost -- when making decisions, our brains tend to think in terms of what we've already invested. So if you've invested a lot of time and money in hiring someone, you'll tend to hang on to that person until the pain of doing so exceeds your imagination of what it took to get them in that position. This means that a poisonous person can easily be in a team long enough to destroy it before finally being ejected, at which point it's too late. You've thrown a bass into your team of goldfish, and while the bass is eating up your team, you're thinking "maybe he'll get full."

The other big factor is legal. Some people sued companies for wrongful termination, so every company adapted practices to prevent it. You can't just fire someone anymore, you have to give them a couple of 6-month evaluations to show due diligence.

I suspect the Kayak.com founder has everyone sign a contract that allows them to be fired easily. Producing company loyalty in a situation like that might be tough ... but if you get the right people then maybe that goes away. People might become vicariously loyal to their company because they really want to be in their team.

The real problem with hiring someone for a team is that you can't actually know how well they will work out until they're participating on a day-to-day basis. Nothing in an interview really tells you this. So apparently Kayak.com decided that most of the "interview" would go on by putting the person in the real situation and seeing how they worked out. Perhaps a little unsettling and brutal -- although looking for a job is never a great experience, and maybe having one, even if just for a short period, might be better than a long period out of work and looking -- but from the standpoint of the company it could produce some excellent results.


Spring Reflection Utils

04 February 2010

dvd::rip - A full featured DVD Ripper GUI for Linux,

GDataCopier command line for Google Docs

gdatacopier
GDataCopier provides a complete set command line utilities to manage Google Docs (the syntax of which largely resembles scp) that allow users to

* gls - list documents on the Google document system
* gcp - export and import documents on the Google document system
* gmkdir - make directories on the Google docs system
* grm - remove documents and folders on the Google docs system
* gmv - move documents in and out of folder on the Google docs system