Nov 30, 2007

What's in it for Me? How Your Company Can Benefit From Open Sourcing Code

One of Ben and my latest Google tech talks is now up on YouTube. It's not as fun as our Poisonous People talk, but it's sort of a sequel as it continues to talk about social issues and open source, but aimed more at companies and organizations looking to open source code.

The abstract for the talk is:

As the open source community continues to clamor for more companies to open source their code, more and more executives are asking themselves just what open source can do for their company. There are a number of ways for a company to open source an internal project: from tossing code over the wall on the one hand to running a fully open development project on the other to any combination of the two.

This talk will discuss the costs and benefits associated with each method as well as how to successfully launch your new open source project.


You can also grab the slides.

Nov 28, 2007

The Art of Storytelling

I love stories. When I choose books or authors, I lean towards science fiction, but if I know that an author is a good storyteller, I'll read just about anything that they write, up to and including dishwasher manuals. I love the feeling of being carried off by a good story, regardless of length—I'll tend to lose track of all time when absorbed in one, forgetting to eat, drink, and even fending off sleep as long as possible. I also love telling stories, but that's a story for another time.

Fifteen years ago when I lived in Rome, a friend offered me his entire Stephen King collection if I would read the first 100 pages of Lord Foul's Bane, the first book of The Chronicles of Thomas Covenant, the Unbeliever trilogy (which actually had a second trilogy after the first). Given that English books in Italy were a commodity more valuable than gold, I gladly took him up on his offer. I mean, how bad could 100 pages of any book be?

Well, it turned out that it was pretty bad—the story was extremely slow to advance and the main character did something so totally reprehensible that I really didn't think I wanted to read any further since I hated what he had done. Yet, greedy for over a dozen Stephen King books that I hadn't read (and King's early stuff is some great storytelling), I trudged on, taking almost eleven days to read up to page 90.

Then something happened. The author finished his lengthy introduction and, with the stage set, he took off with an incredibly compelling story. I realized that the awful thing the main character had done was vitally important to understanding his weaknesses, his guilt, his conscience, and above all, the inner pain and conflict that made him who he was.

I read the rest of the book and both trilogies in one week.

Six books—over 3,000 pages— in one week. I pretty much did nothing but read, sleep, eat, and drink (in that order) for the duration, and when I came out of my reverie, I felt like I'd been on a year-long vacation. I'd practically lived the life of a fictional character for seven whole days of my life.

So I often look for new and interesting stories, and every so often I find one that really grabs me by the shoulders and engages me, for however briefly. And in fact, the tiny gem that brightened up this dreary Chicago November day was a blog post from a fellow Googler in Australia, titled Engineers should not wear suits, and it started like this:

It's against the laws of nature. If God had wanted engineers to wear suits, he would have given us social skills and motor coordination. I violated this law on Tuesday night, and woe befell me.


And with that, he had me hooked. I was dying to find out where this was going, and even more thrilled when I got there. Click through to read the rest.

Nov 18, 2007

Reason #891 I Don't Miss Condo Living



The Marina City Towers Condo Association in Chicago aims to require permission for anyone to use the likeness of their building:

"Because of the architectural significance of our building, the Condominium Association holds a common law copyright on the use of the Association name and building image. This means that under Federal and Illinois law, advertisers, movie makers and others cannot use the Association name or image without first obtaining express written permission from the Association ..."


They've left the wording unchanged, but apparently their lawyer claims these rights under trademark law (uh-huh) instead of copyright law (after all, copyright law is federal, and doesn't restrict pictures taken from public land). Whatevah

I walk (or roll) by Marina City every day on the way to and from work, and I can't wait to take some pictures of the buildings (which I absolutely love, architecturally) and post them here.

Morons.

Photo by Ashley Crum

Oct 5, 2007

Poisonous People in the Wild

My fellow conspirator Ben does an excellent analysis of a poisonous person who showed up on our doorstep just a few days ago.

Sep 24, 2007

Dear NBC...

"I think you’re going to have your ass handed to you."

-Chris Breen, September 2007


I was considering writing about NBC's decision to pull their shows from iTunes and offer them "free" (on Windows platforms only, naturally), but Chris Breen's beat me to the punch. His blog post is called Network dreckwork. I highly suggest that you read it.

Sep 16, 2007

Sometimes you just gotta tell someone

While I was away from my computer, I got this IM from a friend of mine who's living in Beijing for a few years:

Dude. I just had to say hi to someone from my cracked iPhone from the back of a cab in Shanghai using edge with my Chinese sim. Sweet.

I'm using a native chat client.


That rocks.

Sep 7, 2007

OOXML Rejected by ISO

As I'm sure you've heard by now, the International Organization for Standardization (ISO) has failed to pass Microsoft's Office Open XML "standard" through "fast track" approval. I'm glad to hear this because there are a lot of scary criticisms out there of the OOXML specification.

It's a six thousand page specification. Yes, you read that right: six thousand pages. Through "fast track". Uh-huh.

Anyway, lots of people are celebrating this triumph, but just remember that this is a battle won, not the war. I've decided to dust off my wet blanket and toss it out there because:


  1. A lot of very smart people work at Microsoft

  2. They learn from their mistakes

  3. Just like the Terminator, they'll be back.



They might not be back with OOXML, but they won't just give up and go home.

Aug 31, 2007

The Surreal Life

Yesterday was a pretty surreal day. Everything was fairly normal until late in the afternoon when John told me that Don King was coming over to the Chicago Google office with his son, Carl King, and a few other folks for a visit. While I was expecting a fantasticalicious whacktasticatudinous time, with possibly a few fights breaking out at the weigh in, what actually happened was much more mundane. Don and Carl and the guys were very low key, super friendly, and overall quite interested in all the cool stuff that we do at Google. I just about passed out laughing when Don pointed out that the picture on his Wikipedia page wasn't of him, but of a wax replica of him at Madame Tussaud's Wax Museum. Priceless.

Don even stood patiently while we got some photos in front of the big Google logo:




Now that's what I call an outrighteously sparklicious Americaneriffic jacket.

[Thanks to Rachelle for hanging out with us and taking the photo above]

Aug 20, 2007

Moglen Takes Aim at the other Foot

If it wasn't enough that Stallman shot the Free Software Movement in the Foot last month, Eben Moglen (former general counsel of the Free Software Foundation) put a bullet in the other foot of the Free Software Movement at OSCON last month. Tim O'Reilly had invited Eben to talk about free software licensing in the Web 2.0 era and Eben gave Tim a tongue lashing. For an encore, he took the opportunity to alienate thousands of open source developers when he told Tim:


If you hadn't taken this whole long 10 year wasted detour, talking about Open Source instead of concentrating on concepts of freedom we could have had the conversation you and I are about to have now... 10 years ago when you started this whole long deviation which is now coming to an end.

So what we want to have now is a philosophic discussion. spread this Open Source nonsense over to the edge, and say now we're talking about what freedom means...


(Emphasis mine)

Riiiiiiiight... Insulting me and ridiculing what I believe in is a sure-fire way to bring me over to your side of the argument. As with Stallman, it boggles the mind how someone so obviously brilliant could be so completely egocentric. Those two deserve each other.

Aug 13, 2007

Schadenfreude

Schadenfreude n. German. Pleasure taken from someone else's misfortune.

I'd be lying if I said that I wasn't jumping with joy at SCO's stock derailing at the announcement that they don't even own the copyrights to Unix. Their stock dropped 71% today:



And now I'm off to break open the champagne.

Progress Takes Many Forms

In 2000, when I first started hacking on Subversion, it took almost 10 minutes to build Subversion (way pre-0.17) on my weak old Pentium II whitebox PC.

Just now I built Subversion 1.4.4 on my Macbook Core 2 Duo in 2 minutes flat.

