Personal Information Management

July 24th, 2008

Originally posted to LiveJournal on July 4, 2008

Since getting my new MacBook, I’ve been trying to pull off the pure Mac play - sticking with the stock applications, choosing integration over individual features, trying to work with what I’m given. It’s mostly worked out pretty well, but it’s taken a bit of tweaking. At this point, I’m working on a combined Mac/Google solution.

The ingredients are: MacBook at home, Ubuntu Linux at work, iPod, cellphone, old Palm Vx. Of the last three, I figured I should be able to at least ditch the Palm. It’s a workhorse, but it’s old and doesn’t play well with the Mac. I could go for the iPhone 3G in a few days. That would kill off all three, plus my digital camera. Tempting at $199, but the $100 $60 a month service plan is nuts for the amount I’d use it. It would take some sort of radical lifestyle or professional change to justify that. I’m not above throwing money at problems, but that’s just profligate.

Getting all my info off the Palm was pretty straightforward. Jpilot let me save all the calendar and to-do info as .ics files. After a small but annoying bit of tweaking to DOS-format and rename them, they uploaded smoothly into iCal. Similarly for the contacts and Address Book. That was one of the big wins - having all of my addresses, phone numbers, email and IM in the same place. Once that was all done, it all synched seamlessly to my iPod. Nice. The only snag (Apple developers, listen up!) is that the To Do list displays on the iPod in alphabetical order, not by priority. Come on guys; what are you thinking? Notes were also a bit awkward. You have to mount the iPod as a drive and save them as files in a “Notes” folder. No application integration there. Still, it might make sense to start storing To Do lists as Notes. If I work with them regularly, I may get used to them. So that’s awkward, but not a killer.

The killer turned out to be that I can only sync the iPod to one machine. The whole philosophy of the Palm is that you can go from home to work and keep your core info in sync. Even on Linux, there was a decent client that I could run either at home or at work. The iPod will really only talk to my home machine. That’s kinda control-freakish. It means that when I’m away from my MacBook, I would need to write down appointments on paper or something, and enter them in when I got back. That’s annoying enough that it got me playing with Google Calendars.

Google Calendars are pretty slick. You can have multiple calendars, set up different access constraints for them, and view them in a single display. My girlfriend and I each have personal calendars that we share with each other, and then I have an “events” calendar that’s open to the public. There’s probably also a middle ground for friends: Stuff that isn’t really private, but I don’t care to have strangers knowing, like who I’m having dinner with tomorrow.

iCal lets you set up read-only calendar “subscriptions”. So I re-exported my calendars, uploaded them to Google, deleted them from iCal, and slurped them back down as subscriptions. From there, they synched to my iPod just like before. I was also able to set up a subscription to our calendaring software at work (Zimbra). That’s gravy. Normally, I only have to worry about meetings and such when I’m in the office and have access to the calendar directly. But it is nice to have them on the iPod with audible alarms and all.

While I was at it, I discovered that Google Calendars has a handy text messaging (SMS) interface. You register your phone with them, and then you just send messages to “GVENT” (48368). Sending “day” gets a response with today’s events. “happy hour at 5pm tomorrow” creates a new event. You can set up events (individually or by default) to send you a text message alert. So if I’m going out without my iPod, I can have my cell phone remind me when it’s time to move on to the next round of fun. I don’t actually see myself using that a lot, but it’s nice to have as backup.

I watched Merlin Mann’s “Inbox Zero” Google Tech Talk video the other weekend, and I’ve gotten all fired up on that. I’d been letting stuff just pile up in my Gmail inbox because I don’t actually get much mail there. Gmail doesn’t use the normal folder setup, but it has Labels, which let you do much the same thing, and a bit more besides. So I got everything tagged and archived in short order. Set up a few basic filters to handle list mail that I only need to check every day or two. They’re not super sophisticated, but they do the trick. An empty inbox is a nice feeling.

I also started playing with Google Docs. I haven’t done spreadsheets or presentations yet, but the documents are nice. They strike a good balance between features and simplicity. I’m a little paranoid about storing all this stuff on a free “beta” service, so it was nice to find that you can easily export them as HTML (and relatively clean HTML at that).

So I think that may be the winning combination. I could also look at the iPod Touch option, which would give me a way to enter data on the go. Right now, the only problem situation on the horizon is DragonCon, where I have to track a whole lot of events, and I’m not planning on lugging my MacBook along. It could be handy if they would publish an ics file with the complete schedule before we got down there. Maybe a separate one for each programming track or room. Hmm…

Java Logging

July 24th, 2008

Spent half the day fighting with Tomcat 5.5, trying to get log messages out of my application. I need to rant a bit here.

I’m deploying a vanilla webapp with its own log4j.xml in WEB-INF/classes. Why does this not just work out of the box? Because, hey, maybe you’d want to use some other logging library. Not that there are any out there that don’t suck, but y’know, maybe someday. So we need to leave this all open-ended and configurable.

