Moved Rails Apps to GitHub

I’ve spent some time over the past couple of months cleaning up the Rails apps I’ve written with the goal of making them available for download on this site. I wrapped that up last week with the release of Addressbook. However, I soon realized that making the code available on this site was not ideal, and it would be much better if I made the code available via some code hosting site, like Sourceforge or GitHub. This gives the projects a little more visibility, allows for easier contributions to the projects, and simply provides a better home for the code. So, I spent the past few days making Diners Club, Addressbook, and Karate Journal available on GitHub. Please check the project pages on this site for links to the GitHub repositories.

Choosing GitHub was fairly easy. I’ve been wanting to learn Git for a while now, GitHub has all of the features I needed (plus some nice-to-haves), and it seemed pretty straight forward to use. So far so good!

I did however have to do some additional cleanup before the move to GitHub. Previously, I had a bash script that I ran that would export the code from my local Subversion repository, and wipe out any user names, passwords, or other configuration that I didn’t want to publish with the code. The script would then tar and zip up the code, and push it to the site. This wouldn’t fly with GitHub, since everybody would be able to see the code in the repository. So, some work was needed to provide template config files (database.yml.template for example) for people to specify their own configuration, and I removed the original files from source control.

All things considered, I’m very happy with the move, and wish I’d done it sooner. I think from now on, I’ll be using GitHub from the start with new projects.

Merry Christmas everybody!

Addressbook Webapp Has Been Released

Yay for me! I set a personal goal to have the code for all of my Rails apps on this site by the end of the year. Tonight, I can check that one off the list. The code for the Addressbook webapp is now available for download. Addressbook was not only my first Rails app, but also my first experience with Ajax. And trust me, it shows. I learned a lot from this project, especially what not to do. However, I must also say that I use Addressbook more than any other personal project I have ever completed. So, it can’t be that bad :) I love the fact that I can access my contact information from anywhere, and that I can manage groups of addresses and print mailing labels with the click of a button. Sure, the UI can be a bit unintuitive, but it’s not that big of an issue for me. There are a few more things I’d like to do with this project. We’ll see where it goes from here.

Really Cool Site Containing Java Conference Videos

Yesterday I stumbled upon It appears that Parleys has been around for a while, providing podcasts of various tech presentations (audio only). However, the new version of the site, still in Beta, takes their offerings to an entirely new level. It now contains several videos of presentations from various Java conferences over the past few years. Not only is the content fantastic, but the user interface is very slick as well. The UI displays not only the audio in sync with the slides, but also a video of the presenter, giving you the full experience. The navigation options are also great, providing a table of contents and a time line for the presentation…letting your jump to a specific point in the talk. In addition, Parley’s provides information about the speaker and the talk, a list of related talks, and the ability to post tags and comments at specific points in the talk.

In my opinion, the best feature provided by is the ability to watch the presentations, with all of the UI features, offline. This is HUGE for me, as I spend almost two hours every day sitting on a train. Parley’s provides an Adobe AIR application that makes all of this possible. Adobe AIR is a runtime environment that “lets developers use proven web technologies to build rich Internet applications that run outside the browser on multiple operating systems”. The Linux version of AIR, still in Beta, works wonderfully. The AIR application operates just like the site, and provides some additional functionality to download the presentations for later viewing.

I’ve been spending quite a bit of time lately looking for a site like this. With the current economic conditions, I’d imagine that most companies are cutting back on the number of conferences they send their developers to. According to the site, they plan on continuing to add content. If they do, I see this as an invaluable resource for keeping up to date on what is going on in the Java community.

Great Post on the Concurrency Hazards of Stateful Web Applications

When people think about stateful web applications, I believe that most of the concerns usually focus on the scalability of that web application. Stateful web applications are more difficult to scale out, as you need to ensure that all requests from the same session are handled by the same application instance, or you need to setup some mechanism so that instance A can pick up and resume the session that was started by instance B, creating a potential bottle neck.

However, with the new breed of web applications out there that allow a session to be sending multiple, possibly concurrent requests (via practices like AJAX), a new crop of concerns arise. Most (if not all) web containers take care of managing concurrency concerns between sessions. But, most do nothing to manage concurrency concerns within the same session.

Java concurrency master Brian Goetz provides the details at

Good Post on the Pitfalls of an External DSL

As I have mentioned before, I’ve been working on an (internal) DSL at work to aid with testing. I just finished reading a post by Michael Feathers entitled How to Fail with External DSLs. It’s a good post that brings to light some very real issues regarding the development of external domain specific languages. I laughed to myself when Michael identified one of the pitfalls as being the inability to attract new hires to work on a language that they would not be able use outside of your company, as I turned down a job right out of college for that exact reason.