February 19, 2014

Don't group your problems

At some point in the early afternoon, I got a to-do list. I had the project manager in a screen share showing me the problems she was seeing, and in another window a tech lead giving me feedback on a Github pull request. They were all mostly linked to this one component, so with three new items on my list, I thought, hey, I can refactor this and take care of all of them.


By mid-afternoon I was hopelessly mired, with a new template taking a ridiculous number of arguments, and at the same time Not Working At All, and I couldn’t figure out which of the several parts I had in the air was causing the problem.

Instead of bulling through, though, I finally learned something. I stopped, and threw away all the changes I’d made. I looked at just one item on the list, the pull request feedback. It was just changing some IDs on some tags. I changed the IDs and updated the pull request. Simple.

Next item. A status indicator shared between windows wasn’t cleared if one window was closed while in an error state and another one was opened. I had been trying to reset it on window close in my Brand New Super Component, but instead I figured out how I could essentially initialize it on window open without touching the existing component. (In the process I learned a little about how to call controller methods from a route in Ember.js, which was a bonus.)

Now I had two items cleared off the list, and I was free to fix the third in any way that worked. And, yes, I created a new component slightly different from the original one, but now I only had to solve one problem, so my new one was not as ambitious and didn’t require as many complicated changes. And it worked.

We’re gonna make an engineer out of me yet.

Posted by pjm at 7:08 PM | Comments (0)

February 4, 2014


I posted a few days ago about starting out with, a platform for doing coding exercises and having your solutions workshopped by others.

It turns out that exercism is an interesting illustration of a classic social-software platform: scaling.

The mechanics of exercism work like this: you submit your first exercise solution. Then you wait for feedback, and iterate. Once you’re satisfied with your solution, you can mark the exercise finished, and once you’ve marked a solution finished, you can start giving feedback to others on that solution.

If you’ve submitted a solution to an exercise, you can start another one in that language, even if you’re still iterating on the first one. This makes a lot of sense, because it turns out that you may be waiting a while for feedback. Essentially, there’s no barrier to joining the site and starting to do exercises, but because you need to have completed an exercise (possibly iterating three, six, even ten times on it) before you can start critiquing others, every exercise is almost guaranteed to have a much higher number of programmers submitting solutions than programmers reading and critiquing.

This can get pretty frustrating for a beginner. I sat on my first Ruby exercise for almost a week with no feedback until I got some. I iterated, and waited another four days until I got a “looks good” which I took as enough reason to mark it completed. (My submission for the next exercise has been sitting for six days without feedback.) I have three Coffeescript exercises waiting for critique, and one each of Ruby and Coffeescript waiting for me to start working on solutions.

The only way around this is for those of us who’ve finished any exercises at all to provide as much feedback as we can to others, and try to increase the pool of readers that way. I’m making an effort to provide as much feedback as I can to others working on that exercise, but probably what I’m doing is creating more work for whoever has completed the next exercise. The Ruby community is clearly larger than Coffeescript - whenever I look there seem to be around 70 active Ruby solutions waiting for feedback, but often there aren’t any Coffeescript solutions. So if I want others to be reading my Coffeescript, I need to be critiquing theirs…

ETA: And after I hit publish, I look at Twitter and see they’re aware of the problem.

Posted by pjm at 8:55 AM | Comments (0)

January 26, 2014

My new coding workout

I’m not going to detail the web-surfing path which led me to discover, but I am going to explain why I like it.

The concept is this: exercism by itself is a small command line utility. When you run exercism fetch it gets you a programming exercise, which amounts to a README file and a test suite. The website describes how to set up the command line utility, and how to run the tests in each language supported. It uses GitHub for authentication and to serve the activities; I suspect there’s some git involved in storing the completed solutions as well.

The interesting part is what you do once you have the activities. You don’t just write code to make the tests pass, although you could. You submit your code to the site, and people who have previously completed the activity critique it. There’s a lot of effort put into emphasizing that this should be constructive criticism, and so far it looks like it has been. You get to respond to the criticism or iterate your solution to incorporate it (hence the constructive criticism; it’s more like you’re workshopping your code than being graded on it).

Currently 12 languages are supported, mostly of the “trendy” variety. Perl5 is offered but not PHP. Go, Clojure, Haskell and Scala are offered but not Java or C.

I’m using Coffeescript a lot in my new job, so I’m using these exercises to get my mind used to the idioms of that language rather than leaning heavily on its Javascript basis. I’ve also started doing the Ruby exercises; it looks like there’s a much deeper user base in Ruby, and maybe more exercises there as well (it’s hard to tell until I get deeper). My motivation for trying Ruby is not that I think I need practice but that I think the exercises may teach me some new ways of approaching problems in any language, whereas in Coffeescript, so far, I’ve understood how to solve the problems, but not how to solve them in a Coffeescript way.

This isn’t a site for learning a language; if you’re not at least competent as a programmer the first exercise is going to be frustrating. The parallel with a spoken language would be a “conversation class” rather than a “teaching class”. I’m debating starting the process in Javascript, as a complement to the Coffeescript work; Python is another language where I only barely know it, but might benefit from some work in the idiom.

Posted by pjm at 8:34 PM | Comments (0)

June 27, 2013

Target your recruiting

I’m debugging some Javascript on a page which embeds a Prezi slideshow. It turns out that one of the scripts Prezi loads writes this to the Javascript console:

If you find digging around in stuff like this fun, you might want to take a look at our job page: :)

I have to wonder if they find anyone this way, but given how specific it is—it’s unlikely this message reaches anyone who wouldn’t be at least a little qualified—and how low the cost, it’s a pretty efficient recruiting message.

Posted by pjm at 2:52 PM | Comments (0)

June 5, 2013

JavaScript testing for Rails 3.2 by integrating Jasmine

I wanted to write unit tests for JavaScript components of the Rails application I’ve been working on recently, and intended to use the Jasmine framework to do it. However, I found a lot of conflicting information about what the current incantations are for making this work properly, and a near-total lack of documentation for my particular setup. Consequently, I’m documenting my process here, in hopes that it will help someone else.

The application uses Rails 3.2 (actually 3.2.13 at the moment). I made a false start using the jasmine-rails gem, but in the end I had two big problems with that: the rake task which was supposed to run the tests couldn’t find the Jasmine library, and while Rails was able to mount the Jasmine engine, it wasn’t loading the scripts I intended to test.

I dumped that branch and went back to master and started over. Following the tip on the Jasmine page linked above, this time I tried using jasmine-gem. (It was v1.3.0.) I installed it as directed on the gem’s README page, specifically by adding gem 'jasmine' to the project’s Gemfile, running bundle install, and then rails g jasmine:install and rails g jasmine:examples.

(In the end I didn’t commit any of the code generated by the jasmine:examples generator, but it was illuminating.)

The gem then suggests starting a server with rake jasmine, and sure enough, that worked. It took a bit to get the server seeing the code to be tested, however. This involved tweaking the spec/javascripts/support/jasmine.yml file to include the proper set of scripts. Specifically:

  • The src_dir value needed to be public/assets. This Stack Overflow question pointed me in the right direction. I had to add a manifest file (i.e. assets/application.js) to the src_files array as well in order to include the script containing the code I wanted to test.
  • I needed jQuery to be available to Jasmine. jasmine-jquery turned out to be the solution here, not because it itself is useful (although it is) but because it pointed out that I needed to add jQuery to my src_files file. (It isn’t in my manifest because I’m loading it from a CDN.)

Now I had running Jasmine tests. (Once I wrote the tests, of course, within the spec/javascripts directory. More on this at the end.) However, my rspec unit tests for Ruby code run automatically when I change the relevant files (either the code, or the test code which tests it) so I don’t need to kick off a test run to see if I broke something. I use Guard for this. (Currently v1.6.2.) I wanted Guard to run my Jasmine tests as well, so I’d get the same kind of instant feedback for JavaScript that I get for Ruby.

For this I wound up installing guard-jasmine. (This was v1.16.0.) Once that was in my bundle (add to Gemfile, run bundle install, rinse, etc.) I ran guard init jasmine and it added a block to my Guardfile to watch the JavaScript files and Jasmine specs.

Running this was a little trickier, however, because once again I needed to train it to find the code I wanted to test against. This required me to install jasminerice (v0.0.10), even though I don’t need that gem’s primary function. Once I had that in my bundle and had created a spec/javascripts/ file (essentially a manifest file for my Jasmine specs) and a placeholder spec/javascripts/spec.css file, this worked fine. I had to restart Guard to make sure it found and started a Jasmine server properly, but it was running the specs I’d written previously with the free-standing Jasmine and they were passing.

Now, about that test code:

There was a step 0 to this process which I had previously stumbled on but hadn’t really faced before, which was that in order to test JavaScript, one must have testable JavaScript. A recent article in A List Apart addressed this quite nicely; in short, instead of the usual written-three-lines-at-a-time soup of jQuery functions that normally come along with a Rails application, you want to build real JavaScript objects; then your test code can instantiate those objects and run assertions against their behavior.

Posted by pjm at 1:59 PM | Comments (0)

December 8, 2012

The webmaster's guide to passwords

Here’s the short summary: if you’re storing user passwords unencrypted anywhere, you’re doing it wrong. If you don’t understand why, you should stick to using free open-source packages like Drupal and not roll your own login system. Also, if you’re not a webmaster, and you ever get an email from a website which provides your unencrypted password, you should know that this site is probably not doing a good job storing your password securely.

The problem is this: sites get hacked, and databases get compromised. Encrypting the connection (your SSL certificate, the https in the address bar, and all that) just protects the customer’s communication with your server. It’s nice that they’ve stopped crackers from harvesting passwords one by one as their users provide them, but what’s the point if a successful compromise of the server means everyone’s passwords are available to the cracker?

The first thing you need to know (if not understand) is that there are certain functions which are one-way; that is, the input cannot be determined by the output. Some of these are called hash functions. If you run a sufficiently strong hash function on a password, it is not possible to determine the password from the hash. (The output of a hash function is sometimes called a hash.) (Hash functions are like padlocks: some are stronger than others. But even a weak lock is better than none at all.)

“But wait,” the inexperienced webmaster says, “how can I tell if my user is providing the correct password when they return to the site?”

Well, think about it. They’ve stored a hash produced by running a hash function on their password. Why not run the same hash function on the password provided at login time and see if the resulting hash is the same as the one in the database? Problem solved.

(N.B. You might also want to read up on “salt.”)

Posted by pjm at 9:22 PM | Comments (0)

October 25, 2012

Now I know a little more about rake-pipeline

I’ve been doing a lot of work recently with a Javascript framework called Ember.js. In production, it asks the user to load a single Javascript file up front, and then runs the whole application in the browser. With a medium-sized or bigger project, you need some kind of build toolchain to take the many smallish code files you’re working on and bundle them up, both for production and also on an ad-hoc basis as you’re working. The toolchain I’m using is called rake-pipeline (rakep for short) which is just some sugar layered over rake which is really just ruby scripting.

If you haven’t glazed over yourself by now, bear with me.

(Aside: All of this stuff has been generated by a culture of companies, mostly but not exclusively on the West Coast, building tools for their own use and then publishing the good stuff—whatever’s not central to their real business—free, open-source, for everyone else’s benefit. It’s pretty awesome and I try to contribute my own tweaks back when I can.)

If you haven’t used Ruby but are familiar with software, Rake is just make in Ruby. rakep reads an Assetfile which is the equivalent of Rakefile in Rake or Makefile in make. I hadn’t seen the syntax before but I could sort of suss out what was going on.

I’ve been using git post-commit hooks to generate a one-line Javascript file which contains a “version string” that’s just the hash of the most-recent git commit. Displaying this string in the application helps me tell if I’m looking at the most-recent version of the code, or an older build. However, if someone else doesn’t have my hooks installed, that file isn’t generated, and their application won’t load. I needed a better way.

First I looked at Flame.js, a widget library for Ember which I’ve contributed to several times over the last few months. Flame generates a version constant by generating a temporary version.js file in ERb, Ruby’s built-in template language, using Ruby to send git describe --always --dirty --tags to the shell and planting that in a temporary .js file. Flame, however, uses its own Rake tasks to build its distribution versions, and runs Sprockets over all the input files to handle Sass, and rakep uses neither Sprockets nor Sass, (at least not explicitly). I couldn’t just borrow stuff from their Rakefile, nor could I drop an .erb file into my code directory and expect it to Just Work.

I looked at the filters that were included, and discovered that Yehuda Katz’s rake-pipeline-web-filters library (which was already in use - Katz is a core team coder for Ember) includes a Tilt filter. Tilt is a sort of “send me anything and I’ll decode it” filter, and it will handle ERb. So I explicitly required Tilt in my Assetfile, and added this block before encoding of Javascript began:

  match 'lib/version.js.erb' do
    filter WebFilters::TiltFilter do |input|
      input.sub(/.js.erb/, '.js')

What that wound up doing was taking my version.js.erb file and generating a temporary version.js file which was then included along with the rest of the files as though it had been there all along. It’s not in with my regular code, so it doesn’t get committed to git itself, but it’s included in all the build files. And because the Assetfile is part of the project itself, anyone who builds the project (and has included all the requisite gems, has the right versions of Ruby, etc. etc. which they probably do if they’re building this) will get the appropriate version string in the application.

It’s a little thing, but I’m sort of proud of it. I could probably make that first line match 'lib/*.js.erb' and have it work on any .erb file in the directory, but it’s not needed so I won’t bother.

Posted by pjm at 8:42 PM | Comments (0)

September 15, 2012

Which do you believe, the map or the GPS?

If you read my last grumpiness regarding Nike+, you probably know that the answer to the above question is, “It depends.”

It turns out Strava has the same problem as Nike+ when it comes to using the GPS in the iPhone to track runs. Simply put, both apps trust that the GPS track from the phone is 100% reliable; once a run has been tracked, there is no option to correct the track or replace it with something generated from a map.

This would be wonderful if the GPS track was, in fact, 100% reliable. But for some reason in the last few weeks, my GPS tracks have been consistently bad. I’ve had seven-mile runs marked as two and a half, two-and-a-half mile runs marked as three… it goes on and on. I don’t know if the problem is the phone hardware, the apps, local topography, local weather, solar weather, or some combination, but it’s pretty consistently bad.

And it highlights the problem with using GPS tracks to get run distance (or much other run data): GPS as a technology is much more precise than it is accurate. Put another way, like email, GPS is a “best effort” technology (much like email). It can be wrong, and if it’s wrong it will not apologize nor necessarily admit the error.

So why don’t either of these logging systems accept an alternative? All they need is an option—it can be on the website, it doesn’t need to be right in the phone app—to indicate for a given run if the GPS track is actually correct. The user could have the option to upload a .gpx file with a better map track if they want to generate one with another app. (It’s hypothetically possible to use the Gmap-pedometer to create a gpx file, and use that to record a new run with Strava, but so far the gpx files I’ve tried uploading to Strava have failed.)

Introducing this option of human oversight is a simple way of accounting for GPS’s lack of accuracy. I’m sure most of the app developers want to avoid that degree of complication, but in doing so, they’re placing more trust in a fallible technology than it really deserves.

ETA: So the issue with my GPS inaccuracy turned out to be the iPhone and not the apps. Still, how do I correct the logs?

Posted by pjm at 1:40 PM | Comments (0)

September 7, 2012

Data portability

For the last year, I’ve been using the Nike+ running iPhone app to log my running. This was somewhat against my better judgement, as I tend to worry about consigning my data to warehouses out on the ‘net without some means to keep a copy in my own control, but I started when the girls were infants, and I needed something shiny to keep me motivated to get out the door on a regular basis. I have also become terrible at keeping up my paper logs (much like this weblog) and something which would automatically record my data sounded like a good idea.

However, a phone app has its pitfalls. I ran into two cases in the last few weeks which led to messy data in the log:

  • During a run, I “paused” the app, but then inadvertently “finished” the run (a different tap). I had to start a new one to track the rest of the run. Not only were my numbers a little goofy, but Nike recorded this as a double workout.

  • More recently, running on Battle Road I had a sketchy GPS signal. As a result, the hour-and-a-quarter run was logged as two and a half miles rather than seven and a half, warping the data quite significantly.

Both of these things should be pretty easy to fix given a little data tweaking, but it turns out Nike doesn’t support such things. What comes from the phone is considered Truth. I contacted tech support asking how I could fix these runs, and their answer was to delete the runs from my activity and email them the details of the actual runs to be re-inserted in my record.

Needless to say, this seems like a cumbersome approach.

So I’m shopping for a better logging solution. At the moment, I’m looking at Strava which comes well-recommended. But first I need to liberate my data from Nike+ (sound familiar?), and it looks like even that is problematic. I wonder if this shouldn’t be a standard part of how people evaluate online services: “How hard will it be to download everything I upload to this site?”

Posted by pjm at 7:00 PM | Comments (0)

May 28, 2012

Toy workshop

If there is omniscience, there is a ranked list somewhere of ridiculous things fathers have done to make their daughters happy. I am probably not ranked terribly high on that list, but I am on it.

One of the girls’ treasured toys is a small stack of musical greeting cards. This is the variety which play a song when opened—a small ROM and a tiny PCB connected to an equally tiny speaker with two cheap wires—sold by Hallmark at about $5 a pop. The first two came at their birthday and play “Winnie the Pooh” tunes. They got such a great reception their grandparents found two others, one of which plays a banjo tune and the other the finale of Tchaikovsky’s “1812 Overture”.

They’re taking a beating; all four have been folded, spindled, and mutilated in ways the post office could only manage with machinery. They’re fundamentally three-panel cards, with the third folded over the second to form an envelope for the electronics, and most have had that concealing panel pulled loose so the guts are exposed. (One of them had the third panel removed completely.) But one of the Pooh cards actually had one of the wires from the PCB to the speaker come loose this week, rendering it mute.

So yes, Daddy broke out the soldering iron and re-soldered a wire on a $5 greeting card.

Posted by pjm at 7:05 PM | Comments (0)

April 20, 2012

Turning off the baby monitors

Our baby monitors beep annoyingly when they can’t establish a connection to the base units in the girls’ rooms. Sometimes turning them off and back on again will re-establish a connection, but last night I turned off the one for the yellow room because it wouldn’t pick the connection back up.

This morning I discovered the reason: the cord for the base unit runs under the crib and plugs into an outlet in the wall the crib sits against. The plug had been pulled out just enough to shut off the base unit.

I’m pretty sure it wasn’t intentionally unplugged, but it reminded me of all the questions I would see in security forums about how to limit kids’ internet access. The conventional wisdom was that when the kids were smart enough to get around your filter, you should just shut it down rather than escalate. Now I’m wondering if it’s time to turn off the baby monitors now that at least one of the girls is capable of shutting hers off on her own, or if I should just plug it in to a socket she can’t reach from the crib.

Posted by pjm at 2:25 PM | Comments (0)

April 9, 2012

"Performant" is not a word

It’s common in the tech sector to come across people who don’t write terribly well. In many cases, it’s because English isn’t their first language, and they should be congratulated for writing it as well as they do, but over and over I find people without that excuse who still can’t effectively explain what they do. (Hint: this is useful when it comes time to convince other people to pay them to do it.)

My favorite example in recent years has been the fake word “performant”. This word is used as an adjective applied to something which performs well, i.e. runs quickly or efficiently. But it’s not a word; it’s just jargon, most often used either by people who want to sound knowledgeable or people who simply don’t know any better. In fact, because it usually forces the sentence into a less active form (“The framework is performant” rather than “The framework performs well”) it actually makes the point weaker.

If you want to say something performs well, say it, don’t obscure it with silly jargon.

Posted by pjm at 7:49 AM | Comments (0)

March 7, 2012

sed: illegal option -- r

I’m porting a very complicated Subversion repository to git using this helpful migration guide, but because I’m operating on a Mac I hit a minor roadblock. Specifically, I was trying to run this sed wizardry the migration guide uses for generating git branches from the Subversion branches, and I got this error:

sed: illegal option — r

The initial web search told me that the issue was that the BSD-style sed that comes standard in Mac OS X (Snow Leopard, in my case) doesn’t provide the same options as Gnu sed. One suggestion was using ports or Homebrew to install gsed instead, but for complicated reasons neither is a valid option for me. (Thumbnail: I uninstalled port to try Homebrew, but my Homebrew installation is broken.)

Then I found this offhand SuperUser comment which solved my problem:

Use -E instead of -r on OS X.

Now you know, aren’t you glad?

Posted by pjm at 3:16 PM | Comments (0)

December 25, 2011

Indirect brute-forcing passwords?

I am still in the process of reading James Fallows’ article on his wife’s Gmail account being hacked, but I was struck by this statement:

For reasons too complex to explain here, even some systems, like Gmail’s, that don’t allow intruders to make millions of random guesses at a password can still be vulnerable to brute-force attacks.

Let me guess: this margin is too small to explain how this works. But I would love to know; in my world, the definition of a brute-force attack requires millions of guesses at a password.

Posted by pjm at 9:27 PM | Comments (0)

January 4, 2011

Windows 7 and an Airport Extreme wireless network

We recently upgraded A’s laptop to Windows 7 after a little too long tolerating the excruciating mess which was Windows Vista. For the first few days everything was fine, because she was plugged in to an ethernet cable at her desk, but when she unplugged and tried to use the wireless network, things went haywire. She could see our network, but not join it, even though she was providing the correct password.

The answer turned out to be changing the encryption settings on the network. Instead of using WEP encryption, which was our previous setting, we needed WPA2 (or at least, switching it to WPA2 solved the problem).

Ironically, the reason we were using WEP instead of WPA2 to begin with was that her previous Windows systems didn’t support WPA2.

Posted by pjm at 5:44 PM | Comments (0)

October 15, 2010

Adobe Lightroom won't import photos

This isn’t of interest to 95% of my regular readers; I’m posting it for Google.

If Adobe Lightroom refuses to import photos from your camera (I’m trying with a Nikon at the moment) with the error message, “The following files were not imported because they could not be read.” …followed by a number, here’s how I fixed the problem.

Go to Adobe’s Latest Updates page and download the newest update for your Lightroom. Point releases are usually free (so if you have Lightroom 2, you should be able to update to 2.7 without additional charges). Once you’ve downloaded that and installed it, try again. That solved my problem.

The forum where I found this tip also suggested I update my computer’s “Camera Raw” support, which is a plugin Adobe packages use to read Raw files from digital cameras, but my Lightroom and/or CS installation is too old for that update, so that wasn’t my problem.

(Trying to run Lightroom on a four-year-old MacBook: now that might turn out to be a problem.)

Posted by pjm at 7:52 PM | Comments (0)

April 27, 2010

My status stream

In addition to its original category, you can also file this under “explaining things nobody really cares about in great detail.” But I promised to explain this a while ago.

With the rise of multiple competing platforms for status updates and/or microblogging, it can be a real pain to keep multiple venues up to date. There are now tools to keep this under control (desktop tools like TweetDeck or browser tools like HootSuite or Brizzly) but I didn’t want to sign up for something or run another application; I wanted to update in one place and let the update cascade.

The basic idea is that my updates cascade down this route:

identi.caTwitter → Facebook

I can insert an update at any point in the stream and it will cascade to the right.

To manage this, I use a Mac Dashboard application (no longer actively developed, but it works for me) called Chirp. I set up two Chirp instances in my Dashboard, one for Twitter and one for

Next I needed to set up the cascade., being an open service, is fine with sharing updates, and it’s easy to set up an account to update a Twitter account. Then I installed a Facebook application called Selective Twitter Status. This application takes anything that shows up in my Twitter stream which ends in #fb and makes it a status update on Facebook.

Now, the only thing I can’t do is post something only to (and I can’t figure out why I would do that.

  • All three: post to with #fb
  • and Twitter: post to without #fb
  • Just Twitter: post to Twitter without #fb
  • Twitter and Facebook: post to Twitter with #fb
  • Just Facebook: Log in and update

The hitch here might turn out to be LinkedIn, which currently just carries my Twitter feed.

This reads like something very complicated, but actually the concept is simple: don’t require multiple signups. If you’re following my Twitter stream, for example, you’re not missing anything if you’re not a Facebook friend of mine, and vice versa. (I know you were worried.)

Posted by pjm at 6:28 PM | Comments (0)

April 25, 2010

The promise and disappointment of LazyTweet

A few weeks ago, I posted a tweet asking a technical question and invoking the old LazyWeb.

(The LazyWeb concept, for those unfamiliar with it.)

I was startled to discover that someone had in fact created LazyTweet and they picked up my question automatically.

Intrigued, I answered a few LazyTweet questions and posted another one myself. I followed LazyTweet. And I found myself… frustrated and annoyed.

It turns out to be a classic problem of the web, and it’s a problem shared by a similar service, PeerPong. To address the “cold start problem” they are liberal about finding questions. This isn’t a complete solution to their problem, however, because it doesn’t address the problem of answers. With a lack of answers, new users can get frustrated and leave.

Also, by pulling in “questions” with a very loose pattern matching algorithm, the overall quality of questions sinks. They post a lot of questions which aren’t questions. They’re also tripped up by the very success of the “lazyweb” idea. See for example this case of PeerPong pulling in my initial tweet about LazyTweet and not being able to deal with it appropriately. Or genuine laziness on LazyTweet. Or, of course, LazyTweet spam.

I love the idea and I’d like to see it fly, but I think sites like Stack Overflow don’t need to be worried about LazyTweet any time soon.

Posted by pjm at 6:43 PM | Comments (0)

April 15, 2010

Is it really random?

“Random” is a word which gets used a lot these days, and mis-used almost as frequently as “literally.” But the more you learn about math (and computers) the pickier you get about what’s really random. (It happens that I documented when I reached the inflection point.)

(For what it’s worth, the common use of “random” is drifting towards “without pretense of organization or order,” or simply “miscellaneous,” but the true meaning is closer to “unpredictable” and the more you learn, the more you see how hard it is to be really, truly unpredictable.)

I got really excited a few months ago when I discovered and their “Introduction to Randomness” page, which took me extra-long to read because I was following all the links. And then I saw Alisa using to select a contest winner, which was something of a surprise to me; she could have rolled dice or pull names out of hats instead of going for industrial-strength randomness.

And then yesterday I saw Joe Palca’s All Things Considered story about scientists who pursuing true randomness yesterday (yes, there’s a sidebar about, and I began to wonder if an appreciation for true randomness isn’t creeping back into the mainstream.

So, for the record: Roulette wheels and dice are not truly random; they’re only unpredictable because we don’t have enough knowledge about their starting states. (They’re also device-dependent.) Quantum decay, now that’s random.

Posted by pjm at 5:45 AM | Comments (0)

April 14, 2010

Following instructions is a basic job qualification

We posted a job listing yesterday. We put the listing on our website, then tweeted and posted to some relevant local mailing lists and to Craigslist.

In the twenty-four hours since then, we’ve had a bunch of responses. (I’m being deliberately vague about that number at this point, but maybe when the process is over we’ll talk numbers.) About half of them have been from individuals who, based on the text of the ad, legitimately consider themselves a good fit.

If you’re one of them, thanks. The rest of this isn’t about you. This is about the other half.

The last sentence of the listing reads, “This is an on-site position only, no telecommuters, please.” That sounds pretty harsh (particularly considering that I am a telecommuter these days) but it’s in there for a reason. We’ve been doing this for a little while now. (We’ll reach the end of our third year of incorporation not long after making this hire.) We’ve learned some stuff about how our business works, and we think we know what we need right now. Another person who isn’t in the office is not it.

And yet the other half of the contacts we’ve had are from contractors or freelancers, from all over the country, telling us we should be outsourcing whatever work we’re hiring for to them. Despite us putting a sentence in the listing which should indicate that we’re specifically not interested in doing that.

First off, I would never hire any of these companies because I would never hire someone who came into a job interview and told me they knew how to run my business better than I do. Even if they’re right, I’d rather hire someone with whom I don’t need to deal with that kind of arrogance.

Second, if we’re going to continue to deliver competent work to our clients, we need our team to understand the part of the job which has been assigned to them, and do it as assigned. These people have demonstrated in their first contact with us that they don’t read or follow directions.

They won’t be among those who hear back from us. If I thought they were actually paying attention, I might tell them why.

Posted by pjm at 10:11 AM | Comments (0)

April 11, 2010

Found money report

(If you’re interested in previous years’ annual reports, see 2009, 2008, 2007 and 2006.)

Today was the day I emptied out the found-money tin onto the table and did the counting for the previous year. As I get older I get less reticent about my odd pleasures and I have to admit I sort of look forward to sitting down with a pile of change; it reminds me of emptying out the piggy bank in my first decade and figuring out how much was really in there.

Last year may have been up; this year was down on almost every front.

  • Total value: $25.77, not including the two pennies damaged beyond usability and the one so battered it could only be recognized as a penny by circumference.
  • Three $1 bills was a nice change; we’d been a few years without finding folding money.
  • 32 dimes, just a bit more than half last year’s number
  • 84 dimes, down but not by such a large degree
  • 42 nickels, actually more than last year
  • 427 pennies (again, not counting the lost souls mentioned above), down by about 10%.
  • 0.03€ (in three euro-pennies), fivepence, and 1 grosz (which is 0.01 Polish złoty, and was the only loose change I found in Qatar. The fivepence, and one of the dimes, turned up in Heathrow.) Canadian currency was either not present or not noticed during the counting.

I didn’t subclassify the coins because my method isn’t patient enough, which means I don’t have a count of, for example, wheat pennies. I did have a buffalo nickel in pretty tough shape, however. (Research suggests its value at approximately $0.07, so I just rolled it up with the other nickels.)

The obvious reason for the decline this year is tied to the reason last year was such a good year. From November 2008 to August 2009, I worked in an office in downtown Amherst and walked back and forth to work. I also ran on many more residential streets. Since we moved to New York in August, my daily walking has dropped dramatically, and the streets on which I run are much less likely to bear loose change. (For whatever reason, there are a lot more coins on the ground where people park their cars.)

Every so often, when I get to run with the group in Amherst again, I spot a coin and ask why the town isn’t ankle-deep in loose change without me around to pick it up.

Posted by pjm at 1:31 PM | Comments (0)

January 30, 2010

Government in defiance of math

In the parking lot of our apartment building there is a car bearing a mark declaring it a “Partial Zero Emissions Vehicle.”

I did some minimal research to figure out just what that meant, because, as you may have figured out, I’m a bit of a crank about some things, and it seems to me that a “partial” zero emissions vehicle is, in fact, not a zero emissions vehicle at all. It turns out, of course, that it’s a government designation born of the need to have something in between a Super Ultra Low Emissions Vehicle (I am not making this up) and a true Zero Emissions Vehicle. I think the idea behind the designation is that parts of the vehicle are zero emissions: it’s a partial (zero emissions vehicle), not a (partial zero) (emissions vehicle).

But it did have me wondering what a partial zero would look like.

Posted by pjm at 5:49 PM | Comments (0)

January 19, 2010


My latest experiments have been in bread. I’ve had breadmakers for years and often feel guilty with store-bought loaves, but recently I decided I wanted more traditionally-shaped loaves. My breadmaker has a rectangular pan, but the loaves are still pretty tall; I wanted to try bread in a regular loaf pan.

I haven’t gone cold turkey on the machine, though; what I do is take a recipe that looks promising, run it through the dough cycle of the machine (which essentially just shuts off the cycle without baking it). Then I shift the resulting dough out of the machine and into the pan, let it rise a bit there, and bake in the oven.

My first loaf tasted great, but I mis-timed the rising and forgot to pre-heat the oven. While the oven warmed, the dough ballooned, and the resulting loaf was a bit fluffier than we like. It was supposed to be sandwich bread, but today I used the last two slices to make the first and last sandwich with it. It made great toast, but ultimately

Tonight, I am trying pumpernickel for the first time, and so far it smells fantastic. (The fact that pumpernickel involves using coffee instead of water was something which had been hidden from me until today. Astounding.) I didn’t give it a whole lot of rising time, but it has risen nicely in the oven. In fact, I told A after I pulled it out, it’s probably going to taste horrible because it’s the best looking loaf of bread I’ve ever made.

In other kitchen tinkering, my ever-evolving granola formula has expanded to accommodate barley flakes. I tried rye flakes, but they were too hard. I have to imagine the miller grinding rye flour put some serious weight on that stone.

Posted by pjm at 8:34 PM | Comments (0)

November 12, 2009

Not the router you're looking for

I have a small stack of retired technology next to my desk, waiting for me to develop the momentum to list it all on eBay. One of the boxes is a Belkin broadband router, not a wireless one, just a standard four-port ethernet router of the variety everyone had in the days before pervasive wireless.

I only just noticed that the design on the box includes a small photo of a similarly-shaped Belkin wireless router, with the heading, “Consider Wireless” and caption, “Extend your network to different floors and rooms—without cables.”

The thing I find remarkable about this is that to someone picking this box up in a store, the message is, “No, not this one, try that other router.” I’m sure the price for the wireless router was higher (and possibly the margin for Belkin as well) but the idea of putting text on product packaging which actively encourages potential customers to buy something different feels backward to me.

Posted by pjm at 10:27 AM | Comments (0)

November 10, 2009

No wonder he's so active

The reasons have never been clear to me, but it’s not uncommon to have to herd Iz away from an open fridge door, and if we hold it open for a minute when removing multiple items he will often climb in. There’s nothing in reach that he would consider food, or at least that’s what I thought, so we just pull him out again when it’s time to close the door.

This morning I discovered punctures in the resealable bag of coffee grounds which were about the size and shape of feline teeth, so maybe he’s just been looking for a fix?

Posted by pjm at 9:00 AM | Comments (0)

October 2, 2009

This marketing story has been told before

I’m not very close to the center of things: I’m not even sure what Google Wave is supposed to be. (I haven’t tried to find out.) But the scurry and bustle around the invitations (I must have seen half a dozen micro-blog messages asking for invitations now) reminds me very much of the Gmail rollout.

Maybe I’m cynical, but since Gmail my mind has automatically translated “invitation-only beta” into “exploiting early adopters for unpaid marketing.”

(Yes, I now use Gmail as my primary non-work email address. Just because I didn’t like the marketing, that doesn’t mean I don’t like the service.)

Posted by pjm at 9:47 AM | Comments (0)

September 15, 2009

Twite, twee, tewwible

I should add to my list of reservations about Twitter that I am largely revolted by the neologisms which have sprung up around the service. Tweeple? Tweeps? Twibes? What are we, three? (Sorry, “twee”?) At least the verb “to tweet” reuses a perfectly good word already in the lexicon. I’m not opposed to new words, but have a sense of style, people.

Posted by pjm at 11:45 AM | Comments (2)

September 13, 2009

Dubious claims

The new apartment complex has complex-wide wireless through some kind of service agreement with a local company. In the complex newsletter, they have a sort of table comparing the provided wireless with cable modem and DSL. The problem is, most of the claims they make are bogus on closer examination.

Bandwidth. They claim this service has equal bandwidth to cable modem and greater than DSL. This may be true if you can jack in to the network at the router, which nobody in the complex can. Instead our bandwidth rates vary by our physical location, and generally are significantly worse than we would get from in-apartment service.

Furthermore, the bandwidth bottleneck for most people is not their service, but the hardware of their own network (wireless cards, routers, etc.). Show me someone who can saturate a cable modem connection, and I’ll show you someone with the technical know-how to laugh at this bandwidth comparison chart.

Security. “Because we have a firewall!” Who can spot the weakness in this argument? Yes? Is it that anyone who doesn’t plug their computer directly into their broadband connection these days usually has a router which uses NAT to distribute local addresses and therefore has a reasonable firewall from “go”, limiting their computer’s exposure to computers on their network and therefore probably computers they own, whereas this service leaves users exposed to every other computer using the service in this complex?

To use an analogy, if you only drive your car anywhere, you’re only exposed to the sneezes and coughs of your family, but once you get on an airplane, you’re sharing recirculated air with all the hundred-plus people you’re flying with.

In other words, this service is no more “secure” (and don’t get me started on “security” as a binary condition, as though connections can be classified as “secure” and “insecure”) than anything else; it simply moves the security decisions out of the hands of the end-user—who, I will admit, might not be competent to make them—and into the hands of a service provider up the line… who might not be competent to make them.

The fact that the people pushing this service can circulate such risible arguments with a straight face is a direct consequence of our unfamiliarity with the basics of how computers and their networks work. (Seriously, guys, I hope you didn’t get venture money with this kind of argument.)

Can’t we get a snappy word, like “illiteracy” or “innumeracy”, for this problem?

Posted by pjm at 7:17 PM | Comments (0)

September 12, 2009

Why I still don't trust Twitter

I said I’d write something about this when I first mentioned my foray into microblogging: what my reservations about the whole thing are. Preface each of these sections with “I don’t really like the idea of…”

  • …fragmenting myself into yet another channel. Aren’t we all supposed to be finding our own personal audiences? So why are we dragging them all through a few dozen different venues—“my blog, my microblog, my Facebook page, my bookmark stream, my photo feed”—instead of keeping everything in one place, perhaps with the option of allowing users to pick the aspects of the wider stream they wish to follow? (I think this may be the converse of the “too many inboxes” problem danah cites: “I don’t like having to deal with Yet Another Walled Garden’s attempt to replicate email.”)

  • …forcing people to sign on to a closed, for-profit service to get information I’m not getting paid for. Look, folks, Twitter is a business. Right now, their capital is our attention, which we’re giving them for free by providing all the programming they could ever want. Nobody has really come out to explain how they plan to monetize this yet, and I don’t grudge them the chance to do so, but I can imagine a scenario in which I’m not comfortable with that plan.

  • …signing up for a Single Point Of Failure. Fail Whale. Seen it? Guess how much obligation Twitter has to you as far as making it go away. Guess smaller. Much, much smaller. Also consider this:

“The total failure of Twitter during the DDoS attacks highlights the fact that, with Twitter, we’re relying on a single service for mass communication of this type,” said open microblogging supporter and Ektron CTO Bill Cava. “Most everyone understands it’s ridiculous to expect one service to provide email support to the world. The same is true for micro messaging. The reality is, it can’t and won’t continue this way for too much longer.”

  1. …signing on to a closed system. I guess this is the same as 2 and 3, really. This entire point is explained very well in an August post in Wired’s Epicenter blog, which (as noted above) largely deals with Twitter’s SPOF vulnerability, but also with its insularity.

And that’s why I also opened an account on Everything that’s there is also on Twitter, so if you want to swim with the stream, no problem. If you don’t… well, there’s an alternative.

Later on, if I find time, I’ll explain how adding a third micro-blogging format (I’m counting Facebook status messages) actually made things more manageable.

Posted by pjm at 7:55 PM | Comments (0)

September 7, 2009

Home office issues

Problem: The (new) home coffee maker makes much larger pots than the small one at the office, much more than any reasonable individual (or at least I) would consume in one work day.

Solution: Fridge the leftovers overnight, drink with some milk and sugar on a day when warm beverages seem like a bad idea. This turns out surprisingly well; I almost think I prefer cold coffee to warm.

I suppose I could just put less water in the machine, but where’s the fun in that?

Previous in-office experiments included actually freezing the excess coffee to make ice cubes for later iced-coffee beverages, following a suggestion I found in the newspaper. (Iced coffee made with frozen-water ice cubes becomes, well, watery.) Unfortunately, the freezer at work lacks the horsepower to actually freeze things on a regular basis (we’re lucky it keeps milk drinkable for 4-5 days) so that didn’t work so well. Here, maybe the freezer could do the job, but it turns out we don’t have ice cube trays. I knew I should’ve bought some at the Ampelmann shop!

Posted by pjm at 1:00 PM | Comments (0)

June 15, 2009

What's missing: how things work

We’ve done a lot of really cool stuff on the Internet in the last dozen years or so. Here’s something we haven’t done: explain how it all works in a way non-technical people can understand.

Don’t tell me there’s an Internet For Dummies book out there, because I’m sure there is. That’s not the point. That sort of book tells you how to double-click on the Internet Explorer icon, and how to tell the difference between an email address and a web address. Maybe it explains how to dissect a web address into a protocol, hostname and path, but I doubt it. That’s all fine as far as it goes (except for the Internet Explorer part) but there’s important information people need when things go wrong, and they’re never told they need to know these things, or how to learn them.

Here’s a good example: Most relatively competent people understand what domain names are. I wonder what percentage understand IP addressing? I don’t mean understanding the various ways of carving up address space, like class blocks and CIDR, or even the concept of localhost (there’s no place like and unroutable addresses (, anyone?) but just the bare fact of the numeric addresses under domains, and how they’re mapped to each other. And when I’m talking about understanding DNS, I don’t mean recursive queries, I just mean something as simple as “you send a request to this server asking for the numeric address of, and it answers with the correct address.”

The fifteen minutes it might take to understand that concept might save five hours (or five days) troubleshooting a connectivity problem.

I’m thinking about this because tonight I fixed an email problem for a local couple who will remain nameless here because it’s not their fault. They could receive new email, and read it, but they couldn’t send any. Was this a virus?

Nope. It was their helpful ISP blocking port 25, the universal “I’m sending email” port, in an anti-spam measure which, while possibly effective, neatly shifts the burden of unsolicited bulk email off the sender and on to the confused customers of a big, faceless telco. Because seriously, what’s a port? And where were they supposed to have learned that?

There’s a generation of us out here who open up our car hoods and are completely mystified, because they work so well we never need to know the difference between a loose belt and a busted alternator. There’s also a generation who knew how to check their own oil and could diagnose engine problems by listening to them. (“Sounds pretty rough; have you looked at the timing belt recently?”) On the internet we seem to have skipped directly from the user class who wrote their own network drivers to the ones who don’t know ports from IP numbers, but we haven’t yet reached the stability that second group really needs.

While we’re working on the stability, how do we teach them the troubleshooting?

Posted by pjm at 8:34 PM | Comments (1)

June 8, 2009

A very little cash for a laptop

We replaced A’s laptop last fall, and when, this spring, she gave me the OK to dispose of the old one, I went looking for a route which would not lead to a landfill.

What I eventually found was, which has an attractive model: you tell them what the machine is and what its condition is, they give you a quote and then send you the packaging (and a postage-paid UPS label) and you ship it back to them. They then cut you a check based on what they received.

This last stage is the part I wasn’t impressed with. The quote I was given for A’s laptop, a 4-year-old Dell with visible wear on the case and a bad monitor connection (an external monitor was needed to use it) was $55. The check we eventually received was $5.

My brother had slightly better luck, trading in my 2001-vintage G3 iBook with a busted hinge for $25 (original quote: $65).

I think the problem here is that the up-front questionnaire used to generate the quotes does not ask enough questions, or the right questions. It doesn’t ask how old the machine is, if the case shows wear, or the condition of several components, all things which are eventually used to set the final price. There is a check box for damaged LCD, which I checked, but nothing for estimating the condition of the case, for example.

To be fair, I might have had a more realistic quote had I called the listed toll-free number and questioned the original quote directly rather than simply sending in the machine and waiting for the quoted check. I haven’t seen much online feedback for the site; all the articles I can find read like they were paid for by the site owners (and some of them read like practice essays for a writing test).

In the final analysis, however, the laptop is not in a landfill (or at least most of it isn’t, I assume) and we didn’t have to pay to dispose of it, so I’m marking as a net win.

Posted by pjm at 8:36 AM | Comments (0)

May 21, 2009

Believing your own hype

I have a new hypothesis: any page containing the words…

You’ve come to the right place if you are looking to acquire mad skills.

…probably has nothing useful to offer me. (Bolding from the original.)

Posted by pjm at 2:05 PM | Comments (0)

May 18, 2009

Just a host

I don’t know when I crossed the line to where bug-fixing began to be the sort of thing I want to tell stories about. In the last week I’ve had several incidents where code has started to have its own stories.

Like the time I was sitting in a conference room where another developer was discussing a related-but-not-mine component of the larger project. By the time he got around to the bug in my project, which stemmed from code checked in by the team on the other end of the call… I had a fix on my screen.

Today, on the other hand. We have VM images which are supposed to be a clone of the production environment, made to work with VMWare. Naturally, I have to work around two or three problems to get this working (the VM can’t see the code repository, for example, so I can’t check out recent code) but I hack around it until it’s working.

But shouldn’t I test the fix before I check it in? In multiple browsers?

So this was how I found myself firing up Windows XP in Parallels Desktop, so I could use one virtual machine to test an application running in another virtual machine. I felt a little bit like I was juggling chainsaws.

Posted by pjm at 8:27 PM | Comments (0)

May 8, 2009

My work here is done

Speaking of finding money… this morning on the run I found an entire wallet.

Cash in the billfold, cards in the pockets, the works. (It was a pretty stuffed wallet. Not the wallet of a neat freak.) I didn’t count the cash but there were plenty of bills. My Friday morning running group, who already give me grief for my well-established magpie tendencies, ran right by; naturally I noticed it and picked it up.

We found the driver’s license and checked the address, in case it was someone nearby and we could drop it in the mailbox or something. No dice: Acton, and a 1989 birth date. Most likely a student.

I made a detour from the usual warm-up to drop it off at the police station. Their door was locked, and I had to call in to the dispatchers to be let in. An officer met me at the front counter and I pushed the wallet through the little ticket-office gap in the window.

Someone suggested later that I should have counted the cash, or at least gotten a receipt when I handed it over. Maybe I’m too naïve for a big town like Amherst. But nobody took my name, and I didn’t take any cash (though I could have) so I am not worried about my karma.

Posted by pjm at 7:12 PM | Comments (0)

April 26, 2009

Less beneficial thought patterns learned in grad school

“Hey, I need to invoice for my Boston Marathon work. I should start by reinstalling TeX!”

Posted by pjm at 2:46 PM | Comments (0)

April 22, 2009

Baby steps

It has taken me ages, but I have finally started remembering to use pushd and popd at relevant times. It’s like sticking little bookmarks in the computer file system.

Posted by pjm at 5:34 PM | Comments (0)

April 11, 2009

What recession?

The national and global economy have taken a beating in the last year. (I know, this is hardly news.) I therefore have proof that my annual found-money tally has no correlation with the wider economy. This was a banner year: Not only did the total haul since we started counting (four years, now) pass $100, counting interest, this year, but it was an all-time high on almost every number I count.

  • Total value: $32.74
  • 60 quarters, more than ever
  • 110 dimes, quite a few but not enough to outweigh the quarter haul in value
  • 36 nickels, still the rarest coin
  • A staggering 494 pennies
  • Three foreign currencies: 0.05 € (not found in Europe), 0.05 NZD (a first) and 0.25CDN

For previous years’ reports, see 2008, 2007, and 2006. If I wanted to be really geeky I’d make gnuplot graphs of the numbers of various denominations over years, or the relative income from “new cash” vs. interest earned. But I should really automate that instead of spending the time…

Posted by pjm at 9:25 PM | Comments (2)

March 29, 2009

A few browser developments

I’m writing this using Stainless, a new browser for Mac OS X. Stainless started as a “response” to Google’s Chrome browser, which isn’t yet available for the Mac. Stainless is up-front about lacking some of the features we’ve come to expect from modern browsers (there’s no built-in search box, for example,) but it does offer one feature I hadn’t realized I’ve always wanted: “single-session tabs.”

Single-session tabs allow users to have different tabs logged in to the same site with different usernames. Noah, for example, frequently has different browsers opened for his gmail address and his address (which we have hosted by Google Apps). In Stainless, those are two different single-session tabs. Being logged in to a site like or La Cucina Italiana presents a slightly different view of the site than anonymous users see, and now we can check them both with different tabs in Stainless.

I’m not likely to give up Firefox as my primary browser just yet, if only because I’m professionally addicted to Firebug and personally fond of a few plugins I use. But Stainless is a disruptive presence in a good way: by addressing a problem which has been nagging me for months if not years, it has made me more mindful of my software choices. (I’m thinking more about this recently, but don’t have any thoughts coherent enough to write about.)

On the other end of the spectrum, I’ve found an interesting approach to the problem of Internet Explorer 6. (Note that it’s a response to this more strident opinion.)

Posted by pjm at 12:14 PM | Comments (0)

March 21, 2009

People say odd things when they're under stress

Last night in a rather blistering Skype IM exchange, a client (actually, not even our client, because we’re subcontractors on this job) actually asked someone, “please provide an earliest as possible ETA at the worst”.

The best possible worst-case scenario? I was so bemused I dropped right out of the discussion for a minute.

Posted by pjm at 10:53 AM | Comments (1)

March 18, 2009

Unix commands which really should exist

Usually one uses the exit command to leave whatever context one is in, e.g. log out of a server, close a su session, etc.

Shouldn’t there be an exeunt command to just close everything?

Posted by pjm at 10:48 AM | Comments (0)

March 2, 2009

Error message of the day

From Ruby, but otherwise without further comment:

undefined method `is_defined?'

(For the record, the proper usage is defined?(<variable>))

Posted by pjm at 6:46 PM | Comments (0)

February 3, 2009

More evidence that appearance matters

I just bought more ethernet cable for the office. (If you’d told me a year ago that we would have an office and that the company would actually own three machines, I might have laughed.)

There are plenty of places to find cheap stuff on the web, but it turns out that even when you’re buying cheap cables the price varies some. In this case, I could save $0.10 per cable by ordering pink or brown instead of more popular primary colors.

Posted by pjm at 12:24 PM | Comments (0)

December 18, 2008

Freudian typo

CSS allows objects to “float” wherever they find room on either side of the box they’re placed in.

I just tried to set the gloat property on an object.

Update: At least it wasn’t the bloat property.

Posted by pjm at 4:57 PM | Comments (3)

December 17, 2008

Proof that Italian is fake Latin

Not really.

The app we’re working on now uses the wonderful Faker to generate a number of fake posts, comments, etc. in the development database for testing purposes. Needless to say, this means a lot of lorem ipsum floating around the browser window.

I noticed this afternoon that at least half of the Google Adsense ads served in response to pages full of lorem ipsum are in Italian.

Posted by pjm at 6:41 PM | Comments (0)

November 20, 2008

A very big keyring

Earlier this week, I was running along a road in this town which may have been one of the roads on one of my first runs when I first came here. I spotted a decent-sized flock of wild turkeys on the far side of an adjacent field, and my thoughts drifted to a story of my grandfather’s cat bringing home a dead partridge—I don’t know how much of what I was remembering was real and how much was pieced together from different stories, or just plain imagined.

Later I realized that this has to be my preview of getting old—that with every passing year, more and more of the incidental objects in the world are becoming database keys to something stuffed in my brain. Turkey => partridge => Mocho => dinner => ??

I can easily imagine this iterating to a degree that would make me unable to relate to the real world.

Posted by pjm at 10:34 PM | Comments (0)

November 4, 2008

More breathing room

I win. Here’s the recipe.

  • One MacBook with stock “120GB” hard disk. (We all know it’s not really 120GB of actual capacity, of course, but it’s a nice round number.) The one I had handy had less than 2GB of free disk space.
  • Two Western Digital MyPassport Essential portable hard drives, 320GB nominal capacity.
  • One pretty good How-To article.
  • A few tools.


  • One MacBook with 189GB of free disk space
  • One external HDD formatted for Time Machine automatic backups
  • One 120GB external HDD which has some tool marks on the case and has the complete contents of the MacBook on the disk…

Basically, you copy the boot volume of the MacBook to one of the hard disks, then open the case and swap the disks inside between the external drive and the laptop. It helps that the MacBook is one of the easiest laptops for HDD access I’ve ever met, but thanks to the details provided in the article, the hardest part of the process was just copying the old data from the drive. The actual open-cases time was less than ten minutes.

And one of the reasons that took as long as it did was that I did it twice: once to the external drive I’ve been using as the repository of my occasional backups all along, and then a second time to the new drive destined for the MacBook.

I’m not sure whether I’ll zero out the old drive from the MacBook and sell it in its external case (with full disclosure of its history, of course) or keep it, but the total cost of the upgrade was pretty good, and having another drive which will hopefully make keeping regular backups easy was a bonus.

Technorati Tags: , , ,

Posted by pjm at 7:08 PM | Comments (0)

October 26, 2008

Small beginnings

Acting on a hunch, I counted the “found money” tin yesterday and discovered that our total to date (about midway through the fourth year of keeping track) has passed $100.

Accumulated interest on the first three years helped push us past the milestone, but there’s definitely something to be said for just picking up free money when you see it.

Posted by pjm at 2:07 PM | Comments (0)

October 8, 2008

On the merits of backing up

I’m sitting at my desk restoring files from a backup.

It’s a nearly-two-month-old backup, made before I went to China, but the fact is that late last week my laptop burped in such a way that I was unable to log on as myself. (I’m not an admin user on my own laptop, for security reasons.) I was able to log in as an admin user and see all my files, but logging in as myself produced an interesting situation: the login application itself crashed and I was returned to the login screen.

So after fighting with that for a while, I gave up and reinstalled the operating system. Doing so preserved all my files, passwords, and software. Well, most of my software; for some reason I lost the entire /usr/local/ branch of the file tree, which meant I lost a lot of unix-y development stuff, like source code management (svn), Ruby, Rails, and MySQL (data and all).

My backups are old, sure. But they’re better than trying to reconstruct all this stuff from scratch. I’m actually sort of pleased, because this is the first time I’ve had to restore files from this backup and it’s nice to know it actually works. The biggest problem is that setting up the restores seems to take forever.

And I need to make a fresh backup one of these days when things are closer to normal.

Now Playing: Parade Of Punk Rock T-Shirts by Maritime

Technorati Tags: ,

Posted by pjm at 1:53 PM | Comments (0)

October 3, 2008

I don't think I get to count this

I’ve mentioned my tendency to pick up loose change when I’m running or cycling, and add it up once a year.

This morning, I found two pennies and a nickel in the course of the run, which is almost exactly the average daily gross. I also found someone’s debit card on the sidewalk.

I was across the street from the relevant bank, so I left it by the (still locked) door rather than adding it to my annual tally. But even if I could count it, how would I determine the found-money value of a debit card?

Now Playing: Add It Up from Violent Femmes by Violent Femmes

Technorati Tags: , , ,

Posted by pjm at 10:41 AM | Comments (0)

September 19, 2008

Don't use that address

I can’t think of a better way to broadcast this information.

If you’re in the habit of sending me email at my old University address (, stop. That address is going away before the end of the month, according to multiple helpful robo-mailings from the University IT department. (It’s been determined that, as an alumni, I am no longer eligible. I retain an address on the CS department servers, but I’ve never used that extensively and don’t plan to start.)

A little research should reveal a similarly-structured, functioning work address for me (change the domain name to, but there’s also the gmail address, which doesn’t go through company servers.

Posted by pjm at 9:51 AM | Comments (0)

September 18, 2008

I might explain the context behind this someday

“Thank you for your well-thought out and professionally presented proposal. This is one of the best proposals I’ve seen for technical implementation.”

Posted by pjm at 2:30 PM | Comments (1)

September 11, 2008

Following the fun

We talked about working at things you love a few years ago.

Off and on over the last nine months or so, we’ve been doing some developing work for a lawyer who had an idea he thought might be worth exploring.

He’s getting close to having a complete system, and he’s been showing it around to people in hopes of sparking some interest and getting things started. I don’t know much about this end of what’s going on, so I’ve mostly stayed out of the conversation.

Today, one of his messages included, in passing, the paragraph

Exciting stuff. Beats practicing law.

So now you know why I never considered going to law school. (And the Kenworth of my Dreams is looking more and more like a bad bet, these days. Anyone interested in a business venture in a cargo schooner? How many shipping containers do you think we could get in one?)

Now Playing: Los Angeles Looks Prettier on TV by Greg Koons

Posted by pjm at 1:52 PM | Comments (0)

August 23, 2008

Test pattern

I’d really love to know why the video screen at the Bird’s Nest appears to be showing data from the departure monitors at the Beijing Capital Airport.

(Update, August 24: That would be because it’s part of the closing ceremonies. Just a bit over 14 hours to my own flight.)

Technorati Tags: ,

Posted by pjm at 12:22 PM | Comments (0)

August 17, 2008

Defeating the Great Firewall

The so-called Great Firewall of China turns out to be made of swiss cheese, not that anyone didn’t already know this. I’m bypassing it at will.

And I need to. Thanks to the IOC’s ridiculous cave-in to the Chinese government, allowing the firewall restrictions to apply to internet connections within the Olympic venues and Main Press Center, China still blocks the IP addresses associated with major blog sites. That means if your weblog is hosted with LiveJournal, Typepad or Wordpress—pretty much any blog that’s not self-hosted—and you don’t publish the full text of your blog in your feed, the Chinese can’t read you. (I’ve had mixed success with Blogger blogs.) (If the same host also hosts your feed, they can’t see that, either; if you use Feedburner, your feed is still available.) This means that without bypassing the firewall, I couldn’t read JohnL’s blog. I wouldn’t be able to see what Amby’s writing for Runner’s World because it’s hosted by Typepad.

(So much for the blocked sites “not being Games-related.” The IOC should damned well be ashamed of that.)

I intended to complete and publish this explanation of how I’m bypassing the firewall only after returning from China, but I’ve realized that the same route I use to bypass the Chinese firewall is useful for avoiding geographic blocks on streaming video. (In other words, this is also how you get live streaming video without NBC’s bizarre 12-hour time warp. Sort of.)

What I did was install Squid. Squid is an internet proxy server, which means it accepts requests from one source and forwards them on to another without necessarily revealing the original source. I’ve installed Squid in two places, a server in the basement in Amherst which I used as an off-site backup for certain work servers, and one of those work servers (hosted in Dallas if I recall correctly). The default configuration was almost sufficient, but I did change the configuration so Squid would only accept connections from localhost. (Here’s a good HOWTO explaining Squid configuration.) This means the proxies aren’t public; only people on the proxy host (or people who can establish authenticated connections to them) can use them.

This is the trick: you need a proxy which is in the IP space you want to be “from”. I need a proxy outside China; if you’re trying to get video from outside its restricted area, you need a proxy inside the restricted area.

Connecting to the proxy is the easy part. I open a connection to the proxy host by opening up Terminal (actually iTerm in my case) and using ssh -L 2008:localhost:3128 pjm@proxyhost to set up the connection. This means my localhost port 2008 is “tunnelled” to Squid’s default port on the proxy host. Anything I send to localhost 2008 will be delivered to proxyhost 3128, transparently and over an encrypted connection. I could change Squid’s port or even the port used by SSH arbitrarily to disguise this connection, but so far there’s been no reason to bother with this.

Now I open Firefox’s preferences. In the “advanced” section, I look under the “Network” tab. In “Connection” I click the button (“Settings”) next to “Configure how Firefox connects to the internet.” I switch from “No proxy” to “Manual proxy configuration”, fill in localhost for the host and 2008 for the port.

If you’re using an open proxy by permission, you fill in its settings here instead.

Click “OK” and it’s over. I’m through the Great Firewall of China.

Obviously, though, I had one big advantage: access to servers in the USA on which I could install proxy software. If you lack such access, you’ll have to find an open proxy, which requires some care.

Posted by pjm at 10:45 PM | Comments (1)

August 6, 2008

Blog that fix

I’ve spent some time in the last week searching the web for those precious documents that tell me HOW TO do stuff. How to fix my broken rmagick installation. How to make a series of one-page PDFs into one multi-page PDF. How to make TrueType fonts accessible to Ghostscript.

About that last one. Seems like the basic steps are, “Put the font file in the right directory. Then update the font map file with it.” OK, I get that. It’s that second one that’s the problem: every description of updating the font map file shows a format which is not at all like the one my version of Ghostscript has.

And this is where I passionately wish one of these how-to guides was a weblog post. If it was a weblog post, it would have a date on it. And then, even though the writer has (ugh) neglected to mention which version of Ghostscript they used in their how-to, I’d have a good idea of how old the article is, and whether I should consider it current information or not.

I’d rather have a sketchy description of how it works with a recent date than a step-by-step hand-holding guide to a too-old version of the software.

(I still haven’t solved the Ghostscript problem, but the trick seems to be finding the font map file in the first place. On my Mac, it turned out to be in /usr/local/share/ghostscript/8.54/lib/Fontmap.GS.)

Now Playing: Here & Now from Aurora Gory Alice by Letters To Cleo

Technorati Tags: , , ,

Posted by pjm at 8:54 PM | Comments (0)

July 21, 2008

I do not think it means what you think it means

I’m in receipt of a Powerpoint document from an advertising network which will remain nameless. Leaving aside the question of whether Powerpoint is the appropriate medium for communicating the information it contains (I come down heavily on the side of “No”), let’s take a look at this question, apparently intended to find out something about our ability to handle a particular advertising campaign:

Does your web server have internet access? Can your web server view web pages?

If the web server doesn’t have internet access, our site will have serious difficulty reaching its audience. Whether or not the server software can be said to “view” pages is a complicated metaphysical question I’m not really prepared to consider at this point.

I think the sender meant to ask if the server could programmatically access resources located elsewhere on the internet, and the answer to that question is (I think) “Yes,” with trimmings. (I suppose I can imagine a scenario in which an overly-paranoid firewall prevented a server from accessing outside resources.)

But how would you answer that question if you were not at my level of technical experience? Guess?

Now Playing: Maps And Legends from Fables Of The Reconstruction by R.E.M.

Technorati Tags: , ,

Posted by pjm at 5:32 PM | Comments (0)

July 18, 2008

Skype indulges my geekery

Somewhere I picked up a habit, in IM conversations, of correcting myself using Perl syntax. (I think perl swiped this from awk or sed but I’m not that old; I learned it from Perl.) To clarify for less geeky people, that means that I would type something like


and expect it to be read as, “Oops, I fat-fingered the spelling of that word, here’s the correct version so you know what I meant.” The more literal interpretation of that syntax is “replace the first string with the second one.”

Imagine my surprise earlier this week when I did exactly this in a Skype IM conversation, and rather than having my little substitution shorthand turn up in the chat window, it actually edited my preceding message and added a little flag saying the message had been edited.

I’ve found myself wishing more than once that I could have shell access to life, instead of being completely limited to this visually-stimulating-but-inefficient audio/visual interface, and for one brief second Skype brought that dream a baby-step closer to reality.

Now Playing: Tellin’ Stories from Tellin’ Stories by The Charlatans

Technorati Tags: , ,

Posted by pjm at 3:12 PM | Comments (1)

July 17, 2008

Getting priorities in line

How great is going for a run?

Well, I can leave thinking about proportional reactions to different degrees of crisis, and come back thinking about all the steps I would need to set up an SSH tunnel to an HTTP proxy; in other words, to bypass the Great Firewall of China, if it works.

(I’ll post the steps when I get back… if it works.)

Now Playing: Waiting from Inarticulate Nature Boy by Josh Clayton-Felt

Technorati Tags: , , , ,

Posted by pjm at 9:40 AM | Comments (1)

July 13, 2008

How you use the storage space

At some point in Eugene, I was discussing with a colleague the differing approaches people take to popular culture. (One which came up, since I mentioned Mountains Beyond Mountains, was how Paul Farmer referred to People magazine as the “Journal of Popular Studies”, or JPS.)

At some point I asserted that since I have a head full of professional knowledge for my “real” job, my track-writing sideline occupied all the head space ordinary people filled with pop-culture trivia. I illustrated this by pointing out that I couldn’t name a single American Idol winner, but I could list the last 10 Olympic 10,000m gold medalists.

She then named all the American Idol winners, and I recited:

  • Bekele (Athens)
  • Gebrselassie (Sydney)
  • Gebrselassie (Atlanta)
  • Skah (over Chelimo, disputed) (Barcelona)
  • Ngugi (Seoul)
  • Cova (L.A.)
  • Yifter (Moscow)
  • Viren (Montreal)
  • Viren (Munich)

…and blanked out on Mexico City. But Tokyo ‘64, of course, was Mills; I don’t have Rome or Melbourne, but Helsinki ‘52 and London ‘48, of course, were both Zatopek.

On doing some research, I blew Seoul, because that was Brahim Boutayeb. Ngugi won the 5,000m in Seoul. Mexico City was Naftali Temu of Kenya; Rome was Pyotr Bolotnikov and Melbourne Vladimir Kuts, both Soviets, which probably explains why their heroics were never imprinted on my brain.

(Yes, Now Playing is back—I have my offline editor speaking to my system once again.)

Now Playing: Bob Dylan’s 115th Nightmare by The Gay Blades

Posted by pjm at 10:34 PM | Comments (0)

July 11, 2008

Selective tone-deafness

I recently realized that there are some people I just can’t communicate easily with. They’re generally people I like (on reflection, the group probably includes people I’ve dated) and yet somehow I’m continually (unintentionally) stepping on their metaphorical toes.

If this was one or two people, I’d want to blame it on them (over-sensitive). If it was everyone (and it’s not) I could blame myself (socially inept). But it’s neither, so there must be a more sophisticated reason.

Posted by pjm at 5:14 PM | Comments (0)

June 28, 2008

A brief word from our producer

I’m pretty busy here. I may find time to write a few graphs now and then, but I may not, so not all my good ideas for this space may make it. I regret the incompleteness, but I never promised comprehensiveness here.

Posted by pjm at 12:13 PM | Comments (0)

June 22, 2008

Forking a college

This weekend was A’s sister’s wedding. The groom is a CS professor at my College’s biggest rival in nearly everything—an old, cherished rivalry as close and heated as only two nearly-identical institutions can manage.

Early in the weekend I overheard him (I think I was meant to overhear) remarking that the College was an “offshoot” of theirs. This is not far from the truth; the College’s founding was made possible by the defection of their president and many of their faculty, who considered their location too remote and advocated its wholesale relocation to Amherst.

Failing that relocation, they arranged, with many of the leading citizens of this town (including Noah Webster, he of the dictionary, and Emily Dickinson’s grandfather Samuel,) to launch a new college. I’ve taken a lot of words to explain this (and the Wikipedia links above use even more), but as usual, the hacker culture has boiled it down into a two-word phrase.

I think the founding of the College may have been one of the earliest code forks.

Posted by pjm at 8:54 PM | Comments (0)

June 21, 2008

Pocket characterizations

I wear dress clothes so infrequently that when I pull out a jacket, I dip in the pockets to discover when I last wore it. Generally I discover a place card from a wedding reception, but not always; yesterday, my suit’s jacket revealed only a large square of moleskin, suggesting that whichever occasion I had last worn it had included uncomfortable dress shoes. (I recently invested in respectable-looking shoes I can wear for a day without resorting to moleskin.)

The blue blazer has seen much more use in the last year, between my new career impersonating a businessman and my tendency to bring it to major meets to be prepared for official receptions and the like. It’s easier to wear a jacket like that than to pack it.

As a result, checking those pockets revealed a cash receipt (in Euros) from a shop in the Milan airport, and a schedule for Metro North trains between Grand Central and New Haven.

Posted by pjm at 3:05 PM | Comments (1)

June 17, 2008

Finding the right venue

A lot of modern technology, for me, seems to be about setting up the right venue. For example, “podcasting” struck me as a faddish buzzword until I discovered that it also means “time-shifting NPR” and that having a load of podcasts on my iPod meant actually keeping the part of my brain that gets bored engaged on long drives. (I might have discovered this sooner if I drove anywhere on a regular basis.)

Today I discovered that I can make necessary phone calls if I’m walking somewhere. I can’t do it while seated in the house, or anything like that, but if I’m walking, no problem.

I don’t know what this means; maybe I don’t want to.

Posted by pjm at 8:09 PM | Comments (0)

Not a bad idea

I like it when testing web apps for work involves setting up some cool little surprises.

(It’s less fun when the tests don’t work, of course, but it’s a cool idea.)

Posted by pjm at 8:07 PM | Comments (0)

June 16, 2008

Learning from everywhere

There’s something about the door to this house that eats deadbolts. Maybe it’s just our luck. The puzzle, though, is that there are two deadbolts, and it is the owner’s wish that they use the same key.

The deadbolt in the door when we first moved in reached End Of Life not long after we arrived; I found myself clamping two chunks of a hockey stick (used for propping windows on the porch) around my key to get enough leverage to move it. Rather than wait on the owner (long story) I just bought a (relatively cheap) deadbolt and replaced it. Then I realized we would need another one, keyed the same way, and I had to find another one. This failed and I ended up having another one re-keyed to match.

This worked fine for a while, but recently A locked the door on the way out and found she couldn’t remove her key. It turned out that the tailpiece of the new lock had snapped off, killing that lock.

If you’re keeping score, that’s two non-working locks and two working locks, with two sets of keys; each set of keys works on one working lock and a non-working lock.

The temporary measure was to bring the older working lock up from the basement and rearrange the locks so the doors weren’t keyed-alike, but at least had working locks. Last week I happened on a pair of keyed-alike deadbolts, the brand of the original locks, and snapped them up in a second. When I got them home, I realized that these locks were keyed both sides, not keyed on one side and latch on the other.

(I’m not sure when one would use a lock like this. When is it important for a door to be locked to people on both sides? Particularly if a person on the “inner” side with a screwdriver could remove the lock entirely?)

I looked to see if I could just swap the old latch plates with the inner cylinders, but the tailpieces didn’t match up. Fortunately for me, I had the internet in my toolbox. Two searches produced, first, the manufacturer’s manual for re-keying these locks, including an illustration describing how to remove the tailpieces with a special tool.

(That also taught me that those pieces are called “tailpieces”, and also how the locks themselves worked. I briefly considered re-keying the locks to work with the key to my parents’ house, but thought better of it. I actually took apart the cylinder mechanism of one of the old locks and put it together again so it worked; I’m tempted, now, to try to clean out the frozen one and bring it back into working order.)

Second, a lock-picking site (yes, there are lock-picking sites) describing how to remove tailpieces without the special tool, or at least confirming that it was possible, and I was in business. I put the tailpieces of the original locks on the outer cylinders of my newest locks, and then used otherwise original equipment all around. And I know about three times as much about deadbolts than I did this morning.

Posted by pjm at 9:26 PM | Comments (1)

Recipe for disaster

On the bag of brown rice, I noticed a small block of text headed, “Microwave Directions.”

Hoping that might be slightly simpler than the stovetop directions (boil water, add rice, then oscillate between too much heat and no heat until bored or rice is cooked to bottom of pan), I skimmed through. It included the phrase, “Cook 35-45 minutes.”

I’m a little alarmed at the idea of leaving anything in the microwave for a half hour or more.

Posted by pjm at 6:47 PM | Comments (0)

June 12, 2008

Sudo says

As of yesterday, I have now had to explain my sudo make me a sandwich t-shirt twice, both times to non-computer people. (Yesterday, it was the ART therapist.) As the Times noted, it’s not an easy joke to explain to people who aren’t already familiar with sudo (which may be best understood as a sort of “Simon Says” command for when the computer refuses to do something you asked it for.) The cartoonist brings up the old E.B. White saying about explaining jokes (“Analyzing humor is like dissecting a frog. Few people are interested and the frog dies of it.”) which is one of my favorites.

I’m a little disappointed that “/Everybody stand back/ I know regular expressions” hasn’t had anywhere near the same level of interest.

Posted by pjm at 10:27 AM | Comments (0)

May 27, 2008

The advantages of engineering schools

I got email from the University’s alumni office just now, inviting me to a seminar titled “Networking for Introverts: why does it have to be so hard?”

This is not a seminar I would expect from the College, and I have to wonder if the presence of engineering programs at the University accounts for that difference. (More likely it’s simply the size difference between the two institutions.)

I also have to wonder about the potential attendance at a seminar expressly targeted at people who “avoid networking events so [we] won’t have to talk to strangers.” Isn’t that like trying to start a procrastinator’s meeting on time?

Posted by pjm at 1:57 PM | Comments (0)

May 11, 2008

Well, that explains a lot

My Google traffic

Remember how I was complaining about all the ringtone spam which appeared to be pointed at this site, apparently causing me to drop in the search rankings? I was puzzled, at the time, by the inbound links; why would anyone link to this domain for spammy content which wasn’t here?

This afternoon, while I was backing up the site in preparation for a server move, I found four different locations on the site where loads of files had been hidden, most of them set up to look like a big blog about… ringtones. Or some other thing people spam for a lot. The files were mostly datestamped around January or February of this year. Some of them were hidden in directories named with a leading dot, which made them invisible in listings unless they were specifically requested; others were simply stuffed in with valid files. It looks like there was something to that ringtone stuff after all.

It could’ve been a lot worse; because of the placement of most of the files, they were not listed in my XML sitemap, nor were they in frequently-updated directories.

I’ve deleted the files, and as I was moving the site anyway, most of the passwords will become invalid soon. I simply accelerated my move process. But it’s not at all clear to me how the files got there.

Or, for that matter, if I’ll be able to convince Google that I’m not a spammer. Any more, anyway.

Posted by pjm at 3:23 PM | Comments (0)

May 9, 2008

You really do have to be able to spell

We’ve been watching the classified ads for office space in the area. You seldom see a listing with all the useful information (e.g. it will mention the location and price but not square footage) and we wind up sending a lot of email to filter out stuff that isn’t useful to us.

The other day we heard from one potential landlord that the space advertised was part of a “three-office suit.” Since then I have decided that the spare bedroom I split with A as an office must be a “one-office suit.” And I wonder, is a three-office suit an office drone who has multiple workplaces?

Now Playing: Helpless by Electric Light Orchestra

Technorati Tags: , ,

Posted by pjm at 1:21 PM | Comments (0)

April 30, 2008

I hate Windows

You already knew that, but I want to vent.

I want to run a perl script on a server once an hour, all the time. On a Linux (or, for that matter, Mac) server, I could just set up cron to run the script hourly, or every third minute, or every seventh minute if I cared that much. (Anyone without the know-how to manage cron wouldn’t have written a perl script which needs hourly running.)

On a Windows server, the most reliable way to do this is using Windows’ built-in Scheduled Tasks. Scheduled Tasks can only run once a day, so I have to set up twenty-four identical Tasks, one for each hour. Tedious, particularly since they can’t be cut-and-pasted and must be created by Wizard, but not such a big deal. I need to provide the Administrator password (twice) to set up the task. And then, since I need to open the Advanced Properties in order to give a command-line argument to the script, I need to provide the Administrator password two more times, making a total of four for every task and a grand total of ninety-six password entries.

Honestly, I’d rather read cron manual pages.

Update: Right, so after I make all 24 tasks, I discover that in the Advanced Properties section of each job, the job can be scheduled to repeat at intervals. So we only need one job, but the wizard is worthless and I still hate Windows.

Now Playing: My Love by Auktyon

Technorati Tags: , ,

Posted by pjm at 2:36 PM | Comments (1)

"A screen that ships without a mouse ships broken"

Jeremy Zawodny links to a Web 2.0 conference presentation by Clay Shirky about what Shirky calls “the cognitive surplus.” It can largely be boiled down to this: that whenever anyone asks, about the massive user-driven online projects (e.g. Wikipedia), “Where do they find the time for all this?” the answer is, generally, “They watch less television.”

Or at least, they see television differently than they used to. (See the title quote, a summary of how at least one anecdotal four-year-old views television.) I seldom, if ever, watch television; I try to keep this to myself, because it’s the sort of statement that makes people accuse you of trying to be superior (or simply acting smug.) I know people who do, but only in the context of other activities, not in the old context of simply sitting and watching. I can’t promise that I’m always doing interesting things with this extra time, though seven or eight hours of running every week may be part of it.

The difference, Shirky explains, is that we’re no longer afraid of what to do with our brain when we’re not working, and we don’t feel the need to hide in passive entertainment. We’re increasingly able to choose how we use that “cognitive surplus”, and when a project like Wikipedia can get a few billion of those brain-hours, it can do impressive (if not necessarily always accurate) things. It’s an interesting theory, and one that may not be provable, but if he’s right, the TV people had better be looking around to figure out where they fit in to this new world.

But don’t take my word for it; take Shirky’s.

Now Playing: The Obscenity Prayer by Rodney Crowell

Technorati Tags: , ,

Posted by pjm at 1:37 PM | Comments (0)

April 9, 2008

What I did with my day other than writing anything here

I merged a branch in and pushed a big revision to the La Cucina Italiana website. There are now recipes available—by which I mean, about 1% of all the recipes they have available, but that’s just the start, of course.

If you’re interested in reading me geek out for a few hundred words about asset hosts and revision control, that’s possible, too.

Now Playing: The Reasons from Reconstruction Site by The Weakerthans

Technorati Tags: , , , , , ,

Posted by pjm at 9:00 PM | Comments (0)

March 31, 2008

Tax preparation software still stinks

They say one of the definitions of insanity is repeating the same process and expecting different results. Clearly I need to abandon the idea of doing my own taxes using software, and start paying a professional, because while the software is slightly cheaper, it tends to raise my blood pressure.

After last year’s mess with H&R Block’s TaxCut, I went back to Intuit’s TurboTax this year. The TurboTax name is applied to both an online service and a desktop program. I got a CD for the desktop program in the mail (unsolicited; Intuit is apparently the new AOL), and the process works like this: you install the software, plug in all your data, and then you buy a license before you can print or e-file. This is either brilliant (users’ data is already captive in the program, and they’ve invested several hours in Intuit’s software) or a really bad idea (when we call to “buy” the software, we’re already angry about our taxes.)

We’ll leave aside the mess which is my taxes (getting a significant chunk of income from an organization based in Monaco does not do wonders for your return) and get right to this “purchase” process.

There is no online option. You call a 1-800 number, beep through an automatic tree, state your name, key in your credit card number, and get a sixteen-character confirmation code. You’re also told to use the last four digits of your card number as a verification number, so presumably part of this confirmation code is a hash of the credit card number.

I had to re-play the confirmation number four times, and still was unsure about one character. (Was that a “B”, a “C”, or a “D”? Or an “E”? Or even a 3?) I figured the margin of options was small enough that I could brute-force it. Then I hit the next snag, which was this verification number.

Despite the instructions on the phone, the software says, “Enter 1234 for your verification code here.” Needless to say, this engenders some confusion.

So, after six or eight failed attempts to plug in this ridiculous code, I sent an email to Intuit’s customer support website, and was promised a response within 24 hours.

Well, I got a response within twelve hours, but apparently Intuit needs to outsource their customer service to a higher-quality firm, because the response not only fails to be helpful, it is so replete with non sequiturs and grammatical problems that it actually makes no sense. Don’t believe me? Here’s the full text, with only my identifying details redacted:

Thank you for contacting TurboTax Customer Service & Support.

I do understand that you were unable to successfully enter the provided confirmation code in the program.

Going back to your concern [name], It’s my pleasure to help you on this matter. Actually, you can still use your Turbotax Deluxe 2007 on your Mac Computer without putting some information or register from the CD. You can just pass that particular interview screen.

However, If you still want to register or put information, you can just Uninstall and Reinstall the program.

Take note: If you’re going to uninstall your Turbotax program on your computer, please save and back-up your tax data file.

Title: Back Up Your Return (Mac)

To better assist you, kindly dont hesitate call our GS ( Getting Started ) Department:1-888 777-3103 from 8 am to 5 pm Pacific Time, Monday through Friday and you will be answered by our helpful and friendly Technical Support Representative.

I am glad to have assisted you today. You may receive a survey from us through e-mail in approximately 24 hours asking you about my performance on today’s contact, as well as comments you may have in regards to the TurboTax product. So we can continue with our promise to provide our customers with the best support available, please take a few minutes to complete the survey.

Have a great day ahead

  • Is it me, or is the second paragraph suggesting that I can simply bypass registration?

  • Can someone explain to me how reinstalling the software is going to help when I apparently have either a broken confirmation code or broken confirmation-code-verifying code?

  • Anyone who wishes to diagram the sentence beginning, “To better assist you…” is welcome to try. I think the results may be hallucinogenic.

  • I must say I am eagerly looking forward to this “survey through email.” I will do more than take a few minutes to complete it; I will lovingly detail all the specific aspects on which Intuit has simply failed to provide either a product which works as designed, or any useful support for this product.

If I could be certain my credit card hasn’t been charged, I would re-start my return tonight with TaxCut. I’d also like to repeat my plea from last year: can’t someone please make tax preparation software that doesn’t suck?

Update: A phone call to the number above resolved the problem; despite the “Pacific Time” red herring, the call center reached is almost certainly not in Pacific Time. The system did not recognize the case number assigned in my email, and there was a great deal of confusion surrounding the last time I allowed myself to be stripped of $50 by these charlatans, which was when I did my 2005 taxes. However, I can print my returns now.

Now Playing: Country Sad Ballad Man from Blur by Blur

Technorati Tags: , , , , , , , ,

Posted by pjm at 11:54 AM | Comments (2)

March 28, 2008

I like good grades

After I spent a chunk of yesterday figuring out how to make some work sites load significantly faster (think “twice as fast”) without a few little configuration changes, I thought I should apply the same process here. I ran YSlow on this site, and started with a grade of 68, a D. Unacceptable.

Unfortunately, since I don’t own the server this site runs on (yet) I don’t have total control over its configuration. For example, I can’t figure out how to ensure that the site stylesheet (all 2KB of it) get compressed before it’s sent to your browser. (This would be worth doing because the time it takes to Gzip a CSS file is more than reclaimed in the time saved downloading a notably smaller file.) However, I was able to add these three lines to the configuration:

FileETag none    

ExpiresActive On    
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 year"

This means that the two files you do download along with the front page (the stylesheet and the image) will stay in your browser cache as long as you let them, or one year, whichever is shorter, which means you won’t need to request them every time you visit this page. Not a big deal for one visit, but over time, it adds up. And you’re coming back, right?

What really got me was a number of little JavaScript inclusions I added years ago in the name of boosting traffic, such as a Technorati widget which, on closer examination, I discovered isn’t even current. Dropping those took a number of relatively slow-loading scripts off the download list for the front page.

The result of this is that, even though fewer people are coming here, the pages will load more quickly for those who still are. And, probably more important to me, my grade is now an A (94). Which we all know stands for Acceptable.

Now Playing: Merry-Go-Round from All Shook Down by The Replacements

Technorati Tags: , , , , ,

Posted by pjm at 9:15 PM | Comments (0)

March 24, 2008

It compiles if you hold your mouth right

Due largely to this post, I’ve spent some off-and-on time over the last eight weeks trying to make a particular obstinate Ruby library compile and install on my Mac. (Remember my adventures in Fortran?) Tonight I finally managed it, though I did wind up performing the software installation equivalent of getting in under the hood and banging around with a hammer.

I think the reason I finally succeeded tonight was that last night I gave up, opened an Ubuntu virtual machine in Parallels, and installed Ruby, Rails, the relevant library, and a working copy of my application there, resigned to doing all my developing and testing in a virtual machine.

Now I need to confront my deficient understanding of linear algebra.

Now Playing: Aside from Left and Leaving by The Weakerthans

Technorati Tags: , , ,

Posted by pjm at 10:06 PM | Comments (0)

March 22, 2008

Where fine cooking and heavy metal collide

For this project, we had to ensure that certain functions work properly with the accented letters which crop up relatively often in Italian (as opposed to English, which operates on the philosophy that if you don’t already know how to pronounce the vowel in a word, you must be a foreigner anyway and should be forced to guess as a comedy performance. Written Russian addresses the problem by providing ten glyphs for vowels, but sometimes requires accent marks anyway).

The solution I came up with involved this policy: test cases must include röckdöts.

Technorati Tags: , ,

Posted by pjm at 12:54 PM | Comments (0)

March 19, 2008

It works on so many levels

As I watched the compiler working on the last software upgrade, I saw this go scrolling by on the terminal window:

compiling curses

I know what that really does, of course, but imagine the other interpretations!

Now Playing: People Of The Underground from Float Away With The Friday Night Gods by Marah

Technorati Tags:

Posted by pjm at 10:38 AM | Comments (0)

February 23, 2008

Function poker

I found myself in a card game with some friends last night, and pretty early in the game I realized that I was finding “runs” in the cards which simply weren’t playable by normal rules. Most games only recognize runs where the run follows the function ƒ=1n, like 3-4-5. To me, holding 3-6-9 in any suit seems like it should count as a run as well, where ƒ=3n. Other functions would allow somewhat more esoteric runs (2-4-8 counts for ƒ=2n, for example, or a Fibonacci run could include 1-2-3, 2-3-5, 3-5-8, etc.) Maybe a specially-designated “wild” card could be the λ card which would allow one to use functions for runs? Now that would be a card game for geeks.

Posted by pjm at 8:35 AM | Comments (2)

February 14, 2008

More specifics about the good news

If you look at the domain at at the time I’m posting this, you’ll get redirected to a page on, the pages of Italy’s oldest and most successful cooking magazine. If you look at them sometime in the afternoon of Friday, February 15th (“tomorrow” as I’m writing this) you should see the first stage of the site we’re building for their U.S. edition at work. (This is the “big, new job” I mentioned a few weeks ago.)

Monday we’ll start in on Phase Two. Phase One would’ve been much easier if we hadn’t spent quite so much time building foundation for Phase Two, but Phase Two is where we go from “just above the minimum you’d expect from a magazine’s website” to “hey, this is pretty cool,” so there’s plenty to do before our next big deadline.

Posted by pjm at 9:43 PM | Comments (1)

February 10, 2008


I am giving some thought to the possibility that I simply reversed the wires on the battery connector for the Fuzz Face. While the wires on the other two pedals were red (positive) and black (negative), just like the battery connector, the wires on the Fuzz Face were black and white. I assumed that black was still negative and white was positive, but maybe not?

The problem now is, both my amp and my guitar have such finicky connectors that I was unable to get a note from the amp tonight, even without the Fuzz Face in the loop, so I haven’t been able to test. I’m tempted to use some 1/4” female to 1/8” male connectors (and a male-to-female adapter) to splice the pedal in between my MacBook and my computer speakers, because I know those work.

I’ve also started trying to map out the wiring schematic of the thing, just to figure out where to put the multi-meter to check connections.

Technorati Tags: , ,

Posted by pjm at 9:09 PM | Comments (0)

Surprised there are so few

So this photo is the only one on all of Flickr with the tag “thisonegoesto11”. I only found three more (all much less appropriate to the tag, in my opinion) by changing the digits to a word.

Technorati Tags: , , , , ,

Posted by pjm at 11:10 AM | Comments (0)

February 2, 2008

Safer strategy: don't mention COBOL

My databases professor would frequently mention “the C word,” by which he meant COBOL. (“The F word,” of course, was FORTRAN.) I was thinking of this last night while wondering why a local company would be hiring a COBOL programmer. (The most probable answer, as it always is for COBOL, is support and maintenance of legacy green-screen applications in the finance and supply-chain-logistics areas. And the link was sent to me; I don’t make a habit of browsing the help-wanted ads.)

That led me to trying to remember when certain advances in computer technology actually happened. It’s sobering to realize I couldn’t always sit at a laptop at the kitchen table and tap out obscure rants to be stored on a server in Los Angeles via my own personal wireless network.

I first encountered Windows (3.1) on business desktops in high school, sometimes. It wasn’t until I was nearly out of college that Windows became something more than a program that ran on top of a command-line machine; I had classmates who went straight through college with entirely text-based computer experiences. (I was a Mac person from the beginning, of course, but being able to color-code folder icons was considered a marketable feature in graphic user interfaces then.)

This led me to how long green-screen applications have hung on. I was using one as late as summer 1992 at my summer job, and I know that application survived at least a year or two more. (The business stopped operating before the software did.) So, “only” fifteen years ago, or so, and GUIs didn’t take over many other applications until much later. We used dumb terminals connected to a DEC tower in a closed room elsewhere in the building. I’m pretty sure it ran ULTRIX; Linux, at the time, was the late-evening project of a Helsinki CS student, if that. I doubt anyone actually spent significant time in the ULTRIX shell, though, other than the one or two times I went browsing around to see if I could find anything I recognized.

I did discover vi but not emacs (which was a problem for me then, as I only learned to limp along in vi many years later). vi, with its smaller footprint, made more sense than the sprawling emacs (which, famously, even includes a therapist: M-x doctor) when disk space was at a premium.

Which brings me to the inevitable and tiresome conclusion: I have a USB flash drive, not even a very large flash drive, with as much disk space as the computer I graduated from college with. I burned that HDD onto a single CD-ROM when I retired the drive. You can put the entire filesystem of what we used to consider a mainframe on a pocket drive. Why decide between emacs and vi (or, for that matter, ed or nano or TextWrangler or TextMate or Eclipse or carefully calibrated butterflies which are built into emacs anyway) when you can have them all?

And the only thing I can come up with is, maybe it’s better if I just don’t think about COBOL. I have to compile a library which appears to be principally FORTRAN, though (actual entry in the documentation table of contents: “Contents of the tape”), so I can’t forget about that just yet.

Now Playing: Starry Eyes from Mutiny by Too Much Joy

Technorati Tags: , , , , , ,

Posted by pjm at 8:51 AM | Comments (0)

January 11, 2008

Died in a blogging accident

This research, while fascinating, seems like it would become invalid at the first derivative. I immediately wondered what the result for “elevator surfing” would be…

(As usual with XKCD, make sure you mouse over to read the “alt” text. And it appears that “I haven’t died in a knitting accident” has already become the hip shorthand for “sorry I haven’t written”.)

Now Playing: Wilderness from Angels of Destruction! by Marah

Posted by pjm at 9:15 AM | Comments (4)

January 8, 2008

The thirst for meaningless statistics

As of this writing, Common Running has 98 reviews distributed among some 400+ shoe models. If you’re like me, the very way I phrased that sentence led you to ask, “But how are they distributed?” They can’t possibly be random, right?

Noah borrows a phrase from Wired to describe the impulse to ask that question: Info Porn. We’re not immune, so I spent a few hours last night writing some code to rip the interesting data out of the CR database and slap it in to some Google Charts. The juicy stuff is here, but if you want the summary, Asics is the most-reviewed brand, and it has three of the top four most-reviewed shoe models, including #1, the GT-2120.

I also added some data to the pages which show details on the shoe models themselves. If you check that GT-2120 page, for example, you’ll see the average ratings for each of four areas, and the comments the reviewers made about the shoe.

You’ll also see a quirky little paragraph on some shoe pages which purports to give an average lifetime (in miles or kilometers) for a shoe model. It’s based on numbers reported by some of our reviewers, and I actually went a step beyond that to calculate a “price per mile/km” for such shoes. These numbers are not, at this stage, statistically significant, because there’s just not enough data, but if they were—a few dozen more reviews for each model might do it—they could be a real tool indicating “value” in a pair of running shoes. Imagine if you could compare the price-per-mile of several similar models!

Now Playing: One Kiss Goodnight by Lori McKenna

Technorati Tags: , , ,

Posted by pjm at 9:53 PM | Comments (0)

December 19, 2007

Backup policy

When you do systems administration and are professionally paranoid, you think a lot about backup policies. In particular, you think about off-site backups. What’s the point of having a copy of something, for example, if you’re storing it in the same place as the original? If you’re backing up your financial data, and the house burns down with both original and backup, what was the point?*

This explains why my department head from my pre-grad-school job sent me email today asking whether the safe deposit box key they found in a drawer in my old office was mine. It also leads us to a corollary to the off-site-backups policy: remember where you stored the backup.

* Of course, there is a point to keeping backups close by, and that’s that off-site backups are inconvenient for restoring files. Most professional paranoids advise a borderline-obsessive-compulsive regimen which involves frequent (e.g. daily) backups stored on-site, with less frequent (e.g. weekly) backups stored off-site, thus avoiding the convenience-vs.-safety conflict with overkill, attempting to both have the backup cake and eat it too.

Now Playing: Pieces of the Sun from Pieces of the Sun by Test Your Reflex

Technorati Tags: , ,

Posted by pjm at 10:52 PM | Comments (0)

December 13, 2007

Unanswerable questions

I’d love to know why I’m getting (on average) two visits a day to this site, over the last week, referred by the search string chain grease.

Sure, I’ve mentioned bike chain lubrication a few times (including alternate uses for the gunk, which seems to be when this all started) but why restrict the search to this site?

Now Playing: Saint Simon from Chutes Too Narrow by The Shins

Technorati Tags: ,

Posted by pjm at 8:55 AM | Comments (0)

December 10, 2007

You are only as good as your tests

I’ve been getting the testing religion. This is one of those things where serious software engineers respond with something along the lines of, “You mean you’re only now discovering testing?!?” and everyone else says, “Huh?”

I’m not going to try to explain testing in detail, but the rough outline is that a testing infrastructure allows you to define a set of acceptable output parameters from a program, then run the test against the program every time you change it. This provides you with some warning if an “improvement” you made turns out to break the program. It’s a great tool for making more-reliable software, and there are some people who actually practice “test-driven development,” where the tests are written first, and then the programs created specifically to pass the tests.

There are drawbacks, of course. One is that you can spend as much time writing tests as writing “real” software. (The counter-argument is that you supposedly spend much less time bug-fixing or otherwise re-writing.) The one I’ve run up against lately is that the tests really do have to define the most-important facets of the tested program. At one point last week, I wrote a test, then wrote a stub method which passed the test but didn’t actually do any work.

Noah suggested that we really needed a t-shirt which reads, “You are only as good as your tests.” We went looking—surely on the whole vast ‘net such a thing is for sale—but according to Google, there’s only one other document with that exact phrase, and it’s a PDF. Clearly we need to create such a thing and offer it in the company store. If we had a company store.

Now Playing: Jimmy Olsen’s Blues from Pocket Full of Kryptonite by Spin Doctors

Technorati Tags: , ,

Posted by pjm at 9:14 AM | Comments (0)

December 6, 2007

Simple and useful

A few weeks ago, looking for some kind of technical issue, I stumbled across a site called My Mile Marker (or “M3” as the production team calls it.) It’s a very simple database application: you register a vehicle (no details needed, just a label that makes sense to you) and whenever you put gas in, you record the car’s current odometer reading, how many gallons you put in, and the per-gallon price you paid.

The output is a set of simple numbers: your average miles-per-gallon since you started using the site, your projected odometer reading in a year, and your projected gasoline expenses over the next year. There are also a set of simple graphs tracking your MPG over time (plotting the MPG for each fill-up, I assume) and your odometer readings. (This second graph would be more useful as a first derivative, I think: the slope of the line, i.e. miles-per-day, is more interesting than the absolute number.)

It’s very simple math, of course, and nothing you couldn’t build in an hour or less of bored-in-the-office time if you have decent Excel skills. But you don’t have to; it’s been done for you, now. The trick is that it’s simple (all I do is get a receipt when I fill up, and write the odometer reading on the back of the receipt; all the data is then on one slip of paper for later entry) and that it becomes a small, slowly-played game: can I run up my MPG? Can I trim that annual cost? I can look at the graph and see what makes the difference: more highway driving (i.e. trips to Amherst) than in-town, short-haul driving means better mileage on a tank. More city stoplights and traffic means worse mileage. Back on the bike, you slacker!

Now Playing: Something in the Way by Nicolai Dunger

Technorati Tags: , , ,

Posted by pjm at 10:19 AM | Comments (0)

November 24, 2007

Some things can be fixed

Unlike my first iPod, the squeak in the bathroom door at the Amherst house can, in fact, be fixed.

I wouldn’t ordinarily be too disturbed by a squeaky door, but this one shrieked, and every time I closed or opened the door in the middle of the night I was sure I was waking up the whole house. My first instinct was to find a bottle of WD-40 and give the hinge a squirt, but fortunately there wasn’t one handy, and I had to do some research instead.

The best instructions I found pointed out that WD-40 isn’t much use as a lubricant (though it’s a great solvent for cleaning the hinges) and that my second guess, graphite powder (I didn’t have any of that handy, either) was likely to be a big mess.

Getting the pin out wasn’t too hard, but it was pretty grimy. I levered it out with a screwdriver to start, but I needed to tap the screwdriver pretty hard once or twice to get it un-jammed. Once it was out, I wiped it down first and then went at it with a small piece of sandpaper until it was pretty bright.

I could’ve used bike chain grease to re-lubricate the pin if mine wasn’t with my bike (which is to say, at the other end of the state) but I did have handy option #2, petroleum jelly, which I often use to keep the sockets on my spikes loose. I applied a liberal coat to the pin, dropped it back in the hinge, and sure enough: it now swings quietly.

Now Playing: Keeps My Body Warm from Strangest Places by Abra Moore

Technorati Tags: , , ,

Posted by pjm at 3:26 PM | Comments (0)

The iPod that couldn't be fixed

I haven’t written for a long time about the saga of my oldest iPod, the 1st gen 5GB model with the wonky Firewire jack. I still get some traffic from my posts about my failed attempts, three years ago, to re-solder the jack myself; eventually, even my brother, who had some specialized equipment available, was unable to get the thing to mount (though it will charge.) I have it in a static-free plastic bag in a drawer somewhere; it may or may not be in pieces.

Today I read a NYT article about a Denver company,, which will actually buy old, non-working iPods, rehab them, and re-sell them. I went through the menus and got an estimate of $6.40 for my iPod, which I suspect reflects the desirability of the model itself (five years old, heavy, not much more storage than a new, $150 iPod nano) more than the difficulty of fixing it. I may send it in anyway; I like the idea of having it off my hands but not in a landfill, and getting some lunch money for it is better than paying for the component recycling.

(I’m not in the market for a new iPod, either; my current one, almost three years old and slightly clunky-looking now, still works just fine for what I ask of it.)

They say they’ll be taking old cell phones soon, though I’ve not had much difficulty with those; I usually keep one previous phone as a backup in case of failure (I just swap the SIM card back, and I’m in business,) and the phone companies often give a trade-in rebate for old phones when we upgrade. I wonder how many other good businesses are stowed with obsolete gizmos in other people’s desk drawers?

Now Playing: Stand from Green by R.E.M.

Technorati Tags: , , , ,

Posted by pjm at 9:58 AM | Comments (0)

November 2, 2007


Sometime in the last week, Gmail stopped picking up any email sent to my various addresses at this domain. If you’ve emailed me here, and I haven’t responded, that’s why.

(This is also why I wasn’t a respondent to this survey.)

Now Playing: Everything Must Go from Left and Leaving by The Weakerthans

Technorati Tags:

Posted by pjm at 10:36 AM | Comments (0)

October 15, 2007

Watch what you say

I hadn’t given much thought to it until this weekend, but one of the consequences of taking this assignment—aside from the potential asthmatic effects I’ve been warned about—is that I’ll be behind the “Great Firewall of China”.

Given that I have a pretty narrow focus on what’s happening at the track, I can’t imagine myself sparking any political clashes with the Chinese government. If I can make it eight weeks in post-Soviet Russia without sparking an international incident, I can probably manage ten days in China, despite the doom and gloom in this New Zealand Press article Nicole links. But part of the nature of my job is to get stuff online in a hurry, and bitter experience in that area suggests to me that that can be hard enough in allegedly-less-authoritarian countries, simply due to technological challenges. What kind of logjam might be created by an artificially-imposed internet bottleneck?

Maybe not IAAF stuff, but how about posting photos on Flickr? Trying to get a secure (i.e. encrypted) email connection?

Heck, shelling in to a work server? Running an impromptu wireless network in my room? All relatively unthreatening things on the face of them (though an SSH connection can be used with port forwarding to bypass a firewall, and who knows what an unsecured network could be used for.) I doubt any of these things would be significant problems, but I wish I knew more.

Technorati Tags: , , , ,

Posted by pjm at 9:26 PM | Comments (1)

October 5, 2007

Pipes are cool

I’m late to the party on this one, I suppose, but I recently discovered the coolness which is Yahoo! Pipes, and I feel the deep, geeky need to share.

I’ve read about Pipes for months (I even hinted about building one here) but I really only came to find them—and see how easy they are to use—a week or so ago. I’d been putting together a bunch of feeds for Common Kitchen, and the nature of their creation meant I had a feed which had cookbook objects, a feed with recipe objects, etc., but it was very difficult to create a feed with different kinds of object. So, in order to put together a “unified feed” with everything that’s new on Common Kitchen—a concatenation of the existing feeds—I turned to Pipes.

Pipes let me take the five or six feeds of interest, slurp them all into one big blob, sort it by date, then truncate the result to a reasonable length. Presto: a unified feed.

Intrigued, I built a similar pipe which combines most of the feeds linked from this weblog: the main site feed, the comments feed, my Flickr photostream, and my bookmarks feed. One feed to rule them all, one feed to bind them…

But Pipes are good for more than just combining feeds. Say you’ve had enough of reading my ramblings on technology that’s so last month (or, what’s a feed, again?) or folk singers with horn sections, and you just want to read what I have to say about running. I wouldn’t endorse such monomania myself, but it would be pretty simple to create a pipe which filters out all but the “running” category.

Why “pipes”? Because in the Unix world, the “pipe” character—the vertical bar you get from shift-\ on your keyboard—tells the operating system to take the output of one command and “pipe” it into the input of the next. By chaining a series of simple commands with pipes, you can build complex and powerful operations. That’s what Pipes is doing: allowing several simple operations on data to be chained into a powerful system.

(Tell me again: what’s a feed and why should you care?)

Now Playing: Fighting In A Sack from Chutes Too Narrow by The Shins

Technorati Tags: , , ,

Posted by pjm at 9:43 PM | Comments (0)

September 12, 2007

How do we use this stuff?

If you know much about Ethiopia beyond the names of its champion distance runners, you may have run across teff. Teff is the staple grain of Ethiopia and Eritrea, and companies growing and selling teff in the U.S. actually sponsored some Ethiopian distance runner(s) in the late ’90s or early ’00s. Lately, it has seen some interest as a gluten-free flour, a possible substitute for people with gluten allergies.

We have two bags of teff grain in our cabinets, and we’ve had them for… well, several years. The problem is that it’s easy to use teff flour (just substitute it for wheat flour) but not so easy to use teff grain. So what do I do with two pounds of teff grain?

Well, as it happens, I can ask that question on Common Kitchen. We added a feature—well, actually, Noah added it while I was in Japan—which lets you ask for recipe recommendations. So I can ask for suggestions: anyone have a good recipe using teff grain (but not teff flour, which I have none of)?

Actually, I may answer my own question: all the teff recipes on the web may already be on the Teff Company site. Now, can someone tell me how to explain to the cat that dinner isn’t for another twenty minutes?

Now Playing: Hard Road by The Shore

Technorati Tags: , , , ,

Posted by pjm at 4:41 PM | Comments (0)

August 24, 2007

Two machines in one

The IAAF’s system for publishing their site is built using ASP and turns out to require Internet Explorer on a Windows machine. The media office shrugged its shoulders and set about finding Windows laptops for me and the other reporter working on their team who uses a Mac, but then I stopped them. “Wait,” I said, “I have Windows here too.”

So I fired up Parallels Desktop, opened Internet Exploder Explorer, and opened up their CMA. They were quite impressed. But then… “Hey, can you do that for Matthew, too?”

Also, yesterday, when I was trying to get online here in the hotel room, I heard the Japanese word pasacon for the first time. I’ve seen it before; it’s a contraction of “Personal Computer.” The clerk was asking if I had the computer in my room. I should’ve said, “Of course, I’m a pasacon otaku.

Technorati Tags: , ,

Posted by pjm at 7:07 AM | Comments (0)

August 17, 2007

Wireless security note

In general, using the name of the network as the network password is not terribly secure.

Posted by pjm at 3:42 PM | Comments (0)

July 27, 2007

Using one key for a lot of servers

If you’re at all like me (let’s hope not) you have too many passwords to cope with. I can’t help with websites, but I don’t think there’s been a time in the past five years when I haven’t had at least two different servers to log in to, sometimes more like four or five. There’s no way I’m going to remember all those passwords, and I don’t try. Instead, I put an RSA public key on each server, and keep the private key here on my Mac. When I ssh to those servers, I get prompted for the private key’s passphrase, then I’m logged in. Same “password” every time. When I get access to a new system (CS department servers, web servers for former places of work, research cluster, Common Kitchen web server or development server) the first thing I do is upload my public key. The second thing I do is stop trying to remember the password.

I realized that I’ve described this process to several other people now, (and even mentioned it here before) and haven’t bothered to save the writeup anywhere public, so here it is if it’s useful to you.

The command to generate a key pair (this is asymmetric encryption) is

$ ssh-keygen -t rsa

You’ll be prompted for a destination for the files (your ~/.ssh directory is best, since that’s where the ssh client will look for the private key) and a passphrase, which you’ll need to confirm. Then you’ll have two files, one with a .pub extension. (The default names are id_rsa and That’s the public key, which you’ll be uploading to any servers you wish to log in to.

(Note that you can create a passwordless login this way, if you’re confident enough about the security of your private key; it’s not advisable. I’ve used that, however, to allow scripts access to a remote server, e.g. with scp.)

Once you upload the public key to the target server, it should go in a directory named .ssh in your home directory, and be renamed authorized_keys (or appended to the existing authorized_keys file):

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ mv ~/.ssh/authorized_keys
# or $ cat >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

Now when you log in, it should prompt for a passphrase, not a password, and because the passphrase is associated with your private key, not your public key or even this account, it’s the same on all servers which have your public key in authorized_keys. I think this is really cool, but I suppose I’m a specialized case.

Now Playing: If I Wrote You from Out There Live by Dar Williams

Technorati Tags: , , , , , ,

Posted by pjm at 1:41 PM | Comments (1)

July 17, 2007


I just got a head-hunting email from a large Internet company looking for people with experience in systems administration and software engineering. This, in itself, is not too surprising. The fun part is that it was sent by a graduate of my College—ten years after me, natch—who found me through my Facebook profile.

Apparently he didn’t read the part about my current state of employment. (Though he did sort of hint that I should be handing this message on to other alumni I might know.)

Now Playing: Nietzche from Thirteen Tales From Urban Bohemia by The Dandy Warhols

Technorati Tags: , ,

Posted by pjm at 11:35 PM | Comments (0)

July 16, 2007

"Beta" launch

There’s a little bit more than a “coming soon” page at as of this afternoon.

Since the beginning of July, we’ve shifted the site to a new server and written the first chunk of what will eventually be the full site. Looking back on the code we’ve written—and debugging it—in its code this is very much a “second system,” a bit of a jumble of all the lessons we learned the first time around. We’re using the framework better now, but we’re not yet writing elegant software.

I don’t like talking up things we haven’t done yet, but I do think it’s worth mentioning that this is only the barest start of what we have in mind. We aren’t expecting anyone to be impressed just yet.

Now Playing: Van Nuys (es Very Nice) by Los Abandoned

Technorati Tags: , , ,

Posted by pjm at 11:16 PM | Comments (0)

July 11, 2007

Firebug and page layouts

Since the holiday weekend, the only thing that’s really going on around here is work. Common Kitchen is evolving like a weed in its Subversion repository, with 236 revisions as of right now and well over 200 tickets in Trac. We’ve become obsessive about closing tickets, and since we implemented Trac’s milestones feature, watching the roadmap.

Our decentralized working pattern means we don’t spend a whole lot of time looking at one screen and talking about how things look, and there are a lot of tickets saying things like, “That green went away? What happened?” Last night I spent 45 minutes tracking down a CSS bug, and part of that time was finding the right tools to diagnose the problem.

Let me save you some time. The tool is Firebug. Firebug is a plugin for Firefox which opens a bottom-of-the-browser window allowing you to browse page source (in the same sort of collapsible-tree format as Firefox’s DOM inspector), highlight portions of it, and see which CSS rules apply to that chunk of code, in order from strongest to most distant inheritance. In other words, it lets you back-track up the cascade. Rules which are overridden are shown, but struck out, so you can pick them out as well.

By showing me that some rules simply weren’t being applied, I was able to go back to the CSS validator to figure out what was buggy about my stylesheet, and solve the problem. And now that I know how to attack the problem, I find myself popping open Firebug all the time to check out why things are doing what they’re doing. It’s a neat idea, and a very helpful one.

Now Playing: Paralysed from Nowhere by Ride

Technorati Tags: , , , ,

Posted by pjm at 11:37 AM | Comments (0)

July 5, 2007

More proof that this is really happening

  • We did a slew of paperwork this afternoon, which did not catch us up (some early investors are owed stock certificates, for example) but did cover most of the desperately urgent stuff.

  • I am getting unsolicited postal mail at our incorporation address.

Within a week or two, I hope to be able to share some more proof that this is really happening with the rest of you.

Now Playing: Good Things from Back to Me by Kathleen Edwards

Technorati Tags: , , ,

Posted by pjm at 11:03 PM | Comments (0)

June 20, 2007


I know it’s commonplace now, but it’s still kind of cool to me that I can log in to the Mac Mini in my living room from a wireless network in Indianapolis.

Technorati Tags: , ,

Posted by pjm at 5:38 PM | Comments (0)

May 25, 2007

Everybody's got advice

That’s the problem with telling people you’re working on a start-up.

Of course, a large portion of this advice is in areas we’re legitimately concerned about, e.g. patents (necessary or not? Affordable or not?) or money (should be obvious.) But sometimes I feel like I’m being given a pop quiz. Which database are we going to use? What technology stack? Web server? There are a lot of IT geeks who want to know if we’re using their favorite technology mix (databases are a favorite holy war, but source code management packages are another area where this happens) and are perfectly happy to tsk tsk and shake their heads when they hear we’re not. Sometimes I can shrug it off, like when I know we have circumstances which dictate doing things our way and not theirs. Sometimes I have to wonder.

My impulse is to resist going into too much detail in this sort of situation, and avoid the discussion, but in a lot of cases it’s good for us to get the advice. It’s just so tough to know which advice is good.

Technorati Tags: , ,

Posted by pjm at 9:34 PM | Comments (0)

May 24, 2007

Code Monkey

I think have a new favorite song.

Technorati Tags: , , ,

Posted by pjm at 11:04 PM | Comments (2)

Milgram was right

On an online community centered around (but not limited to) alumni of my college, I ran across the author of an interface library I’m attempting to use for this project. Finding him out of context was a little disconcerting, but the more I think of it, not too surprising given the level of interconnectedness we reach now.

Now Playing: Dying For More from Be A Girl by The Wannadies

Technorati Tags: , ,

Posted by pjm at 9:51 PM | Comments (0)

May 22, 2007

Why you need a software engineer

I spent three hours this afternoon in the office of a professor from another department, along with that professor and a senior IT manager. I’d worked for the IT manager in my first campus job, where I did a fair amount of software configuration and installation, and he knew I was a Mac user.

The mission: build this bundle of quirks and source code on a Mac G5. If you can’t immediately figure out what it does, don’t worry; I can’t either. (I recognize several of the terms used in the description, but I can’t be certain I know what they mean.) Needless to say, it is unique on the face of the planet, so far as we can tell, and based on several comments both on the main software page and in the documentation included in the package I suspect the author scores a few points higher on the crackpot index than the average faculty member. (Probably less than a standard deviation from the mean, though.)

Unfortunately, this groundbreaking and interesting piece of software suffers from some crippling flaws. I’ll quote from the installation documentation, emphasis added:

Qubiter 1.1 was written using CodeWarrior (CW) for the Mac. CW is a C++ Integrated Development Environment produced by MetroWerks Inc. CW is available for the Mac, Win95/NT and some Unix flavors. Since Qubiter 1.1 is pure C++, you don’t need CW: you can run Qubiter on any platform for which you have a C++ compiler. However, if you don’t use CW, you will have to write your own makefile. I’ve used CW Pro 2, with the “Old ANSI Libraries”. If you want to use the MSL libraries or a more recent version of CW, you’ll have to convert the project yourself.

This probably made some sense six or seven years ago, when it was written, but it’s 2007 now. Let’s tally up the problems here:

  • Whatever version of CodeWarrior was used, it’s now long past End Of Life. Our version of CW insisted on “updating” the project file, in the process scrambling it.
  • “You’ll have to convert the project yourself,” when it comes to software, translates directly to, “Despite being publicly available, this software is unusable.” (Or, more kindly but more specific, “It works for me and I haven’t tried any other way.”)
  • “You will have to write your own makefile.” This is one of the most ridiculous phrases I’ve ever seen regarding software installation. This is like saying, “We’re having pizza for dinner, but if you’d like some, you’ll have to write your own recipe.” Without knowing how the package is supposed to be built, how on earth are we supposed to figure out how to write the makefile? We have a pile of source files, in some vague organization, but having a list of ingredients is not the same as knowing how to cook.

We did some searching to try to find documentation from others, but all we found was a mailing-list post from someone else reporting exactly the same errors we had, and complaining that the author had not responded to requests for assistance.

This is not a viable software package. This is a bizarre sort of vaporware, and although the author is a better C++ coder than I’ll ever be, he’s written a lousy program, because he didn’t take any of the steps needed to make it usable to anyone else. The code is essentially undocumented, unbuildable, and has crippling dependencies. Fix those things, and it might be interesting.

Now Playing: The Way the Light Falls from Devil Hopping by Inspiral Carpets

Technorati Tags: , ,

Posted by pjm at 9:15 PM | Comments (0)

May 16, 2007


There is a bug in Eclipse, apparently, that keeps it from properly compiling and running Swing-type Java apps on Intel Macs.

Instead, I am running Eclipse on WinXP, in Parallels (virtual machine software for Mac OS), in “coherence” mode (which means the Windows windows share space with the Mac OS windows, to grossly oversimplify things.) It’s a close second best… but whatever part of my subconscious is synched to operating system user-interfaces is context-switching so much I feel like my whole brain is slowing down. It’s also bizarre to see the (maximized) Eclipse switch to screen-saver in the background while I’m working in a MacOS app in the foreground.

Now Playing: Only Now from Carnival Of Light by Ride

Technorati Tags: , ,

Posted by pjm at 10:26 PM | Comments (0)

May 15, 2007

Stop me before this continues

The source is the source, of course, of course
and no one can code without source…

Posted by pjm at 3:47 PM | Comments (2)

May 9, 2007

Working in translation

I think the reason I have put this project off as long as I have is that I am not comfortable working in Java.

One of the things I’ve learned from TAing the Programming Languages course this semester is how some languages require the user to think in a particular way. Prolog is perhaps the best example of this; students are used to thinking of functions as something which does something, and Prolog rules don’t really do anything. To write good Prolog, we needed to shift to thinking about conditions—X is true under the following conditions—rather than actions.

Java is not quite as dramatic as Prolog, but it does require the programmer to rearrange the way they think about the problem. I’ve spent more time in languages like PHP, or even C, where once I’d conceived of a means to solve the problem, the translation into code was fairly straightforward. Java’s object-orientedness forces the code into an organization I might not otherwise have used; beyond that, it makes it harder for me to read others’ code and make sense of how to use it. There have been times when the way I conceived of a problem made it easy to code up in Java, but not many of them.

This is not (necessarily) a shortcoming in a language. But it does mean I’d avoid Java in most cases. Maybe if I’d been taught Java in intro CS, the way the Shipwright was (in my day, it was taught in Pascal), I would think differently.

Now Playing: Everything’s Not Lost from Parachutes by Coldplay

Technorati Tags: , ,

Posted by pjm at 2:02 PM | Comments (0)

May 8, 2007

Name that network

Anyone who has gone war-driving, or searched for free wireless from odd places, knows that the best suspects are networks named “linksys” or “NETGEAR”, either of which suggest network hubs running the (insecure) default settings.

We’ve never had a default network name. Our first wireless network was given the name previously applied to the building our apartment was in: Hawley Middle School. When the owners opted to do a condo conversion, I renamed the network “Hawley Exiles”, and kept that name through the move to Amherst and now out here in Medford.

In Medford, we’re in a denser neighborhood than I’ve ever lived in before, and there are a lot of other wireless networks in the menu when I look around. “linksys” and “Belkin54g” are out there, of course, but when we’re all overlapping, people start paying attention to which network is theirs. Most of the networks require passwords. (I described our access control scheme some weeks ago.) There are some uninspired names (“Jane’s Wireless”) but some which must be unique to this area—“best internet evah”, for example, and “Red_Sox_Nation”.

I finally got a new base station, which supports both a password/encryption protocol we can all use, and allows me to add USB disk drives to the network as well. For the time being, while I break it in, we have two wireless networks, so I couldn’t use the same network name. Perhaps influenced by the fact that I’ve had mail solicitations from both Alley Cat Allies and Alley Cat Rescue in the past few weeks, I opted for “Brown Tiger Support Network”.

None of this, however, excuses the fact that I had a shiny new wireless base station in the apartment, still shrink-wrapped, for over a week before I got around to installing it. You’d think I was ill, or something.

Now Playing: Battle of Who Could Care Less from Whatever & Ever Amen by Ben Folds Five

Technorati Tags: , ,

Posted by pjm at 10:01 PM | Comments (0)

May 3, 2007

Pocket power

Two evenings ago, I sat down with a soldering iron and made one of these. If it’s not immediately clear what this is, it’s a tiny circuit which allows you to hook two AA batteries to a USB jack and thereby charge anything which can be charged that way—most iPods, for example, but also, as it happens, my new phone. The whole thing fits in the tin from Altoids gum.

I’m interested in this because it may allow me to reduce the number of wall-wart chargers I take with me when I travel. AA batteries are almost as easy to find as cigarettes, at home and abroad, and they aren’t subject to unusual voltage or AC issues. Based on a post Steve Frank made last week, I’m wondering if my phone, which is supposedly an “unlocked, tri-band” phone, might be usable in Japan (albeit with a different number) if I get a pre-paid SIM or something like that.

I’ve never done soldering of this type before, but the instructions linked a few helpful pages, and I got the hang of it. My previous metal-joining experience was some years ago, hanging around the Smithsonian’s Folklife Festival, where the museum exhibit staff were doing demos. Things were quiet, so they invited me behind the protective glass, put a mask on me, and showed me how to weld. I had the two slugs of steel I joined on my bureau for several years; I may still have them kicking around somewhere.

Soldering with a pressed circuit board is nothing like that; every component has a socket, some number of metallic collars around holes in the PCB. You run the component’s contacts through the holes, flip the board, then solder from the bottom. After you’ve heated both the collar and the contact for a second or two with the iron, you touch the wire of solder to the joint. It becomes a drop of metallic liquid, and if you’ve done it right, some kind of capillary action sucks the drop into the hole, cementing the contact in its socket and joining the component semi-permanently with the board.

I got out the multimeter I got for Christmas and checked input and output voltage, and it appears to be working as advertised. It doesn’t charge my phone yet, but there’s a particular resistor with two different options, and I may need to re-solder it in the other option to get my phone to like it. I also need better wire cutters so I can trim the excess contact wire from the back of the board; right now, it doesn’t sit down close enough to fit in the tin.

Update, 5/7: Thinking through the changes, I realized that the laptop should be sufficient for charging the phone; the battery pack is going to be most useful for charging an iPod on a lengthy plane trip. So the excess leads are clipped, and the PCB is stuck down in the tin; no more soldering on this one. Maybe I’ll try another one for the phone, for fun, someday.

Now Playing: Block from Uninvited, Like the Clouds by The Church

Technorati Tags: , , , , ,

Posted by pjm at 9:43 PM | Comments (1)

May 1, 2007

No, really, there are applications for Prolog

I mentioned neutralizing the classroom distraction value of Sudoku a few weeks ago. Today, I discovered a Prolog program for solving Sudoku puzzles, which not only suits my initial application, but provides me with a handy answer to the question, “Is there any real application for this language?”

Of course, they asked that about ML as well.

Now Playing: Is It Like Today? from Bang! by World Party

Posted by pjm at 2:25 PM | Comments (0)

April 30, 2007

It still tastes like soap!

Quite possibly the best marketing line I’ve ever seen on the package of a food product. Go here and scroll to the bottom.

Now Playing: Why Don’t You Love Me from Magician Among the Spirits and Some by The Church

Posted by pjm at 10:18 PM | Comments (0)

April 29, 2007

Another reason to hate Microsoft

  • I have an older version of MS Office on my Mac, dating from my PowerBook.

  • My new MacBook came with a “trial run” (i.e. 30-day license) of the newest version of Office. That trial version has now expired.

  • I don’t run my primary account as an administrator. When I install software, it prompts for an administrator’s login and password, and I give those for a separate admin account.

  • Whenever I try to open an Excel file, the Mac tries to open the trial version first. It then gives an error (the trial version has expired, etc. etc.) and I need to deliberately use “open with…” to select the older version.

  • When I try to uninstall the trial run, it won’t let me, because I’m not an administrator.

To remove the software, I will need to quit all running programs, log out, and log back in again as the administrator. Then I’ll uninstall the software, log out again, and finally log back in as myself.

In other words, having failed to win me over as an upgrade customer, Microsoft insists on being a persistent inconvenience. This “trial run” has done nothing to convince me that MS Office is worth the price of an upgrade, and in fact has been antagonistic—I’d go a long way to avoid giving money to the company which installed this canker on my system.

Technorati Tags: , , ,

Posted by pjm at 5:06 PM | Comments (0)

April 24, 2007

How do you recycle a TV?

Remember videocassettes? Yeah, it’s been a while, but without TiVo one sometimes wants to record TV.

We have a little TV/VCR all-in-one, where the VCR was built in directly under the screen. The VCR has been unreliable for a while, but A tested it on Friday evening by putting a tape in. No dice; it wouldn’t play, and when it tried to eject the tape, it got stuck in this odd loop where it couldn’t eject the tape, detected that it was stuck, and shut off. When you turned it back on, it tried ejecting the tape again, failed, and shut off, etc.

I found the four screws that took the back cover off, then unhooked the internal bottom plate which held a lot of circuit board and the mechanics of the cassette-handling device. After removing a few screws, I managed a relatively successful cassette-ectomy, reconstructed the patient… and discovered that it was still trying, unsuccessfully, to eject a tape which wasn’t there.

If you’ve already thought, “Time to open it up again,” you think like me.

This time, I hoped I would find whatever connections existed between the cassette handler and the circuit boards, unplug them, and leave a functioning TV with no VCR. I was able to detach the cassette handler, but then when I powered it up again, it performed the same five-second shutdown stunt.

Then I started looking for things I could unplug. Being relatively cautious (as far as that can apply to someone with a VCR in pieces on the living room floor) I started by unplugging one cable, then trying to power up. This time, it wouldn’t power up at all. I plugged that cable back in… and it still wouldn’t power up.

At that point, I decided the patient had died, and it was time to stop spending time on it. I put the pieces back in roughly the right locations, bagged the spare screws, and put the back cover on. It went out for the Saturday morning trash pick-up.

Except it didn’t get picked up. I suppose it’s a “large item” or maybe hazardous waste, what with the tube and circuit boards.

So what’s the responsible, environmentally-friendly way to dispose of a TV?

Now Playing: Shining in the Moonlight from Nuclear Furniture by Jefferson Starship

Technorati Tags: , ,

Posted by pjm at 12:30 PM | Comments (3)

April 23, 2007

Installing Apache 2.2, PHP 5, and Subversion 1.4 on a Mac Mini

…and making them all play nicely together.

Something about the error messages I was getting made me decide I might have better luck with Apache 2.2. I used 2.0.x before, so I was a little apprehensive about being on the bleeding edge for all these packages, but since so much of the documentation I was following looks at older versions, I was a bit at sea about the proper way to configure the newer versions. (This Ruby, Rails, etc. tutorial, which was the initial Subversion installation, is pretty up to date on versions, but Apple’s documentation for Apache 2, PHP, and the Subversion bridge is four or five years old, and shows it.) Most of this is derived from instructions other people wrote up, and to them I am grateful… but I still had to do a chunk of this myself.

So here’s how I did it. Everything is installed from source, with the tarballs living in /usr/local/src/ and most of the binaries being installed in /usr/local/ somewhere. The installation sequence goes pretty much like this: Apache, Subversion, PHP, WebSVN.

In a perfect world, I’d have all my friendly binaries and could use wget, which I prefer, to do downloads, but I’m going to try to assume pretty close to an off-the-shelf Mac. This one is running OS 10.4.9, and the only non-standard software installed which affects this process are the databases, MySQL and Postgres, which you can install separately using packages from Marc Liyanage, and BerkeleyDB, which you can install from source if you’re willing to navigate Oracle’s website to find the documentation, but I’m not sure I did right anyway. You may need to prefix some of these commands with sudo depending on the permissions set in your /usr/local/src directory; almost every make install command will require sudo.

Naturally, this is just the process that worked for me. I expect it will still work for bug-fix releases of these packages, but for anything that’s a minor version number away, your mileage may vary.

Technorati Tags: , , , , , ,

Continue reading "Installing Apache 2.2, PHP 5, and Subversion 1.4 on a Mac Mini"

Posted by pjm at 11:05 AM | Comments (0)

April 21, 2007

The web's most obtuse download

Four months after upgrading to an Intel Mac, I’m still finding various and sundry applications which I ought to upgrade from PPC to Intel. XDarwin is today’s project, just because I want to be able to compare how a PDF looks in Preview and Acrobat Reader here to what ggv shows me on the Suns. (I’m sure there are other good reasons to do this, but they haven’t fit my workflow yet. Maybe opening xemacs windows locally?)

But you can’t just click a link and download XDarwin. You need to fill in your email address, and they will email instructions to you for download. I think I would only be more shocked if they asked for a postal address and offered to ship me a printed listing of the source code. (Better still, someone could print out the compiled binary in hexadecimal, pages and pages of seamless blocks of unreadable code.)

I haven’t had the email yet, so maybe there’s some esoteric gotta-hold-your-mouth-right steps required for installing XDarwin. This is famously complex software, after all. But at the same time, the people who want and need an X-windows server on their Mac are probably among the most capable software-installers around. Far more likely to my cynical mind is the idea that the XDarwin folks would rather I pay $40 for a CD than do a direct download.

I’m puzzled and annoyed at how much friction is involved in just getting a copy of this piece of software, let alone installing it. On the one hand, this speaks to how little friction normally exists in obtaining and installing software these days. When the X project started, selling CDs was not only a means of funding the project, but the best way to distribute the software. On the other hand, that isn’t true anymore—and for pity’s sake, folks, isn’t the name of the parent project XFree?

Update, 22 April: Eighteen hours later, still no email telling me how to download this software. Something’s broken here.

Now Playing: Enemy Fire from Gold by Ryan Adams

Technorati Tags: , ,

Posted by pjm at 3:14 PM | Comments (0)

April 20, 2007


I’m trying to make a Subversion repository available over HTTP from a Mac Mini. Put that way, simple enough.

  • All the instructions I found suggest not using the installed-by-default Apache, which is a 1.3 version. Instead, they recommend installing a 2.0 version and running it on a higher port. No problem.

  • SVN installed. No problem.

  • SVN modules for Apache installed. No problem.

  • The glue software, WebSVN, requires PHP. Problem. Once PHP is built, on attempting to restart Apache, I get an error suggesting that libapr-1.0.dylib is missing. (There are lots of good PHP packages for Mac OS X, but they’re all set up to install PHP on the default Apache, not the nonstandard Apache 2.0 I now have in addition.)

So I download APR and APR-Util, and build them. I attempt to rebuild Apache to use these updated libraries, and it won’t even complete the ./configure step. Apparently the new APR doesn’t create an apr-config file, which Apache is counting on to do its own build (that has to be at the path specified by --with-apr=.)

Maybe I need to go to Apache 2.2 to use APR, and thus PHP, and thus WebSVN? Or just pass on WebSVN and just use the module provided with SVN instead.

Technorati Tags: , , ,

Posted by pjm at 10:11 AM | Comments (0)

April 11, 2007

More found money

The haul of found money has grown somewhat since last year. I counted last night. We had less folding money ($2 rather than $7) but more of everything else. Pennies led in overall numbers (591 of them, though 7 were so damaged—bent, chipped, or otherwise no longer cylindrical—that I threw them in the trash after counting them). The dimes had the greatest value again, a whopping 95 of them, but this year they were tied by 38 quarters. I’ve no idea why we found so many quarters this year.

The grand total was $28.91, plus €.01 (now there’s a tiny coin) and £.05. That’s a smidge more than 8 cents a day, but it doesn’t include a few dozen times when I judged a coin too dangerously located (e.g. in the middle of a busy intersection) to be retrieved. I doubt that would have changed the total much, unless they were all quarters.

I suspect some of the increase can be explained simply by my running more miles this year, but other factors might be (a) living in the Boston area, where we’re more likely to be doing all of our running on roads as opposed to trails, and (b) living across the street from a popular softball field, which means my morning run usually ends amid the parking lot debris of the last night’s game. And I’ve found that coins tend to turn up near where people park their cars.

Technorati Tags: , ,

Posted by pjm at 9:37 AM | Comments (2)

April 10, 2007

Access, but not too much

I’m not having a lot of luck poking holes in the home firewall, so maybe someone else has an idea.

Here’s the new network:

Network diagram

We’re connected to the internet with a Comcast cable modem. Sitting immediately behind the modem is a Linksys BEFSR41 v.2, a four-port ethernet router which was the wonder of its day. It happens that day was seven years ago, but I’ve flashed it with a 2004 firmware upgrade and taken the obvious steps like changing the default password, so it should be perfectly functional. The router accepts an externally-routable IP address from a Comcast DHCP server “outside” and establishes a local network with non-externally-routable addresses “inside.” (As an example, it assigns itself as its LAN address; the 192.168.x.x range is not valid on the wider internet.)

One local ethernet port leads to an Apple Airport base station, the second-generation “snow” version from 2002 or so. (This, also, has had a firmware upgrade in the not-so-distant past.) The Airport has a fixed IP address in the local network,, and distributes more local addresses via DHCP in the range to a rotating cast of laptops using wifi. (There’s no encryption standard supported by all laptops and this base station, so it’s not possible to password-protect or encrypt the network. Access control is by a list of approved hardware fingerprints, so if you visit us, we’ll need to spend a minute or two determining the MAC address of your laptop’s wireless card and putting it on the list.)

Also on the wired network is the Mini (no up-to-date icon on that one), also holding a fixed IP address of (I think) My current puzzle is this: how do I train the router to allow SSH connections from “outside” to reach that Mini?

I can ping the router itself, and even bring up its management interface, which suggests that Comcast is (for once) not the problem. I have asked the router to forward incoming port-22 connections to that IP address, and I have also tried designating it as the so-called “DMZ” host, which is supposed to expose it completely. Neither one has worked so far. Close reading of the router manual (when in doubt, read the directions) suggests that these don’t work when the router is assigning DHCP addresses, which is why I shifted DHCP duties to the Airport. I wonder if the very fact that the Mini sits in the DHCP address range, even though the router doesn’t assign it, is the current stumbling block?

Update: Moving the static local IP of the Mini helped, but giving it a full set of network information—the address of the router being key—turned out to be the final solution. Hopefully it can run on “full headless mode” now.

Technorati Tags: , , , ,

Posted by pjm at 3:45 PM | Comments (0)

April 9, 2007

Reducing set size

Once again, some algae is using a domain at which I get mail for fake return addresses on a spam run. Last time, it was this domain, and I turned off the catch-all address, but I’ve been using the catch-all at this other domain much longer, and consequently I’ve distributed more addresses which I might like to stay active. I’ve been getting one or two bounces a day for a while, but today the spammer got greedy and I decided to act.

So how to keep legit addresses open? I could try to remember them all… or I could write a Perl script to scan my mail directory for email addresses at that domain and return a list of all it finds, along with a tally of how many times they’re found to help me decide if a given address is a “keeper.” (Stand back, I know regular expressions!)

And now I have a list.

Technorati Tags: , , ,

Posted by pjm at 3:54 PM | Comments (0)

April 8, 2007

Professor Coach

I’ve mentioned before how our building contains Computer Science, Electrical Engineering and Athletics. Professor β’s office has coaches for several doors on all sides, so last Sunday some of her grad students changed her job description. (I grabbed a phone-cam shot.)

Professor Coach

Now Playing: Money Talks from Live From The Bowery Ballroom by Kathleen Edwards

Technorati Tags: , , ,

Posted by pjm at 9:20 PM | Comments (0)

April 7, 2007

Cleaning the cabinet

I discovered the reason the Mini was so slow: I had installed the compiler from the first system disk I had lying around. In other words, I inadvertently installed a PowerPC compiler on an Intel Mac. That won’t work well. I updated the installers and re-ran the entire installation stack in about half the time I’d spent on the fraction completed with the other compiler. (The “wrong” compiler still worked, of course, but since it was (a) running in a translated mode, and (b) cross-compiling, I was maxing it out more than it may have wanted, and there may have been some quirks in the resulting software.)

Once that was done, I shut down the whole network and ripped it to pieces, hoping to rebuild it in a better configuration. I took the Ikea half-round table which held all the hardware and cut two big rectangular slots in the back, the better to run cables through; previously, it had only had drilled holes. (I produced a lot of sawdust doing this, thus adding “vacuuming” to the end of the “to do” list.)

I swapped the Belkin router which has, I think, been dropping our ‘net connection on a regular basis, and instead resurrected the Linksys router that I bought in 2000 or so when I first had cable internet, back in Pennsylvania. With a 2004 release of the firmware and the password re-set, that one is now chugging along nicely and hasn’t dropped the connection yet. We’ll see how it does in the long-term.

I moved the power strip which served the network up into the table itself, then threaded all the power and network cables through the table so it also accommodated the cable modem, router, and the old Airport wireless base station. With the power brick for the Mini inside the table as well, the Mini itself wouldn’t fit, so I sat it on the tabletop with its power cord and ethernet cable sneaking up from the back of the table. Now there are only two cables coming in to the whole nest, the coax for the cable modem and the plug for the power strip. It’s much neater than before.

I set the router up to allow SSH connections in to the Mini from outside. We’ll see how that goes. I’m hoping that will allow tunnelled connections to its webservers, so I can reach the SVN respository easily from outside the house.

It was a lot of work and a big mess while it was happening, but I’m a little proud of the results. This has to be the best-looking server cabinet I’ve ever worked with.

Now Playing: Don’t Bang the Drum from This Is the Sea by The Waterboys

Technorati Tags: , , , ,

Posted by pjm at 6:52 PM | Comments (0)


Now that I am running two different machines with dual cores, there are some details I need to get used to.

Load average numbers, for example. Normally a load average of 1 means the machine is perfectly utilized, an instruction always coming up just as the CPU is available to handle it, no wasted time and no waiting. With a dual-core machine, that number is 2. If I saw a long-term load of 1.5 on a single-core machine, I’d be worried; with these, it means the system is practically coasting.

Likewise, I can run top and get some surreal numbers. Right now, for example, I see a process on the Mini which is taking 188.9% of the available CPU time.

Now Playing: 109.Pt2 from Some Friendly by The Charlatans

Technorati Tags:

Posted by pjm at 11:42 AM | Comments (0)

April 5, 2007

Commodity server

This afternoon, our first capital investment arrived at my apartment: a development server in the shape of a Mac Mini. I’ll do some initial configuration using the keyboard, monitor and mouse I use in my office with the laptop, then it will get an ethernet cable to the router and live as a headless server next to the cable modem.

I bought the bare minimum configuration, which explains its remarkable 27-hour turnaround from order to delivery. I figured if it ever turned out to be under-endowed in terms of RAM or disk space, we could probably manage an upgrade.

Then I thought about the specs of this little box relative to the old Qube 3, circa 2000 or 2001, which was the office server at my old job. The Qube did a lot of work for us, functioning as mail server, gateway, firewall, DHCP server, sometimes router, and sometimes web server. And yet…

Qube 3Mac Mini
CPU 233 MHz AMD, single-core 1.66 GHz Intel Core Duo
RAM 256 MB 512 MB
Disk 40 GB (after upgrade) 50 GB

And that’s leaving out the physical size; the Qube had about the same footprint as a Mini, but the Mini is about 40% of the Qube’s height, and much, much quieter.

And for now, at least, all we’ll be asking of it is SVN and some light web serving. Maybe someday it will become an Xgrid master or someone’s desktop, or maybe we’ll just chain Firewire disks on it and make it a file server. Not bad for such a little box.

(Hey, did I mention this before, or what?)

(Update, an hour later: No way this thing is going to seduce me away from my MacBook; it’s 2 GHz with 2GB RAM vs. 1.66 GHz with a quarter of the RAM, and just doing a command-line install of Ruby you can see the difference. As a multi-core machine, if Apache is built with thread support this sucker is born to be a server.)

Now Playing: Tomorrow from Demolition by Ryan Adams

Technorati Tags: , ,

Posted by pjm at 9:59 PM | Comments (0)

April 3, 2007

My very own lecture

Once I got used to it, I really like Keynote. I wish we’d been able to do the business plan presentation with it. It’s like all the cool stuff from Powerpoint, with all the cruft stripped away. I was able to run the lecture from my MacBook in two-screen mode, with the slides on the projector (one screen) and the “presenter view,” which shows the current slide, any notes, and the next slide, on my own screen, so I always knew what was coming next. Other than a few muffed transitions (I mis-programmed them) and some sections where I talked ahead of my own outline, things went pretty smoothly. I was easily able to click out of the presentation into demos online, some of which were actually running on my machine.

Except, of course, for the usual snoozers. 1:30 PM is a lousy time to have class; one of the women said last week that she found she needed to have her afternoon coffee early to get through this block, even when it’s not me lecturing. If I had time to re-do, I would hack more of my code samples into stuff they could easily download and try out on their own. I did show them how to switch on the web server on a Mac, and hinted at how it’s done for Linux. (Looking now at the default Ubuntu build I have in Parallels—didn’t I mention that my Mac now runs both XP and Linux?—I see that Apache isn’t installed on the standard Ubuntu, so maybe fewer students have a built-in Apache than I expected.) I also gave them the URL for my laptop (a DHCP URL only valid while I was jacked in to that ethernet cable) so they could run my demos on their own.

It turns out I was able to recycle some unused work as an example. I did this site over winter break (not the design, but the infrastructure) in Perl, then discovered that the host didn’t support Perl CGIs, so I redid it in PHP. (Pretty easy, actually; it’s a single HTML template, a CSS file, a couple images, and some plain text files. There’s not a whole lot of code involved.) I used the Perl version as a code example for the HTML::Template module, then the whole thing as a demo for the idea of using the filesystem as a simple database.

I also told them that one of the biggest sites built on PHP was one probably everyone with an open laptop had visited at least once during that class block. Several people guessed Google, but then someone guessed right: Facebook. Whereupon we got one denial… from a student who recently “friended” me on Facebook.

Standing in front of a class and talking requires a tremendous amount of mental energy; you have to be on all the time you’re up there. It’s like performing in that sense, I suppose. I feel burned out and unable to focus afterward.

Now Playing: Blue Pastures from Whiplash by James

Technorati Tags: , , , , , ,

Posted by pjm at 10:01 PM | Comments (2)

March 28, 2007

More than a penny

On my way over to the presentation, I passed by Jumbo. Remembering the success of my nickel on my first trip by him, I left a penny. I think maybe that wasn’t enough.

We didn’t win the business plan contest. This doesn’t come as a big surprise; the two competitors I identified earlier this month as strong entries came out on top. These guys came out on top—not surprising considering what they’ve already done—and these guys were second.

Despite the contest being billed as a winner-take-all, though, they ended up splitting the funds among us, such that we and two others actually came away with $1k, while the top two had some complicated division of the remaining prize (which, while largely cash, also included a fair amount of in-kind services like legal assistance, consulting, and lease credit for office space.) The upside is that, since we didn’t pick up the in-kind services, we’re not now tied to those companies for services or offices; there has been some discussion of locating somewhere other than the Boston metro area. The downside, obviously, is that we’re not $50k ahead on our initial funding.

We got some helpful feedback from two of the judges, who pointed out to us that while we’ve been focusing on the website, and the related software development has been growing in the background, it’s time we started pitching ourselves as a software company, and building the website as a proof of concept.

So there may be a company name change in the near future (one reason I haven’t been spreading around our working title,) and some actual software engineering is going to have to start happening.

Technorati Tags:

Posted by pjm at 10:36 PM | Comments (0)

March 27, 2007


Despite railing a bit against Gmail back in 2004, I did actually pick up an account a few years ago, if only to stake out the name.

Yesterday, grappling with mounting frustration at’s inability to filter spam out of my email, and (since the Intel MacBook arrived) its tendency to crash when I label spam, I got fed up. I’ve been watching the Shipwright and many, many students using Gmail (which makes a lot of sense if you don’t have a laptop to use as a central email store,) and I was intrigued by the interface. I decided it was time to run the experiment: I shut down and set all my (many, many) inboxes to feed into Gmail. I’m going web-based.

I’m deliberately trying not to recreate all my desktop-client habits, instead letting Gmail steer me into the most effective way to use it. The thing I like most so far is the “conversations” organization, which reminds me of the way elm used to file both sent and received mail in the same folder, defaulting to the username part of the email address on the other end of the correspondence.

(Yes, elm. Back in the days when I read mail over a 9600 baud frame relay network (and no, I’m not missing an order of magnitude there.) Damn, I’m old.)

Another driving motivation: I have Yet Another Mailbox now, in the domain of our forthcoming website. The Shipwright has, so far, been farming out domain services like email to Google Apps, so that’s a Gmail box by default. Yesterday he made us a small run of business cards. (Small, because the name is likely to change before we release anything.) It’s a very small set of information: logo, my name, my position (“Founder”), the new email address, and my cell number. I feel postmodern without a postal address.

Now Playing: Trans-Neptunian Object #1 from Cherry Marmalade by Kay Hanley

Technorati Tags: , ,

Posted by pjm at 9:27 PM | Comments (1)

March 14, 2007

Celebrating the day

Back in Amherst, a math major at the College got up early and… well, how about their words:

“15-pack of sidewalk chalk: $3.19
Computer center printing fees: $.65
Getting up at 6 a.m. and writing 2,010 digits of pi across campus: priceless”

Apparently, the numbers stretch from the dining hall to the science center. I am disappointed that I missed it.

Here at the University, there is a pie-eating contest at the Math Department. Held at, of course, 2:45.

Technorati Tags: , , ,

Posted by pjm at 2:06 PM | Comments (0)

March 13, 2007

Terms which have dramatically different meanings depending on which of my interests is involved

“Race conditions.”

Posted by pjm at 5:19 PM | Comments (0)

March 2, 2007

Buyer's remorse

A’s phone died earlier this week. Usually taking the battery out for a “hard restart” was enough, but this time it lost the main display screen entirely, so it was time for new hardware.

I took the opportunity to upgrade my own hardware from one of these, which has been working just fine (even the battery does pretty well, which is actually a bit surprising,) to one of these. (By renewing our contract and submitting to mail-in-rebate forms, we’re not spending anything on the phones.) I haven’t really started to use it yet, but just on “curb appeal” I’m not sure why I bothered. It’s thinner, sure, but no lighter, and the face of it is a smidge bigger.

And I can’t get the battery cover off the old phone to swap the SIM cards, so I can’t start using it and figure out how it’s an improvement over the old one. Maybe the camera is better? Maybe the bluetooth sync with my Mac is improved? I need something to keep me from feeling guilty about retiring a perfectly functional phone which meets my needs.

Now Playing: What For from Strip-Mine by James

Posted by pjm at 10:34 PM | Comments (0)

February 28, 2007

Sweetest wasabi ever

I’ve discussed the weekly colloquium before. Starting in the fall, we’ve had grad students volunteer to take a fixed budget and provide the food. We have just inventive enough grad students that things can get out of hand very quickly; I’ve reached a point where I don’t volunteer because I have no hope of measuring up to previous performances.

For example, today we had candy sushi. With green cake frosting for wasabi, some kind of red licorice as ginger, and chocolate sauce instead of soy sauce. And, of course, chopsticks. It was both very sweet and somewhat disturbing.

Now Playing: My Delusions by AMPOP

Technorati Tags: , ,

Posted by pjm at 5:44 PM | Comments (0)

February 22, 2007

If you don't play, you can't win

The Engineering Management program here at the University runs an annual business plan contest, and we submitted one. Since the University don’t have a full-on MBA program, and the contest is only in its third year, the winning plan earns “only” $50,000, not the $100,000 awarded by a similar contest at MIT, or the $60,000 (or so) at Harvard. For similar reasons, the competition hasn’t, historically, been quite as fierce as it is in Cambridge, but $50k is a lot of change for a cash-starved startup, and that number is apparently drawing a lot of entrants out this year. (Before you all get excited for next year, at least one member of the team must be from the University, so it’s not a wide-open contest.)

We couldn’t get any details from the program about the level of competition; sometimes they hinted that there were biotech and bioengineering entries from the medical school and/or engineering schools, and sometimes they suggested that most of the entries were from undergrads and we, as experienced graduate students, would have an edge. Maybe those are both true. As we got closer to the deadline and pushed our document through revision after revision, we stopped worrying about things like that which are fundamentally outside our control.

One of the drawbacks of these contests is that they tend to be winner-takes-all. There’s one first prize, and everyone else goes unfunded. But as it happens, the closer we got to completion, the less we thought about winning. Going through the rigor (or wringer?) of preparing the plan for close scrutiny may have forced us into clearer and more detailed thinking about exactly what we expect to get done, how much investment we’ll need, and when it will happen, than we might have done at this stage without the spur of a contest. The idea kept evolving, even after we said, “Look, we need to stick with this concept if we’re not going to be rewriting this plan every week.” We’re in a better position now, even if we don’t win. Even if I did utter the words, at least once a day, “When can we stop inventing plausible numbers and start coding?”

It was an interesting underline to all the software engineering principles I’d gone through in the fall semester: much as I think we could just sit down and code, we will have to put a lot of planning on paper before that happens, too. We’ll have to plan to ensure we have the hardware and software ready at the right times, plan to make sure we hire coders soon enough to make our schedule but not sooner than we can afford them, plan to make sure all our pieces fit together and talk to each other. And considering the changes our basic idea of just what we’re doing went through in the course of writing, if we’d just started coding, we would’ve wasted our work when we discovered we were in an entirely different market segment.

When we walked the submission-ready document (I stopped calling it “final”) over for entry, my partner said, “Now we get our lives back!” I replied, “No, it’s just a loan; we’ll have to return them in a few months.”

As it happens, that’s happening sooner rather than later; we were notified yesterday that we’re “finalists” in the competition, and we’ll need to prepare a revised plan for re-submission. We’ll also need to make a 20-minute presentation, with the other finalists, in late March, before the winner is announced. I don’t know how many finalists there are, but I suspect there are at least three and probably not many more than five.

I think the message we’re getting is, “We’re not ready to give you money yet, but keep talking.” And that’s a pretty good start.

Now Playing: One Of The Three from Laid by James

Technorati Tags: , , ,

Posted by pjm at 1:43 PM | Comments (4)

In which programmers in glass houses throw stones

Our home-grown grade-tracking software (written, according to department folklore, in some thousands of lines of Lisp,) was retired at the end of last semester in favor of a department installation of Moodle. (The perfectly rational reason for this was that the only person in the department who really understood the old system died last spring. Considering the time I and others spent wrestling with Sakai last year, there’s some irony in the choice of Moodle.)

We’ve decided that Moodle is too much solution for us in the class I’m TAing this spring, so we went looking for a simpler way to keep students up to date on their progress. (In any other field, handing back paper with written comments ought to be enough, but this is CS and most of the assignments never exist on paper in the first place.) It turns out that our widely-used perl utility for collecting assignment files, provide, has matching components for recording grades (profess) and displaying them to students (progress).

There’s also a utility written for checking to make sure configuration files, etc. are all set up properly. It’s referred to as a “sanity-checking” utility and is called, of course, prozac. From the manual page:

Like the real prozac, it makes provide happier in 95% of all situations, and otherwise becomes homicidal.

Now Playing: Nothing Like from God Fodder by Ned’s Atomic Dustbin

Technorati Tags: , , , ,

Posted by pjm at 9:37 AM | Comments (0)

February 17, 2007

My usual approach is worthless here

Apparently, whenever I join this particular wireless network, it brings down the whole network, necessitating a power cycle on both the router and the cable modem. This does not happen if I make a cabled connection to the network. I think it had happened with my old PowerBook; it does not happen to other Macs joining the network.

I am baffled.

Posted by pjm at 10:33 PM | Comments (0)

February 13, 2007

Manifesting the audience

Tying a few things together: I’m re-reading this New York Magazine article about “the younger generation” (Bog, I’m old) and the gap between how they view online “privacy” (they don’t even have the concept) and how people my age do. On one hand, I’m thinking about how this matches with my mental decisions not to write here about classes of things that happen at the University—about “my” students, “my” undergraduates, etc.—because, hey, maybe they don’t even care.

The bottom of the cup But I’m also thinking about this software I grabbed last week, and ran for most of a day. It connects to an available digital camera (e.g. the one built in to the lid of this laptop) and grabs a photo every thirty seconds or so, saving them as a giant time-lapse movie. I wound up with a record of what the laptop sees in a day, about thirty seconds of me grimacing at the screen, or just slack-faced in contemplation. It has the same quirky feel to it as a photo of yourself, because unlike PhotoBooth it doesn’t reverse the image (showing you the same image you’d expect from a mirror) but shows the straight image.

There are some odd frames—a few shots of me eating breakfast, one with the cat walking in front of the screen, a long morning segment displaying how badly I needed a haircut (and how the pool chemicals combine with my habit of running my fingers through my hair to make it stand up straight in a decidedly terrifying manner.)

This screen (actually, one quite like it) has been my audience for the best part of the last two years. It was quite revealing to see what it sees.

Now Playing: Getting Away With It (All Messed Up) from Pleased to Meet You by James

Posted by pjm at 9:21 PM | Comments (0)

February 6, 2007

However you slice it

I’ve never been satisfied with the results when I try slicing my pizzas radially (that is, the way normal pizzas are sliced.) A while ago, I realized I could do much, much better by making one slice to cut the pie in half, then two more perpendicular to the first (and parallel to each other) which cut the halves into thirds. The result is four “corner” pieces which are sort-of quarters of a disc, and two “middle” pieces which are almost rectangular. The advantage is that it works perfectly well on irregularly-shaped pies, and since I’m hand-stretching the dough, “irregular” describes nearly every pizza I make.

Technorati Tags: ,

Posted by pjm at 8:51 PM | Comments (1)

February 3, 2007

How much do you really need to know?

The more I learn about computers, the more things I discover that I really don’t know. (This is related to the theorem that there’s always someone who knows more than you do.) But it seems like there’s really a pretty small core of tools a student needs in order to explore Computer Science; knowing them well (and being willing to apply oneself to learning) is probably 80% of doing relatively well in the field.

The tools are sometimes surprising. One of them, the Theory Tool, I didn’t really grasp until this past summer; it boils down to the idea of proof by induction.

Proof by induction and construction through recursion are the same process running in different directions; this is the means we use to take ones, zeros, and the concept of time, and build everything that can be done with machines and electrons. It’s a hairy topic; we’re taking the Programming Languages students through the “recursion” aspect of it now, and sometimes you can see their minds double-clutching.

I only recently bumped into an article suggesting that some people will simply never learn to program. It cites a paper arguing three things make up the primary hurdles in CS:

  • assignment and sequence
  • recursion/iteration
  • concurrency

There’s induction/recursion in the second spot. The third, “concurrency,” is what my advisor describes as the “too much milk” problem: say you notice in the morning that you’re short on milk. On the way home from work, you stop at the store to pick some up. But wait: did your roommate just do the same thing? Buy the milk, and you may have twice as much as you can use before it goes bad. Don’t buy it, and you may have to go without. You have a concurrency issue. Modern humans invented cell phones as a solution for this problem; computer scientists have some tricks for it too, depending on the context (and it’s a major headache in some contexts.) Concurrency still gives me headaches, which is a bit of a problem considering that parallel processing fascinates me.

It’s the first hurdle which is sort of staggering. Assignment. It’s where you take a labeled container and put a value in it. The authors of the paper suggest that success in introductory computer science courses can be predicted by a simple test of a dozen questions or so. Here’s the first question:

Read the following statements and tick the box next to the correct answer.

int a = 10; 
int b = 20; 
a = b;

The new values of a and b are: 
[ ] a = 20 b = 0 
[ ] a = 20 b = 20 
[ ] a = 0 b = 10 
[ ] a = 10 b = 10 
[ ] a = 30 b = 20 
[ ] a = 30 b = 0 
[ ] a = 10 b = 30 
[ ] a = 0 b = 30 
[ ] a = 10 b = 20 
[ ] a = 20 b = 10

Easy, huh? Well, if you thought so, you may take to programming. If you didn’t, the second option (a = 20, b = 20) is the answer.

It would be cool if we could just teach those three things, then spend the rest of our time investigating the fun stuff, but there’s a lot of detail and ramification that needs covering as well. (I’ve heard it said that the goal of our entire Data Structures course is to make sure undergraduates understand the concept of a pointer.) We can let our machines build a lot with recursion, but we still need to pick the base cases and specify how to make them step, and doing that properly takes some care and practice which take time to learn.

But it is a little humbling, and perhaps inspiring, to think of all the work one can do just to fully understand those three ideas.

Now Playing: Orange from Come Down by The Dandy Warhols

Technorati Tags: ,

Posted by pjm at 9:50 PM | Comments (0)

January 31, 2007


And, of course, the new laptop has one of those tiny pinhole cameras in the top bezel of the monitor. Apple includes Photo Booth software which uses it, and includes some built-in distortions. Photos along these lines follow inevitably:

Dented cat

Now Playing: Скоро Кончится Лето from Черный Альбом by Кино

Technorati Tags: , , ,

Posted by pjm at 11:00 PM | Comments (0)

Different languages

While transfer of affection isn’t easy, it turns out that transfer of almost everything else is alarmingly easy. When the new box was starting up, it asked me if I was transferring from an old Mac. I said yes, booted the old machine in Firewire Target Disk Mode, plugged it in to the new one… and waited for a few hours.

Once it was done, though, I’ve found very little from my old machine which is missing on the new one. I was able to log in and start working like I hadn’t switched machines. (A asked, and I didn’t have an answer: is there a comparable transfer utility for Windows? I don’t remember one when I was setting up XP boxen in my old job—not one that worked this well, anyway.)

The only hitches I’ve found are connected to the fact that I was switching from a PowerPC G4 to an Intel chip. So there’s, uh, an architecture issue. Most of my apps were already Universal, but every so often I bump up on something compiled for PPC. The list is pretty bizarre. TeXshop worked, but wouldn’t generate a PDF—the LaTeX utilities underneath needed rebuilding. My G4 Bon Echo build would crash at odd times, running under Rosetta. Likewise, DrScheme would start and run, but crash if I tried defining anything.

And then, in yesterday’s class, we were talking about Just In Time architecture-to-architecture translation. Which, while obviously very good, is evidently not flawless yet.

Technorati Tags: , ,

Posted by pjm at 10:43 AM | Comments (1)

January 30, 2007

Love what's in front of you

A few months ago, I was reading a blog in which the poster wrote, “Love what’s in front of you.”

I responded in a comment, “I’m sitting at the kitchen table with my laptop. Aside from some furniture, that leaves me with my laptop and the fridge, and much as I may love either of them, I doubt they’ll love me back.”

I don’t really love the fridge, but I think over the past year and a half I’ve spent more of my waking hours with that laptop, a 12” G4 Powerbook, than with any single sentient being. (Iz tries to tip the balance by waking me up when I’m sleeping, but he sleeps so much himself that he’s not really pulling it off.) I’ve been using it for a bit more than three and a half years, and in that time I’ve stuck a few CDs in it, taken it apart, put it back together, replaced the optical drive, the keyboard, and the RAM, crammed the HDD full with photos, music, and recorded interviews, flown and driven all over this country plus Canada and Japan, done enough freelance writing to pay for the computer, hacked together several web apps, and installed more software than I care to think about, to handle more tasks than I could have conceived of when I bought it. If I get sappy about a pair of spikes I’ve raced in four times, imagine how I feel about this computer.

With that much use, you can imagine that it’s getting a bit beat up. The keyboard—the second keyboard—has some loose keys. There are scratches around the case, and in a few places the contours are not quite what they were originally milled to be. And there’s a CD stuck in the optical drive. (I’ve still got to figure out how to get that out.)

The MacBook arrived yesterday. It has a lot to recommend it, including a working optical drive, but it’s not love (yet).

(Where’s the old one going? Check back here and look under “increasing interest.” Then remember that I have nieces, and their father is an engineer, too.)

Technorati Tags: ,

Posted by pjm at 9:26 PM | Comments (1)

January 20, 2007

Desperate measures

In an effort to put some bounds on our heating bill, I hung a curtain over the doorway leading upstairs to my office. (For various architectural reasons, there is no actual door there.) As a result, it is even colder up here on the third floor than usual. (On the second floor, we have forged a thermostat compromise involving A shivering and wearing hats indoors, and me walking around in shorts.)

How cold is it on the third floor?

Well, I have my laptop closed, impairing its ventilation. (I’m using another monitor.) Yet I can run processor-heating applications without the fan kicking in.

Now Playing: Little Bit by University

Technorati Tags: , ,

Posted by pjm at 10:13 PM | Comments (1)

January 19, 2007

Subversive searching

Sometime in the late ’80s or early ’90s, a bright young man implemented a fairly effective file compression algorithm for the Mac, and distributed it as shareware. That was Stuffit, and by the mid ’90s, when I had my first Mac, the .sit files it created were the de facto standard for distributing Mac software.

At some point, the software company which had either obtained or grown up around Stuffit split the brand into Stuffit Expander and Stuffit Deluxe. Expander only worked one way (to de-compress existing archives) and was free, further enabling its spread; Stuffit Deluxe allowed Expander to handle other formats, to compress, to segment archives across multiple disks, and other fancy tricks, and cost several dozen bucks.

I don’t remember the exact sequence here, because for a few years I worked for companies which subsidized my software needs to a terrifying, yet satisfying, degree, but sometime around the millennium Stuffit Expander became an actual part of the default software set shipping with new Macs.

Also around the same time, Apple lurched towards the Unix world (which uses GNU-zipped tape archive files with the .tar.gz or just .tgz extension and started encouraging the distribution of software as disk images (.dmg files.) Software makers started distributing .dmg.tgz files, because the process of mounting the disk image offered a hook for presenting a license (even if that was the GPL.) Apple started including an “archive helper” utility which both creates and unpacks .tgz, .zip, .gz, .tar and almost every format except .sit (which still requires a license from Stuffit’s makers.) The Stuffit people, now a division of Smith Micro, had to scramble to monetize Stuffit, because their model still requires that the Expander be distributed for free, and there’s no longer an obvious reason to buy any other version.

So they throw hurdles in your way to the free software, essentially making it impossible to find your way to the download through their site without filling out a form asking for your name and email address—with no way to opt out of their follow-up emailings, at least until you’ve received some of their spam (at which point they’re required by law to let you unsubscribe.)

Too bad enough people have posted links to the direct download site. Now you can avoid their marketing form by searching for “Stuffit Expander direct download” and skip the form. (You’re not evading the license: that still pops up. When you mount the .dmg file, of course.)

Now Playing: This Town from Kids in Philly by Marah

Technorati Tags: , , ,

Posted by pjm at 9:03 PM | Comments (0)

December 29, 2006

Build a better ATM, and the world will withdraw cash at your door

How do you get in to writing ATM software?

Because the user interface on those things, frankly, stinks.

I’m not talking about the hardware. Touch pad, buttons, whatever, that’s for the hardware people. I’m talking about the series of choices you’re presented with, and the inputs you need to provide. For example, it’s cool that they have a FAST CASH $60 option in the transactions menu, but why can’t I set a universal preference for a different sum and make that the Fast Cash amount every time? A few others:

  • Why am I asked where I’m withdrawing money from if I only have one account at this bank? (And, if I only had two, why should I be shown more than two options?)

  • If you can only withdraw money in increments of $20, why does the input require you to put in the full amount, including cents? That’s four key-presses for a hypothetical $60 transaction, and three of them are chances to generate invalid input. How about just two key-presses for 6 and ? Or how about a field showing the Fast Cash amount ($60 by default) with “up” and “down” arrows to increase or decrease the amount in increments of $20?

I’d try to patent these ideas, but I think the time I’d save at the ATM if someone implemented them would be worth more than I’d ever earn. ATM designers, rip off these ideas! Think of them as my gift to the world.

Technorati Tags: , , , ,

Posted by pjm at 4:56 PM | Comments (1)

December 26, 2006

What a geek needs

Falling asleep Sunday evening, I was thinking to myself, what I want for Christmas is something that doesn’t really exist. I want a stack.

Not pancakes, nor paper, nor exhaust (though paper comes close.) I want a data structure for my brain that works like pushd and popd (two command line utilities I recently learned about and already love.) pushd . stores the current working directory in a “stack,” which in the world of computers is relatively narrowly defined, generally referring to a last-in-first-out (LIFO) data structure. (As opposed to first-in-first-out (FIFO,) which is called a “queue,” because it functions like a line at a store.) You “push” values on to the top of a stack, then “pop” the top value off. Once something has been pushed to the stack, you can move on to do something else, somewhere else. When you’re ready to go back where you were last working, you just say popd and you’re there. Because the stack is limited only by available memory, you can nest (pushing repeated values on to the stack, then popping them back off in reverse order.

So what I want is to be able to do pushd and popd on the entire working context of my brain. (From an Object Oriented standpoint, I want a stack of BrainContents objects.) So if I am distracted or diverted by something else (which inevitably happens) I could serialize my mind context, push it on a stack, go through the distraction, then pop the context off once the distraction is over and get back to work.

Anyone who can invent this will probably make a fortune.

Posted by pjm at 8:40 PM | Comments (1)

December 10, 2006

Software wreck

A little voice in the back of my head is saying, “You’ve only played with data mining if you haven’t crashed WEKA by running out of memory.”

Wait, out of memory? Didn’t I put a new stick in this laptop… oh, yeah, a year and a half ago. I really needed to move this to the servers, didn’t I. Last week I was wondering if the cluster had Java, because I bet Friday night’s three-hour experimental run would’ve gone much faster if I’d distributed it between thirty nodes.

Now Playing: Heaven Sent from Welcome To Wherever You Are by INXS

Technorati Tags: , ,

Posted by pjm at 11:36 PM | Comments (0)

December 9, 2006

Cold weather launch

My nieces are visiting. My brother took them in to the city to see The Nutcracker this afternoon, and now they’re out at the neighborhood playground, but somewhere along the way it occurred to me that I could launch a rocket. So I prepped the big old one with a B4-4 engine quickly, and when they left for the playground I went out with them. There was nobody on the fields, so I could go right out in the middle to launch.

The best part of launching so late in the day was that when it went up, you could really see the light of the engine exhaust. By luck and not design, the launcher sent it slightly upwind (over my head,) but I kept it in sight most of the way up and watched it make a clean nose-cone separation, at which point I relaxed and started winding up the wires while it drifted downwind. The girls and my brother made the retrieval and brought it back before heading for the playground; it’s solid and ready to go again, given some wadding and another engine. I think the girls were impressed; they wanted to know how high it had gone. Plane height? No, not really…

I wish I knew the model name of that rocket, because it’s been the most solid one I’ve ever launched, pretty much. Aside from the one winter launch (decades ago) where it lost two tail-fins landing on the icy lake behind our house in Maine, it keeps coming back for more. In hindsight, the nose cone didn’t pop until the rocket was already starting down; a B4-3 might make for a softer landing. I wonder if the same three-second coast would hold for a C engine?

Technorati Tags:

Posted by pjm at 4:39 PM | Comments (0)

November 29, 2006

Always quick with an illustration

One of our undergraduate researchers was giving a presentation today in which she mentioned a dodecahedron—“You know, like a D20,” she said, as though everyone would know what that was.

Also, she said “dough-DESS-uh-hee-dron,” a soft “c,” when I had always mentally expected “dough-DECK-uh-hee-dron,” a hard “c.” I suppose it makes sense, if a deciliter (a tenth of a liter) is pronounced with the soft “c” and decaliter, ten liters, with the hard “c” is sometimes spelled with a “k”.

Posted by pjm at 9:45 PM | Comments (4)

November 26, 2006

Skype away messages

(I have a massive experimental run going in the background, load average over 2, so I can justify a little non-work time.)

I may or may not have mentioned that I tried Skype early last summer, and found it pretty cool. But it seems like my tendency to avoid speaking to people on the phone extends to VoIP, so I’ve used the IM feature more than the voice. (I have accounts on “real” IM services, but I almost never have the client on, so few people bother. My username is the same as this site’s domain, on AIM at least.)

Anyway, one thing regular IM services have on Skype’s IM is flexibility of “Away” messages. There are two basic levels that everyone supports—“Responsive” and “Unresponsive,” whatever they’re named—but since Skype supports both voice and IM, there’s a need for more detail. For instance, if I’m at my cube in the CS building, I can IM, but I’d prefer not to speak, since I share the space with three other grad students. Skype only offers “Away,” “Not available,” or “Do Not Disturb.” Can I set voice to DND and IM to Online?

Regular IM services allow for the customization of messages with both the green and red lights. Looking in to Adium, I see eight custom messages (“Coding” shows up under both “Available” and “Unavailable,” as does “In class,” but “Grading” is only under “Available.”) I would probably have more if I used it more often. I wish I could do that with Skype: something like, “Shhh!”

Technorati Tags: , ,

Posted by pjm at 1:02 PM | Comments (0)

November 15, 2006

A long run

I put together a script to run a decision-tree algorithm on all the various permutations of my data set (the 2006 Boston Marathon results.) Then I started the script on a timer, and went to do a workout.

When I came back, I found out the complete run had taken just under an hour. (56m40s, if you’re after precision.) An hour long test run! I almost feel like a real scientist.

Technorati Tags: , ,

Posted by pjm at 9:03 PM | Comments (0)

November 13, 2006

Bug fixes, etc.

Thanks to a lot of feedback from a student in the class I wrote it for, I’ve bundled a slew of fixes for and posted a new version. Among a bunch of fixes which should make it a bit more stable, I also added an (optional) flag to return an RSS feed rather than an Atom feed.

Now Playing: Moscow Song from Appetite by Kris Delmhorst

Technorati Tags: , ,

Posted by pjm at 2:47 PM | Comments (0)

November 12, 2006

Nobody ever said it was easy

There are a lot of ingredients that go into being “good with computers.” One, as discussed in a conversation the other day, is the willingness to try a number of different approaches to troubleshooting, and to keep tinkering until something works, rather than persisting in a “right way” that isn’t working.

Another is being willing to pay close attention, to the point of obsession, to the quality of input, because that’s really what controls output.

This morning, as I sat on the floor of the Medford city council chambers waiting for the awards for the race we ran, I saw a reminder of this principle in action. A worried-looking woman said to another runner, “The results and the entry database aren’t lining up right. It’s all messed up. We aren’t going to be able to do the awards.” Eventually they admitted the confusion in a general announcement, recognized the male and female overall winners of the 5k and 10k, and skipped directly to the raffle, promising to mail any other awards.

They have the results posted online now, but it’s plain that they haven’t fixed whatever was wrong. There are six women listed finishing in front of me, but only one did, and she—the one recognized as the winner—is listed as the fourth-place woman. And there’s a five-year-old “male” named Eleanor in front of me; somehow I question that. My bib number, age, gender, etc. are correctly listed, and if I check the place I think I got, it correlates with the time on my watch. It’s hypothetically possible that I placed second in my age group, as listed, but I don’t really trust the listed results because they show the wrong women’s overall winner, and my incorrect time. The 10k results have a woman winning the race overall, and appear to have even less relationship to the reality of that race’s finish than the 5k results do, though again, places appear to match times correctly.

Results of road races and cross-country races tend to work as a three-table database. There’s an entrants table, which has the name, age, gender, etc. of each entrant, along with the assigned bib number. The bib number isn’t usually the primary key (the table may be useful before numbers are assigned), but it can function as a key. At the finish line, two more tables are generated. One is an ordered list of bib numbers, which form a two-column table where the first column is the ordinal number of finish. The last table is a similar ordered list of finish times. In both cases, the ordinal number column is a key, but so is the value column; they’re normalized tables, “The key, the whole key, and nothing but the key, so help me Codd.”

The results printout, therefore, is a join of these three tables: the first and second are joined on bib number (producing an ordered list of entrants) and then the third is joined on finish place, assigning times. The second table, the ordered list of bib numbers, is the glue which assigns times to finishers.

In the case of this race, that table got botched somehow. Maybe the numbers weren’t keyed in the right sequence; maybe somebody shuffled the list somewhere. The bib numbers are hooked to the right runners, and the times are hooked to the right places, so those tables are OK.

Whenever I’ve participated in race scoring, I’ve seen the near-paranoid care taken to preserve correct finishing order. At yesterday’s New England Division III regional, where finish order (which determines team scoring) is paramount, they had four different systems in place in case one failed. On the other hand, I think I recall the organization which handled scoring at today’s race being associated with my last marathon, which still holds a special place in my memory as a race where organization failed in the most basic ways—including the production of accurate results.

Now Playing: Window from Inarticulate Nature Boy by Josh Clayton-Felt

Technorati Tags: , , , ,

Posted by pjm at 2:55 PM | Comments (0)

October 28, 2006

Stupendous badass

Every once in a while, when I want to psyche myself up for something nasty, I remind myself that I am a stupendous badass. Why? A section of Neal Stephenson’s Cryptonomicon:

Let’s set the existence-of-god issue aside for a later volume, and just stipulate that in some way, self-replicating organisms came into existence on this planet and immediately began trying to get rid of each other, either by spamming their environments with rough copies of themselves, or by more direct means which hardly need to be belabored. Most of them failed, and their genetic legacy was erased from the universe forever, but a few found some way to survive and to propagate. After about three billion years of this sometimes zany, frequently tedious fugue of carnality and carnage, Godfrey Waterhouse IV was born, in Murdo, South Dakota, to Blanche, the wife of a Congregational preacher named Bunyan Waterhouse. Like every other creature on the face of the earth, Godfrey was, by birthright, a stupendous badass, albeit in the somewhat narrow technical sense that he could trace his ancestry back up a long line of slightly less highly evolved stupendous badasses to that first self-replicating gizmo—which, given the number and variety of its descendants, might justifiably be described as the most stupendous badass of all time. Everyone and everything that wasn’t a stupendous badass was dead.

As nightmarishly lethal, memetically programmed death-machines went, these were the nicest you could ever hope to meet.

Posted by pjm at 6:18 PM | Comments (0)

October 27, 2006


If anyone knows anything about Digital Signal Processing, could you lend me a clue for a few weeks? Thanks…

Now Playing: Seize The Day from The Greatest Gift by Liberty 37

Posted by pjm at 2:02 PM | Comments (0)

October 26, 2006

Nobody likes a smartass

Plenty of people have pointed out that it may be difficult to predict DNFs purely from split data, given how many unmeasured variables affect the decision to drop out. I nodded to this in my project proposal, saying,

This [potential outcome] is what I think of as a “Tolstoy result”: successful runs are all alike, but unsuccessful races all fail in their own way.

Professor β asked for a citation on that, so it looks like I either drop the joke, or put Anna Karenina in my references.

Somehow the second course sounds like more fun to me.

Now Playing: Ghost of a Girl by Bluerunners

Posted by pjm at 9:27 PM | Comments (0)

October 8, 2006

The simplest possible way

Professor γ, like most other CS professors, takes a tiny bit of pride in being able to manage her own course website. She hasn’t gone to the extreme of creating her own proto-CMS, as some professors do, but nor has she admitted that maybe there are some tools out there which would make this task easier.

Notably, while the course website changes with some regularity, there’s no way for students to be aware of the changes, short of visiting the pages on a regular basis. They’ve mentioned this to me—in fact, someone specifically requested a feed.

Fortunately, Professor γ is also a fan of RCS, the grandfather of all revision control systems and the foundation of the widely used CVS. RCS includes a tool called rlog which produces a revision history of a page, including revision notes if they were included at check-in time. It only took me two evenings to come up with a Perl script which would pipe rlog output into an Atom feed. Minimum work-flow friction.

In the event that this sort of thing is useful to anyone else, I’ve posted it for general use. Any Perl hackers interested in improving my code are welcomed.

Now Playing: Crime Scene from This Stays Between Us by Black Tie Dynasty

Posted by pjm at 8:46 PM | Comments (0)

October 5, 2006


I know you all, like my lab students, are comfortable with my infallibility, so you’ll be shocked to hear that I’ve mistakenly misled you all. Last spring, I contemplated the number of possible configurations of an Othello board and decided that the game was just too complex for the current state of computing. Yesterday, our colloquium speaker pointed out researchers from his group at the University of Alberta had written Othello-playing systems which were beating human champions nearly ten years ago.

As usual, there’s always more for me to learn. And I almost contemplated going back to Edmonton.

Technorati Tags: , , ,

Posted by pjm at 8:46 PM | Comments (0)

October 2, 2006

You can fix things by whining about them online

This morning, amid several software-upgrade reboots, the rogue CD spontaneously ejected.

Technorati Tags: ,

Posted by pjm at 10:47 AM | Comments (1)

October 1, 2006

Platform damage

I’m worried about my Powerbook. Specifically, I’m worried about the CD drive.

I got a CD about a week ago with photos from the relay. It was in a padded envelope, but otherwise unprotected. When I put it in, it didn’t mount, nor did it eject.

It’s still in there. Every time I wake the computer from sleep, it tries to spin up the disc and fails, noisily. I suspect the disc itself is probably toast by now, judging from the noise. It’s a slot-loading drive, so I’ve had no end of trouble trying to eject the disk. I zapped the PRAM and reset the power manager (both per Apple’s suggestions,) and though the PRAM reset seemed to be poking the drive in the spot that hurt, it didn’t get the disk ejected. None of the available software tools will even admit that the laptop has an optical drive, which is a bad sign. (I’ve let this go on so long only because I’ve had more pressing deadlines to deal with.)

This drive is actually the second I’ve had in this laptop; it replaced the original one about a year and a half ago. Considering the troubles the tray-loading drive had (and still has) in the iBook which preceded this, it looks like optical drives are the weak spot of the Apple laptops I’ve had. I’ve considered trying to open it up and physically remove the disc, or at the very least disconnecting power from the drive. This may mean I’ll have to take a trip to Cambridgeside in the not-too-distant future, because, as the tech who put the drive in said,

this may be worst notebook to disassemble in the world

Note to self: back up HDD.

Now Playing: Monster from ‘Mousse by The Nields

Technorati Tags: , ,

Posted by pjm at 7:59 PM | Comments (0)

September 20, 2006

If Tolstoy was a programmer

Working programs are all alike, but every buggy program is buggy in its own way.

Technorati Tags: ,

Posted by pjm at 3:28 PM | Comments (0)

September 7, 2006

Yet another markup system

I’m finally learning TeX. (Four days ahead of my lab students, I think; I’ll be teaching it on Monday.)

I am losing track of the various methods I’ve learned, over my lifetime, for marking up plain text so it can be displayed in neatly-formatted ways for reading. There’s all the various word processors (three that I can think of,) then HTML in its various iterations, Markdown, POD (which I only picked up a few weeks ago), and now TeX.

At least I never got to manually editing PostScript.

Now Playing: Thankful from Winter Pays For Summer by Glen Phillips

Technorati Tags: , , ,

Posted by pjm at 10:36 PM | Comments (2)

September 6, 2006

Oddly-named hires

It seems there is a career in software for me after all.

Technorati Tags: , ,

Posted by pjm at 9:32 AM | Comments (1)

August 28, 2006

Good data leads to good science

So the internet blowhard says, a common, open data format for training data would “open the doors to … comparison of training data … [and] free developers from creating end-to-end solutions”.

And the cynic says, “Yeah? Name one example.”

And the internet blowhard blinks, then says, “Imagine if the National Runner’s Health Study didn’t send a paper questionnaire, but a little utility application which extracted the appropriate answers from your log data?”

Imagine if that application could “ask” your training data specific, detailed questions, prompt you for information only if it couldn’t find the data itself, and then “phoned home” the anonymized data?

I think you could even get a grant to write such a utility, if the data formats permitted it.

Posted by pjm at 8:51 PM | Comments (0)

August 18, 2006


I heard the telltale “Sssss” of the liftoff last night, and looked out the window to see smoke in the park across the street: someone else was launching rockets in the park! I looked up, but didn’t see it come down; I did hear what I thought was a little voice saying, “Daddy, do it again!”

As I made dinner, I picked out the man doing the launching, and what was probably his son sitting on the ground not far from the launcher. I watched them fuss over something which was probably the rocket; I saw the streamer. Eventually they had it set up to launch again, and I thought, it really looks like they’ve got the pad at quite a dramatic angle, don’t they?

Well, apparently they weren’t *ahem* exactly rocket scientists. (Granted, most hobby rocket launchers aren’t, myself included.) I watched it launch, then flinched even though I was across the park from them: it did a tight loop, then drove straight into the ground about twenty meters away from them, still blazing. Then it puffed smoke (the tracking smoke) and popped the ejection charge. Don’t know what that did; I expect it may have ruptured the body tube. I heard someone shouting; there were others on the field, who probably weren’t too thrilled to have this landshark flying nearby.

There are some pretty cool photos of this sort of thing on Flickr; this is the best one, and contains a pretty good explanation of what happens:

… Luckily, that setting perfectly captured the full trajectory of this chaotic flight of instability. The rocket had too heavy a motor in the back, a J-class motor in this case if I recall.

For those of use who have set off a bare Estes rocket engine as kids and watched it skip randomly through space, you have a sense of what happened here. You can add a nose cone and some fins to a motor, and it will be still be unstable. You need a proper balance of weight and thrust vectors. … To be stable, the rocket’s CP (Center of Pressure) should be one or two body diameters behind the CG (Center of Gravity).

The fins are there to streamline the flow of air and provide a large surface area and help to keep the center of pressure below the center of mass of the rocket.

This is why I didn’t fly my newest rocket this week; I don’t know where the center of gravity is, and I haven’t tested its stability yet.

Now Playing: Americans in Corduroys from Ghost Repeater by Jeffrey Foucault

Posted by pjm at 1:15 PM | Comments (1)

August 16, 2006

Retro rockets

Tuesday's lineupYesterday at noon, the CS department model rocket team met for another flying session on the athletic fields. We were pretty lucky with the weather; it had stopped raining just a short time before, and the wind had not yet picked up. We could pick our launch times between gusts.

We made six launches, one each of six rockets, and recovered five of the rockets, which is an excellent record for us. Last time, we did five launches between three rockets, and only recovered one of the rockets. I launched three of my old rockets, which we figured were probably on the order of twenty years old; they’re the ones in red on the left, an Estes Echo, Estes Courier (with decals from a Vector), and an unidentified kit. (Unsurprisingly, none of these are still in the Estes catalog.) I also sent up an Estes Swift (in bright orange,) a new construction. We launched another Swift and a Cosmic Cobra as well.

My “retro” rockets did pretty well. They had all required fin repair, and in some cases I had to replace the shock cord holding the nose cone, streamer, and body together. The Vector and the Echo, respectively my first-ever rocket and my first no-parental-assistance rocket, had unremarkable flights; the Echo, I think, had some issues with the streamer coming out, even though the nose cone detatched, so it hit pretty hard, but only suffered some minimal damage. The larger, unidentified kit landed on a concrete pad and dinged one fin; it’s still flyable, but I’m tempted to get a sheet of balsa and cut a new fin. All three have paint job problems, the big one worst of all, but they’re not really durable enough to be sanded down and repainted. Plus, who cares what it looks like when it’s in the air?

I used quite a few old engines and igniters, as well, and was pleased to discover that after twenty years in a tackle box, they all worked fine.

The Swift, billed as one of Estes’ smallest rockets, is supposed to eject the engine with the ejection charge and then “tumble” back down, being pretty light. It flew quite high, though—high enough that we lost sight of it even before we heard the ejection charge pop. We never saw it come down. The other Swift, which had made a successful flight and recovery last time, didn’t eject its engine; instead, it blasted off its nose cone. We lost sight of it as well, but found the body when we were recovering another rocket.

The Cosmic Cobra was the most dramatic launch of the day. It’s supposed to have a chute for the body and a separate recovery system for the nose cone, but all this stuff packed pretty tight in the tube, and the nose cone didn’t come off at all. Instead, the rocket just augered in nose-first, planting the nose cone two inches into the dirt and buckling the body tube. I think the owner plans to get a new body tube and rebuild for another flight.

Technorati Tags: ,

Posted by pjm at 10:10 AM | Comments (2)

July 31, 2006

Scavenge and salvage

While I was back in Maine this past weekend, I rooted around in the corners of my old bedroom which are still left to me, and found what’s left of my previous forays into model rocketry. I hadn’t been able to place how old I was when I did this, but when I opened up the launch controller, it turned out that the batteries had a “best before” date of 1991, so that puts a loose upper bound on things.

I also found five—five—rockets. Somehow I had the idea that I’d only had two, or maybe three. Unfortunately, all of them were in unflyable condition; apparently once they suffered damage, I just put them away and never got around to fixing them. Three I judged fixable; they all had some level of fin damage, with the fins either hanging loose or completely detached. I should be able to fix those with some sandpaper and white glue. They also need a little attention to the recovery systems; they’re all streamer recovery rockets, but in general the “shock cords” holding the streamer and the sections together are brittle and unlikely to survive a launch. I’ll also need to do some research on exactly which models they were, and which engines they should use; more likely I’ll just cram in something that fits, though. The paint jobs are uniformly bad; some of them might be helped by sandpaper, others I’ll just have to ignore. It doesn’t matter what it looks like when it’s five hundred feet up.

Two of them were unrecoverable. One appeared to have cracked up in flight, probably because both the engine and nose cone stayed put when the ejection charge went off (and therefore the body ruptured violently.) I salvaged the nose cone and threw the rest out. A second was in mostly good shape; it had a one-piece plastic fin assembly, so it was the only one with all its fins intact. However, the engine from its last launch was securely wedged in the body, and I couldn’t get it out. After fifteen-plus years, probably the cardboard engine casing was fusing with the cardboard tube of the body anyway. I salvaged as much of the plastic parts as I could and threw the rest out; with a new tube and engine stop ring, I could fly the rest of it again.

There were quite a few engines in the box, but only one igniter. I’m not sure if engines keep or not, but it might be worth giving them a try. Perhaps when I get shock cords, tubes, etc., I’ll look for some igniters as well. I also found a small bottle of spray paint—not the same color as the rockets, so I’m not sure why it was with them—that I might use on new constructions.

A is beginning to sigh and roll her eyes whenever I talk about this recent hobby, so you’ll have to suffer through me talking about it here.

Now Playing: Accidents Will Happen from Best Of by Elvis Costello & The Attractions

Posted by pjm at 12:20 PM | Comments (3)

July 30, 2006


That (the phrase in the title) is an ugly neologism for the subset of the so-called “blogosphere” which uses Movable Type. If I catch anyone using it, I will attempt to collect intellectual property damages sufficient to stop them using it ever again, because I desperately hope it never catches on due to its ugliness.

But if anyone reading this is still using MT, (and it seems like everyone migrated to WordPress or the like since I started using MT,) I’d be interested in hearing about your plugins. I’m compiling a list to be included in a general MT installation, on the theory that installing a slew of plugins from the start will pre-empt user requests for them. So I’d be interested in hearing what you’re using, if any, so I can check them out and add them to the list.

In the course of this project, I’m learning more about the guts of MT than I ever expected to, and I’ve been putting some of what I’ve learned into this site. (For example, I figured out how to fix the search result templates to match the rest of the site design.) Tonight I added a few plugins which will be visible in comment displays: gravatars and a plugin which puts a different background color on comments I make, so they stand out from everyone else’s (so you can see how much more of a knucklehead I am than my commenters.) I could conceivably pick background colors to designate frequent commenters, but since it requires a complete rebuild of 1400-some-odd pages to apply this to previous entries, maybe I’ll hold off on that. You can see both plugins in action in the comments to this entry, and I promise it’s a coincidence that both gravatars are cat pictures.

(Of course, I’m having more fun playing with the software than using it. This was, originally, part of the point of the whole exercise, but I have to make silly self-referential posts like this one in an attempt to share, because let’s face it, televised fishing is more exciting than watching me play with software.)

Now Playing: Junior Mint from Yellow No.5 by Heatmiser

Posted by pjm at 10:00 PM | Comments (0)

July 27, 2006

I changed the locks

One feature of PGP-style digital signatures is the expiration date. It’s a hassle, on the face of it: past a certain date, the key can’t be used for encrypting or signing. It usually expires at an inconvenient time (when you don’t have five minutes to generate a new key, for example,) and leaves you keyless until you can generate a new one.

On the other hand, leaving a key without an expiration date makes it harder to invalidate if the passphrase is compromised (that is, if someone else cracks your key, it’s harder to prevent them from decrypting messages sent to you with that key, or from signing as you.) With an expiration date, you know the problem will go away at that time. And just as it helps keep codes secure if you change them from time to time (the longer someone has to work on a code, the greater the chance that they’ll eventually break it,) it helps to change your key from time to time.

My key expired last week, and I just got around to generating a new one. My key program asks what size key I want, starting with 700-some-odd bits and going through 1024, 2048, and 4096. I chose 4096. Now it’s taking some serious time to generate enough entropy to make the key—it’s been going well over half an hour now.

From Cryptonomicon:

Even a 768-bit key requires vast resources to break. Add one bit, to make it 769 bits long, and it becomes twice as difficult. A 770-bit key is twice as difficult yet, and so on. By using 768-bit keys, Randy and Avi could keep their communications secret from nearly every entity in the world for at least the next several years. A 1024-bit key would be vastly, astronomically more difficult to break.

Some people go so far as to use keys 2048 or even 3072 bits in length. These will stop the very best codebreakers on the face of the earth for astronomical periods of time, barring the invention of otherworldly technologies such as quantum computers.

The longer the key you are trying to generate, the longer this takes. Randy is trying to generate one that is ridiculously long. He has pointed out to Avi, in an encrypted e-mail message, that if every particle of matter in the universe could be used to construct one single cosmic supercomputer, and this computer was put to work trying to break a 4096-bit encryption key, it would take longer than the lifespan of the universe.

Is this overkill? Heck, yeah. But it’s fun.

Update: Cool, yeah. Practical, no. After well over an hour of generating, still no key. I generated a shorter key and posted it; maybe I’ll try again with a longer key later.

Now Playing: You’re Aging Well from The Honesty Room by Dar Williams

Posted by pjm at 12:15 PM | Comments (0)

July 26, 2006

Restricting blog-administrator privileges in Movable Type

This morning’s project for MPOW drops a heavy hint about what we’re trying to do: could I find a way to give a user in Movable Type blog-administrator privileges (that is, the ability to change settings like the blog name, description, archive method, etc., as well as add/edit/delete entries, change templates, and so on) without letting them change the server path (the directories in which the blog is actually located on the server)?

Changing server paths is a dangerous step on a multi-blog installation. Since all the files are owned, in the filesystem, by whatever user MT.cgi itself runs as, if you change the path for Blog α to match the path of an existing Blog β, then rebuild Blog α, MT will cheerfully overwrite any Blog β files with matching names, including all the feeds, indexes, etc. Then, if Blog β is rebuilt, it will clobber Blog α, and so on. Bad scene.

So we decided to keep that power for the system administrator, not blog administrators. It’s actually pretty simple, if you want to do it on your own multi-blog installation; it just requires some tinkering with the admin interface templates, which are, as near as I can tell, largely undocumented.

  • Find the admin templates. On a default MT install, they’re at $MT_CGI_PATH/tmpl/cms/.
  • Edit cfg_simple.tmpl. Lines 174 through 200 are the ones which show the path information; add <TMPL_IF NAME=IS_ADMINISTRATOR> at the beginning and </TMPL_IF> at the end. You may want to use HTML comments (<!-- comment here -->) to indicate your changes later.
  • Save cfg_simple.tmpl.
  • Edit cfg_archives.tmpl and make the same changes around lines 152 through 210. Save that file.
  • Make a note somewhere about your changes, so if you accidentally blow your changes away in an MT upgrade, you can re-create this!

Now, only a system administrator (not just a blog administrator) can change server paths for blogs on your system.

Now Playing: It’s A Fast Driving Rave Up With The Dandy Warhols Sixteen Minutes from Dandys Rule OK by The Dandy Warhols

Posted by pjm at 11:24 AM | Comments (2)

July 25, 2006

Lunch Launch

So the CS grad students finally delivered on our promise (threat?) of a group rocket launch. Five of us headed across the street to the athletic fields to launch three rockets from two pads.

Wizard on the padOne of the rockets was mine, an EstesWizard” which I had opted, in cheerful disregard of the packaging, to paint in fluorescent orange. Because the orange paint was semi-transparent, I spent a few half-hours over three evenings last week applying first a base coat of white, then two layers of orange. The result was even brighter than the signal-tape recovery streamer which was supposed to provide visibility. I had the first launch, with an A8-3 engine, and it was a good one, with the rocket eventually landing in mid-center field in the softball field. We decided to move a ways upwind before launching again.

One of the other two rockets was a tiny little thing, I think a Quark, basically way of putting fins on an engine, and it didn’t even have a recovery method (Estes calls this “tumble recovery.”) It “tumbled” into the baseball field, and we didn’t retrieve it immediately. Instead, we turned to launching a Patriot (complete with decals, so it must’ve been a kit-build like my Alpha.) With an A engine, it got off the pad, but didn’t make it a hundred feet up before stalling; it barely got its chute out in time to land softly. I donated one of my C engines (that’s four times as much net thrust, for those keeping track at home,) for the second flight, and put a B in my Wizard. Then we tried a “drag race:” with both rockets on the pad, we counted down and pushed buttons at the same time.

Bs must light quicker than Cs, because I was off the pad before the Patriot was even blowing smoke. Zip! Beautiful flight, right into the sun; I heard the pop and saw the tracking smoke from the end of the engine. Then I lost track of it, bright orange and all; none of us saw it fall.

Estes QuarkProbably we were distracted by the Patriot, which went even higher. It popped its chute beautifully, and then proceeded to drift right out of the fields and into the neighborhood, much like my Alpha did last week. (We must learn not to launch on breezy days.) We tracked it down but couldn’t spot its final landing spot. Two of us wandered around the neighborhood for a few minutes, checking yards and rooftops, but didn’t find it.

My guess on the Wizard is that the ejection charge didn’t pop the nose cone out at all; instead, it ejected the engine itself, which I did find shortly after we retrieved the Quark from the baseball field. That means the rocket probably came down nose-first, and pretty fast. I rolled around the fields on my bike but didn’t see any trace of it. I’ll keep my eyes open, but I’m not too worried. Now I’m thinking about what to build (and launch) next. I might get one of those Quarks, but I think I’m really interested in boosting a big engine.

Now Playing: Amber, Ember, Glow by Saxon Shore

Posted by pjm at 9:40 PM | Comments (0)

July 17, 2006

Base knowledge

I get unnecessarily intimidated by the thickness of certain tech books. Unnecessary because a lot of books are obligated to spend a chunk of pages introducing concepts I’m already familiar with.

Take, for instance, this JSP book I’ve been picking up. I’ve spent maybe two hours, total, on the book, but I’m well past halfway through. Why? Because I skipped the chapter introducing me to HTML, the half-chapter on database normalization, SQL, and installing MySQL, and skimmed all the reviews of coding in Java.

Now Playing: One Down from Ben Folds Live by Ben Folds

Posted by pjm at 10:52 AM | Comments (0)

July 16, 2006

Cleared for liftoff


There are a lot of portrait-framed images in the Flickr Rockets pool. And some really cool stuff, if you like the idea of building stuff and then launching it hundreds of feet in the air. (Multi-engine clusters?)

I had a successful launch this morning, my first in decades, with a smaller-sized engine (an A8-3.) Engines are graded according to total thrust (the letter,) average thrust in newtons (the first number), and the delay between the end of the burn and ejection of the recovery system, also in seconds (the second number). Each letter step indicates a doubling in total thrust, so the B6-4 I’m planning on launching this afternoon will provide twice as much lifting force on the same rocket—plus the slightly longer delay before ejecting the chute should let it “coast” a bit longer, which is useful with such a small rocket. However, there are softball games going on in the park, and I think I should wait for a window in their play before I go out and launch higher. Recovery of this one almost ended in a tree as it was, because I went to an unoccupied corner of the park. (See the video.)

I discovered, in surfing around to links found via the Flickr pool, that anything flying with an E engine or lower is rated a “low power” rocket. I never flew anything bigger than a B myself, but there’s a lot of interesting stuff out there!

Update: Great launch this afternoon with the B6-4. Unfortunately, in the recovery phase (i.e. coming down with the ‘chute open) it drifted out of the park and onto the roof of a house that abuts the park. I can see a bit of the rocket in the gutter, and the ‘chute hanging out. So that’s a loss, and my fault for not selecting my range well.

Now Playing: Not The Same from Rockin’ The Suburbs by Ben Folds

Posted by pjm at 12:54 PM | Comments (0)

July 14, 2006

Early adopter

I’ve upgraded this site to Movable Type 3.31. This is an unusually early upgrade for me, but there’s a good reason for it: it’s research for work.

Let me know if you see anything weird out of the ordinary.

Now Playing: Seasons Changed from My Friends and I by Patiokings

Posted by pjm at 11:38 AM | Comments (0)

July 12, 2006

The Xpert

I’m back to work. Not that I haven’t been working, but it’s getting absorbing again. Yesterday’s meeting bred another one later in the day; I’m learning CVS and facing JSP again. (Honestly, what is it about Java? Is it that people learned it sometime in the 90s because of the buzz, then felt like, well, now I know it, I need to use it?)

I spent today on very basic stages of taking apart Movable Type—looking closely at the templates and how they’re managed over the life of a multi-blog installation, for example, and then reading up on the Perl code and the API with an eye to short-circuiting parts of the administrative interface.

The part I find most amusing is that I appear to have become the XSLT person on the team, not because I profess to know XSLT particularly well, but because my exposure to it is more recent than anyone else’s. XSL, for those who are mystified by all these TLAs, is a way of “styling” raw XML, but it’s beyond CSS; it lets you select content based on its context within the XML document. This is where the “T” comes in; with an engine to apply XSL Transformations to an XML document, you can make any well-formed XML document into pretty nearly any other format of well-formed XML document. And since we’re going to be handing a lot of stuff around this application in XML—several flavors and channels of web feeds, for example—being able to XSLT them into whatever we need is helpful.

So all that XSLT stuff I downloaded last semester is going to come in handy for development work. But right now? Not really XSLT; rather, generating a servlet interface for Saxon and getting it running in Tomcat. Because what’s the use if we can’t talk to it from Java, right?

For those keeping track, I’ve added NetBeans (because I need another IDE, of course) and SmartCVS to the list of tools on my Powerbook.

Posted by pjm at 9:58 PM | Comments (0)

July 7, 2006

I've found my people

I guess I knew when I started this whole adventure that I was leaving behind my self-image as a humanities major and embracing my inner geek. But I’ve never had it confirmed so sharply as an hour ago, when I stopped by the CS building to pick up a bottle I’ll need for tomorrow’s Mt. Washington expedition.

I ran into two guys I run with regularly, and they said, “Hey, we’re thinking we should have a model rocket regatta.”

I said, “You mean, like the Estes rockets with the chemical engines?”

And within five minutes, we had not only decided that we had to do this, and set a date, but were planning to buy a department launcher (or build our own; it’s just a pair of alligator clips and closing the circuit on a 9V battery.) And we were planning to invite the EE and MechE grad students, too, because who knows what we could build and launch if we had access to a machine shop.

Let’s hope I remember to take pictures.

Now Playing: Nothing to You by Two Gallants

Posted by pjm at 1:45 PM | Comments (0)

June 16, 2006

Finally, the Panic pays off

I just got another task for MPOW. Never mind that I heard about it at 6:30 PM on a Friday; I’m a grad student, I no longer have borders between work time and personal time.

This may be the first task in the ten months I’ve worked here where I’ve needed zero research to figure out what I need to do. They want me to install Movable Type. (Hmm, I’ve done that.)

But I guess they figured I needed some extra challenge, so this time, I get to do it on Windows.

Now Playing: Stripmining from Strip-Mine by James

Posted by pjm at 7:16 PM | Comments (0)

June 8, 2006

Neat trick

There are two nifty gizmos out on the field here at the Sacramento track. Between the two shot put sectors, where the throwers are currently in their qualifying round, are two long snakes of black PVC drain pipe. The end away from the throwing circle is elevated about three feet on a stand. About two feet from the other end is a chunk of two-by-four which elevates the throwing-circle end slightly; then there’s a horseshoe-shaped barrier next to the ring.

As the officials mark the fall of the shot, they hand the implement over to a volunteer, who feeds it into the outboard end of this pipe. The shot rolls down to ground level, then takes that momentum to roll the rest of the way back to the throwing ring. The two-by-four at the receiving end slows it down with a short uphill before it pops out next to the throwers again and is stopped by the horseshoe barrier.

Now that I think of it, it looks a lot like a home-made bowling-ball return system, except that shot are only about the size of candlepin balls even though they’re heavier than most duckpin balls.

Posted by pjm at 8:43 PM | Comments (0)

Useful software

When I was preparing to hand in (by email) my Theory problem set on Tuesday night, I was faced with a problem. I had diagrammed several finite automata (don’t worry about what they are, just remember that while they can be defined mathematically, it’s usually faster to draw them,) in OmniGraffle, but since OmniGraffle is lousy for text answers, I’d done those in Word. I had two documents to turn in. Here’s how I worked it:

  • Make PDFs of both documents. On the Mac, that’s as simple as printing them.
  • Use PDFLab to interleave the appropriate pages of the two PDFs in the appropriate order. Output: one hand-in-able PDF.
  • Email the result.

This is great, useful software; if you use a Mac, take a look (and check the other applications on the same site.)

Posted by pjm at 4:19 PM | Comments (0)

June 4, 2006


As of this morning, I am the Web Editor for my college class. I saw the position was vacant when the call went around for nominations for class officer, but I figured that (a) I’m not the only geek in the class, and (b) I’ve got plenty to do. So I didn’t say anything. When the ballots were out, there were choices for most options, but that one just had a blank: no nominations. I left it blank.

I figure one person wrote my name in, and everyone else left it blank like I did.

I have a few guesses about who may have been the guilty party, and they can expect to be nominated for something in five years. What will depend on how tough this job turns out to be.

Now Playing: Southern Belle from Elliott Smith by Elliott Smith

Posted by pjm at 9:59 PM | Comments (4)

May 26, 2006

Once more, with complications

I moved again this week. For various reasons to do with server software versions, the new web host wasn’t working, and A’s blogs needed to return to their original host, albeit with the new domain name.

One of the catches here was that in the previous move, we were going from one established (by which I mean, DNS pointing to the appropriate host) domain to another. This time, I was moving from an established domain to one which was not established. This isn’t difficult by itself; there are plenty of ways to move files, and I did spend a good chunk of time synchronizing files between the two hosts.

More problematic was shifting the database. To begin with, I could only access the database at the target host after I’d shifted the DNS. (I had to create a new database, rather than refreshing the old one, due to the domain name change.) This introduced a lag into the transition, which was troublesome but not a crisis; since the sending host was already effectively unusable, having the target host unusable as well wasn’t the end of the world.

The bigger issue was the upper limit on the size of import files to the new database. This host sets a 10MB limit on the size of files which can be imported into its databases; the export file from the database is on the order of twice that. I tried breaking it into smaller files, with little success; I got the table structure, but large numbers of entries and comments weren’t imported.

Finally, I tried running the export table by table, with one file for each table, and running the import in the same way. The mt_entries table, which holds the actual text of each blog entry, was still prohibitively large (12MB,) so I broke it into two pieces. It still took some time to import; I also spent a chunk of time combing through the files with grep to find links to the old domain and update them. (I didn’t change all of them, since the domain is still in use, but I changed quite a few.)

Once I was satisfied with the database import, I went through and “rebuilt” each blog, which is simple but tedious. I also discovered one thing I should’ve corrected in the database file: the absolute path of the weblog root and the archives is stowed in the database, and when you shift from one host to another, that changes. I’m manually changing it, blog by blog, before the rebuild.

During the course of this, my laptop again began to get significantly hot. This time, I went to the freezer and got out a bag of dried something (corn? peas?) used for icing balky joints, and put the laptop on it. So far, this has helped significantly.

Now Playing: Window from Inarticulate Nature Boy by Josh Clayton-Felt

Posted by pjm at 6:09 PM | Comments (3)

May 23, 2006

Backup technology

Car audio has done some evolving in my lifetime.

For the longest time, I simply counted on having a tape player in the car, and I littered the car with cassettes. When I shifted my music purchasing to CDs, I taped the CDs for the car. In my first car, the cassette deck was bolted below the dashboard, and though it supposedly managed auto-reverse, in one direction it would only play the left-side stereo channel, so I turned the tapes over anyway. I cultivated the ability to pop out the tape, flip it one-handed (I think I slapped it against my knee to change my grip,) and re-insert it.

At some point after college, I obtained a portable CD player and a cassette adapter, which finally rendered cassettes obsolete. Still later came the iPod, of course, which conveniently plugs into the same cassette adapters. The cassette player is now simply a plug for input from whatever portable audio I bring along, and a while ago I finally purged the car of all but eight or ten holdout cassettes.

The problem with this arrangement is if my trip isn’t enough to justify hauling out a player, plugging it in, and listening. When I commuted to work, I listened to NPR, but I’m not on such a schedule nowadays, and radio around here, while sometimes interesting, is often not.

So sometimes I dig into the armrest where the fossilized cassettes live, mostly mix tapes from the previous decade. This weekend I found that one of them was a motley collection of Steely Dan tracks taped from my mother’s collection. (Oh, definitely cool.)

And, midway through one side, I heard the unmistakable sound of a needle being placed on vinyl. (Aja, I believe.) Now that’s something I hadn’t heard in a long time. Particularly not in the car. A cassette tape recording of a vinyl LP.

Now Playing: Clean Up Kid from Songs From The Other Side by The Charlatans

Posted by pjm at 12:41 PM | Comments (2)

May 20, 2006

At least it didn't explode

My brother and I, with some unfocused help from his daughters, set out to build the water rocket this afternoon. Unfortunately, it didn’t fly, but I take comfort in the fact that the diagnosed problem was one even the pros have suffered from: an O-ring issue. Because we had trouble sealing the neck of the bottle on the launcher, we couldn’t pressurize the launch vehicle before all the fuel leaked out.

Had this been the Simpsons, the rocket would have burst into flames at this point, but fortunately we avoided that outcome.

However, we did also find a handful of grass in the launcher tube. Upon questioning, the older daughter admitted that she thought it would be a good idea. Why, of course, she couldn’t explain.

Posted by pjm at 9:39 PM | Comments (0)

May 18, 2006

Note to Powerbook owners

I’m probably not the only Powerbook owner in the world who’s lost one of the four rubber “feet” on the bottom of the machine. It’s a little thing, but hugely annoying at times. Because I lost the one attached to the battery, under the right front corner, when I try to work on any kind of flat surface, because the machine rocks back and forth depending on whether I have my right hand resting on the Powerbook or not.

I took it to our local Apple store back in the fall, but they didn’t have any spare “feet” to offer. I learned that I could work tolerably well by sticking a coin under the corner: nickels, T tokens, and one-yen coins are all exactly the right thickness (though the yen are the least expensive to forget when I stand up, if you ignore the import costs.)

I also did some web research, and discovered there’s a cheap fix for this. Tonight I remembered to grab a package of the things at Staples, and sure enough, I now have a non-rocking Powerbook. So even though his machine is (apparently) a TiBook, the process still works with 12” Aluminum models.

(Yeah, I saw the new MacBooks. Yeah, they look interesting, but I’m quite fond of this 12” size. I should buy a new machine while I can still get a student discount, so that gives me not-quite a year to get used to the idea of a larger, heavier (but faster!) computer. And that awful name.)

Now Playing: One Cigarette by Jim Bryson

Posted by pjm at 10:51 PM | Comments (0)

May 17, 2006

One guy and a hot laptop

There’s a moving company in Amherst that goes by the name, “Four Guys & A Big Truck.” They have more than one truck now, and I suspect more than four guys (though there’s always some daydreaming about a complicated scheduling scheme, like the Greek theater three-actors-on-stage rule, which prevents more than four guys working at once.) The point is, they specialize in household moving.

Tonight, I picked up A’s blogs and moved them from one domain and one web host to another domain on another host. It took a bit more than three hours, all around. Here’s how it played out:

  • We had the new domain already running on the new host. I installed Movable Type there this afternoon.

  • I did a “dump” of the MySQL database from the old host. The “dump file” is a lengthy string of SQL commands needed to recreate the database on another server; it weighed in at 38MB, but downloaded surprisingly quickly.

  • I then imported that dump file at the new host. If I was doing this on machines I’d set up myself, I’d be using the command line mysqldump and then using the dumpfile as stdin for a mysql run, but in this case I used the provided phpMySQL, which may have slowed things down a bit. At any rate, this process is slow: something on the order of half an hour.

  • Meanwhile, I slowed it down even more by going through the old directory tree via FTP and downloading all the files which wouldn’t be part of the database download: graphics files, generally, but occasional static HTML files as well. I created empty directories for each blog on the new server and started uploading these extra files into those directories.

About midway through this process, I realized it would be faster if I jacked an ethernet cable directly into the network rather than using the wireless, and sure enough, things picked up at that point. With two FTP processes running, plus the MySQL import, my machine was getting downright hot, not because it was doing a lot of computing, but because it was squeezing a lot of data through the network stack. Isn’t it Boyle’s law which explains how compressed data is warmer than uncompressed data?

  • Once the database and all the files were uploaded, we were able to log in to MT (with all user logins and passwords intact!) and simply issue a “rebuild site” command for each blog to regenerate the main pages, archives, etc. Some of these took longer than others, but once they were done, we had working weblogs on the new server.

  • At this point, I dropped an .htaccess file on the old server with a block of mod_rewrite directives which send any traffic headed for the old site to the correct new address. Result: no broken links.

  • Then I spent some time checking to make sure everything more-or-less worked, comments were going through, and I’d found most of the non-database pages.

I think that’s the fastest address change I’ve ever been involved in.

Update 5/18: Bonus: because the mod_rewrite block causes the old server to return a “301 Moved Permanently” error along with the new URL, NetNewsWire has automagically changed my subscriptions. I’m betting Bloglines does the same.

Posted by pjm at 10:42 PM | Comments (1)

May 16, 2006

That gooey stuff in the middle

It’s common in the computer field to get two levels of answer to a question about how something works. One level is the extreme close-up, where the explainer starts talking about ones and zeroes, logic gates, instruction pointers and memory registers. The other level is the ultimately abstracted, either the pure pseudo-code of algorithms and theory or the follow-these-steps-and-don’t-ask-questions how-to guide. I find both of these answers ultimately unsatisfying, because I still want to know what’s in the middle. I can boil pseudo-code down into C if I need to (now), but even C is still abstracted to a pretty high degree. As an undergraduate I took a hardware-architecture course which explained the low-level stuff, and I believe I wrote assembly code to print out a perpetual calendar, but that’s not much of an answer, either; it’s like waving your hands around in a Home Depot and saying, “Yep, everything you need to build a house, it’s all in here.” You still don’t know how to build a house; you just know where all the tools are.

The Parallel Computing course I took this past semester was a bit like that. The textbook spends some time early in the course explaining some of the architecture issues, essentially pointing out that splitting up a program among multiple processes usually also requires the processes to communicate with each other, and that there are a lot of different approaches to this problem. Then there was this quick hand-wavy transition where it was announced that the MPI library would allow us to write programs which handle all this interprocess communication, and then poof, no more discussion, just MPI functions.

I suppose this is fine, if you’re a programmer, but two of my current projects for MPOW involve installing various permutations of the MPI libraries (it turns out that you can pick your MPI—we’re working mostly with LAM-MPI but that’s becoming OpenMPI, which is also what Xgrid plays most nicely with.)

(An aside for non-programmers: “Libraries” of code are files of generic functions which programmers can call in order to avoid reprogramming a certain operation. If you “include” a library in your program, you gain access to all those functions. For example, I could rewrite a function to calculate the square root of a number, but it’s about a thousand times easier to include the C math library and use the sqrt() function it provides.

The MPI libraries, then, are “simply” a large quantity of pre-written code which handles all the interprocess communications issues of parallel computing. There are multiple versions of the MPI libraries because MPI itself (which stands for “Message Passing Interface,” by the way,) is only a standard, and there are many differing ways to write code which meets the standard.)

More so than most other libraries, MPI has to wrangle with a lot of system-specific issues. How on earth, for example, does the same MPI library deal with both our research cluster and an Xgrid cluster? It seems like the development team is actually grappling with those questions, judging from the mailing-list archives I find on my Xgrid research searches.

I feel like there’s a lot of cool stuff going on in that gap between the close-up view and the big abstraction, and it makes me curious.

Posted by pjm at 2:33 PM | Comments (0)

May 14, 2006

Summer plan

I am so making one of these this summer.

Posted by pjm at 5:12 PM | Comments (0)

May 12, 2006

Deer Park vs. Safari

Back in January, I switched my default browser again. I’ve gone back and forth between Camino and Safari in the past, and sometimes flirted with Firefox. I’ve been intrigued by the architecture-specific builds of Firefox, the so-called “G4-optimized” versions, so I finally tracked down and installed Deer Park. Then the semester started, and I never went to the trouble of wrapping up the experiment and switching back; I’ve been using Deer Park for months now.

Deer Park is so called because it’s not an official QA’d build distributed by the Mozilla Foundation; it’s an exercise of open-source rights, the product of a few determined people downloading the Firefox source code and building it. (Why? Because MoFo, preaching the message of simplicity and evangelism, has to produce a single Firefox binary which works on all Macs. But there are G3s, G4s, and G5s out there, as well as a growing number of Intel Core Duos, and it’s potentially possible to make a lighter and faster browser by compiling binaries specifically for each architecture.) There’s some identity issues as a result; for example, the browser identifies itself as “Firefox” in my menu bar, but as Deer Park in the dock.

Last time I played with Firefox, I was left with three problems which kept me from making it my full-time browser:

  • No go-away button on the tabs. I like that in Safari and Camino.
  • No keyboard shortcut for “go to home page.”
  • Windows-like form widgets, not Mac OS Aqua widgets.

The Deer Park build I installed offered a choice of builds with Firefox widgets or Aqua widgets! I cheerfully grabbed the Aqua-widgets version and checked that item off the list. I’m not sure if it’s actually faster than the MoFo build (or, for that matter, Camino,) but it solves this problem, so it’s worth the custom build. Then, I found and installed the TabX extension and checked the “go-away button” problem off my list.

Keyboard commands remain an issue, and there’s a bug in Bugzilla for them. The problem, as I see it, is that on the Mac, splat-shift-H means “Home.” That’s the case in the Finder, Safari, Camino, and nearly any other application with the concept of a “home” state. In Firefox—and, importantly, on Firefox on Windows—that key combination opens the history. It turns out that many Firefox developers think it’s more important to be consistent between Mac and Windows within Firefox than to have Firefox be consistent with other Macintosh apps; I’m not sure I agree with the reasoning, but there it is. Another key combination that’s missing is one to allow users to cycle left or right through their tabs; in Safari, splat-[ and splat-] do this. This is still an annoyance to me, to have to go to the mouse or trackpad when I’m used to doing nearly everything with the keyboard. I’m slowly getting used to alt-Home as the “go to home page” key combination, but it’s even harder when I’m using the Powerbook keyboard (where “Home” is mapped to the left-arrow key) because I need to do fn-alt-left instead; I can’t train my fingers to both combinations.

I wound up discovering a few more annoyances along the way. For one thing, Safari allows you to designate a helper app for RSS URLs, and I liked being able to click the “RSS” or “ATOM” buttons and have them plopped right into NetNewsWire. Firefox, and consequently Deer Park, want to handle the feeds themselves. I haven’t figured out a way around that yet, so I’m back to click-copy-paste. I had a similar issue with integration; Cocoalicious would grab URLs directly from Safari, but not Deer Park. I worked around that in a way I hadn’t expected: I installed an extension which added that function to the contextual menu, so I can just right-click (ctrl-click) on a page and post; I don’t even need Cocoalicious anymore.

Which leads me to the last point, the one which may override all the other annoyances: Firefox extensions work just fine. Aside from the two I’ve already mentioned, I also put in the BugMeNot extension and ForecastFox, most notably. I skimmed Julie’s list for recommendations, and while they don’t always make up for the remaining annoyances, they’ll be hard to give up if I do go back to Safari.

Now Playing: The Time Being from Somewhere Else by The Church

Posted by pjm at 6:50 PM | Comments (2)

May 7, 2006


Here are all the things happening in the weekend after Memorial Day, which I might have some interest in attending:

  • The Reebok Grand Prix, in New York City, which I’ve been invited to cover again for

  • My 10th reunion at the College.

  • The Freihofer’s Run for Women, in Albany.

  • The road race my parents have directed, in Maine, which I have (so far) never attended. My nieces are campaigning to run the Kids K, and the call has gone out for patient escorts willing to make sure they make it around.

If only they were more spread out.

Update, 5/14/06: And,

Now Playing: Hard Way To Fall from Jacksonville City Nights by Ryan Adams & The Cardinals

Posted by pjm at 10:47 PM | Comments (0)

May 6, 2006

Now accepting conspiracy theories

I’m in Amherst for the weekend, despite aforementioned quantities of C to be written. I had hoped to have spent five or six hours, by now, holed up in the College library hacking away. I’ve actually managed about two hours of work, and not at the library.

It turns out that, while the library allows guest registration to its wireless network, it’s pretty tight about what kind of traffic is allowed in and out. HTTP and HTTPS traffic, no problem. Retrieving POP and IMAP mail, no problem. Sending mail with SMTP, with or without SSL, no dice. And, the deal-breaker from my point of view, no SSH connections to my University accounts.

I can understand filtering outbound SMTP aggressively; that’s a legitimate anti-spam, anti-malware-contagion step for an open network. But SSH? Almost by definition, an SSH user is making an encrypted connection to a remote system; most likely they’re a registered user there, but either way, they’re not causing trouble for your network. What’s the sense in blocking them?

I went to the local public library and found the same network situation. Ironically, the only place (other than the private network I’m now on) where I was able to get connected was the bakery/coffeeshop where I had lunch.

Any ideas about why you’d filter SSH on a public network? Are those brute-force SSHd attacks still around?

Now Playing: You Dirty Rat from Sister by Letters To Cleo

Posted by pjm at 4:35 PM | Comments (1)

April 26, 2006

My head hurts

In response to an email from a cousin about randomness, I started thinking about how much computational power would be required to model all the possible states of a game of Othello.

It’s entirely possible that my math (and CS theory) is deficient, but I think we managed to conclude that an average game includes something like 3×1030 possible states (greater than the current estimate of stars in the universe by a few orders of magnitude,) and that even applying a supercomputer to a brute-force modeling of all potential games would probably take longer than I expect to live.

I guess I could’ve figured this all out by finding anything published by the IBM team that programmed Deep Blue, which took approximately that approach to chess. The complexity of games is probably not dissimilar, but it’s interesting to try reaching the conclusions on my own. And this is just a simple game that existed before electricity.

Now Playing: Basement Apt. from eePee by Weeping Tile

Posted by pjm at 2:00 PM | Comments (0)

April 25, 2006


It may or may not be a good thing when my preferred mode of procrastinating schoolwork (an based web application due tomorrow night) is other schoolwork (a parallel program involving Monte Carlo simulation.)

I’ve heard criticism of “random” numbers on computers before, but it wasn’t until this year (in two or three different classes) that I finally wrapped my brain around why it’s actually impossible to have a truly random number on a contemporary computer (and therefore why most functions on these lines call themselves “PRNGs” or Pseudo-Random Number Generators.) In a nutshell, and grossly oversimplifying, the problem is that these PRNGs are built to produce streams of pseudo-random numbers—and those streams will eventually, ultimately, begin to repeat themselves. This has security implications: all kinds of interesting things become possible when you can guess the next random number.

But for me right now, the interesting problem is more prosaic: what if you’re running a program (like a Monte Carlo simulation) which depends on a lot of random numbers? More specifically, what if you’re running that program on some arbitrary number of computers greater than 1? The point of running the program in parallel, after all, is to check more random numbers in the same amount of time; if two machines are getting the same stream of pseudo-random numbers, one of them might as well not bother.

(There’s a ton of really cool stuff you can do with a cluster and a stream of really random numbers. Finding integrals in high dimensions, for example: try doing that with calculus. But I’m not there yet myself, and I digress. As usual.)

Enter SPRNG, a marvelous collection of big words: the Scalable Parallel Pseudo-Random Number Generator. I’ve just installed it in my account on our little learning cluster. This is much more fun than

Posted by pjm at 5:46 PM | Comments (0)

April 22, 2006

Story from a bygone age

When I lived in Pennsylvania, I had a roommate from Connecticut. At holidays, he would drive home, and I’d have him drop me off at Newark airport so I could fly up to Maine.

At some point, the heater core in his car started leaking. The heater core, at least in that car, is warmed by hot coolant fluid from the engine block, which is circulated through (coincidentally cooling in the process,) then piped back to the engine to suck up some more heat. When the heater core started leaking, his car reeked of antifreeze, so he took the in and out hoses of the core and short-circuited them so no fluid passed through the core. He also had no heat in the car, but that’s only a minor annoyance; I do recall getting in his car once and having him hand me a blanket.

After driving up to a wedding in New York one winter and having to scrape frost off the inside of his windshield, he finally decided to fix the heater core. Not two days later—and, I might add, the day before we were headed home for Thanksgiving—he discovered that there was a leak in his gas tank. Like many tanks, it was a stamped top and bottom welded together; it was coming apart (and leaking) at the seam. This was discovered by the town fire marshal during a fire drill at our office.

He deduced that as long as the gauge showed he had less than half a tank of gas, there were no leaks, so we had a tentative drive to the airport. But not before I had hauled out my book of Frost and recited “Fire and Ice” to him, of course.

With that in mind, consider the link “L’el” sent last night: If Robert Frost had been a software geek.

Now Playing: Riding on the Subway from The Fine Art Of Self Destruction by Jesse Malin

Posted by pjm at 4:18 PM | Comments (0)

April 19, 2006

Students, free food, and timing

There’s a weekly colloquium here, which is required for Masters students (and, while it isn’t explicitly required for Ph.D. students, it is part of their degree criteria.) There are usually cookies and soda in cups.

The speaker should start by 3:00, so everyone should have cruised the food table (outside the door) and be seated by then. However, there’s an undergraduate ECE course in just up the hall which is supposed to end at 2:45, but always runs late. If the food is out when the class lets out, the majority of it will be consumed by undergraduates not attending the colloquium.

I just realized I’ve started mapping out an XML schema in my head to describe the requirements which achieve the most efficient distribution of “refreshments” to the appropriate audience. I must stop now.

Update: It gets better. The cookies were there, and so were (approximately) ten grad students and junior faculty, but apparently the talk was yesterday. We have all agreed that this (the presence of cookies without a talk) presents a difficult and disturbing challenge to our world view. However, we did eat the cookies.

Now Playing: English Girls Approximately from Love Is Hell by Ryan Adams

Posted by pjm at 2:52 PM | Comments (0)

April 12, 2006

Found money

I’ve mentioned that when I see money lying on the ground—even pennies—I will stop to pick it up. I don’t usually need the cash, and as we’ll see, I’m not raking it in this way, but I see it more as a philosophy; it’s about not passing up opportunities or missing a chance.

A. thought this was amusing, so for quite a while if she saw change on her runs, she would pick it up and give it to me afterward. About this time last year, we both started putting our found money in a tin set aside for the purpose. This morning I poured out the tin and counted it: $24.71 in a year. It’s going in a savings account, which will also get next year’s haul a year from now, etc. I’m interested in seeing how much can be accumulated from nothing—and how long it takes. It would be entertaining if, a few decades from now, we could pay for some big-ticket item entirely from money we picked up on the street.

Folding money was a nice boost—there was a $5 and two $1 bills in the tin—but the single biggest line item, in value terms, was the sixty-four dimes. Pennies had the biggest bulk, of course: 431 of them, though like all the coins some of them are in pretty tough shape. (One even has a big chip missing; I’m not sure the bank will take it.)

$0.09 CDN (four pennies and a nickel) plus a Mexican ten-centavo coin represented the foreign haul. There was also a T token, which I “bought out” for $1.25, the current fare.

Now Playing: Cold Roses from Cold Roses by Ryan Adams & The Cardinals

Posted by pjm at 10:08 AM | Comments (2)

April 11, 2006

You know you've been in the CS building too long...

…when you see a headline about “Boston drivers” and wonder which operating systems the city is compatible with.

Posted by pjm at 1:57 PM | Comments (1)

April 9, 2006

Long wait

It’s going to be a good long time before I get at this archive. Somewhere on the order of 231,000 years, if I’m doing the math correctly.

Now Playing: This Is It (Acoustic Version) by Ryan Adams

Posted by pjm at 6:30 PM | Comments (0)

March 13, 2006

Not a paper person

It’s galling to me to print out a program listing. It somehow feels like regression—like I’m just a step away from punch cards. But the following circumstances have driven me to this desperate end. (Yes, I’m deliberately making this sound dramatic, because the simple fact is that it only matters to me.)

  • The programming project which I struggled with throughout Saturday was extended to Tuesday night. (When I say struggled, I mean, “It segfaulted at 5 PM, and despite my best efforts, it still segfaulted at midnight.”)

  • It is the professor’s opinion that my problem is in addressing memory. This is not really a surprise, since a segfault (as I’ve mentioned before) is when the program tries to read corrupt or out-of-range memory.

  • My level of proficiency in C lags behind my own confidence in my abilities, and this is my weak spot.

So I’m sitting down with a printout (and K&R) and trying to figure out just where I’ve mucked this up.

Now Playing: Red Army Blues from A Pagan Place by The Waterboys

Posted by pjm at 8:47 PM | Comments (3)

March 3, 2006


The concept of a debugger isn’t quite as simple as it sounds. (“Wow, a program that removes bugs?” thinks the neophyte, “Cool!”) Actually, a debugger is a sort of wrapper program that lets a programmer load their program from within it, then designate arbitrary points within the program (“break points”) where the debugger pauses execution of the program and lets the programmer check out its state. A debugger also tends to make it easy to see where a program failed, even though it won’t always tell you why. These two qualities make debuggers exceptionally useful for figuring out where the problems in your program are, even if it won’t tell you exactly what they are.

As a relative neophyte in C, I’ve become a great fan of gdb, the GNU Debugger, which is pretty useful for nearly anything compiled with gcc (the GNU Compiler Collection.) Debuggers are particularly useful for finding segfaults in C, which is my favorite way of making a program crash. A segmentation fault, put baldly, is a program trying to read data from out of bounds; trying to access the eleventh element of a ten-element array would be a good example. However, gdb can’t help with my current problems.

  • A project for MPOW, written in Perl, and not just Perl but ActiveState Perl, a Windows variant. I’ve always been bewildered by the standard Perl debugger; ActiveState’s debugger itself I’ve never touched.

  • Parallel programming, this MPI stuff I keep yakking about, is beyond the reach of gdb. How do you debug a program running on two different systems? How about one running on twelve? How about forty? Did they all crash? If not, which ones? Did they crash for the same reason? Which memory, exactly, were they accessing? LAM/MPI ships a debugger called “TotalView,” but it breaks in so many different environments (for example, if shared libraries are not enabled, which is often,) that I’ve yet to actually find it installed and working anywhere.

All of this, of course, is in the grad school spirit of opening doors to new and wonderful worlds which I have absolutely no time to explore. I wonder how many hackers out there are devoting their coding hours to building better debuggers?

Now Playing: Luther’s Got The Blues from I’m a Mountain by Sarah Harmer

Posted by pjm at 7:50 PM | Comments (0)

February 25, 2006

Bruce Schneier visits the University

We had a visit this weekend from Bruce Schneier, as part of the ongoing EPIIC project here at the University. I missed the panel discussion yesterday due to a prior commitment, but at the urging of a professor (multiple emails to the class list,) I figured out which building on campus would hold the second “break-out session” (for CS students only,) and got myself over there on a Saturday morning. (Saturday morning isn’t much of a feat. It’s finding a building on campus which isn’t either the CS building, the library, or one of the hidden corners associated with MPOW which is difficult.)

The students there were from my security class and a cryptography class being taught this semester as well, using one of Schneier’s books. The professor in attendance (from the crypto class) implied that the former was a grad class and the latter an undergrad course, which was an interesting characterization considering that I’ve not seen much sharp division in the catalog; most of my classes so far have been mixed.

Schneier implied that missing the panel he’d been on hadn’t been a big loss due to a pretty scattered subject matter, and only rehashed a few points from it, one of them having to do with the old security theory about risks and mitigation: one considers the cost of “getting whacked,” multiplies it by the annual probability of an incident, then compares that with the annual cost of mitigation. If mitigation is cheaper, you invest in prevention; otherwise, you accept the risk. He pointed out that in the case of terrorism, the cost is enormous—nearly infinite, in fact—while the probability is close enough to zero that it’s much smaller than the rounding error in any available statistics. Someone implied yesterday that the result of this math was zero; Schneier’s contention is that in fact it is whatever you want it to be: a little fudging with the data gives a massive change in the result. “People win the lottery every week,” he reminded us, “but statistically, nobody ever wins.” His suggestion is aggregating risks until there are enough numbers to work with.

His continuing theme for the talk was that people don’t understand how to think about security. He cited Ross Anderson in particular, and the idea that programmers code for “Murphy’s computer” (preparing for anything which could go wrong) instead of “Satan’s computer” (where there’s an intelligence looking for the one worst thing which could go wrong.) The fact that an attacker can survey the defenses and then pick the weakest spot should always be kept in mind when analyzing any security efforts, and it really highlights the futility of efforts like “protecting the Olympics” and so on.

He also suggested that “educating the users” wasn’t going to be a good security solution because there’s no good message to educate them with. The “right thing to do” from a security standpoint keeps changing, so the messages from the user-education sources will keep changing, and the users aren’t likely to learn any of them. Not a great situation.

It wasn’t a revelatory experience, but I was glad I spent the time to go; it was a refreshing new perspective on the things we’re discussing in class.

Now Playing: Old Time Sake from Back to Me by Kathleen Edwards

Posted by pjm at 3:31 PM | Comments (0)

February 23, 2006

If it wasn't assigned

I’d never try this on my own.

Specifically: VPN (or SSH tunnel) to the department network… then use the Macintosh Remote Desktop Client to connect to a Windows 2003 Server.

Seeing the Windows login dialog pop up on my Powerbook screen is a little disturbing.

Posted by pjm at 9:50 PM | Comments (1)

February 22, 2006

Armloads of apps

I’m taking a web programming course this semester which is resulting in me downloading and installing a few dozen software packages to my long-suffering Powerbook. (I’m surprised I haven’t mistakenly tried to install MPI on it yet.) I already mentioned AquaPath; here’s a rundown of the (many) packages I have downloaded for installation in the not-too-distant future.

  • DeerPark: I’ve previously noted my dissatisfaction with the official Firefox builds for the Mac, with my biggest beef being the inelegant form widgets. DeerPark offers “unofficial” builds tweaked for specific Apple processors (in my case, G4,) and including the option of Aqua form widgets. So I’m giving Firefox yet another trial as my primary browser (once I get some lingering open tabs in Safari read.)

  • While I’m at it, Camino 1.0 is out. Maybe they’ve solved whatever instability they had that drove me to Safari in the first place. (Safari is a fine browser, I’d like to add, and nicely standards-compliant. But it’s also largely closed-source and controlled by a big corporation; in that respect, I might as well use IE.)

  • We’re moving in to a unit where we’re working on a set of Windows 2003 servers, which we can only reach by Remote Desktop (and, if outside the CS network, via VPN.) Earlier in the semester it was suggested that we’d need to do this from Windows clients, but it turns out there’s a Mac OS client for Remote Desktop. From outside the network, we can even skip the VPN by creating an SSH tunnel (which Windows can’t do; for some reason, the Remote Desktop client refuses to open a connection to localhost, even if it’s the local end of an SSH tunnel.) So I’m setting up for the surreal experience of Windows on my desktop.

  • And even though I probably won’t need it, I’m installing Tunnelblick, which is a Mac build of OpenVPN.

  • Going back to the last unit (whence I got AquaPath,) the inestimable Marc Liyanage has, on his OS X packages page (also the home of OS X builds of PHP and MySQL,) an app called TextXSLT for “playing around” with XSLT and XML transformations. From there are links to a number of (also largely open-source) transformation engines which I have also downloaded, but not yet installed… there’s a lot going on which isn’t software, and dammit, I can’t hack all the time.

Now Playing: Calling America from Balance of Power by Electric Light Orchestra

Posted by pjm at 9:49 PM | Comments (0)

February 15, 2006

Going back by going forward

I do a certain (small) amount of work on the university’s research cluster for MPOW. The cluster represents one of the better technical advances of the late ’90s: glom together a stack of commodity hardware (sometimes referred to as COTS, or Commercial Off The Shelf,) with the right “glue” software, and you’ve got something which handles specific data- or compute-intensive tasks significantly faster than any individual system would. This is not too far from the cutting edge.

Of course, a significant amount of the software which runs these data- or compute-intensive tasks is legacy code written in Fortran. Don’t laugh.

“GOD is REAL (unless declared INTEGER.)”

Now Playing: Neighborhood #3 (Power Out) from Funeral by The Arcade Fire

Posted by pjm at 1:00 PM | Comments (0)

February 10, 2006

Broken egg

I might not understand all of the code I’ve seen inside this project, but I understand a pop-up window, which appears with the correct set of form inputs, containing a Java applet implementation of Tetris. Of course, the referenced codebase is currently 404.

Now Playing: Billy’s Shirts from Stutter by James

Posted by pjm at 8:29 PM | Comments (0)

February 9, 2006

When I get bored with one, I switch to another

I have three distinct and non-overlapping problems projects on my plate for MPOW.

One of them actually requires me to be in a specific place and working on a specific box, since the project is working with a cloud of Perl scripts providing a web interface (via IIS on Windows, to my horror,) to an expensively-licensed piece of bioinformatics software. Like listening to a person with a strong accent, I’m finding that the longer I pore over this Perl, the more I actually become able to answer my own questions about what it’s doing. The question is whether I can climb the learning curve fast enough to satisfy (a) MPOW, and (b) the specific client. The fact that I’m beginning to come up with possibly-intelligent questions about how the software works all on my own is encouraging.

On another project, I crashed Tomcat hard on Tuesday, and haven’t been able to bring it back up. Thankfully, this is at the bottom of my priority stack.

The third one has to do with compiling LAM-MPI libraries for a particular set of compilers on the research cluster. I’m actually most interested in this one; I’m supposed to be getting 7.0.6 functional, but 7.1.1 “might come in handy,” and I’m thinking of trying OpenMPI 1.0.1 just for icing if it turns out that I actually can figure out what I’m doing. I’m really having a good time figuring out what makes the cluster tick, and I’m glad I dropped the (required) Theory course to grab the Parallel Computing special topics while it’s being offered.

Now Playing: Baby That’s Not All from Hello Starling by Josh Ritter

Posted by pjm at 10:55 PM | Comments (0)

February 8, 2006

Different routing

I figured out the problem with getting the Palm Tungsten and its GPS to re-connect: I need to reset the Palm each time. It’s a soft reset (no data loss) and it only takes a few seconds, but what an ugly kludge.

Having it working is actually helpful, though. Coming back from Exeter on Sunday, I told it to avoid toll roads, and it led me perfectly through a few back-road turns to dump me out on 95 south of the New Hampshire tolls. It’s not exceptionally helpful for trips where I know where I’m going, but I can imagine it really coming into its own when I get thrown off the thin strip of route I know and into the unknown territory on either side.

Now Playing: Polar Bear from Nowhere by Ride

Posted by pjm at 9:52 AM | Comments (0)

February 6, 2006

" to see if they've crashed..."

It isn’t often that my class reading makes me laugh out loud.

You can simply start with early Windows DOS attacks (Ping of Death, Winnuke, etc) and move up a little further to attacks such as Teardrop and Land. After each attack, ping them to see whether they have crashed. When you finally crash them, you will likely have narrowed what they are running down to one service pack or hotfix.

Now Playing: Straight To Hell from Combat Rock by The Clash

Posted by pjm at 10:17 PM | Comments (0)

February 3, 2006

I am invincible

My family used to joke about “Volkswagen Door Disease.” In the late 80s and early 90s, we went through four or five VWs of varying vintages, and every one of them had something wonky about the doors. More recently, it’s been Hondas, and the chronic problem across Hondas (three of them, now,) is putting down a window and having it not go back up. It happened to my car two years ago at the state inspection (an inconvenient time, and one of the reasons the car didn’t pass that year,) and again to the other window a few months later. Then, tonight, A ran the passenger’s window down to clear some of the condensation from the outside, and it stuck down.

This is more inconvenient when you have a large stock of concessions inventory for tomorrow’s track meet in the car. Once home, I tried forcing the window back into its track, but it wasn’t getting anywhere.

So I resolved to pop off the door panel. Between the old Mercury I’ve mentioned, and one of the above-mentioned VWs, I’ve taken the interior panels off a few car doors in my day, and I figured this would get me to the root of the problem. I grabbed a metric socket kit and a bag of screwdrivers, then started removing:

(1) Screw in the arm-rest.
(1) Screw hiding behind the door latch. (Top, front, only visible with latch open.)
(2) Screws behind the speaker grille.
(3) Pop-in clips. (Top rear, bottom rear, top front.)

Then: Unplug the speaker, leave the window control dangling, thread the latch through its plastic dingus and place the now-detatched door panel where the back door would be if I had one.

The rail that holds the front of the window is fastened with a bolt in the bottom front of the door, concealed by the speaker assembly. After I’d tried worrying the window back on the rail, I just undid that bolt, placed the rail on the window, then re-tightened the bolt. The window went up like a charm. I then re-applied duct tape (it’s not just for ducks anymore!) to the various places holding the plastic sheet on the inside of the door, plugged the speaker back in, and (mostly) reattached the panel. (It’s a bit wonky around the door latch; I’m going to try again in daylight tomorrow.) I’d post pictures, but it was quite dark.

Before locking up the car, I tripped the child-safety lock that keeps the passenger from putting the window down with their control.

This project gets extra points for (a) use of duct tape, and (b) requiring Fast Orange for the clean-up stage.

Now Playing: This Town from Kids in Philly by Marah

Posted by pjm at 11:02 PM | Comments (0)

February 1, 2006

Fine, just gloat

I know I’m beating a dead horse when I say this, but folks, I sent an honest question by email to a developers list. I do not need to know which members of the list are on vacation.

If you set up out-of-office, unsubscribe from lists before you go. Or have it ignore list-mail, whichever is easiest.

Posted by pjm at 6:29 PM | Comments (0)


We are, in this industry, fond of long names. We’re also pseudo-engineers, so we abbreviate everything, because the names we came up with were too long. (Example: Java Server Pages becomes JSP, because it’s quicker to say “jayesspee” than “Java Server Pages.”) We train ourselves to trip lightly through abbreviations like XSLT. (Say that three times, fast.) But sometimes we need something a bit more colorful and evocative. We need some vivid images. And we need jargon that makes us sound like insiders.

bounce, v. - To restart or reset a system (hardware, or a software daemon,) in order to clear possible problems and reload configuration files. ex. “Sometimes you can change JSPs without needing to bounce Tomcat.” “I couldn’t figure out where the problem was, but when I bounced the box it went away.”

Posted by pjm at 12:43 PM | Comments (1)

January 29, 2006

Disposable bookmarks

If anyone is looking to add a really cool feature to a web browser, here’s something for their consideration. Let’s have bookmarks that work the way real bookmarks work.

The bookmark metaphor is a bit leaky. “Bookmarks” as they are implemented in normal web browsers are essentially saved URLs which allow you to once again find a website which you might otherwise forget. I actually have no such bookmarks, unless you count my bookmarks, which I don’t because they’re not built in to the browser. A “real” bookmark is something you stick in an actual book to keep your place in the book. You know which book you’re reading, and you probably know where it is (otherwise you have problems the bookmark can’t solve.) The bookmark lets you pick up where you stopped last time, and move on. You take it out of the book, read, then put it back in where you next stop.

Everyone I know who spends a lot of time on the web has only one way of marking a page which they’ve stopped reading, but intend to come back to: they leave it open, in its own window or in a new tab. We can have dozens of tabs or windows open at a time indicating these unfinished readings. I’ll skim through NetNewsWire clicking stories I want to read (or, if it’s a full-text feed, entries I want to comment on,) and wind up with a slew of open tabs. Then I go to the browser and work through the tabs. In other cases, I’m reading my way through [an entire site][], or a multi-page NYT or Ars Technica article, and want to keep track of where I left off. I don’t bookmark these pages because I don’t want to remember them for all time; I just want to be able to pick up reading where I stopped. Instead, I wind up keeping browser windows (or tabs) open for days (sometimes weeks) at a time, which is inconvenient when I want to do something like restart the computer.

What if I could place a “bookmark” at a page which would then disappear automatically (maybe with a confirmation prompt) when I returned to the page, in the same way that I remove a physical bookmark from a physical book? Then I could close a few dozen of these tabs. I bet I’d use it more often than the “real” bookmark menu, because I wouldn’t feel like I was cluttering up my collection of lasting bookmarks. It doesn’t seem like it would be terribly hard to do.

Now Playing: The Catfisherman from Kids in Philly by Marah

Posted by pjm at 9:16 PM | Comments (1)

January 19, 2006

I am a geek and I like to share

I was browsing course websites (I’m impatiently waiting for some of my professors to post book lists; the only one who has, isn’t assigning any,) and I happened by this semester’s Cryptography course, I noticed something weird about the text:

About the course: 20-5-12-3-15-13-5 20-15 3-18-25-16-20-15-7-18-1-16-8-25! 20-8-9-19 6-21-14 3-12-1-19-19 20-9-12-12 20-5-1-3-8 25-15-21 19-15-13-5 15-6 23-8-1-20 9-19 7-15-9-14-7 15-14 23-9-20-8 13-1-14-25 15-6 20-8-5 16-15-16-21-12-1-18 3-18-25-16-20-15-7-18-1-16-8-9-3 1-12-7-15-18-9-20-8-13-19. 4-5-19-16-9-20-5 20-8-5 6-15-18-13 15-6 20-8-9-19 20-5-12-3-15-13-5, 23-5 23-9-12-12 2-5 6-15-3-21-19-19-9-14-7 15-14 8-15-23 20-15 13-1-121-5 7-15-15-4 5-14-3-18-16-20-9-15-14 19-3-8-5-13-5-19, 14-15-20 8-15-23 20-15 2-18-5-1-11 2-1-4 15-14-5-19.

Yes, I worked it out. (Yes, there are errors in the ciphertext.)

Now Playing: Believe You Me from Some Friendly by The Charlatans

Posted by pjm at 1:44 PM | Comments (0)

January 17, 2006

Disk Profiler X

By indoctrinating my mother in the Macintosh Way years ago, I saved myself a great deal of time on the phone doing software support. (I did find myself explaining to an uncle—himself an engineer—how a BIOS might refuse to boot a computer where installed RAM has voltage requirements which don’t match what the motherboard can provide.)

However, you can still reach odd Mac states which require e-mail troubleshooting. Last week, for example, my old iBook (which is now hers) refused to boot, complaining about a lack of disk space. We needed two tools to bring it back to life. First, we booted the iBook in “Firewire Target Disk Mode,” which is done by booting with the “t” key held down. This doesn’t bring up the operating system, but instead makes the computer, essentially, into an external hard disk which can be mounted by another machine. We plugged it in to her iMac, with the goal of freeing up enough disk space to allow it to boot on its own.

The utility which made this task easier is called Disk Inventory X. It presents the files on a disk (or inside a given subdirectory) in a format called “treemaps” which is easier for me to show than to describe. Here, for example, is the Disk Inventory X window for my HDD.

My hard disk

This makes it very easy to point out the big blocks which, once deleted, free up the most space for the least work. On the iBook, we found eight or ten iPod updaters (one is sufficient,) and a 650MB audio file left over from one of my mother’s adventures in ripping her vinyl records to MP3s. A few quick deletes, and the iBook would boot again: much easier than, say, going through one’s email looking for attachments.

What’s most striking about this image, to me, is how much disk space I have dedicated to music. (The blue chunk in the upper left is all AAC files, ripped from my CDs; the purple ones next to them are downloaded MP3s.

Since the left-side window shows folders ranked according to the size, and iTunes stores files in folders by artist, I can rank artists by how much disk space I have dedicated to them. It’s tempting to use that as a default “favorite artists of all time” list, but there are obvious problems with that: compare, for instance, The Church, with twenty-five years behind them and seventeen disks in my collection (and I’m missing several,) with someone like Sarah Harmer, whose third album is due for U.S. release in a few weeks, and Josh Ritter, only on his fourth. Clearly, all this is telling me is how much disk space they occupy.

Now Playing: Old Time Sake from Back to Me by Kathleen Edwards

Posted by pjm at 10:15 AM | Comments (0)

January 13, 2006

Useful lifetime

I seriously torqued my Powerbook last night. I managed to set up my Eclipse configuration correctly to import the source for Sakai as a series of projects, so I saw the load on the machine (roughly defined as the average number of processes queued for execution) hold in the 3+ range for more than five minutes. Running Java, and particularly big operations in Eclipse, tends to bog it down.

I’ve been pretty closely attached to this machine over the last few months, which probably comes as no surprise. I’ve been loading it down with tools to do my work, and pretty much living on it. It’s “only” two and a half years old, but it’s beginning to show some age, and the degree to which it labors with Java is probably related. I did put in a new keyboard, new optical drive, and a lot of RAM last June, which means it’s probably good for a while yet. But it doesn’t feel like a sharp, new tool; it feels more like the old wrench with nicks around all the edges, the one which just doesn’t break no matter how much you use it as a hammer.

After this week, I think ultimately this machine will be replaced by one of the inelegantly named MacBook Pros. The speed bump is cool, and since most of the non-standard tools I play with are either installed from source (and therefore compiled for the platform) or bytecode-reliant (i.e. Java tools reliant on the JVM,) I don’t think I’ll spend much time bogged down in PPC emulation (as I would, say, if I used Photoshop all the time.) However, I’m waiting for a few things. For one, I’m not interested in being an unpaid beta tester for version 1.0 hardware. For another, though, I’ve become quite fond of the 12” size. I like having a laptop that’s smaller than most casebound textbooks; I lug it around far too much to want it to get any heavier.

So I’ll be hanging on to the old war-horse a bit longer.

Now Playing: Runaway Train from Grave Dancers Union by Soul Asylum

Posted by pjm at 11:24 AM | Comments (0)

January 9, 2006

Routing (mis)adventures

One of the reasons I volunteered to accompany A up to the Dartmouth Relays was that I finally had installed maps on my Palm and could try out the GPS Navigator. On the face of it, this wasn’t really the best trip to use it on, because driving from Medford to Hanover is as easy as falling off a log: I-93 to I-89 to NH-120 and hey, there’s the track. I could’ve done it by memory.

The advantage of the Navigator turned out to be knowing how much longer I was likely to be on the road. This makes for easier decisions about when to stop for a break, for example. When you know where you’re going, though, the voice prompts are just annoying.

We could really have used another feature on the way back. Near the I-93/I-293 split south of Manchester, about three or four exits from the Massachusetts border, traffic stopped somewhat abruptly, and there was a smokey smell I assume was either hot brake pads or scorched tires. A momentary vantage point showed brake lights red over a mile ahead.

Unfortunately, the Palm and the GPS hadn’t managed to make a Bluetooth connection since we’d left Hanover, so the navigation wasn’t able to suggest an alternate routing. (It still thought we were either in Hanover, where it had last had a signal, or Medford.) Fortunately, traffic was stopped enough that we could pull out a paper map and work out that I-293 would swing us west around the south end of Manchester, where we could pick up route 3 down through Nashua. If I didn’t know New Hampshire as well as I do, though, it would’ve been nice to get a suggestion for a way around.

Now Playing: It’s Nearly Africa from English Settlement by XTC

Posted by pjm at 2:09 PM | Comments (0)

January 5, 2006


This morning, I went to a talk by a prospective Ph.D. student. It’s part of the qualifying for the degree, to present your current research and give some idea of how that’s going to progress to a dissertation. I have a strategy about talks; I go to as many as I reasonably can, I understand whatever I can (usually somewhat less than 50%,) and I keep my mind open.

The hope is that eventually, something will stick. There is a lot happening in CS. My strengths are not in math, and, by extension, not in theory. My contribution to this field is going to be finding a good way to apply the theory I attempt to learn—doing interesting stuff the smart way, I suppose.

Today’s talk was about nutrigenomics, which is sufficiently obscure, still, that my spell-checker doesn’t recognize it. The idea is pretty self-evident when you think about it: the nutrients you eat interact with sections of your genetic code. The chain isn’t hard to put together in theory, but the individual links of an individual chain are far from simple to visualize. Today’s talk was about ways to make that easier, or at least that’s the part I think I understood.

The part that was really interesting to me was that the presenter has two collaborators outside the CS department, in our medical school and our nutrition science school. (We have a nutrition science school? This is news to me.) Also, that he’s a part-time grad student with a full-time job in the office where my assistantship is, and next week we’re meeting with someone else from the medical school about hacking some perl scripts for mass spectrometry of proteins.

There seems to be a lot of interest in Computational Biology (“Comp Bio”) here, and while my own background in biology is sketchy, it’s intriguing. Maybe it’s everything I learned by osmosis at my last job—and my belief that we need a better phylogenetic analysis tool. I wonder how much biology you’d need to know to improve on the current state of the art—not just the user experience, which I already have a low opinion of, but the actual computation performance.

Now Playing: Gone Too Far from Tomorrow by James

Posted by pjm at 9:06 PM | Comments (1)

January 4, 2006


Work, as I’ve implied, has lately been centered around Sakai and all the various technologies it requires to work. Lately I’ve discovered that just dropping in a binary build is not useful if you’re going to try to hack Sakai; you need to build from source (of course, of course.)

Most big modular tools make use of a GNU tool called make. make is essentially a script which allows developers to define (in a “makefile”) several “targets” which represent end states, and the tools, files, and steps needed to create that end state. The sysadmin then installs the software by “running” the makefile, usually with a command like make install (which means, attempt to reach the target called “install.”) Other usual targets include clean (remove traces of a previous make run,) which is a sort of undo for installations.

If your system has a good collection of libraries and software tools, and the makefile has been well-written, you can usually install software with something like ./configure; make; make install or, sometimes, ./configure; make; make test &#38;& make install if there is a test target defined. If you’re missing a few files, though, make will tell you about it, then quit.

Sakai is installed from source with Maven. It’s probably a massive oversimplification to call Maven the Java counterpart to make, but in this situation they play the same role. I give the command maven sakai, and it runs for ten to fifteen minutes, streaming page upon page of status report through my terminal window, then eventually tells me why it couldn’t actually do what I asked—usually because of some dependency it couldn’t download.

Dependencies are, to oversimplify, when one little bit of code requires another little bit of code to run. Maven tells me what I’m missing, usually a .jar file of some flavor, and I drop it into Google to see if I can find a site to download it from. Once I’ve found it, I load it in to Maven’s own cache, and restart the whole dance.

I’ve lost track of how many times I’ve tried to install Sakai this way; must have been five to ten last night, and three more this evening… hey! IT JUST BUILT! Cool!

Now to figure out how to break it…

Now Playing: Hotel Womb from Starfish by The Church

Posted by pjm at 8:42 PM | Comments (0)

December 28, 2005

In which I equate electronic-hobbyist supplies with linens

This gift required a speakerectomy this evening, an operation which involved the removal of twelve small screws, cutting one wire, then replacing the twelve screws in reverse order. I learned these things:

  • Small Philips-head screwdrivers stink. Flat-head screwdrivers are much less prone to stripping the cheap screws used in cheap electronics.
  • Of course you can’t just unplug it.
  • It’s easier to cut a wire when you know you have a spool of solder around to re-attach it if necessary.

Solder to a geek is like a towel to a hitchiker. If you’ve got it, even if you never use it, you become more confident in your ability with small wires. One of these days I’ll fix that box of nifty pedals dating back to my guitar-playing days… it might be nice to have my Fuzz Face back.

Now Playing: Dance Along The Edge from Concrete Blonde by Concrete Blonde

Posted by pjm at 10:26 PM | Comments (3)

December 20, 2005

Concentrating elsewhere

I’m doing a lot more writing in my new, other weblog right now.

Before you feel left out, however, I should point out two details: first, it’s all about installing Sakai and blojsom (and eventually, I hope, making them work together.) Second, it’s installed and running on my laptop, which means it’s pretty much unavailable anywhere else.

Now Playing: Hold Her Down from Fear by Toad The Wet Sprocket

Posted by pjm at 10:53 AM | Comments (0)

December 18, 2005

I can't hold out against JSP any longer

In my first web-geek job, I had a really bad experience with Java on the web. Specifically, I wound up trying to run a site with a message board package which depended on what was, at the time, a profoundly awful Java web server. (It was gruesomely slow and crashed at an alarming rate.) I was left with the impression that Java was too slow, too unstable, and too complicated for the web. (Applets included, and I actually still hold that opinion.)

In my next job, I liked working with LAMP, which was powerful enough for what I needed to do, easy to install on my server, and thanks to a few lucky guesses when I built the server, pretty darn snappy. I got pretty comfortable with that. Meanwhile, the enterprise web application world, still infatuated with the “Java” buzzword, was playing around with a few packages I knew only by name: Tomcat, JSP, and Maven, just to name a few. Tomcat, as it happens, is the stable model for mediating between Java applications and the web. JSP… well, JSP goes “inside” Tomcat. Maven calls itself a “project management and comprehension tool,” which I find a bit whimsical.

And there are now some pretty powerful applications built on Tomcat and the associated Java technologies, particularly that Sakai package I’ve mentioned. I’ve reached the point where I really need to figure out what’s going on in here—not least because I need to learn more about what’s going on inside Sakai, whether we can improve it (MPOW is moderately interested in making contributions to the Sakai code-base, and significantly interested in being able to bend our own installation to our wishes,) and whether I can integrate other tools (specifically, blojsom, the only weblog engine I’ve found in Java. Which you’d think would tell you something about Java and the web, but never mind. It is, after all, shipping with OS X Server.)

I’m still not convinced that writing web apps in Java is a good idea in general, but the fact is, I need to know how it’s done. So I’ve spent some time installing Tomcat here on my Powerbook. Sakai and blojsom come next.

Now Playing: Clean Up Kid from Songs From The Other Side by The Charlatans

Posted by pjm at 10:29 PM | Comments (1)

December 16, 2005

Isn't there a rule about volunteering

Yesterday, someone from MPOW asked about weblogs. “Does anyone know anything about weblog software? Tell [another student].”

I spooled off a list of weblog packages and websites into an email, and sent it to this student and my supervisor. The response was something like, “Oh, [pjm], this is great! Why don’t you take this project!”

Now I’m installing blog software. Does anyone know anything about integrating blogs and Sakai? I’m thinking of starting with Wordpress and Textpattern.

Once I finish this last final, of course.

Now Playing: Minnesoter from Come Down by The Dandy Warhols

Posted by pjm at 11:09 AM | Comments (0)

December 11, 2005

I have become an undergraduate

My nieces are in their sleeping bags on my bed, because it has the door that closes and they don’t like the idea of having Iz wake them up at 5 AM expecting breakfast.

My brother is, I think, on the couch, but I can’t tell if I’m hearing him playing with the cat or if it’s the springs in the sofa-bed squeaking.

I am upstairs in my office, having decided this morning that I will be better able to code the Algorithms programming project in Java rather than C. (So far, I am right: it still doesn’t do anything useful, but at least I have some feedback from Eclipse that what I have written so far should compile.) If I sleep, it will be in the guest room, which adjoins the office.

I am promised that the girls are capable of eating their weight in pancakes, and I intend to test this empirically in a few hours.

Despite the past nine years of conditioning myself to wake up before 8:30 or so, I have reverted to my undergraduate schedule, which was, roughly:

  • Work (for some approximations of “work”) until approximately 1 AM.
  • Sleep until the last possible moment allowing a shower and arrival at the dining hall before breakfast closed. This time varied by dorm, but in my senior year, when I lived next door, it was almost 9 AM.

I could make it to work in Pennsylvania if I was out of bed by 8 and ran at lunch, but once I moved back to Amherst I had to be up around 6 every morning in order to run before work. I got on a 6-to-10 schedule which worked pretty well for me. Until now.

The problem is, I have conditioned A. to running in the morning, and Iz to being fed at 6 AM (or, as he prefers to interpret it, “half an hour before dawn cracks.”) Therefore, it’s a bit harder to work like an undergrad than it used to be.

However, I seem to do my best work between 11 PM and 1 AM.

Now Playing: The Wee Hours Review from by Roman Candle

Posted by pjm at 12:59 AM | Comments (1)

December 7, 2005

Strong feelings

We had a colloquium on Monday featuring a talk from a Yale professor. The topic was relatively interesting, though I probably looked disinterested since I was so exhausted I was ready to nod off in the middle.

The curious part, however, was that rather than the ubiquitous Powerpoint slides, she had hand-drawn transparencies. At this two-day remove, I’m probably not word-perfect on this quote, but she explained it like this: “I don’t think it’s possible to do really good computer science unless you hate computers.”

We must have looked puzzled, because her expansion of that comment was, “You really need to use them a lot to get to hate them.”

I guess that’s a different kind of passion?

Now Playing: From The Skyline Of A Great Big Town from Kids in Philly by Marah

Posted by pjm at 1:40 PM | Comments (0)

December 4, 2005

High bandwidth

I talked with the guy who set up the wireless at the meet. He happened by while I was working on the laptop and asked how it was working for me. I mentioned that I’d had no trouble joining the network, but a little trouble getting outside it yesterday.

“Well,” he admitted, “That may have been because we were listening to the streaming audio from the UNH football game.”

Posted by pjm at 6:13 PM | Comments (0)

November 30, 2005

Watching users

I’ve written a few web apps in the last few years, but never have I actually been able to watch users interact with it like I can with the Wish List, especially since I added the RSS feeds. Even before that, though, the principal users have been family, so nobody has been afraid to tell me when something doesn’t work the way they expected.

It didn’t occur to me at the time, but the site has allowed lists to become more fluid; I can watch how they grow and contract. I’ve spotted several different use patterns, both in making lists and buying from them, and in some cases the differences run in families. For example, I tend to create really long lists, like a restaurant menu, figuring everyone can find something that fits them, but I’ve seen others who create shorter lists that are almost entirely consumed by their family. And there’s a small minority who sign up to read others’ lists, but don’t add anything to their own. (Sometimes, “their” lists become clearinghouses of gift ideas other people had for them, so it’s not worth requiring that people put stuff on their lists.)

There are plenty of visual tune-ups it needs; aside from a slightly glossier style, there are some places where I should be using color and typography (to distinguish, for example, when someone added an item to their own list, and when someone else added it.) Also, I’m beginning to realize that there needs to be a capacity to add a series of notes to items, in essence making each list item a topic with theoretically unlimited comments. (I’ve already seen some people working around this missing feature.)

A link I saw on recently suggested there are plenty of people looking for more in their wish lists than Amazon offers. Perhaps after this Christmas is over, I should work out a hit list of features and roll this out as a more public application.

Now Playing: Directing Traffik from Life by Inspiral Carpets

Posted by pjm at 10:01 PM | Comments (0)

November 29, 2005

Good thing #328 about being an older-than-average grad student

All your t-shirts are not only stylishly vintage, they’re authentic, rather than store-bought, vintage.

Extra points if your vendor-ware is from an entirely different field, for extra obscurity.

Now Playing: Caroline from Bloodletting by Concrete Blonde

Posted by pjm at 2:21 PM | Comments (3)

November 26, 2005

Feeds and spoilers

I added web feeds to the Wish List this afternoon, which was a relatively simple operation thanks to previous experience and the simple tutorial which led me through my first feeds.

(Brief digression: Why not an Atom feed? Because all the pages which proposed to show me how started with something like, “First, look at the specification…” and I’m not at all interested in reading the spec: I just want to write a feed template. Danny Sullivan’s article just shows you how, and it just works.)

My learning step, this time, was adding the feed auto-discovery links to the heads of each page. I figure that many of the people using this are pretty low on the geek scale, and are most likely to use feeds if they’re spoon-fed via Safari or Firefox. So I made sure the code was there to pop up the relevant feed links.

I have code in the existing list display pages to control what gets shown to the owner of the list. If you’re looking at your own list (that is, you’re logged in, and looking at the list associated with the user you’re logged in as,) you don’t see status notes other people have left about items on your list, nor do you see items other people have put on your list. It’s part of the original idea behind this: it’s about preserving surprises if you want to, in a way most web-based wish lists don’t.

For various reasons not entirely unrelated to this post, I can’t require logins for the feeds. Since I can’t tell who is requesting the feed for a list, I can’t present the list differently for owners and non-owners. In other words, if you check the feed for your own list, it’s entirely likely to be a spoiler.

I decided this was a necessary risk. The value of having web feeds lies in providing current information, and gutting the feed content would be counterproductive. Instead, I’ve just not included the feed link or auto-discovery code for the owner of a list. They could still figure out the feed URL and subscribe, but it’s not happening by accident. And in my rambling introduction to the feature on the front page, I’ve included the caution: spoilers ahead.

Now Playing: Dear John from Jacksonville City Nights by Ryan Adams & The Cardinals

Posted by pjm at 4:42 PM | Comments (0)

November 25, 2005

Back to the Wish List

After spending a good chunk of yesterday (and, come to think of it, a lot of today,) away from a computer, I’m coming back by doing some work on the Wish List. (I notice I’m not the only one doing some extracurriculars over the break.)

With some escalating use, people are starting to come up with more feature requests, so I’m ignoring most of them and scratching my own itches. One of them was adding Markdown formatting to the text fields, so it’s easier to write extended text blocks in item descriptions, not that we’ve been particularly wordy so far. But the thornier one, which I puzzled about for a while before adding, was pretty easy to implement.

What I did was scan the URLs for items to check if it was an Amazon link. If it is, I’m now adding my affiliate tag.

There aren’t many Amazon links included at this point, and some of the people using them have actually used or already, which renders this point moot. Even if there were, I doubt the total revenue will be anything significant—I’m estimating somewhere between $5 and $10, actually. But I still felt a little creepy doing it, and I guess the fact that I’m writing this indicates that I’m a little defensive.

Anyway, with that out of the way, I have some other ideas to play with.

Posted by pjm at 11:26 PM | Comments (1)

November 19, 2005

Dazed and frustrated

I guess you could say it was bound to happen sometime: I stayed up all night working on a project. Specifically, a programming assignment due Monday evening. Of course, Monday evening I expect to be on a series of planes returning from Terre Haute, we’re leaving to go there this afternoon, and I’m not sure what kind of connectivity I’ll have there. (The library, I suppose, but maybe, like Tufts, they will have locked down that network by now.)

Somehow, I managed to work all night without any sense of progress. The idea is to optimize a particular operation against a randomized simulation (virtual memory paging in a resource-starved situation, if you’re in to that sort of thing,) and the grade is based on “performance:” the ratio of cycles spent blocked to cycles spent working, the smaller the better. Several of my classmates have posted results (in the anonymous, norm-setting, results-sharing tool,) and they’re down in the range of 0.5. The supplied example solution, which is deliberately bad, runs around 10 or 12. By 8 or so last night, I was reliably between 1.6 and 5, averaging around 2.4.

And despite several different approaches overnight, I haven’t managed to improve on that for the last twelve hours. I finally grabbed two hours of sleep after I found myself nodding off at the keyboard around 7 AM.

My best plan is to submit something today before we leave. If I happen to be able to improve it from Terre Haute, so much the better, but I can’t count on being able to do that. Also, I have another project due Tuesday (which I can work on without a network connection) which I’d counted on spending my free Indiana time on.

You can imagine that this is pretty frustrating for me. I mean, if you pull an all-nighter on a project, aren’t you supposed to see progress? My code looks a little better, but in terms of results, I would’ve been better off asleep. More to the point, if I’d been chipping away at this all week, I could’ve gone to the TA or my classmates and said, how is this working for you? What am I doing wrong? Now, everyone’s home for the weekend, and it’s pretty much my own problem that I’m only finding these roadblocks now.

Now Playing: Mouse Trap from Going Blank Again by Ride

Posted by pjm at 11:03 AM | Comments (2)

November 13, 2005


There’s a professor in our department who, according to department folklore, gets a haircut and clean shave precisely once a year. I have only anecdotal evidence of this, though his appearance certainly does bear it out; he’s got more beard than nearly anyone I can think of. The stories go on to suggest specific dates for the annual barbering, but I’m too suspicious of those details to repeat them, because they seem to push the idea from eccentric over-practicality into something more ritualistic.

That aside, I have to admit this approach has some appeal. I certainly wouldn’t mind having back all the hours I’ve spent so far this year removing stubble from my face.

Now Playing: Penny Look Down by Decibully

Posted by pjm at 2:23 PM | Comments (0)

November 11, 2005

There must be a more elegant answer

Does anyone know an elegant way to test, within a PHP script, if PHP is running as a CGI or as an Apache module?

Now Playing: She Wants To Play Hearts from Demolition by Ryan Adams

Posted by pjm at 11:07 PM | Comments (2)

November 6, 2005

I should know better than this

Why didn’t someone point out to me that one can’t run a webserver on a wireless network, and expect anyone (other than to reach it?

Oh, well… it’s still better than last year. Now it’s automatically emailing my new updates to my editor, and she emails the edits back to me. I tried putting it up on one of my sites, but my web host has disabled PHPs FTP functions.

Posted by pjm at 8:57 AM | Comments (0)

November 4, 2005

Dev Addict

If I flip through the media credentials hanging over my desk, I will find nine previous NYCM credentials. This will be my tenth. In 1996, I managed the “live” updates on the Runner’s World site in pretty much the same way I did for the NYRR in 2004, except that nowadays I have to run each update through an editor (who usually improves them, but adds another level of complication.)

It’s about time, I figured, that I quit hand-coding HTML and pushing around text files.

Tonight in my lab sections, I re-installed PHP and MySQL on my Mac (the 10.4 update blew away my previous installations, unfortunately,) and started hacking at some PHP for the first time in months. I think this must be what recovered addicts feel like when they get a dose of their drug of choice.

What I have now is a tiny little web app, hosted on my Powerbook, to manage updates. One form handles additions and editing; in its “addition” form, I just have a big text box with a “New” button. When I click that, my text is time-stamped and dumped in a database row.

Another page shows a list of updates (sorted by time-stamp) and their edit status. The editor, if she’s on the same network I am (and if the NYRR comes through with the media-center wireless network, she will be,) can click links for each update to see a preview, make changes, and approve it for publication with a click.

The sauce atop this sundae is a link which pulls all the updates out of the database, puts them into the requisite text files, and if I can solve the final bugs, FTPs them to the webserver for me. One-click publishing.

The cherry is that I’m creating a text-file with Markdown link definitions for all the elite athletes’ bios on the NYCM website, so if I mention an athlete with a bio, I can just type [Paul Tergat][] just the way I would when I’m writing here, and it will be a link to his bio when I push the files up to the server.

I may only get five hours of sleep tonight, but damn, this is a cool little app.

Update, 11:30 AM: Cleaned up my hit list this morning. The major issue turned out to be my firewall; I couldn’t establish the FTP connection from PHP with the firewall on. I’ll need to disable it during the race. (Eek, but no way around it right now.)

Now Playing: Next Lover from Seven by James

Posted by pjm at 1:26 AM | Comments (1)

November 2, 2005

Gives me the shivers

Back in my old job, I worked a lot with an obsolete all-in-one “server appliance” called a Cobalt Qube. It was a handy little thing: gateway, firewall, mail server, web server and file server all in one. It would’ve handled DNS and FTP if we’d asked (or, more correctly, if I’d thought those were a good idea; I didn’t.)

In today’s NYT there’s a squib about a box called the Chili Box. Pardon me, but it gave me chills. It’s the Qube all over—not literally, but in all the important ways. Custom hardware, complete with a colorful case and very few buttons. Web interface. Firewall, network gateway, file sharing, mail server and web proxy all in one cute little case. The ‘net has changed in the last five or six years, so the web server is gone (who hosts their own website in their office anymore?) and the firewall is bumped to the top of the list; spam filtering is built in instead of installed aftermarket by a painstaking sysadmin.

And I’m betting there’s a custom flavor of Linux in there waving the baton. I wonder how long Chili Networks will be dealing out security updates? If they’ll actually increment version numbers on the updated daemons, instead of back-porting patches like Cobalt and Sun did? If they’ll update the kernel at all? Because I bet there will be some enterprising home-grown sysadmins out there who will take those nice, economical Chili Boxes and keep them running much, much longer than Chili Networks think they’ll be supporting them.

They’re cute, though. I wonder if they’re quiet enough to sit in the living room next to the cable modem?

Now Playing: Under The Milky Way from El Momento Descuidado by The Church

Posted by pjm at 9:41 PM | Comments (2)

October 29, 2005

Arithmetic effort, logarithmic return

Writing a short C program for a Monte Carlo simulation to approximate π: boring coding exercise

Running the script for 500 million data points on one node of the research cluster: cool the first time

Re-coding the script with MPI to run on multiple nodes simultaneously (with the number of nodes and data points per node both user-specified as command-line arguments): excessively cool

Accuracy of approximation: irrelevant

Posted by pjm at 9:29 PM | Comments (1)

October 28, 2005


I’ve mentioned machine names before. Right now I’m working on connecting to a staging cluster for some software modification testing. The head node is “Gonzo” and the nodes are “Chicken1”, “Chicken2”, etc.

Posted by pjm at 4:03 PM | Comments (3)

October 24, 2005

Obscure answers

It didn’t result directly from posting the question here, but I’ve picked up that the Slackware folks have a utility called rpm2targz which (surprise, surprise) turns RPMs into gzipped tarballs… and that it’s sufficiently portable to be worth trying on Gentoo, if not my Mac.

Now Playing: Boxing from Ben Folds Five by Ben Folds Five

Posted by pjm at 6:46 PM | Comments (1)

October 23, 2005

Intermediate stages

One of the most rewarding parts of web development is seeing the application (or site, or whatever) in intermediate stages. After a bare minimum of infrastructure coding, you can push the code up to the server (or, in a more professional environment, just hit the staging server,) and see what you’ve accomplished. It gives the developer a tangible feeling of progress, and a sense that it will continue to completion. (Compare this with C coding, for example, which requires, at the very least, a compilation step before any progress checks—and the need to have coded something which produces some output, which leads to development stages of any program having a lot of superfluous output.)

I’m having this same problem with Java, at least at the level of object-orientedness we’re functioning in for this particular class. The compile step is mildly annoying, but the fantastic number of files and declarations and sundry infrastructure required merely to say, “Hello, world,” (this project is somewhat more complicated than that,) is staggering and frustrating. It took me three hours to reach a stage in which it was worth trying to compile just to see what errors came up; nearly four before I could compile something runnable and see what it produced.

Now Playing: It’ll Chew You Up and Spit You Out from Still in Hollywood by Concrete Blonde

Posted by pjm at 9:36 PM | Comments (1)

October 14, 2005


It looks like I need to break down a package.

I’m still working on this system monitoring problem. I’ve found the relevant package to expose the system diagnostics to Linux (Dell calls it OpenManage, to match a similar package for Windows,) and I’ve found a guy who reverse-engineered the package for Debian. This tells me a lot about the structure of the package, but unfortunately, not much about whether it will work with Gentoo.

For those who aren’t deeply involved with Linux, I’ve established that a particular recipe written for apples can also be made to work with bananas, but I’m not quite sure what that tells me about the oranges I have.

The problem (so far) lies in the way the Linux distribution people market their various distributions. I know that the fundamental source and structure of the Linux kernel is the same for all of them; I know that they sometimes differ in the way they manage software packages (rpm vs. deb vs. emerge vs. what-all else) and which packages they ship with (or don’t ship, as the case may be.) I know there are sometimes some file-system differences, e.g. where configuration scripts are found.

What I can’t find, so far, is documentation of just what those differences are. In fact, so far with Gentoo, all I’ve been able to find out about the kernel is that it’s very, very customizable… which means I could find someone else who has made this package work on their Gentoo system, then do the same things and have it not work on the one I’m dealing with. Gentoo is very high on their “emerge” package system, and how it’s “more perfect” than other package managers, but that doesn’t tell me a whole lot about how it actually works and what I need to do to work with it.

It seems like I may have to deconstruct this package after all, and take it apart the long way. Maybe I can learn something someone else can use.

Posted by pjm at 10:28 AM | Comments (0)

October 8, 2005

Limited privilege

I suspected it would be frustrating to not be running the show, but I didn’t know quite how it would come up.

I’m working on system monitoring. Specifically, monitoring the health of a particular system, which happens to be running Gentoo on Dell hardware. Dell does not support Gentoo, specifically; if you’re going to run Linux on a Dell server, they’d rather you use Red Hat. There’s talk of re-building this server with Red Hat, but there are ramifications I won’t get in to here, and the decision isn’t mine anyway. (I don’t know the second thing about Gentoo vs. Red Hat, but I think I’d consider switching hardware vendors more quickly than switching distros. Just saying.)

Now, in any Linux there’s a lot you can learn about the system if you have read access to the /proc/ directory; in fact, last week I handed in a big C program centered on the idea of reading process data from /proc/[\d+]/status. (I wish I’d been able to write it in Perl, but the idea was to use system calls.) I can get a lot of the data I want there, like swap page-ins and page-outs; I just need to massage that data to present a vector (that is, change since last check) instead of a running tally. Should be a reasonable little project in Perl.

The thing I’m missing is CPU temperature. What I’ve been able to find out this evening is that there is an optional module (an LKM) to allow the Linux kernel to get this information from the BIOS and put it in /proc/ somewhere. This stands to reason; the operating system stands between the user and the hardware, so anything that talks to hardware (and the BIOS must be considered hardware) needs to be built into the system.

It looks like this module is not installed on the system in question, which is reasonable considering its circumstances. However, I can only say “Looks like,” because I don’t have enough privilege on the system to run lsmod and check. Even if it was loaded, that might not be the whole solution; apparently Dell distributes an RPM to expose this stuff to Red Hat, and there’s some question about whether it could be used on Gentoo. It’s possible that the RPM is, in fact, this kernel module, but I haven’t been able to find it and unpack it, nor could I install an LKM anyway; there are enough people using this system that it would be A Bad Thing if I crashed it by accident.

Really, though, I do miss being root.

Now Playing: Trying Your Luck from Is This It? by The Strokes

Posted by pjm at 8:49 PM | Comments (0)

October 2, 2005

Managed location

The aspect of mobile computing that I left out was software: the system software which manages network connections should be able to manage this as well. Could DHCP, the protocol which assigns your machine an IP address when it connects to the network, send an SMTP server address along with the other addresses it sends? How about if the system includes a “location manager” daemon which silently selects the appropriate SMTP server from an established list, based on the network you’ve just joined? (Even better if that location manager has a little bit of a brain, and can identify the scope of a particular server—for example, it might set my server to on any network served by Comcast, not just my home network.)

The point is, this is exactly the sort of adjustment which can be managed with logical rules, which means it’s perfect for software. Why is the machine nagging me about it?

Now Playing: I Wish You Would from Drops of Jupiter by Train

Posted by pjm at 8:51 AM | Comments (0)

September 30, 2005

Ubiquitous wireless, portable computers, and SMTP

Or, Why I Can’t Send E-Mail.

I’ve been struggling lately with one of the hang-ups of mobile computing. In addition to home, where I am the network admin (and, therefore, know the answers to relevant questions,) in the course of most days I open the laptop and go online in several different places. I’ll use the campus wireless network in several buildings (the library, the computing annex, the CS building,) or, in some contexts, I’ll actually plug in to an ethernet cable. The downside of this is that I am actually bouncing between at least four networks: my own, the University wireless network, the University wired network, and the EE/CS network (wired or unwired.)

Now, in this age of spam, one of the strategies used by network administrators to cut down on spam going out of their network (presumably originating from zombies on the network,) is to prevent all machines on the network from sending mail, except through an approved server. This server can be audited, or perhaps require password authentication; the idea, in any case, is that it’s a choke point for outbound email from the network, which makes it easy for the network administrator to shut down a spam source.

You’re already familiar with this if, for example, you have your own mail server (as I do on the domain) and you have broadband internet service from a company like Comcast or Verizon. Those companies force you to use their mail servers, even though the mail you send is coming “from” your own domain.

Now, as one of my professors says, you may be beginning to see the game. Many people never notice the problem because they use webmail almost exclusively; since webmail is entirely http or https traffic between the user and the webmail server, it doesn’t matter which network the user is on. The mail traffic using the SMTP protocol (usually on port 25, for those keeping score,) originates at the web server, not where the user is signed on, so the port 25 restrictions don’t apply.

In my case, I have four different email accounts which I check with any regularity. Three of them have webmail, but it’s about fifty times easier to let Apple Mail handle all four. However, that means the SMTP traffic—outbound mail on port 25—originates with me. As I move around from home to classroom to lab, I shift between networks which have restricted port 25 traffic to three different outbound servers. Sending email became an exercise in frustration.

What I’ve finally ended up with is a variant of the webmail workaround: I’ve taken my outbound email off port 25. I found a few outbound servers which accept an encrypted SMTP connection (using SSL) at a different port. (The port number varies at the mail admin’s discretion, but the default is in the 49x range.) I need a login and password, but I need that anyway to pick up my mail for that account, so there are no worries there. Since most networks are blocking port 25, I can use these mail servers from multiple networks without having to change my outbound mail server every time I open my laptop.

Now, if all this made zero sense to you, let’s look at it in terms of real mail. Imagine mailboxes as servers: most people have two, the box at their house where they receive mail, and some drop box on the street or at the post office where they send mail. (Let’s pretend, for this metaphor, that the postman won’t pick up mail you leave in your box.) Now let’s imagine that junk mail has become such a problem, with people stuffing bundles of the stuff in every blue drop box, that the postal service has decided to crack down: you can only send mail at post offices where the desk clerks recognize you. Now we’ve created a sort of special drop box, perhaps one with a key, which you can always reach.

Still, the fact that we had to come up with this system is immensely annoying. It’s incredible the degree to which the spammers have ruined a previously useful system.

Now Playing: Wild Horses by The Sundays

Posted by pjm at 10:52 AM | Comments (0)

September 28, 2005

The extent of my ignorance

Some days I think the value of the experience I’ll get here is likely to be greater than the value of the degree itself. In the small company, I was going to run out of new things to investigate; here, I feel like I’m going to be overwhelmed by everything I don’t know, but will need to know in short order.

I am going to be doing some system monitoring work on the University’s research cluster. The sysadmin (or one of them) pointed me to a few things I should know about to get started: the new cluster monitoring tool which they hope to extend, the cluster documentation, and the current monitoring tool.

This is all great documentation, but it’s opening up more doors I need to investigate. The graphing and data storage tool? Python and XML? The internal networking of clusters? This is all stuff I never would have run in to in the course of normal work.

Of course, it’s all coming at me so fast. How do I do this and classwork?

Now Playing: Cinematic from Grand by Erin McKeown

Posted by pjm at 9:14 AM | Comments (0)

September 26, 2005


I have an “office.” Our building, improbably, houses three departments: Electrical Engineering, Computer Science, and Athletics. Given the character of the school, it’s difficult to tell if the students entering are athletes, geeks, or both. My office is a not-quite-cube in the “extension,” which I share with another similarly-assigned grad student. He’s never there, preferring to work in the “lab” set up in a dorm basement on the other side of campus. (I have a key to that lab as well, but seldom have call to go there.) It has a shiny new Dell which I can’t (for some reason) log in to, and lockable drawers with little (except the miscellaneous debris of the Dell) in them.

Today I brought the adapter I needed to plug the Dell’s monitor in to my Powerbook. The mouse is USB, so I had no trouble with that, but for the first time in ages I need to dig up a mouse pad. (I’m sure I have one somewhere, but since I started using trackballs, they’ve been pointless.) The keyboard, unfortunately, is a PS2 plug, so I was stuck with the one on the PB. Maybe I’ll find a spare USB keyboard somewhere and let them take away the Dell.

It’s still not as nice as my attic-office here at home; after all, my books are here, and so is Iz. But it’s a helpful place to get a bit of work done between classes.

Now Playing: King’s Crossing from From A Basement On The Hill by Elliott Smith

Posted by pjm at 9:55 PM | Comments (0)

September 25, 2005

Systems programming humor

It should be noted that the punning and double-entendre possibilities for the fork() call (which, as it happens, is used to spawn a child process) are nearly infinite.

Now Playing: Golden Age Of Radio from Golden Age of Radio by Josh Ritter

Posted by pjm at 1:21 PM | Comments (0)

September 19, 2005

Hacking, again

The part of this class that worried me was the degree of programming. My C programming, to date, has been pretty much limited to “Hello, World” and some kludgy things for a systems course two years ago. It turns out that that, plus my jittery reading of K&R for much of the later part of this summer, is helping a lot. I’m roughing out pseudocode and generating a skeleton of a program which compiles and works as expected in intermediate stages. There’s a lot of complication yet remaining in the current assignment, of course, but it’s a relief that I’m not completely at a loss. Maybe I’ve been learning something about programming with all this PHP work.

The amusing part, I think, is that three weeks of this class appear to equal an entire semester of that systems course.

Now Playing: Twilight from From A Basement On The Hill by Elliott Smith

Posted by pjm at 9:16 PM | Comments (1)

September 15, 2005

Low bandwidth

I have not settled in to a routine which allows time for writing here.

To be more specific, I’ve been attempting to practice a sort of time triage. First, I go to classes. I do my classwork. (I wish I had time for more careful reading.) I meet my TA/GA responsibilities. I try to exercise, I try to sleep. I try to ensure that A remembers what I look like. (This is a joke.) I meet unavoidable prior commitments and try to avoid new ones. Everything else is on a time-available basis, and after all those, not much time is available.

I have two programs due, on Wednesday and Thursday of next week, in languages in which I have not previously done much programming. And Friday and Saturday are my so-far-annual blitz through New Hampshire.

Posted by pjm at 7:26 AM | Comments (2)

September 11, 2005

Tidal pull

And the cumulative weight of this relatively singular reading focus is seeping out into the rest of my life. Such as this afternoon, when I caught myself, astounded, before this staggeringly geeky sentence construction was uttered:

“Did you notice that I implemented a power strip over here?”

Implemented. Yikes. If there was any question that my speaking (and writing) voice is affected by what I read and hear, it should be answered now.

Now Playing: Ten Feet Tall from Drums And Wires by XTC

Posted by pjm at 9:37 PM | Comments (0)

Bandwidth spike

I knew graduate school would be different. I don’t think I had any concept of quite how different.

Classes are one thing. I had plenty of mind-bending classes as an undergrad, and I don’t think this is any tougher than, say, third-year Russian was for me. The difference is that I am more determined to get it right. In night school, the instructors spoon-fed to the class at a careful and deliberate pace, and I got used to easily absorbing the material retail. This is wholesale; it’s coming at us in shovelfuls. I’m spending much more time than I ever have grappling with the coursework outside of class. At least I managed to protect my Fridays from regular obligations, so far (the department doesn’t offer courses on Friday, and I ducked responsibility for TAing labs then,) but at the expense of a late Thursday (labs until 8.)

But what good is a long weekend when you spend the whole thing in the library? I’ve got five books in play right now, and only two are primary texts for courses I’m being graded in. One of those isn’t even in my hands; I’ve been getting it from the reserve desk at the library and reading it (and re-reading it) in three-hour chunks. The other three are an optional text for one class (and you can bet I’m paying attention to optional texts if they look useful,) the text for the course I’m TAing, which I should probably get familiar with in order to answer questions with the tactful, academic version of “RTFM,” plus the text for a course I haven’t taken but should have for two of the courses I’m in. That’s a lot of reading (and, for that matter, a lot of mass.)

And then there’s MPOW, which is the sort of work which can make you look up and say, did I really start in on this three hours ago? (By pure coincidence, the Sakai installation wrapped up right around five on Friday. OK, I stretched it out a few minutes by going back and cleaning up my known false trails, but it really was coincidental.)

The good news is, so far I’m up to my eyeballs as promised, but not over my head. The less-good news is, I wish I had time to absorb what I’m learning better. I feel like this whole program is going to fly by before I notice it.

Posted by pjm at 3:46 PM | Comments (0)

September 8, 2005

There's no escape

Back in July, at the textbook company, we were talking about ways to provide a flexible quiz serving application on our web server. Simply put, instructors could build quizzes which they could then assign to their classes to take online. I’ll spare you the details, which were manifold, but one of the routes we considered following was starting with a module from the Sakai project rather than starting from scratch.

Consequently, I investigated Sakai, and determined that starting from scratch might be easier, given our server. Tomcat, Maven, JSPs, oh my aching head: I’d spend a week installing and configuring dependencies just to run the demo. (And, while open source is nice in theory, to hack Java, I should be a Java hacker. Just saying.)

Skip forward half a dozen weeks. I’m starting a GA position as a sort of support administrator for the department at my university which handles large-scale software installations, usually research-related, on the university’s clusters and research servers (henceforth, following Dorothea’s example, to be known as MPOW: My Place Of Work.) They haven’t got me 100% in the loop yet, so they throw me a smaller project to keep me busy until things pick up.

Have you guessed yet? I’m installing Sakai.

Posted by pjm at 7:02 PM | Comments (0)

August 18, 2005

Broken glass

There’s some quirkiness in the timing. A year ago today, I posted an article detailing the steps I was starting to take to enable my users and my company to handle emergencies without me. My primary motivation, though I didn’t mention it at the time, was to provide some continuity for my successor (Hi, N!) since I knew I wasn’t going to be there much longer than a year from then. But I also noted, half-whimsically, that maybe I’d get hit by a bus or something.

This morning, I got an email from a former co-worker with a subject line bearing the name of one of my former roommates from Pennsylvania. (I won’t go into more detail, because more of you than you’d expect would recognize the names of both the roommate and the co-worker.) Seems my former roommate had a bad headache on his run this morning. His wife took him to the hospital, where they determined he’d had a brain aneurysm burst. He’s described as “lucid,” but he’s going for surgery tomorrow.

The co-worker notes that this former roommate lives two blocks from one of the local hospitals; however, later today he was supposed to be driving, alone, to a meeting in central PA. He was also planning on running Hood to Coast next week; he could’ve been running through the woods alone when this happened.

Somehow I feel like we’re too young for this sort of thing to be happening. And I wonder how up to date my information is.

Posted by pjm at 9:01 PM | Comments (1)

August 16, 2005

Not quite "Hello, World!"

Hello, Medford.

Posted by pjm at 9:14 PM | Comments (1)

August 12, 2005

Last day

They made me a cake.

Posted by pjm at 1:31 PM | Comments (2)

August 11, 2005

Not this time of year

Amidst the packing melée, we’re planning a quick trip to “the Cape” for the Falmouth Road Race. (It seems possible that A will be shooting from a motorcycle; I want a photo of that.)

While mapping destinations we’ll need to find amid summer traffic, I flicked over to the satellite photo view to check buildings. I found a hotel near where we watched the last time we went to this race, and realized this photo had been taken at a very different time of year.

The lot wasn’t full of cars. It was full of boats.

Posted by pjm at 9:53 PM | Comments (0)

August 5, 2005

One foot out the door

This is my last day at work as the one-man IT department. My replacement starts on Monday; we have a list of things to get him started with, along with my hopes of just touring him through as much as I can remember of the range of things I do. I’m hoping to strike a balance between explaining what solutions I have in place and leaving him room to find his own solutions. (Yes, “he.” I didn’t see all the résumés, but I’m not aware of any women applying.)

Since he’ll be taking over my desk and my computers, I’m working on clearing the office up a bit. Mostly it’s just the “clean your room” aspect, but it’s also getting the computers ready for user switching and other things. I want him to have tools ready to hand, without having to deal with my logins and passwords, and I want him to have work to get on right away. In both of my jobs, I’ve had weeks or months after arriving when nobody quite knew what to do with me, and I made my own tasks. I tended to spend that time a bit bored and questioning my decision to take the job, so I’m hoping to keep him clear of that.

So even though I’ll be here for all of next week, there’s definitely a “last day of work” feeling. They brought in lunch a few hours ago, and the president and my department head said nice things. No gold watch, but they did have one of these and some useful tools to go with it.

I said, “This confirms that I’ve done a great job hiding how little I really do.” They thought I was joking; maybe I was. Or maybe I was just thinking about how little time I spend “making license plates.”

Now, if you’ll excuse me, I just got a box with a fan I need.

Now Playing: Wonderwall from Love Is Hell by Ryan Adams

Posted by pjm at 3:33 PM | Comments (0)

August 4, 2005

I am getting sloppy

We’re at the stage, with one last book-companion site, where I march through interminable check-lists of little tweaks to what seems, to me, like a solved problem.

Just now I backtracked through a function which isn’t working. It wasn’t throwing any errors; it just wasn’t doing what was asked. Imagine my shock when the entire code of the function was a single variable assignment, and a comment reading something along the lines of “Something should happen here.”

Right: something should

(Bear in mind that I wrote this code myself, a bit more than a week ago…)

Now Playing: Nobody from All Shook Down by The Replacements

Posted by pjm at 3:10 PM | Comments (1)

August 3, 2005

Grinding down

My Mac here at work is making intermittent sighing noises, and as they increase in frequency they are starting to sound more like grinding noises. Today I opened up the case to see if I could track down the source, and discovered a fan placed to draw air in through vent holes in the back of the case and blow across the cooling vanes over the CPU. When I unplugged the power leads to the fan, the noise went away. Aha.

Blowing the dust off the fan produced no improvement in the sound, so I concluded it was probably shot. Fans, fortunately, appear to be inexpensive (even glowing ones) so I’m currently hunting up a replacement. The original equipment is one of these (PDF link), but the fans themselves don’t appear to be available by retail. Instead, I’m trying to track down one of similar size (60mm a side, 25mm thick, appears to be a standard size, like this) and power requirements—maybe even a quieter one—to put in the spot. The alternative would be similar to what Emily did with her PowerTower in college: leave the case open with a desk fan blowing on it. (Heavy case mods, I think, probably won’t be endorsed by management.)

Meanwhile, I’ve got two older Powermacs up the hall with different (louder) grinding noises. In these, I tracked the noise to a smaller fan which appears to be glued to the video card. I could probably get the fans up and find glue to reattach replacements, but in these cases I’m probably better served by just getting new video cards.

Now Playing: Maneater from Polterchrist by cathode

Posted by pjm at 3:10 PM | Comments (0)

July 31, 2005

Oversized iPod

There’s a lot to post about this weekend, but I’m swamped here, so I’ll just go with the first one.

I managed to leave my iPod at work. Not uncommon, but frustrating when there’s a lot of driving ahead.

Then I remembered that I had my laptop with me, and since I rip music for the iPod there, it has all the same music.

So I drove up 91 in Vermont with my Powerbook next to me, wireless off and screen dimmed down to nearly nothing, and the headphone jack hooked up to the cassette adapter.

Big, expensive iPod

Posted by pjm at 2:33 PM | Comments (2)

July 29, 2005

Flowers are accepted

It’s that time of year again…

Now Playing: Watching You from Us And Us Only by The Charlatans

Posted by pjm at 12:21 PM | Comments (0)

Advocacy != broadcast rights

Yesterday I had to spend some time on a few “intelligent design” advocacy websites. We’d heard they were offering free downloads of a video we distribute, and I was to check out whether that was really the case.

Sure enough, 12:55-running-time .ram files of a 14:30-running-time video. I don’t think that’s really covered under the license. I see cease-and-desist letters in their future.

Even more fun: two sites allowed the file to be saved to disk, rather than just streamed. Both files had the same md5 hash, indicating a phenomenally high probability that the files were identical: in other words, one had copied it from the other, or they’d both copied it from the same source.

Not that this company is inclined to spend too much time engaging their arguments, but c’mon, guys. Being on the wrong side of current copyright law doesn’t really make your point.

Now Playing: One Down from Ben Folds Live by Ben Folds

Posted by pjm at 12:13 PM | Comments (0)

July 28, 2005

Closed system

One of my co-workers sent an all-staff email to update the mailing address of one of our authors. It’s a town near the one I grew up in, so I guessed the college in question. Looking at the directory of the department in question, I found not only our author, but one of my high school classmates (I think) working as a lab assistant. I also saw an assistant professor who I interviewed a few years ago; he was instrumental in starting a running club I profiled for New England Runner. Out of curiosity, I checked which classes he taught, and noticed that in one of them, he uses another one of our textbooks (not written by the author who started the whole chain.) Within five minutes, I’d started at my day job and hopped back to high school (three jumps,) my freelance work (four jumps,) and back to my day job (five jumps.)

It may not be a small world, but the interconnections are quite dense.

Now Playing: Trumpet from Inarticulate Nature Boy by Josh Clayton-Felt

Posted by pjm at 9:34 AM | Comments (0)


Now, there’s a lot that’s cool about this story, but the thing that had me laughing out loud in the car was the news that there really is a telescope in development with the official name “Overwhelmingly Large Telescope.”

Now Playing: Straw Hat And Old Dirty Hank from Rock Spectacle (Live) by Barenaked Ladies

Posted by pjm at 8:41 AM | Comments (0)

July 27, 2005

Long time, no join

It has been quite a while (three years) since I took Database Management, and since then I’ve mostly just been doing CRUD for websites.

Now I’ve got a situation where I should probably use a join. A left join, specifically. To put this in non-technical terms, I can either get two batches of data (from two database tables) and correlate them myself in the application, or I can combine the tables temporarily and grab a single batch of data. I can go a long way around the mountain range on flat land, or start climbing and take a shortcut through the pass.

If only I could remember the proper syntax for joins, and exactly which one I wanted, without having to scan the manual.

Now Playing: Round Here from August & Everything After by Counting Crows

Posted by pjm at 3:35 PM | Comments (2)

July 26, 2005

Setting the bar low

There was another one today. A co-worker came by, saying her printer wasn’t working. Sure enough, the lights were blinking and the power button didn’t work. I unplugged it, counted five, then plugged it back in. The lights shuffled, and it spit out a page of garbage. Then I printed a test page from the printer properties page, and it came out fine. Problem solved.

“You can’t leave,” she said. But why not? It happens that I don’t much like printers, but this was not rocket science. Power down by whatever means, power back up, see if the problem remains. Anyone who can’t try that troubleshooting cycle shouldn’t be in my job.

Do we have such low expectations of tech support that this is considered a good job?

Now Playing: Lawrence, KS from Golden Age of Radio by Josh Ritter

Posted by pjm at 2:09 PM | Comments (0)

July 21, 2005


I am spending today, and probably large sections of the next week, whipping together a site to support a book which is going to the printers “any week now.” It’s a final exam, of sorts; a chance to take the content management system I’ve shepherded through two previous sites and write a sharper, cleaner version using what I learned from those earlier ones.

Content management is a very basic level of database work, with just a few relationships and a lot of CRUD: the database acronym for Create, Read, Update, Delete.

If only things were so simple outside the database. There’s a lot of Update and Delete going on in non-work, but none of the operations are simple, and there seem to be a lot of them going on at once.

Now Playing: Television by Robyn Hitchcock

Posted by pjm at 2:59 PM | Comments (0)

Internal email I won't send

…because I don’t need to share my internal bug-finding narrative with my co-workers.

Yeah, I don’t understand this [site feedback] either. “[object] icon”?

Wait… crud. There’s a bug. Only on the “list [objects] by subject” pages. Wow, that was obscure. It’s fixed, now.

Now Playing: Monster from ‘Mousse by The Nields

Posted by pjm at 2:50 PM | Comments (0)

July 20, 2005

Different sockets

My first car—the one I learned to drive on, the first one registered in my name—needed extensive work before I took it to college. Since I couldn’t afford the work, I did it myself. This involved the replacement of all four doors, which were rusted, among other things. I borrowed a truck (one of the advantages of my usual summer job was the availability of flatbed trucks,) and drove a hard bargain with a scrap-yard owner in Chelsea, Maine to get four rust-free doors from two different wrecks in his yard. I drove them home, stripped most of the interior finish out of all eight doors and the car, then put it back together, complete with at least one working door lock. For at least two more years, I drove a tri-colored car: the original body was silver (though it developed large mangy primer-colored patches in its last days,) the front doors grey, and the back doors maroon. One of the back doors did not open; the other would open only if the corresponding front door was also open.

I mention this because, in the process of this reconstruction, I acquired an absurd volume of machine tools. The problem was that the car was a sort of early hybrid, an American make with a Japanese diesel engine. Half of the fasteners were metric, half inches, and the other half required Torx bits. I built a remarkably heterogenous toolbox.

I’ve done the same with my servers here. Some of the servers are (relatively) modern Linux flavors, running the 2.4 kernel with modern niceties like sudo, iptables, and various database utilities. But one of them is a bastard child like my first car. It has a 2.2 kernel and a lot of obsolete packages hooked closely in to its function. In order to run modern software, like SpamAssassin or Logwatch, I needed to install a second, newer version of Perl (think metric, not imperial, socket wrenches.) Now I’m getting database errors; I may need to upgrade the database as well, in order to get the most recent version of SpamAssassin installed.

And it does feel just like working on that car, or the Scopmobile chronicle. I try a few different tools, maybe find a new one, and in the end I wind up hammering on a piece with the socket handle trying to make it fit in place. One day, the current software just won’t work, and it will be time to power down the little old box and find a place to properly dispose of the remains.

I’m comforted by the idea that I won’t be here to see that day.

Now Playing: Daisy And Prudence from Distillation by Erin McKeown

Posted by pjm at 9:09 AM | Comments (0)

July 19, 2005

Down in the caves

I am taking my bold step forward. It is time for me to learn some new tricks. I am installing Ruby and Rails on my development server (also known as the Mac in my office.) If you want to follow along, I did the installation using this walk-through and now I am taking first steps following the OnLAMP introduction.

I feel like I am walking through a dark cavern with a dim flashlight. I can see the path a few steps in front of me, get a slight idea of what might be around me, and read my map. But I can’t really see where I’m going yet, or even how I’m getting there.

Now Playing: L.A. from Figure 8 by Elliott Smith

Posted by pjm at 2:33 PM | Comments (0)

July 17, 2005

In which I am unprofessional, as usual

I may not have mentioned that I am a technical editor for Julie’s book.

My biggest problem so far is my tendency to treat it like an extended blog post (or usenet posting) and insert smartass remarks, which aren’t really relevant to either my task or hers. For example, I inserted, then removed, a note about Blogger’s ability to “convert line breaks” in postings, using a double <br /><br /> tag:

…which is so far from the intent of HTML as a markup language that browsers should reject it as invalid code. But they don’t, so we will tolerate it until the Revolution comes.

This helps no one.

Now Playing: Come And Find Me from Golden Age of Radio by Josh Ritter

Posted by pjm at 9:24 PM | Comments (3)

July 14, 2005


I’ve been contacted by email to remind everyone that Friday, July 29 (two weeks from tomorrow) will be System Administrator Appreciation Day. Mark your calendars. Heck, figure out who your sysadmin is. (Maybe it’s you?)

I am disappointed, however, that ThinkGeek is not running their Sysadmin Pageant again this year.

Now Playing: Some Girls Are Bigger Than Others from The Queen Is Dead by The Smiths

Posted by pjm at 9:39 AM | Comments (0)

July 11, 2005

On track

It’s hard to read anything about web development without somewhere stumbling across some mention of Ruby on Rails. It’s much harder to figure out what these mentions are actually talking about.

Today I found a link (on Daring Fireball) to the Ruby on Rails Movie. I think I might have figured out what’s going on, but I’m not sure: my brain exploded about halfway through.

It seems likely that I will have to learn Ruby. The question is, when?

Now Playing: Song For A Family from Life by Inspiral Carpets

Posted by pjm at 12:18 PM | Comments (1)

July 7, 2005

Failing gracefully

I’ve talked about degrading gracefully here, in regards to the appearance of web pages and offering cascading alternatives for browsers which don’t support certain features.

This morning, though, I’m concentrating on failing gracefully. I’m figuring out what to do with the dozen or so browsers each day which send requests for pages which no longer exist, or never existed. For a while, I harbored dreams of using mod_rewrite to somehow redirect all such requests to the proper new page, but I’m coming to see that it would require a pretty massive line-by-line mapping of old pages to new.

Instead, I’m trying to take the information I can find in the old URLs and query the new database for pages which might match. I’m not trying to be definitive; instead, I’m settling for helpful. Instead of, Oh, that old one’s not it, you want this one, I’m offering, We’re out of that, perhaps one of these would suit?

This sort of thinking is embedded in the structure of the internet. From the beginning, the network was designed to detect damage and route around it. A blank “no” is not the way of the internet; an alternate route is. I like that philosophy, and I enjoy applying and implementing it. And the nature of this particular bit of code is that it forces me to look very carefully at the question that was asked, determine how much information the server can easily extract from it, and see how far we can get with that data. It’s thinking a different way about the data structure that I’ve built, and it’s one of the more fascinating things I’ve done to this site in a few weeks.

Now Playing: 3 Strange Days from School Of Fish by School Of Fish

Posted by pjm at 3:51 PM | Comments (0)

July 5, 2005

GPS and the Mac

I mentioned back in May how I’ve had trouble transferring geocaching waypoints from the batch files I download from the website on to my GPSr (a Magellan Meridian). The problem is that I use a Mac, which lacks a serial port, and a lot of GPS technology is closely tied to serial ports; the technology itself has not been designed to be USB-friendly.

This weekend, I finally hit on a workaround which doesn’t involve Windows software. It happens that my GPSr has a card slot which accepts the same size cards as my digital camera. So, the process works like this:

  • Get a batch of waypoints, either in .gpx format, or .loc format.
  • Put the smaller “spare” flash card in the camera and use the USB cable to plug the camera in to the Mac. As a result, the card turns up as a removable “drive” on the Mac desktop.
  • Use MacGPSBabel to convert the waypoint files into the Magellan flash card format, and save the output to the card.
  • Disconnect the camera, remove the card, and insert it into the GPSr.
  • Power up the GPSr, and issue a few menu commands to load the waypoints from the card. And we’re in business.

This actually ends up being the most efficient way to transfer waypoints to the GPSr that I’ve used yet, including the Windows-based workaround. I was pretty proud of myself for figuring it out, but naturally, nearly everyone else is unimpressed.

Now Playing: Friction from A Box Of Birds by The Church

Posted by pjm at 3:19 PM | Comments (1)

July 1, 2005

The weblog survey

So, I took the weblog survey, since I’ve been seeing those buttons all over the place.

On at least one site, I reloaded the page once or twice to see if the button changed. Nope. Then when I finished the survey, I discovered that you choose from one of five buttons. Now, that could be boring. This should be randomized.

First, if you can embed a PHP block (say, if it’s going in a sidebar) you could just put in this code to select one of the buttons at random:

$options = array("statistic", "bell", "science", "cameron", "powerlaw");
echo '<a href=""><img src="', $options[rand(0,4)], '.gif" alt="Take the MIT Weblog Survey" style="border:none" /></a>';

(If your web host is using a version of PHP newer than 4.2, and they should be, you don’t need to seed the rand() function.)

But that doesn’t work well within a blog entry, so let’s try another route. You could create a file, like survey.php, and put this code in it:

$options = array("statistic", "bell", "science", "cameron", "powerlaw");
$image_url = "" . $options[rand(0,4)] . ".gif";
header("Location: $image_url");

…then, with that script on your site, call it from the src value of the img tag. Or, you could just take my word for it that it works, and use mine, by using this HTML:

<a href="">
<img src="" alt="Take the MIT Weblog Survey" style="border:none" />

…and it will look like this:

Take the MIT Weblog Survey

Now Playing: Alameda from Either/Or by Elliott Smith

Posted by pjm at 3:03 PM | Comments (0)

June 29, 2005

Shaking the map

It appears that this new API means that one no longer needs Greasemonkey to do annotated Google maps (which looked broken for a while anyway.)

It’s too bad that the database doesn’t allow public use of its query data, or easy RSS/XML exports, because I could imagine dozens of maps popping up showing “all my local caches, with found in red and unfound in yellow,” or something of the sort.

Update: And there’s a Yahoo! Maps API, too.

Now Playing: Everlong from The Colour And The Shape by Foo Fighters

Posted by pjm at 3:10 PM | Comments (0)

June 28, 2005

Bug triage

File under: How soon do we get rid of the smartass?

A co-worker was seeing unusual behavior from an object in our catalog. I tracked down the problem (I was using something as a database key without explicitly declaring it so, or even enforcing key-like behavior, and I’d gotten away with it for more than a year,) and fixed the specific data corruption issue.

She emailed in response: “What will we do without you?”

I replied, “Hopefully, find and patch all the bugs I’ve created.”

Now Playing: Saints from Last Splash by The Breeders

Posted by pjm at 3:59 PM | Comments (0)

June 27, 2005

Senseless inconvenience

Sleepwalking through the security screening, thankful I was sharp enough this time not to walk through the metal detector with my cell phone (that got me wanded once last year,) I saw a lighter on the table. Someone had discarded it, because they aren’t allowed through security and onto planes.

A few minutes ago, however, I realized that I am still in possession of my keychain, which includes one of those wonderful Leatherman Micras. I’ve had one of those confiscated before, so I know it’s contraband.

Yes, ladies and gentlemen, the federal government is Keeping Our Airlines Safe. From smokers, apparently.

Either that, or they knew the odds of me actually getting on a plane today are, at best, even.

Posted by pjm at 12:24 PM | Comments (1)

June 25, 2005


This is why I bore the snot out of people: they aren’t interested in how I know something. (See, you just pipe the output from this command through grep, then into a pager…) They’re just interested in what I know.

For me, the how is the more interesting part.

Posted by pjm at 1:22 PM | Comments (0)

June 21, 2005

The big picture is a very small picture

It looks like they’ve hired a replacement for me. If you’re still shopping for work in this end of the state, though, it looks like his company is hiring (and it’s too early for them to have known he was leaving, so that’s at least two jobs.)

I’ve discovered that the competing pressures of maintaining thirty-odd machines while minimizing the amount of used parts kicking around have led me to some interesting solutions.

A very simple example: At least two machines need to be upgraded from 256 MB of RAM to 512 MB of RAM. The simple solution might be to buy two 256 MB sticks of RAM. However, it turns out to be slightly cheaper to buy a single 512 MB stick, install that in one of the machines, remove its existing 256 MB stick, and add that to the second machine. If there happens to be re-usable RAM in a retired box somewhere, that might make for even more efficient upgrades.

I’d like to build all our boxen with at least four RAM sockets, so I can aggregate old 64 MB and 128 MB sticks into enough RAM to run WinXP at a reasonable office-machine speed.

Now Playing: Satellite from Elliott Smith by Elliott Smith

Posted by pjm at 11:21 AM | Comments (0)

June 20, 2005

Beholden to the geeks

Neal Stephenson contributed a very sharp editorial to the NYT last Friday, which may have been overlooked by some because it reads like a Star Wars sociological text for most of the text.

It’s the last few paragraphs, which follow on the theme he introduced in In the Beginning, Was the Command Line, which have the punch:

Scientists and technologists have the same uneasy status in our society as the Jedi in the Galactic Republic. They are scorned by the cultural left and the cultural right, and young people avoid science and math classes in hordes. The tedious particulars of keeping ourselves alive, comfortable and free are being taken offline to countries where people are happy to sweat the details, as long as we have some foreign exchange left to send their way. Nothing is more seductive than to think that we, like the Jedi, could be masters of the most advanced technologies while living simple lives: to have a geek standard of living and spend our copious leisure time vegging out.

Now Playing: Leaves And Kings from Josh Ritter by Josh Ritter

Posted by pjm at 11:15 AM | Comments (1)

June 16, 2005

Elimination rounds

I participated in an interview for my job today. There are three more in the queue. My boss (weird word) started with a few dozen résumés, then did phone interviews with a fraction of them. Now we’re talking with a fraction of those.

I don’t actually have a big role here. I explain what I do, the major areas of my work. I answer questions about it. And that’s about it. I keep my eyes open, but I’m not evaluating closely. This isn’t going to be my decision, fortunately.

Others in the office were shocked. We’re interviewing? Is it happening that soon? They’re stopping by my office and saying, Wow, you really are leaving, huh?

I can’t figure out what kind of person should be in my chair. It might be good for the company to have someone more qualified than me sitting here; maybe they could fix all the things I’ve been holding together with duct tape, do new and creative things. Or would they get bored and annoyed with all my ugly code, muttering maledictions as they fix everything? Do we want someone who will jump in and want to learn stuff, or someone who already knows it?

Why does it matter to me? It does; I want to see what I have done sustained, maybe improved. I want what work I’ve done to be appreciated and provide at least a good foundation to build on. But it’s not going to be my problem anymore; if they wind up with someone not as good (how?) it won’t have any consequences for me.

Now Playing: Fall from Cherry Marmalade by Kay Hanley

Posted by pjm at 3:26 PM | Comments (0)

June 15, 2005

Breaking in

My Powerbook has a new keyboard. It also has a new optical drive and a large helping of new memory, but it’s the keyboard that is really making a difference.

And it is. It’s visually identical, but it feels different under my fingers. First it was just the spacebar, which I always whack with my right thumb and therefore usually has a worn-smooth section on its rightmost corner. But with that reminder, I start noticing that the keys are just a bit springier, the textures a bit crisper. It’s like a fresh pair of shoes in a familiar model.

Posted by pjm at 10:04 PM | Comments (0)

Not fluent

I spent a good chunk of this afternoon in a language I don’t use much anymore. Specifically, I added a little Javascript ease-of-use widget to one of our site administration pages.

I used to be better with Javascript than I am now, back when it was the only way to do anything much on a website. When I started working with PHP a few years ago, I left Javascript pretty much behind, but they have a lot in common, so this time I’m coming at it from a different direction.

Still, like any time you work with a second language, I had to put more of my brain into what I was doing. It was fun. I wish I could get that hooked in to a project every day.

Posted by pjm at 9:01 PM | Comments (0)

June 13, 2005

Wheels within wheels

So, I use this beautiful little script which, run daily, sends me a capsule overview of most of the “interesting” things in my system logs over the past day. It depends heavily on Perl and regular expressions, and installing Postgrey and upgrading one of the mail servers meant I had a lot of log lines it wouldn’t recognize. So I’ve spent part of this afternoon installing the latest version on the relevant servers.

My mainstay server is showing its age. The default system Perl is now too old for some scripts, but with other services depending on the older version I’ve worked around this by installing a second Perl at a slightly different path. After installation, I need to correct the shebang on each file which has one, to use the “correct” (modern) version of Perl.

Which either has me opening and editing a few dozen files one by one, or learning the obscure geekiness which is sed. Timewise, it’s a wash, but learning about sed is more fun. (On my Mac, there is BBEdit’s wonderful multi-file find-and-replace. Why doesn’t emacs have that? It has everything else, after all.)

Still, how did I get there from log files?

Now Playing: Bring A Gun from Seven by James

Posted by pjm at 2:58 PM | Comments (0)

June 10, 2005

Weighted shuffle playlist in iTunes

I’ve hinted at this before, but it’s painfully geeky and I figured nobody else would want to know. But Joe asked.

The central idea is this: I don’t want to hear any song so often I get sick of it. But I do want to hear songs I like more often.

The problem with creating a complicated playlist criteria in iTunes (and hence on the iPod) is that “smart” playlists must be either made entirely of AND rules (“Match all of these criteria”) or entirely of OR rules (“Match any of these criteria”.) You can’t combine ANDs and ORs in one list. So what I do is create a series of playlists made of AND rules, then a master playlist which is, essentially, an OR of all those AND playlists. Like so:

First, I created five “smart” playlists with two rules each, one for the rating of the song and one for how long since it was last played. For example, if the rating is five stars and the last-played date is more than ten days ago, it makes that list. Songs need to match both rules to be on these lists.

As the ratings get lower, the “how long” is longer; one star, for me, is currently 70 days. This is barely relevant, because one-star songs are usually the first to go when I’m deleting music, but it gives an idea of the range. The larger the collection, the longer these times go; when I had half as many songs on an iPod, one star was only forty days and five stars was only five.

The next step is the master playlist. This list includes songs which are on any of the five rated playlists; there’s just a rule each of those playlists, where “playlist is X.” So that bundles up the whole library, generally showing a bit more than a third of the total. I also check the box which says only to play “checked” songs, so I can un-check the checkbox next to the song and it won’t play no matter what its rating. Needless to say, I “shuffle” the master playlist (play it in random order.)

The weakness here is that all my music needs a rating. The simple way of dealing with this is to create a sixth sub-playlist, “Unrated,” which includes all unrated songs, no matter how long it’s been since they were played. This means if I want a song to go away, I need to rate it! It’s an ongoing process; I have songs still in the library which haven’t been rated because they haven’t played in three months. I also continually change ratings; any time a song catches my ear, I’ll bring up the iTunes menu and check the rating, bumping it up if I like it or down if it bugs me. (Sometimes if it bugs me, I’ll just delete it. Why should I keep something I don’t like?)

This can, of course, be The Death of the Album. I do still play CDs from start to finish now and then. I also make occasional mix playlists because songs just work well together. (Kelsey played a set on Saturday which could’ve been a good playlist from my library; in fact, I’m making a playlist with the ones I’ve got.) And sometimes, particularly when I’m at the gym or in the car, I will just play the five-star playlist.

So, yeah, I’m kinda geeky about my music. And all in all, it works surprisingly well.

Now Playing: Roses Grow from Free by Concrete Blonde

Posted by pjm at 9:25 AM | Comments (4)

June 1, 2005

In the shop

My laptop is away, and I don’t expect to get it back until tomorrow, at best—maybe even Friday.

The CD drive started making a horrible shrieking noise a few weeks ago, and rattled when the machine was shaken gently. I figured that was probably the end of the drive, which (unfortunately) croaked with a disk inserted.

I had to shop around a bit for the repair. The last place I took it admitted that they were so backed up that it would be ten days before they could even look at it, let alone order replacement parts. I didn’t want to be without the machine (which still works, if you don’t need an optical drive,) for so long, so I contacted a local shop which we’ve sometimes used here at the office. They were inclined to just order a new drive without needing to look at the thing, so I agreed to a drive upgrade (I’ll be able to burn DVDs now, should I ever want to,) and a memory upgrade (a bit more than twice the RAM, which should keep it kicking for at least another year.)

The parts were in yesterday, so today I dropped off the machine. Now I’m completely offline at home. I’m looking forward, I think, to an internet-free evening or two. I wonder what I’ll do with them.

Now Playing: Close My Eyes from Live Light (France, 11/1994) by Ride

Posted by pjm at 5:13 PM | Comments (1)

Job application tips

Every now and then my boss comes over to share a favorite bit from the applications for my job. I’m reluctant to share the details here, but I’m definitely assembling a small list of “what not to do” examples. Maybe generalities?

  • Expect to be Googled. Or, more specifically, expect that we’ll check out the website at the domain your email address is on. If there’s anything there which you wouldn’t want to explain to your parents, the FBI, or the RIAA, you might consider not using that email address, rather than letting us speculate on your level of responsibility towards company servers.

  • Listing programs or applications you have experience with is cool, but you don’t need to include every single one. Certainly there are jobs for which you’d need to claim experience with web browsers, for example, but we’d prefer to take the basics for granted and hear about your PHP experience, or how you write iptables rules for fun in your spare time. (Or, at least, that you’ve heard of iptables.) Don’t try to pad the list.

Now Playing: Hope from Up by R.E.M.

Posted by pjm at 2:52 PM | Comments (0)

May 27, 2005

Geek glee

As a Mac-using geocacher, I’m somewhat outside the geocaching technology mainstream. GPSRs which play nicely with Macs are few and far between; apparently the GPS architecture is wedded to serial ports at a very low level, and USB connecters are dicey. (I’ve got a USB adapter for my GPSR; it doesn’t work. Maybe I should buy a new one, with Bluetooth?)

The result is that I can only add cache waypoints to my GPSR by keying them in or by taking it to work and sending a batch through the serial port of my Windows box there. This can be a drag, because it makes spontaneous caching nearly impossible. Ideally, in any given location, I’d have a few dozen nearby waypoints already in the GPSr, and when I had a spare hour, I’d check to see which is closest. I can do this for places like Fayetteville, which only have eight or ten caches handy, but what if I’m going to Boston? How can I decide which caches I’m actually going to hunt?

This brings me to the next hint: there’s more to the cache than the coordinates. There’s other data, ranging from a description of the container to an encrypted hint for the hide. If I’m looking at a limited number of caches in an area (or I’m planning an expedition from home,) I print the pages from the website and haul the paper along with me. But this weekend I’m going to be in a cache-rich environment, and don’t know where or when I’ll have the time to go looking. I can’t print them all out.

Enter Pocket Queries, which are a paid feature of the website. Anyone can download search results as an XML file (a format they call .loc) but paid members (like me) have the option of getting search results as an e-book. Coincidentally, the e-books can be loaded on Palm organizers… and I happen to have one handy. So I’ve got several dozen description pages loaded up and ready to go! I’m unnaturally pleased with this.

Even better, of course, would be if I could have the descriptions on the GPSR itself. I suppose if I was determined enough, I could parse the .loc files into the XML format for custom Google maps and overlay the cache markers on a satellite photo more-or-less automatically.

(This is exactly the sort of geeky thing that makes people glaze over when I talk about it, so I have to post it here.)

Posted by pjm at 9:49 PM | Comments (0)

May 25, 2005


I set out to write a regular expression to validate customer-input email addresses on our website, which we use to send an order summary (and then promptly erase.)

I actually found one in the back of Mastering Regular Expressions (which is in a second edition now; I got the first edition Wicked Cheap at Ocean State Job Lot)…

…and discovered that a regular expression to match a valid, RFC 2822 email address comes out to sixty or so lines.

I simplified.

Now Playing: Secret Agent from Sister (1998 Re-Release) by Letters To Cleo

Posted by pjm at 6:20 PM | Comments (0)

May 24, 2005

Take notes

When you are cold-called by the computer-supply catalog company, take notes. (Better still, get an email with an outline of the high points.) Put the relevant details in the wiki.

Then, when someone else from the same company calls, about three weeks later, you can honestly say, “Oh, yes, we’ve already heard from you. We were contacted on $date by $caller_name, and get_pronoun($caller_name) sent us $file_list and get_possessive($caller_name) contact information.”

Works like a charm.

Now Playing: The Innocent from Fly Me Courageous by Drivin ‘N’ Cryin

Posted by pjm at 10:57 AM | Comments (0)

May 17, 2005

Today's sign that I am Not Right in the head

I want to have some kind of feed to tell me how many people have responded to the job listing.

I know the answer is at least two. I wonder how high it will go.

Now Playing: Mr. Right Now from If You Lived Here You’d Be Home Now by The Nields

Posted by pjm at 12:10 PM | Comments (0)

May 16, 2005

Take my job. Please.

I think we went less than half an hour from posting the listing on Monster to the first response.

Send your entry now. I know some of you are the sysadmin/webmonkey type. At least, I think I know. Do I?

Since I’m not making the hiring decision, I doubt there are any extra points awarded for reading here, but if you’ve been reading closely (and understanding what I write) you’re probably relatively well prepared for the interview. We’ve sort-of lowballed the requirements, looking more for someone like I was four years ago than for someone like I am now. And I didn’t want us to create an unfillable opening.

Now Playing: Copied Keys from Back to Me by Kathleen Edwards

Posted by pjm at 5:03 PM | Comments (0)


  • Installation of SpamAssassin 3.0.3 fails at the “make test” stage. All test pass except for “SA_test” which seems to be important.
t/spam......................FAILED tests 1-7
        Failed 7/7 tests, 0.00% okay
  • Is there such thing as an open-source license management solution? It seems counter-intuitive somehow, but a customer asked this morning. I thought (since they were working on an Xserve) that it should be possible to write a shell-script wrapper to check, create, and/or remove lockfiles as a sort of base-level concurrent-user limitation. Maybe the idea that it’s that simple is enough to keep anyone from making an open-source KeyServer?

  • I need to make PHP on a Linux server connect to an MS-SQL server which is Elsewhere, both in network and geographic terms. No problem recompiling PHP with the mssql functions and FreeTDS, but now it is both (a) failing to connect, and (b) producing no error messages. I think this is the difference between “failing gracefully” and “failing obstinately.” I have no other MS-SQL server to test with, so I can’t tell if the problem is with my server or theirs.

Update: And then the SpamAssassin build failed on another, different set of tests. And then it crashed the server. Maybe again some other day?

Now Playing: Drive Away from Golden Age of Radio by Josh Ritter

Posted by pjm at 1:59 PM | Comments (0)

May 12, 2005

Debugging a moving target

It would be bad enough, honestly, if the problem was that the images turn up in the wrong place in IE/Win. (After all, then the correct answer would be, “IE/Win is evil, and doesn’t implement the CSS spec predictably or well; if the cover images aren’t right, you should be using a better browser anyway.” Then I’d figure out what’s wrong and write a special little CSS workaround for IE/Win.)

No, the real problem is that the images come up in one (wrong) place when you link in to the page, and then another (different, but equally wrong) place when the page is reloaded. I’ve actually sat on the problem page, clicking reload, and had the images migrate around the page in an apparently random pattern, flitting between three locations (one of which is actually the right one.)

Since the browser is allegedly using the same HTML and CSS both times, I’m pretty much helpless to debug the problem. The current solution I’m going with is, “sorry, IE/Win users. No pretty images for you.”

Now Playing: Half Magic by Matt the Electrician

Posted by pjm at 12:00 PM | Comments (0)

May 10, 2005

It would happen now

…if it was going to happen.

chkrootkit is warning me about a possible worm on our mail server, but I can’t find any independent trace of it. And, just to make things interesting, only one of the five versions of chkrootkit I’m running is tattling. The others see nothing. Honestly, tell me three times.

I really don’t have time to play compromise-recovery right now, so I’m going to say four votes against one and leave it be. But it had better not come up again tomorrow.

Now Playing: It’ll Chew You Up and Spit You Out from Still in Hollywood by Concrete Blonde

Posted by pjm at 3:24 PM | Comments (0)

May 4, 2005

There's always someone geekier than you

I have been a self-confessed track geek for a dozen or so years. I suppose you could even say I’m a professional track geek, (“When the going gets weird, the weird turn pro,” as the man said,) and for a few years I even managed to support myself with a job for which one of my major qualifications was being a track geek.

That said, I’ve always fallen silent when I’ve shown up at meets and seen the cabal of T&FN guys with their stopwatches and binders. I just can’t measure up, there; I love seeing someone run fast, but when you come right down to it, I like to see a good race, not a good statistic.

So, though my fellow “Bell Lap” contributors are sometimes as uneven as I am, I think Marc Bloom nailed it today.

Now Playing: Left Of The Dial from Tim by The Replacements

Posted by pjm at 4:51 PM | Comments (0)

May 2, 2005

Mysterious glyph

(I could probably just say, “icon,” but I like the word “glyph.”)

While I wait for a large file to copy (twice,) I find myself looking at the precision screwdriver set I was using to install a salvaged hard disk. Not for the first time, I notice how irregularly the slots are labeled. The flat-head section contains a sort of flat-head icon (a circle with a dash inside, not unlike a θ as long as the crossbar doesn’t touch the circle) with the size above in millimeters (abbreviated m/m, not mm.) The phillips section has no icons or sizes, but numbers: NO.00, NO.0, NO.1. Next in that row is the pointy AWL… then…

The tool is like one of the screwdrivers sawed off at the base, with just a little stub of shaft and no business end whatever. It’s not magnetic. And the icon looks like an alarm clock set to 3:00, with flames (apparently?) coming from the top, but no bells. And there’s a big X printed over the icon.

This is supposed to transcend language, I suppose, but instead it’s more of a mystery than any translation puzzle.

Now Playing: Lost In The Plot by The Dears

Posted by pjm at 5:09 PM | Comments (0)

With an aim to eradicate

We sent out fifty or sixty “evaluation” copies of a particular CD recently. Five or six recipients have contacted us to say the disks wouldn’t mount in their systems, but to date only one has sent the “faulty” disk back.

Both the “faulty” disk, and a control picked up from the stock room, mount without complaint on nearly every system in our office. The exception is my Mac—the machine on which this particular title was mastered, mind you—which thinks for a while, then spits out the disk without comment or explanation.

Just for fun, I also powered up the Firewire external CD burner, and verified that the system will mount the disks in that drive, but not in its internal drive.

So it seems likely that there’s an issue with the initial file-system blocks of the disk which only affects certain drives. And it happens that about 10% of the recipients of the evaluation copies have such drives, a significantly higher percentage than we have here in the office.

I’m trying to find out what system software/hardware the people with “faulty” copies are using, because (of course) it doesn’t occur to most people that this kind of information will be necessary in eradicating a problem. I guess we think of things as broken or not, and the idea that it could be broken to some people and not-broken to others, depending on the firmware of their internal CD-ROM drive (I’m trying to somehow eliminate the possibility that my drive is having problems) is a bit too exotic for everyday thinking.

I’d be less motivated to suss this out (preferring to kick it back to the disk authors) if I hadn’t mastered the disk myself. I want to establish that this isn’t a problem I created, even inadvertently.

Now Playing: Away from Back to Me by Kathleen Edwards

Posted by pjm at 11:29 AM | Comments (0)

April 26, 2005

Annotated Google maps broken?

Last month, JM and I gushed about annotated Google maps. At the time, I didn’t have an itch to scratch, nor any spare minutes, so I didn’t make one.

Today, I was going to try to map Razorback Ranch for Barb, who is in Arkansas now… but for some reason, it’s not working on either Mac or PC.

I had to update Firefox to 1.0.3, update Greasemonkey, and grab the latest map script, so the problem could be with any of those three or with Google Maps itself. (Maybe they somehow disabled this capacity? Somehow that seems un-Googlish. Maybe they just disabled Greasemonkey?)

I could make the marks show up on the right column, but the map didn’t center and zoom according to those numbers, nor did any of the icons go on the map. The “Display Points” link which used to appear, no longer does. I checked with JM’s examples, and they didn’t work either, so I don’t think it’s just my XML.

Ideas, anyone?

Now Playing: Big City Girls from SXSW 2005 Showcasing Artist by The World Provider

Posted by pjm at 2:18 PM | Comments (2)

Free, encrypted email

Last year I wrote about encrypted email and wondered when (or how) the free web-based email services would offer the ability to encrypt (and decrypt) email as a feature.

Since then, I’ve fiddled with Gmail a bit myself, and discovered that if one uses Gmail as a POP server, one has access to the same encryption/decryption tools available to the POP client, like Enigmail for Thunderbird, or GPGMail for Apple’s, both of which use GPG.

Now, it turns out that someone has produced a Firefox extension which allows for using S/MIME certificates with Gmail’s web interface. (Brent linked some sites explaining how to get and use S/MIME certificates several months ago.)

I think this should be sufficient to answer the privacy concerns about Gmail, myself. Don’t want Google reading your email? Encrypt it.

Now Playing: Dancing On The Jetty from The Swing by INXS

Posted by pjm at 9:32 AM | Comments (0)

April 15, 2005

Clearing the cruft

You’ll remember that I have constructed, over some months, a dense and convoluted .htaccess file using mod_rewrite, mod_access, and mod_setenvif.

Today I took a step I’ve been meaning to take for a few weeks: I wiped out most of it in favor of a simpler file using mod_security which, because it can filter in a much more specific manner, allows the removal of many of the convoluted tactics from the old file. I followed this walk-through. I’ve actually cut the length of the file nearly in half, and one of the other benefits of mod_security’s flexibility is that the resulting file would work perfectly well, with no changes, on another site—it isn’t, for example, customized to account for my renamed comment scripts, and the rules are less likely to block where they shouldn’t.

The one drawback is that I haven’t found a way to make the Google exception properly. (Just wait until we’re getting search term spamming! Spoofed Google referrers with the spam in the query string?)

I’m leaving the old file intact (at this different URL) for those whose web hosts haven’t installed mod_security, but I will not continue updating it.

Now Playing: Spark from Starfish by The Church

Posted by pjm at 12:38 PM | Comments (0)

April 14, 2005

Declare victory and leave

On one of the sub-boxes shipped with a new desktop system:

“Keyboard: The Ultimate Input Device”

Wow. I hope not.

(I had the case open and the guts out on my desk within two hours of receipt. That has to be some kind of record.)

Now Playing: Pearl from Whirlpool by Chapterhouse

Posted by pjm at 5:11 PM | Comments (0)

April 4, 2005

Keyword filtering considered harmful

There are three main ways of reducing spam load at the server level. One is the sort of process-based approach that greylisting takes, where the mail administrator takes advantage of spammers’ methods to distinguish their mail from legitimate mail. Another is host-based: the mail admin either identifies previous spam sources (by IP address) or subscribes to a list which attempts to centralize such identification, and rejects any mail originating (or relaying through) those addresses.

The third method is content-based. It surveys the message it has been asked to deliver, and (at its most elegant) evaluates the likelihood of that message being spam, based on its makeup, or (at its crudest) simply rejects a message based on the presence of particular keywords in the headers or body of the message.

The problem with this cruder kind of filtering is that it often fails to account for the chance that a keyword which one person might consider an infallible sign of spam could be part of a legitimate email message for someone else.

Such as, for example, an email newsletter run by one of our authors for others in the field of biological psychology. You know, when your field overlaps with a certain number of psycho-active drugs, odds are good you’re going to get some email which uses keywords often found in pharmacology spam.

Which explains why I’ve got a dozen or so bounces in my admin mailbox. Not enough university mail admins with enough imagination to predict that a neuroscience professor might get legitimate email with “Viagra” in the subject line. I’m debating whether it’s worthwhile to compose a nice message to the various admins pointing out the problem.

Now Playing: Radio Free Europe from Eponymous by R.E.M.

Posted by pjm at 9:56 AM | Comments (0)

March 29, 2005

A semester too early

I realize I’m giving away the current leader in the “who gets pjm as a grad student” sweepstakes, but this would’ve been a perfect pitch for me to hit out of the park.

Now Playing: 12 Bellevue from Failer by Kathleen Edwards

Posted by pjm at 3:40 PM | Comments (2)

March 24, 2005

Doing my penance

I did, let me confess, my share of web coding in the late ’90s. I created pages thick with tables and sliced images which needed to be arranged “just so” on the page in order to butt together and make a design element.

It’s payback time, apparently.

One of our sites, designed before my time here, has a godawful javascript rollover-click-whatever navigation menu on the left. It’s an accessibility disaster, it’s a bandwidth monstrosity (a typical page of this site is 89 KB, of which less than 3 KB is actual content: the rest is the scripts and layout tables for this menu, and that’s not counting all the images,) and what’s more, it has stopped working in many if not most modern browsers. It’s a low-priority site for us, and there are other ways to get around, so we’ve let it fester for a while.

Today I started deconstructing the whole thing in an effort to, not redesign the site, but create a lightweight standards-compliant version which looks pretty much the same (ugly as it may be, it’s a design, and I’m poorly equipped for that,) but actually works.

As I pick through the old code, pulling stuff out to recreate in some sort of valid markup, I find myself wanting to call the original developer, maybe once every five minutes, and ask what on earth they were thinking when they did that. (The answer, I suspect, is that they weren’t thinking; they were letting Dreamweaver and/or ImageReady think for them, which is not always a good choice.) I am finding large graphics cut into four or more segments for no apparent reason (which then need to be re-joined), gratuitous image-maps, and multiple discontinuous design elements merged in a single block of graphic-file (which is then, of course, sliced into a number of smaller files for no apparent reason at random places.)

The only thing that keeps me parsing this stuff out is the idea of how much better it will be when I’m done. And the queasy recollection, like a hung-over morning, that I may have contributed to equally painful layouts.

Now Playing: Keep Happy from SXSW 2005 Showcasing Artist by Papa Mali

Posted by pjm at 3:03 PM | Comments (1)

March 22, 2005


I spent plenty of my life in denial of what I liked to do. Sometimes, though, something calls to you in a way you can’t ignore.

For instance, when you open up the Specialized Products catalog, and let out involuntary interjections of “Cool!”… well, there’s a technical profession ahead of you. Don’t fight. And when the highlight of your work day is “shopping” online for rack-mount cabinets, well, that’s the geek version of Home Improvement. (Don’t buy tower servers for lack of a rack; buy rack-mount components so you can buy a rack!) And wouldn’t anyone feel a little bit like a special operative going through airports with this carry-on?

OK, I’ll stop scaring you now…

Now Playing: Don’t Push from SXSW 2005 Showcasing Artist by The Exit

Posted by pjm at 2:34 PM | Comments (0)

March 21, 2005

Music beyond saturation

I alluded to this in my last post, but since there may be one or two people who read here but don’t read No Fancy Name and need a bit more explanation.

The South by Southwest music festival (which the hip people always type as “SXSW”) made available, this year, a massive collection of MP3s from artists playing at the festival. And when I say “massive,” I mean about 750-plus songs, which was a 20% increase in my library. It could take me a month or two just to absorb the collection, playing it in the background, rating and culling when something catches my notice (positively or negatively.)

It really brings home the scale of the festival. There are very few duplicate artists in the list, and though there are several I’ve heard of (maybe they played at the Horse, or in some cases, maybe they’re local around here) I only found one duplicate between the showcase and my own collection. Then I got to thinking about 750 bands… where do they put them all? How do they schedule them? Is there anyplace within ten miles of downtown Austin where you can’t hear live music?

The other fun thing about the showcase is the distribution method. The collection (a pair of zip archives, plus another folder of late additions) is being distributed via BitTorrent, which is the latest trendy way to share files. The festival “seeded” the torrent by providing the original files, but by now most people “downloading” the showcase aren’t actually getting it from the festival; they’re copying bits from all the other people who are downloading it, and they’re sharing the parts they’ve already downloaded with everyone else in this massive multi-directional file share. The festival just pushed a snowball down the hill; it’s rolling on its own now.

BitTorrent has been in wide use by early-adopters for a while now, because it’s a stellar way to distribute large files like Linux disk images. Lately, I’ve heard it’s being used to share digital recordings of TV shows with those who missed them, and there’s a booming market for concert bootlegs. Supposedly, BitTorrent traffic is now nearly a third of all internet traffic. So in addition to all the new music, this gave me an excuse to dust off my client. BitTorrent is still at that phase (which RSS/Atom/etc. are beginning to leave) where most sites offering a torrent feels like they need a little thumbnail explanation of what this is, and how you need to pick it up.

It took me about a day and a half to get the whole thing downloaded, mostly time I was away from the computer so BitTorrent could use the whole DSL line.

Now Playing: Waiting Under the Waves from SXSW 2005 Showcasing Artist by Kris Delmhorst

Posted by pjm at 3:52 PM | Comments (1)

March 20, 2005

Beaten with a stick

Today, while I was off in one of the more depressing regions of Massachusetts, I was hit by The Stick. I almost deleted the email unread until I realized that it was from the Scoplaw, whose actual name I’d not been familiar with.

I don’t usually do these things, because I usually throw enough of my reading, listening, etc. in that both of my regular readers know what’s on. Besides, my rate of reading has slowed dramatically in recent years. I blame five soul-rotting years in the magazine industry. Anyway, read on (extended entry) for The Stick, and go back to Scoplaw for the, er, “history.” (I like the name. Reminds me of a relay baton. Stick!)

Continue reading "Beaten with a stick"

Posted by pjm at 9:56 PM | Comments (1)

March 15, 2005


Phil Rignalda ran a trial obfuscating his posted email address with the same entity-encoding method I spelled out here, and discovered that spammers are lazy: apparently this quickie obfuscation method is remarkably effective.

Now Playing: Johnson’s Aeroplane from The Swing by INXS

Posted by pjm at 12:00 PM | Comments (0)

March 14, 2005

The sysadmin always knocks twice

I finally got started reading the security issue of ;login: on the plane to and from Arkansas, and ran across an article about a splendid little bit of paranoia.

The theory runs like this: most packet-filtering firewalls log rejected attempts. So why not do something with that log data?

  1. Close the ssh port in the firewall.
  2. Install a utility, fwknop, which monitors logging of rejected connections at the firewall.
  3. Have that utility briefly open the ssh port (long enough for a connection to be established—maybe thirty seconds) for a specific IP address, only in response to a specific combination of failed connection attempts (or “knocks”) at various closed ports, using different protocols.

So, for example, if this utility sees the firewall rejecting packets at 668/tcp, 345/udp, icmp, 228/udp and 973/tcp, in that order, from a particular external IP, it opens 22/tcp to that IP address for thirty seconds. A connection is established, and the firewall is closed again (with the established connection remaining open.)

It’s like having a secret knock. In fact, it is having a secret knock. And the rest of the time, sshd is off-limits for all the brute-force scanners we’ve been seeing lately.

I admit I find this so cool, I’d install it. Except that it would undoubtedly be exasperating to my (small) user pool, which is already essentially humoring me in my insistence on only using SFTP and SSH for any connection requiring authentication.

I had a whole bunch of good headlines for this, too. “Knock, knock, knocking on the server’s door?”

Now Playing: Don’t Get Your Back Up from You Were Here by Sarah Harmer

Posted by pjm at 12:11 PM | Comments (0)

March 11, 2005

Third time's the charm

The hotel advertises broadband internet in all rooms.

The first room has no ethernet jack.

The second room has a jack, but it doesn’t work. (We need to call the 800 tech support number to confirm this. The phone is on the opposite side of the room from the ethernet jack.)

The third room is a smoking room… but the ethernet jack works. (And I now have an Airport Express plugged in to it, so anyone within a few hundred feet can share.)

And I’m still on Eastern Time, thank you. I’m not naming the hotel because the graveyard shift desk clerk was willing to move us twice in search of working internet.

Posted by pjm at 2:23 AM | Comments (0)

March 10, 2005

If I had a million hours

It is accepted wisdom that the best software utilities come from some hacker wanting a tool they couldn’t find, and wanting it badly enough to write it themselves. If only I had the time, because I have a want-it-badly utility.

My hard disk is pretty full, which is not a shock, considering the vast quantities of JPEGs in multiple resolutions, SWFs, DCRs, and PPTs I burn to CDs in a given month (not to mention all the PDFs to upload to the web.) There are all kinds of utilities to tell me how full the drive is. There are even some Unix command-line utilities for showing disk use by directory, like du. Like most command-line utilities, du has to be carefully instructed, or it gives you either too much information, or not enough.

I’d like a utility which tells me where to look for disk space to reclaim. That could mean either documents to archive, burn, and delete, or apps I’m not using, or whatever. So I’d want to be able to start at any given directory (the root, by default) and see a pie chart of how much disk space is being used by each directory. I’d like to be able to mouse over the chart to see which slice goes to which directory. From there I could either go another layer up the tree (show all grand-child directories of the root directory) or click a slice of the chart to repeat the process with that directory as the new root. And maybe I could command-click on the slice to have that directory opened up so I can see the files and make save-or-delete decisions.

Basically, I want to be able to visualize the data from du and have shortcuts to act on it.

I could make it even more frilly by allowing a user to create classifications (like “save”, “delete”, “archive and delete”, etc.) and assign them to slices of the pie chart, allowing them to perform disk-space triage on their entire disk, and see what they’ve already looked at vs. what still needs to be considered.

I know this is possible. (There used to be something like this for the Classic Mac OS, called Disk Surveyor, but it clearly never made the jump to OS X.) I even know the tools to create such a thing are available. What I lack is the time to (learn how to) do it.

Now Playing: Rain Song from Revenge Of The Goldfish by Inspiral Carpets

Posted by pjm at 1:41 PM | Comments (0)

March 9, 2005

How not to compare hexadecimal numbers

9e != 9E is broken. That only took half an hour to sort out. (I’m now forcing caps before the comparison. I’m not sure what determines which case a computer uses when displaying hex numbers.)

Now Playing: Golden from A Girl Called Eddy by A Girl Called Eddy

Posted by pjm at 5:21 PM | Comments (0)

This always happens when I am too busy

JM found annotated Google Maps complete with how to make them. The buzzword summary would be “GPS + DigiCam + XML = An Annotated World.”

And here I am with every hour booked from now until the middle of next week, and no time to play with it. And it’s so shiny. All I can do is tell everybody I know about it, and come up with ideas for using it. What would you map?

Now Playing: ‘87 from Foolisher Than Pride by Rosemary Caine

Posted by pjm at 3:37 PM | Comments (1)

March 7, 2005

Buying the pharm

This is some rambling, and it has nothing to do with pill-pushing spam. Rather, it’s a new kind of attack called “pharming.”

The background principles are these. There is a hierarchy of servers out on the internet which serve to translate domain names (like into numerical addresses. This process is called “resolving” a domain name, and your system asks one of these servers to “resolve” domain names whenever you use a domain. (There’s intricate caching rules which I won’t get in to now, since they’re not relevant.)

By now we’ve all heard of “phishing,” where various black-hats send us email pretending to be from banks we don’t have accounts at, trying to fool us into going to websites which look like those of the banks and filling in (“confirming”) our personal data and account information, which they can then use for several avenues of fraud. Phishing can be combatted by education: once a user understands that you can’t trust everything you see in e-mail, it becomes pretty simple to recognize the ruses used by the phishermen.

Pharming takes this to the next level. Instead of trying to fool you into going to a site which is not that of the financial institution, they “poison” the DNS servers such that when you “resolve” the domain name of the bank, you are sent to their website instead. Your browser says, but the numerical IP address is somewhere else. It is nearly impossible to recognize this kind of scam.

Nearly. But not completely. This is where digital certificates come in. Certificates have a dual role. First, they are one side of an asymmetric key encrypted conversation between hosts, which is their most widely known use. They’re what puts the padlock in your browser window and assures you that your credit-card number is encrypted as it passes over the wild, wild internet on the way to the browser. But they are also signatures, issued by a signing authority and serving as proof that your site is what it says it is. If I tried to serve a certificate claiming I was here on this site, your browser would pop up all kinds of warning flags.

Likewise, if I serve a “self-signed certificate” as a key, as I might when providing secure webmail, your browser will pop up a different error. It will say, sure, the certificate matches the domain name, but nobody vouches for it. (Actually, it will say something like, “The certificate wasn’t issued by a recognized authority,” or “No trust path could be established,” but those all mean the same thing to geeks.)

Which leads to an uncomfortable place. To efficiently guard against pharming, we should be conditioning users to pay attention to those warning messages from their browser, not tune them out. That probably means not using self-signed certificates for webmail or SSL email. But that, in turn, would require us to cough up $300 to a certificate authority which doesn’t actually do much other than a cursory verification of our paperwork stating that we are who we say we are.

My paranoia and my New England flintiness are in conflict here.

Now Playing: Welcome To The Occupation from Document by R.E.M.

Posted by pjm at 10:35 AM | Comments (1)

March 4, 2005


When I was researching my uptime rollover issue, I found several discussions which suggested that uptime is actually measured, at the kernel level, in units known (I am not making this up) as “jiffies.”

Jiffy turns out to have several definitions, but in the case of uptime it is .01 second, a “tick” of the computer clock. (It is stored in a thirty-two bit register, which means it will count to 232 or 4,294,967,295 jiffies, which is ~42,949,672 seconds, ~715,828 minutes, ~11,930 hours, or ~497 days… it makes sense now.)

The idea of the “jiffy” as a standard unit of measure tickles me. In this vein, I’ve decided to give up taking mass measurements in pounds. I’m now measuring only how much I vary from an arbitrary “marathon fitness” milestone, using cats as my unit of measure. Since the cat’s mass varies somewhat, the number is pretty fluid, but this is not a value which can be measured with great precision in any case. (It can be measured with depressing accuracy, but precision and accuracy are not the same thing.)

Right now I’m up by about 1.2 cats. Once I get my weekly mileage back where it should be, I should be able to trim much of that in a jiffy.

Now Playing: Wake from Yellow No.5 [EP] by Heatmiser

Posted by pjm at 11:40 AM | Comments (4)

March 3, 2005


In the support mailbox today: some questions about a demonstration version of some of our software. The demo version is full-featured but expires after a (fairly long) demonstration period.

The questions, however, were obviously different ways of asking, “So, how can I keep using the demo after the demonstration period is over?” I wish they had just asked it directly, because the answer is much simpler that way: “Buy the software.”

Seriously, folks. Don’t ask the support people at a company how to circumvent their own license restrictions. We had a reason for setting up the demo that way; it wasn’t just intended as a game.

Now Playing: Vervacious from Millionaires by James

Posted by pjm at 12:28 PM | Comments (0)

March 2, 2005

I can be proud of incomprehensible things

My mail server (here at work) now supports encrypted POP, IMAP and SMTP connections. And I can add stunnel to the list of utilities I’ve successfully implemented. It’s shockingly easy, actually. Well, I thought so, anyway.

Now I have to figure out how to explain this to my users. Actually, first I have to figure out who, besides myself, will be affected if I require secure connections from outside the LAN.

Now Playing: Snow Is Gone from Hello Starling by Josh Ritter

Posted by pjm at 2:54 PM | Comments (0)

March 1, 2005

It's the subtle things

Barb asked, following up on my post about Firefox drawing even with IE in my site statistics, if there are reasons to switch to Firefox (or at least away from IE) that are easy for a non-technical person to understand.

Since I’m a Macintosh user, I’m not subjected to the Big Blue E on a daily basis, so I mostly see things from a developer’s standpoint. Since FF has better support for web standards, more people using FF mean less people using the ever-so-2001 IE, which means I can do more interesting things while worrying less about browser support. Tim Bray made this point way back in 2003. (And Longhorn is now due even later than Bray thought then.)

But the wonderful sites Browse Happy and Better Browser make the case for everyday users better than I can. A few points from them:

  • Tabbed browsing. Open a whole slew of web pages in one window (or a folder full of bookmarks at once, in separate tabs.)
  • Pop-up blocking. IE is getting there now (there were pop-up blockers for IE, but they were hacks which did nothing for the stability of your computer,) but alternative browsers have been there for two or three years now.
  • New web features. The new browsers offer support for things like PNG-format graphics, which allow images to fade into their background much more elegantly than was previously possible. Web pages designed for the standards supported by Firefox, Safari, Opera et al look better.
  • Stability. IE is built on a code base more than a decade old. As a result, it has become bloated and a hog of system resources. Modern browsers like Firefox use less memory and are more stable, which means they start faster, run faster, and crash less.
  • Security. Spyware, worms and viruses are pervasive nowadays, and most of them are built around ActiveX controls or Browser Helper Objects, which are two technologies unique to IE. Stop using IE, and you’ve instantly made yourself invulnerable to those routes of attack, and you’ve lost barely anything. (Malware developers outnumber legitimate applications of these technologies, nowadays.) The alternative browsers have their own security problems, but their record is far better than Microsoft’s.

That’s probably enough from me, since the two sites I’ve linked above make the case quite well. It’s actually impossible to uninstall IE from a Windows system, so it won’t go away; you’ve got nothing to lose by trying a different browser (and on Windows, that’s probably Firefox.)

Now Playing: Other Side from Golden Age of Radio Bonus Disk by Josh Ritter

Posted by pjm at 5:10 PM | Comments (6)

February 25, 2005


On a tip from Brent (in response to my whining last month) I set in to the latest round of image rasterizing with my new command-line tool: the bash “for” loop. It was hugely useful in sorting the images into folders, through I needed to remember to be careful with wild-card characters. bash, as it turns out, is exactly the picky sort of language I have little experience with, where spaces in a script change what the neighboring symbols mean and cause the shell to complain mightily.

My next project is figuring out a more elegant way to zero-pad single-digit numbers, since we usually express chapter numbers in double digits in these filenames.

Now Playing: Waiting For Somebody from Singles Soundtrack by Paul Westerberg

Posted by pjm at 4:28 PM | Comments (0)

February 24, 2005

Good graphics, lousy spell-check

Apparently, nobody is proof-reading the boxes at nVidia when they send out their video cards. On the box of the video card I picked up on eBay in a (failed) troubleshooting step for A.’s desktop machine, I counted nine different spelling and grammatical errors, some of which can’t possibly have escaped someone’s notice. Apparently this box contains, for example, a “Giaphice Acceleiatai” which is “The Definition of Perfpormance”. Its specifications, however, “is subject to chang without notice.”

It’s almost as though the text was retyped for the box by, oh, someone who doesn’t speak a language which uses the Latin alphabet? Maybe, hmm, someone who doesn’t actually work for nVidia? What are the odds that a legitimate technology company would let such a packaging disaster out the door?

Now Playing: The Wrong Child from Green by R.E.M.

Posted by pjm at 9:03 PM | Comments (3)

More on failing gracefully

My experience in technical support has taught me that any idiot can solve pretty nearly any computer problem. It’s not only easy, but it’s quite satisfying.

However, systems have evolved to the point that it takes some level of skill and talent (and a pretty tall measure of patience) to properly identify the problem.

Now Playing: Page One from Between 10th And 11th by The Charlatans

Posted by pjm at 11:59 AM | Comments (1)

Seen on a t-shirt

Front side:

Colby Computer Science: We’re not just geeks with computers!

Back side:

…oh, wait, we are.

Spotted at the New England Division III women’s indoor track championships. Wish I could remember which college it was.

Now Playing: Turn You Inside-Out from Green by R.E.M.

Posted by pjm at 9:27 AM | Comments (1)

February 23, 2005

Odysseus and the mail server

Scylla and Charybdis turn out to be, on one side, the whirlpool of over-large email attachments dragging down my server, and on the other, the monster of the people we do business with, who can’t understand why we might limit the size of email messages we receive. (Their cave in this situation, of course, is the sheer difficulty of trying to explain FTP to people who have grown fond of their conception of email as a universal means of transmitting bits of all types and collective sizes.)

Meanwhile, I want to utterly ruin the “easily configurable appliance” features of this server by ripping out the stock smtpd and replacing it with something where the power-user features (such as explaining the reason for a bounce in the bounce message) are more easily configured. Perhaps that counts as tying myself to the mast? I don’t want an incomprehensible mess which can be “easily configured” (major options only) through a web GUI; I want a server with an options file which makes sense. (Generating the configuration file using macros doesn’t count.)

Now Playing: Horrible Qualities from Josh Ritter by Josh Ritter

Posted by pjm at 12:40 PM | Comments (1)

February 22, 2005

That explains the multiple personalities

Email arrived in the work box over the weekend, with this salutation:

Dear support team…

If it was worth trying to correct the writer, I’d say, “I’m not a team, I’m an army of one.”

Now Playing: Jumping Someone Else’s Train from Staring At The Sea by The Cure

Posted by pjm at 3:19 PM | Comments (0)

February 15, 2005


I wonder if I can actually do this quickly.

  • Back from PDX. Lost sleep. Much work remains.

  • Photo gallery project is now in use. It doesn’t look like much, but compare with the old way. If you don’t see the advantages, it’s because you’ve never maintained a website of any size.

  • I’m thinking about a swim meet before New Englands. There’s one at Simon’s Rock at the beginning of March. New Englands might be not as simple this year; the events are on different days.

  • A student is having trouble with her computer. She took it to the university computer center and was told one of our disks caused the problem. Tomorrow morning I have to call the computer center and find out what their reasoning is. I think they’re trying to avoid doing a warrantee repair.

  • I could waste a lot of time reading (and trying out) the articles in this.

Posted by pjm at 7:35 PM | Comments (0)

February 9, 2005

They're watching you

I’m in a technical twilight area in many ways. For example, people who know more about network security than I do would probably find some of my common practices dangerously reckless, or at least negligent. People who know less think many of the things I do are signs of paranoia.

Well, if the shoe fits…

Let me play black hat for a moment and show what’s possible. Visualize a public network. Could be the free Wi-Fi at Bart’s, could be the college library, whatever. I walk in there, open up my laptop, and go on the network with a packet sniffer. (Packet sniffers are important network diagnostic tools, so yes, I’ve got one. It’s just unethical to run them without the network admin’s permission.)

I would bet that within ten minutes I’ve picked up someone’s email login and password. That’s nothing, though, right? Who would want an email password? Well, do you use that password somewhere else? Maybe at your bank? One-click ordering from Amazon? Is it a valid user-id for a machine somewhere, which means I now have user privileges on a server and access to a website I can deface (or just serve warez from?) Did I just get access to your employer’s network? (I hope I’m not your sysadmin.) Can I redirect your Netflix queue now? I wonder how long I would need to hang out in a college library before I had access to several of their systems. Not very long, I’m betting.

It gets better. Did you forget the password to your bank site? To your weblog? Did they just email it to you? That’s traveling over the network in clear text, too.

It doesn’t take much to be paranoid like me. First, find out if your mail host has some provision for secure email. Gmail users can just change the http in the website address to https and be secure. The host for my websites and mailboxes offers “IMAPS” which is simply the IMAP mail protocol over an SSL connection; I suspect they offer the analogous POP feature as well. Apple Mail and Thunderbird can take advantage of this; it’s as simple as checking a box marked “Use SSL” in the mail server options.

If none of that covers you, you may want to take a look at the excellent article by Doug Bowman on Secure wireless email. It’s focused on Mac OS X, but has leads for Windows users as well, and presents the case for securing your connections quite compellingly. Don’t skip the comments, either.

And remember: just because I’m paranoid, doesn’t mean the guy in the corner with the Powerbook isn’t running a packet sniffer.

Now Playing: Galapagos from Cherry Marmalade by Kay Hanley

Posted by pjm at 5:17 PM | Comments (0)

February 4, 2005

Gallery project update

Last night we managed to push a little more into that sticking point with the gallery scripts. Specifically, I had it echo out its progress into HTML comments as it parsed the XML data file. I established that it does read the data file, and (apparently) it is marching through that correctly. However, something weird is happening in the parsing where it’s not correctly assigning those values. This works in my development environment (my Mac) but not on the production server.

There’s another sticking point where the caption-editing process can’t rewrite the XML data file, but that is almost certainly a (relatively sensible and easy to fix) permissions issue on the server. And it’s irrelevant whether you can rewrite a file when you can’t read it properly.

Now Playing: Say Something from Getting Away With It…Live (Disc 1) by James

Posted by pjm at 2:11 PM | Comments (0)

February 3, 2005

Collateral damage

I’m making a few more tweaks to my anti-comment-and-referer-spam .htaccess file. The two significant changes, for now, are the addition of a new user-agent block (from Candygenius through Ann Elisabeth) and, more importantly, an exception for Google, which merits more discussion.

A few visitors have pointed out to me that since click-throughs from Google results include the search string, if you’ve got something on your site which might legitimately match a search for one of the terms in our regex, you’ll reject the click-through, even though it was (presumably) a legitimate visitor from Google. You might see this as a feature, since you can search your domain plus a banned string to test the block (it seems unlikely that someone would legitimately be searching for one visitor’s example, poker.) But maybe you want everything from Google. Since we know the form of a legitimate referer from Google, we can add this line:

SetEnvIfNoCase Referer "^\..+/search.*" !spam_ref

…which clears our spam_ref environment variable and lets the request through. Note that this has to come up after our big regexp.

While I’m at this, though, I asked my host about alternatives. Specifically, I’ve been reading about mod_security, which might be quicker, easier to understand, and hopefully less dangerous if mucked up. It’s installed on my host, so I may try it. I’ll keep you posted.

I was amused at the response from my hosting company, though; they couldn’t figure out how I was using mod_setenvif. (“But you won’t be able to access the environment variables until they get to a CGI…”) Apparently they didn’t know you can access the environment variables from both mod_access and mod_rewrite. So we can use the relatively-simple-to-understand mod_setenvif to set up the pins for the mod_access and mod_rewrite bowling balls. (Or, to mix my metaphors, mod_setenvif just walks through the forest with spray-paint, while mod_access and mod_rewrite follow with chainsaws.)

Now Playing: Battle of Who Could Care Less from Whatever & Ever Amen by Ben Folds Five

Posted by pjm at 10:57 AM | Comments (0)

February 2, 2005

Heart failure averted

I just looked at the uptime for my solid-as-a-rock webserver and saw a single-digit number of days.

Oh, $#!+, did it crash and I missed it?

Nope. I had a little tickle in my head that maybe uptime, like an odometer, rolls over. It turns out that after 497 days or so, the counter overflows the available memory space, so it resets to zero and starts over. No reboot, no crash.

It reminds me of the rusty Mercury I drove in high school (and most of college.) I remember pulling over to the side of a road in, I think, Bowdoinham, and watching the odometer roll from 99999 to 00000. (Only five digits, the pessimists. I’d have to drive a million miles in my Civic to get all zeroes again.) When we sold it, we had to check the box on the title stating that the mileage exceeded the mechanical limits of the odometer.

And that’s only real similarity between Raven, which should have several more years of productive life in it, and that car, which was already superannuated when I started driving it.

Now Playing: Easter Theatre from Apple Venus Volume 1 by XTC

Posted by pjm at 11:44 AM | Comments (4)

February 1, 2005

That one last sticking point

I spent a chunk of time last night (see absurdly late, for me, datestamp on the previous post) debugging the photo display project in its production context. Most of the glitches allowed me opportunities to make things a little more elegant, but into this morning there remains one hangup, and it’s a pretty serious one. PHP won’t read the data file.

Now, this is particularly odd given that one can request the data file from the web server itself, which will cheerfully return it to you. Using PHP’s file_exists() and is_readable() functions, I can confirm that PHP can see the file and thinks it has permission to read it. It just won’t, and furthermore it won’t produce an error message indicating why it won’t read it; it’s as though it won’t even admit that it has failed.

It seems to be related to the location of the file, because it has the same problems reading an XML file and including a PHP file in the same directory. But I don’t run the server—I don’t even have direct access to it—so trying to suss it out from the server end is nearly impossible.

I am tired and frustrated that I have put all this work into an elegant little script which is unusable because of something I can’t see.

Now Playing: Still from Dead Air by Heatmiser

Posted by pjm at 10:38 AM | Comments (1)

January 31, 2005

Still reeling

Something about the pitch of effort that went in to covering the meet has me still burned out. I can’t make my mind stick to one idea or project for more than three or four minutes. There’s still another article in the publishing queue and one more left to write. And I have eBay sales to ship.

And it turns out that my PC here at work (as opposed to my Mac) is too old to boot from a USB device, so while I can do a Live CD, I can’t boot from my new 512 MB flash drive. I’m not sure if I should be disappointed by this or not. I may still make the drive bootable, just in case another subversive opportunity comes up.

Moral of the story: there are security advantages to obsolescence!

Now Playing: Mr. Right Now from If You Lived Here You’d Be Home Now by The Nields

Posted by pjm at 5:06 PM | Comments (0)

January 24, 2005


The Illustrator spent the morning and part of the afternoon yesterday packing down his ski track, with such unusual grooming tools as a canoe and some pallets. I went over late in the afternoon and tromped around it a few times; he thought that after a nice night below freezing it should be pretty firm today. I’m wishing I was going to have some time to go down and do a few laps.

As were were snowshoeing, he explained that he’d been on it for four or five hours. “The process is more fun to me,” he said. I thought to myself, “That sounds familiar.” “Are you sure you’re not an programmer?” I asked.

I think there’s a twilight condition we try to live in when we’re working on a project. On one side is the fun of developing something and seeing it take shape with your effort. It’s a pretty powerful feeling to watch the pieces come together, and it’s why I like to have a runnable prototype of whatever I’m doing as soon as possible. The other side is the fun of sharing the finished product, of having created something useful and functional.

You can’t really have it both ways, though. You can share your progress on an incomplete project with others, but the most likely reaction is a sort of disinterested “Eh.” And you can infinitely prolong a project with additional features and refinements, but then you’ve never really created anything. (The Dark Side is when you declare something complete which really isn’t; the users find and judge the incompleteness, and never see what you really intended.)

I’ve been working on a project at home, in my “spare time,” for two or three weeks now, trying to create a simple, flexible, and dynamic photo gallery to save A. some work time. (Never mind why I’m doing pro bono development for sites which could theoretically pay; it’s an involved story and not to the point.) I did pretty well displaying images and moving around the gallery, but captions were a bit of a puzzle. I played around with a few different methods of storing them, including an included PHP file and (at Brent’s suggestion) as JPEG metadata, but eventually settled on XML after Julie provided the clues to get me through a confusing patch.

With most of the flashy parts solved, now, I have a few gritty back-end things to fix before it’s really done and I can hand it over. And I’m not anxious to do them. I don’t know if it’s because they don’t look fun, or because I know that if I do them, the fun will be over. It’s like I don’t want it to be done. I don’t know if that’s because I’m fearing that it won’t do everything it’s supposed to, or be a disappointment, or if it’s because I don’t want it to be done and out of my hands.

I suppose I could continue offering upgrades.

Now Playing: Seen Your Video from Let It Be by The Replacements

Posted by pjm at 2:30 PM | Comments (0)

January 21, 2005

Surreal spam

I just had a mortgage spam with the subject line taken from Bulgakov’s The Master and Margarita. (Specifically, the subject line was Re: The bookkeeper Vassily Stepanovich.)

It was jarring, at first, to contrast great literature with scuzzy spammers. But then I checked that the character was really who I thought he was: one of those “little people,” the apparatchiki who have been part of Russian society since long before the Soviets, burrowed in to the giant bureaucracy of a giant country, little tsars of their own tiny fiefs with their souls shrunk small from disuse.

And I thought, yeah, a spammer could see themselves there. He comes in for a bad day in the wake of the book’s events, which is comforting. One hopes the spammers will similarly get theirs one day.

Now Playing: Godless from Thirteen Tales From Urban Bohemia by The Dandy Warhols

Posted by pjm at 9:18 AM | Comments (0)

January 20, 2005

On the block

I’ve got three eBay auctions under my belt now, with the third (and least successful, cash-wise,) a CD burner, just waiting for payment. It’s been interesting; I’m not really “making money” in the sense that I paid more for these things than I’m selling them for, but I am in the sense that I’m replacing objects which have little or no use to me with a more liquid asset.

I’m definitely not going to try making a living on eBay, nor do I intend to scrape deeper and deeper in my closets looking for sketchy stuff to sell. But in terms of moving out stuff which isn’t in use? It’s fantastic.

Today I helped someone in the office sort out a Java application issue. (Mac running OS 9.2, throwing NullObjectException errors if I remember correctly; we switched browsers from Netscape 7.0.1 to (shudder) IE, and it worked. Must have been a VM compatibility problem.) He was watching eBay Live auctions, with the intent of bidding on one later this afternoon, after work.

Have you ever watched one of those things? It can raise your pulse just looking. I watched one start at $50 and sell at $500 in the time it takes me to compose a sentence. I can’t think that fast, usually. And we saw one where someone spent about $4k in about forty seconds. It made my head spin. Now, there’s an area of auctioning I’m definitely not cut out for.

Now Playing: Perfect Blue Buildings from August & Everything After by Counting Crows

Posted by pjm at 3:38 PM | Comments (1)

January 19, 2005

Which is quicker?

Going to a Finder window with 700-odd images, and dragging them in to chapters by folder?

Or going in to the command line and using a line like this:

$ mv AnPhys-Fig-18-* /Documents/Hill/Hill\ IRCD\ Revision\ 2/Unlabeled\ JPG/ch18/high-res/

…but with each up-arrow having to tick back through the path to update the chapter numbers?

I wish I could pattern-match on the command line. Can I do that? Something like this:

$ mv AnPhys-Fig-(\d\d)-* /Documents/Hill/Hill\ IRCD\ Revision\ 2/Unlabeled\ JPG/ch$1/high-res/

Of course, $1 is a shell-scripting convention for the first argument after the command, so I doubt I could use it in the command itself.

I know I could do this with Perl, but the scripts I’ve done have been too hard-wired to be useful from the command line. The patterns are too involved.

Now Playing: Lullaby from Sometime Anywhere by The Church

Posted by pjm at 1:40 PM | Comments (1)

January 17, 2005

New blacklist

More for the denied strings list:


Posted by pjm at 8:53 PM | Comments (0)

January 16, 2005

Tool of choice

When I first started writing web pages (and yes, that would be over ten years ago, now) I tired pretty quickly of editing them with emacs on the college *nix box (Ultrix, I think, and that was in the days when Linus was still working out of his bedroom in Helsinki.) I hunted for cheap (read “free”) text editors that I could use on my Mac, and I came up with BBEdit Lite. What a nice little program that was. I got used to it.

Then, when I started working for companies that could pay for software, I introduced them to the not-Lite BBEdit. Even when I was working on websites with GoLive, then Dreamweaver, I kept BBEdit around to keep the code in line. Also, being lazy, I was discovering the power of multi-file find-and-replace functions, and regular expression matching in the find dialog, for site maintenance. I got really, really used to it, to the point where I don’t use a real word processor anymore; I even write for publication in BBEdit. (I know lots of people who can’t read Word files, but I don’t know anyone who can’t read a .txt file.)

Meanwhile, BBEdit has been getting bigger and bigger, making me wonder whether it can justify the name “Bare Bones” much longer. I think I started with version 2; they made it to 8 last year.

More recently, they’ve stopped development on BBEdit Lite in favor of a low-cost program called TextWrangler. And last week, around MacWorld, they released TextWrangler 2.0. Following this year’s MacWorld trend, they picked a low price point. Specifically, free.

I’ve been using it for a few days now. It’s an elegant little program. It does PHP and HTML syntax coloring. It has the new Documents drawer. It has the same ultra-powerful Search dialog I like from BBEdit, and it has Find Differences. There’s a checkbox to open “hidden” files (which makes it show files starting with a . in the open dialogs, useful for editing .htaccess files.) And did I mention that the price is right?

If you are using a Mac, it’s worth checking out. It’s certainly worth more than the price tag would indicate.

Posted by pjm at 8:37 PM | Comments (0)

January 14, 2005

A little meanness

I’m extending my anti-referrer-spam .htaccess file a bit. The idea was to take a mod_rewrite idea from Ed Costello (which, for some reason, isn’t working on this site anyway) and apply it to the giant mod_setenvif regexp I’ve been building from Dorothea’s suggestions and my own logs.

The first step is to extend my existing SetEnvIfNoCase rules. Until now, I’ve been simply setting the environment variable, because deny works based on its mere existence. However, to make it play nicely with mod_rewrite, I’ve added a value (yes) to the variable, so SetEnvIfNoCase lines now look like this:

SetEnvIfNoCase Referer .*\.hq_inform\.com.* spam_ref=yes

Now, we swipe some of Ed’s mod_rewrite code, but change the conditions. (Note that you need to have RewriteEngine on somewhere above this in your .htaccess file for this to work.)

RewriteCond %{ENV:spam_ref} ^yes$ [NC]
RewriteCond %{HTTP_REFERER} ^(.*)$ [NC]
RewriteRule ^(.*)$ %1 [R=301,L]

Line by line, it goes like this: First, if the environment variable spam_ref contains the value “yes” (nothing more or less than those three letters in that order, and (second line) there is a “Referer” value in the HTTP request, then we apply the rule. (The second rule looks redundant, considering that if there was no “Referer” the spam_ref variable wouldn’t be set. You’ll hit both rules, or neither. But we need that second rule to get the “Referer” value stored, for the) Third line, if the above two matched, rewrite the request URL to the value of the “Referer” value (the %1 is expanded to the previous match, which was on the second line.) This gets sent out as a 301 Redirected response, which, according to Ed, then gets logged on their site as entirely tail-chasing and not involving my site at all. (Hey, I didn’t ask for the traffic; they did.)

See the access file for the whole workup.

Now Playing: Best Black Dress from Live From Northampton (Disc 2) by The Nields

Posted by pjm at 2:14 PM | Comments (1)

January 13, 2005


I’ve been weeding on two different levels for the last few days. Weeding: v., to remove that considered to have little or no value for the benefit of that with greater value.

For one thing, having managed the exchange of iPods, I’ve had to re-populate a song list. I wish I had discovered PodWorks sooner, because then I might have retained some valuable metadata from “10”, specifically ratings, before I wiped it. Instead, I’m now playing through my library again, re-rating as I go. This is fun on one level, because I am hearing some stuff I haven’t heard much of, and some things I hadn’t given a proper chance before. On the other hand, in order to fit as much on “10” as I had, I had deleted a lot of things I had given low ratings to. I have a bigger catalog available, but the average quality (as perceived by me) has actually gone down.

I’m not too worried about that, in the long run, because the flexibility afforded by more space is worth it. I have some elaborate playlists set up to favor songs I rate highly, so as rating approaches completion the quality should go up.

At the same time, like several other folks, I’ve been making another push to trim spammed referrers out of my server logs. They’ve been a real nuisance lately, and instead of the one-or-two here-or-there approach they used to take, we’re getting hit with fifteen or twenty (or fifty) per day in an effort to be “Biggest referrer” instead of just a “recent referrer.”

So, I’m taking more drastic measures. Mostly, that has taken the shape of Dorothea’s massive Referer regexp, to which I have added and removed a few things. (For instance, I think a simple match on “teen” is too broad a brush.) I also attempted the recommended mod_rewrite hack for bogus requests, but that doesn’t work on my site, I think due to some sort of server issue; it rejects everyone, not just the bogus requests, which is frustrating.

As a result of this, and to follow Dorothea’s lead in sharing information, I’m going to keep a cleaned-up copy of the .htaccess file for this site available for the morbidly curious. You can see who I’m blocking referrals from by visiting htaccess.txt on this server.

Now Playing: My Dark Side from Still Burning by Mike Scott

Posted by pjm at 2:58 PM | Comments (1)

January 12, 2005

Degrading gracefully

I have a gift certificate to the swimming mail-order place where I get my suits. I couldn’t figure out how to use it on a web order, so tonight I called them and discovered I can’t use it over the phone, either; only with a postal order.

In web design, we use the term “degrading gracefully.” I like it a lot. It means that you accept that not everyone will see your site in all the glory you intended, but you arrange for fall-back positions. You may not look as good in IE5/Mac as you do in Firefox, but it’s not obvious what has broken. And if someone arrives at your site using Lynx, they can still read your page, and it makes sense. And they aren’t made to feel like they’re missing out. (For example, there’s a built in mechanism for frame-based sites to show something to browsers which don’t support frames, but usually developers just put in something ugly, like, “You should consider upgrading to a better browser.” That’s ungraceful degradation.)

In a wider context, degrading gracefully is about being aware of where your system might fail, and being ready for the failure. It means not showing error messages to the user, unless they also explain how to avoid the error—and it’s even better to fix the error transparently, so the user doesn’t know what’s happening. From a customer-service standpoint, this is really the only way to approach things: you give the customer the most convenient option, then the next most convenient, then the next most convenient. You don’t offer them a “convenience or stone age” decision.

My experience with the swim store made me think: there are probably still some people out there who think, despite all the levels and layers of encryption, that it’s not safe to order on the internet. And some of those people may not have our printed catalog. They might find our titles online and want to order. Where’s the fall-back?

I wonder if it might not be a very user-friendly and graceful degradation to offer an order-form bail-out option. It would present a printable page which includes all the information the customer had already filled in (shipping address, items and quantities, etc.) with only the payment information to be manually filled out by the customer. They could fill in the payment details and send it off, about fifteen steps easier and faster than the degradation the swim store offered (I had to request that they send me another catalog.)

At the very least, there should be a PDF of an order form for the hard-copy Luddite.

That’s degrading gracefully. Online order to form-driven printout to PDF order form, and only then if that fails do you have to request a catalog.

Actually, they should have accounted for gift certificates when they first set up the website ordering. That would be really handling things well.

Posted by pjm at 9:15 PM | Comments (1)

January 11, 2005

I feel like I'm living on Slashdot

…I just got a support call about using our software on a Beowulf cluster.

Now Playing: Sister from Sister by Letters To Cleo

Posted by pjm at 4:58 PM | Comments (0)

In through the cracks

Apple (and most of the people who have written about it so far) are casting the new Mac Mini as a home machine for “switchers,” aimed at people with an existing investment in monitor, keyboard and mouse for their Wintel PC. And sure, maybe it is; Airbag has already called it “…something you buy to use with your iPod.

I’m seeing something else entirely: a gateway to small businesses. See, while the business side of my building is tied to management software which keeps them on Windows (and Windows Servers, which I would otherwise have eBayed long ago,) there’s little, if any, reason why our editorial people shouldn’t be on Macs, and since many of our authors, illustrators, copyeditors, etc. etc. are Mac people, it would make life a lot easier. They don’t need MS Access; they need Word, maybe PowerPoint, a web browser, and email. The Mac has all of that.

However, Apple doesn’t really make a machine aimed at that office spot. I don’t want all-in-ones; I have a hardware investment in displays already. So the iMac and eMac, however beautiful, are out. And the Power Macs are overkill. I’ve been planning on moving some of the G4 Power Macs being retired from the Production department down to Editorial; Production does heavy Photoshop/Illustrator/Quark stuff, so they need the big iron. But they are also dragging their feet on letting go of the OS 9 G4s, even with OS X G5s sitting right next to them; they like having two machines.

The Mac Mini fits right in between. It has all the power the editorial folks need. It doesn’t require me to pay for a built-in monitor or more power or expandability than they need. And, even with the Microsoft Tax MS Office included, the price is favorably comparable with a new Dell, particularly when you consider support costs: viruses, spyware, configuration costs and all the annoying garbage that new Wintel machines come loaded with just don’t exist.

Apple gets this; their sidebar pitches the Mac Mini as “great for small businesses.” And now I have an argument I can sell to the business manager, right at the bottom line.

I can’t believe how excited I am about this.

Now Playing: My Little Problem from All Shook Down by The Replacements

Posted by pjm at 3:27 PM | Comments (0)

January 10, 2005

Tolstoy and tech support

Functional software is all alike, but every non-functional program is non-functional in its own way.

Understand that your email to is probably going to be read by someone who deals with a range of issues over a number of products (and, probably, versions of products.) Chekhovian terseness is not rewarded.

They’re going to want to know exactly what you’re dealing with. That is, a product name (and/or website URL,) a version number (if it’s not a website,) and some basic information about your working environment (Mac or Windows? OS 9, OS X (10.2? 10.3?), XP, or Win2K? And, maybe, which browser? Which version, specifically, of that browser?)

They need this information because, even though you may think it’s the software that’s broken, 90% of the time there is something in your environment which is causing the problem, and they need to identify that something. Without knowing your environment, they’d be justified in just saying, “Hey, it works for me.” (This is assuming, of course, that you told them what’s not working, and didn’t use relative terms like “newer” or “older”, or imprecise terms like “your website” or “your CD.”)

If you’re writing about an error, they’ll want to know exactly what the error message says. If you’re able to identify what you were doing (or trying to do) when the error came up, that’s great, but for pity’s sake don’t just say, “It didn’t work,” or “I couldn’t sign on.”

Come to think of it, maybe you just want to read How To Ask Questions The Smart Way.

Now Playing: Hangin’ Around from This Desert Life by Counting Crows

Posted by pjm at 12:21 PM | Comments (0)

January 6, 2005

Metaphors need to be shared

I’m explaining our FTP server to a freelancer. I finally came up with this:

“It’s like a back-road mailbox in wintertime: useful while it’s working, but expendable under attack.”

Posted by pjm at 7:49 PM | Comments (0)

January 4, 2005

Portable storage

While I’m attempting to shed stuff, I notice that Scheherazade is, as usual, doing it more thoughtfully. (On the other hand, I think my closet is a bit more boring than hers. OK, a lot more boring.)

I should also add that one of my external hard drives is now on eBay. It’s tiny (6 GB and about the size of two decks of cards) and therefore portable, but 6 GB isn’t enough for me to back up to anymore. I got this drive in 2000, when I was working for another company and had a laptop that belonged to the company. I kept all my personal files and programs on this drive, and when it was time to give the laptop back, I could just unplug the drive.

It’s Firewire, which not all PCs have but nearly all Macs have nowadays. It’s also very fast, particularly if you’re used to USB.

Now Playing: Crawling Back To You from Wildflowers by Tom Petty (still on battery power after over nine hours!)

Posted by pjm at 5:06 PM | Comments (1)

Analyzing the mess

As I watch yet another PHP upgrade scrolling by on the background terminal window, I realize that the real reason I’m documenting a lot of this stuff is not because I’m concerned that my replacements won’t know how to do things like upgrade PHP. Well, maybe they won’t, but that’s not the real issue.

The real issue is that I’m concerned my own software installations are such godawful kludges that someone will need a manual to figure out the twisted hacks required to make everything run.

Take PHP, for instance. Upgrading the main server is easy enough, but for convoluted reasons, Apache 2.0 is listening on port 80 (most of our sites), but Apache 1.3 is in charge of port 443 (https, the secure server.) So I need to install PHP twice, in order to have the current version running on both servers, and who knows what symlinks and path redirections exist to make sure they’re all using the right configuration files in the right places.

I suppose it’s a good thing that as I closely observe the installation process, the better to write up all the steps, the process goes more smoothly.

Now Playing: Chelsea Girl from Smile by Ride

Posted by pjm at 2:21 PM | Comments (0)

iPod surgery

Last night, after starting two loaves of bread, I popped the back off my 10GB 3rd generation (3G) iPod and replaced its battery, following the instructions provided with the new battery. This was a step or two more challenging than the battery replacement on the older iPod, in November, partly because the 2G to 3G transition (when the dock connector was added) involved incorporating the audio jack and lock switch with the stainless-steel back of the unit. So instead of popping an otherwise unconnected stainless soap-dish off the back of the unit, you have to be careful of a ribbon cable which keeps the soap-dish connected to the main circuit board. And the notably smaller soap-dish is harder to get off than it was on the 1G unit. The instructions correctly noted that this would be the toughest and most frustrating part; I think I was more frustrated because I had learned how to pop the back off the 1G unit quite quickly.

Once the back was off, the principal difference between the 1G and 3G models is the configuration of the major components inside the shell. The interior of the iPod is a tightly packed sandwich; when it is face down on the table, you have to carefully peel off layers to reach the bit you’re looking for. The 1G iPod has the battery on top, followed by the hard disk, the main circuit board, the screen and controls, then the white faceplate. Replacing the battery is simple; just pop off the back, unplug the battery and un-stick it from the hard disk, plug in a new one and stick it on, and put the back on.

On the 3G iPod, the first layer of the sandwich under the stainless-steel back is the hard disk, with a slightly-sticky edge of padding keeping it off the case. Under the drive is a another layer of this sticky-foamy stuff, edging a sheet of shiny plastic apparently meant to isolate the drive from the circuit board electronically.

With that sheet peeled back, the main circuit board is exposed. The battery is much smaller in the 3G models, about the size of a small sticky-note and about as thick as two quarters, and it fits in a section of the circuit board cut out to accommodate it. Removing and unplugging the battery, and replacing it with the Newer Tech substitute which is ever so slightly larger, is tricky but possible with patience. I didn’t attempt to remove the circuit board from the front panel, as I did with for the 1G unit (looking for the Firewire connector,) so my appreciation of the differences ends there.

Once reassembled, the unit booted and responded to all controls. I plugged it in to a wall socket and charged it overnight, then took it to the gym with me this morning. Now, at work, I have the speakers plugged right in to it, and it has been going for an hour and a half (probably closer to two and a half total, today) and still shows significant charge in the indicator. I’m going to rebuild the drive (which improves the battery life but also wipes all the music) before handing it over to A. in exchange for “20”.

In other good iPod news, my brother reports that he has precision soldering equipment at work (he’s a manufacturing engineer for a company that makes sensors for car companies,) so he thinks he can fix the soldering problem with my 1G iPod, then put a blob of epoxy over the connectors to keep them from breaking again.

I have a slew of photos of both surgeries which I will post in an extended entry later.

Now Playing: Once in a Lifetime from Remain in Light by Talking Heads

Posted by pjm at 10:49 AM | Comments (5)

December 30, 2004

How to demolish corporate systems security

A year or so ago, I was tinkering around with geocaching trade items. I had, briefly, been putting Linux CDs in caches, but at the rate I was caching, three-disk Red Hat sets were prohibitively time-intensive, so I went looking for single-disk distributions. What I found was the “Live CD” distros. (Jargon note: “distro” is a shortening of “distribution,” which is Linux-community jargon for a complex of software, installation scripts, and a Linux kernel available for installation as a complete operating system. You can’t get plain-vanilla “Linux”; Linux itself is only a kernel. Instead, there are dozens of options customized for particular purposes, or intended to run on as wide a variety of hardware as possible.)

A “Live CD” is an entire operating system on a single 650 MB ISO. The most widely known is Knoppix, which uses most of the CD to provide a pretty versatile experience; another which I played with is called Puppy Linux, which is almost small enough for a Zip disk and includes only a seriously pared-down suite of software. The key is that the CDs themselves are bootable. This means you can walk in to your office, sit down at the WinXP box your Microsoft-minded IT department forced on you, boot from the Live CD and work in Linux, with the hard disk of the computer available to you as a writable volume. (The Knoppix distro I played with also let you use a floppy disk to store volatile ~/ information like a .bash_profile file.) There’s a possible performance disadvantage if the machine doesn’t have enough RAM to keep the operating system in memory and has to hit the CD, but most of the Live CD distros are configured with this in mind; Puppy claims to free the CD completely, allowing you to remove the disk after booting and use the drive for other purposes.

Let me repeat that concept from a slightly different perspective: a Live CD lets you override the installed operating system and all its safeguards, and use your own system, right down to the kernel. If you are a corporate IT type, you’re probably not too concerned about your users at this level. If they’re bright enough to know how a Live CD works, they’re bright enough to understand systems security concepts, or should be; if they’re not, that’s a user-education issue, not something to be solved with software or hardware.

However, the idea of someone coming in from outside—posing as the FedEx guy, no doubt—and sitting down at one of your systems with a Live CD, that idea should reduce you to a paranoid wreck, assuming you haven’t already delegated someone to password-protect the BIOS of every box on your network.

Wait, wait, it gets worse: with a few innocent inquiries on a listserv this evening, I discovered that there is a Linux distribution customized for USB keychain drives.

Now we’re talking. I laugh at your clunky Windows desktop. I have a penguin in my pocket.

Posted by pjm at 9:45 PM | Comments (1)

December 21, 2004


Something went haywire with the thermostat last night, and the temperature in the office this morning was in the fifties. Most people are still wearing their coats. I’d be fine without my coat; it’s my mittens I miss. I made an extra-hot mug of chocolate, and rather than drinking it, I’m periodically wrapping my hands around it to keep my fingers warm enough to type.

Now Playing: Because Of You from Go! by Letters To Cleo

Posted by pjm at 10:02 AM | Comments (2)

December 17, 2004

Automated bureaucracy

The server is crashing, repeatedly, this afternoon. I thought, for a while, that I knew what was bringing it down, but it turns out I was wrong. (I’m working with a different theory, now, but I could be wrong about that one, too.)

This would be a relatively minor irritant except that the system, like many, insists on running chkdisk on startup whenever it was not properly shut down. It’s a pretty lightweight processor and a big disk, so it takes anywhere from fifteen to twenty minutes to check the disk. For that time, the whole office is disconnected from the ‘net. I’d far rather it just bring the system up, and then check the disk, but I don’t know how to manage that.

Now Playing: Questions from Still Burning by Mike Scott

Posted by pjm at 5:06 PM | Comments (0)

December 16, 2004

"A security issue has been identified..."

“…that could allow an attacker to compromise your Windows-based system and gain control over it. You can help protect your computer by installing this update from Microsoft. After you install this item, you may have to restart your computer.”

That’s the description on three of the four updates waiting when I booted the WinXP box today. (It sits unused for long blocks of time, so updates can build up.)

With all the worms bouncing around the ‘net claiming to be an emergency security patch from Microsoft, just trust us and double-click the attached file, you’d think that Microsoft would be a bit more specific about the details of updates, even in Windows Update, instead of cutting and pasting this null-content boilerplate. How easy would it be to spoof a Windows update now that we’ve all been trained that there’s no important information in the update description field? “Oh, the details aren’t important,” says Microsoft, “just trust us and install the update.”

The vague description is reflexive—it applies to itself.

It’s making me more inclined to believe the “Windows as a virus” theory.

Now Playing: Earn Enough For Us from Skylarking by XTC

Posted by pjm at 4:59 PM | Comments (1)

More defensive measures

Email this morning from my web host sent a blanket announcement about load problems they’re having due to weblog comment spam, largely to MT weblogs like this one. They mentioned that they’re blocking the IP addresses causing the most problems, but asked us to

“…please do what you can to reduce the likelihood of your site being a target. Install any applicable anti-spam plugins or disable comments on your weblog altogether.”

I do, in fact, have some of the toughest available defenses installed, here and on a few similar installations I help out with. I’m more than a little concerned, however, since some recent reading suggests that I might be winning something of a Pyrrhic victory—the defenses themselves might swamp the system, given a sufficient spam-load.

So, I’m taking a few other steps as I have time today, which may temporarily break things. (I’m moving mt-comment.cgi, if you care.) In the long term, I’m interested the utility of other strategies like “captchas” and TypeKey but I’m concerned that they ultimately hand the nuisance caused by the spammers—who, by the way, provoke mental profanity so vicious that I actually surprise myself—on to you, the innocent commenters. Eeeugh.

Now Playing: Free Will from Night Opens by Rich Price

Posted by pjm at 9:54 AM | Comments (2)

December 15, 2004

Compound fracture

A few years ago, I picked up a drop-leaf end table at the annual Bryant Homestead craft festival. It’s been useful for holding phones and plants and things, and a few days ago A. started using it as a temporary laptop desk in front of the couch. And then last night I noticed that one of the legs, which has a pretty good sized knot in it, has split almost completely through at the knot.

I think the leg is pretty much finished; there’s no point in “splinting” it. I suppose I could glue it at the break, but I don’t think I’d trust that. It looks like the top end of the leg is glued in to the tabletop; I’d have to amputate somewhere below the tabletop and put on a new leg.

This sounds nice in general, but the devil is certainly in the details. I suppose I’ll need to join it with pegs. (Trunnels?)

Now Playing: Beautiful Night from Josh Ritter by Josh Ritter

Posted by pjm at 9:59 PM | Comments (0)

Painful realization

It’s no good breathing a sigh of relief.

It doesn’t matter how long you agonized over the wording of the email or considered the implications and phrasing. Sending the message does not resolve the issue. Sending the message invites a reply, which you can then anticipate with trepidation.

I really have to get better at this communication thing. It’s hard to find a good hermitage nowadays.

Now Playing: Independence Day from XO by Elliott Smith

Posted by pjm at 3:21 PM | Comments (0)

December 13, 2004

Etiquette question

(OK, I’m a clueless geek.)

What’s an appropriate thank-you for the people who are writing (have written; I’ve got a big packet on my desk) me letters of recommendation for my applications?

Now Playing: Disturbance At The Heron House from Document by R.E.M.

Posted by pjm at 3:51 PM | Comments (4)

December 10, 2004

Request for comment

What should I sign up to contribute to the office potluck? My co-workers, I should add, are kitchen over-achievers. I’ve brought fudge and cookies before.

Now Playing: It’s Alright For You from Regatta de Blanc by The Police

Posted by pjm at 11:27 AM | Comments (6)

December 8, 2004

I don't speak that charset

A company we work with perpetrated this bug and it has reproduced in several of our pages (a consequence of me swiping whole pages as templates rather than designing from scratch.) I’m trying to make sure this round of disks doesn’t include it.

For the record, charset=UTF-8 == good, charset=UTF-16 == bad.

Now Playing: Fix Me Now from Garbage by Garbage

Posted by pjm at 11:31 AM | Comments (1)

December 6, 2004

Local tourist

One of the topics of discussion on yesterday’s ride was geocaching. The illustrator had a GPS but hadn’t used it for much, and we rode near two caches (one I’d found, and one I hadn’t.) He hit immediately on the appeal of it: he wanted to know how many there were near Amherst. (It turns out there are eighty within fifteen miles of downtown.)

When I first started geocaching, it was fun to “discover” caches in places I knew; I’d look at the listings and say to myself, “Hey, that must be in…” and I’d go there.

Then, for a while, I thought it would be fun to look for caches in very different places. Whenever I traveled, I would print a quick list of possible caches to look for, and try to make time to hunt them. I managed to find every cache on the island of Bermuda last winter (at the time, there were only six,) and that took us to some interesting places on the island I might not have visited otherwise. But on some trips—to the marathon Trials, to Austin—I couldn’t get excited about hunting caches.

Since the summer, I’ve been working on finding the caches nearest my “home coordinates,” and I think that’s been more rewarding than anything else. When I’m in a new and different place, I have other navigational concerns. Here, I have a pretty good idea where things fit together. So when I set out to find a cache, what I’m doing is looking for a spot someone else thought was worth sharing; in some cases, like the “Stopping by Mt. Toby Woods” multi, an entire journey. I’ve been discovering my area through the eyes of others, a tourist in my own neighborhood.

There was an article a few months ago which included a cacher in southern New Hampshire telling about how he’d found everything out to eighteen miles from his home, a significantly tougher task in the Boston metroplex than it is around here, and another who recently found every cache in the state of New Hampshire. One quote from the article:

“People think going and sniffing around in the woods for a hidden box is kind of peculiar,” said Geiger. “The actual physical find isn’t so much what we’re looking for. Finding interesting places we haven’t been before that we’ve been driving past for 20 years, that’s the fun of it. We’re really discovering our own back yards.”

Now Playing: Wrong from School Of Fish by School Of Fish

Posted by pjm at 3:45 PM | Comments (0)

And the coup de grace

Today’s NYT has an article about phishing which reminds me that I failed to carry my explanation of asymmetric key signatures to a logical conclusion. There’s a simple way for companies to stop phishers and spammers from assuming their corporate identity to spam and attempting to swindle the Internet: sign your corporate communications.

Then, weeding through a weekend of stuff in my aggregator, I find Wolf Rentzsch arguing that RSS feeds are phishing-proof (including a thumbnail explanation of phishing for those who still haven’t heard of it, and also an argument that signed email isn’t going to happen; I’d point to GPGMail and Enigmail as signs of progress in that direction, but Microsoft has to get going.)

Now Playing: Red Army Blues from A Pagan Place by The Waterboys

Posted by pjm at 9:58 AM | Comments (0)

December 2, 2004

Identity, proof, and encryption

I’m clearing space on my drive for an upcoming project, just a revision but a seven-disk set requiring plenty of space. So things are stop-and-go this morning, flurries of activity as I line up a disk alternating with spaces of “writing time” while the disk burns and verifies.

Yesterday, I was quite proud of myself because I was able to give a contractor shell access to our webserver without sending him a password. (Send a password to a user account on our server? In unencrypted email? Are you nuts?) I had him create an RSA key pair on his machine, then he sent me the public part of the pair while he kept the private part. I installed the public key in his ~/.ssh/authorized_keys file (chowned and chmoded appropriately, of course,) and he was able to log in with the private key.

Now, I realize that’s probably a pretty opaque explanation if you’re not already up on asymmetric keys and authentication. I think the biggest hurdle faced by most encryption systems is lack of understanding of how they work; when we talk about “keys,” it’s a pretty poor metaphor.

Think about how a physical key works. You have a lock which can be opened with a sliver of metal cut to a certain shape. It’s simple to copy those slivers of metal (though it requires some specialized tools, so there’s an inconvenience level.) In theory you can distribute the keys easily, but it’s hard to take a known key and easily produce (and propagate) locks to match it. This isn’t the way digital keys work; it’s more like how passwords work. The key is a physical manifestation of a password.

There’s a better metaphor for digital keys. On my desk I have a curious little chunk of stone, a gift from a friend who visited China some years ago. It’s a chop, a sort of stamp with a carved lion on one end and my name (with a whimsical phonetic representation in chop-script, another story entirely) cut in the business end. Ink it and press it to a page, and it leaves a unique mark that is meant to be a verification of my identity: this is me, it asserts, and I prove it because nobody else has the chop which makes this mark.

Chops are far from simple to forge. You’d think it would be easy, because the marks they make can be quite widespread, and probably could be reproduced with a photocopier, but it’s not that simple. Any number of factors can change the appearance of the mark, from the surface under the paper being chopped to how well I ink it, and yet the mark is still recognizably from my chop. Try forging that.

Asymmetric keys are more like chops. The private key is like the chop itself, unique to the holder and impossible to fake. The public key is the basic form of the chop-mark; it allows the general public to confidently confirm that the signer is the person who owns this key without needing a copy of the key itself. The public key can (and should) be widely, publicly distributed; the private key is just that, private. (Note that using a private key also requires a passphrase, so just having a copy of the key isn’t enough; it’s a “multi-factor authentication.”)

So my contractor sent me, in essence, a method for recognizing his chop-mark. And I told the server, “Allow access to this user account for anyone who signs with this chop-mark.” If the email message was intercepted, so what? The black-hat doesn’t have the chop, just its mark. They can’t fake the mark to gain access.

PGP/GPG mail signing works the same way: the sender’s private key is used to create a hash of the message (I won’t get into hashes) which is like the unique mark of a chop. A holder of the public key can verify that the message as read is unchanged since it was signed, but they can’t change the message or re-sign it. (Those who exchange e-mail with me regularly know that I sign even the most routine messages, perhaps to an annoying degree; however, my users know that if they get email purporting to be from “ IT staff” which doesn’t have my signature, it’s not from me.)

Actual encryption with these keys is an entirely different bird which goes beyond this metaphor, and this post is too long already. But I’ll note one thing: I’ve already got three different private keys, and I work from at least two different locations. Do I produce multiple copies of these keys? If you’re Julie, hopefully at this point you’re raising your hand and saying, “Why not put them on a USB flash drive on your keychain?”

There’s some interesting discussion of the uses of this sort of technology in the October ;login:. It’s an interview with the CIO of the University of Texas system, which has to verify thousands of identities daily, while protecting the privacy of identifying details.

Now Playing: Faded Dress from Cherry Marmalade by Kay Hanley

Posted by pjm at 12:31 PM | Comments (4)

December 1, 2004


I’ve been renewing the certificate for our secure web server. Here’s what that means, in less dense terms: we just paid a company to agree, for a further two years, to confirm that we are who we say we are when you start an encrypted conversation with our server. (It’s easy enough to exchange keys and have an encrypted conversation, but how do you know you’re talking to who you think you’re talking to?)

It reminded me of an article in the June issue of ;login: about an open-source certificate authority which would issue certificates for free. The catch? Very few browsers recognize it as a certificate issuing authority, which means its standing as a verifier of identity is pretty low. It’s easy to add a certificate authority to your browser, but how many people will do that? Probably not the 9x% of the internet using IE.

Meanwhile, there’s an implication that in the IE vs. Netscape days, all it took to be included as a certificate-signing authority was a check with the appropriate number of zeros sent to the software company.

Needless to say, I had a hard time convincing myself that our $300 was well-spent.

Now Playing: Honest Pleasure from Tomorrow by James

Posted by pjm at 12:26 PM | Comments (1)

November 30, 2004

Rolling off the fold

I’m working with an unusually high entropy level at work today. This may be connected to spending much of the morning talking with a remarkably talkative (mostly in a helpful way) CS professor at The University this morning. Not only did he confirm most of my theories about The University, but he was also surprisingly willing to play guidance counselor: “Where else are you applying? Why not Big Private University? They weren’t much fifteen years ago, but they’re quite good now in a variety of areas. Prestigious University gets a lot of applicants because of their name, but their department isn’t really that strong. Remote College is on their way up.” Etc. etc.

Now the bugs are flying everywhere. It’s always a quick patch, but how do I find them first?

Unlike last week, plenty to say, no time to say it…

Now Playing: The Bell And The Butterfly from Wonderland by The Charlatans

Posted by pjm at 3:40 PM | Comments (0)

November 23, 2004

Leaving a gap

A little while ago, I asked my supervisor if he would write a letter of recommendation for my grad school applications. Of course, that also meant I had to tell him I intended to leave the company if I was accepted. (I have massive misgivings about this, of course, because I have enjoyed this job—still enjoy it, in fact, more than I liked my previous job when I left it. But even if I don’t go to graduate school, I need to go somewhere else to keep having the opportunity to learn new things; I’ve done most of the growing that can be done here.)

Today, he’s asked me to draft my own job description. Something tells me my job will be on within minutes of him hearing about an acceptance. (Naturally, I will mention such news here as well, in the event that you’re in my line and might be interested in working with a great company in a really cool part of the country.)

The few others here who have heard about my plans are uniformly disappointed; I think, in general, that they like me here. They keep making, “How are we going to do without you?” noises. Well, probably in much the same way they did without me for thirty-two years before I came, I expect, but I’ll admit it won’t be simple; I’ve grown in to the available space in this job, including filling unexpected gaps, and there’s no telling how well someone else will fit in the space when I leave it empty. One hopes we will find someone who will make a space in their own shape.

So I’m trying to write the description with a lot of generalizations, and resisting the temptation to dictate tools and standards.

Actually, in an exercise in futility, I managed to reduce it to seven words: Develop things. Maintain things. Fix what breaks.

Posted by pjm at 4:57 PM | Comments (2)

November 18, 2004

I might as well ask

In vsftpd, I know how to configure the default owner/group/mode for files uploaded by an anonymous user. However, I’ve yet to find any direction for fixing the same settings for uploaded directories.

(It appears that the “secure” answer is, “Don’t let anonymous users create directories,” but real-world users, who may be anonymous to the server but are not anonymous to me, are not sympathetic to this answer. The point of “anonymous FTP,” in this case, is not to let any clown upload and download arbitrary files to the server, but to allow us to exchange large files with illustrators, authors, developers, etc. without having to create full login accounts for each of them, which qualifies as an unnecessary inconvenience for them and for me.)

I tried the Red Hat user’s mailing list with no response. There’s no individual list for the package. In the process of hunting around, I did find an interesting site,, which is one of a series of similar sites dedicated to spelling out the installation process of “alternative” server software (like djbdns or qmail.) Still no answer to my umask problems, though.

So I went to The Source. (Use The Source, Luke!) I thought I found a mkdir() system call which may or may not have been the root of the issue, but without my K&R right there (or, for that matter, my Stevens—you’d think these would be included as a sort of extra in XCode) I couldn’t be sure. I must learn to read code more efficiently someday.

So I asked. Sent in a feature request, mentioning how useful the software was and how we used it. I detailed the things I’d already tried in an effort to find an answer, so he knew I wasn’t just a goof asking for help because I couldn’t be bothered to research. Now I just wait to see if it comes up in the next version, I guess.

Now Playing: Frinck from Songs From The Other Side by The Charlatans

Posted by pjm at 12:36 PM | Comments (0)

November 16, 2004

Firefox OS X update

A few months ago I posted a list of problems with Firefox on OS X which eventually led me to go to Camino as my default browser instead. With the 1.0 build out now, I thought I’d give it another whirl. I downloaded one of the G4-optimized builds described on Mozillazine and set it running.

There’s no question that it’s quick; the custom build, in particular, is really fast. It reports itself as Firefox 0.9.1+, however; I also installed an “official” 1.0 build from to confirm that I had the real thing. (It does look like the G4-optimized build was not 1.0. Hmmm.)

Leaving out the scrolling issue, which I resolved, my problems were three:

  • Links from other applications open as new windows, not new tabs.
  • There doesn’t seem to be a keyboard shortcut for “go to home page.”
  • There’s no go-away icon on the tabs.

The good news is, the first one, opening links from other applications, is fixed in 1.0. This was a major speed bump for me. However, still no go-home keyboard shortcut, and still the same unfamiliar close-tab button. (Jeremy didn’t like that either, but his other two items were fixed, so he’s all good now.) The bad news is, I’ve added a fourth item:

  • Form widgets are depressingly Windows-like, not Mac-like.

The second item, Julie pointed out, has a bug in Bugzilla; I just voted for it. (It’s worth complaining where you’ll be heard.) I’ve heard of an extension which supposedly handles the third, but it appears to be uneven in its Mac support; it’s not working for me. There are rumors that there will be another incremental 1.0 release for Mac OS X to handle “UI issues” which might include my last item, but I can’t find any confirmation of that on the Mozilla site.

It looks like I’ll be sticking to Camino for a bit longer. The latest nightly is… interesting.

Now Playing: Within Your Reach from Hootenanny by The Replacements

Posted by pjm at 4:22 PM | Comments (3)

Efficient business process

I ordered some RAM from a supplier on Friday. Today (Tuesday) I got an email telling me that the memory shipped on Saturday. Second-day, which means I should probably expect it today.

Any reason they couldn’t have sent that email on Saturday? Or even, for that matter, Monday? What’s the point of nearly instantaneous (and presumably automatic) communication if there’s a two-day delay in initiating it?

Now Playing: Burning Photographs from Rock N Roll by Ryan Adams

Posted by pjm at 1:34 PM | Comments (0)


I feel like I am relatively quiet here, lately. I know, you don’t need to scroll down very far to hit the lengthy exploration of the Lydiard base phase, but even that seems pretty unfinished. There are a lot of unfinished ideas right now, which is not always bad; yesterday I started a post about configuration issues I’m having with vsftpd which kept leading me back to the web for more research. I even opened up the source of a non-Perl open-source program for the first time. I think I’m going to end up writing the author with a feature request, because I’m definitely not ready to hack his C source, but I feel like I want to exhaust all options before becoming a nag. And that’s sparking some interesting questions about my place in the larger open source community. So, example of an unfinished thought.

I wanted to post pretty pictures of caching (and going to cross-country meets) in snow, but it turns out that I’ve lost the USB cable to hook my camera to my Mac, so you’d have to come here and look at the tiny LCD on the back of the camera to see them.

Response to my wish-list post being sufficiently deafening, I will concentrate on feature requests and bug fixes for the immediate family, unless it turns out that you all just tuned me out around the point where I discussed flow control operators and array assignment in PHP.

Sometimes I’m finding that I don’t write things like that because I don’t think anyone is interested in reading them, and I need to remind myself that the point of this exercise (at least for me) is not that it’s reader-relevant.

Now Playing: Philosophy from Ben Folds Live by Ben Folds

Posted by pjm at 9:57 AM | Comments (2)

November 15, 2004


I never knew you could get this greasy replacing a light bulb. I suppose I should’ve expected it when the first step of the instructions was, “Unhook the power steering fluid reservoir…” Still, why all the goo on the plug itself?

How did the world work before Fast Orange?

Posted by pjm at 7:32 PM | Comments (0)

The cleaning service

After filling my water bottle with ice and water, I stayed in the kitchen trying to explain to one of my co-workers how to deal with the virus which has infected her home computer. She’s been a relatively receptive audience for home computer advice, since she has two teenagers who work the poor thing to the limit. She’s installed Firefox and AVG and listened to my canned speech about how commercial anti-virus companies have a disincentive to completely stop the spread of viruses. (If they did their job too well, nobody would pay for virus-signature subscriptions, would they?) I think I conveyed the message that she needs to boot into safe mode and then scan again with AVG.

As we were moving back towards work, she said, “You need to write a book about all this.” I replied, “Why should I do that? Even if there weren’t dozens already, why would anyone spend $15 on a book before they get a virus?”

“I’m in danger of having to pay someone hundreds of dollars to fix my computer. I’d rather buy a $15 book,” she said. “Yes,” I answered, “But who does that math in advance? Cost-benefit analysis is taught in security classes; you estimate the potential cost of a breach and compare it with the cost of mitigating the vulnerability. Who decides to spend $15 on a book because they see the potential of spending hundreds recovering from an infection?”

“I know a good publisher,” she said. “We only publish biology textbooks,” I reminded her.

Does anybody really do cost-benefit analysis on home computer security? Enough that anyone bothers to publish books?

Now Playing: Crawling Back To You from Wildflowers by Tom Petty

Posted by pjm at 4:29 PM | Comments (0)

Plugged in

Electrical project du jour: replacing halogen headlight bulbs in the car. I discovered that the driver’s side low-beam was burned out on Saturday evening; yesterday I looked up the bulb I needed in the manual (and confirmed that I could replace the bulb myself, and wouldn’t need to replace an entire sealed headlight assembly,) and this morning I was down at the parts place picking up two of them on my way to work. The instructions for the replacement remind me of the process for replacing bulbs in the stage lights, back in high school, including the oft-repeated cautions not to touch the bulb under any circumstances to avoid an early death for the poor little glowing tube. The difference is that the headlight bulbs cost about $7.50, and the whole assembly probably comes in under $100; I was instructed that if the stage lights fell, I was to break the fall with my body, because “we can replace you; we can’t replace the light.”

I’m doing both bulbs, on the theory that if one is burned out, the other must be pretty disgruntled with its lot by now.

Fun headlight fact: the one bulb has two filaments, to handle high beams and low beams respectively. This is why, when you click between the two, there is that brief interval of both high and low. (Or, more disconcertingly, neither.)

Now Playing: Reptile from Starfish by The Church

Posted by pjm at 11:07 AM | Comments (1)

November 11, 2004

Wishes update

I have been hacking at the wish list project for a good chunk of today. I think it’s workable, now, though it lacks a lot of refinement (and certainly lacks any more than functional design.)

I think if there was ever a quiz which asked, “What’s your favorite flow control function?” (maybe the “Intolerable Geek” quiz,) mine would be switch(). In fact, I think the world needs more switch(), because it’s not binary, and it’s very flexible. It can even be inclusive. I’m very fond of switch(). I’m also (belatedly) realizing that my total lifetime output of PHP code could be reduced by some significant percentage (and probably run marginally faster) if I used list() more judiciously. There’s always more to learn, always room to grow. (Or shrink, in this case.)

Obviously, I’ve set this up for me and my family. However, it’s arranged such that it can handle multiple families, and (obviously) overlapping families; you tell it which families you want to see lists for, they can then see yours, and off you go. If the family you want isn’t there, you add it.

I’ve got a few beta testers in the family, but some of my family members are notorious technophobes, and I want to make sure I’ve ironed this out as much as possible. Is anyone here interested in beta testing? This isn’t going to hack your system, erase your email, phone your mother and call her names if there’s a bug; however, it does require anyone you want to see your list to also register (and therefore implicitly create a list of their own.)

(And if you’re asking, “Why not use Amazon’s?” you haven’t been following along: roughly, the problem is that with an Amazon wish list, you can see when someone bought something for you. No fun, in my opinion. Plus, this setup allows others to suggest items for you—and you can’t see the suggestions, either. So it allows for some serendipity.)

Let me know. Drop a comment, email, whatever. If there’s interest, I’ll publish the URL this weekend, or just email it to anyone who asks.

Posted by pjm at 9:11 PM | Comments (0)

November 10, 2004

The year 10000 problem

I’ve just hacked one of our forms for setting expiration dates so that it will accept a “no expiration date” option. Actually, it does set an expiration date: it sets the year to 9999, the highest value which MySQL will allow in a DATE column.

If anyone is still running this system eight thousand years or so from now, they will need to watch out for this.

I wonder if I’ll see software which allows for five-digit years in my lifetime?

Now Playing: Good Year For The Roses from Best Of by Elvis Costello & The Attractions

Posted by pjm at 3:44 PM | Comments (0)

November 7, 2004

Not omniscient

Busy morning. I’ve been, I suppose, “blogging” the ING New York City Marathon. I’m done now.

Minor crises littered the early part of the morning, among them my computer and the press-room wireless network not really wanting to play. I wound up dialing up rather than wrestling with the network; I know I could have solved the problem, but probably not until far too late in the day. Better to route around the damage. Now, of course, when I need it less, it’s working just fine.

Another morning glitch: I had planned to exchange files with my editor (yes, I was being edited) using a USB flash drive I’d borrowed from work. Which is all well and good, but he’s using one of the old berry-colored iBooks, and the curving case meant the jack itself was too far recessed for the drive to plug in effectively. There’s something we wouldn’t have anticipated. I figured, hey, if it has a USB jack, I should be fine, right?

Now I’m waiting here in the media center for the race NYRR’s executive director, who, I’m told, wants to “pick my brain.” I’m not sure what I will have to tell her that she doesn’t already know, but I suppose I’ll find out.

There’s an interesting image, asking an athlete about a race: “Did you know on foot one that this wasn’t going to be a good day?” Foot one. I like it.

Posted by pjm at 1:30 PM | Comments (0)

November 5, 2004

As if you needed more convincing

The SANS Internet Storm Center handler Tom Liston has been writing a series in the Handler’s Diary which he calls “Follow the Bouncing Malware.” He’s essentially watching, step by step, what happens when a spyware/adware infestation begins on an unpatched Windows system.

By the end of the third stage, the system has downloaded fifteen files weighing in over 2 MB total, and has installed twenty files weighing in at over 3 MB. The user gave permission for none of it. “With over 2 MB of software downloaded, installed, and executed without his permission, I would say that there is little doubt that [this user] isn’t the guy running the show.”

If you’re not already well aware of the perils of Internet Explorer, this should be required reading. Start with Part 1, then hit Part 2 and Part 3.

Now Playing: Time Machine from Going Blank Again by Ride

Posted by pjm at 10:47 AM | Comments (0)

November 3, 2004

iTried (or, more inconclusive results)

For the second time in as many nights, tonight, I had my older iPod open on the table. I used one of my new tiny screwdrivers as a decoy to the cat, and got the circuit board up and got my first view of the firewire jack connectors which are apparently the little brick’s undoing. Iz was put off by the smell of the hot soldering iron and left me alone while I tried to re-stick the contacts. I’ve got a few dozen pictures of the guts of an iPod now, but they’d be of more interest if the operation had been a success.

Unfortunately, I think a steadier hand and more solder is needed here. I took a swing at it, but when I put everything back together and jacked it in to my Mac, it performed the same dance it usually does: it pops up the apple as though ready to mount, but then gives me the “safe to disconnect” check-mark.

I doubt I’ll be able to get the circuit board up again the way I did tonight; I was not using the proper tools (a small Torx bit) and may have lost most of my grip on the four tiny screws. Perhaps with the proper Torx bit I could try again. It’s disappointing; I figured if one journalist could do it, I could too.

Meanwhile, I’ve put off replacing the battery in the newer pod until I get the results of a new charging experiment: is the problem more to do with having it plugged in to another Firewire device and not directly into the Mac?

And the one I can’t put any new music on will, apparently, now play for a full day without a recharge.

Now Playing: Dear Chicago from Demolition by Ryan Adams

Posted by pjm at 8:09 PM | Comments (0)

There's code running out my ears...

…because I’ve got the guts of our ordering system ripped out and spread all over my working space in between them. Fortunately, if there are parts left over when everything’s back together, I can just delete them.

Inside the <? and the ?> I’ve got some special objects which begin with a $, and outside I have special objects which begin with a &. The ones that start with & also have to end in ;, which is difficult because in the sections between the <? and the ?> I need to end every line with a ; unless I ended with a { (in which case I need to put in a } later on, which also doesn’t need a ;.) Oh, and sometimes there are :s and \rs which are something else again. I won’t even start on when I need to \ my “s and when I don’t.

Honestly, I think know what I’m doing, but switching back and forth between PHP, SQL, and HTML is making my fingers stagger. It’s like getting off a bicycle and trying to run.

Meanwhile, I read in today’s RW that “Stefano Baldini” is an anagram for “No idle fat in abs.”

Now Playing: Are You Ready from Strip-Mine by James

Posted by pjm at 4:12 PM | Comments (0)

Understanding me

This morning, more than any time since I started this, I don’t feel like I have anything to say which anyone wants to read. I suspect I’ll spend the day talking to computers, which can be convinced to listen to me if I punctuate correctly.

Now Playing: Rock N Roll from Rock N Roll by Ryan Adams

Posted by pjm at 10:02 AM | Comments (1)

October 31, 2004

If wishes were horses...

…I’d still be relying on my own two feet.

I spent a chunk of Friday downtime starting to suss out the web app I’ve been calling “the wish list.” I created the subdomain and database on my host, laid out the database tables as best I could guess (I’m sure they’ll need tweaking as I go along, though,) and started thinking through site flow (that is, where a user starts, where they can go from there, where they can go from there, etc.)

I came up with half a dozen pages just for access control and authentication alone, and got discouraged with trying to imagine it all in detail, so this morning I’ve started coding up the access control parts. It’s easier than I’d expected; I forgot about PHP’s session functions, which make it pretty easy to remember that someone has authenticated (and who they authenticated as) through a session, then “forget” that data when they log out by closing the session. I’m hoping I can complete all the user-handling code today, then put some evenings this week in to the list-handling code.

I’m discovering that what’s different about this one is that the application is more complicated than the data. Most of what I’ve dealt with at work is just two different views of the data, the content manager’s view and the reader’s view. Here, how much of each record (and which records) are displayed is heavily dependent on what user is asking for it; there’s a lot of query and presentation logic in the application, so I have to do a lot more PHP thinking, and not as much MySQL thinking.

I haven’t even started to think about the presentation layer; everything is in bare, unstyled default HTML. I’m going to need a style sheet one of these days.

Now playing: Six O’Clock News from Failer by Kathleen Edwards

Posted by pjm at 10:50 AM | Comments (3)

October 29, 2004


Right, so you all know the difference between a hacker and a cracker, right?

I’m adding a new feature to the CMA of our corporate website. It’s a pretty simple widget, actually, but it’s heavier work than I’ve done on this site for a few months. I added a table to the database, and now I’m writing a platoon of PHP forms to let someone manage that table in a relatively user-friendly way. To do it properly, I need to hunker down here, lock out as many distractions as I can, and stream code into BBEdit windows as quickly as I can remember it. I have browser tabs open to the MySQL manual and the PHP manual as well as the CMA forms themselves, and I have an open SFTP connection up to the server so I can push forms up as fast as I debug them. I have my headphones on (rare, in the office) so I’m not distracted by outside noise. The office manager came in to deliver a new phone book a few minutes ago and startled me, despite my C.H.I.M.P. mirror on the monitor. It’s flow; I cut loose a lot of nonessentials and get in the process.

This is all necessary because of the two parts of the process, planning and execution. The first part, visualizing the problem and the process, is relatively low-stress. The rest of it is, I suppose, a creative act: I take this concept, which I have in my head (and perhaps in a few paper notes) and realizing it in code. If I lose the concept in my head, it will take me hours to get it back. If I get sidetracked from what I’m at, it’s not easy to get the picture back.

But while it’s happening, flowing from my head into files (and running, which is something I love about runtime languages like PHP and web development: it’s there as soon as it’s syntactically correct,) it’s a rush. It’s like being on a wave. I think about the scene, early in Cryptonomicon, where Avi Halaby is about to explain his new business plan over the phone to Randy Waterhouse, and he starts out by announcing, “I am channeling the bad shit! The power is coming down from On High. Tonight, it happens to be coming through me—you poor bastard.”

I think, if I drill down to the bottom of my graduate school motivation, it’s this: I want my entire work life to feel like that. And I want to be able to turn it on and off like a tap. (I know, not bloody likely. But I can dream, right?)

Now Playing: Fast Way from Wholesale Meats And Fish by Letters To Cleo

Posted by pjm at 5:04 PM | Comments (0)

Another public service announcement

If you upload files named space.asp, 1mbtest.ptf, or the like, to our anonymous FTP server, expect to be denied at the firewall next time you connect. Not that you haven’t already figured out that the server is configured as a drop-box—so you can upload to the upload directory, and download from the download directory, but not vice versa—which makes it difficult to abuse.

But when the banner says, “You are being watched,” it’s not just trying to scare you.

Now Playing: Dance With You from The Distance To Here by Live

Posted by pjm at 10:06 AM | Comments (0)

October 28, 2004

The sacrifices I make

Time was, I had the nicest monitor in the office. You’d think that would come naturally, my being the IT department and all, but in actual fact I often have the leftovers; I spend enough time buying everyone else’s machines that my own stuff doesn’t get replaced unless there’s smoke rising from it.

I managed the nicest monitor—a 19” ViewSonic LCD which pivots to be either portrait or landscape, a real asset in a publishing company—by not ordering it for me. It’s the show monitor. When we go to a significant meeting, like this week’s Society for Neuroscience meeting, my monitor gets shipped out and plugged in to a laptop in our booth to show off our software titles. And believe me, everything looks good on a 19” LCD.

Meetings happen twice a year, tops, though. The rest of the year, it accumulates sticky notes on my desk, which is better than sitting in the basement by a long reach.

But, like my department head, my monitor is currently in San Diego. And I’m still here, looking at a 17” CRT with the accompanying flicker. The thing that really gets me, though, isn’t the flicker: it’s the glare. Sunlight on a notebook on my desk reflects in the monitor. Sunlight from a neighboring office on the wall of the hallway reflects in the monitor. It’s not enough for me to long for a return to my cubicle days, but still, I’ll be happy when “my” nice, big monitor is back.

Now Playing: Mercy Of The Fallen from The Beauty Of The Rain by Dar Williams

Posted by pjm at 2:51 PM | Comments (0)

October 26, 2004

Inside job

It’s worse than I thought… it wasn’t just spam.

It was also one of our authors sending us a 32 megabyte Word file as an email attachment.

32 MB.

It’s wrong in so many ways, I don’t even know where to start.

The server strangled itself and spontaneously restarted six times before I could keep it stable long enough to get the culprit out of the mail queue.

Now Playing: Paralysed from Nowhere by Ride

Posted by pjm at 3:27 PM | Comments (5)

October 25, 2004

Rearranging furniture

I just upgraded to Movable Type 3.121, or whatever the newest micro-version is. Let me know if you find any sharp edges I need to sand off. I’ve read that they often come up in comments.

Now Playing: Tomorrow, Wendy (live) from Still in Hollywood by Concrete Blonde

Posted by pjm at 11:16 AM | Comments (0)

October 24, 2004

Wish List

(For once, something that really belongs in the “wishful thinking” category…)

Some more discussion around the family dinner table involved family members with a tendency to get an early start on Christmas shopping. (I thought I was being harried by aunts at Thanksgiving, but when my sister-in-law asks about my list at Thanksgiving, it’s because I’m the last one she hasn’t checked off her list. I have to admit I’m a bit jealous.)

One thing we discussed was the possibility of creating a sort of on-line family registry. The idea is that family members would each be able to post a list. Then other family members would be able to not only read the list, but mark things off to avoid duplicates. So far, so, but the catch which I want to apply is more Christmasy: I don’t want the list owner to be able to see what, if anything, has been marked off their list. (I’m all about the surprises under the wrapping.) A. also suggested that others should be able to put items on others’ lists, so (as an example) if someone was getting charts, that could spark waterproof chart bags, or something like that. So there’s a rough idea of your feature set.

Following the great dictum about hammers and nails (“When the only tool you have is a hammer…”) I immediately started thinking of it as a MySQL/PHP application. I’d need to authenticate all users, because I’d need to do access control based on what username they auth with. I allow each login ownership of a list. (Maybe I’d need some way of managing lists for minors, i.e. The Pink Ladies.) So there’s one table: users and user data. And a small collection of forms-and-applications for auth, password creation, alteration and retrieval, etc. etc. Users can add items to the lists, so there’s another table: items. Relationship to user (the gift recipient) and creator, because when the user is also the recipient, there will have to be controls over what they can see and edit. They can’t see items others have created with them as recipient; they can’t see status of items they created with them as recipient. Items have titles, brief descriptions, maybe URLs, maybe images? (We’d need forms to upload image files.) Suggested sources, perhaps. We need to allow for both catalog-circlers and those who try to stay vague and inspire serendipity.

We’d need a mechanism for changing the status of an item.

The only thing I can’t map out in my head is the final trick: as the database owner, I would be able to look in the database and see status on everything—essentially, since I create the access control, I can also bypass it. I’m trying to figure out some way that I can store status such that the database owner can’t check it—it can only be read through the relevant PHP application. I’m thinking about using a unique hash for each item (maybe I hash the title?) and then deliberately scramble the hash when the status changes… but no, if I can figure out a way to check it with the application, I could write another application that bypasses the access control and gets it back out.

Maybe I need to apply public-key encryption and force my users to generate keys. I’m probably thinking about this too much anyway, because I suspect there would be enough people in the family who wouldn’t use it, or would constantly forget their password, or would ask [insert other family member here] to remember their password for them…

Ideas? Anyone?

Posted by pjm at 9:24 PM | Comments (2)

October 22, 2004

I know just enough to be dangerous

When my 5 GB iPod (a first-generation, I think?) would no longer mount on any of my Macs (though it would charge,) I stowed it in a drawer and got a 10 GB model (third-generation) with my Powerbook. I promptly crammed that one full. (My next iPod will be a 20 GB model. I had no idea I had that much music.)

Now I read that the iPod’s real dirty little secret isn’t the battery, it’s the flakey Firewire ports in the early models. Like my “retired” one.

I now have all the excuses I’ll ever need to crack open my old iPod. Where’s the soldering iron?

Now Playing: A New Season from Starfish by The Church

Posted by pjm at 3:04 PM | Comments (0)

October 20, 2004

...and if the distributor calls...

…yes, I probably am DOS-ing their FTP server by uploading forty-megabyte image files. They should refine their image submission guidelines, and more carefully define “actual size” to not include 300 dpi TIFF files.

Now Playing: Getting Away With It (All Messed Up) from Pleased to Meet You by James

Posted by pjm at 4:02 PM | Comments (0)

October 19, 2004

I want one

An article in Wired News today describes the TV-B-Gone, a key-fob-sized “universal remote” which simply runs through about two hundred “power off” codes for a wide variety of televisions. Through the course of the article, the developer and his friends are turning off distracting TVs in waiting rooms, restaurants, etc. It’s delightful.

[Inventor] Altman said he prefers to ask people to turn off TVs. The problem is places where there’s a captive audience and no one is available to respond to requests, like the Laundromat or the airport. Altman said he has turned off sets at his local laundries and at airports around the Pacific Rim.

…Responding to the accusation that it sounded like unaccountable power, [user David] Burke said, “You’ve heard about the battle for eyeballs. They’re your eyeballs. You should not have your consciousness constantly invaded. Television people are getting better and better at finding ways of roping us into TV where we can’t get away.”

Now Playing: Which Way Should I Jump? from Slinky by milltown brothers

Posted by pjm at 9:40 AM | Comments (3)

October 18, 2004

A GPSr for Geocaching

JM asked about GPS receivers for “newbie” geocachers, which I don’t really have a good answer for, since I’ve only ever used one. (And practically wore it out, actually.) It happens to be a Magellan Meridian Gold (Garmin and Magellan (Thales Navigation) are the dominant companies in the field,) but I think you can do pretty well caching with any GPSr which has some of these qualities:

  1. It’s hand-held. You’re not getting far with the GPS in your car.
  2. It should resolve to thousandths of a minute of arc. (First you’ve got degrees, then minutes, which are sixtieths of a degree, then seconds, which are sixtieths of minutes. However, most caches show coordinates as XX° YY.YYY, that is, degrees plus five significant figures of minutes.)
  3. You should be able to store twenty or thirty waypoints. (Waypoints are coordinates used to mark a location, so you’ll set waypoints for caches you’re hunting and then use the GPSr to navigate to that waypoint.) Like digital cameras, the more the better: I tend to fill mine with a few hundred.
  4. It should easily connect to your computer so you can upload/download waypoints.
  5. It should be easy to find out the coordinates of where you are now, your heading (the direction you are or have been moving,) and the bearing to the cache (which direction it is from where you are.) It’s particularly useful if it shows a compass dial with heading and bearing indicated; then you can just follow the arrow.
  6. It should be easy to edit waypoints. (Waypoints downloaded from have an altitude of 0, and if the cache is a few thousand feet up, that introduces some lateral error; if I’m having trouble with a cache, I’ll frequently “fix” the altitude of the waypoint to get a little closer.)

In general, higher price brings two things: better reception (a more sophisticated antenna—GPS signals are weak) and/or better battery life. I do pretty well with a pair of AAs in mine, as long as I remember that plugging it in to the car jack automagically turns on the backlight and I need to turn it off when I unplug.

The website has a buyer’s guide which is nearly as general as this list. Among other things, they mention base maps; a good base map will keep you oriented to major roads nearby (mine lists most numbered state routes,) state parks, major mountain summits, etc., and a really good one will include more detailed topographic information. I’ve been supplementing my in-memory base map with topo maps I print from National Geographic Topo!; I can merge waypoints into the maps, so I’ve got a pretty good idea where I’m headed, at least in the part of the country I have CDs for. I’m not the only one, either; I’ve found Topo! maps that other cachers have left in caches. There’s one cacher near Boston who works entirely from topo maps, aerial photos, and other resources to locate caches without a GPSr.

Of course, once you’ve found the first stage of a multi, the map is of limited use. And now that I’ve explained how to select mid-range consumer electronics in order to leverage billions of dollars of military satellite technology for the purpose of finding hidden tupperware in the woods, I think my credentials as a raving geek are pretty much indisputable.

Now Playing: No Certainty Attached from Hologram of Baal by The Church

Posted by pjm at 3:09 PM | Comments (2)

October 13, 2004

You might not want this mental image

Yesterday I added RAM to an indigo iMac AV. Since the instructions suggest laying the Mac face-down on a cloth during the operation, I used my shirt. The instructions are also fairly specific about grounding and static precautions, so I couldn’t help but wonder if I should be using a “hack naked” shirt for this purpose.

Now Playing: Train from Play by The Nields

Posted by pjm at 11:19 AM | Comments (0)

October 8, 2004

Turn Gight

We are, around here, True Believers in the power of proofreaders. We proof everything, even if it has merely been breathed on between its last reading and press time. (Or, in my case, burn time.) So it’s still amusing to me to open my package for [Suitcase][1] 10 and see the band that reads:

Software CD Under Left Flap ↓ User Guide Under Gight Flap ↑

Now playing: Awake from Wholesale Meats And Fish by Letters To Cleo

Posted by pjm at 3:09 PM | Comments (0)

October 7, 2004

When audience size matters

When I write up big day-reports like yesterday’s, it doesn’t really matter to me how many people read it. When I note things like Johnny Kelley’s passing, I’m mainly writing to the people I know are reading and wouldn’t get the news elsewhere; incidental people are just gravy.

But sometimes I want to post something like, “spamd wants to work nine to five like everyone else, even though it’s software. It crashes every time I leave the building. How do I go about troubleshooting it?” And I wish the odds were better that someone reading would know the answer.

Now playing: You’re Aging Well from The Honesty Room by Dar Williams

Posted by pjm at 2:57 PM | Comments (3)

October 5, 2004

man Mac

For Mac users: via TidBITS, a package called ManOpen, which lets you read unix manual pages in a regular Macintosh application (with helpful things like scrolling) rather than on the Terminal screen. It comes with a command line app called openman which lets you spawn a ManOpen window from the Terminal command line.

For the unix-averse (or uninitiated): man is short for “manual” and it’s the command for getting just that: a manual for a particular program. Of course, the abbreviation leads to all kinds of command-line fun, like the recursive man man, the frustrated (and frustrating) man bash, and the absolutely futile man woman:

$ man woman
No manual entry for woman

Now playing: Getting Away With It (All Messed Up) from Pleased to Meet You by James

Posted by pjm at 12:09 PM | Comments (2)

September 30, 2004


If you’ve been reading this for a while, you know I’m a (relatively) vocal advocate of the Mozilla Foundation and, in particular, its browsers Firefox and Camino.

You may also have noticed that I’m a booster of strong encryption, and the PGP/GPG model in particular. I haven’t made as much noise about it here, because while MacGPG and GPGMail make it very easy to use GPG with the program on a Macintosh, I’ve had less luck finding easy-to-use encryption software for Windows without crippling license restrictions. (I was looking for an app to use at work, so the freeware PGP was out.) I didn’t want to nag everyone to use encryption and then have the Windows users hate me when the process was, well, less than simple.

Today I got a response to one of my grad-school networking messages which was encrypted with Enigmail, which turns out to be an extension for the email client of Netscape/Mozilla and for Mozilla’s excellent standalone mail client Thunderbird (the jargon is “MUA”, or Mail User Agent) which provides GPG functions.

By now you can guess where this is headed, right?


With that out of the way, though, I have to ask: when will we see a webmail service that supports encryption? Never is my bet, for two reasons; one is practical and one is paranoid. First practical: in order to support encryption directly, the service would need a copy of the user’s private key, and (unless they were using a secure connection) the message plaintext, the key passphrase, or both would be transmitted in the clear over the ‘net. Both of those are security risks. Second, the paranoid: isn’t one of the big selling points of GMail (aside from the peer pressure aspect) that it indexes your mail, both to provide a search service to you and to target their revenue-producing advertisements? Widespread use of strong encryption breaks that. I can’t imagine Google encouraging that.

Will we need to remind Google not to be evil?

(I should add, for those wondering: my public key is here.)

Now playing: Brooklyn from The Fine Art Of Self Destruction by Jesse Malin

Posted by pjm at 10:46 AM | Comments (5)

September 27, 2004

Hard restart

One of my long-term projects has been documenting my work, here at work. Today I’ve started working through all the minutia surrounding the administration of the web server. In my notes from the original setup, I was reminded of a troubleshooting sledgehammer at my disposal. I try to connect via HTTP to a particular numerical IP address, and after providing a login name and password, I have access to a web interface which controls the plug on the power supply our server is jacked in to. I can do a “hard” restart by, essentially, simulating a blackout.

One hopes that we never have to do that, and to date, we never have. Which might explain why I have the login name, but have lost the password. My notes say, “admin password,” suggesting I may have used a password I was currently using for another account, but like a good little geek I’ve changed all my passwords in the last year, and forgotten the old ones. I hope I can talk the data center administrators into resetting the password—but then, from a security point of view, maybe I hope I can’t.

Now playing: Comedown from Magician Among The Spirits by The Church

Posted by pjm at 5:04 PM | Comments (4)

September 24, 2004

A tale of two servers

It was the best of web apps, it was the worst of web apps…

No, never mind, I don’t have the mental RAM right now to do a complete Dickens spoof. Let’s just set the scene by saying that there was discussion with our co-publisher on our biggest title about doing an “e-book” version along the lines of this site. (In this case, “e-book” means “website with the same content;” we’re using it as shorthand for the more descriptive “interactive textbook.”)

Since this would be a significant site, relied upon by students across several time zones, minimizing downtime would be very important. So it was suggested that perhaps our co-publishers—being a New York publishing conglomerate with more than one employee in their IT department and, presumably, at least one of them within pager reach around the clock—should host the site.

Now, the demo site and the original “interactive textbook” are both running on our web server. Our web server is a bare-bones single-processor x86 box running Red Hat Linux, Apache, MySQL and PHP, the classic “LAMP” setup; our sole concession to high availability has been using software RAID to mirror two hard disks. Granted, the load on this box isn’t very high, but the server screams. It’s seriously fast. (And it’s been up for over a year.)

Their webserver, on the other hand, is some flavor of Windows, with IIS and MS-SQL. Every application on their webserver, bar none, is dog-slow. I could type authentication responses faster than their HTTP daemon. I don’t know why this is, since I presume they’ve got some hard-working geeks in there keeping it in tip-top shape, but that’s what it looks like.

I’m not a fan of deliberately putting a very interactive application on the slower of the available servers, but there’s more oversight on their boxes, so I diplomatically muted my suggestions that they learn LAMP and install a, uh, “high value” box like ours. And our developer was resigning himself to rewriting his PHP functions to work with MS-SQL rather than MySQL.

Earlier this week, they decided that perhaps it would be better if we hosted it. And they asked if we could do an “interactive textbook” for one of their other books, and if they could use our “e-commerce module” to sell it. I should point out here that our “e-commerce module” was largely developed in-house and involves at least one wetware step.

That’s not victory. That’s a rout. I did, however, refrain from dancing around my office chanting, “I told you so,” when I got the news.

Now playing: This Is It from Rock N Roll by Ryan Adams

Posted by pjm at 11:05 AM | Comments (1)

September 23, 2004

Standard prize

Version: GnuPG v1.2.4 (Darwin)


You might need this, and probably some variant of this.

Now playing: Feel Flows from Up To Our Hips by The Charlatans

Posted by pjm at 3:42 PM | Comments (0)

September 22, 2004

I'm a bad parent

[admin@raven admin]$ uptime
21:41:04 up 371 days, 3:13, 1 user, load average: 0.00, 0.00, 0.00

I missed my server’s birthday. I didn’t even make cupcakes.

Posted by pjm at 9:49 PM | Comments (0)

Foundation work

Two days later, I’m still working on that Mac OS 10.3 upgrade. Once I’d cleared the decks work-wise (and I’m a little surprised that that actually happened,) I discovered I had some work to do if I wanted to get this done “right.”

“Right,” in this case, means backing up my data and doing a clean install on a freshly-formatted disk. To make that easier, I had to clean out my working files and archive as much as possible to CD- and DVD-ROMs. After that, I had to address backup media: the external HDD I planned to use was stuffed with about 40 GB of working files from last year’s DVD. I pruned those, compressed them into two archives, and filled two more DVD-ROMs. Now the backup has begun. With any luck I will be able to start the system upgrade before I need to head home and feed the hungry tiger.

Now playing: Custer’s Blues from Too Close To Heaven • The Unreleased Fisherman’s Blues Sessions by The Waterboys

Posted by pjm at 3:52 PM | Comments (0)

September 20, 2004

Sharper tools

There is a box on my desk which contains the CDs for Mac OS 10.3 (also known as “Panther.”) I would think this machine would be the last to upgrade (I’m already on 10.3 at home) but many of our machines in Production are still on 9.1.

So once I get my current batch of tasks cleared away, I’ll be doing a system upgrade. There’s a new version of Quark here, too. Since each newer version of the Mac OS since 10.1 has run faster on the same hardware, this should let me squeeze enough performance from this box to last until… well, until I leave, I suppose.

Sobering thought.

Now playing: Princely Ghetto from Cherry Marmalade by Kay Hanley

Posted by pjm at 4:05 PM | Comments (0)

September 15, 2004

New every day

I’m not the only one here who is (sometimes) in a playground of strange and interesting things. Yesterday our photo researcher was in the conference room with a wineglass full of very diluted iced tea. It turns out he was taking a picture of a coaster from these folks.

I have to assume this is for some sort of pharmacology chapter, maybe in this book? (We have an older book with the wonderfully euphonic title, Neuropsychopharmacology.)

Ever since we got a digital camera which takes print-quality photos, we’ve had increasing numbers of in-house shots in the books. This saves money, but reduces the stock-photography serendipity, like the time I found a shot of a former college classmate distributing condoms in our sexuality text.

Now playing: Walking The Ghost from James by James

Posted by pjm at 3:25 PM | Comments (0)

September 14, 2004

Misconceptions misconception

Kasia wanted to clear some things up about geeks. In most cases I agree (Star Trek: I don’t get it; T-shirts: all mine are from races) but I would like to correct one of her misconceptions.

  • Geeks can fix things.

Hahahahahahahahahahahahahahaha — that’s all I’m going to say on the issue.

Well, yes. Geeks can fix things. Like just tonight, when A.’s WinXP Home machine wouldn’t go online. It does now, and it would not have happened without a geek, because Bog knows that was a troubling, obscure, and downright twisted fix.

Here’s what the non-geek would’ve had to figure out, once they’d cleared away all the dead wood (and after nearly three years, there’s plenty of that):

  • The network hardware was fine.
  • The network setup was fine.
  • However, the system wasn’t getting DHCP settings.
  • Because the DHCP Client service wasn’t launching.
  • Because it thought it had a dependency.

There’s the sticking point… so I googled the error, “Could not start the DHCP Client service on Local Computer”, and found a helpful page explaining that this sometimes happens when you uninstall Norton Anti-Virus (which I’d done, since the signatures hadn’t been updated in about two years, and replaced it with AVG.) A “quick” registry edit (as if any registry edit is ever “quick”, and why should there be such a godawful complicated train wreck as a “registry” that needs such a Rube Goldbergian editor?) and we’re online quite nicely, thanks.

I fix other things, too, when they’re enough of a problem that I care to.

Now playing: Shiver from Parachutes by Coldplay

Posted by pjm at 10:31 PM | Comments (4)

September 13, 2004

A few more things to be careful about

…but only for those of us with servers or other boxen that are running sshd.

Kasia has posted a good checklist for tightening up the ssh service in the face of the increasingly-common brute-force password scans (like the one we had a few weeks ago.) Read down into the comments, because they have some other ideas; in particular, there’s some discussion about whether password authentication should be enabled at all (with preference given to key authentication) or if it is a necessary evil.

I’m going through my servers this morning and making sure I can check all the boxes. I’ve taken many of these steps already, particularly on our webserver, which I am most paranoid about, but I’m not sure I’ve taken all the same steps on all the servers… time to do that now. If nothing else, I definitely have more to learn about ssh and its daemon.

Now playing: Fred Jones Part 2 from Ben Folds Live by Ben Folds

Posted by pjm at 11:25 AM | Comments (0)

September 10, 2004

Zombies, worms, viruses and you

USA Today ran a really good series this Wednesday and Thursday in the Tech section about how ordinary users’ systems are being cracked, compromised and exploited, and what they can (or can’t) do about it. Start with “Are hackers using your PC to spew spam and steal?” and follow the “related links” to the right for the rest of the series.

Two interesting points about this series: First, while the authors advocate buying (relatively) anti-virus software as usual, and remind users that they need to keep their definitions up to date, they admit there are free firewall and spyware-scanning packages. This seems to be rare in the tech press; there’s a subtext that “free == worthless” which is only gradually eroding. (If only they’d mentioned the free AVG anti-virus, they’d score a 10 here.)

Second, the second large part of the series, “Costs, conflicts, inconvenience confound counterattacks,” hits beyond users, suggesting that ISPs and software manufacturers need to step up to the plate as well. They note with approval AOL and Earthlink’s policies of denying access to users whose machines are determined to be malware sources; I certainly wish some ISPs would pay attention when I tell them how I’m regularly getting worms relayed by the same systems in their networks. The article also makes a point I’ve made here before, that subscriptions to virus definition files are a cash cow for anti-virus vendors even though a more effective approach would watch for suspicious behavior and block that instead of waiting for each virus to be specifically identified.

I want to see the costs of securing Windows drive the price up to where Windows boxen are at price parity with Macs, and see what happens to platform market share. That would be fun to watch. Monoculture leads to bad soil.

Now playing: Always Dancing, Never Getting Tired from Universal Hall by The Waterboys

Posted by pjm at 2:13 PM | Comments (0)

Yet another referrer-spam access file tweak

Are you sick of this yet?

If you don’t know what I’m doing here, rather than re-explain it all, I suggest you read where I started and yesterday’s changes. If anybody is finding this vaguely interesting or morbidly amusing, I could tie it all up in a nice summary someday when I’m otherwise unoccupied or want to postpone something tedious.

Suffice it to say that, for one, examination of my server logs suggested that mod_rewrite was not always playing well with my site (reaching the max number of redirects and timing out, which suggests a loop) and julie was still not able to post comments, despite her tenaciousness in the face of continuing rejection.

So, I rewrote Kasia’s comment-spam hack with mod_access (which, as it happens, makes liberal use of mod_setenvif as well.) Here’s what I wound up with:

# Comment spam rules
SetEnvIfNoCase Request_Method POST spam_com
SetEnvIfNoCase Request_URI ".mt-tb\.cgi" !spam_com
SetEnvIfNoCase Request_URI ".mt-xmlrpc\.cgi" !spam_com
SetEnvIfNoCase Referer ".*flashesofpanic\.com.*" !spam_com

# Referral spam blacklist
SetEnvIfNoCase Referer .*\.locators\.com.* spam_ref
SetEnvIfNoCase Referer .*\.popex\.com.* spam_ref

# Access section
Order Deny,Allow
Deny from env=spam_ref
Deny from env=spam_com

The first section assumes that all POST requests are attempts at comment spam, and sets the environment variable spam_com appropriately. We then make three exceptions: for mt-tb.cgi, which allows trackbacks, for mt-xmlrpc.cgi, which allows ecto, and for requests referred from this site, which should allow comments submitted through forms on the site (i.e. legitimate comments.) Each of those un-set the spam_com variable if they match.

The next section sets a similar variable, spam_ref, if the “Referer” (sic) header matches certain known referrer-spam domains. So far, we’ve only used mod_setenvif.

Then, the third section actually issues the mod_access directives: if either of these variables were set in the first two sections, the request is denied and a 403 “Forbidden” error is returned instead.

I have reason to believe this is working, but when I tested it last night, the comment submission timed out without sending anything back to the browser. The comment was accepted, though, and I’ve had one or two comments since then. If you’re (still) having trouble commenting, please let me know and I’ll try to suss it out. I haven’t taken the time to spoof a request that would trip the tests yet, so my basis for saying, “it’s working,” is just that comment spam and referrer spam are way down here lately.

A weakness to this approach is that it relies on a blacklist approach for the referrer spam blocking, and as this becomes more widespread, administering that blacklist is rapidly going to become impractical (consider, for example, having to blacklist everyone who spends fifty bucks on Reffy—or nothing for Reef.) The comment-spam block is a wholesale lockdown which then whitelists certain conditions; how can we build a similar algorithm for referer values?

Now playing: Too Close To Heaven from Too Close To Heaven • The Unreleased Fisherman’s Blues Sessions by The Waterboys

Posted by pjm at 1:02 PM | Comments (0)

September 9, 2004

Another referrer-spam strategy

Since julie (or should I say, “Franklin”) is having trouble posting comments, despite not being a comment-spammer, I figured it was time to try some other experiments with my comment-spam and referrer-spam control file.

Using mod_access instead of mod_rewrite, we can set a server environment variable when the referer matches one of our badly-behaved folks. Then we can deny access (returning a 403 “Forbidden” error, rather than our custom error page or even a 404 “Not Found” error) if that variable is set. To add more sites, we add more lines. We’d remove the last two lines from the file I posted before, and add this:

SetEnvIf Referer .*\.locators\.com.* spam_ref
SetEnvIf Referer .*\.popex\.com.* spam_ref
Order Deny,Allow
Deny from env=spam_ref

The first two lines define the environment variable “spam_ref” if the “Referer” value matches the specified pattern; in each line, that pattern is a site which has been a referer-spam problem site for me. The third line just specifies the order in which we’re going to control access (check for denials first, then allow access) and the final line denies access if the environment variable was set in the first two lines.

I’ve done something similar to control access to a website we manage where our partners manage authentication and access control on their servers; I accept referrals from their domain and internal referrals, and refuse all others.

I don’t know if this will work any better than the mod_rewrite strategy (heck, I don’t know if this will work,) but it never hurts to have More Than One Way To Do It.

Now playing: Clean Up Kid from Songs From The Other Side by The Charlatans

Posted by pjm at 3:43 PM | Comments (0)

September 7, 2004


Ben Hammersley continues to work on the real digital divide, pointing out how the discourse about computer security has shifted from “secure your machine to protect yourself” to “secure your machine to protect everyone else.”

We’ve done a decent job in reducing spyware scanning and anti-virus software to a relatively user-friendly level. The sticking point right now is firewalls, and there’s a lot of talk about them because of the starring role the firewall plays in XP SP2. Any system with a direct connection to the internet should be behind some sort of firewall, but millions are jacked directly in to cable modem or DSL connections by people who don’t know why a firewall is important.

The problem is that firewalls are complicated concepts, and in my mind, you really need to grasp a few non-trivial IP networking concepts (addressing, ports, and protocols) before you can get a good handle on what your firewall is doing. And knowing what the firewall is doing is (again, the way I see it) critical to configuring it well. You need to know what you want it to allow, and that’s not a one-size-fits-all answer; it varies slightly for every application and therefore for every host. You wouldn’t believe how long it took me to configure a working firewall on our gateway server.

Now, something about me wants to get across those core concepts first, so anything I wrote about firewalls would be about the length of a book chapter. But the average user doesn’t care. They just want it to work, and then forget about it; they don’t want all the warnings from ZoneAlarm when they fire up AIM. If they installed it to begin with, they disable it.

I wonder if a firewall can be created which can be used by someone who knows little or nothing about networks. Maybe it does a short interview at start-up time (“Do you use IM? How about file sharing?”) that is low jargon (one of the classic battles of the network admin is integrating a firewall with a VPN, which isn’t made any more clear if you know that VPN stands for Virtual Private Network.) Maybe this hypothetical firewall could secure your grandmother’s Windows box without either of you needing to know the difference between UDP and TCP. (Leaving us only with the question of why you would inflict Windows on your grandmother.) Maybe it would both protect her from port-scanning script-kiddies and protect the rest of us from the malware-spewing spyware she downloaded by accident. (Another catch: a firewall won’t protect you against something that comes in by “normal” channels, like a requested website, or an email message, and nothing will protect you from social engineering.)

There’s some literature and documentation out there; there’s even Firewalls for Dummies. I don’t know if it’s effective, since I went the hard way myself (man pages, and the like) but before even the Dummies titles can be useful, the user has to know they need a firewall and that they need to configure it well. They need to be convinced to spend some time on it. That’s a bit of evangelism I’m definitely not well equipped for.

I don’t know. I learned this stuff, now I know it, and I can’t un-know it in order to put myself in another’s shoes. Or at their keyboard.

Now playing: We Never Change from Parachutes by Coldplay

Posted by pjm at 3:01 PM | Comments (0)

September 3, 2004

Badly rasterized

One of the things I do as part of my job is take masses (literally, thousands) of EPS files from Illustrator, where they were used for the printing of textbooks, and produce JPEG files which will then be used in PowerPoint presentations or course websites or whatever.

EPS is a complex and powerful format (essentially, Encapsulated PostScript) which produces immense files and can’t be used by web browsers or presentation software. To make the EPS files into a more usable format, I need to “rasterize” them in Photoshop, a process which is not unlike printing a photo from a transparency, but is probably more like scanning a transparency. In order to handle the volume, I’ve created a series of “droplet” scripts in Photoshop and ImageReady which I shuffle the files through; otherwise I would spend months on these files, rather than a few days. I can do a small book in a day, something which was (apparently) once inconceivable. I don’t gripe about them, either; the load they place on my machine (if not on me) is a handy lever for justifying the purchase of shiny new hardware.

The perennial snag is fonts. In EPS, text is editable and carries font information for display. The font file needs to be present for the file to rasterize properly, and since they were created on another machine, there are always font issues. Today’s is particularly difficult; I’ve spent all afternoon on it so far, with no progress.

The good news is that once I solve the problem, it will fix approximately three-quarters of the files I was asked to re-do. If I solve it.

Now playing: The Blonde Waltz from Us And Us Only by The Charlatans

Posted by pjm at 4:21 PM | Comments (1)

It's been confirmed by outside observers

Ben Hammersley has me pegged:

…you’re a rare beast on the internet. Put it this way, if you know what SSH means, you’re technically a freak. On average. Sorry.

Actually, Ben’s larger point, about the ability to filter out signal from noise on the internet, echoes one made by Neal Stephenson about the separation of people into technical Morlocks and Eloi, but Ben goes one further and suggests that it’s the responsibility of us Morlocks to bring the Eloi up to speed, “lest they drag everyone back with them.”

It’s a generous sentiment, though difficult to put in play; as Stephenson points out, those who aren’t freaks don’t really want to learn. The only way to bring them up is to make filtering easier: make it easy to block pop-ups, stop the spread of viruses, and can spam.

To date, most efforts in that direction have been relatively ineffective; it’s easy to block pop-ups with Mozilla, for instance, but few enough people want to haul their bookmarks/passwords/cookies over to Firefox even though the IE they’re driving is unsafe at any speed. Filtering spam is still done gingerly for fear of incorrectly labeling good mail as spam. Spam filtering and virus protection is something that has to strive for 100% effectiveness. Like antibiotics, there is the danger of surviving microbes evolving into super-parasites.

So, essentially, we need to get it right, or not bother; and, excepting a few valiant souls, most people are in the “not bother” camp.

Now playing: Somebody To Shove from Grave Dancers Union by Soul Asylum

Posted by pjm at 10:41 AM | Comments (1)

September 2, 2004

Too much rope

It turns out that Kasia’s comment spam hack with mod_rewrite also blocks a desktop weblog client (like ecto) from posting. To make another exception, add this line:

RewriteCond %{REQUEST_URI} !.mt-xmlrpc.cgi*

I’d put this in a comment, but she’s turning off comments on older posts, something I should set up someday as well. Most of my spam seems to be targeted at old stuff. (On the other hand, just an hour ago I had a legitimate comment on a post from early July.)

Didn’t I say I could cause trouble for myself with this tool, though?

Now playing: King Of The Dollar from School Of Fish by School Of Fish

Posted by pjm at 4:00 PM | Comments (0)

Sending you somewhere else

I’m dangerous today. I’ve started using mod_rewrite with some success, which means I now have enough rope to hang my web server. Or try Kasia’s comment spam hack.

(Oh, OK: mod_rewrite is a module for the Apache web server which allows the webmaster to rewrite URLs on the fly. So, for instance, if you were a professor who still had a lecture online linking the obsolete URL for one of our category pages, well… try it. And I didn’t have to create a whole hierarchy of pages containing redirects; it’s all in the server configuration file.)

I should really be serving 404s in most of these cases, but let’s face it, nobody checks to see if their links are bad nowadays.

Now playing: A Murder of One from August & Everything After by Counting Crows

Posted by pjm at 9:48 AM | Comments (1)

September 1, 2004


The reason I post so much about Firefox is that I assume that most people reading are among the 90% of the world that uses Windows, where Firefox is your best choice. But as I’ve mentioned, I’m primarily a Macintosh user (how about those sweet new iMacs, huh?), and in the browser market, for once, that means more options. Since I hopped to OS X I’ve moved from IE to Camino 0.7 to Safari as my primary browser. (Doing web development, I need to keep them all around for testing.)

Last week I switched to Firefox 0.9.3 as my primary browser, and it has been a rocky change. Page rendering is just fine; any speed differences are too small for me to notice. But there are still some usability pros and cons.


  • I can go directly to the Runner’s World website, which is still frustratingly difficult in Safari, even though I’ve been telling them about the problem since April.
  • Site icons work across the board; they’re patchy in Safari.
  • FF has a JavaScript console which makes debugging sketchy JS a lot easier.
  • I can choose my search engine from the search window in the toolbar.


  • Links from other applications open as new windows, not new tabs. Camino lets me open them in new tabs, as does Safari, and I vastly prefer this behavior; I open a lot of links from my aggregator or my email, so Firefox makes it hard for me to keep the number of open windows under control.
  • There doesn’t seem to be a keyboard shortcut for “go to home page” as there is in Camino and Safari.
  • There’s something weird about scrolling. If I page down, the whole thing flickers, and sometimes I see a horizontal section of page about an inch high repeated down the whole window before it snaps into focus.
  • There’s no go-away icon on the tabs, so I can’t click once on a tab to close it. (I know, I could use splat-W to close the current tab, but I’m pretty thoroughly trained to consider that “Close the window and all tabs in it.”)

These are pretty tame, all things considered. I could (and probably should) page through Bugzilla and figure out where to send this feedback directly to the project, but for the most part, Bugzilla is an intimidating maze to me.

In the meantime, I wonder if I should switch over (back?) to Camino (now 0.8) as my primary browser, since it shares none of these problems with Mozilla, and all of the features (except the JavaScript console.)

Update (9/3): Jeremy posted a similar list of annoyances.

Now playing: Alleluia from The Honesty Room by Dar Williams

Posted by pjm at 11:49 AM | Comments (4)

August 31, 2004

Why I don't have a gmail address

I’ve been thinking about this since I had two nice people offer me Gmail invites several months ago. (It’s interesting, by the way, that we’re using the verb, invite, as a noun for these things. It’s as though they’re actual actions, not objects.) Julie’s recent review gives me a good hook to hang it on, especially now that the height of the frenzy appears to have passed.

The best reason why I don’t have a Gmail account is simply that I can’t figure out why I’d want one. The hosting plan for this site includes more inboxes than I need, on this and another domain; I have POP, IMAP and webmail access to them. With a POP or IMAP client of my choice, I can slice and dice those messages in any way the MUA (Mail User Agent, a TLA for a POP or IMAP client) can handle them, and I can have mailboxes up to the capacity of my hard disk drive, which is well in excess of Gmail’s vaunted gigabyte. My hosting company is a bit more conservative with their spam blocking than I would like, but that’s because they’re doing it for customers, not employees.

I’m not disturbed by the privacy thing. My mail is already filtered for spam, and webmail in any form (in fact, SMTP, period) is highly insecure to begin with; if I really wanted privacy, I’d insist on all my mail being encrypted. I do find it a bit unsettling that my outbound mail to Gmail users is being indexed, but the same encryption point stands. (Does Gmail support PGP, by the way? I’m wondering if a free webmail ever will.)

In short, I can’t see that Gmail has anything to offer me. But still, I’ve felt the pull.

Google’s marketing has been brilliant: when the fad was in full swing (May and June?) everybody wanted a Gmail account, because nobody had one. Having a Gmail account was the mark of the cool kids. (Try Googling gmail "cool kids"; you get a lot of hits.) The bottom fell out of the market eventually, of course, but for a few weeks there was almost a scary sense of haves and have-nots divided by an email domain, with the haves dispensing status in the form of an invitation email.

When it was in full swing, yes, I did want a gmail account. Not for any practical reason whatever, not even to stake out the username I’d already used with Hotmail and Yahoo. I wanted to be invited. Whether I used the account was irrelevant. I wanted to be one of the cool kids.

Once I figured that out, I saw it wouldn’t really be any use at all, for the practical reasons outlined above. So when people did ask me, I thanked them as politely as I possibly could, and declined, because the fact that they asked was enough.

I don’t want to imply that gmail users are childish style-chasers. I can think of dozens of practical reasons why someone who isn’t me (someone relying on hotmail or yahoo for non-work email, for example) would want a gmail account, and I think the social weirdness surrounding the gmail invites was the fault of Google, not of those with the invitations. (I actually considered getting an account just so I could spread invitations.) But wasn’t it a little primitive there, for a while?

Now playing: I Am Superman from Life’s Rich Pageant by R.E.M.

Posted by pjm at 3:54 PM | Comments (1)

August 30, 2004


There was an article in the NYT over the weekend about how the next version of Windows, widely known by its code-name, “Longhorn,” is now projected for a 2006 release.

This is a big, fat softball gently lobbed over the plate, so let’s just pretend I smacked it over the right-field wall (I slice) to spare you the reading and me the writing.

The part that struck me as more interesting is what I really don’t know about Longhorn. It seems like, as an IT geek, I should be insatiably curious about what Microsoft is going to change in the next version of the world’s most widely used operating system. It’s big enough that Microsoft’s oscillations on deadlines and projected features make the New York Times, after all. Even professionally, I should probably acquaint myself with the bare outlines, since my current trajectory suggests I’ll be dropping this steer on someone else’s desk, and possibly even my own, within three years.

And yet I am largely disinterested. That might be because Windows is not my primary platform; I do know at least a few of the features Apple has planned for the next revision of their system and some of the feature differences between the last three point releases.

For one thing, I suspect I should take this as a sign that operating system research shouldn’t be a concentration of mine. But I also suspect that might be a misconception, and none of this has anything whatever to do with operating systems as a CS researcher understands them; more likely, it’s about user interfaces, marketing, and the sound and fury needed to maintain the illusion that an operating system is something worth spending money on.

I spent a great deal of the last weekend in the company of a small mob of high school girls. (This is like being struck by lightning more than once: are you blessed, or cursed?) While we were watching the marathon on TV, I overheard a conversation about advertising. I think they were discussing a women’s magazine, because I heard, “Notice how they’re all advertising the same thing? Lots of cars, lots of clothes, lots of makeup. They need to advertise them because they’re all the same.”

Does Windows fit that evaluation? I’m thinking about it now, and it looks pretty close.

Now playing: Starman by Dar Williams

Posted by pjm at 12:15 PM | Comments (0)

August 26, 2004

Shoveling manure

I’d really rather not discuss Microsoft, Windows, or the worm which occupied my entire working day as I cleared it off several different systems (roughly, one department.)

I’d rather discuss the worm author, and the fantasies I had about meeting him. But since they involved fingers, toes, a sledgehammer and a splitting maul, perhaps I’d best not share here.

Now playing: Tomorrow from Demolition by Ryan Adams

Posted by pjm at 8:29 PM | Comments (0)

August 25, 2004


Last year, I was the Clerk of Course at the Amherst Invitational. (For some reason, I always want to tack, “of course, of course” on the end of that job title.) For two years I scored the meet manually (using large sheets of oaktag and a pocket calculator) near the finish line, a process so clumsy and error-prone that both years I ended the day lobbying for a computer.

We scored six races ranging from sixty to a hundred and sixty athletes, and while cross-country scoring is relatively simple on its face (you sum the places of the first five runners from each team to get team score, and low score wins; a “perfect” race, sweeping the top five spots, scores fifteen,) things get very complicated very fast when you put it in practice. For example, imagine a team without enough runners to score (fewer than five.) They should be removed from the finish order before scoring everyone else (but the athletes should be listed in the results, of course.) Likewise, while runners six and seven count as “displacement” (their places don’t contribute to the team score, but they can increase other teams’ scores by beating other scoring runners, and ties should properly be broken by the sixth runner’s place,) a JV race with more than seven runners per team can be a nightmare of non-scored runners when you’re scoring manually.

So last year, I got a promotion and a hardware upgrade. My position involved glomming together a web interface to allow coaches to enter their teams online, then dumping that data into a file which I could then import into the meet management software. Then, on race day, I ran the meet management software near a power socket inside the gym, rather than being outside watching the races like a good fan. I used one of our geriatric laptops from work, and we wound up doing quite well, all in all.

This year we’re skipping the web entry step (which required too much hand-holding for the other coaches last year,) and doing the data entry directly into the meet manager ourselves. The hitch this year is that I’ve got a prior commitment that weekend, so someone else will be doing the scoring this year.

Last night I got all the pieces together to walk the coach through the process tonight. He’s a Mac person, so he’s “borrowed” a Windows box from work to score the meet. I think he’s recruiting someone else to do the scoring, so I may have to do this again. This is a good thing; I don’t want to be the SPOF of meet scoring.

Meet scoring is essentially a database problem, and most of the many packages out there are just database applications bundled with the appropriate forms and reports. The data structures are interesting and mid-range complex, but nothing that couldn’t be done as a semester-end project in any database management course. (Before you think it’s “simple” based on what I’ve described above, consider a track meet, or even a swim meet.) In fact, sometimes I wonder why nobody has put together an open-source version.

(The reason, probably, is that this sort of application cries out for the sort of “small pieces loosely joined” system which is easily cobbled together from the utilities installed by default on a unix or Linux system, but needs something painfully monolithic on a Windows system, and most hackers would rather “roll their own” in *nix.)

(Another reason might be the kind of peripherals you need to support; there are plenty of data-entry gizmos like bar-code readers or finish-line cameras to plug in, plus touch pads for swimmers. We won’t even start with the Lynx folks, but don’t think I haven’t looked with interest at their job listings before.)

Still, I’m going to have an interesting time of it trying to explain this without getting in to the broader concepts of database entities, constraints, etc. I hope I can communicate more than just the step-by-step, “First you do this, then you do that, and don’t worry about why.”

Now playing: Ride from Dandys Rule OK by The Dandy Warhols

Posted by pjm at 11:31 AM | Comments (0)

Kicking comment spam where it hurts

Ian Hicks has been seeing “odd” spam coming in to technical discussion lists at the W3C (World Wide Web Consortium, for those not up on their TLAs.) The message is pretty curious; it’s actually almost on-topic for the list, but when you read it closely, it looks like something Eliza would generate from the message it replies to. And, then there’s the porn links spamvertized at the bottom of the message. Hmmm, Google gaming, perhaps? The publicly-archived-mailing-list version of comment spam? Almost certainly.

What’s interesting about Hixie noticing this is that he’s actually in a position to do something about it. Thinking in terms of page markup…

I’m thinking that HTML should have an element that basically says “content within this section may contain links from external sources; just because they are here does not mean we are endorsing them” which Google could then use to block Google rank whoring. I know a bunch of people being affected by Web log spam would jump at that chance to use this element if it was put into a spec.

It’s an interesting thought, and definitely a tag you’d see wrapping the comments section of nearly every weblog on earth. Still, when I start imagining the consequences, I’m not as excited. There’s plenty of disagreement within computer science about whether languages (programming, scripting, or markup) should be simple and restrictive (they shouldn’t let their users screw up) or powerful and dangerous (they can do wonderful things, but you’ve got plenty of rope to hang yourself.) This tag definitely falls under “powerful and dangerous.”

For one thing, it would need to be used to be effective, and look how many websites are still being laid out in tables rather than CSS. For another, it would really need to be used judiciously. I’ve drawn a lot of benefit from information posted to just the sort of web archive which might get wrapped in that tag. I suppose if the text of the messages is still indexed, they’d still be reachable, but it would make it notably more difficult to troubleshoot some problems. Really judicious use of the tag would be required.

On the other hand, if someone steps in immediately to “take the bullet” and make these comments and list archives an unattractive target for link spammers, perhaps they won’t get clogged with dross in the first place.

I suppose it’s the comment spammers mucking up web archives for us, just the way the email spammers are making our mail unusable, and the real problem are the unscrupulous gaming the system to the detriment of all. That’s a damn shame, of course. But I’d be really cautious about implementing a tool to hasten the same sort of damage the link spammers are steering us toward anyway.

Now playing: Don’t Bang The Drum from This Is The Sea by The Waterboys

Posted by pjm at 8:33 AM | Comments (0)

August 20, 2004

Vacation message considered harmful

…and I don’t mean in its jealousy-inspiring aspects.

One of our managers is going to be away next week. Being the forward-thinking type, he set up and started his vacation message last night. (A “vacation message,” if you’re not familiar with it, is an automatic reply sent to any incoming email which says something like, “I’m going to be away from my email having fun for a while, and that’s more important than whatever you’re writing about. If you need immediate action, it isn’t coming from me; try someone else.”) If the program is smart, it will only send one of these responses to any email address in any span of time (say, a week) to avoid “ringing mail” (infinite loops) or simply annoying someone to death.

This morning he opened his inbox to a blizzard of “Undeliverable message” notifications.

To figure out why, think about the makeup of your incoming mail nowadays. It’s a fair guess that for many people on our system between 50% and 90% of incoming email messages are spam. Spammers are not known for putting correct return addresses on their email messages, but that’s what his vacation message program was using to direct its little missives. What spammers tend to do is either invent email addresses which look valid (like or spoof real addresses which belong to someone else.

Since this particular manager has relatively common first and last names (not quite “Bob Smith,” but close) he gets a pretty significant spam load. And for every message, his vacation reply was either blitzing a reply out to someone who hadn’t sent him mail, or trying to send to a non-existent address, generating an undeliverable in his mailbox.

Beyond that, in the hypothetical case of a spammer actually supplying a valid return address, he’s just confirmed that his address is functioning and has a real person (eventually) reading it, thereby inviting still more spam.

He and I discussed this briefly this morning, and he decided that there just wasn’t any benefit to it anymore. The spammers have wrecked whatever positive aspects the function once had.

Still, thousands of office drones still think it’s a pretty cool thing. You don’t have to be on a list-serve discussion list for long before someone goes on vacation and their program starts replying to every post on the list. You can’t get mad at the robot for being too dim to recognize a listserv (OK, you can, but it won’t do any good,) but you can build up a decent head of steam at the person who didn’t think about all their incoming mail before telling a program to reply to it.

An aside about the title: “Considered harmful” is geek-speak for “It might have seemed like a good idea at the time, but quit already, you idiots!” It started with a 1968 paper from the great computer scientist Edsger W. Dijkstra, which sparked so much controversy with its boldly assertive title that it spawned thousands of imitators. (Google “considered harmful” for more.) In fact, now they’re even saying that the phrase itself is considered harmful.

Now playing: Even Here We Are from 14 Songs by Paul Westerberg

Posted by pjm at 9:04 AM | Comments (0)

August 19, 2004

People unclear on the concept

Since Monday, it seems that MT-Blacklist has been refusing to allow one particular IP address (, if you’re curious) to comment. It has refused it two hundred nine times, all for the same rule. (For what it’s worth, it has invoked that rule 214 times in this period.)

This raises all kinds of questions. Whose machine is that bored? How long will it take them to figure out that they need to change the comment to get around the rule? Are they even paying attention? How many other sites are they hitting?

Judging from my IP research, this is one of those cases when blocking the IP is probably appropriate, but I’m a little bit curious to see how long they can keep it up before they get a clue.

Now playing: Commercial Rain from Life by Inspiral Carpets

Posted by pjm at 4:20 PM | Comments (1)

August 18, 2004

In case of emergency, break glass

Sometime after the sad server incident, one of my co-workers said something like, “What would we have done if you hadn’t been here?”

Leaving aside the obvious answer (“Well, you would have hired someone competent,”) I started thinking about what might have happened if I’d been on vacation, or hit by a PVTA bus while running, or run off to graduate school. And it occurred to me that I should probably do a better job of documenting all this stuff, because even if they did hire someone competent, I’d still need to explain everything I’d done, and (in some cases) why, so they could take care of it.

But documenting is something geeks are really pretty bad at. We like solving problems; explaining the solution is somewhat boring once the solution has been applied. So I’ve been trying to find fun ways to document stuff.

I ended up installing UseModWiki on our intranet server, because then I could be entertained somewhat by the process. And, in the process, I could allow others in the company to not only read the documentation, but highlight bits that were unclear or make changes if they needed to.

Next I need to make sure that all the information about troubleshooting the intranet server is available somewhere else, because what if the problem was that you couldn’t reach the documentation?

Now playing: Boxing from Ben Folds Five by Ben Folds Five

Posted by pjm at 10:07 AM | Comments (0)

August 16, 2004

Geek in the wild

I’m still working on finding all the caches within ten miles of the apartment. I’m down to four; one I tried and failed to find on Saturday, one is “temporarily disabled” until the owners have a chance to maintain it, and a third is a “webcam cache” where the webcam isn’t currently working.

I tagged another one yesterday because I felt like a real challenge. It was a “multi-cache” which involves finding a few micro-caches, each of which contain the coordinates to the next stage. This was a three-parter, but there was a hitch: the coordinates were encoded in a bar code. To get the coordinates for the next step, a cacher had to either have their own bar-code reader (a Cue Cat would do for anyone who still has/had one of those) or take the codes over to the nearby Leverett Village Co-op and have them scanned there. (The cache owner, in this case, works at the co-op, which is how he knew this would work.)

I took the third route: I did some web research on bar codes, figured out how to decode this particular format (and a few others along the way,) and did them by hand, on the fly. (Yeah, let’s get it over with now: “What a geek.” Moving on…) First, I knew the format of the codes; I didn’t have to check for all thirty-six possible characters which can be encoded in this format, just N, W, X, ., and ten digits. Also, since I knew the spread between the stages wasn’t going to be that great (maybe four square miles of area) once I’d decoded the first one, I really only needed to look at four characters of each subsequent one: the unit arc-minutes and the three decimal places. That simplified things tremendously.

Of course, all you need to do is goof once, and you’re a few hundred feet away in the wrong direction, and I goofed more than once. Fortunately, I was able to recognize when I’d screwed up, and recover.

And, in the end, it was pretty cool to be standing up near the top of Brushy Mountain, having walked hiked more than a mile from where I could reasonably leave the car, looking at a cellar hole with the owner’s name still on the sign in front. Judging from the size of the trees growing in the basement, the house had been gone forty or fifty years.

Curiously, I had more wildlife encounters on Saturday. I’ll post the pics if I have time.

Now playing: Little Wings from Five Stories by Kris Delmhorst

Posted by pjm at 9:49 AM | Comments (0)

August 15, 2004

Worth the effort

This is why I wrote this.

(Really staggering numbers of references, in fact. Nearly a quarter of Friday’s traffic.)

Now playing: The Dandy Warhols’ TV Theme Song from Dandys Rule OK by The Dandy Warhols

Posted by pjm at 11:08 AM | Comments (1)

August 12, 2004

Consumer research

Anyone here ever set up a wiki? How did you pick the software? It looks like there are dozens of packages.

Now playing: Corporal Brown from Pale by Toad The Wet Sprocket

Posted by pjm at 2:59 PM | Comments (4)

August 11, 2004


I started out thinking, “Wow, that was an amazingly silly piece of spam. Can you believe how surreal spam is getting nowadays?”

I thought about what a shame it would be if we never got any more spam, so we couldn’t get a regular laugh about how hapless internet marketers trying to make a quick buck go to criminal lengths to deliver entertaining crap to our inboxes several thousand times a day, and how absurd the stuff is.

Then I realized that I think that nearly once a day now, and even the silly and absurd ones don’t even get an audible laugh anymore. (Well, not from me, anyway.)

This process took about five seconds.

I think that means I’ve achieved post-spam thinking.

So why am I still getting spam, now that I’m post-spam? Besides that our filters aren’t perfect, I mean.

Now playing: Maya from Forget Yourself by The Church

Posted by pjm at 5:04 PM | Comments (0)

August 10, 2004

Referer from

Have you looked in your traffic logs and found a referring site called in the statistics? Here’s why: they’re spidering the web (ignoring the web robots standards in the process) and essentially spamming your referrers logs in the process.

If you’re like me, you look at the referring site to see who’s linking to you. If you follow the link from, you’ll be none the wiser; there’s no link to your site. It’s only when you grep the logs themselves, not your reports, that you find a link to a thread on their forums.

You need to register to read their forums, so I’m going to save you the trouble:

If you have been sent to this URL it is likely you found our bot crawling your site, but perhaps you are wondering why? …. Myself and M0nkey are currently working on a new project to help webmasters everywhere. This project is a broken links reporter. In the future we will be offering a service to webmasters, a helping hand if you like.

Our bot (who we are still trying to name) will eventually crawl thousands of website URL’s daily sourcing out broken links, and other HTML errors across your site. Upon finding all these errors, once a month it will email the administator of this domain to inform him of all the problem areas on their site and inform them how to fix it. This bot will continue to crawl these sites monthly and give reports out to all those sites that have link problems. Of course however, you will be also be able to remove your email from our list once this bot gets moving.

…we are currently in testing stages, and we are currently storing website information (URL’s, administator emails, etc) in order to release our bot in the near future to help you with your website. We have created this information page to let webmasters know why we are visiting them, and also give them a chance to give us some feedback on our new project. Thanks guys, and goodluck with your site/s!

This post is followed by a series of responses, about 90% pointing out the following serious flaws in this plan:

First, we already get enough spam. They’re spidering the web in search of email addresses, and sending unrequested mail to those addresses. Sounds like spam to me. Sure, we’ll be able to unsubscribe “once we get the first email” but oh, please, doesn’t every spam offer us the same option?

Second, the spider doesn’t follow robots.txt. Very, very poor form.

Third, instead of reporting itself in the “UserAgent” field, like responsible robots, you have to look in “referrers” instead to find out what it is. Why? Because they want their url showing up on all the sites which list recent referrers on their pages, which the Googlebot will then see. It’s called referrer spam, and it’s remarkably un-classy.

Fourth, once you do figure out where to look for information about this bot, you have to register for their forum to even see the explanation of what the bot is. Requiring the webmaster to jump hoops like this leaves a poor taste in my mouth; why not put the robot information on a page without restricted access? They tried to explain this, but the explanation doesn’t hold water.

Don’t register for these yahoos’ site. Don’t display their phony referrer information on your website. In fact, if you’ve got that control, you might want to consider blocking requests including that referrer, or requests coming from the IP

As one victim posted:

You wasted my time and harvested my email, I ban your IP

If you change it I will ban the new number.

A very bad start for a dubious service, I check my own links, thank you.

(By the way, I’m aware that “referer” is misspelled in the title of this post. This is a long-standing quirk in web statistics; sometime early in the dawn of the web, it was misspelled this way in the NCSA web server configuration, and the error has spread too widely to be successfully corrected. I used the single-‘r’ spelling here for the search engines.)

(Is this boring as all get-out for anyone who reads here regularly? Yes, and I’m sorry. But I’m writing for robots and I want this post found by anyone looking for these idiots in the search engines.)

Now playing: Nine to Five from Live @ Elboroom Chicago, IL, July 2002 by Patiokings

Posted by pjm at 10:49 AM | Comments (5)

August 9, 2004

Sharing the good stuff, too

I said recently, while whining about work, that my job often provided me with interesting, crunchy little problems to solve. This morning was a good example.

First reactant: our site catalog and purchase process is a home-grown affair, originally written by my predecessor but almost entirely rewritten by me over the past two years. Like any good server-based application, it was written up to spec and not beyond, and has changed with our needs; for instance, I added the ability to sell “bundles” of books under a single price. But, in general, if we want it to do something it hasn’t done before, I have to get under the hood and figure out how it’s going to happen.

Second reactant: as a Massachusetts-based company, we collect MA sales tax (5%) for sales to customers in the Commonwealth. (Why do I keep winding up in commonwealths?) Currently, that’s hard-wired in the function that figures the purchase total: $after_tax_cost = $cost * 1.05 or something like that. (Undoubtedly the variable names are different.)

Catalyst: Saturday is a sales tax holiday in Massachusetts.

See what I mean? Interesting, crunchy problems. I’ve got a plan, and I’m coding already. Maybe while I’ve got my head around this section of the site I’ll put in the custom discount function I’ve been thinking about for months.

Now playing: The Ocean from Mortal City by Dar Williams

Posted by pjm at 1:56 PM | Comments (0)

August 6, 2004

Everybody's help desk

Well, I can troubleshoot professionally all day at work, but that doesn’t mean I won’t end up spending the evening on the phone troubleshooting my parents’ new cable modem and its integration with their wireless networking.

That’s got to be my real fall-back profession: rent-a-geek.

Now playing: the phone…

Posted by pjm at 8:27 PM | Comments (0)


Most of the soul-crushingly dull project is done now, so I’m handing it on to the New York folks who will actually supply the crack PowerPoint presentations to the junkies instructors. Yesterday I cooked up fifty-eight little zip files, each of them far too large, even once compressed, for email, and put them on our anonymous FTP server for download. Sent the email off to New York telling them where they could pick ‘em up.

The response from New York was, do you have those on a CD? Downloading them all one by one would take too long.

Maybe I missed something here… don’t you, somewhere, have an FTP client that lets you highlight a whole slew of items and download them all? Saving us (both of our companies, thanks) a few bucks?

And even if you don’t, how is it faster for me to burn a disc and send it, even overnight? Oh, wait, I see—it’s faster for you to copy them off a CD, rather than click fifty-eight times. Even though you’ll actually have access to the files much later.

Honestly, sometimes I wonder why anyone developing infrastructure for the internet even bothers. When I was doing event coverage at out-of-office locations, we used to refer derisively to exchanging files via floppy disk as “sneaker-netting.”

I bet he has MS Outlook configured to check the server for new e-mail every thirty seconds, too.

Now playing: Falling Down from Pleased to Meet You by James

Posted by pjm at 12:53 PM | Comments (1)

August 5, 2004

Alarming search string of the day

I’m pretty sure I haven’t written anything that would be of use to whoever searched this string:

unix search for string in files spy on password wife email mac os x read

…but they wound up here anyway.

Ребенка, in the unlikely event that you’re reading this, you need to consider making sure the only systems you share with your husband are at least level C2 in the Orange Book, maybe even B1 (unlikely as that is in a consumer-grade system.) No common email inbox, no administrator access for him on any system you share, and make sure your lawyer has a good grasp of network security as well.

Now might also be a good time to think about encryption.

(I don’t know why this came into my head, but someone should write a quick network-security guide in the style of Doc Bronner’s soap labels. Something like, “Encrypt! Encrypt! And firewall well! OK!”)

Now playing: I’ll Be You from Don’t Tell A Soul by The Replacements

Posted by pjm at 9:00 AM | Comments (1)

August 4, 2004

We hates it, my precioussss...

I spent a quarter-hour on the phone this afternoon with a gentleman far enough around the world that there was a significant lag between speaking and hearing. He was having trouble with our problem child software package. I couldn’t help him because, well, I don’t understand what the stuff does. But then he gave me an earful about all the problems I’ve already laid out here, plus another: the Mac version runs in Classic mode, and any Mac users who haven’t seen the writing on the wall about Classic applications have their heads quite solidly in the sand.

In other words, not only is the company wasting a significant amount of my (presumably) valuable time supporting it, but its expiration date has been all but set—maybe Mac OS 10.4, maybe 10.5, but certainly by 2006 or so.

It’s time for me to put this data in a persuasive format and send it along to Senior Management. Maybe they’ll be able to put the arm on the programmer. Maybe. There’s a ledge right in front of him, and he needs to change course—or we need to get off the boat.

Meanwhile, I had another call (same package, of course; it accounts for 75% of our support calls.) I couldn’t help him, either—it seems to be a file-format issue, and if the problem’s not in his file format it’s in the software’s parsing of that file, in which case Bog help him—but for some reason I felt like he was notably younger than me. Not a common feeling, on my part; I tend to be talking to faculty, and this caller seemed like a grad student. It was… disconcerting, somehow.

I think I need to not be the youngest in the office at my next job. It’s about time I took that growing-up step.

Now playing: Trust Me from Doubt by Jesus Jones

Posted by pjm at 5:12 PM | Comments (0)

July 30, 2004

I'm squishing your head

I like my job, really I do. Often they come to my office and put up intriguing little problems like, “Would it be possible…?” and “How would we…?”

And then every now and then we’ve got fifty-eight chapters of soul-crushing boredom, fishing files out of here and inserting them into presentation slides there. Honestly, sometimes when I think of the sheer volume of PowerPoint slides we’ve inflicted on the world, it makes me feel like a drug dealer. We’re just giving the people what they want, of course.

But it’s not so much the PowerPoints—I’m sure they’re quite good, as slideshows made for classroom use go—but just the complete and utter desolation of challenge in the work. I think I faced more interesting problems in the summer when I worked retail. I long for something that has some challenge. New software, new problems. It occurred to me that a wiki would be a really cool way to document all the stuff I do as a reference for when I’m gone; that’s hanging just out of reach and looking tantalizing.

Even optimizing the applications we’ve got now and making it better would be an interesting challenge. Even figuring out a way of automating something otherwise boring and repetitive would be an interesting challenge. This is un-automatable hand application of cherries to chocolates, and not even ones I’d want to eat.

Now playing: Other Side from Golden Age of Radio (Bonus Disc) by Josh Ritter

Posted by pjm at 3:58 PM | Comments (1)

Knowledge workers of the world, unite!

It’s System Administrator Appreciation Day. Not that I expect my co-workers to be aware of this, but they don’t make me feel under-appreciated on a regular basis, so I don’t really mind.

Still, I think to celebrate we could do something about the anti-scientist attitude in the popular press, don’t you think? Didn’t we get enough in high school?

Now playing: Mother Earth Is A Vicious Crowd from Mental Jewelry by Live

Posted by pjm at 11:17 AM | Comments (0)

July 29, 2004

Understating the damage

There’s a bit in yesterday’s SANS Newsbites about the indictment of a man accused of breaking into the systems of a large corporation, stealing information, and selling it to his customers. Despite also noting that this same corporation was broken into the year before, this article didn’t include the sort of caustic comments the editors sometimes include in this newsletter.

Perhaps it should have. See, I recognized the name of that company. They’re a data storage company. My previous employers were working with them. My previous employers’ business was heavily based on direct marketing.

The company run by the accused, which has supposed to have benefited from this stolen information, is “a bulk mailing concern.”

After connecting the dots, I think it’s reasonable to expect that if you ever gave an email address to my previous employers, that address is now available to any spammer willing to pay for a list.

And, since there isn’t anything exceptionally unusual about the information security practices of either my former employers or the large corporation which was the target of the theft, it’s probably reasonable to assume that any email address you’ve ever given to any company (i.e. not a private individual) is available to spammers, regardless of any “privacy” policies involved.

Now playing: Honest Joe from Wah Wah by James

Posted by pjm at 10:59 AM | Comments (0)

July 27, 2004

The whimsical approach

There was a bag crammed in my mailbox this morning, containing my membership premium for Daring Fireball: a t-shirt.

I probably would have responded to John’s membership campaign without the shirt (my running career has left me with a plethora of t-shirts) because of his stellar plug-in for Movable Type, Markdown, which I’m using to write this post; it’s not only hugely useful in letting me present well-presented posts without having to letting the marking-up part of my mind get in the way of the writing part of my mind (which has a hard enough time without interruptions), but also has been ported to PHP, a prospect which will probably lead to me rolling it out on some sites at work, helping the non-technically inclined folks in the office take some of the site-maintaining load off my position.

But the thing that really makes the difference between simply using someone’s work and looking forward to it is the whimsical touches I find on Daring Fireball. For instance, he links to Movable Type’s coming 3.1 version, which will include, in John’s words, “an option to publish live using PHP (i.e. to fry pages instead of bake them).” Best Perl-vs.-PHP characterization I’ve ever seen.

And, of course, there were the suggested levels of membership: $10.24, $20.48, $30.72. Yes, that’s one, two, or three kilopennies.

Now playing: Yellow Brick Road from Five Stories by Kris Delmhorst

Posted by pjm at 12:04 PM | Comments (0)

July 26, 2004

What I did with my summer vacation

You might remember my wrestling with Logwatch. Once I got the new and up-to-date version working nicely on all three servers, I ran in to a problem where one of them was producing daily reports which were inconveniently long for email. (I would have to move on to another application and wait for that report to load in the mail window.)

So today I opened up the processing scripts and tried to figure out why the blizzard of log was getting dumped directly to my mailbox, and not nicely packaged.

I found it.

And—you won’t believe this part—I fixed it.

Now the question is, was this just an issue with me? Or should I send a patch to the author? If accepted, that would rank as my first-ever code contribution to an open-source project. However minor (the patch file doesn’t even make 2k, and most of that is context.)

Now playing: Cut In Two from Somewhere Else by The Church

Posted by pjm at 3:53 PM | Comments (1)

July 23, 2004


I don’t think a non-geek would understand my glee at learning that I can install the W3C’s HTML validator on my Mac. Less time spent hammering on is more time spent debugging. Or something.

No word on whether the CSS validator will also be available.

Now playing: Antenna from Starfish by The Church

Posted by pjm at 2:32 PM | Comments (0)

July 21, 2004

The way it's supposed to work

All three of my internet-facing servers at work reported, in this morning’s status emails, that they had rejected repeated attempts to connect through SSH from the same IP address. From the log summaries, it looked as though someone had essentially just started trying logins and passwords, using some common “role” usernames, but also trying root just in case they could hit the jackpot and guess the superuser password. (Some systems, including mine ours, won’t let remote users log in directly as root for just this reason; instead, you need to log in as a particular unprivileged user, then request elevated privileges.)

I checked the IP address at ARIN, and discovered it belonged to a particular American university. (This was a surprise; I was expecting an anonymous Romanian or Chinese netblock.) I sent a terse, but cordial email to the technical contact listed, explaining what I’d seen.

Within half an hour, I had a response from an individual at the university: they’d shut down that system yesterday morning. Given the time my servers file their reports and when the university reported the IP went dark, they must have hit me in the early morning, and the university had the system shut down within five hours of the earliest time they could’ve probed my servers.

Those guys are on the ball. I’m impressed. If we could get that kind of response from all ISPs on spam runs, there wouldn’t be a spam problem.

Now playing: See Your Lights from Forget Yourself by The Church

Posted by pjm at 11:41 AM | Comments (0)

July 20, 2004

I do not understand this part of myself

Here’s something I find in my stats every now and then, under “Failure report”:

2: /cgi-bin/
2: /cgi-bin/
2: /cgi-bin/contact.cgi
2: /cgi-bin/
2: /cgi-bin/mail.cgi
2: /cgi-bin/formmail.cgi
2: /mail.cgi
2: /cgi-bin/
2: /cgi/formmail

This is the trace of someone crawling my site looking for web-to-email gateways which they can exploit to send spam. Of course, being a relatively clueful site manager, I have no such gateways, but that doesn’t stop people from looking.

The part I don’t understand is the emotional response I have—it literally makes my skin crawl. The feeling, for me, is like sitting in your home and watching the doorknob jiggle as someone checks to see if it’s unlocked.

I have little fantasies about writing a small script to sit in /cgi-bin/ which will accept the connection, and then do … nothing … very … slowly. Or cram the input right back down the sending connection, a few thousand times. Unfortunately, this will probably remain fantasy, since I don’t trust myself to write such a script in a way that won’t bog down my own server. The hosting company wouldn’t be pleased with me, I’m sure.

I don’t understand why it’s become such a visceral loathing, or why I have such a strong urge to attempt payback. It can’t be good for me.

Now playing: Fishing In The Morning from The Beauty Of The Rain by Dar Williams

Posted by pjm at 9:40 AM | Comments (1)

July 19, 2004

Memory management

As I proved at least once this weekend, I have an unusually poor head for phone numbers, including my own. (I can recite all the IP numbers assigned to our company, however, plus the primary and secondary name servers for our ISP, so clearly this is a subconscious articulation of priority: I’d rather talk to computers than people.)

The incident recalled a former roommate who puzzled me on several occasions by pulling out his organizer when he was about to call his girlfriend. “If you have her number memorized,” went the lesson he claimed to have learned from his father, “you’ve been together too long.”

I asked how he avoided memorizing the number through sheer repetition. “I think of other numbers while I’m dialing,” he said.

Now he’s married to her. What I want to know is, can he remember his own phone number?

Now playing: Hey Nineteen from A Decade of Steely Dan by Steely Dan

Posted by pjm at 3:49 PM | Comments (0)

I'm disappointed about the evening gown

It’s too bad none of my users are likely to notice this; some of them could probably write quite good nominations.

Now playing: Heavens from Seven by James

Posted by pjm at 10:02 AM | Comments (0)

July 16, 2004

Cool tweak

One of my favorite things about Mac OS X is that if one app is hung up working on something, you can flick to another and move on there. So, for instance, if you’re waiting for a very long email to load (say, the comprehensive report on idiots attempting to abuse our e-mail ten or twenty thousand times in the past twenty-four hours) you can write a weblog post.

The really cool thing, though, is that if the mail window is still visible in the background, and you move the mouse over where it is, it changes from the arrow (“click, I’ll do something”) into the spinning beach ball (“hang on, I’m working on it”) to let you know not to bother looking in on Mail yet—it’s still not done. Sweet.

Now playing: Are You Out There from End Of The Summer by Dar Williams

(A song, by the way, about WRSI.)

Posted by pjm at 10:38 AM | Comments (0)

July 15, 2004

From browser to OS to office suite...

Ben Hammersley has an excellent article in the Guardian titled “The Second Browser War,” which is a great example of why Ben is a professional journalist living in Italy, and I am a freelancer contending for the title of World’s Smallest IT Department. I won’t go through all his details, but a few representative quotes:

However, what would happen if people’s web browsers were capable of running complex applications, with code based on openly published specifications? Two things: first, the operating system would become irrelevant, so there would be no need to upgrade to the next version of Windows, and second, the playing field for everything else would be thus levelled. …

The difference between the two—between Microsoft control or that of open standards bodies—will be the battleground for the next two years, and one that promises fireworks.

I guess you know which side I’m on, right?

Now playing: What For from Strip-Mine by James

Posted by pjm at 3:08 PM | Comments (0)

July 12, 2004

Follow the theme

I like seeing the names of individual machines at various organizations and guessing the pattern they’re named by. Sometimes they’re boring (the Solaris workstations at WSC are named for continents,) sometimes they’re relatively humdrum until the rationale is explained (ours are all birds, but selecting the right bird for the job can be fun.) Sometimes they’re obscure but boring (alternating first names of U.S. presidents and first ladies) and sometimes they’re easy guesses (characters from Lord of the Rings.)

Today I noticed in my access logs that someone came here from a machine named “Reepicheep.” Now, that’s fun. And it has me wondering: is the theme characters from the Chronicles of Narnia, or is it “mice in literature?”

Now playing: Cluck Old Hen from Five Stories by Kris Delmhorst

Posted by pjm at 2:52 PM | Comments (0)

Many-to-many relationship

I was intrigued, this morning, by an article in Wired News about an HP PC which can be used by as many as four users at once. It’s not a new concept, really; multi-user (“timesharing”) systems were common back in the command-line days, and even I remember sitting in a CS lab with rows of “dumb terminals” (or “glass teletypes,” as Neal Stephenson calls them) which had no inherent processing power of their own; all they could do was open a telnet connection to a big box (VAX/VMS, some form of Unix, whatever) which was secluded in a locked, refrigerated cabinet somewhere and handled dozens of these connections at once. So there’s a start. These HP boxen supposedly run Linux, so they’re at least spiritually descended from the same systems; I can certainly open any number of terminal windows on my Linux servers here, logged in with as many different usernames as I can remember passwords to.

In my limited experience with Linux (and Solaris) workstations, as well, there’s a concept of “rooms,” (I hope I used the right term,) four different desktops which can be easily flicked between, so you can keep your email in one “room”, web browsing in another, terminal windows in a third, and text editing in the fourth. Combine that with the recent Mac/Windows “innovation” of “Fast User Switching,” which is conceptually similar except that it assigns each of those four “rooms” to a different user, and doesn’t deal with a number like four—it just opens as many rooms as users are logged on.

Now you’ve got the software basis for sharing a desktop machine. Maybe you want some kind of central authentication, so users can log in anywhere on the network, but that exists in Unix as well; I’ve used it in Solaris.

The hurdle now is hardware. Boxes today come with one set of sockets for KVM (Keyboard, Video, Mouse.) This is called a “head;” systems like servers which often don’t have this stuff plugged in at all (two of our five servers lack video cards entirely, and a third only has one because it’s a recycled desktop) are called “headless systems.” Multiple keyboards and mice are possible (plug a mouse into a laptop; you can still use the trackpad) as are multiple monitors (the most common hardware extension, I think), but they’re treated as extensions of a single user’s input/output; multiple monitors are extensions of the desktop, and both mice still move just one pointer on the screen. So the real hairy engineering trick is the relatively simple hardware task of having four KVM ports and the relatively complicated system-software task of coordinating four users’ I/O to those four distinct ports, producing a true “multi-headed” system. Baby steps, when you think about it that way.

Actually, come to think of it, it’s not far from the “network PC” or “thin client” everyone was braying about six or eight years ago.

The idea behind HP’s machine is cost savings; you can get a class of twenty in South Africa on computers for some fraction of the cost of buying twenty computers. I imagine there are some kernel-level modifications to support the multiple “heads” which mean you can’t just haphazardly update the kernel, but if the hardware is modular enough, supporting four users on one box makes upgrading hardware in the box economic (unlike the current model, where it’s cheaper and more efficient to pitch the box and buy a new one.)

It’s not really a factor for a company like mine, where we’re all in our own offices, and some of us (ahem) really hammer our machines at times, to the point of DOSing other users hypothetically using the same system. But it’s easy to imagine “first-world” applications for this sort of system: libraries, for instance. A company which puts users in cube farms and doesn’t dedicate boxes to them (I think this is called “hoteling,” but I haven’t actually seen it in action) might benefit from a system like this.

But there’s a more obvious market, of course; U.S. elementary schools, perpetually strapped for cash. I’ve been rebuilding PCs here with Win98 (shudder) and then sending them off to the local school district; they’re happy to get them and I’m happy to get rid of them. Selling four-in-ones to schools isn’t going to cut into new PC sales; aside from the hoteling companies mentioned above, most of the entities which could best use a multi-headed machine don’t have the cash to buy multiple systems on a regular basis, and if they do, they could often use it elsewhere. Home users aren’t going to buy these, that’s for certain. (Why bother?)

I do think it’s worthwhile for people to stop thinking about computers as a one-to-one person-to-computer relationship, and think more in terms of many-to-many. We’re starting, with webmail and USB jump drives and suchlike; I carry my music around with me (my iPod spends more time jacked in to computers than playing to headphones) and eventually I’ll carry my home directory. And I won’t think much about how many processors might or might not be behind the “head” I sit down at. (In actual fact, I have one head to two systems here at work: one monitor, a switch, and both a Mac and a Dell. Have to be able to test, you know.)

There, that’s more musing on the tech news than I usually do, and more thinking than I would expect from my current state of drowsiness. Maybe the sugar in my tea is finally kicking in.

Now playing: Mrs. Potter’s Lullaby from This Desert Life by Counting Crows

Posted by pjm at 9:53 AM | Comments (0)

July 8, 2004

How is it working?

I’ve been harping on alternative browsers a lot in the last month or so, in particular Mozilla’s Firefox.

If you’ve taken my advice (or someone else’s) and replaced MSIE with Firefox, and you like it, you can help others by saying so! Head over to C|Net’s (you’ll need to select “Internet: Browsers” to get the appropriate version for your platform) and review Firefox. As Asa says:

We’re not suggesting any comment for these reviews and we’re not telling you how to rate Firefox, but we’re confident that Firefox users love the application and if all of you who are using Firefox and reading this blog will add a review and if you each get a handful of friends and family to do the same that the Firefox listing will be absolutely buzzing and our friends over at c|net will take notice and that will earn us feature status and the eyeballs that brings.

Now playing: Junior Mint from Yellow No.5 [EP] by Heatmiser

Posted by pjm at 9:02 AM | Comments (1)

July 2, 2004

Listen to the Governor

If you’ve been listening to me carp for a while, you’ll find everything in this post to be old news.

In the wake of last week’s astounding nastiness, there are now at least two organizations, including the Department of “Homeland” Security (I don’t like that word, sorry) recommending that computer users use “anything but Internet Explorer” for web browsing.

DHS (CERT):It is possible to reduce exposure to these vulnerabilities by using a different web browser.”

SANS:Use a browser other then MSIE until the current vulnerabilities in MSIE are patched.

DHS, folks. The people who are supposed to be preparing us for the possibility of terrorist attack. This is comparable to your dentist telling you to floss or your teeth will fall out. Governor Ridge is telling you to use a different browser or the Russian Mafia will load up your system with malware. Point this out to your corporate IT folks when they give you grief for downloading and installing Firefox.

Microsoft is hedging, apparently. Asa pointed out Scoble’s post on the topic, which was essentially a petulant, “Well, the other browsers aren’t 100% secure, either.” No, they’re not. But isn’t 95% secure better than 50% secure? Come on. The internet is a rough neighborhood.

Now, everyone tired of me beating this dead horse, raise your hands. Oh, hey, I don’t see anyone with their hands raised!

Now playing: Higher In Time from Too Close To Heaven • The Unreleased Fisherman’s Blues Sessions by The Waterboys

Posted by pjm at 1:27 PM | Comments (3)

July 1, 2004

Now, that's just disgusting

You know you’re a real network geek when you see nothing strange about visiting a site called Bleeding Snort.

(OK, OK, the site is even more mystifying than that sentence if you don’t already get it. “Snort” is a tool for “network sniffing” or examining raw network packets for whatever reason. This site, which I just discovered in class research, is a collection of “bleeding-edge” rules for detecting certain fresh kinds of badness on the network. Hence “bleeding snort.” Exactly the sort of site which gets one massive prestige inside the geek community and really strange looks outside it: “Yeah, I manage the Bleeding Snort website…”)

Now playing: Trans-Neptunian Object #1 from Cherry Marmalade by Kay Hanley

Posted by pjm at 10:20 PM | Comments (1)

Foresight rocks (or, laziness as a career-enhancing move)

So, the vice-president looks in to my office and says, “We had a really good show at $tradeshow. So good that we sold out of books. So we told some people we’d extend the web-ordering discount on our site for another month so they could get the show discount. Can you do that?”

Five minutes later, I look in to his office, and say, “Sure, it’s done.” Because a year and a half ago (or so), I let my laziness guide me.

See, I’ve learned that hardwiring things only creates headaches for me. With a small company, you can change a policy by talking to two or three people, which means you can turn on a dime. That also means I could have fifteen little requests to tweak stuff on the website on a daily basis. Hand-coding those changes (hardwiring them) means that I get snowed under by this sort of thing. So sometime around the first time I was asked to implement a discount process for the website, I hardwired it first (so it was working,) then went back and re-did it so that anything that could possibly be manipulated (discount rate, date range, range of titles it applies to, precedence, whatever) was a database field, and the discount process got everything from the database. Because basically, I’m too lazy to hand-code all that stuff every time someone asks.

The “spring discount” ended last night, whenever the server’s clock rolled over midnight. (Something else to consider—that server’s clock doesn’t bear much relation to any actual location. It seems to have its own uninhabited time zone in the mid-Atlantic.) But with one database query this afternoon, it was extended to the end of July. And, because I’m lazy, I look good because I can make changes that quickly.

I tell you—Laziness, Impatience and Hubris. I’ll make it yet. Now, about that final project…

Update: How did I let myself write, “was lazy”? It’s the last day of class and I haven’t written the final paper…

Now playing: Little Wings from Five Stories by Kris Delmhorst

Posted by pjm at 2:15 PM | Comments (0)

June 30, 2004

Another way not to get sympathy from tech support

Email different descriptions of your problem to several different email addresses within the company. This will insure that most of the company will be aware of your problem, since they will forward your messages on to the help desk. It will also ensure that the help desk gets multiple copies, just in case one gets lost. Make certain that no single message contains any useful details to indicate the solution (or, for that matter, indicate the actual scope of the problem.) Avoid emailing the actual tech support address. Imply that, because you have class tonight and you’ve just discovered this problem, it is an emergency. Optional: contact us about a problem caused by non-standard software you have installed.

The fact that I can be snide here keeps me from whacking users with the clue stick.

Now playing: Feel Flows from Up To Our Hips by The Charlatans

Posted by pjm at 9:10 AM | Comments (0)

Sticking to stereotypes

Great article in Wired News today about the lack of security at the major presidential websites. The summary is, both sites have structural weaknesses (potential SQL injection and cross-site scripting vulnerabilities); both sites have privacy policies which are essentially meaningless (and, in some places, contain bald-faced lies); both sites track visitors in ways they don’t tell you about, the Bush site particularly obviously. The Bush site also has significant network vulnerabilities.

The part I found most amusing, however, was the software roundup, which fits the liberal vs. conservative stereotypes pretty well:

[T]he Kerry site is housed on an Apache Web server running on a Red Hat Linux box. The Bush website is hosted on a Microsoft IIS 5.0 server and uses Microsoft’s

Now playing: When I’m Here from This Town Is Wrong by Nerissa & Katryna Nields

Posted by pjm at 8:13 AM | Comments (0)

June 29, 2004

Moderating cynicism

If you’re interested (even faintly) in computer security, and have some kind of RSS reader permanently running on your desktop, you might want to consider adding the feed for the “Handler’s Diary” at the SANS Internet Storm Center. I’ve found that it often puts up notice of what, as near as anyone can tell, has just hit the fan, and who’s about to catch it. They also write for a mid-level of expertise; for instance, today’s entry has a pretty good description of just how some kinds of spyware and adware work in the context of Yet Another Scam.

Which is a sideways way of getting to the idea that I don’t really think my users are as clueless as I make out. I’ve mentioned before that I make a policy of installing and running SpyBot every time I’m asked to do anything with someone’s Windows box, and to date nobody, including myself, has come away “clean.” These are, in general, intelligent people, often with some very impressive specialized knowledge, and this software infection is as easy to catch as a cold with the system I put on their desk, with no training to speak of. What’s more, they’ve learned a very, very useful adaptive behavior, which is asking me whenever weird things start happening. So, unlike the clueless users who do infuriate me, we don’t usually have infected zombie boxes spewing garbage out onto the internet for days (weeks) on end.

You can prevent a lot of real infections easily by washing your hands, relatively frequently, with normal soap and hot water. (Don’t get me warmed up on antibacterials.) But someone has to tell you that, and the sheer volume of analogous things someone has to tell you about keeping your computer infection-free… well, it’s large.

The fault, in the spyware/adware issue, is squarely on the shoulders of the algae who write this stuff, and push their expenses off on me and my company in the form of my wasted time and that of my co-workers.

Now playing: Still Fighting It from Rockin’ The Suburbs by Ben Folds

Posted by pjm at 1:19 PM | Comments (0)

Cynical morning

Clive Thompson always knows how to speak to my cynical side. After spending a half-hour or so clearing CWS off yet another of my users’ systems, he linked today to his article in Slate, “Us Like Spies,” explaining “how computer users ask to be doomed to viruses and spyware.”

Thompson’s thesis, essentially, is that we’re too lazy to check up on the software we download and install, and too ignorant of what’s going on in the guts of the machine to understand what could be going wrong and how to fix it. And, largely, he’s right. But there are a number of steps users, even non-technical users, can take to keep their machines spyware and adware light:

  1. Don’t use Internet Explorer. Have I mentioned this before?
  2. Don’t download stuff just because it looks cool. You don’t need to replace your pointers or have special software to change your desktop picture on a daily basis, or any of a dozen “toolbars” for IE (which we dumped in step 1, remember?)
  3. If you download software, get it from a place you trust. I’ll download nearly anything from the Mozilla foundation because they’ve got hundreds of thousands of open-source zealots watching their every move, and if there’s spyware included with their stuff, they’ll get stomped. Likewise nearly every open-source package—these guys exist on their reputation, and they can’t afford to monkey around with shady software.
  4. Run one of the many good anti-spyware programs (like AdAware or Spybot) on a regular basis. Weekly is good. Daily is also good.

Am I sour today? Hell yeah. Having my first mug of tea wind up as a lake on the kitchen counter within seconds of adding sugar (and before it reached my lips) was a good start. I have some choice words for the various unicellular organisms I’m seeing in my traffic logs scanning this site for software they can exploit to relay spam, but due to my mood, they’re mostly vicious, obscene, and not fit for sharing with the rest of you wonderful people, because you’re not bitter, jaded burnouts like myself. At least, I hope you’re not.

Now playing: Same Direction from Listen Like Thieves by INXS

Posted by pjm at 9:34 AM | Comments (2)

June 28, 2004


I was talking about career paths with friends in Boston this weekend. Most of this group of friends are older than I am, and I often wind up playing the smart-ass kid with them, which has its moments.

So I wasn’t quite sure how seriously to take it when one of them started insisting that I had to come work for her. She’s got some exalted management title at one of the gargantuan financial firms in the area, running some team of IT people. And she pitches a good case: though her office is in Boston, her team is up in the part of New Hampshire which is, for all intents and purposes, in Massachusetts. They use about every database package known to humanity (Oracle, MS-SQL, Sybase, PostGres, MySQL, Interbase, DB2, and for all I know Filemaker and FoxPro.) They move staggering amounts of data around the world on an hourly basis, and this is the team with the tools. She claimed corporate support for continuing education, as well (and, whatever bad things I may say about my previous employer, they would reimburse tuition for nearly any course you could reconcile with your job, whereas I’m on my own with Westfield.)

I doubt I’ll even ask if she was kidding or not. I rather like what I’m doing here right now, and I suspect that I’ll be best-off, when I finally get rolling in grad school, if I try to do that one thing well rather than letting coursework be just one of the flaming torches I juggle.

Still, it’s tempting, and I think the temptation is an insight to what I really want out of this degree. What I like doing is solving puzzles. Putting the pieces together and watching them go. To do that on a larger scale, I need tools.

Right now, I’m doing pretty well in that direction, because running a network of thirty-five (or so) nodes and five servers is really just a large-scale application of the same tools you use to run a high-powered home office. When you step up and start with applications that require load-balancing and fat-pipe networking and things like that… well, that’s another big step beyond where I am now. There are a lot of tools out there which I have access to even now, which I don’t really know how to use, and then there are more which I know we don’t need, so I don’t really know them.

I think more than knowing how to use the tools, I need the experience and knowledge to judge which tools are right for the situation. And be able to make my own, if necessary. It’s fun and fulfilling to do a whole lot of little stuff here, but wouldn’t it also be fun to wrangle the really big iron?

In this way, I’m of a similar mind to Dorothea—I don’t research things. I do things, and I learn them when I need to do them (and often by doing them.) I think that’s a serious warning signal when it comes to the kind of degree that begins with “P.” And that scares me too.

And maybe when I get out I can really be a dwarf, and

spen[d] a lot of time in the dark hammering out beautiful things, e.g. Rings of Power.

Now playing: Everlong from The Colour And The Shape by Foo Fighters

Posted by pjm at 1:56 PM | Comments (0)

June 25, 2004

Yet another reason...

I know, I know. I keep harping on this. But it’s increasingly important. Dump Internet Explorer. Download something, anything, else. I recommend Safari, Mozilla, Firefox, or Camino. Why? Well, take a look at this. Here’s the short summary: yesterday, a large number of fairly popular websites were “compromised” (cracked and, essentially, booby-trapped.) Everyone who visited them after the compromise was exploited through a security vulnerability in Internet Explorer. In the case of the browsers, “…different executables were observed. These trojan horse programs include keystroke loggers, proxy servers and other back doors providing full access to the infected system.” In other words, you’re in pretty tough shape.

Except, needless to say, the people who weren’t using Internet Explorer.

Imagine, for a minute, someone installing an I-beam across the interstate. For various reasons, its height is such that everyone driving an SUV hits it and their vehicle is wrecked. But the Civics and Saturns and Neons go zipping on past, quite safely. IE is an SUV. Why keep driving it?

Now playing: The Theatre And Its Double from Forget Yourself by The Church

Posted by pjm at 9:32 AM | Comments (2)

June 23, 2004

We should charge for support

This message (heavily edited) arrived shortly before I left last night, following up my response to their initial support request. They’re talking about a known problem with one of our CD-ROM titles, which springs from a bug in the version of Macromedia Director used to create the application, back in 1999, and I sent, essentially, a cut-and-paste answer, since we get the question relatively frequently. The bug, of course, applies to any app created with this version of Director—not just ours.

…So, your program is not compatible with XP on MOST computers without changing page file size, something the average user is NOT competent to tackle?

Is there ANY less problematic solution?

Oh, wait, you’re right, there is a less problematic solution, I’ve just been holding out on you. We only send that one to people who are rude to us and don’t believe our first response.

Is it any wonder Microsoft is mostly pay-per-incident support?

Now playing: Monster from ‘Mousse by The Nields

Posted by pjm at 10:54 AM | Comments (0)

June 22, 2004

Network notwork

Yesterday we had a sort of gremlin in the network. Everything upstream of our network was running slowly; dialup slowly, in fact. It worked, but it crawled. Inside the network, things were flying as usual. I rebooted the network hardware that sits at our end of the T1. No effect. I checked load on the gateway. Nothing exceptional. I emailed our upstream provider. Nothing showing there, either. They agreed to ask the telco which owns the line to run a line test overnight.

(An aside: Here’s telecommunications deregulation for you: we pay two different companies for our T1. One company owns the cable and some kind of box in our basement which is locked shut and carries warnings about how it will burn your hands off if you touch it. That’s the telco. They own the line. The other company is in Springfield; they pick up the other end of the line, assign IP addresses to a few boxes at our end (I think we have three numbers—router, gateway, and FTP server) and generally give us an internet dial tone.)

I hadn’t even taken my bike to the basement this morning when the one other person in the building tracked me down and said we were still bogged down, so this time I rebooted everything: network hardware, router, gateway, switch. I figured I’d do it first thing, before anyone else turned up, but I did end up having a long discussion with the acquiring editor about the relative benefits of doing the most possible with cheap hardware.

It looks like the gremlin has been purged, but I’m still not sure what it was.

Now playing: Come And Find Me from Golden Age of Radio by Josh Ritter

Posted by pjm at 9:40 AM | Comments (0)

June 21, 2004


Logwatch is a hugely useful program on two of our three Linux servers, summarizing “interesting” activity in an email to the admin (me) on a daily basis. I want it to be just as useful on the third server, but so far I’ve had a lot of garbage in the reports. I suspected something quirky with the version; the two servers which are working well are using version 4.3.1, which shipped with Red Hat 9, and the one I’m trying to install on a much older system (it’s still running the 2.2 Linux kernel) is 5.1, and it’s choking. I get a lot of error messages and junk in the listings.

I asked about this on the Logwatch support list nearly a month ago, and it’s been on my list of problems to solve for quite a while. Today I finally got an answer from the author; Logwatch is a Perl script, and the old server is running Perl 5.000something, a relatively geriatric Perl now that the Perl junkies are talking about v6. I’ve installed a newer Perl to run alongside the older one in order to run SpamAssassin, so what I need to do now is convince Logwatch to use the new Perl, not the old one.

I can either see if it can be done with an installation flag (that is, install the software from tarball and see if I can set an option flag somewhere saying, use this Perl, not that one) or I can take the existing install and hack it. To switch Perl versions, I need to change one line in each of several dozen component files. This means either learning sed, which may be too much for the task at hand, or hacking a quick Perl script together. My Perl is rusty, but that’s what the Camel Book is for.

Update: Hold the phone; I just got the email announcement that Logwatch 5.2 was just released. If I’m gonna hack, I should hack the new version, right?

Update to the update: Well, my Perl skills really stink. I wound up with a lot of extra (and empty) files and no idea where the failure was. So I wiped it, reinstalled, and made the path corrections manually. It works wonderfully now, but it took some hammering with a wrench. I worry that I’ll clobber all the changes if/when I upgrade to 5.3.

What’s the worry? Well, one of the nice things about this package is that it presents me, at the beginning of the day, with a nice, pretty list of hosts which had packets rejected by our firewall, as well as what ports they attempted to connect to. Something like getting phone numbers for everyone who checked your car-door handle to see if it was locked.

Now playing: Inarticulate Nature Boy from Inarticulate Nature Boy by Josh Clayton-Felt

Posted by pjm at 11:11 AM | Comments (0)

June 19, 2004

35 years

Last night there was a celebration, at the office, of the company’s 35th anniversary. By “celebration,” I mean about a hundred people (the office is 28 when everyone’s in) including families, part-timers and freelancers, pretty nearly everyone who’s touched the company and is in driving range. The back yard of the office was mowed back to the property line (only about half of it is mowed regularly) and a big tent put up, next to volleyball nets and horseshoes. Caterers dug a pit and baked lobsters and steamers on hot stones, in seaweed. More than one person compared it to a wedding reception without the hassle of a wedding.

I came to this company expecting a relatively brief stay, after five years at my previous company. I had my eye on graduate school, and thought it would happen a lot faster than it has. It will have been three years at the end of the summer, and might go close to four. It has gone much faster than I expected, and it’s been a much better job than I expected. When I signed on, there were a bunch of things I needed to learn just to do the job. Now I’m pushing projects because I think they offer me a chance to learn more. (Buying our own web server was one such. I had to learn to set it up and run it, and in turn it’s allowed us to handle sites and tools we might not otherwise have attempted.) People tend to stay with this company for a long time; even now, I still feel like a newcomer among them.

This company has few things in common with the one I left, probably beginning and ending with generalities: they’re both publishing companies which took the name of their founders and were started with fairly high ideals. It happens that one became a massive multi-media behemoth and the other stuck to its niche and and prospered. I’ll leave the question of which still maintains its high ideals as an exercise for the reader. I’ll also leave out the question of which paid me better.

The summer clambake was a regular tradition at the old place, but it never felt like the party last night; it was “the company picnic.” This was very, very different. And there was the president, talking to everyone, meeting everyone, with his daughters and his grandson there, telling us how we’d had one of the toughest years we’d ever had (in terms of scheduling—we’ve sent new editions of three of our biggest titles to the printers in the last six or eight months) and how, even after thirty-five years, he still looked forward to coming in to the office in the morning. His office is two doors from mine; he still intimidates me in a lot of ways, I think because I want to do a good job for him. He seems to have such a strong vision of what needs to be done, I want to stand behind him and hand him tools.

I know I will outgrow this job if I stay long enough, but I don’t think it will ever be easy to leave this company. It’s not something I look forward to.

Now playing: 1974 from Rock N Roll by Ryan Adams

Posted by pjm at 2:04 PM | Comments (0)

June 16, 2004

End-user troubleshooting

The wonderful thing about the problems most end-users have with computers is that somewhat more than 75% of them will be solved by simply shutting down the machine, going home for the day or out to lunch, then starting back up on return. If I could enforce this step as part of my documented troubleshooting process, I’d save myself a tremendous amount of time researching error messages, symptoms, etc.

The problem with this technique is the time it requires from the end-user. Often, by the time they get to me, they’re on deadline, or they’ve reached a high level of frustration, and they want something done now. You can’t just say, well, turn it off and let the chips rest for an hour or so.

(Doctors do exactly this, of course, which is why “take two aspirin and call me in the morning” is a cliché.)

The drawback from my point of view is, I don’t get to figure out what the actual problem is. As Neal Stephenson points out in In the Beginning… was the Command Line, we learn the most about computer systems when they fail.

Still, it’s nice to say, “I’ll get back to you on that first thing tomorrow,” and come in the next day to an email along the lines of, “Never mind, it’s better now.” Wizard that I am…

Now playing: Anesthesia from Hologram of Baal by The Church

Posted by pjm at 8:54 AM | Comments (0)

June 15, 2004

While it's hot

OK, I’m an early adopter. As I’ve mentioned before, I think you should be too, particularly if you’re using Internet Explorer:

If you were looking at this in any browser but Microsoft Internet Explorer, it would look and run better and faster.

If you want help moving to Firefox from Internet Explorer, let me know and I’ll try to help over email. Honestly, though, it can’t be that hard; nobody took me up on my previous offer (despite a high-profile link from Asa) and I’ve never had any significant trouble upgrading my users here. (And if you’re using a Mac—and you probably should be—it’s almost amazingly easy.)

Now playing: Laughing from Murmur by R.E.M.

Posted by pjm at 9:23 AM | Comments (0)

June 14, 2004


Who knew that Cat-5 ethernet cables were a perishable resource?

Every so often, I add a half-dozen or so eight-foot cables to the office supply order. The nice ones in blue with the snagless plugs. I put them in a box in the server room, marked “Ethernet Cables.” Today, I looked in and found only the fifty-foot monster we used once to go room-to-room.

We don’t add new systems to the network very often; I think I can count the new network devices since my arrival on my hands. I would expect our demand for new cables to have been pretty small—less than a dozen, perhaps. I find two unoccupied six-footers in my office (which has nearly as much hardware as the server room; I count eleven PCs, though seven are stacked like cordwood in the corner, and two more are over at my “workbench” waiting for some level of attention.) But these cables aren’t of the new, snagless variety.

I can only hope they’re off together in a closet somewhere, and I will be finding little jumper-length segments of Cat-25 serendipitously in the coming months.

Now playing: Good Time from Hard Candy by Counting Crows

Posted by pjm at 12:30 PM | Comments (0)

June 12, 2004

Drive-by internet

I am sitting in a parked car next to Republic Square in Austin. I am online with the strongest wireless signal I’ve had all week (I’ve been wired in the hotel, and admittedly I probably could have had a stronger signal yesterday if I had actually gone in to Bookpeople instead of sitting outside in front of Whole Foods.)

Austin turns out to be the free Wi-Fi capital of the world, and Republic Square is a flagship. This is helpful, because at this hour, nobody else is open.

It turns out that due to the late-in-the-game nature of our preparations for this trip, our hotel is in about the worst possible location for nearly everything—a sea of concrete highways and parking lots.

The last time I remember this feeling is Sacramento at the 2000 Trials. The feeling is of being behind and low on sleep, knowing only the hotel, the track, and a few places in between. Eating entirely at restaurants, and not always very good ones. (The best meal I’ve had so far was from the salad bar at Whole Foods.) No exercise and a backlog of Other Stuff to Do. I am easily frustrated right now, a side effect of being low on sleep.

That said, I should get back to work. I’ve got the women written up from Thursday, and now I need to finish the men. It’s tougher, because I missed about half of the only men’s final on Thursday while I was talking to the winner of the women’s final. I usually wind up missing a lot of the men’s events for that reason. The mixed zone is funky that way.

Still, I got to see Alistair Cragg’s last race for Arkansas, and that was pretty cool. It’s easy to see why he has fans. Harder to see why there were so many different reporters from the Arkansas papers talking to him… how many newspapers do they have around Fayetteville, anyway? And why did one of them have so many really, really bad questions?

Posted by pjm at 8:40 AM | Comments (0)

June 8, 2004

Am I the only one who thinks this way?

(The answer is most likely “Yes,” but read on.)

I’ve started getting site traffic reports with the hosts “resolved.” (Before, I was just getting IP numbers, which I either recognized—65.96.x.x is probably someone on a Comcast cable modem, for example, and I recognize the IP of our gateway here at work—or would look up if they were large enough, using dig.) Some of the host names attached to the IP addresses are self-explanatory, like or the cable-modem hosts with the IP number in the host name.

The thing that really alarmed me was an address like this (and I’ve mangled it, because it’s our home gateway, but the format is the same):

The reason this is a little spooky is, if you strip off the h and format it slightly differently, say as 00 40 87 c6 3b 0f, well, it looks an awful lot like a MAC (hardware) address (six octets of 0 to 255, represented in hex,) possibly that of our router. I’m not going to dig too deeply into the mechanics of network addressing here, but the MAC address is the way Comcast actually recognizes that router, when it maps an IP address to it and routes internet traffic for it. It’s “burned” in to the hardware of that router.

(In theory, every network port on earth has a unique MAC hard-wired on it at manufacturing time. That’s a lot of MAC addresses, but 2566 is 248, if I’ve got my math right, which is, roughly speaking, enough number-space to assign a MAC address to every grain of sand on Popham Beach. It can be remarkably handy to identify an otherwise unmarked piece of hardware by checking the manufacturer who assigned the MAC address.)

I’m not a believer in the idea that security-by-obscurity solves everything, but it seems to me that exposing the mapping of hostname -> IP number -> MAC address like that is a little spooky and perhaps dangerous, much like using Social Security numbers as driver’s license numbers is. It spreads the information a bit too widely, and (I think) exposes the router to too many extra issues, like IP hijacking and packet spoofing. As noted above, it can be used to identify the manufacturer and possibly the hardware in use, helping the bad guy identify which exploits to try. MAC addressing is more a local network thing than a wider-internet issue—it’s too close to the bottom of the stack of network protocols—but on the local network it can really jack things up. Sure, those things could happen anyway, but why make it so easy?

Outrage moderation: it might not be the MAC address at all, it might just be an arbitrary hexadecimal number in the range 000000000000 to ffffffffffff. Or it could be Comcast getting warmed up for IPv6, which I understand uses 48-bit addressing instead of the 32-bit addressing used in IPv4.

Now playing: Page One from Between 10th And 11th by The Charlatans

Posted by pjm at 8:53 AM | Comments (0)

June 5, 2004

Definition of "tough crowd"

As part of this security class, I’ve been assigned to follow a security listserver. I’ve subscribed to bugtraq for the first time. Most of it is relatively humdrum announcements of obscure vulnerabilities in even more obscure software (or so it seems to me) but suggestions of vulnerabilities (shortened on-list to “vulns”) or exploits for widely-used software (such as the ubiquitous Linksys four-port home routers) meets some pretty intense scrutiny.

This group doesn’t pull punches when it comes to stuff they don’t like, either. Here’s a signature file (and yes, I know posting this witticism is probably like posting the last joke your aunt mass-mailed you, but it proves my point):

Did you know that, if you play a Windows 2000 CD backwards, you will hear the voice of Satan? That’s nothing! If you play it forward, it will install Windows 2000!

Now playing: Chelsea Hotel #2 from Come and Find Me | Other Side by Josh Ritter

Posted by pjm at 6:22 PM | Comments (0)

June 4, 2004


I’m about to whine in a boring and uninteresting way. Nobody wants to read it, but this is where I can do it, so just skip on to the next entry, OK?

Frustration is bottling up in a way I really don’t like. In fact, I think if a spammer (just to pick an irritant at random) was to show up here, I might reach physical violence. I’ve already considered throwing things twice today, and I haven’t anything here in the office that’s safely throwable. (Well, there are four or five computers nobody would miss—SuperMac, anyone?)

Let’s start with tech support. After all, everyone else does. We have this one program which is a perpetual drag on my days. I will not name it, because I don’t want this page coming up in a Google search, but for various reasons the installation procedure has become more complicated than it should be. This is a bad thing, because over enough installations users will find some way to fsck even the simplest procedure. I spend a lot of time on the telephone talking people through this installation. This is particularly difficult because I need to describe things to them which are best visualized (that is, after all, why it’s called a Graphical User Interface.) I don’t know what they’re seeing, so I have to guess or prompt them to describe it until I hear the right hook. Today, after spending upwards of half an hour talking to one woman (including inadvertently shutting down all my running applications) it developed that we’d sent her a Windows serial number for her Mac software.

To top it off, the author of this program apparently has a very high level of insecurity about whether his program actually works the way it’s supposed to. It’s very widely used in the field, is cited regularly in papers, but he figuratively wakes up nights wondering if there’s a bug somewhere which is producing incorrect results for everyone. He’s developed this insecurity into the program itself, a sort of pathological reduction of expectations, so in addition to the installation problems, every so often someone asks when they’ll be able to get a “final” version. Damned if I know. If my analysis is right (and it might not be,) never.

If I was a good programmer and understood the field in which this program is used, this would be a grain of sand around which I would produce a pearl of a program, and we could forget this thing and move on. But alas, I can’t code that well, nor do I understand the field (though conveniently, we publish a Made Easy-type book on the subject.)

And then there’s the spammers and malware-spewers… I’ve been in on them before. Word is that even though Microsoft is allegedly fixing zillions of security problems in Service Pack 2 for Windows XP, they’re blocking those with “unlicensed” (i.e. illegal) copies of Windows from installing SP2. So, say, half the Pacific Rim is going to toddle along with the same insecure installation they had before and saturate the rest of us with zombie-relayed spam and viruses, just like they are now. Thanks for nothing, Mr. Gates. With all the bird feces I get in my inbox, I can’t imagine what it would be like if we weren’t bouncing, filtering and deleting like mad. I think I’d go down to the basement and unplug the T1.

Last but not least, of course, my foot is jacked up. I’m following the rule of thumb I learned years ago: if it hurts two days in a row, take two days off. If it still hurts, take a week off. If it still hurts, get professional help. Well, two days didn’t help, so tomorrow I start the week. It’s not like it’s something sudden; it’s been aching all along. It’s just gotten worse over the last week, and called attention to the fact that it’s not getting better.

Injuries are something you deal with when you run a lot. The frustration is just the sheer length of this. I’m tired of all the contortions I go through to fight it off, the taping, the brace, the goddamned sock every goddamned night. I’m tired of icing. I’m tired of doing half-assed training to keep it from getting worse, and while I appreciate the sentiment of the person who helpfully commented that maybe I was “doing too much” even for “an elite runner,” (a) I’m a long, long way from elite—a full five minutes off Olympic Trials qualifying at 10k, just to pick one example—and (b) in order to run that 30 miles per week, I endured a patient (and tedious) buildup starting in January. Going back and starting from zero feels far too Sisyphean even for this sport.

I know I should be finding something else to push me towards recovery. Acupuncture, new orthotics, this new sonic therapy thing they’re doing. I just feel like I’ve reached my capacity for “something elses.” I already published the list of things I’ve tried. When do I say, “Hold, enough?” When do I ride the bike down to the Connecticut and just see how far I can throw my spikes and become another sedentary American like everyone else?

And, oh, yeah—it looks like this site is currently inaccessible. The host is being DDOSed. See malware, above.

So, yeah, frustration. Usually when I’m this wound, I go for a run. Guess what! My frustration is recursive! Maybe another dunk in Puffer’s would straighten me out again. Or something… a few hours on a project which interests me and occupies all my attention, no distractions. Flow. I miss it like a home I’ll never see again.

OK. Tantrum over. Back to work.

Now playing: 1000 Umbrellas from Skylarking by XTC

Posted by pjm at 3:39 PM | Comments (0)

June 3, 2004

Why validation is worth a few minutes

That’s code validation, specifically the act of running your HTML through a specially-designed SGML parser to determine if it’s “valid.”

Sometime last month I linked to Dan Cederholm’s discussion of new window creation. There’s an extensive and interesting discussion in the comments (where, oddly enough, I couldn’t find anyone bringing up the “it confuses the user” point.) One comment reiterates something I sometimes need to be reminded of: all this jumping through hoops to make pages validate is worth something. It makes pages faster.

I can’t improve on the explanation given in Dan’s comments by Al Abut:

Modern browsers are actually several different browsers packaged and hidden under one skin—an old Quirks mode one that’s basically the ghost of NN4 on life support, and a blast from the future, a tiny, lean, super fast rendering engine in Strict mode. Tiny because valid xml files are structurally oh so simple—it’s the whole point of xml and xhtml! Oh, and just declaring it Strict doesn’t make it so, just like wearing pink pumps doesn’t make me a pretty girl. If you use the Strict doctype but don’t validate, throwing the browser an error, it bitch slaps you back to Quirks mode and starts rendering from the top again, just like you rightly deserve.

So, my point, again: if you want your users to drive in the fast lane, your code needs to meet the entrance standards. If it doesn’t validate (or, if it claims to be Strict but doesn’t actually validate) you’re back on the potholed side streets.

Now playing: Kiss Me On The Moon from This Town Is Wrong by Nerissa & Katryna Nields

Posted by pjm at 11:59 AM | Comments (0)

May 28, 2004

I'm being picked on

It seems like half the office is making the three-day weekend into a four-day weekend. Meanwhile, instead of unwinding gnarly problems in a rewarding manner, like yesterday, I’m doing the IT equivalent of cleaning bird $#!+ off cars.

I’m not sure of the what, why or whens but when I go online today, instead of the [normal home page], it pulls up lots of garbage, that I have trouble closing.
Can you help?

I’ll give you three guesses what it was, and the first two don’t count.

Spybot S&D, which I keep handy on a CD for just such occasions, found something like 180 spyware and hijack-ware “problems” on this system, including the (in)famous CWS. It took two scans and nearly an hour to get it all clear, and even that didn’t get rid of two separate folders of bookmarks which I honestly don’t believe were put there by the user. (Does anybody with a sound mind create a bookmark folder called “Adult Sites” on their work computer? To begin with, I don’t think she knows how to sort bookmarks into folders.) When I finished, I didn’t even offer a choice. I removed the Internet Explorer icon from her desktop, installed Mozilla, and made it the default browser. I showed her the icon on the desktop and said, “Here’s how you’re going on the Web from now on.”

Fortunately, she was disturbed enough by the pop-ups she couldn’t make go away (which might have been a harassment suit in a larger company) that she asked for a copy of the CD I was installing from so she could take it home and install Spybot and Mozilla on her home system. Then her neighbor came in and asked me to show her how to use the labels SpamAssassin puts on our email to filter spam out of her inbox. “What did we do before you came?” they asked.

Well, this kind of bottom-feeding, invertebrate parasite-ware has really sort of been a 21st-century thing, and I started here in 2001, so you really didn’t have these problems before. But unfortunately, even compliments like that get me thinking about something I’m not doing well, which is documenting what I do and how I do it. My motivation for this is making sure things keep running after I (inevitably) leave for grad school, but I joke, when I’m showing others how things work, “…so you’ll know how to do this if I get hit by a bus while I’m out on a run.”

Then this came up on a running list I’m on…

The last point of the run that I remember was about 2 ½ mile mark—running on the left side of a road that runs between the park and the East River. Next thing I knew, I woke up in an ambulance. Don’t remember the incident, but I’m told from the ambulance staff that I was the victim of a hit and run driver. … My theory is a school bus/small truck nicked me on the face with a rear view mirror …

Holy knock on wood, Batman! I think I need to start documenting stuff better just so Murphy’s Law will protect me from actually getting smacked.

Now playing: Deep Inside My Pocket from Tarantula by Ride

Posted by pjm at 1:34 PM | Comments (1)

May 26, 2004

Wish list

One of the things that is bolshoi, bolshoi cool about Mac OS X is that I have, in the background, Photoshop running a batch job to chew through one set of files, and Imageready running another batch job on another set, and yet they’re running more or less independently, so I can have Ecto open here in the foreground and be writing this without any significant lag. (OK, the load average is higher than usual, but if your load average is less than 1 you’re wasting processor time anyway.) (That’s a bit of a joke. Really.) It’s all possible through the Unix core, which manages the running tasks and juggles them nicely in a way the old Mac OS never could. (Or Windows, maybe, but I have a hard time remembering past limitations of Windows since I so seldom use it.)

But here’s where it falls short of Unix: since Photoshop is working on that batch job, I can’t use Photoshop for anything else until it’s done. Maybe that’s a drawback of Photoshop, not the MacOS, but it would be nice to be able to fork off a new instance of Photoshop and get going on another task while I’m waiting for my batch to be finished. Then I’d never have to wait for the computer; instead, I could pile up a stack of work for it to do while I go home for the afternoon. Heh.

Now playing: Elevation from All That You Can’t Leave Behind by U2

Posted by pjm at 1:28 PM | Comments (0)

Opening a new browser window confuses users

A few weeks ago, I complained about how so many links insist on opening a new window. Let me decide if I want to keep the original page, I griped; I’ll open the new link in a tab.

Today Adot linked to an article about Seven tricks that web users don’t know. There’s good stuff there (for instance, as many as two thirds of users don’t know that the company logo in the upper-left of a page is usually a link to the site home page,) but the stinger for me was number 7:

7. Second browser windows
I’ve saved this one for last because it’s especially hard to believe—some people can use Windows applications for years without understanding the concept of task switching. (When I point to the task bar and ask them what it’s for, they can’t tell me.) Thus, spawning second browser windows can completely throw users off track because it removes the one thing they are sure how to use: the “Back” button.

This is my ammunition. Next time I’m asked to “make this link open in a new window,” I’ll ask for a good argument, and present this article as my backup. It’s not just an annoyance to me: it’s confusing users!

Now playing: Gardening At Night (Different Vocal mix) from Eponymous by R.E.M.

Posted by pjm at 11:55 AM | Comments (0)

Class online

Last night was the first (and only) physical meeting of the Computer Security course I’m taking over the first part of the summer. It’s an online course, something I’ve never done before. Yes, never. Geek that I am, I think I know myself, and I suspect I’d have trouble focusing on a course without regular class sections to hold my attention. We’ll see.

I’ve had three classes with this professor before (based on my transcript from WSC, you’d think they only had two professors in the CS department,) and this was a typical first meeting for him. The essential information was who he was, when his office hours were, and all the various ways to contact him; I was nearly ten minutes late, but he was still going on that when I arrived. In person, sometimes I feel like he teaches by repetition, presenting the same information three or four different ways just to make sure it sinks in, where I’d prefer to build on the information as soon as I’ve absorbed it.

We also did a rough run-through of the structure of the course. I recognize a lot of the topics on the syllabus, but only as topics; I’ve seen “Kerberos” before, for example, but other than knowing it has something to do with authentication, I couldn’t explain it. That’s good, there’s something for me to learn here.

And, finally, we walked through the software we’d be using to work through the syllabus. The course will be essentially self-paced, using WSC’s WebCT server. I’ve used WebCT in a limited manner for previous courses; this one relies on it. This is interesting to me on a professional level; WebCT is widely used and we’re sometimes asked at work to format ancillary material from our books for use with it. (I’m intrigued to notice that none of the “happy students” photos on WebCT’s home page actually show them gazing into a lit computer screen; in fact, I’m seeing some green chalkboards and pen-and-paper note-taking in there.)

Logging in to WebCT was a minor challenge; your login name is tied to your college ID number, and I was unclear on whether I even had such a number. It turns out that I do, but I use it so infrequently I was unable to even guess the slice of it incorporated in my WebCT login.

Once logged in, we’ve got a series of “lessons” already in WebCT. We attack them at our own pace, but there’s an exam on June 15 and it is strongly suggested that we have reached a certain point by then. The exams are self-scheduled (within a time frame) and taken online; other WebCT resources are a course message board and some Java-based chat “rooms.”

The lessons link to a fair amount of online reading; we’re also required to monitor a “security focused mailing list.” I already subscribe to two SANS lists, but I don’t think that’s quite what he had in mind, so for the time being I’m going to monitor Bugtraq as well.

I’ll be interested to see how this all works out. I’ve learned plenty in my previous WSC courses, but I’ve also felt like they’re pitched for a different kind of student. I’m trying to sponge up all the general principles and foundation I can, in hopes of building an advanced degree on that. Most of my classmates are just looking for a B.S., and either a job, or a raise at the job they’ve got. In many cases, this will be their first degree past high school. They almost make me feel guilty for being so… overqualified?

Perhaps now that class has started, I need an “education” category. (One day, I’ll remember to add categories to the template so you can see the classification I’m doing.)

Now playing: You Wreck Me from Wildflowers by Tom Petty

Posted by pjm at 9:40 AM | Comments (1)

May 25, 2004

Fat as a zero-sum game

There’s an interesting column by Don Kardong on the Runner’s World site today. Look now, because the new site design is so frustrating (for me, at least) that you might never be able to find that column again.

Don’s topic is something like this: school districts are facing tight budgets around the country. (He cites his own district in Spokane, but they’ve been going through this in Northampton as well.) This is happening because, despite the best intentions and support of the local communities, the state(s) aren’t funding schools the way they used to. The states aren’t funding education the way they used to because the feds are squeezing the states. No doubt all of you have opinions about why the feds may be putting the budget squeeze to the states and hence to local school districts, and what should be done about it, so I’ll leave you to it; just don’t leave any child behind, OK?

Don doesn’t go for the easy political points, though, and I think that’s a good thing. He points out some realities.

In a way, you can’t blame administrators for making those cuts, since their primary responsibility is academic. Given the choice, is it going to be after-school sports or math? Regular PE or reading-support programs?

But he does get to the good point:

Maybe trimming that fat is seen as creating more fat in the real lives of students.

On that thread, I read an article recently about the Maine laptops-in-schools program. It’s no surprise that they’re struggling to continue funding that program, and some districts have committed to locally funding if the state can’t come through. In a state like Maine, though, for every Cape Elizabeth which can afford the laptops program, there are three districts up in The County which can’t. The reduction in state funding ends up creating an even wider gap between the haves and have-nots than existed before.

The upshot being, if I decide to raise my hypothetical children somewhere I can hypothetically afford to do so, their friends will be fat and ignorant, whereas if I assemble a massive collection of debt, their friends will be healthy and smart.

Now playing: Chelsea Girl from Live Light (France, 11/1994) by Ride

Posted by pjm at 5:00 PM | Comments (0)

Note to self: configuration files

Before ascribing configuration errors and jammed daemons to obtuse or arcane configuration syntax,