You see, once upon a time, we had Log4J. It was good. In fact, it was perfectly sufficient. It solved the problem. It did just about everything you could want.

Unfortunately, Sun was also developing their java.util.logging (JUL) around that time. They went through the whole JSR community process, so they started earlier and finished later. It sucked, but Sun owns Java in a very literal sense, so we were pretty much stuck with it. Not in the sense of actually having to use it, thank god, but any poor bastard writing logging tools had to accommodate it.

So then we got Apache Commons Logging. It’s a diplomatic facade that stands in front of either of them so your code can be agnostic about whether you’re using Log4J or JUL under the hood. In practice, anyone who doesn’t have a paycheck from Sun and a gun to their head uses Log4J. Java Developer’s Journal did a comparison of the two. They tried to give a “fair and balanced” report, as in, “there are situations in which JUL might be the better choice.” If you read between the lines, those situations were essentially if you’re writing a toy application that would probably be fine with System.out.println().

There’s something of the paradox of choice here. Trying to leave all your options open is ultimately less effective. Your code has to be way more complex to support everything, and you almost always have some sort of mismatch that forces you into a limited-functionality common denominator. It’s not worth it. Pick something that works and go with it.

So today’s pain came about because rather than doing that, Tomcat 5.5 seems to have slapped yet another layer of indirection and indecision on things. It seems that one of the ways in which java.util.logging sucks is that you can’t have multiple configurations within an application. Why on earth would you want to do that? Well, if your application is a web application server, it needs to run a bunch of java libraries as if they were standalone applications. Kinda killer flaw there, huh? But who can pass up the challenge of hacking around something that thoroughly broken? And hey, it’ll make it standards-compliant.

So you end up with these gems from the Tomcat 5.5 logging page:

the default Tomcat configuration will use java.util.logging.

And a bit later on:

The default implementation of java.util.logging provided in the JDK is too limited to be useful.

How can you say that and still build in support for it? Grow a spine, people! How much simpler would this world be if you just followed that up with, “…so Tomcat uses Log4J exclusively. Don’t like it? Write your own app server.”

But no, what did they do? They hacked together their own implementation of the java.util.logging API. Apparently, it’s not “too limited to be useful,” but it “is not intended to be a fully-featured logging library.” Why bother? You’ve had a fully-featured logging library for the last 6 years. Why would you make the default logging configuration one which by your own admission is really not adequate? Why not make Log4J the default? If you really have to, then you can provide instructions on how to plug in your half-assed substitute.

Harvard Business Review on the Innovative Enterprise

May 20th, 2008

Notes and commentary on the book.

Apollo 13

Everybody brings up Apollo 13. That seems to be the role model for a high-performance, results-oriented team working under high pressure. Could we maybe pick something a little less dramatic? Remember, this is the same crew of people who put the first man on the moon less than a year earlier. They were working at the height of American Big Science. They were educated and trained as if the future of America, Democracy, and the world rested in their hands, which it arguably did. At the very least, three lives, millions of dollars of equipment, and the scientific prestige of the nation hung in the balance. I don’t care how cool your business plan is, or how much VC money you have, you’re not getting that kind of talent and motivation.

Cost of Creativity

There’s a rant in the “Creativity is not Enough” article about how organizations aren’t supposed to be creative. They are anti-creativity, anti-chaos. The whole point of an organization is to constrain and coordinate people’s actions to focus them on a task. Creativity is mostly a distraction.

It’s not that this guy is an idiot and you should just ignore him; they wouldn’t have published him. He was writing in a different time, witha different focus. For large industrial firms, the goal is well understood, and the main effort is in execution. He wouldn’t think of incremental process innovations as Creativity - that’s just doing things better/faster/cheaper. In a service economy, most of the effort is in figuring out what to do. Success is based more on adapting to the customers - understanding and meeting their needs. And the folks in the trenches have more insight into that than the big boss back in HQ.

But the main point that he’s trying to make is still valid - that creativity and change have a cost. The time you spend figuring out how to do things better is time not getting things done. The time you spend on one innovation is time not spent on others. The payoff has to justify that. And trying to do a dozen new things at once probably means that none of them will be well done.

Summary

Now a quick summary of the key points of the book. Since it’s a number of essays written by different people on the same topic, there’s a fair amount of overlap. There’s also a wealth of supporting detail for these principles.

Pressure always hinders creativity. Don’t confuse a surge of relief at dodging a bullet for the true rush of creativity. If you have real and meaningful causes of pressure, make sure they’re communicated. Meaningless or arbitrary pressure is even worse.

Focus helps. Pressure plus task switching equals stress without productivity. If you have a bunch of different things to do, sequence them; don’t multiplex. Meetings with more than one or two others are fragmented, undirected.

To motivate people, pick an enemy and cast yourselves as the underdogs. The enemy can be imaginary, or just a concept.

