Friday, May 23, 2008

InfoQ Article

Check out the InfoQ article: Real world JRuby on Rails: Infectious disease reporting and management

Here is the intro:

JRuby and JRuby on Rails continue to being adopted by many projects. After Mingle, Oracle Mix or Sun's rewrite of mediacast.sun.com, a new project using JRuby on Rails has surfaced.

From the press release Collaborative Software Initiative (CSI), the company that brings like-minded organizations together to work on collaborative software at a fraction of the cost, today announced the release of the first open source, web-based infectious disease reporting and management system.

The disease reporting and management system, which is being piloted in Utah, will be adaptable in all 50 states and available under an open source license later this year. It is designed to support local health departments in the early detection and investigation of individual cases and local clusters of communicable diseases, while simultaneously meeting the state and federal needs of outbreak control, disease surveillance and epidemiologic research.

One thing to note further down in the press release: the project uses JRuby. We talked to Mike Herrick, Program Manager at the Collaborative Software Initiative, to talk about the experience of using JRuby for the project.

Monday, May 19, 2008

CSI Public Health Open Source Project Annouced

I'm pretty proud to be involved in this project.

How often do you get to say this about the impact of your project?

When deployed, UT-NEDSS project will directly contribute to the prevention of sickness and death by effectively collecting, identifying, tracking and trending information gathered about infectious diseases and bioterrorism attacks. Additionally, this unique partnership is providing lessons for public health informatics on:

  • Open source software best practices
  • Lean Software Development practices
  • Building an open source community for a public health product
  • Contractual relations between public health entities and a commercial open source software company that support long-term product sustainability

We have a great team of folks working their hearts out on this. It truly is an honor to be part of the team.

I love moments like this - those strange joyous moments of clarity where anything seems possible in software.

Tuesday, May 06, 2008

Groovy New Commuter Bike

I picked up a new commuter bike today to get me to work on my fairly incredible commute I used to call river walk. Its "river ride" now I suppose.

I got a 3 speed, pedal break simple old school euro bike. It's an Electra Amsterdam Classic.

I love my other bike, but it isn't practical for commuting.

Looking forward to a groovy summer on my new granny bike!

Saturday, April 19, 2008

Hiring technique: "the blitz"

So I like to think that I have become good at hiring people. I'm definitely not bad at it. Over the past couple years I have generally been good at hiring people who are way smarter than me. That's what you do when you are a Lean manager and you aren't stupid or insecure.

My techniques are not magic, but they seem to be quite different than how I see lots of managers/companies operating.

If you have determined that you truly need to hire someone, that generally means that your team is hurting - it needs resources that it doesn't have - at some level you are already failing. Your #1 mission as a Lean manager is to protect the team and to get it the stuff it needs to be successful. Once you are in this position, barring a crisis, you have no task that is more important than filling the position with the most qualified person you can find as quickly as possible.

So my co-worker Ed termed what I do yesterday, "the blitz". Here is generally how it works:


Step 1: Collect Qualified Peeps
  • Check your network for a trusted person.
  • If FAIL, post job to the places the kewl kids are. Examples here and here
  • If FAIL, post job to craigslist and batten down the hatches - you are going to get inundated with qualified and unqualified people contacting you. DO NOT put your phone number on these job postings.
  • If FAIL, do WHATEVER YOU NEED TO DO to find qualified candidates. Get creative, clocks tickn'.
Step 2: Quick Vetting
  • Pick the ones that look like they are truly talented and passionate.
  • Schedule in person interview for today or tomorrow
  • Short list.
Step 3. Homework Torture Test
  • Give the short list candidates a homework assignment. Something they can do in a couple of hours that will make it abundantly clear who is the most talented & the best fit.
Step 4. Second Opinion
  • Define decision making rules so everybody on the team understands how the decision will be made (e.g., unanimous vote, majority, or defer decision to manager for expediency and efficiency)
  • Depending on the position, pick one, more, or all people from the team to interview the finalists after they have reviewed the homework results for fit, talent, and passion.
  • Gather feedback
