Author Archives: admin

Can’t see further than my own nose at the moment

At an internet cafe in the Hong Kong airport. $3 for a delicious 100% juice grapefruit bottle and unlimited tubes. The flight here was brutal, as long flights normally are for me, and not sleeping for the two nights beforehand didn’t help. My flight landed two hours late, at eight, and after breezing through customs, I was greeted by the tremendously humid Hong Kong air.

I took a bus into Kowloon and found my hotel — the Star Guest House on Chatham Rd. The host apologized profusely for the size of the hotel room — about two meters by three meters (that’s about ten by seven, for you folks stateside) with a similarly tiny bathroom and no window, but I was looking for, and found, something cheap. Rather than break my seventy-two hour sleepless record by going to bed at ten, I dropped off my stuff and walked down to the Kowloon waterfront with a south-facing view of the skyscrapers on Hong Kong Island. The view is tremendous — even in my stupor I could pick out at least three famous skyscrapers, including the I.M. Pei building which I have to check out in more detail once I return. And most of the buildings are decorated in various rainbow lights that flicker and blink. It immediately reminded me of the view of the Esplanade from deep playa. I found myself drifting off to sleep just sitting there looking at the view, so I made my way back to the S.G.H. and let the sonorant drone of the air conditioner lull me to sleep.

I already know a few Chinese characters, including “exit,” “good, something I think is “no” or “not:” 木,and two that I think must be the conversational and interrogative sentence particles “la” and “ma.”

This terminal is ridiculous. The keyboard is sticky and every sentence or two it tries to interpret what I’m typing as Pinyin (the Chinese romanization) and starts sticking Chinese characters into the text. And the font size changes every few sentences too, as the terminal goes into HTML entity mode every few sentences. And about every two minutes a hapless tourist interrupts me and asks how they too could be allowed to use the tubes, despite the giant sign with instructions in English and Chinese directly above my head.

Ok, got to go!

Let’s get out of this country

I’m about to take an eleven-week trip to Hong Kong, Guilin (in China), Turkey, Greece, Berlin, and maybe Bulgaria, Romania, Bosnia, Croatia, Prague, Budapest, and who knows where else. I’ll be posting updates for my friends, when I can, under the travelog category. If you don’t know me and are subscribed because you found one of my writings on Ye Olde Series of Tubes, you might consider re-subscribing just to my essays or blurbs feeds. If you’re a friend and just want to follow my travelings, and ignore any computer-related dribblings, subscribe to my travelog feed.

Photos, when I can upload them, will be here, and that will also have it’s own feed. This trip is something of an experiment in extreme minimal traveling — I’m taking just a 2000 in2 / 33 liter North Face Surge, which is, by the way, the most awesomest backpack ever. I always take a picture of everything I’m taking.

No fair breaking in to my apartment! My housemates will still be there.

And no fair having any fun while I’m gone. Fun includes, but is not limited to:

  • having drunk, nekkid parties, or really any parties at all
  • having warm, sunny San Francisco weather (certainly the least likely of the bunch)

If anyone knows anyone in any of these places, or is going to be in any of those places, drop me an email and let’s par-tay. Also, if anyone wants to swap their place in Berlin for mine for the last part of July, or has a vacation rental / sublet in Berlin for the last part of July, let me know.

Why RedBubble kicks ass

I’m always looking for clever t-shirt ideas, and ever since reading Alvin Toffler’s The Third Wave back in 1997, I’ve wanted to make my own custom t-shirts. I’ve made CafePress, Spreadshirt, and Zazzle stores for my own designs, plus a CafePress store for the Neighborhood Project, a Spreadshirt store for Mosuki, and a Zazzle store for my Burning Man camp. All three of these websites suck, in various ways.

RedBubble is the new kid on the custom t-shirt design block, and it kicks these three competitors to the curb1. I’ve moved all my designs there. To explain what they’re doing right, first I’ll explain what these three competitors are doing wrong.

CafePress is dog slow and riddled with quirks. Browsing through my private designs, a few of the product previews show up as broken images. Background images and UI graphics re-load on every page change, slowly. Designing a new product is a complex, multi-step process. First you choose blank apparel or household items and add them to your shop. Then dig through pages and pages of FAQs to find the exact DPI and pixel dimensions for the particular item. Then fire up your image editor and resize your graphic to match. Upload the image to your “media basket.” Then go find your blank item, and add the graphic to it. If you add a graphic of the wrong size — like putting the 200DPI version of your graphic designed for a coffee cup onto a 300 DPI t-shirt instead — there’s no warning and no visual feedback. You, or your customer, will just get a badly pixelated product. And worse, if you upload an image that’s too large — it will be badly down-sampled, and look almost as bad as an image that was too small. They added support for dark apparel at least as far back as 2006 — yet their product previews still don’t look right. This is basic image manipulation, not rocket science.