That rocks.

Jul 31, 2007

OSCON 2007 Presentations

I had a blast at OSCON this year. Portland was, as always, a fantastic city, and I really enjoyed catching up with what I call my "second family" of conference friends that I see several times a year.

Ben and I gave three presentations this year, and they were all well-received. As promised, here are the slides for each presentation (in PDF format):


  • Our ever popular How to Protect Your Open Source Project from Poisonous People. It was well-received, but after a dozen or so times giving this talk, I think we're about ready to retire it. You can also view the video if you missed the talk. It's a really useful talk if you're working in an open source community.

  • We had a lot of fun giving Subversion Worst Practices, which was a tongue in cheek answer to our "Subversion Best Practices" talk that we gave last year. This talk was an absolute blast to give, and the audience really seemed to enjoy it, even though we (sneakily) tossed in the actual best practices for each worst practice.

  • Lastly, my favorite talk was What's In It For Me? How Your Company Can Benefit from Open Sourcing Code. This talk provided some reasons for a company to run an open source project in a true collaborative fashion as opposed to dumping code over the wall. I had some great post-talk chats with some of the attendees and I'll be refining some of our arguments for a future re-presentation of this talk. I'm hoping that Ben and I will get a chance to get this talk up on Google Video as well.



So that was OSCON 2007. I really enjoy co-presenting with Ben, and we've now co-presented over a dozen talks. We've actually gotten to a point where we not only finish each other's sentences but sometimes even provide words in the middle of the other's sentences. After our last talk, Cat Allman asked us if we'd be offended if she called us "Frick and Frack" (after Click and Clack, the Tappit Brothers on Car Talk). All I can say to that is:


Don't code like my brother!

Jul 11, 2007

Interview in the Chicago Sun Times

The Chicago Sun Times interviewed me for their "What's my line" feature today. I'm pretty happy with how it came out except for the fact that it goes on and on about how much I like Chicago's architecture , lake and weather, making no mention of the fact that I met my wife here.

It's not a problem really—nothing that a few years in the Witness Protection Program can't fix.

Jul 5, 2007

Stallman Shoots Free Software Movement in Foot. Again.

For years, Richard Stallman has tirelessly worked to advance the Free Software movement, but I wonder if he understands just how much irresponsible accusations like this harm the very same movement that he works so hard to help. From emacs-devel@gnu.org (emphasis mine):



We did not switch to Subversion because the people who develop Subversion are not sympathetic to the ideas of the free software movement. That is a sufficient reason, given that CVS works fine.


See the full thread here, and don't miss Karl Fogel's response as well as Jim Blandy's response (Karl and Jim are two of the founders of Subversion).

As a Subversion developer and an advocate of both open source and free software, reading this kind of crap from Richard makes my blood boil. More importantly perhaps, it makes me want to remove the words "free software" from my vocabulary.

Richard, if you really want to help Free Software, you might want to leaf through a copy of "How to Win Friends and Influence People", because you sure aren't winning any friends right now—in fact, you're in danger of losing the ones you've had for years.

Jun 28, 2007

Whew

It's been an amazing six days: I started with FOO Camp, flew back to Chicago, moved into our new office, and had the grand opening for the office, and just now collapsed into a heap. It was quite an awesome ride:


FOO Camp was, of course, fantastic--I went to some great sessions, saw old friends, had many hallway chats with new folks, and gave my own talk on why consensus-based "open development" is so important to open source. Oh, and of course, I played werewolf until the wee hours of the morning every night. I think I slept a total of about seven hours all weekend because I just didn't want to miss anything.


Our new office in Chicago is great--we've now got twice the space, and that includes a dedicated engineering area, which I'm excited to share with the folks from Feedburner (and I've never seen so many Noogler balloons in one place!). And to top it all off, I've got an 8' tall x 30' wide whiteboard wall right by my desk. Oh yeah.


We rounded off the hubbub with the "official" grand opening of our engineering office in Chicago which included a riff on the Taste of Chicago with our "Taste of Google" lunch and, of course, Chicago Google t-shirts for everyone. I'll try and scrounge up some pictures when I get a chance, but for now, it's time to get back to catching up on my sleep.

Jun 22, 2007

Change is Good

Even though I've typed exclusively on a Maltron keyboard for almost ten years, I'm about to change to a different keyboard. While the curved "bowls" of keys on the Maltron are quite comfortable, and I've gotten very used to the "Malt" key layout, I'm in the process of switching to a Kinesis Advantage USB keyboard using the Dvorak key layout. Here are the pros and cons as I see them:






Maltron Pros


  • Comfortable keyboard layout
  • I type about 85-110wpm on it
  • I have three of them (2 PS/2 and 1 ADB)
  • Like an old friend
  • Weird design freaks people out
  • QWERTY and Malt key layouts


Maltron Cons


  • Keyboard has weird bugs--certain key combinations flip CAPS LOCK on, keys repeat or get stuck on occasion
  • Keyboards don't feel very sturdy
  • New Maltrons (USB) have different physical key layout, which means if I buy one new one, I need to buy three new ones as I can't deal with slightly different layouts. The physical layout has already changed once in the past. :-(
  • $500 price tag
  • I really need to buy at least two new ones




Kinesis Pros

  • Even more comfortable key layout
  • Slightly less weird design still freaks people out
  • Does Dvorak and QWERTY
  • Well made
  • USB Native
  • Lack of keypad makes it easy to mount a touchpad in the middle of the keyboard
  • $300 price tag (still, ouch)
  • If I learn Dvorak on the Kinesis, I can probably pick up Dvorak on a flat keyboard pretty easily
  • If I learn Dvorak on the Kinesis and a flat keyboard, I don't have to drag my huge keyboard with me on road trips
  • Got one at the office
  • Only need to buy one


Kinesis Cons

  • I can only type 32wpm on it so far
  • I don't have three of them
  • Not wired into my brain for emacs keybindings


So I'm switching to the Kinesis soon and my goal is to do it by July 19th (my next road trip that I'll need to do a fair bit of typing on). When I switched to the Maltron so many years ago, I taped a layout of the keyboard to the top of my monitor and spent an hour a day for two weeks typing in correspondence to get the hang of the keyboard. After that I switched to Maltron at home for two weeks, went on vacation for a week, then switched to Maltron at the office. It was a pretty painful transition with several extremely frustrating days when I was only typing on the Maltron.

So in the interest of avoiding a ton of pain and suffering by just switching cold turkey to the Kinesis, I'm spending 15 minutes a day with Ten Thumbs (which I bought many years ago) until I get my speed up to 50wpm on the Kinesis, which seems likely to take me another three weeks or so. I'm hoping that by the time I get to 50wpm, the cost of switching won't be quite so high as I'll at least be somewhat familiar with the keyboard.

So here's hoping... now if only there were a way that I could get Ten Thumbs to test me on my emacs keybindings...

Jun 6, 2007

If you use Gmail and Firefox, this could change your life...

[This is for people who are keyboard shortcut junkies. If you like to mouse around, you might want to skip it]

It's a five-step process:


These scripts were written by the amazing Mihai Parparita. Thanks Mihai!

Jun 1, 2007

May 22, 2007

How to "bus-proof" your open source project

