« | » Main « | »

We're hiring

Monday 27 February 2006

My boss and I are looking to hire another engineer to join our six-person team.


  • You consider writing software both a job and a hobby. You believe building cool products is the most fun you can have with your clothes on.
  • You are good at in-depth debates of the merits of various tools and frameworks, but equally good at getting on with the work at hand. You sweat over the best way to modularize your code, then make a quick decision, implement it, and move on to the next task.
  • You understand the value of process, and also the value of winging it, and are willing to adjust as needed.
  • You aren't afraid to work on a product with a thriving marketplace of competitors, because you know how you would improve each of them, and can't wait to get started.
  • You can take quick direction and get the job done. You are a source of calm.
  • You are passionate about the web and the personal publishing revolution that is embodied in all the tools (blogs, wikis, flickr) that make it really easy for people to share content online.
  • You are a hacker in the traditional sense of the word (see Hackers and Painters).
  • You are detail oriented, whether it is about pixels, performance, prose, progress, or purity.
  • You thrive in small teams, and will do what it takes to make them succeed.
  • You don't want to be the smartest guy in the room, because then you don't learn anything.
  • You can work in Python, JavaScript, HTML, CSS, and all that other good stuff. Even if you aren't an expert, you can learn what you need. When asked "Can you fly a helicopter?", you answer, "not yet".

Us: all of the above, plus we work in the Boston area using Django, building a cool Web 2.0 product that will be a hit.

If you are interested, drop me a line, even if you don't think you are qualified. True story: last time I posted a job here, a friend read it and thought, "I'm not qualified." Then we hired him through a head-hunter and had to pay a big fee. Don't pre-judge yourself!

Microsoft iPod packaging

Monday 27 February 2006

This video is a parody, but it hits the mark dead on: Microsoft iPod packaging parody. It's a perfect spoof of the failure to value simplicity. The beauty of it is that you can't quite identify the point where it becomes absurd, where even a big company full of committees wouldn't take that step, but by the end, they have clearly sunk the product with their stupidity.

The video is full-screen so that you can see the details.

I'm back

Monday 20 February 2006

It looks like my domain is back on the air for good. For about the last day, it looked like this:

Crappy portal page at nedbatchelder.com

In the end, the eNom.com support people were quite friendly and helpful. When I called during their business hours I always got a person in a minute or two, and they always moved the process along. To get the domain name up fastest, I renewed it with eNom, which costs three times as much as other registrars, but at least I'm online again.

My email wasn't flowing all day either, but it seems to be coming in now, including all the messages that didn't make it earlier, so I don't think there was an interruption in the long run.

I learned some good lessons:

  • Don't assume that your service provider has your (or their) best interests in mind. For example, don't assume they'll send you a renewal notice.
  • Don't assume that a support ticket will result in a notification email when it has been updated. Poll on your own to see when something has happened if you really feel urgent about it.
  • Don't believe all the bad things you read online. Somewhere someone complained that eNom's support phone always rang into voicemail. It doesn't, but I didn't call for most of Friday because I assumed it would be fruitless.
  • Don't register a domain with an email address at another registered domain. You end up with a house of cards falling onto your head. Use a yahoo.com or gmail.com address, so that you will always have it available for responding to registrars while the rest of your online world is evaporating around you like a mirage.

About that portal page: For about 10 seconds, I thought about redesigning my site to mimic it, but redesigning isn't something that I do. An odd thing about that page is that the top link on the left-hand sidebar ("Batchelder" in the image) would sometimes change to two links in the list, "Batch" and "Elder". I guess they're trying out two different possibilities for what the word "Batchelder" might mean to the traffic arriving at the site.

One last appearance of JumpDomain in all of this: about 1:30 this afternoon, I got an email response to my JumpDomain support ticket that I wrote at 7:30 Friday morning. I chose not to follow up. I'm through with JumpDomain. A 3.5-day turnaround time for an urgent support call is not my idea of service.