Spreadshirt has two different printing techniques. The better-quality one, “flock print,” can’t print designs that are too detailed, so they require you to wait several days for each design to be approved by a human at Spreadshirt. Like CafePress, creating a shirt involves first uploading a design, and then adding it to a product. Their shirt designer is a pure flash widget in a pop-up window which takes over a minute to load on my fast net connection and has all the standard Flash problems; high CPU usage, no keyboard navigation, no scroll wheel support, etc., etc. It has a bunch of controls and widgets, some of which I have never needed and others which I don’t understand. I ordered this shirt from Spreadshirt, after their customer service confirmed that the black in the image, around the diamond with rounded corners, would not be printed. The shirt had a salmon color in place of red — that’s #ff0000 red — and the design’s edges had been sloppily cut, totally ignoring the rounded corners. It was so hilariously bad that I didn’t bother asking for a replacement. Each shop even has a bunch of settings and fields, including “title,” and “shop name,” (only one of which actually appears inside your <title> tag — the other appears to be ignored), two different “description” fields (one of which also appears to be ignored) and the cryptic “Product choice-Display category type.”

Zazzle replicates the multi-step product creation process of CafePress and Spreadshirt. Their product design UI is, thankfully, AJAX and not Flash, and you can upload an image to your “gallery” inside the product design process, although it takes three clicks and about two minutes of waiting for the UI to load before you actually get to the HTML file upload widget. Like Spreadshirt, their product designer has a suite of widgets to position and transform your image, and it takes several clicks to get the final product up on your store. I’ve ordered three shirts from Zazzle – the first I sent back because it was printed at such low quality I assumed their printer was running out of juice. I was wrong; when I received the replacement, it was just a tad bit better. The second was a retro design; I was planning on the poor printing adding to the retro charm, and it did.

So what makes RedBubble so much better?

RedBubble’s print quality is superior. If all these sites are screwing it up so bad, full color, digital printing on fabric must be a really difficult problem, right? If it is, RedBubble has solved it. I bought two designs on RedBubble that were too good to pass up, despite the poor print quality I’d come to expect from design-your-own t-shirt sites. And guess what? The shirts look great — you have to look really close to see that they’re not actually silk-screened in five different colors.

Maybe designing t-shirts on the web is just a complicated, difficult process? Nope. RedBubble’s t-shirt design process is extremely simple and quick. You select a 2400×3200 image to upload, and click save, and you have a t-shirt ready for sale. What about positioning, scaling, adding text, and compositing multiple images, like you can do on these other sites? RedBubble doesn’t provide any on-site UI to help you do these things. And they shouldn’t. People who design t-shirts — especially the good designers — are using Photoshop, Illustrator (or GIMP & Inkscape) and their ilk, to begin with. Those programs are going to do a much better job at tweaking your image than some Flash or AJAX web app coded by that nerdy intern from last summer with a 250×250 product preview window and a bunch of buttons with icons your users haven’t seen before. Rather than maintaining their own inferior design and preview widget, RedBubble gets out of the user’s way.

In RedBubble’s shirt design process, you can also pick the default shirt type, the available colors, and the default colors, and add a title, description, and tags, but all those items are optional. You can design a t-shirt in three clicks.

The theme here is that RedBubble’s superiority is distinguished as much by things that it does better as by those it doesn’t waste time with. There’s no “store,” and no concept of multiple stores on a single account, just a bare-bones profile. There’s no site-wide marketplace in addition to your store. There’s no way to customize your product list’s colors, logos, or background. Custom layout is not necessary, since (unlike it’s competitors) RedBubble’s default site colors are clean, simple, and don’t detract from your designs.

RedBubble doesn’t let you make hats, sweatshirts, panties, aprons, mousepads, buttons, magnets, coffee mugs, dog t-shirts2, baby aprons, pet bowls, or light switch covers. Just t-shirts, posters, prints, and calendars. Their interface, and the underlying code, is vastly simpler because of this — there are no “choose product” or “add products to store” steps. And I bet t-shirts, posters, prints, and calendars make up a very large percentage — like 70% — of CafePress’, Spreadshirt’s, and Zazzle’s revenue. Doing less gets RedBubble to market quicker, gives them a simpler product, and makes them a more agile competitor.

RedBubble has also built a community, and channels to keep users on the site and bring them back. You can give people positive feedback for their work by “favoriting” it or by “watching” them. You get summary emails with new work by people you’re watching, comments related to your work, and so on, drawing users back to the site over time. I was overwhelmed when I got even one comment on the first design I posted. I’ve now got thirteen comments on sixteen designs; compared to just two comments on my entire Zazzle store. And the comments, favorites, tags, and watchlists mean there are more users and t-shirts on every page to click on, making their site almost annoyingly sticky.

There’s only one thing that RedBubble is missing. They need to let you print on the front and back of a shirt. And I bet they’re working on that.

RedBubble is following all of those pithy little maxims for building a successful website:

  • Keep it simple — your product, your message, and your interface.
  • Do one thing and do it well.
  • Get out of the user’s way.
  • Build a community and keep it happy.
  • Always have something cool for the user to click on and look at.