[This was first published on 10/5/2006. I'm putting all of the articles I've published on here so that I'll have one place I can look for all of them.]

People often talk about a software project's bus factor -- the number of people on your project that need to get hit by a bus to leave you with no one familiar with your codebase. In the open source world, the disappearance of even one developer can herald the death of your project -- if you don't prepare in advance.
The most important thing you can do to bus-proof your project is to attract a strong developer community for it. Since open source developers usually first get involved in a project as users, you need to attract users for your project. This means that you need to create something that people want to use and then listen carefully to the user feedback -- today's user may turn out to be tomorrow's release manager.

Start by creating something that people want to use. If you create a project to scratch a particular itch, you may attract a few contributors, but unless it's something that people actually use, it will succumb to bit rot after the initial itch is scratched. Interest in something built only for its own sake can only last so long.

You'll usually work on a project that people (namely you) want to use, and your project will attract a community of users and developers, with people fixing patches and making suggestions. If you want to keep these users around, you need to keep your project in good working order. That means vetting bug reports, fixing bugs, and working on new features. Regardless of the technical level of your project's users, odds are that they see your project differently than you do, so it may take a lot of dialog to understand a user's bug report or feature request. It can be a lot of work to translate a user's feedback into something that a developer can make sense of. But listening to your users, fixing bugs that they report, and paying attention to their feature requests will keep them coming back to use your software, and in many cases make them some of your biggest proponents. They'll usually wind up bringing you -- yep, you guessed it -- more users.

Now, to be clear, I'm not advocating that you spend your valuable time fixing every tiny bug and implementing every whimsical feature that a user requests. But before your project has grown to more than 10 or 15 developers, it's usually in your best interest to at least let your users know that they've been heard. Even if your email is only to let them know that you likely won't be implementing their pet feature, you let them know that you're listening by responding to them (and drop their requests into your issue tracker so they won't get lost).

As your project attracts more users, you'll inevitably pick up the odd developer (and believe me, some of them will be odd) as part of the community that you're building around your project. The first you'll usually hear from a potential new developer is in the form of a patch to fix an existing (often trivial) bug -- be it a code bug or a minor documentation fix. Users that show up on a development discussion list with patch in hand merit careful attention, because if you determine that their patch is a good patch and you apply it promptly, you could wind up with the ongoing attention of another project contributor, and attention is the common coin of the open source world. If this new developer is clueful, understands your project and the direction you're taking it, and keeps submitting patches, you'll find yourself wanting to let him just commit their own work. If you offer him commit access to your project as soon as you determine that he'll make a good team member, he'll usually stick around for a while to help you with your project.

Now you've got a project with a thriving user community and a small community of developers. You start to dream of a large castle with your minions bowing before you, paying homage to your greatness as a project leader, making offerings of Amazon wishlist items and PayPal donations.

Stop. Right. There.

Running your project with an iron fist is no way to increase your project's bus factor -- specifically, your bus factor.

Life changes can have a drastic effect on the amount of time that you can put into your project. You might get married or have a child. If you don't have a job, you might get one. You might get hit by a bus (or a meteorite) or contract a terminal disease or, heaven forbid, actually lose interest in your project.

Relinquish control.

Build a community of developers who make decisions by consensus and you'll have a project community that is not only lacking a single human point of failure, but that has the flexibility to lose one or more committers either temporarily or permanently. This kind of community allows developers to take turns leading the project (as much as you can "lead" a project run by consensus) and is remarkably robust as developers depart and return to contribute as their time allows. This is the true hallmark of a long-lived, productive open source project.

There are many other things that you can do to make your open source project successful, but by maintaining interest, paying attention to your users, and building a strong community, you're well on your way to developing a project that will grow for years to come. Best of all, you can stop panicking every time you see an oncoming bus on the way to lunch.

Author's note: Thanks to Karl Fogel and C. Michael Pilato for reading drafts of this article.

Apache, Open Source, and the Small Software Company

[This was first published on 05/30/2005. I'm putting all of the articles I've published on here so that I'll have one place I can look for all of them.]

The Apache Software Foundation is one of many open source software organizations shaking the business world all the way down to its proprietary software toes. Along with Linux, the Apache HTTP Server has long been the consummate example of the power and quality of open source software. Its runaway success against Microsoft IIS illustrates that the better product can triumph over both monopoly and marketing dollars.

Today, most small software development companies are acutely aware of the advantages of collaborating on open source software; at the very least, they're aware of the high costs of writing and maintaining closed-source software. With so little to be gained by writing and maintaining commodity software components (e.g., a Web server, a relational database, or an operating system), many companies are finding it cheaper to use and contribute bugfixes to an existing open source product than to start from scratch.

While the Apache Software Foundation (ASF) started as a group of Webmasters who just wanted a decent Web server to help them do their job, it has since become home to dozens of successful software projects with thousands of contributors and millions of lines of code. In fact, the ASF currently has the largest collection of active open source Java projects owned by a single organization.

The ASF accepts only individuals - not companies - as members and committers; however, many companies pay developers to work on ASF projects part- or full-time. This isn't because these companies are inherently altruistic, but because they've realized that it's cheaper to pay one or two developers to maintain and fix bugs on an open source project than to pay a team to maintain a closed-source equivalent in-house.

Large and small companies alike ignore open source software at their own peril. Years ago, "Not Invented Here" described a corporate state of mind that dutifully avoided using any solution not developed "in-house" - you had to either build it or buy it. Today, using "Not Invented Here" software is practically a requirement. Who wants to reinvent a Web server? Or an XML parser? Or a servlet container? But with open source, there's another choice in addition to "build it or buy it": get it for free.

Amidst all of this upheaval, the role of the developer has changed as well. Gone are the days when a development team can lock themselves in a closed room and knock out an application written from scratch over the course of a year. Companies need developers who are more archaeologist and assembler than fabricator. The smart, small company needs people with the ability to wade through the thousands of open source projects, find the gem with a stable codebase and an active community, and build on it.

The ASF understands that the long-term viability of an open source project is directly tied to the community that develops and maintains it. As a result, ASF projects are organized around communities and not only codebases. Sourceforge.net is a great example of why it's not all about the code - a bit of research reveals that close to 80% of the projects that reside there lie dormant. It's a testament to the number of open source software projects that go by the wayside every year. Many projects that exist are attempting to solve the same problem in a slightly different way, and software is subject to the process of natural selection. The strongest projects survive, the weaker ones combine or die out, and you're left with a better piece of software in the end.

Even though open source software has its idiosyncrasies, small development shops are gaining more power from it than ever. By building applications out of premade components, a modicum of glue code, and as little of their own code as possible, software companies are saving money and bringing products to market faster than ever. Developers spend less time reinventing wheels and more time concentrating on solving business needs. Leveraging open source saves licensing money at the outset, but the true win comes further down the road from the savings on maintainability.

As the ASF grows, it continues to work to ensure the long-term viability of its projects. And open source software continues to change the way that companies think about software solutions as well as the way they build their software. Leveraging open source drives the cost of development down, shortens the time-to market, and improves the quality of the software built on it. Gone are the days of having to choose between good, fast, and cheap - with open source software, companies can have all three.

May 21, 2007

Painting the Bikeshed at BSDCan 2007

Ben and I spoke at BSDCan last weekend up in Ottawa and had a great time hanging out with the FreeBSD folks. One of the cool surprises at the conference, was that we met Poul-Henning Kamp. The Subversion project has been talking about his famous bikeshed post for years now, and Ben and I make explicit mention of it in our Poisonous People talk for the last year. Poul-Henning attended our talk and we wound up talking with him for a few hours afterwards--he's a great guy and we even got our picture taken with him wearing his "no bikesheds" shirt:



From left to right: Ben Collins-Sussman, Poul-Henning Kamp, Warner Losh, and myself. Here's another shot:



Photos by FreeBSDGirl, another cool BSD person we met at the conference.

May 8, 2007

How to Collect Money for a Dinner With More Than Eight People Without Going Broke

Have you ever found yourself as the (perhaps unwilling) ringleader in a group outing? Did the check for the group somehow wind up in your lap and people are suddenly looking to you for guidance in how much to pay? Was the meal with a bunch of people who ordered wildly varying meals (and, more importantly, drinks)?

Wilfredo Sánchez and myself, as the unofficial "Cruise Directors" of the Apache Software Foundation, have found ourselves in this role year after year (voluntarily), and having done this at multiple conferences, have learned some valuable lessons about collecting money after the fact for a group outing.

Time and time again, I've seen some poor sap stuck in the "check master" role come up way short of the amount of money owed, and out of fear, wind up eating $100 or more of the group's tab. Typically this happens not out of malicious intent, but out of lack of organization and ignorance on the part of the participants. Should you ever find yourself in the role of this poor soul, here are some tips to make sure that the venue gets its money--and your servers get adequately tipped--without going broke yourself.

  • Split the bill evenly: Your best bet for saving your sanity is for everyone to pay "Alla Romana", which means that the amount each person pays is the total cost of the evening (meal + tips) divided by the number of attendees. If someone pulls out a calculator and tries to calculate precise tax and tip for their meal, you have my permission to throw rocks at them (or at least stale dinner rolls). One exception for this is if a few patrons drank a lions share of the bar bill, it's completely fair to ask them to pony up a bit more to cover their part.

  • Tip your servers well: If your servers have done a bang-up job of serving your party, tip at least 20%, and make sure you add this into the cost before splitting up the bill. Make doubly sure that the tip isn't already included before slapping another 20% on. But even if the tip is already included, it doesn't mean that you can't tip a little extra if your server went above and beyond the call of duty--remember that it's really hard to serve a large group of people well.

  • Round up: After adding the bill and the tip together, divide by the number of people, and round up, not down. If the bill comes to $17.48 per person, round up to $20. If the bill comes to $21.24 per person, round up to $23, or even $25. Odds are that most people are just going to have Yuppie Food Stamps (twenty-dollar bills), so making any change that's not a multiple of 20 is going to require some effort. After everyone has been paid and tipped, you can attempt to get change and give people a few bucks back. If the remaining amount is less than the number of people in whole dollars, consider just adding it to the tip.

  • Don't mix up your money: Whatever you do, do not start stuffing people's money into your wallet or, even worse, just pull out the contents of your wallet to use as a bank for making change. This is a fine way to make people wonder if you've turned this into a profit-making opportunity for yourself or, more likely, to wind up spending more of you own money than you should. If at all possible, pay your part first, and pay it in smaller bills that you can use to make change. But basically: keep track of the exact amount of money you've collected, and keep that amount visible at all times.

  • Don't mix up your credit: While you can gather all the cash and pay the balance with your credit card, I don't advise this if at all possible--some people might wonder if you're actually paying or if they're collectively paying your bill. I don't care how many miles you get on your credit card, just don't do it.

  • Don't be the loan officer: If you're collecting money, avoid loaning anyone money at all costs. This is one more thing to keep track of, and it's a fine role for someone's other friend to fulfill while you handle collecting for the check.

  • Be careful making change: If the cost per person is $15, don't let people just start throwing twenties at you and then try to figure out who owes what to whom. If possible, start collecting from people who have exact change and then start making change for others who don't have change.

  • Don't fight for the money: You're always going to have one or two people who had nothing but an appetizer and a glass of water and steadfastly refuses to put up a penny more than the menu price of their meal. Fine. Don't argue--they either a cheapskate or they genuinely can't afford to shell out more money. If it's the former, making a big stink is going to make you at least one enemy. If it's the latter, making a big stink can potentially make you many enemies. Basically, there's no way of winning here, so you can use some of the extra cash you came up with when you rounded up (you did round up, didn't you?).

  • Don't play credit card poker: But more importantly than that, don't let individuals start paying with credit cards. Beg them to go to an ATM or to borrow money from the guy next to them, but nothing says "screw you" to a waiter more than a check folder with half a dozen credit cards in it.

