Monday, November 14, 2011

Groovy Talk

I recently gave an "Intro to Groovy" talk for a local CIPS chapter.

It was a special evening: I returned to my alma mater, re-united with old friends, and met enthusiastic students.

I assumed the audience wasn't familiar with Java, and so the narrative was a high-level report of the blossoming ecosystem on the JVM over the past few years, with examples in Groovy. The material is available here.

My thanks to those who attended!

Saturday, November 12, 2011

Strange Loop Videos

This won't be news to most readers, but if, like me, you were not able to attend Strange Loop 2011: take heart. The videos are being released online at InfoQ. Here is the schedule.

The lineup is truly outstanding. For more about the conference, check out Weiqi Gao's review.

Tuesday, September 20, 2011

Blogger, OpenID, and Stack Exchange

I'm a big fan of Stack Exchange and have invested a fair amount of time on various accounts on there (mostly Stack Overflow, less on English and Music).

However, I have to admit that I do not keep up with their various escapades with OpenID. I hear about it on the podcast/blog, but I haven't paid much attention.

However, every now and then, it seems as though I can't get into my accounts via my Blogger URL. Not good.

Strictly speaking, I should research OpenID, Blogger's implementation thereof, and then study the trials and tribulations of Stack Exchange. Then, I could summarize it for you, dear reader, and we could reflect, philosophically, on the sharp corner-cases of the web while enjoying a beverage in a local pub.

This isn't one of those posts. This one is simply intended as a modest link-post of gratitude (aka "this worked for me!").

The Problem

When I visited a Stack Exchange site recently, I couldn't login via my Blogger URL, and may not have even been presented with the familiar login icon that I had been using.

One Solution

Follow the steps in this post on JMPinline, including creating a Google Profile and updating with the new links.

Presumably, Stack Exchange uses OpenID 2.0 now and this will upgrade your Blogger OpenID to that version.

Either way, I was immediately able to login to Stack Exchange. My sincere thanks to the original author!


Monday, September 5, 2011

Your Blog... Sucks

Hello CodeToJoy Nation!

Yes, yes, it has been too long since the last post. The internet has weighed in, and we have noticed.

Your friend and mine, Weiqi Gao, notes that "Nobody I know posts much any more".

The inimitable Nate Neff wrote to me with a succinct critique of my writings in the last year:

Your blog... sucks.

Well. On the evidence, assuming small, frequent updates are important (which is fair): guilty as charged.

However, I don't consider this blog defunct at all; in fact, I often talk about "the glory days" from a few years back.

I've been grappling with writing an annual retrospective, now that I have been pursuing a new chapter for over a year. The trick here is that challenges and triumphs have been much more on the soft side of software: team dynamics instead of technical innovation. I wrote an article along these lines for the NFJS magazine back in April. The article drew on years of experience, but the inspiration originated in my new world.

As I write this, I realize that I'll have to shelve that post and simply post smaller chunks. Stay tuned! I'm still here.

Sunday, June 19, 2011

Maritime DevCon 2011

I'm back from a jaunt to Fredericton, New Brunswick, for Maritime DevCon. Here's a post that lies between a 'random walk' and a review.


From PEI originally, I've spent most of my career in St Louis/USA. I've been an active member of the user group/conference scene there. When I moved to the Maritimes in 2010, I wondered if I could find 'my people' who can/read write in the original Geek.

The upshot is: these are my people. This one-day event was a gem. The organization was first-class (good food, killer door-prizes). The topics were interesting and straddled the fence between pragmatic and esoteric-but-neat (reminiscent of Strange Loop). Most importantly: the 'spark' was there; that palpable energy that naturally spins out of conversation between interesting techies.


Maritime DevCon was held at the Wu Centre at the University of New Brunswick. About 70 people attended, notably giving up a Saturday to spend time talking tech.


Here is the schedule. I attended these talks:

OpenStack 101 (by Sandy Walsh)

I'm not especially familiar with cloud computing, or virtualization, so I was surprised to learn that Open Stack is a huge initiative among big players (e.g. Intel, Cisco, and... NASA!?). The architecture involved here is mind-blowing: will the real platform please stand-up?

Random thoughts:

  • I often wonder if programming language X will be the Next Big Thing. Though it is in a different scope, virtualization is Right Now. Every time I think I have an appreciation for its influence, I see another talk where the landscape has changed ever further.
  • Pythonistas unite! Though thinking at this level often reduces the programming language to an implementation detail, I was delighted to hear that the underlying system is written in Python.
