Using JIRA efficiently
Let's face it, there is only one issue tracker worth using, and that's JIRA. Believe me, I've used quite a few (Mantis, Savannah, Trac, Bugzilla, FogBugz, ...) and none of the other have the same power and user friendliness like JIRA.
JIRA also has a ton of plugins, a lot of which are free. And even if they aren't, the investment usually repays itself within months. The ROI is incredible. Today, I'll shed some light on the plugins I usually install on any JIRA I get to do administration on.
Tempo
JIRA's worklog system is great. However, once you start to use Tempo, you'll never use the standard 'Log work' again. Tempo is a complete time tracking system, including holiday tracking, non-issue related time tracking, detailed reporting and integration with ERP and CRM systems (although I haven't used that functionality yet). You do need to do some configuration, but once you set it up, it's invaluable. Using Tempo promotes the idea that all work done on a project should be issue related, an idea I support wholeheartedly.
Price: free when using the Jira Starter license ($10 donation is appreciated), $300 for 25 users to $2000 for unlimited users. So if you can invoice 1/2 hour per person a month more because of accurate time tracking and you're invoicing 25 people at $50/h, you have a ROI of more than 200% in just one month.
Greenhopper
An official Atlassian plugin. If you're using Scrum or any other Agile system and you're using JIRA, you really need this plugin. It's invaluable when doing planning and following up sprints. Even if you're not going agile, this plugin can really help keeping the people in the project informed.
Price: $10 for 10 users (Starter license), $600 for 25 users to $4000 for unlimited users. Usually repays itself through increased team productivity and follow-up in a couple of months.
FishEye plugin
As far as online source control browser tools go, FishEye is a good as it gets. Atlassian provides great integration (off course, FishEye is one of their products). Can be replaced with the specific source control integration plugins, but if you can afford FishEye, use it.
Price: free (FishEye not included)
JIRA Labels
Enabled users to easily add metadata tags to issues, facilitating searches.
Price: free
Is an OSS project viable with corporate support?
Being a project lead for an open-source project, Spring Rich Client, a lot of times things don't get done due to either manpower shortage or time shortage. Despite wearing the Spring name, we're not a part of SpringSource and as such, don't have the manpower to do all the things we want to do with the framework. Which brings me to the following question: if there isn't a company that has a stake in the survival of the framework, or that generates revenue merely due to the fact the framework exists, is such a framework viable? Just to soothen any panic attacks such a question may provoke within the Spring RCP ranks, I'm not talking about Spring RCP in particular (although there is some relevance to it).
If you look at open-source projects such as Hibernate, JBoss AS, the Spring framework, Guice, ..., you're able to spot a trend: every popular framework has a company behind it with dedicated people, and that generates money on that framework (professional services, consulting, ...). Come to think of it, I can't really think of a succesful open-source project that isn't existing in this format.
I think the right statement here would be that every open-source project is created thanks to all the world-changers out there. But at some point, you need corporate support and a big name behind your framework, or no-one is going to use it. There are plenty of examples out there. Wicket, for example, started out as a SourceForge project and has been adopted by Apache. Result: Wicket is one of the most popular frameworks out there. Who of you have ever heard of jZeno, Sombrero or Jaffa? Here's a hint: they are (or were) all open source web frameworks.
This is one of the most frustrating parts of being an open-source project lead: knowing that your framework is being used more than you'd ever imagined, but getting zero feedback from the companies that generate income due to that framework's existence. Let's take Spring RCP for example. I know for a fact that there are companies out there that are using, and even relying on, Spring RCP. How do I know? I've either gotten questions from them (I'll get back on that in a second), or I just happen to work with them on a project.
Another frustration is some of the questions I get. Sometimes I put a lot of effort in giving an extensive answer, but if someone finds a solution to a general problem, they don't share that solution to the general public. IP stuff, you know. For all I care, IP shouldn't count when using an open source project. You've already committed time to solving the issue, putting it in the framework is only a small effort. Just look at the amount of open-source project forks existing in company repositories... Sometimes one might get depressed.
Perhaps a new license should be created: if you're using an non-corporate backed open source project as a baseline for corporate development, why not donate 1 percent of that project revenue (or budget) to that open source project, say for the first 3 projects you're doing. By the time you're doing the 4th, the funds donated have been put to good use (a new release, possibly dedicated developers, a move to professional project hosting,...) and your company is reaping the benefits from the donations. Due to the donations and the added quality due to those donations, it's even possible that project gets picked up by a company willing to invest in it.
The only problem is see here is greed. It only takes one greedy OSS project lead, not using the received funds to help his project, to tear down the system. But then again, I'm the world-changing type. Perhaps it'll work.
Atlassian, you are my hero
Today, I stumbled once again on to the Atlassian website. I love working with Atlassian's product, especially Jira and Fisheye.
I knew Atlassian started with the Personal licensing, but unfortunately, you couldn't use them in a work environment. Now, Atlassian has given about every other issue tracking systeem a real kick in the groin: all products start from 10$ now. For that 10$ for example you can get a 10-user commercial License for Jira, a 10-user license for Greenhopper, ... I don't know who does marketing at Atlassian, but they deserve a big fat bonus this year.
Thank you, Atlassian!!!
Implementing the Circuit Breaker pattern in Spring with AOP
This is one of my earlier articles
Intro
Most of you are probably wondering right now what a circuit breaker is. Well, it's a pattern I picked up while reading Release It!, a Pragmatic Bookshelf jewel. For those of you who haven't read this book yet, go to the bookstore and get it. It's one of my favorites and it has helped me to become a better developer.
Quoting the book, a circuit breaker 'is a component designed to fail first, thereby controlling the overall failure mode' . Put shortly, it allows you to circumvent a certain subsystem when that subsystem is not healthy.
It can be a very handy component when your system is communicating with several outside systems. When a certain system is failing over and over, you probably don't want your system to keep trying, hoping it will go up again. Using a circuit breaker, you can stop your system, failing fast and more importantly, gracefully.
Combining Liquibase with Spring and JPA
Managing change on source code is easy. Managing change on database schemas is less so. Especially if your application can be used across many database backend (Oracle, MySQL, SQL Server, ...).
Liquibase provides a database agnostic way of managing changes to a database structure. It uses an XML format which contains various changesets for all the changes made to a schema. Ideally, you'll have a changeset per atomic change (adding a column, creating a table, changing an index,...). The beauty of Liquibase is that the database itself is aware about its state. Liquibase implants a versioning table into your schema and uses this table to do the necessary updating.
When using it in combination with Spring and JPA, there are some things you do need to look out for. First of all, the Spring support for Liquibase isn't very big. There's an initiializing bean that updates a schema based on a changelog xml, but that's about it. For example, I wanted to change the names of the tables Liquibase creates for its versioning. The Spring class in Liquibase does not support this feature. Luckily, using the Spring support in Liquibase as a baseline, it's not that hard.
I Do Code in my Free Time
Recently, I found this article on DZone, one of the feeds I read the most.
The article is, in it's essence, probably a rant against the hiring mechanism in Silicon Valley. Perhaps the author encountered a hiring process like the article stated and had a really bad experience. It states that expecting a programmer to do some coding in his spare time is blissfully naive. There isn't a day that goes by that I don't do something new. And yes, I do have responsibilities aside from work. But that doesn't prevent me to try to grow at any possible opportunity. It's called planning. I would really suggest that the author of the article go and buy a copy of the Passionate Programmer. For the record, I have no experience in hiring.
Look out: WeakHashMap
Reading the Javadocs is something people don't do very often. Programming has been a trial and error profession (which profession isn't?) and although test driven development has mitigated most of the error-part, creating bugs due to those little nuances in Javadocs which one might skip easily happens all to often.
As was the case today. We just got a bugreport for a OutOfMemoryError, which got traced back to a WeakHashMap that wasn't discarding its values on garbage collection. How could that be, one might ask? It's the reason of existing for a WeakHashMap: avoiding out of memory errors.