My Stuff

2010 Conferences

OSGi DevCon @ JAX London

February 23 - Keynote titled OSGi in the Enterprise: Agility, Modularity, and Architecture’s Paradox


March 22 - 25 - Tutorial on Modular Architecture

Über Conf

June 14 - 17 - Sessions titled Turtles and Architecture and Patterns of Modular Architecture


July 26 - 30 - Two sessions on rich mobile applications and one on agile development. Half day tutorial on software process improvement.

Tweets @ Twitter

re: #apple event "We sold more iPads than any PC manufacturer sold of their entire PC line." 2012-09-12

re: #Apple Event ""Our notebooks now rank #1 in the US in Market share in the last three months." 2012-09-12

Right on. I just won a Best Buy drawing worth $1000. Either that or I won a shiny new virus by clicking the link. Hmm...what to do. 2012-08-29

The #osgi alliance response ( to the @mreinhold #jigsaw announcement ( 2012-08-29

Good Q&A with @mreinhold on project #jigsaw. Modularity will change the way we design and run apps! 2012-08-28

LinkedIn Profile

The opinions expressed on this site are my own, and not necessarily those of my employer.

Palm Treo 700p

Filed Under Technology | 10 Comments 

About a month ago, I went out and purchased a Palm Treo 700p (yes, I purchased it even after the release of the iPhone). Prior to the Treo, I had a regular ole’ LG (model unknown) that I used as a phone, and a BlackBerry (model 7250) that I used for my data needs (browsing and e-mail). I decided to use the Treo to serve both my phone and data needs. So far, there’s been good, bad, and ugly.

First, the good.

  • The phone is decent, neither better nor worse than my LG through U.S. Cellular. Reception with Verizon is about the same, and I still experience the same volume of dropped calls and missed calls due to the phone failing to ring. The touchscreen keypad works well, with fairly large numbers that help prevent mistyping the numbers. The Treo is a bit large for a phone, and it’s shape doesn’t feel entirely natural pressed against the side of my head. The detailed call log is nice.
  • The Blazer browser accesses most of the sites I need when in a pinch. For a more pleasurable browsing experience, I can always tether the phone to my Mac anywhere I get reception. The lack of built-in WiFi isn’t a huge concern because of the ability to tether the 700p to my Mac. However, after seeing Safari on the iPhone, I was a bit jealous.
  • Initially, I used VersaMail as my default mail client, but quickly abandoned that experiement because of a few minor annoyances related to the user interface and my inability to configure VersaMail in a way that wouldn’t download duplicate messages without deleting them from the server. I installed a Java VM and went with the GMail client instead. Since I send e-mail using GMail (web-based), my Mac, and the Treo, the GMail client for my Treo is nice as I minimize the number of Outboxes I have that require searching when I want to find a sent mail item.
  • I use iCal on my Mac which syncs well with my Google Calendar. While it’s pretty easy to sync between iCal and the Palm’s Calendar using iSync, since I use Google Calendar as my system of record, I preferred to sync with Google Calendar directly. GooSync allows me to do an over-the-air two-day sync with my Google Calendar. That’s a pretty nice feature, but I did have one instance where a future appointment wouldn’t sync correctly. I couldn’t repeat it and it hasn’t happened again, so right now, I’m treating it as an anamoly. It’s nice knowing that I can enter an appointment on my Treo or in Google Calendar and the two-way sync takes care of the rest.
  • Messaging on the Treo is much nicer than my old LG as the display shows the entire history of a conversation.
  • Tethering my phone to my Mac via a Bluetooth connections gives me web access anywhere I get cell reception. This is similar to how the Verizon Wireless Card works. Connection speed is suitable for most of my browsing needs (around 200k), but the connection seems to get lost if I remain idlefor longer than 30 seconds to a minute. While somewhat of a pain, it’s quick enough to reconnect that it’s tolerable.
  • I really like the 1.2 MegaPixel camera as the quality is obviously much better than the VGA camera on my old phone. I’m constantly using it to snap pictures of the kids. The camcorder video is rather choppy, but capturing a precious moment in the absence of my Sony camcorder is better than not.
  • Palm has a pretty healthy development community and subsequently, there’s a plethora of software available for the Treo 700p. Google maps is a definite sweet spot that offers turn by turn directions. BackupBuddyVFS offers a way to backup the entire contents of the device to my SD card.
  • Mac integration is fairly solid with the 700p. Using iSync, I can easily sync with Contacts and iCal, though syncing for me is primarily for backup purposes over anything else. I use GooSync to sync with Google Calendar and have seutp iCal to subscribe to my Google Calendar, so there isn’t any need to sync my Treo Calendar with iCal.