Redis (by Peter Doan)

At other conferences, I've missed talks on Redis, the key-value store. On the way to NB, I listened to a changelog interview with the author, Salvatore Sanfilippo. Consequently, I expected a simple, near-minimalist API, and Peter confirmed that with his code examples. Works for me.

Natural Language Processing with Java (by Chris Nicholls)

Interesting piece on the state-of-the-art in NLP, especially sentiment analysis. The two main libraries are LingPipe (not free) and Apache's OpenNLP. I hadn't thought about NLP in a long time, and certainly not with respect to Twitter: (a) Twitter could be a gold-mine (b) '#' is a legit, vital punctuation mark.

Git (by Chris Dail)

This was a thoughtful, solid intro to Git. I've been away from Git for awhile, so this was useful refresher, and pulled together a couple of tectonic plates floating in my consciousness.

I especially enjoyed a section described branching in terms of highway lanes rather than trees. I appreciated anecdotes about using the Git client for Subversion as a rebel effort to 'subvert Subversion'. Note that Chris has a detailed blog post about migrating from Subversion to Git.

Node.js (by Justin Vaillcourt)

Node is another topic that I haven't seen yet. For this talk, as my friend Weiqi Gao would say: you had to be there. This was pure, unadulterated hackage, executed by a pack of young, feral dogs with unbridled enthusiasm for technology.

Justin grinned though an abbreviated talk that ranged wildly. Just when frat-house interactions with his posse threatened to steal the show, out came jaw-dropping illustrations of Node.js.

A key example used the package:
  • a visitor hits a website and scrolls around
  • an admin console shows a thumbnail of page the visitor is viewing
  • as the visitor scrolls, navigates in his/her browser, the thumbnail scrolls in the admin console
This was done about 150-200 lines of Javascript. I don't know if this is a strong Node example. I'm still trying to wrap my mind around it.

MongoDB (by Derek Hatchard)

As with Redis and Node, I'm familiar with the buzz of MongoDB but hadn't looked into it. From the perspective of presentation techniques, this was a strong talk. A good arc from the motivation through to code examples, with images instead of bullet-lists.

Like Redis, the MongoDB API is deceptively simple. It's hard to appreciate the power. I was happy to see explanation of sharding with MongoDB, and very happy for an introductory theme on "no silver bullet", applied to relational DBs and NoSQL tools.


My main suggestion is that the sessions should have written evaluations. This benefits the speakers, the organizers, and ultimately the attendees. Also, there should be an overall conference evaluation.


It is non-trivial to travel from PEI to Fredericton, but DevCon was worth it. The material and the energy felt like events in larger urban centers, and that's saying something.

A shout-out to Derek Hatchard, other organizers, and sponsors: thanks! I'll be back next year, as an attendee (or possibly as a speaker?): after all, these are my people.

Sunday, June 12, 2011

Random Walk Down NFJS (2011)

Long-time readers know that I am a big fan of No Fluff, Just Stuff. There are many posts on this blog regarding reviews, keynotes, pianos, and so on.

Often, I start writing a "random walk" post, intending it to be quick and whimsical, but I end up writing a full review. This one will be quick, otherwise it won't be written, alas. Here we go...

I returned to St. Louis (again!) in May to attend the Gateway Software Symposium. As you can imagine, it was fantastic to catch up with old friends in a familiar environment. Just like old times.

Code As Proof

I attended Venkat Subramaniam's talk on concurrency without pain in Java. The talk was all-code with no slides. A few small examples began with "synchronized and suffer" (his phrase) model and scaled through various techniques, including locks, STM, and actors.

All interesting stuff, but I was especially taken with the elegance of the examples. If you've studied math, you may know the minimalist charm of a proof: there is no excess fat; everything is a direct line from A to B. As a presentation style, Venkat's talk recalled that spirit. Every example added one element to get to the next point.


HTML5 officially has my attention. I saw a few talks, and was taken especially with Nathaniel Schutta's session on mobile jQuery. As someone who is notoriously divided on choosing Android versus iOS as a development platform, this blew my mind. A unified UI experience for mobile! I'm still trying to get my mind around the idea (and how to monetize it in the various app stores).


The headline: Apache applies Sonar to its projects, as shown here. Matthew McCullough's talk convinced me that this isn't merely a collection of code metrics. With experience, I think a Sonar guru can transcend the raw data and see interesting patterns over time, such as the impact of summer weather on code quality (!). This is a Freakonomics-like enabler.