Innovation should be constant and pervasive. Everyone should always be thinking of how to improve, how to do their work better. Build a portfolio of ongoing experiments at different stages of maturity. A portfolio spreads the risk. You need both short-term/incremental and long-term/disruptive. You need both blue-sky research and radical solutions to known problems. You need to be willing both to take risks and to abandon unsuccessful projects. Allow for failure; make it cheap. Once an idea is proven, go all-out to make it happen.

Innovation needs to focus on competitive advantage. It has to either benefit your customers, expand your market (meet the new needs of your not-yet-customers), or give you an edge over your competition. Be alert for solutions in search of a problem, innovation for the sake of novelty. Measure performance, cost, benefits, risks. You compete on price, performance, or features. You may need to segment your customers so you can focus on the specialized needs of one group. Plan for your competitors’ response to your innovation.

Build networks of innovation through trusted third parties - investors, executive search firms.

Collaborate with your customers. Quick feedback is better than a polished release. Get them involved before the big investment. Get to know them better than they know themselves. Learn what they do, not what they say they do. Give them what they need, not what they ask for. Show them how it will be used - mock it up, tell a story.

Try to make technology invisible to normal users. Make failure transparent - give the user the information they need to solve the problem. Build tools for power users, so they can scratch their own itches and help others. People learn from experience and peers, not so much from formal training.

Each innovation needs four kinds of support: An on-the-ground champion, an executive logistical supporter, creative idea generators, and practical implementors.

Get outsiders’ perspectives. If you want people to think outside the box, hire from outside the box. Get fresh eyes on your business. Varied backgrounds produce better problem-solving skills. Focus on people who are bright, verbal, assertive, and creative. You’ll need enough outsiders to form a critical mass.

Look at your company through the eyes of your competitors. What are your limits, weaknesses and vulnerabilities? Your competitors are doing your market research for you. If they do better, it’s because they’re meeting a customer demand that you aren’t. If they don’t, you know not to try that.

Learn from the potential customers that don’t choose you. What are you failing to provide them?

Project groups focus on goals, not resources. They minimize turf battles. Align the organization’s goals with employees’ intrinsic motivations.

SUV Enlightenment

February 4th, 2007

By this point in American culture, you either hate SUV drivers or you don’t. If you do, I don’t need to explain why. If you don’t, I’m not going to be able to convince you. I’ve always been in the “hate” camp, but hate is an ugly and self-destructive emotion, so I’ve been trying to come to a new understanding of the situation, and I’ve just had a little revelation.

So, for the haters: Don’t you wish you could just slap a big fat fine on the fuckers? Hit ‘em in the wallet, right where it hurts. Just POW! “You are hereby fined ten thousand dollars for being a timid, self-aggrandizing, selfish little bitch.” Wouldn’t that be awesome?

Then I realized that it’s already been done. Those things don’t come cheap. The low-end SUVs, what we’ll call the “peasant” models, are $30K to $40K. Those are the ones that are most likely to be put to be use in either their “sport” or “utility” capacities, hauling lumber or off-roading. They are not the focus of The Hate. The luxury SUVs, the ones that are just for taking the kids to soccer practice and impressing the neighbors, those are more in the $55K to $70K range: The Lexus LX 470, Lincoln Navigator, Cadillac Escalade, Hummer H2.

A car is a car. It gets you from point A to point B. You can get a new, perfectly functional car for under $20K. Even if you need a wagon for the kids, you can do it under $25K (and you can even get some mini-vans in that range).

On top of that, you’ve got taxes, or at least we do here in Virginia. (For you non-VA people, we have lower state income taxes, but we pay a personal property tax on cars that works out to about 1.5% on the first $20K, and 4.5% above that.) On a $20K car, that comes to about $300 a year. On a $60K gold-plated bling-monster, it’s somewhere north of two grand.

Then there’s gas. The H2 gets about 10 mpg. 15,000 miles a year at 10 mpg and $2.50 a gallon comes to $3750. Any other self-respecting car will get 25 mpg (and those cute little hybrids can double that). That’s $1500. Not exactly free, but there’s a significant gap there.

So all in all, we can safely peg the fine for being an arrogant, self-absorbed asshole at $30,000, plus $4,000 a year. Well, that pretty well satisfies my sense of justice. I’ll sleep easier now. And when I’m out driving around, I won’t get angry anymore. I’ll just be thinking, “You poor suckers…”

The other part of this is that I used to think of the SUV manufacturers as part of the problem - greedy, heartless corporations fueling this automotive gluttony. But from this new perspective, Lexus, for example, is more like a socialist charity for automotive workers, playing on the insecurities of rich suburbanites to swindle them out of vast sums of money. I’m cool with that.

Brick

February 1st, 2007

I really enjoyed this. It’s a cool, indie, film noir mystery, set in a southern California high school. Surprisingly, this really works. I knew all that from the press about it. What I hadn’t realized is that it is completely a retro Raymond Chandler/Dashiell Hammet story in modern trappings. The plot, the characters, and most importantly the dialog are all totally 30s/40s noir. It works in the same way that Baz Luhrmann’s “Romeo + Juliet” did.