Sunday, June 26th, 2011 – 1:39 pm
I received a phone call at work this past week, while I was in the middle of debugging some complicated JavaScript. Usually, my desk phone shows the internal extension that’s calling me; this time, it showed a series of asterisks. Intrigued and confused, I picked it up… and discovered it was a recruiter calling me. Apparently a row of asterisks must be how this phone indicates “Caller ID blocked”. (Now I know.)
The next morning at 7:53, I got a call at home from a number that didn’t report any name. I always let those go to voice-mail. I heard another recruiter leave a message, including “it’s eleven o’clock”.
Two different recruiters in two days, making such elementary mistakes? I’ve been working on this article on the back burner for a couple of years, but it’s obviously time I finished it up and posted it.
Never Call a Prospect At Work
And I really do mean, never. You don’t know if your prospect’s current employer monitors calls. You don’t know if your prospect has already told their employer that they’re looking for other opportunities — but it’s safest to assume that they haven’t, because it is definitely not safe for an employee to tell their employer that. Especially in “at-will employment” states (like California), where an employer can terminate an employee at any time, for any reason or none at all, there’s an all-too-real possibility that the employer will just fire the worker immediately. (I’m not saying this would be a smart thing for the employer to do. And I’m not saying the likelihood is high. But it does exist, and it’s too much risk for the employee to take.)
Telling your employer that you’re looking for a new job can get you canned, posthaste. Having your employer find out from some third party that you’re looking for a new job can also get you canned. You know what’s the one thing that would be even worse than getting fired for being on the job market before you can find a new job? Read More »
Sunday, June 12th, 2011 – 3:14 pm
Before you comment or email me asking how I could have left out AdBlock Plus, FlashBlock, NoScript, Firebug, or Chris Pederick’s Web Developer Toolbar: Please re-read the last five words of this post’s title. If it’s a well-known extension, it’s off-limits for this post. This is about extensions that very few people have heard of, but that more people should have heard of, because they’re so useful.
I’ve tested and made sure that all of these extensions work with Firefox 4.
- NextPlease!
- Go to the next page in a multi-page or multi-part sequence, with a single keystroke (Ctrl-Shift-right arrow). Includes the ability to use any phrase or image found in the page to determine the next/previous URL. This one is pretty handy for dealing with the kinds of sites that break their articles into multiple pages, but it becomes super-useful when you’re trying to catch up on a webcomic. You no longer have to find the “next” link or button on every page; just keep pressing Ctrl-Shift-right arrow and reading new comics.
- Uppity
- This makes a good complement to NextPlease!. Instead of trying to find links within the page to forward or backward, this one look at the page’s URL itself, and makes it easy to move up the directory tree. Press Alt-up arrow to move to the parent directory (or from subhost.domain.tld to www.domain.tld and then to just plain domain.tld), or press Alt-down arrow to see a drop-down list of available shortened levels. This one comes in handy when you follow a dead link and want to try to truncate the URL until you find something useful.
- keyconfig
- Lets you remap what keystrokes are bound to what actions. Since quite a few extensions try to bind to keystrokes, collisions are bound to occur if you have as many extensions as I do. Keyconfig allows me to resolve those collisions. Additionally, just hitting Ctrl-Shift-F12 will give you a dialog box that shows what all your currently active keystrokes are, with the collisions highlighted. Even if you don’t need to change any of them, just knowing what they all are can be seriously useful.
- FoxInput
- Fixes those silly pages that don’t automatically put the focus on the first text field in the form you need to fill out. Hit a configurable keystroke (Ctrl-I by default) to advance forward through all text fields and textarea elements in the page. Very useful on SquirrelMail’s “compose” window, where moving from the Subject field to the Body field would otherwise take 8 repetitions of the Tab key.
- Echofon
- A wonderful in-browser Twitter client. It’s particularly useful if you have more than one Twitter account, because you can have your browser be logged into one account, and have Echofon logged into a different account. It’s also available as a native Mac application and a native app for iPhone and iPad.
- Browser View Plus
- For web developers who occasionally need to check out pages in other browsers, this one is way better than (the rather well-known) IETab. It lets you configure up to 5 other browsers to open things in, then lets you access any of them on your right-click menu.
- JSView
- Another one that’s useful for web developers. Puts a little icon in your status bar that provides a pop-up menu of all JavaScript and CSS files linked to by the current page. Hovering over any filename gives a tooltip with the full URL; clicking on the item opens the file as if you’d done “View Source”, and right-clicking gives you options such as “Copy file URL”, “Open in new tab” (either focused or in the background), or even “Open in external editor”.
The extreme power of some of Firefox’s extensions is a large part of why I haven’t become a Chrome convert yet. With the level of customization that all these extensions allow, Firefox feels like my browser. It obeys my desires much more smoothly than Chrome does. Sure, I have to restart it on occasion… but since Firefox (like Chrome) is a modern, sane application that makes restarts easy, that’s not much of a drawback.
Thursday, May 12th, 2011 – 8:34 pm
And by “long live the PROTECT IP Act”, I really mean, “let’s kill the PROTECT IP Act, as quickly and as dead as possible”.
[Update: At least one petition to the US Congress opposing this bill can be found at Demand Progress; I will update with others as I find out about them.]
Back when COICA was winding its way through legislative committees, Representative Zoe Lofgren (D-CA) gave an interview to Ars Technica, in which she said:
I was in the Congress when we did the Digital Millennium Copyright Act. [The content industry] wanted to go farther; at one point, the original draft outlawed Web browsing, which I thought was interesting. We did the bill, and they’re complaining. It’s what they wanted, but it’s not enough. Now they want to do something else, which is really pretty draconian
Rep. Lofgren also predicted that “if this passes, in a couple years they’ll come back with something even more draconian.” She was mostly right: Even though COICA was killed before reaching a floor vote by Senator Ron Wyden (D-OR), they’re back with something more draconian anyway.
As Wired notes, PROTECT IP, like COICA, would force credit card companies, ad networks, and DNS server to enact the appropriate form of shunning or blackholing against sites deemed “infringing”. Credit card companies could no longer process payments for the site; ad networks could no longer serve ads to them, and DNS providers would have to cease resolving their IP addresses. But PROTECT IP goes further, requiring search engines to censor their own listings. Read More »
Sunday, April 24th, 2011 – 2:13 pm
Back when I got my Palm Prē, I noticed that it wanted to store various of my information on Google’s servers. I thought I’d kept it from doing so; I sure wasn’t using Gmail on a regular basis. I configured the Prē’s email client to check my own account on mactane.org, and I thought everything was fine.
Eventually, I gave up on the Prē and switched to my current, Android-powered Samsung Epic. I figured I was in for a boring day of transferring my contacts over manually… until I discovered that many of them had been synced to my Gmail account, and so they showed up in my new phone without me having to do anything.
Considering all the work I had to go to in order to get my to-do list items, memos and notes transferred over manually… I decided that having stuff transfer automatically was actually pretty damn cool. Since I got my Epic, I’ve been picking “Save contact to Google” whenever I create a new contact. So, if I accidentally drop my phone on the street and it gets run over by an 18-wheeler and then the fragments get kicked into the bay and sink to the bottom, I can just buy a new Android phone and have all my contacts “magically” appear there.
On the other hand, all my contacts are sitting on Google’s servers. Read More »
Friday, April 8th, 2011 – 8:18 am
When a company says “we can’t afford a QA department”, what they’re really saying is, “we accept that our software will be infested with bugs, and quality is not important to us.” When they compound this basic error by saying, “the developers will just have to do their own QA”, they prove that they have no respect for developers or QA people, and you shouldn’t work for such a company in either capacity.
(Of course, a company like that isn’t about to hire any QA testers, so you folks haven’t got the option of working for them. And I’m not a QA tester, I’m a developer. So the rest of my advice is pretty much aimed at fellow devs — but that doesn’t mean I don’t respect you QA folks. Seriously, y’all deserve a lot more respect than you get, and I love it when you make my life easier by finding my bugs for me.)
The skills, talents, and basic mindset that make a good developer are entirely different from the ones that make a good QA person. Asking one to do the other’s job is a mistake as fundamental as expecting graphic designers and accountants to swap places. Let me explain:
Developers hate repetition. We hate having to repeat anything more than once or twice; that’s why some of us become developers in the first place: because we can write programs that automate repetitive drudgery, and hence banish it from our lives. Read More »
Thursday, March 24th, 2011 – 8:07 am
When I was moving beyond self-written AJAX calls and picking up the Prototype and Scriptaculous libraries, one of the best resources I could find was Amy Hoy’s Scriptaculous cheat sheet. It was hard not to find it — or her: Google searches on the things I was dealing with at the time just kept leading back to Slash7.
I was already advanced enough not to need her “What’s AJAX?” cheatsheet, but it was cool that she’d done such a thing. In fact, she had — and still has — a strong streak of “help teach others, so they can get to where I’m at” about her. That’s something I’ve always striven for in myself, but where I haven’t (yet) gotten around to some of the tutorial posts I want to do, Amy’s been nailing that category for over 5 years. And she’s been taking it seriously.
Later on, when I was getting into Ruby On Rails, Amy’s Secrets of the Rails Console Ninjas was an eye-opener… and then there was her other article that assured me that it was okay to ditch WEBrick for Mongrel, and so many others.
But Amy doesn’t just know loads about developing in AJAX, JavaScript, and Rails. She goes beyond the ephemera of coding, delving deeper into the things that make programming matter. She asks (and answers) some of the hard questions about usability, including a pair of my own favorite points on the topic. She knows that software is also political.
And she writes damned well. Her style is clear, crisp, and readable — unlike my own tendency to ramble on and use overly-complicated sentences. (For what it’s worth, I talk much the same way. At least I don’t code the way I talk — honest, I don’t!)
If I can learn from Amy, maybe one day I’ll be as good a blogger as she is. In the meantime, she inspires me to keep improving.
Tuesday, March 15th, 2011 – 7:09 pm
The more stuff you have open (or habitually leave open) in an application, the more it becomes part of your consciousness, an extension of your mind. For many of us, the question “What are you doing right now?” could best be answered by, “Here’s a list of the tabs I have open in my web browser.”
Hackers* use the word “state” to describe “information being maintained in non-permanent memory”, whether that memory is in a human skull or a computer’s RAM chips. In fact, that ambiguity over exactly where the state is being maintained is one of the word’s strengths — as the browser-tabs example shows, there’s getting to be less of a distinction between the two. The stuff in my browser’s tabs is a reflection of what’s in my own brain, and a nearly-seamless extension of it.
Like every other web developer, I recently got a message from Firefox saying it needed to upgrade. (Because security researchers found yet another hole in Adobe Reader.) Despite the fact that I had over a dozen tabs open, I knew I wouldn’t have to worry about performing the upgrade, because Firefox would remember all my tabs and reopen them after restart. It’s basically a momentary hiccup in my workflow; I can start the upgrade and then use that 30-second break to refill my teacup or go to the bathroom. Come back, sit down, close the spare “You’ve just successfully upgraded Firefox” tab, and just keep working.
Compare that with Windows Update.
Read More »
Thursday, March 3rd, 2011 – 9:13 pm
Apparently tomorrow will be the “National Day of Unplugging”, when people who are ready to “take the unplug challenge” will obey the call to “put down your cell phone, sign out of email, stop your Facebook and Twitter updates”. But this isn’t just some kind of stunt or willpower exercise; there’s a point to it. Unplugging is supposed to help people “reclaim time, slow down their lives and reconnect with friends, family, the community and themselves.”
Uh, what?
Let me get this straight: Not posting any updates on Facebook, and not checking my friends and family’s Facebook updates, is supposed to help me connect with them? Turning off my cell phone, and refusing to send or check my email is supposed to bring me more into connection with other people?
What in the world do this event’s organizers think the rest of us are doing with Facebook, with email, and with cell phones?
The organizers are a group called the Sabbath Manifesto, and they espouse ten principles. The first two are “avoid technology” and “connect with loved ones”, respectively.
How the hell am I supposed to connect with my loved ones without using technology? Fewer than 10% of my friends, and absolutely none of my family, live within walking distance of me. (And I’m a fast and powerful distance-walker.) If I drive down the Peninsula, or take CalTrain to go see a friend, that’s using technology. If I quit using technology, I’d have to give up at least 90% of my social circle. Read More »
Sunday, February 13th, 2011 – 1:29 pm
Since two of my friends have bought new Android phones in the past two weeks, I think it’d be helpful if I wrote up a quick guide and some app recommendations for those entering the Android world.
Quick Tips
Android version numbers went: 1.5, 1.6, then 2.0, 2.1, 2.2, and 2.3, and now the latest 3.0 release. Starting with 1.5, releases get code-names that start with successive letters of the alphabet, and which are based on “sweet things” or desserts. 1.5 was Cupcake, then 1.6 was Donut. The “Eclair” code-name is applied to both 2.0 and 2.1.
Most modern Android phones should (hopefully) be using at least version 2.2, “Froyo” — or 2.3, “Gingerbread” if they’re nice and up-to-date. The 3.0 “Honeycomb” release is currently intended only for tablets.
Since there’s no way to right-click on things with a touchscreen, Android uses the long-tap, or tap-and-hold, method. This is probably familiar to Mac users already. Try long-tapping on things; you’ll find a lot of features that way.
The home screen is not just one screen; it’s anywhere from 3 to 7 of them, depending on what particular model of phone you’ve got. Just swipe left and right to access the other home screens. Read More »
Wednesday, February 9th, 2011 – 7:22 pm
When should you ask a user “Are you sure you want to do that?” Bear in mind that asking this question when you don’t have to has more than one bad effect:
- Obviously, it wastes the user’s time and may even annoy them.
- It also contributes to the general problem of “too damned many dialog boxes in computing”. This is subtly but importantly different from the previous point: It trains the user to unthinkingly click the default option in any dialog box, just to keep it from wasting their time.
- Finally, it may actually hinder the user’s ability to leave your program. Look at this page by Joel Spolsky, and search for “exit Juno”. A user thought the “Are you sure you want to exit?” dialog meant that the computer was advising her that there were ill effects from doing so.
Okay, that last one seems like sort of an edge case, right? But even the first two items are enough reason to pay attention to when you should — and shouldn’t — ask the user to confirm something.
My proposal: Only ask a user for confirmation when the action was initiated by a single click or keystroke, and it has some kind of bad effects. Yes, this means that any time you ask someone to confirm whether they want to exit your program, and they have already saved all their work, you just wasted their time. This one’s particularly prevalent in the gaming world, I’ve noticed: Even if you’re in between games, and your scores are all saved — meaning the worst possible consequence of exiting the game is that you’ll have to start the application again — most games will show you a “Do you really want to exit Game Name?” dialog anyway.
MS Word gets this exactly right. If your document hasn’t been changed since the last time you saved it, then exiting the program has no ill effects. If you click the little X, or press Alt+F4, MS Word won’t even bother to ask you “Are you sure?”; it’ll just exit with no muss and no fuss. It’s only if you have some unsaved work that you’ll see the “Do you want to save your changes?” dialog. And if your document already has a filename, Word doesn’t bother to prompt you for a new one; you only get the “Save As…” dialog if the document doesn’t yet have a filename.
The program only bothers the user if it has to; if it can figure things out on its own, it does. Just the way it should be.
If you’re writing another application — I don’t care whether it’s whether it’s a web application, Rich Internet Application, desktop application, or smartphone application — please take a hint from the way MS Word handles confirmation questions. Don’t make your app be the software equivalent of “that guy”.