First impressions of Postful
Given our upcoming trip, I wanted to get the word out to my extended family (parents, siblings, grandparents, aunts, uncles, cousins, and even some close second-cousins) that Stephanie and I would no longer be living at our current address. Instead they could reach us via email or follow along on our blogs.
I liked the idea of doing it by postcard—something memorable that they could put on the fridge—but I assumed there probably weren’t many container ship postcards to choose from out there. Which meant only one thing: I’d have to make my own.
I’d recently stumbled upon Postful, a neat web-to-mail service that generates real physical mail and postcards from the web (for a nominal fee plus postage, of course). I was eager to have a reason to try out the service, and this seemed like the perfect opportunity. They don’t do international postcards (yet), so this test was limited to my US-based family.
For the message on the back, I figured I’d just embellish my Big Adventure post with a few contact details and then be off to the races. However, once I’d crafted the perfect message, I got the following inscrutable error message: field text will overflow. Translation: too much text to fit on the back of a postcard. Ok… Unfortunately there was no indication of what a reasonable amount of text would be, or where the text was getting cut off. I made at least a dozen revisions, trimming a phrase here, a sentence there, and each time, the same error. It was a little frustrating.
Eventually I pared the message down to a mere three sentences plus contact info, and the text was accepted—115 words using 639 characters—at long last with a nicely rendered version of the back of the postcard. Now that I knew what I had to work with, I was able to further tweak the text to use the space more effectively.

My Grandmother might be confused by the concept of “Snail” mail
The final step was to enter or upload addresses. They offered a convenient CSV-upload option, which gave me a reason to get everyone’s contact info in one place. I uploaded the file, and voila, 16 households were about to get my “junk” mail (all for only $9.44). I also had one sent to myself just to see how long it took, and what the quality was like.
I placed my order on August 1, and it arrived in San Francisco roughly a week later, on August 10. The print quality was good, but the paper wasn’t exactly postcard-stock. It was lower-gloss and a bit thinner than your typical tourist fare. But still, it did the job, and looks mighty fine on our fridge (while we still have one).
How to avoid a new cellphone contract
Recently my 4 year-old cellphone broke in half. Thus I was faced with two choices:
- start a new two-year contract, costing more per month than my current plan, to get a basic, albeit heavily-rebated cellphone
- buy the cellphone for its full MSRP of around $160
I kind of think of these as “taxes”. Carrier lock-in on one hand, or price-gouging on the other. Both of which I wanted to avoid. The guy at the Sprint store suggested that I check around Craigslist and eBay for someone selling their old phone.
Sure enough, someone on eBay was selling a Samsung A840 for $10 + $7 shipping. It was used, yes, and there’s always a risk that someone is selling stolen phones (though I’m guessing that’s more a problem with iPhones and Blackberries), but the seller, Legacy Wireless, seemed reputable. So for a mere $17, I got a new phone (well, new to me) without having to start a new contract.
Me with Richard Stallman
At the San Francisco WordCamp today I got to see Richard Stallman give his free software talk and then perform his crowd-pleasing St. IGNUcius bit. I don’t usually do this, but afterwards I stuck around so I could get my picture taken with him.
Deconstructing the iPad