Apr 20, 2007

Failed Subversion Slogans

These are some failed slogans with Subversion that we came up with on a CollabNet offsite many moons ago. You can see why we rejected them...

A place for your stuff.c.

Like a mom for your data.

If you kept your car keys in here, you'd never lose them.

Why recycle when you can save everything.

We'll watch your code while you sleep.

Subversion : code :: bank : money

It's like CVS, except for the sucking bit...

If your data lived here, you'd be home by now.

Don't remember how bad your code was 4 years ago? We do.

Those who forget the past are condemned to rewrite it.

Developing snapshots faster than that PI tailing you...

Like a photo album for your code's childhood.

It's Jims's world, we're just living in it.

As American as baseball and apple pie.... mmmm...... pie......

Apr 15, 2007

It's Made of Meat!

If you've ever talked to me for more than 20 minutes, you've probably heard me say "It's made of meat, so it's good for you!". This quote comes from a spoof radio ad that I found on the internet circa 1996 (which is 134 years in internet time). After I first heard it, I downloaded it and listened to it a number of times, laughing uncontrollably--I can't explain why.

Somehow over the next few years, I lost my copy of it, and no amount of searching the net would turn it up, so I pretty much gave it up for lost until one day in 2001 when I was going through some old hard drives. I was just making sure that there wasn't anything valuable on them before I threw them away and I came across a file with the somewhat odd name meat.au (ogg format here). Sure enough, it was The Meat Ad.

The upside of this discovery is that I now have proof that I didn't just dream up this whole meat thing, even though I still can't explain why I find it funny. And when I visited the guys at skinnyCorp a few years ago, they gave me a Meat T-Shirt.

And yes, it's all meat. So it's good for you!

Apr 12, 2007

God Bless You, Mr. Vonnegut!

Kurt Vonnegut died tonight. He was my favorite author. So it goes.


All time is all time. It does not change. It does not lend itself to warnings or explanations. It simply is. Take it moment by moment, and you will find that we are all, as I've said before, bugs in amber.

-Kurt Vonnegut, Slaughterhouse Five

Apr 11, 2007

My Maps Rocks

Google Maps' newest feature, "My Maps" is totally awesome. Since I lived in Rome for three years, friends and family are always asking me where to go when they go to Rome. Now I can just point them at my map of places to see in Rome.

Mar 21, 2007

Dear Webmasters...

One way to get me to remember your website is to automatically resize my browser window when your site loads. The fact that my browser window--with the eleventy-seven tabs I have open--is now 720x800 on my 2600x1600 monitor ensures that I will never visit your site ever again.

Thanks,

-Fitz

Mar 19, 2007

Hans Rosling is a Genius

I'm a huge fan of visualizing data. You can show me piles of numbers and I'll just fall asleep, but Pretty Pictures--now that's what I'm talking about. If a picture is worth a thousand words, a good graph is worth a billion numbers.



Hans Rosling gave a talk at Ted that touches on the visual display of global statistics over time that had me riveted to my monitor. Watch it if you haven't already--it will be the best 19 minutes you spend all week:


Mar 7, 2007

The Top Ten Subversion Tips for CVS Users

This was published on ONLamp on 08/19/2004. The original should be here. I'm putting all of the articles I've recently published on here so that I'll have one place I can look for all of them

The primary mission of the Subversion project is to "provide a compelling replacement for CVS." One of its secondary missions is to provide a user interface similar to CVS's, so that switching to Subversion will be painless for CVS users.

So, if you learn Subversion's new features, you're ready to start using it, right?

Almost. Although the interfaces are similar, there are some important differences. Subversion has some features that CVS either lacks or offers differently; plus, there's the need to unlearn some of the bad habits that CVS has instilled in you.

With that, I give you the top ten Subversion tips for CVS users. The first six tips address bad CVS habits; the last four address good Subversion habits.


1. Use status to find out your ... status