It will probably be dark for a while

Saturday 18 February 2006

I'm a lot more optimistic about my domain name than I was yesterday. I spoke to a support guy at eNom.com, and he thought it would be a simple process to unlock the domains and get them transferred. There are grace periods, so it isn't the imminent crisis it had seemed yesterday. Thanks to all who helped, publicly or privately, those leads definitely got me from panic mode back onto a productive track to solving the problem.

But the domain will expire, and will likely park to a bogus portal page, and my email will stop being delivered. I'm not going to bother posting to a new URL, I'll just take a breather for a little while. If you need to get email to me, send it to Gmail, where my account name is ned and then bat.

See you on the other side.

Say goodbye to nedbatchelder.com

Friday 17 February 2006

Through a series of missteps, this domain name is due to expire on Sunday, and I cannot seem to get in touch with the current registrar. I've initiated a transfer to another registrar, but the status is set to Locked, so I don't think it will succeed. I fear the worst. One of the reasons the domain is expiring is that I did not receive the usual "your domain is about to expire" emails from the registrar. Their "forgot password" link doesn't seem to do anything. Wish me luck. If anyone's got any ideas about how to rescue a beloved domain name from the horrors of incompetent registrars and malicious squatters, please chime in.

Juggling to the Beatles

Thursday 16 February 2006

One of the frustrating things about juggling for an audience is that they are only interested in numbers. If you juggle three balls, they'll ask if you can do four. If you can do four, they'll ask if you can do five.

In his Must-See Finale, Chris Bliss juggles only three balls. But he does so with a huge amount of panache. He uses at least a couple dozen different tricks, and synchronizes the whole thing to the finale of Abbey Road. It's proof that even three balls can be done expertly.

Spelling words

Thursday 16 February 2006

My second-grader showed me his spelling words book. He has to write sentences using the words, and underline them. From the first entry back in September, a classic:

Where's their head?

There's their head!

They're headless.

Things that bug me about two-dimensional programming

Monday 13 February 2006

I'm doing a lot of coding these days involving XY coordinates, and there's a handful of little annoyances. They're no one's fault, I just want to vent.

First, it's natural to say "x and y", and it's natural to say "height and width", but x corresponds to width, and y to height, so I often make mistakes that switch the two:

ht, wd = foox, fooy   # This is wrong.

The same goes for loops over x and y. The natural order to visit the points in a grid is the raster order: finish a row, then go on to the next row. But that means having the first loop be over y rather than x:

for y in range(lowy, hiy):
    for x in range(lowx, hix):
        do_something(x, y)

For this last, there's a solution: create a generator that makes x,y pairs in a single loop:

def xyrange(startx, endx, starty, endy):
    """ Generate the pairs (x, y) in a rectangle.
    for y in range(starty, endy):
        for x in range(startx, endx):
            yield x,y

Then this function is the only place that needs the inside-out y x ugliness, and you can use a single loop everywhere else:

for x, y in xyrange(lowx, hix, lowy, hiy):
    do_something(x, y)

This has the advantage that you can break out of the loop cleanly when you find a point you are looking for. It has the disadvantage that you can't do an action at the end of each row.

Update: Richard Schwartz noticed that I originally had said,

First, it's natural to say "x and y", and it's natural to say "height and width", but x corresponds to height, and y to width, so I often make mistakes that switch the two.

which makes that sentence itself an error of the sort it describes, making it an unintentionally self-referential sentence!

United dragon ad

Monday 13 February 2006

I really like this Dragon ad by United Airlines. The feel is very warm. It shows a dad heading off to do business battle, and returning home to his son. The Making Of video is also good. The director says it's the boy's imagination about what his dad does on a business trip, but I saw it more metaphorically.

I have to use my Gmail account in Google Groups?

Saturday 11 February 2006

Now that I'm using Django, I've been reading the Django users mailing list. Google Groups is great (even though it is still in Beta, whatever that means after five years). But I can't figure out how to subscribe to the list with anything other than my Gmail account. I don't want to use my Gmail account, it isn't the email address I want advertised to the world. Does anyone know how to break out of Google's increasingly tight grasp?

Autism Saturday

Friday 10 February 2006

On the weekends, I spend a lot of time with my son Nat, who is autistic. In our division of labor, I do most of the outside activities with Nat, and Susan does most of the dealing with doctors, teachers, specialists, service providers and the like. Nat also participates in a number of Special Olympics sports (he's the only one of my three sons who likes sports, so as Susan quips, "At least one of my boys is normal!"), so there's a lot of time on weekends going to practices. Last Saturday was a bit unusual, though.

» read more of: Autism Saturday... (32 paragraphs)


Friday 10 February 2006

Zillow is a real-estate information site. In particular, it will give you an estimate of how much a house is worth, given its address. It's very impressive. Not only do they have tons of accurate information about houses, but they also have historical information, so you can see what a house sold for, and when, with a graph of its estimated value over time. It says my house is stucco when it is actually shingle, but I can only assume that this is an inaccuracy in the data from the town.

It's from the same guys that started Expedia, so they have some experience disintermediating professionals. "Disintermediating," I haven't said that in a while, how late 20th century of me!

Coolest feature: an aerial map of a neighborhood, with prices overlaid all the houses. Most annoying feature: they've overdone it with the whole "z" thing. Estimates are called "zestimates" (TM!), and the URLs end in a ".z" extension.

Typographically most annoying feature: To label themselves as being in beta, they've put the word "Beta" in their logo, and the designer tried the cute trick of using the greek letter Beta for the B. Except they've used a German double-s instead:


The German double-s is actually a lowercase letter, a ligature of a long s and a normal s. The long s in turn is the letter that everyone thinks is an f in old-fashioned texts. You know, like at the top of the Bill of Rights, where it says, "In Congrefs". So we have confusion piled on top of confusion, and Zillow seems to be in sseta (with a German accent).

Usability testing on the cheap

Wednesday 8 February 2006

You've built a product. You think it is ready for real users. How do you find out? You do usability testing. This is a specialized discipline, and there are specialists out there who know what they are doing. You should hire one of them to do usability tests on your product. They will do a much better job than you can, and you will get much better results. But if you can't, you can do your own usability testing. I've written up my understanding of the subject: Usability testing on the cheap.

PCG: Cog in Perl

Sunday 5 February 2006

Jeremy Shute wrote me to say that he like the idea of my Cog code generator enough to reimplement it in Perl: PCG :: The Perl Code Generator.

Jeremy also sent along an elisp snippet to get Emacs to run Cog interactively, handy during development of the code generators:

;; COG stuff.
(defun cog-buffer ()
  (call-process "cog.py" nil "*Messages*" nil "-r" (buffer-file-name))
  (revert-buffer nil t))
(global-set-key [f5] 'cog-buffer)

Copper comic

Saturday 4 February 2006

Kazu Kibuishi draws a charming and lovely comic called Copper, as well as many other comics, and graphic novels like Daisy Kutter, which is on the ALA's 2006 list of best books for young adults.

A nice sideline about Copper is Kibuishi's detailed walkthrough of how he creates the comic. I'm fascinated to see how professionals do their work. It involves a meticulous attention to the details of tools (he describes precisely which pens and inks he uses for the different phases of drawing), a revealingly low-tech approach to some aspects (laying out panels: "I just eyeball it to save some time"), and the always-familiar tricks to make progress:

I also round the corners after I'm about halfway done with the drawings. For some reason, doing the corner-rounding gives me a sense of accomplishment and helps get me pumped to finish the rest of it. It's all about inspiring (or tricking) yourself into getting things done, I suppose...

Also refreshing is seeing that a guy who draws this well can hold a pencil so "incorrectly". He's like the Dizzy Gillespie of sketchers.

« | » Main « | »