Source: iFixit.com: iPad Teardown
I found this photo to be unexpectedly beautiful. Without any context, it seems to be an art piece, a reaction against consumerism, the curtains pulled back on the Wizard of Oz. It’s none of the above intentionally, and yet the more I thought about it, the more I realized how nicely it encapsulates several themes in tension.
First is the irony that someone, somewhere (presumably on the other side of the world) painstakingly put together this piece of groundbreaking technology, only so that someone, somewhere on this side of the world could take it apart.
Second, for a device heralded as the second-coming of top-down/canned/mainstream media, to see its “unraveling” exhibited on a niche site that exists solely to take hardware apart and show you what’s inside, is something that’s hard to imagine without the decentralized, user-generated, distributed nature of the web.
Third, it’s amusing how the act of disassembling something powerful (almost magical), in a way emasculates it, knocking it from a pedestal its creator works so hard to preserve.
How to get by in vi
I’m not embarrassed to say that these are the vi commands that I’ve been getting by on forever. In the order that I learned them. Thus they are probably a fair representation of the bare minimum one needs to know to survive in the wild and woolly world of vi.
i |
enter insert mode (for editing) |
[Esc] |
return to normal mode (for commands) |
:w |
save |
:wq |
save and close |
:q |
close |
:q! |
close and ignore changes |
x |
delete one character |
dd |
delete one row |
/[text] |
search for [text] |
n |
find next |
Anyway, I just learned three more at work this week.
u |
undo (last command) |
yy |
cut (or yank) line |
p |
paste |
That should hold me for what, another 10 years?
Bad habits from XHTML (to unlearn)
With the impending completion of the HTML5 spec, I thought I’d summarize the major differences between XHTML and HTML5 that affect me the most in my daily blogging and web development. Figured this might be useful to others.
Void elements (those that cannot contain text or other elements, and thus don’t require an end tag) don’t need to be closed with a nitpicky trailing slash
<br> is ok! <img src="image.jpg" alt="image"> is ok!
Unquoted attribute-values are ok (if the value doesn’t contain spaces)
<input type=checkbox> is ok!
Empty attributes (those that don’t require a value) don’t need values
<input type=checkbox checked> is ok!
The acronym element is now obsolete, use abbr instead (which is conveniently 3 characters shorter)
<abbr title="hypertext markup language">HTML</abbr>
Viva HTML!
Machine translation, semantic HTML, and embedded code, oh my!
It’s hard for me to believe that in the not so distant past I worked as a web producer for O’Reilly’s now defunct Online Publishing Group. Basically I was a sort of HTML jockey, shuttling articles through their content management system while ensuring that they all had consistent markup.
Since the articles O’Reilly published online dealt predominantly with programming, the vast majority contained code snippets and samples. Thus one of my primary roles was to ensure that the embedded code displayed properly on the web. Our HTML “style guide” dictated that all code be wrapped in <pre><code></code></pre> tags. I remember at the time thinking it a bit redundant—I occasionally embed code on my blog, but for simplicity’s sake, I use <pre> alone.
I discovered today another value to the semantic use of HTML: machine translation. I was looking through my referrer logs, and noticed someone had translated one of my posts with code samples. And sure enough, Google translated everything within the <pre> tags, mangling the code. Gah!
This made me think all the way back to my O’Reilly days, and I wondered what Google would do if I also wrapped the code block in <code> tags. Sure enough, they respected the semantic “intent” of the <code> tag and left it untranslated—BUT they also stripped out the newlines, collapsing multiple lines of code to a single line. So if anyone from the Google Translate team is reading, consider this a bug report.
Before Google Translate

After Google Translate

Note: Apparently Google will also avoid translating tags with class="notranslate".
Ubuntu on a Lenovo ThinkPad X100e
Stephanie’s brand new ThinkPad X100e arrived today, so I got to have some fun tonight and set up Ubuntu on it for her.
Installation via memory key
This was the first time I’d installed Ubuntu via memory key. Means I might not need my portable CD-ROM drive anymore…
- Downloaded the latest Ubuntu AMD64 Desktop ISO using BitTorrent
- Ran
usb-creatorto copy the ISO to my 2GB USB memory key (based on these instructions: Installation From USB Stick) - Got the “DBus error” like the instructions anticipated, so ran the following command to format my memory key:
sudo mkfs -t vfat /dev/sdb1
- Then I reran
usb-creator - Plugged the memory key into the X100e, booted it up, and installed Ubuntu
Getting wireless to work
Of course, bane of Linux, wireless didn’t work out of the box. This tends to be expected with brand new hardware, and it took me a while to piece together the right steps to get it working.
- Basically run exactly these commands (even
sudo su):sudo apt-get install build-essential wget http://launchpadlibrarian.net/34090404/rtl8192se_linux_2.6.0010.1012.2009_64bit.tar.gz sudo tar -xvzf rtl8192se_linux_2.6.0010.1012.2009_64bit.tar.gz cd rtl8192se_linux_2.6.0010.1020.2009_64bit sudo su make make install
- Then reboot and you have wireless
Note: If you run the Update Manager and it contains a new Linux kernel, you’ll need to rerun make install in ~/rtl8192se_linux_2.6.0010.1020.2009_64bit to reinstall the wireless drivers. So don’t get rid of the rtl8192se… directory. Hopefully this will cease to be a problem in the next release of Ubuntu.
Getting the TrackPoint scroll button to work
Apparently xorg.conf is a thing of the past, which kind of obsoletes my previous TrackPoint “scroll button” instructions. Oh well. This is how you do it now.
- Install and run gpointing-device-settings
sudo apt-get install gpointing-device-settings gpointing-device-settings
- Select TPPS/2 IBM TrackPoint on the left
- Check “Use wheel emulation”
- Select button #2