In CVS, if you want to see what has changed in your working copy, odds are that you run cvs update. This command shows you the status of the files in your working copy, but it also updates your CVS working copy to the latest revision of the repository*. This not only requires a round-trip to the server, but also may change files in your working copy. Finding out what you've changed locally is different from finding out what has changed in the repository, but CVS mixes the two.**

With Subversion, if you want to find out what you've modified, you run svn status. This command compares the files in your working copy with those in the Subversion administrative areas (those pesky .svn directories), thus avoiding the necessity of a network round-trip:


$ svn status
D fish.c
A shrimp.c
M anemone.c



Note that fish.c is scheduled for deletion, shrimp.c is scheduled for addition, and anemone.c has been modified.

Now, by default, svn status shows only the files that are interesting (like those that have been added, modified, or deleted). If you want to see information about all the files in your working copy, pass the --verbose switch:


$ svn status --verbose
44 23 sally README
44 30 sally INSTALL
44 35 harry trout.c
D 44 19 ira fish.c
A 0 ? ? shrimp.c
M 0 ? ? anemone.c
44 36 harry things/rocks.txt


The first column remains the same, but the second shows the working revision of the item. The third and fourth columns show the revision in which the item last changed, and who changed it.

If you want to know which files will be updated the next time you run svn update, use the --show-updates switch to svn status:


$ svn status --show-updates --verbose
* 44 23 sally README
44 30 sally INSTALL
* 44 35 harry trout.c
D 44 19 ira fish.c
A 0 ? ? shrimp.c
M * 44 32 sally anemone.c
44 36 harry things/rocks.txt


You can see that the files that will be updated are marked with a *.

* Unless you pass CVS the -n switch.

** CVS has a status command, but it's not very useful.


2. Remember, you can move things around



I've seen people spend hours in meetings working out the directory structure and file placement of a project they are preparing to create in their CVS repository--and anyone who's ever tried to move a directory or a file in CVS knows why: CVS doesn't allow you to move anything around in the repository!* With Subversion, you can move files and directories with wild abandon:


$ svn move foo.c bar.c
A bar.c
D foo.c


Now bar.c has been scheduled to be added and foo.c has been scheduled for deletion. (This is how Subversion represents a move.

svn commit will send your changes to the server.)

You can even move files and directories on the server by using URLs:


$ svn move -m "Move a file" http://svn.red-bean.com/repos/foo.c \
http://svn.red-bean.com/repos/bar.c


That will immediately move foo.c to bar.c on the server.

* Unless, of course, you shell into your repository and start moving and copying things around by hand, but this totally hoses your repository history.


3. Tag and branch by copying



In CVS, you have cvs tag, cvs tag -b, cvs rtag, and cvs rtag -b for creating tags and branches. In Subversion, everything is done as a copy:


$ svn copy -m "Tag rc1 rel." http://svn.red-bean.com/repos/trunk \
http://svn.red-bean.com/repos/tags/1.0rc1


You've created a tag of your main line of development (referred to as trunk in Subversion terms). If you want to create a branch instead, copy the trunk line of development into the branches directory--it's just that easy. And in Subversion, tagging and branching are fast too.

In Subversion, tags and branches are just copied paths in the repository tree. By convention, tags live under /tags and branches live under /branches.

CVS has to modify each individual file that you tag in the repository; depending on the size of your repository, this could take a very long time. Subversion, on the other hand, needs only to copy a single directory node, which not only is really fast but also takes very little space in your repository--no matter how many files are involved in the branch or tag. The Subversion community calls 'em "cheap copies" for good reason!

You're not limited to tagging all files in the same revision in Subversion: If you need to make a "mixed-revision" tag or branch, you can always copy a working copy to a URL:


$ svn copy -m "Mixed branch." . http://svn.red-bean.com/repos/branch/1.2-mixed


See Branching and Merging for an extensive description of how to branch and tag.

4. "Revert" instead of "delete and update"



If you've ever made changes to a file in your CVS working copy that you wanted to undo without committing, you probably did something like this to rectify the situation:


$ rm I-made-a-boo-boo.txt
$ cvs up I-made-a-boo-boo.txt
U I-made-a-boo-boo.txt


And that, aside from requiring two separate operations, required a trip to the server to get the unblemished file (which, by the way, may not be the original file you were working on but rather a newer version). Subversion, however, stores a pristine copy of each file in the .svn directory, so you can just do this:


$ svn revert I-made-a-boo-boo.txt
Reverted 'I-made-a-boo-boo.txt'


That comes in especially handy if you don't have a Net connection at the time.

5. Don't fear your version control system



By default, CVS translates line endings (from CR [Unix] to CRLF [Windows] and back) and expands keywords (like $Id$) in your files. This is very handy until you commit a binary file to your CVS repository and CVS, in a fit of helpfulness, turns your file into tapioca pudding.

Subversion will never ever ever do anything to your data unless you ask it to.

Let's say that together now:

SUBVERSION WILL NEVER EVER EVER DO ANYTHING TO YOUR DATA UNLESS YOU ASK IT TO.

You can add any binary file to your Subversion repository and not have to do anything special to have Subversion not destroy your file. However, if you add a text file (a .java file or .c file, for example), you may want Subversion to automatically handle end-of-line translation for you. This is done using Subversion properties.

In this case, you will set the svn:eol-style property to native:


$ svn propset svn:eol-style native halibut.c


and then commit your change.

You can teach your Subversion client to add certain properties to your files automatically--see the section on Automatic Properties and their configuration for more information.


6. Log, log, log your log



Subversion's log command is so much more powerful than CVS log that it merits a mention.

Part of the reason Subversion's log command gives more useful and compact data is that its output is based on an atomic Subversion commit rather than a collection of files that may or may not be part of the same commit. (Keep in mind that CVS has no actual concept of a commit grouping.) So Subversion is able to show you a much more concise view of your repository's log data.

For example:


$ svn log
------------------------------------------------------------------------
r3 | sally | Mon, 15 Jul 2002 18:03:46 -0500 | 1 line

Added include lines and corrected # of cheese slices.
------------------------------------------------------------------------
r2 | harry | Mon, 15 Jul 2002 17:47:57 -0500 | 1 line

Outline sandwich fixins.
------------------------------------------------------------------------
r1 | sally | Mon, 15 Jul 2002 17:40:08 -0500 | 1 line

Initial import
------------------------------------------------------------------------


