Wednesday, November 09, 2005

Context Lost

The computer can't tell you the emotional story. It can give you the exact mathematical design, but what's missing is the eyebrows.
-- Frank Zappa

Context is lost with technological advancement.

Back in September, Sunday finally succeeded in getting rid of Cyd. Smashingly brilliant! One of the best parts of the evening was when Sunday broke out her 10 year old Polaroid camera. When I first met Sunday and the topic of her camera came up she said, "I love it. Instant gratification." Today, not only is the gratification still instant, it's just downright freaky.

Ironically, every day we move into the digital age we lose context. Or, life.

My wife and I just purchased a 5 megapixel camera that replaces our 2 megapixel camera. We take thousands of pictures and keep a fraction of them. We regularly hand the camera over to our three year old son to take as many pictures as he can (yes folks, I predict in about 17 years an unprecedented revolution of photographers who've been taking photographs nearly their whole lives). We store our pictures with an online service and view them in perfectly formatted HTML tables or play them in high definition slide shows. We change them at will from perfect color, to black and white, to sepia, and back to color again.


I can remember wondering why everyone was so unhappy or serious in all of the childhood pictures of my great grandmother, born in 1891. Later someone explained to me that they all had to sit very still for a period of time so that the exposure would take. That's a story behind the story in every one of those photographs. How uncomfortable must they have been? What kind of day must they have had preparing for the photograph? What must have been going through a mother's mind anticipating the proposition of getting her child to sit still..?!

But even in my lifetime, context has been lost. I possess two photo albums filled with roughly 50 of my baby pictures. The photo paper is thick and the ink is tinged a subtle greenish-brown. Cameras, film, and film processing were not cheap for a new family. The photos have faded with time.

The physical nature is gone, and with it, the experience it embodied. The same can be said for programmers who turned in punch cards once a week to get processed. I cannot imagine the cost of a single compilation error in that system!

But maybe there is a continuity. Maybe one day my son will lament the day when Microsoft endorsed a technology incompatible with JPEG and his parents failed to convert the thousands of JPEG's they had of him. Maybe my daughter will lament the tens of thousands of digital files that we've entrusted to her but organized in a naive, 2004-like manner that is so counterintuitive to the technologies she uses. Maybe static photographs will be our lost context.

(In any case, Sunday, thanks for porting those photos to the 21st century!)

Monday, October 24, 2005

Relative Champs

Two last place teams that split apart, formed one team, then won the league...

Top row, left to right:

Cam Stewart, Goon. Goal Scorer. Father.
Mike Smith, Software Engineer, Sun Microsystems
Rob Ford, Architect, Level 3 Communications
Dave Skema, ex-Kent State club team member
Josh Sims, ex-Steamboat Springs club team member
Rick Pease, ex-Connecticut area goaltender
Patrick Gates, DBA, Level 3 Communications
Jason Snider, 18 years old with energy to burn

Bottom row, left to right:
me (Joe), ex-goaltender with a taste for scoring goals
Claire Solohub, Calgary, Alberta native
Jamie Slorf, Goaltender. Father. (holding real gold-colored metal trophy)
Sloane Stricker, DBA, Level 3 Communications
Steve Sangalis, ex-U. of Indiana club team member
Molly Meehan, Marketing, Avalanche/Nuggets/Rapids

Not pictured:
Brian Snider, Edmonton, Alberta native
Brian Yarosh, the enigma
Free pitcher of Molson

Sunday, October 09, 2005

How to Write More Clearly, Think More Clearly, and Learn Complex Material More Easily

This is an excellent presentation by Dr. Michael A. Covington of the Artificial Intelligence Center at The University of Georgia. He makes such interesting points and I think this has so much relevance to some goals I have for this blog and to engineering in general.

Some thoughts...

I've found that it's very hard to translate personal technical knowledge into elegant, interesting writing that engages a reader. I've also found that you really need to know what you're talking about inside and out and exactly what the goal of your writing will be. This really dawned on me when I wanted to write about Apache Axis handling web service calls from a .NET client. I realized that I didn't know how we had deployed Axis, or really how it actually worked, even though I was writing to it every day for months. I think this is common, especially in large companies. One of the ironies of engineering is that well-engineered products shelter developers from having to know their internals, but we generally end up digging in and learning them anyway. To some extent, this is one reason why I've posted very little of what I want to say with my technical voice.

In my book, the King of translating deep technical knowledge into interesting and engaging writing is Rod Johnson. By far.

"You don't understand anything until you learn it more than one way." --Marvin Minsky

Dr. Covington makes this same general point in one of his "Clear Understanding" slides (#92). This is something I've personally witnessed through myself working with different languages and life cycles of projects and in engineering in general. For instance, it's truly remarkable to have an epiphany about the elegance of a design pattern (or hideousness of an anti-pattern), or come back around on a database design decision for a project that supports some totally unforeseen requirement from some unrelated project. Most recently, Threading has been the foremost area of personal learning for me along these lines - probably because, in order to truly know threading, you must be bit in the ass by it hard a few times.

"Better to keep your mouth shut and let people assume you're stupid than open it and remove all doubt." --anonymous

I've read various buzz about managing projects through blogs or wiki's. Blogger's team support is intriguing and I've checked out cool services like Backpack. I've realized that the stumbling block isn't the tools support, it's motivating other engineers to
actually write (sentences). I think this is one subtle underlying reason why the XP tenet of self-documenting code is one of the easier XP practices to actually adopt.

"The more I see, the less I know..." --Matt Johnson, The The

So in the end, Dr. Covington is really giving a nod to all the technologists out in the blogosphere. For me personally, his presentation is an affirmation of my methods to figure out what I know and continue my journey of learning.

Tuesday, October 04, 2005

NHL celebrates opening night with historic 15-game slate

The National Hockey League opens its 2005-06 regular season Wednesday with 15 games, 30 clubs in action, dozens of storylines and 600 players in uniform in front of an expected quarter-million fans at sold-out arenas, marking the busiest playing date in the League's 88-year history. NHL teams had combined to play as many as 14 games on nine occasions, the most recent of which was Nov. 1, 2003.

It also marks the first time that all NHL clubs are in action on the schedule's opening night since 1928-29, when 10 clubs were featured. The last time all clubs in a major pro sports league played on the opening date of the schedule was in 1969, when the National Football League kicked off with all 16 NFL clubs and 10 AFL clubs participating.

Here are some fearless predictions for the Avalanche by people "in the know":
  • John Buccigross, ESPN: 9th in the Western Conference
  • Jim Kelley for ESPN: 9th in the Western Conference
  • Adrian Dater, The Denver Post: 7th in the Western Conference
  • Scott Wraight, 13th overall in initial power rankings
  • 20-1 odds to win the Stanley Cup
  • Canadian Press: Joel Quenneville as 1st coach fired, 3 teams headed downward
From what I can tell, these guys are only focusing on the negatives of losing Foote and Forsberg (who, by the way, has been injured for the majority of the last three seasons with the Avalanche, and last season with MoDo).

Here's why I disagree and think the Avalanche will finish no worse than 5th in the Western Conference:
  1. Their head coach has a Stanley Cup ring.
  2. Their goaltender's name is on the Stanley Cup.
  3. Rob Blake, Norris Trophy winner, All-Star.
  4. Joe Sakic, Hart Trophy and Conn Smythe Trophy winner, All-Star.
  5. Milan Hejduk, Maurice Richard Trophy winner, All-Star.
  6. Alex Tanguay, career high 79 points last season, #1 star with 2 goals in Game 7 of the Stanley Cup Finals against the second best goalie of all time.
  7. New addition Andrew Brunette, 49 points last season under Lemaire's defense-first system.
  8. New addition Pierre Turgeon reunited with coach Quenneville under whom he scored 66 points in 55 games of clutch-and-grab hockey, last season notched his 16th consecutive season of 40+ points.
  9. Leadership: one current, and three previous NHL captains: Joe Sakic, Rob Blake, Pierre Turgeon, and Steve Konowalchuk - captain of the Capitals when they went to the Stanley Cup Finals.
  10. Karlis Skrastins, second only to Blake last season in Time-on-Ice minutes - ahead of Foote(3) and Sakic(4).
  11. John Michael-Liles, Team USA defenseman.
  12. No more team/press soap opera that is, "No offense to you guys BUT is Peter ready to play again? Will he be back? Will he? Will he? Please say he's ready..!"
Stay tuned hockey fans! It will be interesting!

Sunday, October 02, 2005


Our neighborhood pool closed a couple weekends ago. We took the kids for the final day to wrap up the summer. While we were there, I couldn't help but observe one mother's interaction with her son, Jacob. Jacob was pretty wild and his mother spent a majority of the time trying to rein Jacob in, specifically with the following sentence repeated over and over:

"Jacob! Stop! That's against the rules Jacob!"

Her choice of words was very interesting to me. Instead of, "Jacob, that makes mommy angry because you're making a mess. Now you'll need to clean it up.", or "Jacob, do you see that he doesn't like getting water splashed in his face?", or "Jacob, I don't like to see you run because you can fall and hurt yourself." or even, "Alright mister, TIME OUT!"

In other words, Jacob's learning to live by the letter and not the intent. He's learning about rules but not really about the reasons why we have them. And he's learning that they shouldn't be broken (or, that they're easily broken with little consequence).

I don't want my children to be afraid of action simply because it's "against the rules." Things get done and innovations created
against the rules. I want my children to have a deep understanding of the rules, which rules are sacred, and which rules are made to be broken. A rule by itself is a hollow shell that's easily broken or blindly followed by the Inconsiderate. I want my children to grow on a solid foundation of consideration.

Saturday, October 01, 2005

And the Oscar for Best Picture goes to...


Written and directed by Paul Haggis, the guy who did the screenplay for "Million Dollar Baby", "Crash" is a much more engrossing film that was emotionally gripping in a way that "Million Dollar Baby" lacked. It's hard to pick one shining performance from this amazing cast of actors; I thought they were all brilliant, especially in the minor roles. I thought Matt Dillon really shined and Brendan Fraser far exceeded expectations (yet again). This was a real acting movie in the vein of "American Beauty". I really hope IMDB is wrong and this movie is eligible for an Oscar next April.

To date, the best movies that I've seen this year are (in order):
  1. Crash
  2. Batman Begins
  3. Oldboy
  4. Sin City
These are the movies that embody the essence of why I spend valuable time watching movies.

One other personal observation about "Crash"... The underlying theme of the movie is racism and the setting is Los Angeles. I've only spent a grand total of about 2 weeks in L.A. My impression of the city and other large areas in California such as San Diego and San Francisco/Oakland is that those cities are indeed racially charged in a way that I haven't really experienced in other parts of the U.S. I'm curious if local movie buffs thought "Crash" was an extreme representation of undercurrents in Los Angeles or if it was really close to the actual vibe of the city.

Tuesday, September 27, 2005

Microsoft, JBoss link up

The deal doesn't mean Microsoft is softening its hard-line stance toward open-source development or becoming a Java enthusiast, Platform Technology Strategy Director Bill Hilf insisted. But with a significant number of JBoss customers deploying on Microsoft's platform, it's in both vendors' interests to ensure those deployments go smoothly, executives from the two companies said.

I guess only the JBoss and Microsoft guys really know the motivations behind this relationship but it sure is interesting. I wonder how much visibility the optimizations will have in open source software.

The article goes on to say that "JBoss...estimates that half its customers run its JBoss Enterprise Middleware System on Microsoft's Windows Server." I guess I'm surprised at how many customers are running JBoss on Windows Server. Or, I'm surprised that I'm surprised... I've only had about five years of J2EE experience and it's always been deployed on Solaris or Linux. My impression, shaped by senior managers, is that Windows Server is not reliable or secure enough to run a production environment. Either this is naive or a lot of JBoss customers aren't running in production environments (probably the former). I'm curious about other perspectives.

Saturday, September 24, 2005


A good friend of mine started in the MBA program at the University of Colorado - Denver last week. We talked about how all the classrooms are wi-fi enabled, how everyone takes notes on their laptops, how you can search the web for topics or people that you're discussing right at that moment, or how you can blow off the discussion and just surf or IM. Certainly none of this is a surprise to me but it's definitely different than when I last attended a college lecture.

What did surprise me is the rules for taking exams. Apparently they shut down wi-fi access (but if you're enterprising you may be able to find an unsecured access point). And they will allow laptops on some exams. But on other exams students get a few pieces of paper and a calculator only. The most surprising rule to me was that they don't allow cell phones in the exam. Apparently students have taken photos of the exam, emailed them to friends, and then received text messages with the answers! Man, if these students put in half the effort to studying that they do in coming up with nefarious cheating methods...

It reminded me of my favorite cheating incident while I was an undergrad at CU-Boulder. I was finishing up my first CS programming course (Pascal!!!), and it was the last assignment, which is to say that it was the toughest yet and we had to put a lot more time in at the lab. We also had the choice of working with one or two other students in a group. My professor for the course was an engineer at Ball Aerospace in Boulder and I guess he wrote embedded software for satellite systems. Anyway, at the end of one of the last classes of the semester, the professor called up a group of three guys. I was sitting in the front row and heard the whole thing (picture an angry professor/engineer and three stunned 19 year-olds):

"Did you guys write the program that printed this output?" (holding up the printouts)
--- silent nodding ---
"There is no way that your program could've created this output."
--- edgy silence ---
"So here's the deal... one of you gets an 'F' for the semester. You guys go and decide who and come back and tell me."


The temptation at the time was to pull scrap printouts from the recycle bin at the lab. I don't know if that's what they did, but if so, it obviously wasn't very smart (think about why they're in the recycle bin).

My other reflection on cheating is that I was most exposed to it in natural science courses that were part of the pre-Med track. I really resented students that spouted off constantly in Chemistry lab or BioChem lab about how they sat in on a surgery or rode in the ambulance, etc. then would copy lab assignments at the last minute... In fact, the cutthroat atmosphere was what ultimately drove me away from natural sciences and the pre-health track; well, that and an honest C+ in Chemistry. Looking back, and also giving a nod to close friends who became doctors, I'm confident that the medical school pipeline eventually weeded out those hacks.

Monday, September 19, 2005

For Posterity

This album really made an impression on me and I just thought I'd share... Dusk by The The.

Sunday, September 18, 2005

CU-Boulder Ranked 11th Best Public University In World

A new survey of the world's top universities cited in the Sept. 8 issue of The Economist ranks the University of Colorado at Boulder as the 11th best public university.

It's nice to see my alma mater get some positive recognition that it deserves.

You might ask how this ranking is reconciled with some of CU-Boulder's more notorious rankings in the past. I think the answer is pretty simple. One ranking is faculty-side while the other is student-side. The intersection is the opportunity to either take advantage of a world-class education or squander it; the institution won't hold your hand. I believe that this experience closely models life after college. And isn't that why we make such an investment in our college education; to find an avenue of pursuit in life and be prepared for it?

Thursday, September 15, 2005

Colorado Avalanche Camp Opens

In case you hadn't heard, the NHL is back! The Avs opened camp this week. The NHL will have a new look this year and if you've ever been remotely interested in hockey this is a great year to start getting into it. Chances are that your hometown team has as much of a shot to win the Stanley Cup as any other team (well, ok, the Red Wings and Stars don't have a chance...)

I personally celebrated the return of the NHL with a goal in our men's league championship game victory. It capped a personal best five-game scoring streak. That's not bad for a guy who grew up playing goalie. And thanks to Scott McNealy, I get to play at a pretty nice rink.

So why does this year have so much potential to be more exciting than years past?
A few reasons:
  1. A salary cap has been put in place that forced a lot of teams to shuffle their lineups. Many superstars have switched teams. The financial playing field has been leveled significantly for small market and Canadian teams.

  2. Sidney Crosby, the most highly touted player to come out of the Canadian major junior leagues since Mario Lemieux (think Wayne Gretzky or (gasp) LeBron James). Interestingly, Crosby lives with Mario and will be playing on a line with Mario in Pittsburgh this year.

  3. New rules designed to open up the game and increase scoring. I'm taking a wait-and-see approach to this. I think the shootout will be huge. I like that ties are gone and fans have to leave the rink happy or sad. In truth, I wished that the owners would remove some seats and put in place international-sized ice sheets. The impact to revenue would be significant but I think we'd finally see truly awesome hockey. Anyway, maybe we'll get to see Peter Forsberg play hockey instead of football (sigh).

  4. Players will be more involved in marketing campaigns. Players will be more recognizable like they are in the other three sports. Rumors are going around that goalies will be able to customize their uniforms like their masks, and possibly sell advertising on their jerseys. All this coming from the "aw shucks" league or "I got lucky on that last goal. I'm just trying to work hard and take it one game at a time." ZZZZZZ zzzzzzz ZZZZZZZZZ zzzzzzzz.
And finally, the true reason to get excited again is the Stanley Cup will find its way back to its familiar, comfortable home in beautiful Colorado. I can't wait to see my third Stanley Cup parade.

Wednesday, September 14, 2005

Office Space

Scene from our office break room today: VP of Operations, Manager of Customer Support, Software Engineer (me).

I walked in to grab a plastic spoon. The drawer with the spoons was empty so I grabbed a new box from the cupboard, grabbed a bunch from the box and put them in the drawer, then took my spoon.

The Manager of Customer Support laughed. Just before, she noticed the spoons were gone, took out the box, grabbed one spoon and put the box back.

And just before that, the VP of Operations looked for a spoon, couldn't find one, and made due.

In other words:

The VP of Operations recognized the problem and redefined it as non-mission critical.

The Manager of Customer Support reproduced the problem, immediately discovered a work-around for the person experiencing the problem and passed it on to an Engineer for further examination.

The Software Engineer reproduced the problem and implemented a relatively short-term solution because, well, a better solution like purchasing non-disposable silverware would probably be too time consuming and costly. And anyway, he probably won't have to deal with the problem again very soon. In fact, one could almost argue this is a marginal use case as forks work in almost any situation. And if the forks and spoons both run out..? Well who wants to work for a company that lets that happen?! I bet Google doesn't have that problem.

Thursday, September 08, 2005

Driver's Seat

The best driving advice I ever heard was given by Tom and Ray Magliozzi, the Car Talk guys. They gave advice on how to set your sideview mirrors to eliminate your car's blindspot. In other words, when you're changing lanes, you can simply trust your mirrors completely without having to glance over your shoulder. I implemented their solution about a year ago and I love how it works. I really can't believe they didn't teach this in Driver's Ed. back in the day, and the more I happen to drive other people's cars, the more I see that not many people use this really handy piece of advice.

So here's how it works: picture a car coming up behind you that will pass you either on the right or the left. Ideally you want your mirrors arranged so that, as the car moves out of range of your rearview mirror, it moves into range of one of the sideview mirrors. In other words, you can always see a part of the passing car; at least the tail-end of it or the very front bumper. As the car passes, it will move out of range of the sideview mirror and into range of your peripheral and forward looking vision.

So here's how to configure your mirrors for this to work: sit in your driver's seat (I'll assume an American car with the steering wheel on the left). Tip your head the left so that it bumps right up against the driver's side window. With your head tilted and looking into the driver's side mirror, adjust the mirror so that you can just barely see the backend of your car. That will seem to be adjusted pretty far out when you sit upright. Now for the passenger side. You basically do the same thing, but it's a little trickier. You may have to sit in your driver's seat where the controls are and estimate the correct position, imagining what the angle would look like. Or you can sit in the passenger seat, but imagine tilting your head all the way over from the driver's seat. You may have to tweak this side a little as you go.

It doesn't seem right at first. The mirrors seem spread too far apart and you can't see directly behind you in either sideview mirror. In fact, you may have to sell the system on your spouse if you share cars... But give it a chance for about a week. Test it out by watching closely cars coming up and passing you. It absolutely works.

Monday, September 05, 2005


Finished Winning by Jack Welch. It's a sweeping, no b.s. business management book that covers everything from leadership, change, competition, strategy, mergers, etc. to managing your own career. Not surprisingly, the book's anecdotes are set in the context of huge corporations but its messages are certainly applicable to very small companies with tens of employees. The book is written in "Welch's optimistic, no excuses, get-it-done mind-set" and it's a refreshing, quick read for anyone that's a student of Business.

Here are some points that I really took away from the book:

Winning in business is a good thing. Winning businesses create economic opportunity for families, they create revenue for governments, and they create opportunity for people to give back to their communities.

Differentiation, or the 20-70-10 rule. This is a process by which managers differentiate their people into 3 categories: top 20%, middle 70%, and bottom 10%. The top 20% are treated like all-stars. They should be showered with bonuses, stock, training, perks, whatever. They're treated like the best. However, the middle 70% may be your most important chunk of workers because they're your majority. They should be managed with training, positive feedback, and thoughtful goal setting. People in this category should be moved around to test their leadership skills. People are cultivated and moved up from the middle 70%. Then there's the bottom 10% that makes this system seem cruel - they have to go. Welch's point here is that if expectations and goals are clearly communicated and the person is still not performing acceptably, it's better for everyone, including that person, to move on. It's likely that person will go onto other pursuits and will most likely be happier in a position they're performing well in. I think this makes a lot of sense. Of course, this entire system is based around a formal review process and setting clear-cut expectations.

Acid Tests for assessing people for a job. The first test is for integrity, the second for intelligence, and the third is maturity. He also goes on to explain the 4-E (and 1-P) framework: positive energy, ability to energize others, edge (courage to make yes-or-no decisions), execute (ability to get the job done), and passion.

"Create effective mechanisms - read: money, recognition, and training - to motivate and retain. ... People need to get differentiated rewards and recognition to be motivated. And companies need to deliver both for retention. It's that simple."

"Spend plenty up front, and put the best, hungriest, and most passionate people in leadership roles. ... One thing is for sure: new businesses with limited resources and good-enough people stay small."

And finally, regarding work-life balance: "Outside of work, clarify what you want from life. At work, clarify what your boss wants, and understand that, if you want to get ahead, what he or she wants comes first. You can eventually get what you both want, but the arrangement will be negotiated in that context."

Saturday, August 27, 2005

Which Framework Should I Use, .NET or J2EE?

(series cont.)

In this article, Matthew Murphy concludes by asking, "So Which Framework Should I Use, .NET or J2EE?"

One compelling answer is: Use both. Together.

If you've deployed an application server like JBoss or even a servlet container like Apache Tomcat, it is relatively easy to publish Java web services with Apache Axis. Likewise, it is incredibly easy to consume services in .NET. The bridge is XML. And by combining the built-in XSD tools of Visual Studio .NET (or a product like XMLSpy) and a Java-to-XML binding product like Castor, you can build a completely interoperable application in an amazingly short amount of time.

XML works great if you need to pass a complex object from a .NET client to a Java web service. One way to do this is to pass the XML as a byte array and unmarshal it on the other side. You can even compress the array before it goes. Though this is not extremely straightforward, Castor and C# make it relatively easy to do. When a complex object is not necessary or required, I have not experienced a problem with passing primitives, or arrays of primitives, between the two technologies. One exception would be passing a Date. The way I've worked around this problem is to format the date with W3C formatting and pass it as a string.

Another pretty cool feature of this architecture is that C# .NET reports exceptions that occur on the Java web service side. I believe this is due to C# .NET's handling of SOAP faults and wsdl:faults.

The potential snag that I've faced with this architecture is that C# .NET does not have a remote transaction manager (as far as I know). Where we've needed rollback capabilities, we've had to build processes from scratch. I understand how critical this is, but we've found ways around it (admittedly not as elegant as a remote transaction manager...)

So why go down this road? I believe that we're delivering best-in-class technology solutions to our customers. By "best-in-class", I mean a rich UI that is not sluggish or awkward and that users are actually impressed with and identify more with as an installed application. And importantly, a UI that is actually distributed over the web and utilizes HTTPS. Then that, coupled with server technology that is extremely reliable and secure as well as open and portable.

Tuesday, July 26, 2005

Star Wars and the Vocabulary of a Three Year Old Boy

"Mister Yoda"

"Darth Small"

"Andy Skywalker"


... And, no. He hasn't seen the movie. And he won't see the movie until he can handle it. He sees all the other marketing crap and tries to make sense of it.

Sunday, July 24, 2005

Mark Helprin

I saw Mark Helprin at a book signing at the Tattered Cover bookstore in Cherry Creek last Thursday. I've read two of his books, Winter's Tale and A Soldier of the Great War. A few of his books are considered literary masterpieces. I felt like I was sitting in the same room with Charles Dickens or Herman Melville; it was truly awesome.

He filled the evening by telling roughly twenty or so stories. He could have gone another hour and nobody in the audience would have flinched. His stories generally involved language in some way (which isn't surprising if you've read his stories and understand how incredible his mastery of language is). He said he speaks seven different languages and spoke at least four to us. He alluded to The Odyssey, Dante's Inferno, Don Quixote, and other stories like he had memorized them. He joked around a lot. It was kind of like I imagine being in a room with George Burns - I'd be nervous to be alone with him because he's so sharp it's almost scary.

He grew up on 1,000 acres of forest next to the Hudson River in New York; in his words, "1,000 acres of birds." His father worked directly for Samuel Goldwyn in the film business. Mr. Helprin said his parents didn't drive him to play groups or really socialize him so he grew up walking around the forest thinking. He said that being around other people made him really uncomfortable, so he would tell stories as a sort of mask.

When he was 17 years old, he went to France with a female classmate. He was going to meet her in a city and decided to try and impress her by arriving on a motorcycle "James Dean" style. So even though he'd never ridden a motorcycle before, he rented one and drove to the city. Just before he got there, he flipped the bike going about 40 miles per hour and it landed on him critically injuring him. He had internal injuries and a head injury that almost killed him. He was attended to on a U.S. Navy ship on its way to Barcelona. In Barcelona, he ended up in a seedy hotel, bandaged up with little medication. He said he thought he was going to die there.

One night around three in the morning, he instantly awoke and all of his pain was gone. Not only that, but he had realized that his head pain was gone and that he'd been dealing with it literally his whole life. There was a nightstand next to his bed with a pen and pad of paper. He wrote down a description of an ancient cathedral that was converted from a Muslim mosque into a Roman-Catholic church. He said he woke in the morning, read what he had written, and couldn't believe the writing that he'd done; that it was something his professors or professional writers would write and not something that could be conjured up by a 17 year old boy. He said from that day on he was a writer. He said, "blame it all on a brain injury!" Incredible.

Mr. Helprin is truly a Great man. His views on our world are interesting to say the least. Though I find his opinions hard to swallow, I seek them out as diverse information points. Check out the following links if you're interested: WSJ opinion and the National Review.

Tuesday, July 19, 2005

What's Your Special Skill?

A Special Skill is something quite ordinary, odd, and typically frustrating in life that you find you're extraordinary at performing in an alarmingly consistent fashion. Examples of Special Skills might be, "able to drive my kneecap into the leg of a table when sitting down at wedding receptions" or "able to choose the line containing the longest wait at the supermarket checkout".

Interestingly, my Special Skill has evolved over time. It used to be that I couldn't fold maps back up to their original state once I had unfolded them. But over the past year, it's turned into this weird pattern of watching consecutive or near-consecutive movies with the same actor (or character) in them. I seem to do it quite unconsciously - in fact, I conscientiously try to prevent the situation so that I can really appreciate different characters that actors play.

Most recently, I watched Morgan Freeman in Batman Begins and then again in Million Dollar Baby. But here are some other recent examples:
  1. A strange coincidence of Mount Rushmore being featured in North by Northwest then again in Team America World Police!
  2. Don Cheadle in Hotel Rwanda then again in Ocean's Twelve.
  3. Jude Law in I Heart Huckabees then again in Closer.
  4. Daryl Hannah in Kill Bill Vol. 2 then again in Silver City.
  5. Sean Penn in The Weight of Water then again in 21 Grams.
I caught the situation again tonight when I managed my Netflix queue and noticed my next two movies were The Machinist with Christian Bale and Kinsey with Liam Neeson. Again, the movie I saw last Saturday... Batman Begins.

Tuesday, July 12, 2005

Personal Reflection on London Bombings

This post does not address the bombings per se and I have nothing else to add that the blogging community hasn't already. That said, my family's prayers go out to the loved ones of people who lost their lives.

The bombings marked a significant moment in my life. I was working from home that day and I saw the news first on Yahoo and followed it throughout the day. The significance of this was that it didn't even occur to me to turn on the television for news coverage. This was quite an alarming but amazing revelation for me (the next day, on my way to work listening to public radio).

I go to work on the Internet every day and it has now replaced television as my news source of choice.

Wednesday, July 06, 2005

Aftermath of the Knife

Our son's umbilical hernia operation went well. The surgeon was done in about 20 minutes. The craziest thing about it is that our son went from having an "outie" belly button to now having an "innie". It looks totally different - the doctor did an amazing job. Check it out.

Friday, July 01, 2005

Blind Search

One thing I've been thinking about recently is that it's still very hard to find information about something on the Internet if you don't know anything at all about it in the first place. Google is awesome. But I think we're a far cry away from the Mr. Wizard kiosk that David (Haley Joel Osment) seeks answers from in the movie Artificial Intelligence: AI.

This problem dawned on me when we bought a house and inherited a large garden with all types of plants and flowers that you typically see in Colorado. The garden lines the entire front of the house so we like to put some work into keeping it looking nice. But with some of the plants, we don't know if they're a weed or not. I found out that it's very hard to search for a plant that you only really have a physical example of. I'm sure brilliant minds are thinking about this problem and even starting down the path of accepting a photo as search criteria (an awesome notion when applying it to plants or glassware, but downright frightening when applied to people and faces).

Anyway, our garden provided another challenge of this sort when I met a current resident.

You could say that I'm pretty uneasy around snakes, especially snakes that I meet when I'm gardening (the introduction typically involves squealing like a little girl and running). So in the short amount of time that I give myself, I needed to gather as much information about the slitherer so that I could identify it on the web.

Fortunately there's a great resource for doing just this: The Colorado Herpetological Society, Key to the Snakes of Colorado. With this key, I was able to easily identify our friend as a Coluber constrictor or Racer.

I also took note of the key because it's a great example of a wizard user interface. It's an extremely effective UI and it couldn't have been done more simply: an HTML table and some anchors.

So if you're ever in Colorado and you meet one of our native slithering residents, take a moment to notice its tail and scale pattern and appreciate how one web site solved a pretty hard problem in an elegant way.

Thursday, June 30, 2005

Under the Knife

My son is having surgery for an umbilical hernia (aka "outie" belly button) tomorrow. Actually, an "outie" is just a symptom of it. Sometimes the umbilical cord opening doesn't close completely and it needs to be stitched closed in the abdominal wall. The scariest part for us is that he has to be put to sleep with anesthesia. The docs told us that there's actually a greater risk that his airways could close with local anesthetic. Doctors recommend that the child refrain from vigorous physical activity for a couple weeks after the surgery; I'm not sure how we're going to reconcile this with a three year old boy who loves to do back flips off couches.

Monday, June 20, 2005

Jaundiced Jelly

Heads-down coding usually involves two things for me: candy and music.

There is a Jelly Belly brand jelly bean, yellowish in color, that's vomit flavored - or mimics vomit flavoring closely (you know, like how their Chemists didn't get "pear" exactly right). Trust me and avoid popping it in your mouth. I'll post a picture of the offender if I can. It blends with lemons so avoiding all yellow-likes is not a bad policy for now.

And along with that little nasty, I'm still trying to get the taste of Gorillaz Demon Days out of my mouth. Blechh. I never really thought Damon Albarn of Blur was incredibly talented (in relation to his peers) and was not impressed with this release. I didn't know what Gorillaz was all about, besides bland music, and I'm only slightly more impressed with the whole "cartoon band" thing. Of course, I have a three year old boy and have become a connoisseur of animation over the past year as well. I seem to remember when Blur's Parklife won the British album of the year award back in its day and Mr. Albarn's acceptance speech read something like, "WAKE UP AMERICA!" Hmmm. At the time, I don't remember hearing Radiohead (or Bush for that matter) whining about their record sales in the U.S.

Saturday, May 28, 2005

Pondering Potential

My son exclaimed, "Hey Dad, watch me jump off the couch!"
"Be careful." I replied.

Be careful.

It's usually the first response out of my mouth when my son's about to attempt something that I think could remotely harm him. But it struck me recently that "Be careful" may be the least constructive bit of parenting that I could conjure at any point in time.

I contemplate if that canned automatic response, though certainly well-meaning, is slooowly prodding my son down the well-traveled path of mediocrity; if my intentions of raising a child that has any chance of thriving in an ever-scarier world are actually being undermined by such an insipid response.

When I think of Great people, "being careful" is definitely down the list of personality traits and practices that I'd attribute to their greatness.

What about Happiness? Obviously Greatness and Happiness are significantly different. But I think the two are entwined in a way that is affected by a child's upbringing.

Is my son destined for Greatness? That's nearly impossible to answer. But is my son
less destined for greatness after growing up on a steady diet of stale notions and empty advice? My careful mind is telling me yes.

Friday, May 20, 2005

Java vs. C# Series: Productivity 2

C# developers have a dirty little secret. We all have a list of annoyances, bugs, and workarounds that we deal with every day while we write C# code. These are the Anti-Productivity features of C# .NET.

I was first clued into this at the beginning of my .NET tenure when all the controls disappeared from a form I'd been working on for days. We had just hired an experienced C# programmer to mentor the Java guys as we got up to speed with .NET. When I brought him over to my desk and showed him what had happened he said, "ohh, yeah, sometimes controls do that with WinForms in Visual Studio..." This was the beginning of a long personal list of problems and subsequent workarounds that I've now collected over the past year.

See for yourself. Go to Google or Google Groups and search for "A failure occurred while attempting to start the compilation." This little goodie happens randomly as you compile your project throughout the day; meaning, you'll be working happily for the first few hours of the day then you go into compiler hell for the next two hours. The kicker is that it seems to happen AFTER the compilation is complete. And the problem is obvious by its description, isn't it?!

Or how about this ugly little compiler error: "
The process cannot access the file because it is being used by another process." Which file? Who knows!? Which process? Who knows!? Microsoft knows about this one and it looks like it will be fixed with VS 2005. That's no consolation to developers using VS 2003 every day. All that's painfully clear is the stress you might have been feeling before from a project deadline has now been magnified 100 times because you can't get a BUILD for CRYING OUT LOUD!

Also, as you're perusing the problems people are reporting on the web, notice that there aren't many answers out there. Dr. Spock! This... doesn't appear... to be... open source. And does Microsoft really have the gall to charge for a patch that fixes something that Visual Studio should just DO anyway?

The reason these annoyances frustrate me so much is because I can't remember dealing with bugs like these while programming in Java. And although I probably have, the point is, its such an extraordinary circumstance that I don't remember. I can remember using JBuilder and NetBeans years ago and being frustrated with their performance; but at least they worked properly. I do run Eclipse now. I can say that my experience with Eclipse' performance is much worse than my experience running Visual Studio. Then again, I work with code on a remote location when I'm running Eclipse. And frankly, Eclipse does exactly what I need it to every single time I run it. In any case, I think there's a subtle but significant difference between performance issues and things that just plain break. It was fascinating to me how our experienced C# guy was just resigned to the fact that this was normal. I guess I'm there too to some extent...

So to join this back in with my Productivity thread, I just want to make it clear that I truly have been more productive using C# .NET... but I could be so much more productive if I didn't have to deal with all of these inexplicable issues.

Friday, May 13, 2005

Moneyball for Software

In Moneyball, author Michael Lewis outlines 5 simple rules that Billy Beane, General Manager of the Oakland Athletics, kept in mind as he was shopping for players just before the trading deadline:
  1. "No matter how successful you are, change is always good. There can never be a status quo. When you have no money you can't afford long-term solutions, only short-term ones. You have to always be upgrading. Otherwise you're fucked."
  2. "The day you say you have to do something, you're screwed. Because you are going to make a bad deal. You can always recover from the player you didn't sign. You may never recover from the player you signed at the wrong price."
  3. "Know exactly what every player in baseball is worth to you. You can put a dollar figure on it."
  4. "Know exactly who you want and go after him." (Never mind who they say they want to trade.)
  5. "Every deal you do will be publicly scrutinized by subjective opinion. If I'm [IBM CEO] Lou Gerstner, I'm not worried that every personnel decision I make is going to wind up on the front page of the business section. Not everyone believes that they know everything about the personal computer. But everyone who ever picked up a bat thing he knows baseball. To do this well, you have to ignore the newspapers."
Points #1 and #2, and to some extent #3, directly relate to small software companies and the software developers who work for them.

#1 is interesting. As a software developer I'm trying to gain new skills every single day. I've often found that when you start to get comfortable it starts getting dangerous for your career. Newer, better technologies are released out to the world every single day. I think a fundamental misunderstanding that business managers without a background in software have is that software and systems are like a car: when they get to the end of the assembly line they're done. In reality, software and systems are a moving target and need to be considered and managed as such.

The interesting part about his second sentence in #1 is true, you need to get something out as quickly as possible in a small software company and this process needs to be repeated many many times in rapid succession. However, taking on revenue at all costs and building short term software solutions can eventually become your costs when you do get bigger.

Point #2 touches on something similar that Marc Andreesen, co-founder of Netscape (who?), once said when asked about his next challenges at the company. He said something to the effect of, "protecting against bringing on mediocre people." Jack Welch also talks about this in Winning. Companies without a stable and thoughtful hiring plan can easily end up hiring basically the first ones in the door out of necessity for a warm body or the necessity to find the cheapest labor. Likewise, companies without a stable and thoughtful technology strategy can find themselves locked in by past mistakes. Panic sets in and more bad decisions are made. Really, the market conditions snuck up and something that could have been predictable ends up hurting those companies in the long run.

Monday, May 09, 2005

Test styles


I've revisited Rusty Miller's post about various test styles. Cem Kaner's paper is a nice refresher that got me thinking about how we could do so much more with our software testing processes.

The subtle point I take away from Dr. Kaner's paper is that it takes excellent people to drive quality into software. Quality is not a bi-product of a collection of test cases per se.

I think primarily because of a very limited budget, we have relied pretty heavily on dogfooding our products to users through Beta programs. But even with all the money in the world, it's been invaluable getting real users using the product as soon as possible. This is especially true with business process software that is usually highly customized to a company's internal processes. There is no way a bunch of isolated developers is going to get it right. Get something in front of users as soon as possible.

It's certainly a fine line though. Customers can lose faith immediately if they encounter a blocker bug or an excessive amount of significant bugs. I think that's where exceptional expectation setting (hand holding, hugging, donuts, etc.) by your project manager is absolutely critical. It's also a challenge to keep users using the product and providing feedback through constant bug fix cycles. This is especially true if they have alternatives to the software or their daily job functions don't require the use of your product, or simply because they're too busy. Having a formal communication channel like public bug tracking, user groups, or even simply a daily conference call helps this. What you don't want is to ask the question, "who's using our software right now" and not know. The value of a Beta program is diminished nearly completely when this situation becomes reality.

Also, the most common reaction to Beta software is, "it would be really cool if it could do 'x'." Suddenly the project you thought was going to wrap up in a month or two has doubled with remaining work. I think this is where the contract process or statement of work process is so critical. It's nice to fall back on an agreement for the original scope of the project. Obviously you can't think of everything up front so implementing processes that produce shorter code cycles after a release are critical. Its always easier to break it to a client that a feature didn't make it in this release but will be in the next one only four weeks out.

Sunday, May 08, 2005

Java vs. C# series: Productivity, pt. 1

Advantage: C# .NET

I want to start my series with the main reason why I was ever exposed to C# .NET in the first place - frustration with how long it took to implement J2EE solutions. The interesting thing to note here is that we as developers weren't necessarily frustrated but our managers and President were. I'd also like to add that I was very skeptical that we would be more productive in C# .NET and actually a little resentful that our managers considered the technology to be the main barrier to shorter cycles and not the very complex problem domain. Frankly, going in I was looking for reasons why it was worse to work with C# .NET than Java.

Productivity can be such a nuanced term. We didn't come up with a way to truly measure our productivity after a year - more like I know it when I see it... And after a full year working with another critical thinking Java developer on the project, I think we're both surprised at how quick we are to say that we are indeed more productive in C# .NET.

Interestingly, Rod Johnson discusses this very issue in his new book
Expert One-on-One J2EE Development without EJB. However, our case was subtly different than the architecture issues that he discusses. In fact, we've implemented areas of our application to utilize Spring, message driven beans, web services, etc. In our case we were specifically looking for more bang on the client-side.

It may not be completely fair to compare C# WinForms to working with JSP. There are so many obvious issues ("our clients run Linux", etc.) that I won't go into them - I will say that we are afforded some solid assumptions with our customers' systems and policies. I came from JSP where I spent *years* bending over backwards with dynamic HTML and JavaScript to bring our UIs to just within "tolerable" by our customers' standards. And I think we've done some pretty amazing things. But it was sooo nice writing object oriented client-side code that actually runs very nicely on our customers' machines.

Productivity gains with client-side C#:
  1. Extremely rapid application design, feedback, and turnaround time on the UI.
  2. Able to create extremely rich user interfaces.
  3. Object oriented client-side code that runs optimally on Windows.
  4. Unit Testable client-side code.
  5. Good WYSIWYG IDE with solid debugger and auto-code-completion.
  6. Excellent integration with xml and web services.
  7. Easy to transition from Java to C#.
  8. Quicker, more confident code cycles (1. & 4.) meant more focus on the problem domain.
There are caveats to some of this that I'll get into more. But again, it really surprised me how nice it was to work with C#.

Saturday, April 30, 2005

Java vs. C# series, Intro

I am a Sun Certified Java Programmer. I've implemented Java based solutions since 1999. I've implemented solutions including Applets, Swing, JavaServer Pages, Servlets, Enterprise JavaBeans, JDBC, Java Messaging Service, web services, and related technologies.

For the past 12 months I've been implementing solutions using C# .NET. And not using C# .NET in a completely different context (like mobile, compact, or embedded), but implementing it to solve a lot of the same business problems I was solving with Java - mainly client/server business applications accessing relational databases. Additionaly, I've had no formal training in C#.

I am starting a series that compares my experiences using Java related technologies with my experiences using C# .NET. In most cases I'm going to isolate a feature and say which I liked better for reasons that may or may not be highly technical. This is because I find real solutions to business problems that may or may not inherently be highly technical in nature. In other words, I won't address which is faster: Java StringBuffer or C# StringBuilder because in the type of work I do there is a very poor diminishing return on that knowledge. In some cases I'm going to explore the beauty of when these two technologies interoperate with each other, getting close to the published blueprints of Sun's and Microsoft's utopian worlds but probably bucking a little notion of what they actually had in mind.

Another one of my all-time favorites

My favorite baby girl. Posted by Hello

Thursday, April 28, 2005

Jack Welch

I met Jack Welch today. Yes, the Jack Welch. I attended a book signing for his new book Winning at the Tattered Cover Book Store in lower downtown Denver. An excerpt from the Introduction to the book: "I have been asked literally thousands of questions. But most of them come down to this: What does it take to win?"

The book is meant to serve as a roadmap for every level of worker that's passionate about business and I'm excited to get started.

At the very least, by shaking his hand I seriously upgraded the position of my 6 degrees. And talk about an impressive man in person. He commanded the room. He fielded questions off the cuff ranging from (paraphrased):

Should a guy stick with a top 5 Fortune 100 company that is stuck in the Stone Age and struggling to change or should he jump to a company that's driving change?
A: 5 criteria, stay or leave:
1. Do you like the people you work with?
2. Do you learn from the people you work with?
3. Did you compromise to work there? Just to live in Colorado, stay close to Mom, your wife's job, etc?
4. Will the company's brand lead you to bigger opportunities with other companies later on?
5. Do you enjoy going to work every day?

China's and India's impact on America's global economic dominance of the past century:
A: He sees a glass that's half-full. Everywhere he speaks he hears stories of more and more people with great ideas starting to play in the game. The economic climate's much better now than it's been in the past 30 years.

The procedure for firing an employee:
A: Deferred to the boss' boss. This procedure's in place so that someone couldn't be fired because the boss didn't like their brown eyes...

We're finished with the 15 year R&D cycle. Now what?:
A: Where's your funding? There is more money out there right now than ideas. People are swimming in money right now looking for an idea to invest in.

How do you get funding?
A: You formulate a crystal clear vision. Not a PowerPoint presentation 3 inches thick. A couple slides with razor-sharp vision.

Bush's tax cuts and energy policy:
A: Nine months before Clinton got out GE's orders fell off the table with Mr. Welch at the helm. Clinton barely escaped an economy that was plummeting. High gasoline prices are the results of two strong and growing economies in the U.S. and China.

Compare GE's ethical obligations to their pensions with United Airlines' handling of their pension plan:
A: No one at United Airlines wanted to lose. But they lost. They didn't have a plan to control their costs and they lost. People are frightened of their jobs at United. GE has a tutoring program for school kids that 43,000 employees participate in.
By winning in business, GE affords their people the opportunity to go out in the world and do good because they're not worried about losing their jobs.

That's it. Hope to post more about the book soon. If you're ever presented with the opportunity to hear Jack Welch speak, DO IT.

Tuesday, April 26, 2005

One of my all-time favorites

Somewhere near Silverthorne, Colorado with my son. Posted by Hello

Sunday, April 24, 2005

C Flat

My first blog unexpectedly converged with cycling yesterday. That is, I experienced an unexpected flat tire (is there any other kind?) on my ride and the event unexpectedly became the foremost topic for my blogging debut.

Amazingly, I've never had to change a flat tire in the thousands of miles that I've surely ridden in my life. Not from my Viper days of endless summers riding-n-jumping anything that presented a glimpse of hope that I'd catch over a foot of air. Not from my StumpJumper days of driving an hour to some mountain pass to catch some singletrack where I was sure I wouldn't see another human. And not even from my days at CU-Boulder where my bike was the only vehicle I had but still disregarded it enough to leave it under a winter of snow.

No, not at any point during those times. And so I've never had the chance to abstract from the experience (and, after all, it was only a flat tire). But there are some correlations between dealing with a flat tire and say, dealing with a hardware failure or software defect.

Lesson #1: Don't panic.
Dealing with a flat tire obviously begins the moment you notice you have a flat. If that's on a downhill run when you're clocking over 27 mph, it's best to keep your head and calmly stop the bike. Dealing with a critical bug in an application is the same. It's best to stay calm in the face of panic that sometimes ensues from important customers communicating their disappointment. Sometimes important information is lost in panic at a critical time: your cadence magnet fell off somewhere in the past 50 yards, or, exactly who was doing exactly what on the system when this exact problem was first discovered?

Lesson #2: Clear your mind.
Take a deep breath. Gather your senses. Focus on the problem at hand.

Lesson #3: Be prepared.
The items I hauled on every ride and figured I'd never use were my saviors.
Things that saved me: saddle bag, extra bike tube stored in plastic bag, tire levers, and CO2 inflation system air chuck with CO2 canister.
Things that didn't have a chance to save me: cell phone left on the kitchen counter.

Luckily I had read about how to change a flat. Actually practicing it at some point before I took my bike out would have been better. I think that anyone who's ever had a vested interest in hardware disaster recovery understands that this is critical. And also in software, select the best tools for your bag and know them.

Lesson #4: Find beauty in the situation.
Stopping and taking in a 360 degree view of the horizon yielded a deep appreciation for a first Colorado spring day, gorgeous mountain views, and for how utterly alone and dependent on my own competence I was.

Lesson #5: Buy yourself time.
One canister of CO2 shot into a new tube is enough to get you back on your bike and back to home base. Take it. Don't make the situation potentially more disastrous by pushing it. Dealing with a critical software defect is oftentimes the same; get a patch out as soon as possible that addresses the issue. Then start work on a permanent fix that addresses the root cause and write comprehensive unit tests to ensure the problem never surfaces again.

Lesson #6: Debrief.
Time to reflect and communicate. If my son were a little older, I could have talked to him about these lessons I've learned that have been reinforced. I could show him how to change a flat tire. I need to take inventory of my saddle bag and replenish the supplies I used before my next ride.

In software this is sometimes mistaken as assigning blame... that's another blog. In some cases, we may have discovered a systemic problem with some implementation that we need to communicate to all developers. Or we may have touched on an organizational challenge like QA resources.

In any case, I believe this lesson is critical to doing your job better tomorrow than you did today. This time I changed the flat tire. To be sure, next time I'll change the flat tire in no time flat.