Crafting Software

Two paraphrased thoughts that really stuck (I hope I've captured the essence).

One from Peter Bell, along the lines of: on initial estimates for a project, give enough time to do the minimum spec, and include time to polish based on feedback from the first cut.

From your friend and mine, Ken Sipe: two major problems with software teams are (1) poorly defined acceptance tests and (2) dysfunction in the daily stand-up. When someone with Ken's experience distills things down to two items, that's powerful stuff.

And The Gradle Will Rock

Ken also spoke on Gradle. I'm a fan, and gave an intro talk back at GSS May 2010. The interesting story here is the growth. There is a lot of industry momentum here, and the training/book offerings are ramping up big-time.

Where's The Groovy!?

I caught Venkat's talk on Spock, and liked it very much. I didn't catch any Groovy or Grails talks, only because I'm very familiar with them. It was interesting to reflect on the history of these technologies. Grails has been 1.0 since Feb 2008! They grow up so fast.... *sniff*

Anapestic Tetrameter!

Nothing stresses me out like poetic meter (pun intended). It is one of a handful of high-school subjects that I just Could Not Understand. When I saw Tim Berglund's tweet that he was working in anapestic tetrameter, I shivered out of reflex. Gah!

Then, at NFJS, Jay Z showed the video. All is forgiven. Tim crafted an ode to Kent Beck's Implementation Patterns. Vote for Tim's vid on DZone. Vote it up on YouTube. It is wonderful.


This may sound like trite, blanket statement, but I can't mention everyone. The weekend truly was chock-full of heartfelt re-unions and conversations, on many levels. See you again soon!

Wednesday, May 4, 2011

Meet Me In St. Louis

Hello, Code to Joy Nation (esp. those in Saint Louis)!

Next week, I'll be returning to Saint Louis to attend the NFJS Gateway Software Symposium. I can't wait to be back in town and see everyone!

Long-time readers know I'm a fan of the tour, and think the speakers are top-shelf. Many keen insights and fond memories over the years.

A fond highlight was speaking at the Saint Louis show in 2010. This spring, I wrote an article for the NFJS magazine. Both were true growth experiences for me.

Last year, knowing I would be leaving, I wrote a personal 10 year retrospective, highlighting a certain piano at the Marriott West. Well, tune 'er up! I've missed it.

If you're at the conference, be sure to say hello...

Tuesday, March 29, 2011

Local Website as Tool Belt

Quick, answer this: on your dev machine, how many keystrokes does it take for you to find the documentation for the String class in your current language?

As I've paired with developers over the years, I've noticed a few patterns:

Just Google It

Gah! Consider working on a roof-top, say, at replacing shingles. Imagine needing a tool, and having to go down the ladder to get it. Now, imagine going down the same ladder every time you need the tool. For a professional, that strikes me as painful.


Much better. If organized well, bookmarks are undoubtedly terrific. A minor downside is that navigating a bookmark hierarchy still takes time. I can't criticize someone who chooses this style, but I can't do it. It's as though we have a toolbox up on the roof, but that it's 10 feet away from where I'm working.

Local Website

I worked with a developer circa 2003 who ran a local copy of Tomcat. He curated his own web pages according to his needs. I thought it was pretty crazy at first, but I adopted the idea.

True, this ain't "rocket surgery", but I just love it. It strikes me as a tool belt, where everything is within reach. Here's why:

Use the home page for your bookmarks

Rather than organizing my bookmarks in a given browser, I simply put my favourite sites on my home page. (As you might guess, the Javadoc for Java, Groovy, etc are front and center.)

The advantages are:

  • You can see a lot more information immediately, just by hitting that big, inviting Home button. I have a geek column, an intranet column, and so on. Rather than navigate a hierarchy, I let my brain pattern-match on the shapes of the categories.
  • You may end up collecting more links that you would normally bookmark. e.g. I would never bookmark the 2011 calendar, and yet this way, I have a link for it.
  • You can add various text, such as the phone extensions of teammates.

When pairing with someone, often you are at their workstation. How will you find your bookmarks from there? With a local website, you can point them to your page (while you're at, have them bookmark it).

Beyond Web Pages

By having Tomcat on your machine, you are opening a world far larger than mere web pages and links. You can start to share Groovlets with your team. This can be a big productivity boost, and a subtle way to introduce the concept to others. (I've been working on a writing assignment that explores this further. Stay tuned.)

Another bonus: if you need to work up a sanity check with CSS or jQuery, you already have Tomcat installed and running.

The Point

As developers, we love shortcuts in our IDE because we strive for "typing at the speed of thought". If you google something more than twice a week, consider putting it on a local web page. Over the years, I've found it to be very useful.

As always, I'm interested in your tips for productivity gains. Share 'em!

Monday, January 31, 2011

Software Archeology And Video Time Capsules

I was recently listening to Episode 338 of the Java Posse podcast, which is a recording of a session at the Roundup 2010. Near the 19:30 mark, a chap draws an analogy between software maintenance and archeology. Assuming the original team leads are no longer available, he asks (paraphrased):

  • What was the culture of the team?
  • What were the designs/philosophies of the original architect?
  • How can we make those thoughts more explicit?
Software Archeology

I found the moment to be eloquent, and reminiscent of an episode of SE Radio, where Dave Thomas uses a similar metaphor: code maintenance ultimately requires us to understand a culture by analyzing artifacts. Call it software archeology.


We can all name the usual artifacts: an architecture document, UML diagrams, sequence diagrams, and so on. If we are lucky, perhaps there are tests.

Unfortunately, all too often, documentation is formal and poorly written. Reading it for culture is like trying to understand a society by reading its laws: useful, but abstract and without soul. Worse, the documentation may be out of date and only vaguely relevant.

A Potential Solution?

As consumers, we spend untold amounts of money on video equipment, which is both powerful and easy to use. We think nothing of uploading staggering amounts of video to the cloud, documenting our lives, and yet in the corporate environment, nothing. This strikes me as absurd.

In addition to striving for new wikis, language constructions, and formal diagrams, why don't we use video?

Consider this: what if the team lead gave a 1-hour architecture overview, once per release, and it was recorded and checked-in to source control? What if s/he took an afternoon to make a screencast of a random walk through the IDE? That is, what if we treated video time capsules as project artifacts?

For future software archeologists, they would be worth their disk space in gold. Imagine the simple nuances and gems that are so difficult to express otherwise (e.g. "yes, we are bending the usual use of aspects here, but there was a trade show deadline. We hope to address this technical debt").

Note that in my vision, the production quality would be low: these could be one-take, banzai attempts. Naturally, no one can possibly explain all of the corners of a code-base, but this isn't about corners: this is about culture.


This strikes me as so obvious, that I must be missing something. Perhaps I am simply naive. Arguing against this idea, the main deterrents that I can see:
  • Companies may not be prepared to buy and manage video equipment. In terms of acquisitions and stewardship, it just isn't part of their DNA.
  • Managers may fear that video is somehow less secure than source-code.
  • For highly regulated industries, what happens if a team-lead describes a design flaw or technical debt? Could this be a legal liability? (This could be a major deal-breaker, but certainly not for all companies?)
  • There is no incentive for a team to prepare others for future maintenance. Even if video time capsules are effective, the status quo is good enough, and between leads, developers, and managers, no one will demand better.
What do you think? Does your team use video?

Monday, January 3, 2011


First, note that my former employer has a new look to its monthly newsletter, Software Engineering Tech Trends. I've always appreciated the articles (and wrote two), but now that I live in an area without many local user groups, I count on SETT when planning my study path.

January's article is a fantastic example. Your friend and mine, Mario Aquino, introduces us to koans, covering exercise packages in Ruby, Javascript, and Clojure (see comments for Groovy resources, Editor).

The Javascript example is especially easy to start and work with. A browser and a text-editor: it could scarcely be easier!

This is neat stuff. Read Mario's article for the full scoop on about martial arts training and Eastern philosophies. I'm definitely a newbie, but so far, I've noticed:

Testing as a contract

The koan style appears to embrace the view that testing is a useful prism for viewing an object. In normal software testing, the object is software, but here the focus is understanding. Despite a different focus, the tests as a concrete contract.

Not that we needed more evidence of being in a post documentation-centric era (post to follow?!), yet here it is.


Both the interactivity and the sense of Zen paradox reminds me of early text-based adventure games, such as Zork. It would take serious work and creativity, but I envision a learning app that combines the spirit of the koans with a sense of an adventure game. Potentially a great way to introduce kids into programming (or to their 2nd language etc).


Most of all, this stuff is outright fun. It's a potent combination of learning along with the electrochemical reward for passing tests. That's some mojo right there. What's not to love?