Each log entry shows you the revision number of the entry, the author, the date, the number of lines in the log entry (to aid in parsing svn log's output), and then the log message itself. If you wish to see the paths that changed in your log output, pass the --verbose flag:

    $ svn log --verbose
------------------------------------------------------------------------
r3 | sally | Mon, 15 Jul 2002 18:03:46 -0500 | 1 line
Changed paths:
M /trunk/sandwich.txt

Added include lines and corrected # of cheese slices.
------------------------------------------------------------------------
r2 | harry | Mon, 15 Jul 2002 17:47:57 -0500 | 1 line
Changed paths:
M /trunk/sandwich.txt

Outline sandwich fixins.
------------------------------------------------------------------------
r1 | sally | Mon, 15 Jul 2002 17:40:08 -0500 | 1 line
Changed paths:
A /trunk/sandwich.txt

Initial import
------------------------------------------------------------------------


In the above examples, you might have noticed that we're not passing any specific files or directories (called targets) to the log command. If you run svn log without specifying any targets, Subversion assumes that you're referring to your current working directory. Subversion then uses a starting revision of 1, and the working revision of your current working directory as the ending revision. (You can find out what this working revision is by using svn status -v, as we mentioned earlier.)

And now on to a small gotcha: If you commit a change to a file and immediately run svn log, you won't see the log message for your most recent commit. This is because the "working revision" of your working directory has not been updated (committing a file does not automatically update your working directory or any other files). If you run svn update and then svn log, you'll see the "missing" log message.

See http://svnbook.red-bean.com/svnbook/ch03s06.html#svn-ch-3-sect-5.1 and http://svnbook.red-bean.com/svnbook/re15.html for more information on using svn log.


7. Quickly undo a mistaken commit



Suppose you have a working copy of /trunk and discover that the change you made in revision 303, which changed oyster.c, is completely wrong--it never should have been committed. You can use svn merge to "undo" the change in your working copy*, and then commit the local modification to the repository. All you need to do is specify a reverse difference using svn merge:


$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
U oyster.c



Use svn diff to verify that the change is correct, and then commit that to the repository.

For more information, see Undoing Changes.

* That is, restore the latest revision of your repository to its previous state; Subversion will still have the "bad" commit in the repository. Being a version control system, Subversion's job is to remember everything you've ever committed to it.

8. Resurrect deleted items



If you delete a file from your Subversion repository and wish to "resurrect" it into the latest revision of your repository, the easiest way is to svn copy it from a revision before it was deleted into your working copy. Use svn log -v to find the revision where the file was deleted, and then do your copy:


$ svn copy --revision 807 \
http://svn.red-bean.com/repos/trunk/perch.c ./perch.c


For more details, see Resurrecting deleted items.


9. Switch to a branch without checking out a new working copy



In CVS, if you have a working copy for your project and are ready to begin work on a branch, you would pass the branch name as the revision to which you wished to update. Because Subversion treats tags and branches as regular paths in the repository, you can't just svn update your working copy to the branch name in question. Enter the svn switch command.

svn switch updates your working copy to mirror a new tree in the repository--say, a branch tree instead of the trunk tree. This is the Subversion way to move a working copy to a new branch.


$ svn switch http://svn.red-bean.com/repos/branches/vendors-with-fix .
U myproj/foo.txt
U myproj/bar.txt
U myproj/baz.c
U myproj/qux.c
Updated to revision 31.


For more details, see Switching a working copy.

10. Browse or even mount your repository



If your Subversion repository is being served up through the Apache HTTP Server (that is, you access it via a URL beginning with http), Subversion gives you a couple of extremely convenient freebies:

First, you can point any web browser to your Subversion repository and navigate your way through the latest revision of your repository.



Second, if you're using an operating system that knows how to talk to DAV shares, you can mount your Subversion repository (read-only) on your desktop:





While this is a convenient way to see the contents of your repository, it's also very useful for sharing files with non-Subversion users.


Copyright © 2004 Brian W. Fitzpatrick, Ben Collins-Sussman, C. Michael Pilato. This article is distributed under the Creative Commons Attribution License (v 2.0).

Feb 28, 2007

The Plane Truth, London Heathrow

[This was originally written on 2 July, 2003. Still catching up...]

"If you haven't missed at least one flight in the last year, you're getting to the airport too early."

--Steve Hayman


This isn't a plane truth story in the sense that I sat next to someone famous, interesting, or with 2 left arms and a martian finger growing out of her forehead. This is a story of a month of insane travel, sleep deprivation, and how I got home at the end of it.

June was a bit of a crazy month for me. I finished May by doing a three day tour of Ontario CA, Newark NJ, and Lincoln NE. June started with a week in Atlanta, a week at home, a week in Cupertino, 3 days in Santa Cruz, and a week in San Francisco for WWDC. I ended up leaving WWDC with a Friday flight that landed in Chicago at 6:00PM, allowing me 13 hours to get home, unpack, wash my clothes, pack, and get back to the airport for a 9:00AM flight to Heathrow. Joy.

Mind you, I slept in my own bed for a grand total of 6 nights in the month of June. That is to say: I didn't sleep very well at all. I can sleep just about anwhere, but hotel beds may as well be made of scrap iron and watchsprings for all I can sleep in them. So a big fat 8 hour time shift is just what I needed to help me sleep at night. Hellooooooooo jet-lag.

And thus begins my story:

Total amount of sleep Friday night: 4 hours


I get into London at about 10:30PM and into my hotel at about midnight (the hotel is near Apple's office about 3 miles from Heathrow, which becomes rather important later in the story).

Total amount of sleep Saturday night: 3 hours


I spend Sunday wandering around downtown London trying to stay awake and soak up the sunshine to help kill my jet lag as I have 2 long days ahead of me where I have to train a bunch of people from Apple Europe. Nothing inhibits sensical lecturing like massive jet lag and a serious lack of sleep.

Total amount of sleep Sunday night: 5 hours


Monday is my first day of training. Even after a pot of tea and 3 cups of coffee, I still feel like I'm talking through a mouth full of novocaine. My veins are full of warm caramel. Everything moves in slow motion. Charlie Brown's teacher sounds like JFK next to me.

Total amount of sleep Monday night: 2 hours, 30 minutes


Tuesday I finally start to really get into the sleep deprivation thing and hit my stride at about 2:30 in the afternoon--a full hour before my class ends and 21 hours before the return flight home. Perfect.

Tuesday night I go over to a friends place in London for dinner. He cooks a *phenomenal* dinner which consists of a profound amount of homemade Indian food, great dessert and a couple of tasty BudVar "Budweiser" beers. Stuffed full and well past exhausted I get back to my hotel at around 11:45.

I have every intent of packing and getting totally ready so that in the morning I can just shower, get dressed, have a nice leisurely breakfast, and make my way to the airport with plenty of time to spare. You may recall that the road to hell is paved with good intentions.

I decide I might as well watch some TV before packing, so I sit down on the bed in my clothes, but not before setting my alarm for 6:30 AM just in case I somehow pass out while watching TV.

My flight to Chicago is at 10:30AM the next day. This, like the location of my hotel, is also a rather important detail.

I double check my travel alarm to make sure it's set correctly. I set the alarm clock on the desk across the room as I'm famous for beating on any alarm clock within arm's length and falling back asleep (instead of getting up, gaining consciousness, turning it off, and going about my day).

I settle in for a little late-night British television and manage to watch about 15 seconds worth before falling soundly asleep.

Packing just isn't going to happen tonight.

I have a very vague memory of waking up, looking at the LED clock on the television, acknowledging that it's 2:00AM, brushing my teeth, taking my jeans and Apple shirt off, putting on a T-shirt, and climbing back to bed. I leave the television on for company.

I wake up on my own accord (no big surprise there) and try to fall back asleep with no luck. I roll over and watch a little television, and as my eyes began to focus, I try to make out the clock on the television. It says

9:09

*blink*

9:09

I get up, walk across the room, bend down and look at the clock so closely that it fills my field of vision.

9:09

I look at my alarm clock to make sure the television hasn't gone haywire. It too reads

9:09

And the alarm had somehow been turned off.

Total amount of sleep Tuesday night: 9 hours, 9 minutes.


Babies don't sleep this well.

"OK," I tell myself, "Don't panic, we can work this out. We'll make the flight."

I think about it for a moment, and then decide to give myself 30 seconds to panic.

I panic, and then I spring into action. In that 30 seconds of panic, my body dumps every available gram (not ounces--remember, they use the metric system in the UK) of adrenalin into my bloodstream. I become as focused as a laser beam. I see through walls. I have A Plan.



9:10
Call the hotel front desk. Order a cab:
"I'd like to order a Taxi to Heathrow, please" "And when would you like it, Mr. Fitzpatrick?" Thinking "An hour ago.", I reply "In 10 minutes."


9:11
Brush my teeth, wash my face, apply a double helping of deoderant, get dressed into the same clothes I was wearing yesterday, and put on my Cubs hat.


9:15
Rip the bedspread off the bed and use the bed as a staging area: put my roll-aboard and my laptop bag on it and start throwing all of my stuff (which is of course scattered all over the room) onto the bed.


9:17
Start packing my bags. Jam everything in. Jump on the bag to help it zip. Zip my fingertip into the bag. Swear loudly.


9:19
Leave the room.


9:21
Checkout and pay the bill at the front desk.


9:24
Exit the hotel to discover the taxi waiting for me. Excellent. I explain my plight to the cab driver who narrowly misses running over 4 pedestrians trying to get me to the airport as quickly as possible. I Remember to tip this guy well.


9:33
Arrive at Terminal 3 and spot the American Airlines curbside checkin. Pay cab, sprint to checkin and fumble my passport at the clerk.

"I'm on the 10:30 flight to Chicago."

Clerk looks at her watch. Clerk looks at me. Clerk blinks loudly.

"I don't have any bags to check."


Clerk makes "Ahhh" look, takes my passport, checks me in, gives me my boarding pass, my passport, and a handful of cryptic directions to the security checkpoint.


9:34
Done with checkin. 45 seconds flat.


9:36
Get in queue (no lines over here--just queues) for the security checkpoint.


9:41
Set off the buzzer as I pass through the metal detector. Get patted down by a guard who enjoyed it a bit more than etiquette dictates he should.


9:42
Reward myself by browsing the duty free stores for the next 15 minutes.


9:57
Walk to my gate.


10:02
Arrive at my gate and wait in line.


10:09
Step foot onto the plane, exactly 1 hour after waking up.




So I made my flight after all, and with plenty of time to spare. I slept through takeoff, landing, and most of the next day.

And that's the plane truth.

Feb 27, 2007

Customer Service Take 2

[This was originally written on 10 July, 2002. Still catching up...]

After my delightful experience with Griffin
Technology
, I'm well on my way to a hat trick considering
this exchange with SmartDisk. This is
another example of what an individual can do to make their
company look great (at least in my eyes).

I'll let the emails tell the story...


From: B. W. Fitzpatrick <fitz@apple.com>
To: SmartDisk Technical Support
Date: Tue Jul 30, 2002
Subject: Problems with 3GB Firewire Pocket Drive
--------------------------------------------------------

This drive worked fine for the first year I had it, then
started giving problems. Whenever I would attempt to read or
write a certain file, it would hang the Finder. I upgraded the
firmware to the latest (using the VST 2.3.1 Format Utility). I
did a low-level format. I reformatted again.

I talked nicely to the drive and explained that my job was to
put files on it and that its job was to keep those files and
return them to me on demand. I took it to the zoo to see the
animals. I even took it shopping in the hopes that that would
cheer it up.

However, the drive still has not seen the light and will work
fine reading and writing until a certain point, at which I get
the Spinning Pizza of Death and the Finder locks up. I bought
this drive about 2 years ago. Please tell me you can replace
it or convince it to do what its supposed to do.

-Fitz


And Ian responded:


From: Ian
Date: Tue Jul 30, 2002
To: "B. W. Fitzpatrick" <fitz@apple.com>
Subject: Case # 15686
--------------------------------------------------------

Hello Brian, thanks for contacting us. I thoroughly enjoyed
reading about your relationship with the drive, although it
does seem like the sparks between you two are dying. So
sad.

Unfortunately it sounds as though the hard drive mechanism
itself is starting to die. It doesnt sound like an extension
or software problem. The only real solution is to replace
the hard drive mechanism which sits on the firewire
interface board. We do not do out of warranty repairs so you
will need to do this yourself or take it to a repair
center. It uses a standard laptop size IDE hard
drive. Please let me know if I can be of further
assistance.

Ian
SmartDisk Corporation Technical Support


And I responded...


From: B. W. Fitzpatrick <fitz@apple.com>
Date: Tue, Jul 30, 2002
To: Ian
Subject: Re: Case # 15686
--------------------------------------------------------

What is the warranty on the drive? I take it it's less than
2 years?.

-Fitz

PS, One of my friends here suggested that Firewire drives
prefer the beach, so I'm guessing the zoo thing didn't
help.

;-)


...and back to Ian...


From: Ian
Date: Wed Jul 31, 2002
To: "B. W. Fitzpatrick" <fitz@apple.com>
Subject: RE: Case # 15686
--------------------------------------------------------

LOL

The warranty is 1 year from the purchase date. If the
drive is out of warranty, I might recommend contacting
Huong <name removed>, (pronounced like Hong.) She
can be reached at 978-555-1212, her e-mail is, <address
removed>. She works at Teleplan International which we
have given our blessing to do out of warranty repair
work. Please let me know if I can be of further
assistance.

Ian

PS Maybe if you took the drive to a Robot Wars showing
you could intimidate the drive into working. :P


...and back to me...


From: B. W. Fitzpatrick <fitz@apple.com>
Date: Wed Jul 31, 2002
To: Ian
Subject: RE: Case # 15686
--------------------------------------------------------

Ian,

Thanks a million for your replies. It's always nice to find
a human being behind a big company.

> PS Maybe if you took the drive to a Robot Wars showing
> you could intimidate the drive into working. :P


Alas, I fear that it's time to retire the drive to that great
bitbucket in the sky. Perhaps it would make a good projectile for one
of the other robots.

:-)

