Monday, October 20, 2008

Favorite Development Tools of 2008

  1. Mac
  2. TextMate - What a great tool! Reason enough to own a Mac.
  3. Intellij - Version 8 is looking good.
  4. Groovy - This is becoming my favorite tool.
  5. Grails
  6. git - It is replacing cvs and subversion.
  7. gradle - replacing ant and maven
  8. hudson - looking to see if it replaces cruise control.
  9. Fusion - developing C# is more fun on a Mac.
  10. Spring 2.5 MVC - If you can't do Grails... this is the way to do it.
Tools I'm looking forward to in 2009
  1. Clojure - Interesting Language... I know very little at this point.
  2. F# - Probably the most interesting language on the .Net platform.
  3. Spring 3 and what I call ADD or Annotated Driven Development :)
Tools That need some TLC
  1. I would like to see a refresh on xplanner - This would be a great candidate for Grails.

jps - The Java way when you need to kill something Groovy

As a speaker, I'm often showing "how" to do something and often requested for "When" / "Why". I just experienced a great example of this with jps. jps is of course is the Java ps tool that is included with JDK5 and 6. So it is already on a Java developer's machine. It is the platform independent way to get PIDs.

How it Started
The Yak-Shaving started when I decided to run a groovy script from TextMate. I conventiently hit +R. Everything ran the way I wanted it to. Except... There wasn't an end to the program script... idiot! So, I closed TextMate... Still Running....

Step 1
First I went to the command line and did a ps... which didn't result in much. I followed this up with a ps -ef. Way too much info... so I ended with a ps -ef | grep JavaVM. Things just got worst. That is a lot of information!

Solution
Along comes jps. A simple jps (no args) and here are the results
9382
10620 GroovyStarter
10314 JConsole
10761 Jps

There it is GroovyStarter... kill 10620.

... and what if you had multiple GroovyStarter scripts running. Well, jps -m will give you the command-line of the script, which includes the groovy script name.

Sunday, October 19, 2008

Grails JMX Plugin

I just created and released version 0.3 of the Grails JMX Plugin. The code is at github; git://github.com/kensipe/jmx-grails-plugin.git . The documentation is at grails; http://grails.org/JMX+Plugin.

Sometime this week, I'll post some tips and tricks for using the JMX Plugin with Grails.

Saturday, October 18, 2008

Cooking Chef vs. Polygot Programmer

Occasionally crazy analogies pop up in my head. Sometimes these ideas don't make sense to anyone but me. Let me know if I've gone off the deep end.

So I was thinking what it was like growing up when I didn't have a microwave and how useful that tool is. Then it occurred to me that as useful as it is, there are things I would never put in the microwave. Take for instance a turkey. Perhaps it is possible to cook a turkey in a microwave, but why? You can cook toast on a gas stove as well, but a toaster just seems more appropriate. When playing chef, each tool provides a specific value. Turkey in the oven, toast in the toaster, and butter melting in the microwave.

Stretching this thought into a conversation on technology, I'm reminded of a term Neal Ford is credited with: The polygot programmer.

Why is it that developers and programmers pick camps? Why does an organization limit their technology choices to one or a small handful? When an organization says they are a "Java Shop" or a ".Net Shop", what I hear is "We only use microwaves to cook here". In many of these shops they are doing with code what can be equivalent to cooking a turkey in a microwave. They can get it to work, but it doesn't taste so good!

Friday, October 3, 2008

Writing a Spring 3 Book

I'm looking at writing a book on Spring 3. Yes... I know, it doesn't exist yet. My expectation is it should have a likeness to Spring 2.5, which is also lacking in good printed materials. With this assumption, I'm looking to get a head start now and refactor based on actual delivery of product.

If you have some ideas or thoughts... please share. At this point, My goal is not to cover what is already out there. I'm focused on the new approach of annotated development.

I'm also thinking of taking this book and writing a Spring.Net book to follow... Perhaps I will change my mind as I go through the new experience of the first book.

Speaking at October IASA Meeting in St. Louis

I will be speaking on Architecture and Scale at the Oct 6 Meeting of IASA in St. Louis.

Thursday, August 28, 2008

The Need for Better Interfaces (Human to Computer)

I can't help but believe that there has to be a better way. There has to be more options...

I talking about the I/O options to my computer. Here are a couple of recent stories that will hopefully bring context to what I mean.

Gestures on the Mac
Recently I purchased a new MacBook Pro. You know, one of the new Macs with the multi-touch capabilities. The idea is that if you use one finger you move the mouse, if you use 2 fingers it scrolls (and not just up and down), if you use 3 fingers then it depends somewhat on what application you are using, but generally it means go back or go forward depending on the wave of the hand. This is just awesome stuff and here is what happened to me.
First, the back and forth action of 3 fingers worked in Safari and in finder.... but not in Firefox. I was a little more than dismayed. Generally preferring Firefox, I found myself using Safari more in order to use the gestures. I really wanted this new feature in all applications. Eventually the shiny new toy lost some luster and I mostly use Firefox again. The consequence... sometimes I forget the gestures work in the finder... and I know that I would use it all the time if it always worked. In other words if the bell always rings and I can trust it, I will salivate. And I want to.

A PC with No Gestures
So eventually I found myself working again on another laptop. Man did I look like an idiot for a few minutes. I come to a page that needs scrolling, naturally I reach up to the touchpad with 2 fingers... moving it back and forth to get a scroll thinking for a moment damn computer is locked up or slow... only to discover that I was the component with the issue. It didn't help that my daughter was staring at me funny wondering what I was doing. She was still laughing even after I explained myself.

iTouch as a Birthday Gift
So last week was the same daughters birthday. I bought here a new iTouch. She loves it when I let it leave my hands for her to use. The first couple of days were great. She asked me "how do you turn it on?". I said, "It has one button... push it!". She would ask, "How do I get back out of this application?". I would say, "It has one button... push it!". And of course, she quickly gain the necessary skills and probably has surpassed my abilities on the thing within a few days.

PC is Not an iTouch
So last night she was asking me for some sync help between the laptop and iTouch. After a little conversation, she understands what she needs to do... she needs to hit the sync button on the laptop. What does she do? She taps the screen on the laptop... not once, but a couple of times and then begins to laugh. It was funny.

MacBook as a Fish Tank
Last example. I love to scuba and I love the ocean. When I saw the aquarium screen saver for the mac, it was an obvious purchase. So there is a setting on the screen saver, which reads "Enable Motion Sensor Water Tilting". First you have to turn this on! It uses the motion sensor on the mac so that if you tilt the laptop it appears that physics has applied forces on the water in your laptop the way you would expect. The water tilts! Here's the deal: The optical illusion is so good that even really savvy software developers are impressed and want to know: How?

Call to Action: Better Human Interfaces
If you combine the above stories with the fact that I just finished reading "Dreaming in Code", which outlines how far we haven't come in software development for the last half of a century, I'm left restless. There has to be more... there has to be better... Meaning more we can do and better ways of interfacing with computers. We are just beginning to see it. When you look at Microsoft Surface, Apple's iPhone and the promise of RFID, you begin to see it. It isn't what the general software developer is being train on or developing... They are still working on Dialogs.
Those who claim to be on the cutting edge, they are working on web 2.0 with javascript and cool new frameworks (they are cool). But that isn't what the future demands. The future demands seamless integration computer to human... where the human gestures to something and the machine understands. Where the computer knows what is expected and provides recommendation and choice. In this world, the interface isn't always a screen... and the input isn't a keyboard or a mouse!