So long, CafePress! Farewell, Spreadshirt! See ya later, Zazzle! Me and my custom t-shirt designs will be hanging out over here on RedBubble from now on.

  1. Threadless and Oddica, although good sites with very good printing, live in a different neighborhood because they both only print a small set of submitted designs. And my designs are generally too weird to win any beauty contests. []
  2. What kind of person buys a custom dog t-shirt, anyway? []

Another browser-side Model-View-Controller analogy

Coding Horror presents another way to think about the browser side of web apps as underlyingly MVC in Understanding Model-View-Controller. It’s interesting, but I still prefer my analogy for primarily AJAX web apps; when the data comes in primarily through XMLHTTPRequest, it doesn’t make much sense to think of anything but the JavaScript that handles XMLHTTPRequest responses as the model.

Memristor: a paradigm shift?

R. Stanley Williams at Hewlett Packard, in an article published in Nature, appears to have invented the memristor. And according to Professor Leon Chua of UC Berkeley, this represents more than just a nifty new chip component; it’s a total paradigm shift:

Electronic theorists have been using the wrong pair of variables all these years — voltage and charge. The missing part of electronic theory was that the fundamental pair of variables is flux and charge. The situation is analogous to what is called Aristotle’s Law of Motion, which was wrong, because he said that force must be proportional to velocity. That misled people for 2000 years until Newton came along and pointed out that Aristotle was using the wrong variables.

Chua, in the Information Week article, goes on to explain that this will have major ramifications for neural-net processing and power consumption. If this is all for real, it means we’ll someday be looking back on computing equipment produced in the last forty years as not just slow, oversized and outdated, but hopelessly primitive because it was designed based on faulty assumptions and is missing whole categories of useful functionality. How exciting.

Empirical debugging

Steve Hazel‘s Debugging Science puts the science back in computer science by pointing out the deep similarities between the empirical/scientific method and the best debugging practices.

From this point of view, the open-source call to arms “with enough eyes, every bug is shallow” even turns out to be a similar kind of parallel “processing” as modern academia’s “multiple camps in support of divergent theories.”

The third flavor of focus-follows-mouse

Steve Yegge’s excellent Settling the OS X focus-follows-mouse debate explains why OS X’s application-centric paradigm, with its application-global menu bar, doesn’t work so well with focus following the mouse but no automatic window raising. Background windows, attached to background applications, can’t, and aren’t expected to, listen for modifier+key events, because the application’s menu isn’t active.

The lack of focus-follows-mouse on OS X is one of the biggest reasons that I stick with Linux and Xorg on my main machines. Whenever I use one of my Macs for an exended period of time, I feel like a marathon runner who’s had to trade in his sleek running shoes for a pair of swimmer’s flippers. If there was a third-party tool to provide focus-follows-mouse on OS X that worked properly, I’d install it in a heartbeat.1

Yegge also points out that the auto-raise flavor of focus-follows-mouse is a taste only an epileptic could love. Set the auto-raise delay too low, and moving your mouse across big windows towards a smaller target window, or moving it too slowly, causes a cascade of ugly, annoying window raises and destroys your carefully crafted window tabbing order. Set the auto-raise delay too high, and you’re waiting too long for windows to focus once you’ve got the mouse there. In my experience, there’s no delay setting that works — every setting is too high, too low, or both.

But there’s another flavor of focus-follows-mouse, that, as far as I know, is only available via a third-party plug-in to the semi-abandoned and deeply buggy Sawfish window manager. It’s a flavor that is evocative of ripe nectarines and raspberries on a summer afternoon. And it’s so good it’s kept me using Sawfish despite its abandonedness and bugginess.

It’s called stop-focus, and it works like this:

  1. While the mouse is moving, don’t raise windows.
  2. Once the mouse has stopped, raise the window it stopped on.

“Stopped” is defined as below a certain configurable velocity (ten pixels per second works for me), and windows are only raised after a short (200ms) delay. Stop focus lacks the cascading window raising behavior of auto-raise. Moving the mouse across slowly across several large interim windows doesn’t raise them or screw up window tabbing order. Starting to move the mouse to another window, and then stopping and moving it back to the currently focused window, which you and I do more often than we care to admit, doesn’t cause any window raises at all.

So, while focus-follows-mouse without raise-on-focus (Yegge’s preferred autofocus), may not be feasible on OS X right now, there is a variant on focus-follows-mouse, with sane rules about when to raise the window under the pointer, that might make all us old focus-follows-mouse Unix relics happy.

If I were an OS X hacker, I’d probably just go code this up right now. But I’m not, because, among other things, OS X’s mandatory click-to-focus bugs me too much. Chicken, meet egg; Egg, meet chicken.

  1. One of the other big reasons I don’t want to switch to OS X is that, for reasons I won’t get into here, the global menu bar really bugs me. Funny that these two gripes of mine turn out to be intimately connected. []