Step 5. Pick, yer done or Rinse and Repeat if FAIL

I think the only major difference compared to typical hiring practices is in how I do this. I go all in. It's a blitz. When I'm in this mode, I generally do it 8-12 hours a day until I'm done. I can generally wrap up hiring someone in <= 2 weeks from start to finish. And the results generally speak for themselves. This technique works great for me as the "hiring manager" and for job candidates.

Hiring people can be quick and painless or can drag on and on for weeks and months if you don't make it priority #1. While you have unfilled positions, you are continuing to fail (at some level). Your team is continuing to feel pain. Distraction grows and grows. Before you know it, your project is failing.

Anyway, this way works for me. Your mileage may vary.

Now next week I can get back to job #2 of a Lean manager: empowering the team/sharing leadership, staying out of the way, & adding real value off the critical path.

19-APR 9:30 PT: Updated with links to Lean SW Dev.

Monday, April 14, 2008

Web Application User Interface Designer

We are looking for a part time User Interface Designer. Here is the description I came up with. Contact me if interested.
Looking for a paid part time contributor to one of CSI's projects. To start with up to 20 hours per week for 3 months paid hourly commensurate with experience. You will contribute by:
  • Producing wire frame mockups
  • Producing CSS, XHTML, images, etc.
  • Producing minimalistic Style Guide
  • Producing other design stuff
  • Interview SME (Subject Matter Expert) members of our project Core Team on their desires for the user interface
  • Making User Interface design decisions
We are looking for a freelancer and not a firm or an agency.

A little bit about you:

  • You were raised on Jakob Nielsen
  • You are pragmatic
  • You work well with distributed teams
  • You work well with application programmers (ours happen to be very nice and smart!)
  • You deliver
  • You are quick
  • You have a lot of experience with web application focused design
  • You have samples that you can show off
  • You have a long list of people who rave about you and your work

19-APR Update: this position has been filled via the blitz. Don't worry, we'll be back.

Saturday, April 12, 2008

Core Team & Contributors

I really like the concept of Core Teams. For Collaborative Software Initiative (CSI), our Core Teams are a mix of Subject Matter Experts (SMEs), and Developers. We create "whole" Core Teams & the team is jointly responsible for delivery. Its a true partnership model and its a beautiful thing to be a part of. Its the exact inverse of the typically adversarial relationship that often exists between SMEs and developers in more "traditional" development efforts.

We are still learning as we grow on the health care related project I am focused on. Our Core Team has had some success. The work load and what the team is capable of are both growing. We are becoming advanced enough together to take on more work and more people bit by bit.

We are currently experimenting with adding "Contributors" to the project. For any number of reasons, we are not able to add these people to the Core Team. But we have certain tasks that are well suited for part time contributors. It works well for us and the contributor. In some cases, the contributor just has an itch they want to scratch (e.g., want to learn Ruby/JRuby). In others we have a need we *need* scratched and we pay them to do the work.

I realize none of this is earth shattering - its common with open source projects. I am just saying that its exciting to be a part of it and see it working.

I am of course biased, but I continue to think that the CSI model is game changing. It certainly doesn't apply to everything, but it applies to an awful lot. Time will tell.

Saturday, April 05, 2008

JRuby 1.1 Released

JRuby 1.1 was released today.

We shipped our first release of an application Monday with the pre-release.

The JRuby guys are great. Its becoming a great little community. I'm happy to be a small part of it. There seem to be big plans for the future after 1.1.

After working with it for the past 3 months in anger, I continue to believe that its a very compelling platform.

Thursday, March 27, 2008

Ruby.war

I'm taking a break from the lead up to a release. I'm a little cooked and useless at the moment.

Pete and I worked on our deployment script last night. In the early days of our project, we thought we'd use Capistrano. Make no mistake, it is a great tool (I took it for a spin).

But when you are using JRuby, its a bit overkill.