Take care,

-Fitz


...and back to Ian one last time.


From: Ian
Date: Wed Jul 31, 2002
To: "B. W. Fitzpatrick" <fitz@apple.com>
Subject: RE: Case # 15686
--------------------------------------------------------

It's nice to have a customer that is understanding and
competent!

Before you off up the drive as a sacrifice to the Great
Bitbin, I would suggest opening the drive up by taking the
plastic casing off. If you hold it under a heat lamp (or a
blow dryer) the glue will heat up and you can take the
plastic casing off. There will be 4 screws that hold the
case together (very easy) and then you will see the Firewire
interface board and the IDE hard drive. It really is a
simple design, which is great. You can definately put 30 gig
hard drive on the board (I am unsure of anything higher, but
I would imagine you could). The interface card is really the
expensive piece to the device and you can use any brand of
hard drive on the card. So I guess what I am saying is, I
would suggest at least taking the drive apart. You could
even get a cheapo drive from ebay. I know you probably paid
a hefty price for the drive and I would hate to see it
turned into robot projectiles after 2 years. If you have any
questions during the process, please feel free to ask!

Ian


Thanks again Ian.

Feb 22, 2007

Dear Craigslist Seller...

Dear Craigslist Seller who sold me your used DirecTV Tivo,

I feel that it is my duty to share with you a few tips on selling a used Tivo:

1. You should really reset your Tivo before selling it. Since you neglected to do that, I got to peruse your fascinating choice of Oprah episodes and Adam Sandler movies. Cute.

2. While I greatly appreciate the $25 you saved me by including the access card in the Tivo, for future reference, your purchase history is stored on this card, and no amount of Tivo resetting will clear out these purchases, so I'll get to see just what your taste in soft porn is. Just in case you've forgotten, here's your purchase history:
  • Amateur Strip Night: Bare it All ($14.95), purchased Sun, 7/17/2005 @ 3:00PM
  • Boxing: Gatti vs. Mayweather - Live ($44.95), purchased Sat, 6/25/2005 @ 8:00PM
  • Hot Body: Booty Camp ($4.99), purchased Thurs, 3/3/2005 @ 2:00PM
  • Voyeur Vol. 1 ($4.99), purchased Thurs, 3/3/2005 @ 12:30PM
To summarize: Next time, consider resetting your Tivo and selling it without the access card. But thanks for sharing.




Added 2 April, 2007:

Dear Time Warner: Looks like you could use some help too.

Feb 21, 2007

Pop Olympics

[This was originally written on 21 February, 2002. Still catching up...]