Now, the bad.

  • I find the keypad more difficult to type on than my BlackBerry. I’m sure a good part of this is due to a protective plastic case that covers my keyboard, but the keys do seem a bit closer to each other than on the BlackBerry. Text messaging on the Treo is better than my LG phone due to the QWERTY keyboard…obviously.
  • The ergonomics and look and feel of the device and applications lack appeal. A good example of this is the Contacts, which is just a black and white listing of all contacts in the directory. The touchscreen feature works well if I use the stylus, but is marginal if I try to use my finger. I don’t really mind the stylus, but I’m always worried that I’ll lose it. Not so much with my finger. I’d think that a few UI and usability tweaks would go a long ways toward improving the aesthetic appeal of the device. As Neal stated during a conversation at the Green Bay NoFluffJustStuff symposium…”it’s so Phone 1.0″. True.
  • Overall reliability hasn’t been terrible. Essentially, the phone works exactly as advertised, but unfortunately, with a few tweaks, it could work so much better. The boot loop and tethering issue are two examples.
  • Performance is choppy and delayed at times. Attempting to access the web via Blazer or hanging up a call are two instances where the phone tends to lock up for a moment, causing some minor annoyances.
  • Interoperability between applications isn’t great. At one point, I tried to impress a friend by accessing a webmail account and downloading a word document that had been sent. While I’d never tried it before, I figured since the phone came with Documents to Go, it’d be easy to download a Word document and open it. Unfortunately, I couldn’t figure out how to save the .doc file, and when I clicked on the link, the Treo 700p opened it up showing nothing but a bunch of binary garbage. Why wouldn’t it just send it to Documents to Go? Don’t know. My friend was not impressed.
  • Many folks complain about the feeble storage capacity on the Treo 700p, with only 128MB. Since I use my iPod for music instead of pTunes (and I don’t listen to music other than the radio all too often), storage isn’t a huge issue for me. I purchased a 2 GB SD card, and I suspect that’ll be plenty for me well into the future. I could be wrong, especially if I begin to load my Treo with custom applications. Of course, I can’t imagine increasing the storage capacity of the Treo would be a significant undertaking for Palm, and the number of users who desire more storage should serve as a compelling enough reason to do so.

And the ugly.

  • Ah yes…the dreaded boot loop. For no apparent reason, the phone gets caught in an endless boot loop where the screen shows the “Access Powered” logo following by a startup screen followed by the “Access Powered” logo followed by a startup screen followed by the “Access Powered” logo followed by…ok, you get the picture. The only way to correct this nasty little bug is by performaing a hard reset, which in turn results in total data loss and restores the machine to it’s original state. The first time this happened, I freaked because I hadn’t done a hotsync recently. While a warm reset allowed me to backup most of my data before performing a hard reset, I immediately purchased BackBuddyVFS to hopefully avoid future loss of data concerns. It hasn’t happened again yet, but when it does, I’m hoping BackupBuddy makes recovery easy. Regardless, this is a serious issue, and not one that users of a well-built device should be worrying about. Fortunately, it’s only happened once over the past month of usage.