I'm fairly new to the Ruby world, but I know the other deployment options for Ruby. They aren't awful, but they take a bit of work & have some moving parts to them.

A lot more work than handing over a .war file with a configured # of run-times to run within the JVM, a database script, and a runbook anyway. That in and of itself is compelling.

Oh yeah, you have to also run:

$apache-tomcat-6.0.14$ bin/startup.sh 

(that's the runbook)

Tuesday, March 11, 2008

Ruby Authorization and Entitlement

We are bearing down on our first release (first of many on a big roadmap). Times are crazy, yet a lot of fun. I feel strange posting here - its been a while. Well, at least I tweat fairly regularly.

Anyway, our final iteration of our initial release is primarily focused on authentication, authorization, and entitlement.

I have a feeling we'll end up rolling our own, but there are a number of Rails plug-ins out there for this purpose that may have some useful bits. Also, a number of Ruby based rules engines.

So far, my real tired google search turned up:

I'll dig into these tomorrow. Let me know if you have had success with these or any other plug-ins/gems that may be of use for a fairly sophisticated user authorization/entitlement impl.

I'll try to update this post with our findings.

19-MAR-2008 Update

We are still digging into this, but so far we haven't used any above given our situation, but Bill Katz Rails Authorization Plug-in looks somewhat promising so far. Seems easy enough to make work with SiteMinder in front of you.

27-MAR-2008 Update In case anyone stumbles upon this later, we ended up writing our own. Nothing against the other's we just didn't see enough compelling in them to take them on. Rolling our own seemed easiest.

Friday, February 15, 2008

Lean Software Development Joy

As I mentioned recently, I'm freak busy at work. In a few months, things will calm down I'm sure and maybe things may pick back up here. On the other hand, things may get even busier.

In the meantime I have to say that I'm having a great time. Long hours to be sure, but the work is very rewarding.

For me, the most joyous part (other than working with exciting all FOSS technology, and being a member of a budding high performing team) is working with a business partner that truly seems to understand and embrace Lean Software Development. The proof will be in the eventual pudding, but its amazing what can be accomplished with a willing business partner that understands the fundamentals of software.

Or perhaps they just trust us, because we generally know what we are talking about. ;)

Or maybe we really are onto something and our business model is a better way to develop software.

Or maybe its all three :)

Mommydays

My lovely wife Erin has for some reason become a blogger.

She used to make fun of me for blogging.

Now she makes fun of me for using twitter.

Anyway, you will quickly see that I married up if you read her blog. She talks about her more than full time job of being a mom.

Saturday, February 02, 2008

On Architects

Bill de hÓra excerpts from Dietrich Kappe.

I couldn't agree more with:

If you've made the transition from a hierarchical environment to an agile, self-organizing team, you know what I'm saying. You won't ever want to go back..

I've been called various things. My last title was "Architect". Before that "Technologist". And now "Program Manager". I used to be a pretty decent developer, but never a great one. I'm starting to get ok again. I'll be pretty good again soon. I've worked with a lot of great developers so I know the difference between good and great. I figured out somewhere along the way that I'm fairly good at sensing what teams need and sucking it up and doing the often crucial not-so-fun stuff. I like doing this stuff because it is rewarding knowing that I contributed to a team. As time allows I make technical contributions too (more and more now). There is nothing like being on a high performing team and carrying your own weight.

Seagull Architects are an abomination. I had a realization as I left my last job; for a variety of reasons I never want to have the title "Architect" again. In talking to other "Architects" and former "Architects" I was fairly surprised how common this sentiment is. I'd be happy with what I have now or "Developer". I also like Steve Vinoski's "Member of the Technical Staff". I don't really care what you call me, but I do care that I carry my own weight. More than anything I care that I'm on a whole team that is already or has the potential to become a high performing team.

Let's just all just stop using the term "Architect" in software. How about we get rid of "Engineer" too while we are at it.

Friday, February 01, 2008

Twittered

