practice makes perfect

To be productive as a software developer, or tester, or sys-admin, you have to know how to use your tools. Most development tools in the projects I run with are based on the old-skool unix model: a shell script, a build utility, obscure text configuration files, environment variables, and a source-code control system. Systems like that are exquisitely sensitive to errors, and even "vanilla" installs usually need some local tweaking, and some setup rituals. All of this can be maddening when you want to get some work done and the tools won't let you. What can be done?
Certainly, build tools should be easier to use. But they're not, and that's the world we live in. The answer came to me last night watching a martial artist do forms on tv. In martial arts, forms are a detailed choreography that represent a hypothetical fight; the purpose of practicing forms is to get each detail of each action dialed-in. I recognized the form being performed; it was the first form I learned, as a beginner in Ja Shin Do. "He must be a beginner," I thought, "to still be practicing the basics." Then I kicked myself: he was practicing the basics to perfect them. Go back to the beginning, and do it again... this is the practice of experts.
We get good at using the tools by using them, over and over. Start from a blank slate and build a development environment from nothing. Do this ten times in a row, and pay attention to exactly where you install the prerequisites. Build muscle memory for what goes where. Do it ten more times, and pay attention to the initial invocation rituals. Do it again, over rocky ground this time, or an os you don't like. If you want to be an expert software tools user, then practice, practice, practice.

love letter to health insurance

A few weeks ago, I had an encounter with a serrated knife and a loaf of pecan-raisin bread that resulted in five stitches in my thumb. I went to a nearby small emergency room, and was in and out in two hours. The doctor and the staff were all friendly and competent; the care was excellent, and my thumb healed well. I just got the explanation-of-benefits from my health insurance company; the bill total was $2587.85, of which I am responsible for $62.37.
This is, arguably, what the US health care system is best at; definitive care for an acute condition, with no follow-up and no prevention. I'll take it! Now if we could just expand that quality of care to chronic conditions and prevention, and provide it to everyone regardless of financial means or immigration status... that would be something. I wonder how Arnold's latest proposal for mandatory health insurance would cover my self-employed neighbor cutting her thumb at work, or an illegal immigrant cutting his thumb cooking breakfast for his family. Thank you, Aetna and Seton Medical Center, for taking care of me. Please take care of everyone else, too.

handle with care

This is what happens when LCD monitors are not packed well and not handled gently while shipping.
010607_10531.jpg    010607_10541.jpg
When I went to remove the monitor from the box, the back and base of the monitor were already totally separated from the shiny part of the monitor. This close-up shows the metal pivot arms inside the mega-adjustable stand, apparently ripped in two by a vengeful god.
I also spent 40 minutes on hold with Fry's trying to get permission to bring my bad memory down to the store and do a store credit right then and there. But what I really want is a monitor, not memory.
Well, no, what I really want is time and energy and management buy-in on mavenizing the Open Laszlo build. The monitors and memory and chairs and for that matter eggs and cheese and toast and steaks are all means to an end... and the end to be desired is a rich, complete, solid Open Laszlo framework, adopted by thousands for their RIA needs.

hardware designers, meet industrial designers