Overall, save for the few ergonomic and UI quirks, minor instability issues, and the dreaded boot loop, I’ve enjoyed the phone. Camcorder, tethering, and Mac integration were important features for me. My BlackBerry/LG setup had none of these (possibly newer BlackBerry models have some), Obviously, the iPhone fits the bill with great Mac integration. The iPhone appears to be an amazing device, and as it evolves, I’m sure my interest will increase. To this point, as a replacement for my LG and BlackBerry, the Treo 700p is working nicely.

Agile 2007 Recap

Filed Under Agile, General | 1 Comment 

A bit later than I had hoped, but I wanted to take a moment to reflect on Agile 2007 in Washington, D.C. last week.

I arrived at Agile 2007 on Wednesday, midway through the conference. After a few conversations with attendees , I’m certain I’ve captured the essence of the conference. Immediately upon arrival, I jumped right into the second half of a panel discussion focused on Agile Portfolio Management. Then last night, I was invited to an Agile Roundtable discussion hosted by the fine folks at Stelligent, where a significant portion of the conversation centered around agile adoption and transition. You can obtain an overview of the discussion in this eWeek article. Thursday, I attended two different sessions. The first discussed The Enterprise and Scrum, and the second focused on Agile in the Waterfall Enterprise.

Therein lies a major theme of Agile 2007 - agile transformation and agile adoption within the enterprise. It seems that the majority of speakers and attendees I’ve spoken with who have agile experience are Scrum masters, agile coaches, or agile mentors looking for better ways to bring agile to the enterprise. For instance, conversations that emphasize vendor integration and COTS software packages typically turned toward contract and vendor relationship management. But as a developer, my area of interest lies more with strategies related to testing an application that integrates with a COTS package, and the infrastructure required to support frequent deployment of a COTS package. Not that we need another session on testing… But seriously, we cannot forget the developer within the agile enterprise. Some ideas for great developer sessions that come to mind include choosing an agile technology stack, principles for increased architectural agility, and tools for an agile infrastructure. Maybe next year.

Of course, with that said, Agile 2007 appears to have been a smashing success. It was sold out well in advance, and the enthusiasm of the crowd was tremendous. The conference felt small and personal, which allowed for a high degree of interaction between the speakers, vendors, and attendees. Hallway discussions were frequent and intense. But after spending some time speaking to the folks in the trenches, I share their opinion…more content discussing agile development techniques would have made the conference even greater. After all, the developer produces the one [and only] artifact that truly matters..the source code (pssst…don’t forget that).

Now, onto SD Best Practices in Boston.


Filed Under General | 1 Comment 

After being gone for about a year and a half, I’m back at TeamSoft, a high-end IT consulting firm. I know it sounds cliche to make the statement, but TeamSoft prides itself on the quality of it’s people. On average, TeamSoft professionals boast 13 years of industry experience. We also have a world-class training program, with some excellent instructors. We’ve been a Sun training partner since 2001, and are always looking to expand and grow our curriculum. As a TeamSoft employee, you know you’ll always remain close to cutting edge technology, as well as have the opportunity to work with other technologists who are passionate about technology. We’ve also expanded our services beyond software development, meaning that you’re exposed to a team of very diverse technologists. Yet while it’s a wonderful technology environment, we also remain very family-focused. The majority of our employees have children, and with little to no travel involved, you’ll enjoy the opportunity to spend time with your family. And Madison, WI is a great place to live.

My role at TeamSoft is similar to what it’s always been, with one caveat. We’ve grown tremendously over the past couple of years, and it’s important to us that we maintain the small company feel that our employees have grown to appreciate, while continuing to give employees the opportunity to work on great technology projects. Part of my additional responsibilities include leveraging the strengths that made TeamSoft a great small technology company to ensure TeamSoft is a great large technology company. On top of that, I also look forward to ensuring TeamSoft remains on the leading edge technologically. I’m excited to be back working with so many great people and experienced technologists helping build and evolve our culture as TeamSoft continues to grow.