I've been freak busy as of late. My blog is suffering and will likely continue to suffer. I'm going to give twitter a try. I've scoffed at it for a while, but am now succumbing.

You can follow me around here.

Friday, January 11, 2008

CSI on Linux Magazine’s Top 20 Companies to Watch in 2008

Linux Magazine’s Top 20 Companies to Watch in 2008

Oh dear - 2008 is going to be busy.


Take the open source development methodology, mix well with enlightened self interest, stir with companies that have the dosh to fund serious development, and you have a really compelling business model. We're referring here, of course, to Collaborative Software Initiative (CSI).

CSI launched in early 2007, the brainchild of Stuart Cohen (formerly CEO of the Open Source Development Labs, which merged into the Linux Foundation in 2006). Its business model is to use the open development model to create necessary software for niche markets. For example, CSI's most recent project is creating software to automate the BITS Shared Assessment Program for companies in the financial services industry.

While it's unlikely that a community would spring up around this sort of software naturally, CSI is using the open development model to create software needed by industries and letting several companies split the development costs. Its role is to do the collaboration and community building, project management, tech support, and foundation building necessary to shepherd the software through its life cycle.

This is an idea that should have been obvious years ago, and we expect to see the CSI do well in 2008-- and attract copycat initiatives as well.


Update I liked the way it read so much that I put it in the post.

Thursday, January 10, 2008

Hudson CI Rocks

So I'm quite pleased with Hudson so far. Great FOSS Continuous Integration tool & community. Supports Java and basically anything else. And it has an IRC bot and who doesn't love IRC bots?

Wednesday, January 09, 2008

Fun in the JRuby Wiki: Warbler, Goldspike, & CI

I'm having fun making minuscule contributions to the JRuby community. As I learn, I'm documenting stuff in the JRuby wiki. I'm really impressed with the people doing the real work on JRuby. Freak smart.

I keep running into Nick Sieger in my wiki work. He wrote a couple of very helpful things:

Warbler (replacing Goldspike Rake soon) & ci_reporter mentioned on the JRuby and Continuous Integration page I started in the JRuby wiki today).

My other favorite JRuby guy is Robert Egglestone. He fixed the Rails 2 Goldspike Servlet bug I found Sunday. He has recently updated the Goldspike Roadmap. A release of the Goldspike component is coming this month to follow up on the JRuby 1.1RC1 release the other day.

The discussion on CI caught Mike McKinney's eye. He put together a great how to on JRuby and Hudson.

I love open source and the internet machine.

Monday, January 07, 2008

Open Source Marching up the Vertical Stack

Open Source is on the march up the stack - first operating systems, then integration software, and most recently commercial open source packages (CRM, ERP, BI, Content Management, etc.). Now applications? - where will it stop!?

My focus in working for the Collaborative Software Initiative (CSI) is on building commercial open source applications for industry verticals and government. I build on the shoulders of giants: Linux, Postgres, Java, Ruby, JRuby, and commercial open source packages.

At the application level, where is open source today and where is it going in industry verticals (government will be a different post as it is totally different)?

I see three categories *today*, but I bet over the next year I will see many more.

Regulated Software Today, there is a lot of desire to collaborate on systems that are mandated by the government. There are plenty of these in every industry. Pragmatic companies realize that there is absolutely no business value in differentiating here. It makes business sense to collaborate with their competitors to come up with an open, well-supported, cost effective solution to meet the regulation.

Industry Vertical Utility Applications Every industry has at least one industry standards body. These organizations do some great stuff. They also already have legal mechanisms in place to comply with anti-trust constraints. One common activity in industry standards bodies is putting together XML schema standards. My question for years has been: XML is nice and all, but how about we just sling some code, open source it, find somebody to support it, and solve the problem once and for all? I think we will see a lot of open source in this area in the coming years. XML is needed, but is just data exchange and only gets you so far. There is a common utility class of application that will be written in support of industries. I see this occurring more and more as there are success stories with the low hanging fruit in regulated software.