When it comes to picking memory to upgrade machines, my knowledge of computer architecture has not kept up with the state of the art. I decided that my shuttle PC (which I've been building and configuring for a month now) really needed 2 gb of ram, so I picked out a highly buzzworded dual 1gb kit on Fry's, and waited eagerly for it to appear. It arrived and looked right, so I popped open the pc's case, popped out the paltry 512 mb ram in there now, and popped in the new ram... except it didn't fit. I checked over and over that the notch was in the right place, but the dimm just wouldn't go into the socket. At a loss, I compared the new dimm to the old dimm. Looks the same... but wait, the notch is about 2 mm offset on the new dimm from the old one. That's why it almost but not quite fits.
A flight of google research revealed that I had bought DDR2 ram, but my motherboard had sockets for DDR ram. DDR memory and DDR2 memory are the same size and shape, cost about the same amount of money, and look pretty much the same... but one has 220 pins and one has 184 pins and the notch is in a slightly different place... by a few millimeters.
Hardware designers? Hello, meet industrial designers. Things that are different should look different. If two parts don't fit together, they shouldn't almost fit together. Make failures obvious. If the notch was offset by a centimer and not a millimeter, the difference would have been clear. If DDR2 was a centimeter longer or shorter, the difference would have been clear... and I should remember not to attempt to upgrade my own hardware.

national change your passwords day: 1passwd, almost

Just 11 days until National Change Your Passwords Day, January 15, 2007! Are you ready?
I've been using 1passwd, a tasty mac password generator, password storage, and form autofill application, with plugins for Firefox and Safari. It is a win, and I now endorse it as a great tool to use on National Change Your Passwords Day. If you always use one computer, 1passwd automates the whole password management workflow; on a web form it will generate a new secure password for you and store that password in its keychain. Then you can look up the password in the 1passwd application, or invoke the 1passwd web plug-in to fill in forms on a particular web page. Sweet. Combine this with the Schneier method of writing your passwords on a small piece of paper that you treat as precious, and you've got a complete story.
One problem I encountered: writing down long passwords is error-prone. 1passwd doesn't seem to have built-in sync'ing between different computers. The combination of these two factors meant that yesterday I was at work, twenty miles from my home machine's keychain, and I couldn't log in to my banking webapp, because my hand-written password crib sheet wasn't clear enough on lower-case vs upper-case, '1' vs 'l', etc. I had to take care of banking business before the end of the banking day, and leaving work to drive home to get my password wasn't an option. I drove to a bank branch and took care of my business there... but most online relationships don't come with a bricks-and-mortar storefront in every shopping plaza. The moral is, change your passwords, but figure out how to write them down legibly, and make sure that your written record is correct.
1passwd is $39.95, and so far it's totally worth it. The best part: it imports all of your accounts and passwords from Firefox and Safari.

wake up, sleepy computer

When waking a computer from sleep or the screensaver, get in the habit of using an arrow key, shift key, or moving the mouse. Other tempting wake-up signals, such as hitting any key or clicking the mouse, risk triggering an unwanted, potentially dangerous operation if the computer is not quite asleep. The display might be blank because the monitor is unplugged, because the monitor has a built-in energy saver, or because a laptop booted up thinking that an external monitor was connected. In any of those cases, you might have a live computer listening to a live keyboard or mouse; when you intend to say "wake up, computer," you might actually be one-click purchasing a 30" Apple Cinema Display on amazon.com. (If you tend to browse amazon for such things, that is.)
It's farfetched, I know, but this is another "if it happens just once, you're screwed" events, easily avoided by routinely waking up a sleepy computer by (my personal favorite) hitting up-arrow.

network-attached storage

My brother Dan suggested I look into network-attached storage for my file-server needs. Network-attached storage is a big hard drive that can be plugged in to a local area network and accessed from any local computer. (I keep trying to write that sentence in a way that would make sense to non-IT pros; did I succeed?) NAS boxes just barely start at around $250, and ones that are actually RAID's or are high-capacity are lots more than that, and I'd have to replace my router to get a fast enough network to make it worthwhile. Replacing my router is another coupla hundred dollars. Pondering all of this I remembered that I started this off by trading hardware I wasn't using for a new PC. "File server" is not one of the goals on my post-it notes on the window. I just don't want to spend hundreds of dollars on a file server right now. I would just like for my macs to stop running out of disk space every three days. Simple solution! I ordered a simple, external USB hard drive. I'll plug it into my mac mini, which will make a just fine file server for the windows box and the other mac. I'll be behind mac os x firewall goodness, I'll have superfast access from my main dev machine, and I won't have to rely on the windows file system. Sound okay?

we hate errands

Going to retail stores is soul-sucking, wallet-shrinking, and afternoon-destroying. And yet, I want more memory for my PC right now, and my desk chair has finally reached the point of not just being uncomfortable but actively causing back pain that lasts for hours. Ikea has a chair that I want; I've been chair-shopping for a year and have decided that Ikea's high-end task chair is the best ergonomic option for less than $300. Mail-ordering Ikea is stupid (insane shipping charges), but going there is such a production. I can order from Fry's and get delivery in four days (silly long weekend). Or I could just wait until I want memory enough to be willing to drive there and back. Nope, never happen, it's a 40 minute drive one way. Or I could just plain wait. Wealth comes from not spending money.

windows vista defeats high-quality content playback

A Cost Analysis of Windows Vista Content Protection by Peter Gutman is absolutely required reading for anyone considering buying Vista, or anyone who cares about media content quality. Holy crap. If this article can be believed, Windows Vista has content protection built in to the operating system such that any content or hardware or software that plays back "premium" media must automatically and silently degrade the content being played. The goal of the built-in content protection seems to be assuage the media business (film, tv, and music industries) and push consumers into an all-Microsoft end-to-end content solution. The effect of this built-in content protection will be that expensive content and hardware provides a crappy viewing experience. We're not just talking about a $200 graphics card looking like a $50 graphics card...we're talking about a thousands-of-dollars flat screen monitor playing back a $50 blu-ray dvd on a $2K computer, and having it look like a vhs tape on an old tv. Granted, I have not actually seen this effect in person, but I understand enough of signal processing to know that when you mess with a signal, you degrade it. It sounds like Vista will be messing with the signal at the encoding/decoding layer (which can be software or hardware) and at the hardware-output layer. Goodbye, signal quality. And yet! The worst of it! Most users won't know Vista is degrading their content. Most people put up with whatever performance their machine happens to give them. If it takes twenty minutes to boot the OS, or if their laptop screen always looks a little fuzzy, or if they always have to hit the print button three times to get it to print once, they just accept that as what the computer does, even when those effects could be fixed by defragmenting the hard drive, changing the screen resolution to match the native LCD resolution, or upgrading the printer drivers. That is, the performance of most users' machines are already far worse than the hardware is capable of, because of miscellaneous configuration problems outside the realm of their consideration. Vista is going to make this much, much worse. Before long, people will start to realize that a properly configured non-Windows box gives them far better media playback for the same hardware cost than this Vista eater-of-souls. Oh wait, isn't that a TiVo? Or a Slingbox? or a Mac Mini? I predict that by next year's holiday season there will be another round of booming linux distro-plus-services sales to rescue Vista machines from their content-protected hell. Insert this cd, restart, and watch your machine start acting like the three thousand dollars you spent on it. Provide users with a decent webmail solution and a way to edit the Word files from the office... and the world will beat a path to your door... but only if they can hear you over the sound of the Windows marketing.

tools for porting to openlaszlo 4.0b1

On the Open Laszlo project blog, I describe tools for porting 3.x applications to 4.0b1. I am extremely tickled to report that this has been translated into French and German. The German version even has screengrabs. Thanks to Monsieur Patate and Raju Bitter for the translations. Apparently "Ça plante toujours?" and "Immer noch am kämpfen?" are translations for the conditional at the beginning of step 12.

national change your passwords day: schneier on passwords

Bruce Schneier, cryptography expert, recently appeared on NPR's Future Tense discussing what makes a good password, what makes a bad password, and how to manage passwords that are too random to remember. He recommends that you write your passwords on a piece of paper and put them in your wallet, along with the other valuable small pieces of paper you carry around: paper currency.

holy crap!

Holy crap, life is good! Life is top-quality, best-ever good.
I spent the morning reading the first chapter of Mac OS X Internals: A Systems Approach, which traces the history of the operating systems that eventually became or influenced Mac OS X. All mac geek friends should read the first chapter of this book, or the extended version available online. The mega-cool things about Mac OS X were apparently developed twenty or thirty years ago. Protected memory, preemptive multitasking, microkernels, gigantic virtual memory spaces, vector graphics. To which I say: Holy crap!
God, it is such bliss to sit in my warm apartment with my cats and read really good technical books. It is such bliss to take a break from work. Green tea lattes. Financial security. Plans with friends for dinner. Financial security. (Yes, I said that twice.) The freedom to nap if I want to. Heat. Thumbs! Socks! Hats!

signal to noise

A few days ago I sent a request to co-worker saying "please do XXX -- but not until friday." He handled the request immediately, and when I asked him about it, he said, "You think I read all your mail?" It would be ridiculous to complain about a request being handled too fast, and that this co-worker is way on top of his game, so probably the miscommunication came from me. I send so much email to internal and external team mailing lists that it is entirely understandable that a few important nuggets would occasionally be missed. Could I send less email and be a more effective team member?
Andy van Dam is legendary for his use of ultra-compact email replies:

  • tnx -a

  • ack. -a and ok -a

  • see me -a and its more intimidating cousins see me pls and call me.

  • tmrw and do it and ask lsh are also frequent fliers.


With these eight-letter messages, Andy runs several small empires. What can I leave out of my email compositions to be more effective?

policies are useless

A few days ago I blogged about personal behavioral codes I call "policy," as in, "I have a policy that I don't talk on the phone while driving." The stupid thing, though, is that I sliced up the tip of my thumb while cutting rock-solid bread with a large but crappy knife. I didn't have an explicit policy "be careful when using knifes" but would it really have helped me? Of course I should be careful when using knives, but a policy about it would only provide an illusion of awareness. Like a mission statement: either you have a mission, or you don't. Putting a mission statement into words and up on the wall or for that matter tattooed on your wrist is no substitute for actually having a mission. Missions are felt and acted upon. Safety is a way of acting not just a policy. The most important conduct is how I act hours before a hard deadline, the day before going on vacation, before the sun is up, before I've had coffee, after a night of tossing and turning. "Policy" is how I think I should act, but "history" is how I do act. "Policy" is a comforting illusion.

clean slate

I love a clean slate. I have gotten in several really bad conflicts with people over the last year or so in which I recommend starting over from a clean machine, they prefer another strategy, and I then refuse to have anything to do with their machines.
This behavior of mine is excessively rigid and decidedly non-agile. Why do I get so upset? Why do I get so upset over other people's computers?
Well, computers do accumulate cruft. (Yesterday a co-worker ran out of disk space on a fairly new macbook pro; he soon discovered that iMovie had been making duplicate copies of all of his videos. 30 gigs worth.) Cruft is nefarious and hard to detect, but it usually slows down the machine. Maybe you installed twenty dashboard widgets and forgot about them. Maybe you installed a system extension that looks up dictionary definitions for all words over eight characters. Maybe you turned on a "run real slow" option somewhere and forgot about it. On the PC, system degradation is often the result of malware. Then in a boiling-the-frog way, system performance degrades... until I sit down at your computer and freak out over how slow it's acting. "I have the same hardware / worse hardware and it's way faster than this." or "This machine is made of nice components; it should be faster than this." That assertion is very difficult to support with hard facts; it relies on my subjective experience of the hundreds of computers I've spent time with in the last twenty years. It doesn't matter if I'm right that the current machine performance is much worse than the hardware's ideal speed; it matters that the frog is just warm but not cooked. A warm frog and a slow-ish computer are not catastrophes for normal people.
Now, I could go off into self-justification here, and claim that I get so upset because of the future of doom that I foresee for a warm frog, and the machine/frog's owners coming stress and regret over a dead pet. That's not it, though. I get upset because I don't know how to save the frog. I don't know how to go from a slow-ish computer to a fast-ish computer. I don't know how to diagnose why a slow-ish computer is slow. My answer is always to start over, wipe the disk, and then the trouble goes away for a while. I think it's kind of fun to get a new environment set up on a clean machine; most people regard setting up a new environment on a clean machine as a major diversion from actually getting work done. And, in truth, people who let me wipe their machines usually end up with a set of new problems; not slow problems, but configuration problems. Most people will experience this as going from a warm frog to a paralyzed (albeit cool) frog... and when considering my recommended course of action, wiping the machine, they foresee the paralyzed frog, a computer which completely prevents them from accomplishing any of their tasks.
This explains the conflicts: we are both predicting doom as a result of following the other's recommendations, but our definition of doom is different. For me, a slowish computer right now is doom; for others, a slowish computer is preferable to an unconfigured computer. We have different values. And it's not my computer so I should keep my frog-related-fears to myself!

[Postscript: This has absolutely nothing to do with my reinventing my entire life every five years.]

national "change your passwords" day

January 17th, 2007, is hereby declared as National Change Your Passwords Day. Get your tools together and get ready! There are dozens of password management tools, including a moleskin notebook. A low-tech strategy that has served me extraordinarily well is writing the accounts and passwords out longhand on paper, then laminating the paper, and storing it somewhere safe. For extra points, xerox that and put it in your safety deposit box with your passport and your offsite backups. (No, even I don't have a safety deposit box with offsite backups.) For casual passwording, I use the Mac OS X Keychain Access application. Once I used a Palm Pilot password vault, then discovered that sync'ing the application did not also sync the data. Whoops.
Over the next few weeks I will post more suggestions on getting psyched up for National Change Your Passwords day.
A parting thought: Over the past year, to how many people have you revealed a password? Common reasons for revealing a password include "I'm offline and I need that email message," "tech support needs to log in to my computer," and "my boyfriend's going to the ATM so he's getting cash for me too." Has your relationship with any of those people changed since you revealed a password? How about your relationship with any of the people who might have overhead that conversation? If your passwords were compromised, how much money could an evildoer steal from you in one day?

towards a better open laszlo install procedure

I installed glassfish on my pc yesterday. Glassfish is a shiny new j2ee server; I am evaluating it as a replacement for tomcat 5.0.30, which is dying a few times a day in one installation I monitor. The glassfish installation process was beautiful: an executable jar did it all, and got it right the second time. (I had to configure my path to get to a JDK first, not a JRE.) Next I downloaded a recent Open Laszlo servlet war, dropped it into glassfish's auto_deploy directory, then, poof, my servlet was installed. (Anybody want more detailed instructions on deploying Open Laszlo to glassfish? Comment here.)
That same day, one of the hardcore Open Laszlo developers mentioned the emotional fortitude necessary to create a cygwin build and development environment; earlier that I day, I completely blew up at two very skillful people creating a new development environment on a mac. Earlier this week, my team was temporarily unable to create Windows installers for Open Laszlo because of a hardware failure on the one PC that we use to build NSIS installers.
The problem here is not the operating systems, the source code, the hardware, nor (least of all!) my co-workers. The problem is the Open Laszlo build process, for which I am culpable, and the Open Laszlo install process, which has been on my plate to improve for months now.
My goal: make it possible to install an Open Laszlo server using a pure-Java installer which is almost entirely identical for windows, mac, and linux. And: make it possible to create an Open Laszlo/subversion build environment in less than an hour (after getting all the binaries), without suffering, without hand-editing a bashrc, and without worrying about forward-slash vs backward slash.

powered by performancing firefox