I’m mostly posting over at log.andrewwooster.com these days.
Archive for the 'General' Category
All the bugs in our group were difficult. One day I was assigned a particularly vexing one. I had shown a knack for tracking down tricky issues, but this one stymied me. I hammered away at the bug but I couldn’t figure out the cause. I couldn’t even think of where to go next. I was petrified.
Read the post, it’s worth it. The moral is, if you need help, ask for it. By the time I was at Apple, this was one of the things we drilled into new recruits, for precisely the reason that it could be paralyzing to be dropped into that environment. The company very much has a Do-It-Yourself culture, but not asking for help when you need it can be paralyzing and demoralizing, and totally unnecessarily so. It’s not a defect to need help once in awhile.
Before they flew east, Alvy and Ed were apprehensive. They had heard strange things about Ross Perot from a credible source, Scott McNealy, the chief executive of Sun Microsystems, a rising young star in Silicon Valley. Scott talked about how he and Ross were supposed to meet at Chicago’s O’Hare Airport to shake hands on a deal. The terms had already been negotiated by their people, but the two leaders had never met in person.
At O’Hare, Ross Perot sized up the younger man and asked: “Are you married?”
“Where do you live?”
That was all Ross Perot wanted to know.
He stormed away. The deal was off.
I heard this story awhile ago, but this is the only reference I can find to it in print.
I keep losing the link to the oddly-named Drunk Men Work Here project. This is, frankly, the best (which in my quirky view is some combination of unique, creative, awesome, and data-intensive) analysis of web spiders I’ve ever seen.
For anyone interested in how to induce the internals of spiders, this is required reading.
Tonight I held my first office hours in Palo Alto at Coupa Café. Office hours are an idea I got from my good friend Buzz Andersen, who held them on a semi-regular basis at The Alembic in San Francisco, and which I endeavored to attend whenever possible.
The basic idea of office hours is that I (or whoever holds them) will be at a certain location at a certain time, and anyone who wants to talk to me, ask questions, etc, can come by and do so. It seems a bit ego-centric, but really I feel that it’s the opposite. I’m interested in what other people have to say, and feel that modern society has disconnected us from talking to one-another on a regular basis in the ways that were previously available. The sharing of ideas that were the foundation of social clubs, pubs, libraries, coffee shop discussions, and even secret societies of say, the 17th through 19th centuries have been eclipsed by water cooler discussions and team meetings. Instead of a roundtable of ideas shared in the open among a group of like-minded people, we have substituted proprietary trade secrets and patent applications, action items and Gantt charts, vapid launch parties and lavish offsites.
I feel that office hours are a good start in getting back to the foundations of the Enlightenment and, with much less importance, our industry. They are a brief pause where we can exchange ideas, talk to each other frankly, share our ideas, and come together in a spirit of pushing society and ourselves further. Many may consider this to be utopian garbage, but even on a utilitarian basis I’ve found office hours to be a welcome break from the hyper-competitive nature of our industry, and an invaluable way to exchange approaches to problems, solutions and expertise, and even industry gossip (*gasp*).
At my first office hours, the topics ranged from iPhone memory management questions to open geodata initiatives to the future plans of our respective lives and businesses. It was a lively exchange of ideas, and one I’m glad to have had. For those of you in the Bay Area interested to coming to my next office hours, I encourage you to follow me on Twitter. For people interested in holding their own office hours, I say, “just do it”. You may just be pleasantly surprised by the results.
Update: Tom Robinson of 280 North suggests using an #officehours tag in Twitter to announce office hours. I think this is a great idea, and will be using this for my future office hours announcements.
I’ve been using Trac for the new projects I’m working on, and am liking it so far. I have, however, done a bit of customization to make it fit my needs a bit better. One thing that took awhile was figuring out how to change the default ticket description.
I like having some structure to my bug descriptions, including steps to reproduce, regression information, etc. Thankfully, Trac’s template system allows you to replace output with an override template (typically found in templates/site.html) that is applied before content is sent across the wire. It was a bit time-consuming to figure out how to do what I wanted to do, but I eventually ended up with a templates/site.html file that looks something like this:
<!-- Custom match templates go here -->
<span py:if="req.environ['PATH_INFO']=='/newticket' and not req.args.has_key('preview')">
<textarea py:match="textarea[@id='field-description' and @class='wikitext']"
Your custom description goes here.
I hope this is useful for someone. 🙂
It’s been a month now since I left Apple to start a company. I’d been working on Time Machine (an interesting and challenging project) as a software engineer, with a fantastic group of people, and was in a situation that was really pretty great. So, why did I decide to leave and go do my own thing? (more…)
In January, I started working as a software engineer on Leopard. I was lucky enough to get to work on two of the top ten features for this release of OS X:
For the past few months I worked seven days a week pretty much non-stop on making the back end of Time Machine faster and more reliable. It was a lot of work, but overall a very rewarding experience, and I’m happy that I got to work on such a kick-ass release of OS X. Enjoy!
Now, I’m off to a beer bash for some much needed relaxation. 🙂
I ran across a couple of variations on the “wet floor” effect today which both introduce a rotating set of images that can be moused over for more information. For lack of a better term, I’ll call this the “Wet Lazy Susan” effect. (more…)
Here’s a snippet from Microsoft’s current corporate home page:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en" dir="ltr">
<META http-equiv="Content-Type" content="text/html; charset=utf-16">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="SearchTitle" content="Microsoft.com">
<meta name="SearchDescription" content="Microsoft.com Homepage">
Download this code: /code/microsoft.txt
Can you spot the problem?
Update: James Booker is the first in with an answer: there are two Content-Type meta tags above, both of which specify different character sets.
Specifying the content-type in meta tags is a bit of a hack, as the browser has to seek through the first section of the document looking for a content-type declaration, then try reinterpreting the page with the character set the page specifies. Specifying a character set of "utf-16" doesn't make any sense in this scenario, as the browser is going to try the sniffing by interpreting the HTML as ASCII. If the page were actually UTF-16, this wouldn't work, as the representation for the string "Content-type" in UTF-16 isn't identical to its representation in UTF-8, as we can see in a Python shell:
Thankfully, the HTML spec foresaw this problem:
The META declaration must only be used when the character encoding is organized such that ASCII-valued bytes stand for ASCII characters (at least until the META element is parsed). META declarations should appear as early as possible in the HEAD element.
So, there are actually three problems with the above HTML. There are two content-type declarations in meta tags, one of them is bogus, and the correct one isn't as early as is possible in the head element. These problems, thankfully, are mitigated by the presence of an HTTP header that specifies the correct character set, and by the incredible amount of effort browser vendors have put into making their code accepting of mistakes such as these.