Industry Boat Lifters There are fundamental technical problems in many vertical industries. The cause can be many things from aging platforms to out of date industry networks to predatory vendors that create terrible industry inefficiencies due in part to the proprietary nature of their solutions. I see companies in vertical industries banding together to gently remove these types of inefficiencies. In some cases, their existence will depend on it. In others, the classic A rising tide lifts all boats argument will apply. Well placed open source industry vertical code could change the rules of the game in some industries.

Open source is just getting started in the vertical application space. We'll all see some very interesting things happen over the next few years. I think that what I described below is only the beginning.

Friday, January 04, 2008

BOOM BOOM BOOM SPLAT SPLAT SPLAT

I've been reading to my daughter a lot lately.

She is kinda past Mr Brown Can M00! Can You?, but when I read my new colleague, Pete Lacey's recent blog post, I started chanting it in my mind:


BOOM BOOM BOOM

Mr. Brown is a wonder.

BOOM BOOM BOOM

Mr. Brown makes thunder!

He makes ligtning

SPLATT SPLATT SPLATT

and it's very, very hard

to make a noise like that!


So Pete & I will be riding the CSI Rocket together. Wish us luck. I'm extremely excited.

PS: What Pete said about the power of the interweb.

Tuesday, January 01, 2008

JRuby .war packaging for Rails 2.0

I have been hacking on JRuby a bit lately.

I set out to deploy a Ruby on Rails 2.0 application to Tomcat 6 on Monday and it was harder than it should have been.

Some of my angst was no doubt the fact that I'm a newbie, but in case it helps anyone, here are the key bits that made it work for me.

I started with using the Goldspike .war generator. It worked, but was a little clunky.

So then I tried Nick Sieger's Warbler which is much simpler & has more of a Ruby feel to it. I found myself down a rat hole, however in that the Warbler gem comes with JRuby 1.0.1 and that doesn't seem to work with Rails 2.0. If you try to run on it you will be greeted with something like:

INFO: Deploying web application archive your-app-name-here.war 
Exception in thread "ObjectPoolManager" java.lang.NoSuchMethodError: org.jruby.RubyHash.op_aset(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRub
yObject;)Lorg/jruby/runtime/builtin/IRubyObject;
        at org.jruby.ext.openssl.X509Name.createX509Name(X509Name.java:98)
        at org.jruby.ext.openssl.X509.createX509(X509.java:40)

The documentation is a little bit sparse on this topic & I didn't stumble upon anything in my googling around. The fix is simple - you just have to use a compliant version of JRuby. 1.0.3 works. Here are the steps I took to fix it:

  • Download jruby-complete-1.0.3.jar
  • Replace the JRuby that Warbler uses - one approach is to figure out where Warbler lives (
    gem which warbler OR jruby -S gem which warbler
    ) and replace the default jruby (1.0.1) with 1.0.3

warbler war:debug prints a YAML dump of the current configuration
is definitely useful in tracking stuff down.

Anyway, Warbler is quite simple & useful as it should be.

What's not to like about:

gem install warbler 
warbler war 
warbler config
warbler war:clean 
and warble.rb (config file)?

Note that you can also run it directly under JRuby:

jruby -S gem install warbler
jruby warbler war
jruby warbler config
jruby warbler:clean

Warbler is very tidy. It put's all the generated bits in the tmp dir of your Rails app. This is opposed to Goldspike which puts it all in the WEB-INF dir in the root of your app.

Update I put some of this and more in the JRuby Wiki.

Go Flyers

Sarge pointed out to me that my Dayton Flyers are now nationally ranked in the top 25.

I get pretty fired up about them once they are good. I am the epitome of the fair weather fan. I have cried in my beer many times over the Flyers. When they are good it generally goes like this:

  • Good regular season
  • Couple 2-3 clutch wins
  • Split with Xavier
  • Make the NCAA tournament
  • Lose in the 1st game to Purdue or someone by 1 point on a b.s. call by some ref
Anyway, I'm paying attention now.

Go Flyers!