Ever since I was a kid I've loved the Olympics. I can remember camping out in front of the television years ago and watching them for hour after hour, from the opening ceremony to the close, like some out-of-control Jerry Lewis telethon. It all seemed so magical--the excitement of the events, the highs of the medal ceremonies... the anticipation alone warmed the cockles of my (even then) couch potato heart.

Even now I love to watch the Olympics. Those of you who know me are probably wondering "Who the hell is writing this crap?" Yes, for the most part I'm not interested in sports, but for some reason I could sit down for days on end and watch skiing, bobsled, skating, and yes, even curling. And I have to confess that I love the figure skating. Something about the Olympics just turns me into a blubbering sap. So shoot me.

I don't know what it is--There's just something about watching these massively dedicated people pit themselves against each other and the clock that fascinates me. And that single moment when an athlete wins the gold medal makes me go all mushy and rubbery inside. I get this sympathetic emotional charge coursing through my body as though I was actually there.

But here's the kicker. I want to watch the events. I mean all the events. I want to see Austria vs. Canada in curling. I want to see Italy match up against Mexico in the frozen cow-chip toss. I want to see Burkina Faso take on Martinique in the two-man three-legged cross-country dodeca-athlon. I want to see the Olympics.

Instead, I get to watch Bob Costas trying (and failing spectacularly) to be funny. I get to watch the Daytona 500. I get to watch vapid hollywood gossip shows. And God forbid we preempt a soap opera for something as boring as the Olympics.

Aside from the sparse coverage on MSNBC and CNBC, I get 3 hours of commercial-packed Olympics at prime-time from 7 to 10 each night. And if that's not bad enough, an hour of that is taken up following American athletes around asking stupid questions like "Are you going to try for the gold?", "Are you excited to be here?" etc.

"No, I'm bummed to be here and I'm really hoping to walk away with the zinc medal. My motto is 'strive for mediocrity', Bob."


You've gotta be kidding me.

We get to see the American athletes competing for their medals. Condensed, tape-delayed snippets of various events, sanitized and liberally sprinkled with background and local-color segments are spoon fed to us, Nielsen point by Nielsen point. If an alien dropped into my living room and watched the Olympics as presented on NBC, they'd think it was the USA against a bunch of other mouth-breathers who just happened to luck out and win an event once in a while.

Now I understand that NBC needs to make money off the Olympics, and I don't begrudge them that--I'm well aware of the world that we live in. But come on, NBC should be ashamed of itself. They complained two years ago when the Summer Olympics was in Australia that the huge time difference was going to reduce viewership because they couldn't show events live at 4AM. But this year, with no time difference at all, we get to watch our events tape-delayed (and edited down). This kind of behavior is below even an Enron executive (OK, maybe not, but you get my point).

Let's set the way-back machine for summer 2000. I spent the entire duration of the Summer Games working at a client in Switzerland (Believe me, it's not always this good). And I'll bet you that I saw more of the Olympics than anyone in the US did that year. There was a channel called Eurosport that showed the Olympics 24 hours a day. They showed live Olympic events all night long, and when the Olympic day ended, they showed the rest of the events that happened that day, interspersed with reruns of the live events. Maybe they would squeeze in a medal ceremony if there was time. Commercials were short and painless, and we didn't get to hear from Jane Swimmer's aunt's gardener's cousin's wife about how Jane wanted to be a swimmer ever since her mother dumped her into a drainage canal at the tender age of 2. I saw the Olympics that year.

So, for crying out loud, couldn't we sacrifice a cable channel somewhere to show the real olympics instead of this watered down drivel? I mean, can't we live for two weeks without the "Hairless Cat Channel," or the Infomercial channel or something? NBC can still show their version of the Olympics, but at least those of us who are interested would be able to watch the real Olympics.

Feb 19, 2007

Customer Service is Not Dead

[This is the second post in a series that I'm doing just to get some old stuff that I wrote up onto my blog. This was originally posted 25 October, 2001, and I still think happy thoughts when someone mentions Griffin.]

Although I've thought for years that customer service in the technology industry was dead, I recently discovered that it's alive and well and spending its afternoons over at Griffin Technology

I've had an iMate USB to ADB converter for almost 2 years now. I use it at work with my Maltron keyboard (which doesn't have a USB model). Not only do I use it with my desktop, but I take this keyboard (and the adaptor) with me on the road with me from 5 to 15 weeks a year, so they get abused regularly.

The other day, in the process of trying to reseat a loose wire in the iMate, I ripped two of the four wires right off the solder pads in the dongle. At first try to fix, I soldered the wires on backwards, so I decided to see if I could get a hold of someone at Griffin before I completely cooked the thing.

I went to their website. I found a phone number to call in less than 30 seconds.

I called the phone number. A human being answered on the third ring.

A human being answered the phone. On the third ring.

He introduced himself as Vance. I explained my dilemma and that I was trying to solder the iMate back together. Without flinching or chastising me about warranty violations, he asked me to hold for a second while he went to find another iMate. Less than a minute later he came back on the line. He cracked his iMate open and told me which wires went where. And then... and then, he told me that if I couldn't fix it to give them a ring and they would send me a new one.

*boggle*

Mind you, the one I have is almost 2 years old and I'm attacking it (rather ineptly) with a soldering iron. And he offered to replace it. Free.

In this day where you wind up in voicemail jail for 20 minutes just to get to some half-wit who can't even remember what products his company sells, this was, needless to say, immensely refreshing.

I told Vance that if I couldn't get it to work I would buy two of them from Griffin.

I did get it to work. I also bought a new iMate, just in case.

Feb 3, 2007

A Chat with Netscape 4.5

[This is the first post in a series that I'm doing just to get some old stuff that I wrote up onto my blog]

This is an ancient rant that I wrote a long time ago. Unfortunately, it pretty much summed up my relationship with Netscape Navigator.



From: "Brian W. Fitzpatrick"
Subject: A Chat with Netscape 4.5
To: devel@onShore.com
Date: Tue, 01 Apr 1997 09:06:04 -0600
X-Windows: foiled again.


Me: exec netscape

Netscape: OH, OK.
grabMemoryByTheKilo(HalfOfTotalMemory)
hogResources(most)
incrementSystemUnstabilityBy(1)

Me: surf

Netscape: OK

Me: surf some more

Netscape: OK
grabMoreMemory(some)
incrementSystemUnstabilityBy(1)

Me: surf some more

Netscape: OK
whoaHitAJavaApplet
setSpeed(Commodore64)
thrashDisk(aBit)
incrementSystemUnstabilityBy(42)
showApplet(maybe)

Me: leaveAppletPage

Netscape: thankYou

Me: surf

Netscape: OK
notFeelingWell(aLittleQueasy)

Me: surf
whoaFoundJavaScript
puke(chunky)
grabMoreMemory(some)
incrementSystemUnstabilityBy(9.2)
executeJavaScript(maybe)

Me: surf away from JavaScript

Netscape: *whew*

Me: surf to plain html page

Netscape: freakOut(inABigWay)
lockUpXWindows(totally)
incrementSystemUnstabilityBy(amountOfLastVISABill)
grabAllMemory(mallocville)
thrashDisk(andIMeanHard)
ISaid_All_Memory(mallocAgain)
whatAboutThatByteOverThere(grabLastByteOfRAM)
thrashDisk(Harder)
thrashDisk(EvenHarder)
heySomebodySwappedOut(grabThatRAMToo)
thrashDisk(UntilHardReboot)

Me: power cycle computer
hit wall (hard)
yell and scream

Jan 31, 2007

Caffeinated Monkey

I've had this blog for ~2 years, and up until now, I haven't written a thing in it. I keep wanting to blog stuff but don't really have anything profound to start with, so I guess it's time to start dumping some of my articles in here and then I can start yammering like a caffeinated monkey.

Ook ook.