TeamSoft is a great place to work, and Madison is a great place to live. I can speak firsthand that the grass isn’t always greener on the other side. Working for a great, family-focused company in a wonderful city and a low-stress environment may not be everyone’s cup o’ tea. But if it’s yours, I’d encourage you to at least check us out.

Rake TestTask Hangs

Filed Under Development, Platforms, Ruby | 11 Comments 

Here’s the test task in my rake file. Works on Windows, but not on my Mac. It just hangs. What’s the problem? do |t|
  t.libs << "./app;./test"
  t.test_files = FileList['test/test*.rb']
  t.verbose = true

Two hours later, I tell you that I need this on my Mac. do |t|
  t.libs << "./app:./test"
  t.test_files = FileList['test/test*.rb']
  t.verbose = true

See the difference? Semi-colon…colon…Wow…

JarAnalyzer Upgrade

Filed Under Architecture & Design, Java, Metrics, Platforms | 7 Comments 

I’ve updated JarAnalyzer to correct some of the problems reported when analyzing applications written on J2SE 5.0. The issues were primarily surrounding the use of Generics. If you’ve been experiencing any of the following problems when running JarAnalyzer 1.1, upgrading to JarAnalyzer 1.2 should make them go away and put you back on track.

  • You receive the following error at the console: Visiting non-standard Signature object. The fix required an upgrade to BCEL 5.2.
  • The xml output lists classes as Unresolved Dependencies. This problem was due to how JarAnalyzer strips the classname from the package the class belongs to.

A few other bug fixes and enhancements also found their way into version 1.2.

  • Used System properties file separator to increase portability across operating systems.
  • Updated file to ignore packages you typically don’t want reported as Unresolved Dependencies. This can easily be modified before running JarAnalyzer if you want these to show in the output.

You can download the most current version of JarAnalyzer from the JarAnalyzer home.

Java and .Net Communities

Filed Under .Net, Industry, Java, Platforms | 1 Comment 

For the past 5 months, I?ve been working on a .Net project, my first of the sort. Until then, I’d always been a developer on some pretty large Java efforts, some small PHP efforts, and some personal experimentation with Ruby. But I had done absolutely nothing with .Net, and the opportunity to gain experience with another major platform was exciting. Now, I’m back on another Java project, and I am not sad to leave .Net behind.

I know Microsoft has always done a great job ensuring their technologies interoperate well, having experience with such interoperability going back to my days as a PowerBuilder and VB programmer using OLE automation to integrate with Microsoft Word. With Microsoft, there always seemed to be an easy way of doing things using Microsoft technology. Unlike Java, this meant less time trying to sift through the bad frameworks in search of the good one, and more time implementing a solution using Microsoft’s platform. Ironically, I didn’t appreciate this as much as I expected. I feelpretty strongly about architecture and design, and the easy way wasn’t always the right way. However, what startled me most about .Net wasn?t the platform, the C# language, or my dislike for WinForms development, but the .Net community and culture surrounding it.

Microsoft has a fledgling open source community compared to many other platforms. While a plethora of competing open source projects means you’ll make a mistake in choosing every once in a while, even the dead open source projects contribute new ideas and innovation within the Java (ok… and Ruby) communities. And many of the .Net open source projects are little more than ports from their Java peers.

While Microsoft claims they support open source, their actions speak otherwise. Look no further than the Visual Studio Express EULA limiting 3rd party extensibility, placing the TestDriven.Net plugin in violation of the license agreement. There’s been a bit of banter going on surrounding the decision by Microsoft to disallow this plug-in. The irony here is that the TestDriven.Net plugin is only free for personal users, not professional or enterprise users, further illustrating my point. It’s not just Microsoft, but the Microsoft community. You don’t have to look far to find other examples.

I recognize that there are some very good open source projects underway in the .Net world. I run Mono on my Mac. CSLA is a full-stack framework that allows you to hit the ground running. But the culture surrounding open source on the .Net platforms seriously lags behind what I’m accustomed to with Java.