In case of Wikimergency (removing Wikipedia's blackout)

January 18, 2012 at 02:06 AM | Uncategorized | View Comments

Here's a bookmarklet that will remove the SOPA blackout overlay from Wikipedia:

javascript:(function(){document.getElementById("mw-sopaOverlay").style.display = "none"; var ids = ["mw-page-base", "mw-head-base", "content", "mw-head", "mw-panel", "footer"]; for (var i = 0; i < ids.length; i += 1) document.getElementById(ids[i]).style.display = "block";})()

Or bookmark this link.

Permalink + Comments

On Startups and Identity

October 18, 2011 at 03:18 PM | Uncategorized | View Comments

A curious thing I've noticed recently is that a large number of startups don't include any information about the identity of the founders/employees.

I find this strange because, in my opinion, a big advantage of working with (or using the product of) a startup is that I can get to know the person (or people) behind the scenes. They might even be someone I know, or someone a friend knows.

I would go on, but I would just be repeating what Jason Cohen says in You're a little company, now act like one.

So, if you're part of a startup: please, include your identity and the identity of the other founders/employees somewhere on your website.

Permalink + Comments

What Makes a Good Resume

October 17, 2011 at 09:40 PM | Uncategorized | View Comments

I've read a small but nontrival number of resumes in my life, and each time I've vocalized strong feelings about what makes a resume good or bad.

Some people, presumably mistaking these strong feelings for expertise, have asked me for advice when writing their resume... So I will summarize here the things which I appreciate or despise while reading a resume.

Disclaimer: these are just my feelings. It's likely that people similar to me will have similar feelings, but it's unlikely that someone like me will be the first one reading your resume.

For many positions a non-technical recruiter or HR person will be the first to see your resume. They will likely apply naive pattern matching against a given set of buzzwords to determine the quality of applicants, so a section containing buzzwords and synonyms (ex, "Python, CPython, Django 1.3, Django 1.2, Django forms, Django admin, AJAX, ...") would likely be helpful (although, again, I can't speak with authority as I'm not a non-technical recruiter).

Steve Hanov has a comic that might be helpful.

As I'm looking at a resume I'm trying to answer three questions: what does the applicant know? How well do they know it? Would an interview with this applicant be a waste of time?

Some of the things I like to see are:

A summary of skills, programming languages and tools sorted by experience. I can't count the number of times a applicant includes a list like this on their resume:

Programming languages:
Python, Java, C/C++, Objective-C, JavaScript, C#, Visual Basic, HTML, CSS, Perl, Scheme, ML, Prolog.
Tools:
Make, Vim, Emacs, Word, Power Point, Terminal, Linux, Firefox, Flash Player.

This kind of list is absolutely useless. Actually, no, that's not true. It's very useful. It tells me that the applicant doesn't feel the need to distinguish between their knowledge of Prolog and their knowledge of JavaScript, and they think C is similar enough to C++ to warrant listing them together.

A list ordered by experience is much more useful. For example, my list might look something like this:

Programming languages:
Python (5 years, 50k SLOC), ActionScript (2 years, 20k SLOC), JavaScript (5 years, 5k SLOC), HTML+CSS (5 years), C (2 years, 2k SLOC), some knowledge of PHP, Scheme, Haskell, and ML.
Tools:
Vim (6 years), Bash (4 years), POSIX shell environment and utilities (4 years), Linux (8 years, mostly Debian and server administration), Mercurial (3 years), git (1 year).

Alternatively, the headings "most experience with" and "some experience with" could be used, as they give some idea of both expertise and breadth.

It's also worth noting that, at least in students, self assessment of knowledge is useless, so when I see "export" or "very good" in a resume I mentally replace it with "dangerously ignorant".

https://img.skitch.com/20111018-cct5dckmiwpi2tg8a3r12mtket.png

Relevant links. I feel like this should go without saying, but I would guess that less than 10% of the resumes I have read included any kind of link.

I appreciate any links to a applicant's online presence: a blog or personal website (if it has been updated in the last five years) is good, and an account on GitHub, BitBucket, StackOverflow, Reddit or other social site would be even better. It's hard to convey interpersonal and communication skills on a resume, but social sites serve as a good way to demonstrate those skills.

And a corollary which, based on experience, isn't as obvious as you might expect: irrelevant links (for example, to a "home page" without any interesting content) are worse than useless - they waste my time and make the applicant look silly.

Length. I don't care. After the summary of skills, languages and tools I'm usually skimming for interesting things... And if the applicant has three pages worth of interesting things, I would like to read those three pages. But if the applicant has three pages of boring things, I will probably skim the second and glance over the third.

Relevant work experience. And, more specifically, specific work experience. A statement like "worked on a team" or "helped implement" isn't as helpful as "wrote server-side JavaScript" or "designed the database schema". Also, while others might, I don't care about unrelated work experience.

It's also useful to include the technologies used at a job. For example: "MegaCorp - 2001 - 2003; - Designed database schema to optimize sale transactions; - Performed A/B testing to optimize widget sales; Technologies: PostgreSQL, PHP, libABTestOMatic"

School. As a university dropout, I'm a bit biased here, but I care very little about school or degrees unless they are directly relevant to the job at hand. For example, if I the position I'm hiring for would benefit from a strong knowledge of a particular academic field, formal education in that field would be important... But, in general, I haven't found formal education to be very important for the types of programming that I do, so it's not important to me while I'm hiring.

Look, feel and other little things are important too. Not in the it-needs-to-look-pretty sense — I don't have any problem with a bland resume written in Word — but in the fanatic-attention-to-detail sense. I want a programmer who cares as much as I do about consistency, attention to detail and never, ever, under any circumstances using tabs and spaces interchangeably. If an applicant's resume has bullets that don't line up, text in random fonts and obviously missing punctuation, I'm going to assume that their code will look similar.

Cover letters. I have read one or two very good cover letters where the applicant gave specific reasons they were interested in the job and why they would be worth my time to interview. They were short, to the point, and distinctly lacking in phrases such as "I would make an excellent …". I appreciated these cover letters. I have skimmed and subsequently ignored all other cover letters.

tl;dr: I want a resume to show me in as much detail as is sensible what the applicant has done, what they know, and why they are a good programmer. Bonus points for interesting content and links to social sites like StackOverflow or Reddit.

PS: My startup is (or will in the near future be) hiring! If you're interested in working for a Toronto based startup which employs incredibly brilliant people, uses a lot of Python, produces a real, physical product, and pays real, actual money, send me an email: david@wolever.net.

Permalink + Comments

RIM: did you just tell me to Google 'you do not have write permission'?

July 28, 2011 at 11:41 AM | Uncategorized | View Comments

Background: I have been trying to develop for the PlayBook, and I have run into silly, time-consuming problems at every step. I have sent some of these errors to @BlackBerryDev, and have received generally unhelpful responses (for example, see my message, RIM's reply, my reply, RIM's second reply)... But the message I received today deserves a response longer than 140 characters.

My initial message was:

@BlackBerryDev eg, BS unhelpful errors like this: http://twitpic.com/5u4sco

https://twitter.com/wolever/status/94496389471539200

And @BlackBerryDev replied with:

@wolever This error is a common mac permissions error, not specific to our tooling. Check [http://www.google.ca/search?q=%22You+do+not+have+write+permissions...] for examples ^SA

http://twitter.com/BlackBerryDev/status/96594875293761537

And this is my reply to the above:

As you have apparently never debugged a permission error before, ^SA, so let me tell you how it works.

When sensible software can't write to a file or directory, it includes a full path to the file or directory in the error message. Using this information, it is possible to example the file or directory in question and determine the correct course of actions (for example, changing the permissions).

However, the shitty InstallAnywhere software used by the PlayBook SDK is, unsurprisingly, not sensible. So when it encounters a permission error, its error message does not include any such information. In fact, the only hint about the install directory I'm given is that it's:

Inside "Research in Motion" on the folder "SDKs" on the disk "Enoch".

Which makes the permission error impossible to debug without something like an install log.

But I don't know where the install log is (if it exists), and frankly I don't care.

What I do care about, though, is that you have sent me a link to a Google search (without even using lmgtfy!) that you clearly haven't looked at (because if you had, you would see that 1/3 of the results are Linux-specific, 1/3 of the results are the file which defines the error message, and 1/3 of the results are mirrors of the same message, which suggests a simple “fix permissions” (which, by the way, would not, and did not, fix the problem).

So, @BlackBerryDev: if your future messages will piss me off and insult me in the same way that these messages have, I would rather you simply didn't respond to me at all.

And, while I'm standing on my little soap box here, I'd like to send RIM a small message too:

RIM,

It seems obvious to me that the only way you will be able to get on top is developers... But, at the moment, your development experience is terrible. Just ask anyone who has tried to develop for the PlayBook.

Fortunately I also know that you have the skill in-house to improve on this. You know those TinyHippos guys you recently acquired? They know what they're doing. Listen to them. If they suggest crazy things like sending both signing keys in one email (instead of two identical emails), do it. If they suggest getting in bed with Adobe and VMware so PlayBook developers can start developing without spending hours creating accounts and downloading demos, do it. Do whatever it takes to make development easy and painless.

Want some other starting points? Here's what I've complained about on Twitter (static mirror). Put more people behind @BlackBerryDev so they can reply quickly and helpfully. Make it possible to get developer signing keys instantly. Etc...

I would really like to develop for the PlayBook. I really would. But as it stands, I've spent three hours dealing with the kind of crap I've documented above for every hour I've spent writing code. And that's just no fun.

—David

Permalink + Comments

Running Multiple Firefox Profiles for Fun and Profit

July 10, 2011 at 01:07 PM | Uncategorized | View Comments

For a long time I have found it useful to run three (or more) different browsers: Safari for my day-to-day browsing, Firefox for my development work and Camino for Facebook and Google apps. This separation is part pragmatism – it's useful to clear cookies or disable FlashBlock while I'm developing without my main browser being affected – and part paranoia – I'm not logged in to Facebook or Google on my main browser, so it's harder for them to track me and I'm less likely to be hurt by a cross-site-scripting (or similar) attack.

Recently Safari's memory leaks [0] and the launch of Firefox 5 have pushed me to re-evaluating my browser preferences... And this is the result:

/uploads/FirefoxIcons.png

Three customized versions of Firefox and three profiles to match.

The customizations are straight forward:

  1. Firefox.app was copied three times, and the name was to the role of that copy (“Browsing.app”, etc).
  2. The icon was changed on each app.
  3. The CFBundleName in $NAME.app/Contents/Resources/en.lproj/InfoPlist.strings was changed from “Firefox” to $NAME (changing the application name which appears in the top left corner of the screen).
  4. After the “Browsing” profile was setup (correct plugins installed, etc), it was copied twice to create the “Dev” and “Facebook” profiles (profiles are stored at ~/Library/Application Support/Firefox/Profiles/, and the profiles.ini file, in Application Support/Firefox/, must also be updated).
  5. A persona was added to the “Facebook” and “Dev” profiles (specifically a pastel sky blue and pastel mandarin).
  6. NoScript was installed on the “Facebook” profile (for a little bit of added paranoia).

With these customizations, it's easy to visually distinguish between the browsers, both from the main windows:

/uploads/StackedBrowsers.png

And from the dock/command+tab application list:

/uploads/BrowsersDockView.png

And that's my current browsing setup :)

[0]it would be using almost a gigabyte of memory, even if I only had one or two tabs open.
Permalink + Comments