|Ned Batchelder : Blog | Code | Text | Site|
» Home : Blog
I've worked for twenty years as a software engineer, in corporate organizations of various sizes. By its nature, the work environment is imperfect. Too many things have to get done in too little time. You get compromises and disappointments from having more than one decision-maker. Chasing after customers, with their technological whims and superstitions, is frustrating.
So it is with great interest that I'll be following Damien Katz's progress. Damien is a good friend, and a great developer. I wish we were still working together. But he is off on a grand adventure: he's building a highly distributed file system called Couch. No one is paying him to do it, he's moving to a less expensive part of the country, living off savings, and figuring out the business aspects later. He's writing about the whole thing on his brand-new blog.
Damien is building his system for the pure pleasure of the building, and crossing his fingers that his family will be able to eat. (Actually, he's also available for contract work).
This sounds more dramatic than it is, but I feel a bit like a member of some software chain gang, watching as a fellow prisoner saws off his leg manacle and flees. Will he make it? Will his crazy plan work? I cheer for him, not only in the wild hope that he might succeed, but because if he does, it means others might be able to follow his example. Go, Damien, go!
Just in time for the Republican National Convention, esteemed linguistics professor George Lakoff talks about the way slogans frame the debates over policy: Linguistics professor George Lakoff dissects the "war on terror" and other conservative catchphrases. In particular, he faults the Democrats for letting Republicans choose memes through slogans, and not fighting fire with fire:
Seems like some of the more interesting events at the Olympics weren't covered at all: Let The Games Begin:
I've long been an advocate of deleting code and letting go of the past, but don't leave mysterious garbage behind. Recently, a co-worker was removing some unneeded code. A certain class (let's call it COldThing) was obsolete, and all references to it had to go. He changed code that looked like this:
static bool bInitted = false;
to something that looked like this:
static bool bInitted = false;
This is just inexcusable. Why leave the empty initialization logic? The only explanation is simple haste. I ran across this code while working in the file, and it took some digging to figure out why this no-op initialization logic was there.
I added a few paragraphs to Deleting Code about this.
Looks like the venerable MD5 cryptographic hash has developed a crack: A real MD5 collision. A team has published two different input streams which hash to the same MD5 value. Of course, because of the pigeonhole principle, everyone knew this had to happen. But no one had ever found a pair before.
Now that they have, researchers will be working on the question of whether it is feasible to compute, for any given input stream, a different stream with the same hash. If that happens, then MD5 is useless cryptographically, and a lot of infrastructure will have to be thrown out, but not before a bunch of bad stuff (like theft and fraud) happens.
Mark Pilgrim provides this Python program to demonstrate:
# see http://www.freedom-to-tinker.com/archives/000663.html
Running it prints:
Tony (I couldn't find his last name) has written a tutorial about writing tile-based games in Flash: Tile Based Games. It is a good introduction, with breezy (if slightly fractured) explanations of the code, taken in small steps, with playable demonstrations as you move along. My son finally understands arrays, I learned something about ActionScript's object model, everyone wins.
He also has a selection of his games for when you need a break from coding!
I've long wanted a set of six good-quality juggling clubs, for the day when I've got someone to pass clubs with. Being a basically cheap person, I haven't invested in any. But I saw the Flying Karamazov Brothers last week. They are talented and funny, and they re-inspired me. At intermission, Ivan was chatting with the audience, and I asked him what clubs they used on stage. He said they were Dubé American clubs.
I ordered three to see if I liked them, and they arrived today. They seem very heavy to me. Does anyone have any experience with these? I've juggled with a friend's Dubé European clubs, and they are very nice, but more expensive, and fragile-seeming.
I saw this in a chunk of code recently (the names have been changed to protect the guilty):
if (state == kActive ||
Um, right, whatever. Is that condition correct? Who can tell? I can't make sense of it. I would rewrite it with intermediate booleans like this:
Being a developer, my naturally preferred activity at work is writing code. To place things on a crude scale, after that comes designing the system, helping others get their work done, and last, project management. Project management is one of those necessary evils. No developer wants to think about it, very few of them are good at it, all chafe at the control imposed on them by it. But without it, all the rest is for nought.
Pete Lyons pointed to Max Widemans's voluminous resource on project management: Expert Project Management. I'm guessing there's some useful stuff in there, but it will take a more focused effort than I'm willing to give it right now to find it. There are so many pages that to my developer's eyes are about the same thing, that I don't know where to look for nuggets of wisdom. And too much of it feels like pseudo-science, like Those Sexy Triangles Again, about how to diagram the tradeoff between cost, quality, time, etc.
First I read on Bob Congdon's site about Orkut being taken over by Brazilians. There's nothing wrong with Brazilians outnumbering Americans, but they seem a bit too eager to join seemingly random groups: the Brookline Massachusetts group has 75 members, 7 of whom live in Brazil.
Then Adam Greenfield writes up what many have been thinking in Social networking sites: a postmortem:
In a few years, we'll all look back on this and laugh...
Here's Jim Meskimen doing a whole host of voice impressions in a very funny parody of NPR: All Things Blithering. Not only are the voices expertly mimicked, but the writing perfectly captures each person's character quirks.
After a small project of mine was converted from Python to C#, I have a new-found admiration for Python's dynamic typing, and other cool features like named arguments in function calls. I have come to believe this about static typing:
Static typing prevents certain kinds of failures. Unfortunately, it also prevents certain kinds of successes.
This made me smile. Charles Miller relates his first impressions of Dive Into Python. He says the book is the wrong size:
Over a year ago, I mentioned the idea of naming classes without 'Manager'. I said at the time that I liked the idea of using 'Wrangler' instead. Well, I finally went ahead and did it: CRetryWrangler was born. It has a nice alliterative ring to it. I figured I'd get a little grief from my co-developers about the whimsical name.
One of them asked me, "What's a wrangler?", and I told him it was a kind of cowboy who takes care of horses or something. He comes back later and informs me that is its second definition, but the first is:
Sure enough. Oh well. The name sticks. Maybe it's even more appropriate.
It had to happen. Pokia is some guy who makes old-fashioned corded handsets for cell phones. Now while you are talking on your swank new latest micro-sized, feature-packed cell phone, you can look like you are talking on a phone half a century older. He seems to be making them one at a time, and selling them on eBay, though he's had a lot of press, so it's only a matter of time before they become a mass-marketed item.
So, I love cygwin, because it gives me powerful Unix command line tools for my Windows machine. Thank you. I love it. But: would it kill them to accept -? as a request for help?
$ diff -?
Why? What would be so terrible about understanding dash-query? I type it every time I want help, and have to look at that stupid error message every time. Grr...
I've updated my Python module id3reader.py to version 1.5. It now supports genre information (although genres are stupid), and does a better job handling the vast variety of character encodings.
I feel kind of silly about this update, because I did the coding back in February. It took an email from a dissatisfied user before I realized that I had useful changes that I had not posted here. Mea culpa.
Today was just one of those days. All day at work was the kind of integration hell that comes when four developers all make big changes at once. We spent most of the day trying to grok each others changes to debug one problem after another.
And I found bugs in the parts of our code that were long thought completely flushed out: reference counting, exception messages, engine patterns, and so on. Then, to top things off, when I got home, the main waste pipe in my basement had sprung a leak and was soaking the floor!
Maybe tomorrow the things that are supposed to just work, will.
The resemblance is remarkable. Hmm....