For some reason my MySQL database keeps crashing (grrr!). My site was also down pretty much all day yesterday due to some kind of power outage… Combined with crappy .htaccess file support I’ve had to hack my way around it’s clearly time to switch hosts!

Somehow I got over 400 visitors on Friday which I can only attribute to my Tekzilla segment which was just released that afternoon. Wow, thanks for checking out my site everyone! Sorry there isn’t much here. I started working on this site a couple of years ago when I was just getting back into programming websites and I wanted to teach myself PHP and CSS and also try out WordPress. Now years later it’s still a woefully out-of-date work in progress, and I really have no excuse except that it never really seemed to matter much. It sort of does reflect quite poorly on a freelance web programmer though, doesn’t it… Shameful!

But yeah… so if you’re looking to hire someone with a bunch of random skills… maybe you’ll want to check out my resume instead? Lalala…

This website also doesn’t reflect it at all but I’m also just getting into the audio/music production business. I’ve partnered up with Colin Fairbairn, mixer extraordinaire, whose website you can check out at (half that studio gear is mine!). We freelance at local studios for recording projects and are otherwise taking on mostly mixing projects as we look for a space to set up shop. Look out for some “how to” home recording videos from us in the future!

Anyway thanks to everyone who wrote in to tell me that I did not in fact make a complete fool of myself in my first video on the interweb (or on anywhere, really). You are all very VERY kind people and I really appreciate the support! Having now watched it myself I guess it was more or less okay, though I definitely need to work on being WAY less nervous so I can speak naturally instead of being all rambling and halting and wooden. Maybe you’ll see me again on the show. Maybe.

But that is all boring stuff. What’s interesting is this funny sign from the Golden Gate Park.


Not a screen test…

Despite my having no on-screen experience whatsoever I somehow was invited to do a guest segment on a web broadcast show focused on tech. Unfortunately, it being unscripted AND my first time in front of a video camera, I was way too nervous to say anything intelligent and resorted mostly to “um” interspersed with barely coherent babbling that utterly failed to reach the point I had set out to make. Also my hands were shaking pretty uncontrollably and I think I blew through the demo without narrating anything. By the time I realized that what was going on wasn’t just some kind of screen test it was already over and apparently not quite bad enough to edit out of the show entirely…

While I have only a vague recollection of the whole ordeal, I do know with absolute certainty that I embarrassed myself quite thoroughly and no doubt came off as some kind of blithering idiot. It’s amazing how the simple presence of a video camera (actually, make that three very large video cameras plus a shocking number of super bright lights) somehow has the effect of wiping my brain completely clean. Ah well… at least there would be ample room for improvement. The show “airs” on Friday and my segment is pretty short, so maybe nobody will really notice it!

My sincere apologies to FreePOPs. I was sadly unable to properly convey how and why I consider the FreePOPs project to be the best of its kind, due to an appreciation for the application itself with its flexible configuration options and the extensive number of webmail plugins already included (that load on the fly via another plugin for easy updates!), and also for the great community of users and developers that respond QUICKLY to webmail interface changes by contributing their feedback and fixes (hooray for open source!). Hopefully I at least got across the message that it is extremely useful free cross-platform software and easy to configure, thus people will be inclined to check out the project anyway.

My setup (since no one asked): cron periodically calls fetchmail to forward (via postfix) all my fetched webmail to my usual POP/IMAP accessible email account. YAY! I set it up once and promptly forgot it was even there.

diary photos



Sadly, this is not my car.

diary food

Why does instant spaghetti taste like Tomato soup?

Being quite unskilled at cooking and currently without a full kitchen facility anyway, I have come to appreciate the variety of instant/microwave dinners available at my local Safeway. However after sampling a great number of brands and meal types I have noticed that despite the expansive variety, there seems to be an extremely narrow band of flavor.

And so we come to the exotic European noodle dish known as spaghetti. I am saddened to report that after extensive research, I have come to the conclusion that all instant spaghetti dinners taste exactly like tomato soup. Frozen, canned, and even the promising somewhat gourmet (ie. slightly more expensive) “NEVER FROZEN! STOVETOP COOKED!” microwavable spaghetti dishes… with or without “meatballs” (pieces of edible paper sponge)… all are simple tomato soup substitutions! How are companies getting away with this?!

Anyway in other more positive news I’ve recently discovered that caffeine free Coca-Cola tastes exactly the same as regular caffeinated Coca-Cola! HOORAY!

diary www

Ajax tabbed content that degrades gracefully without Javascript

Having no internet access at my new apartment has resulted in my being shockingly productive offline — writing, reading, and reworking bits of code that I might have a use for someday.

One of my recent obsessions has been with tabbed content. In my opinion, every page offering tabbed content simply MUST degrade gracefully without Javascript; there’s absolutely nothing worse than completely inaccessible content! For smaller, less complicated content panes, I’ve found this tabber script to be the best as the markup is very clean and minimal. In the absence of Javascript support, this method will simply show all content panes on the same page.

However, what I wanted was to have a dynamically loaded tabbed content page degrade to static tabbed content pages that still looked and functioned the same way. A web search led me to the Ajax Tabs Content script from Dynamic Drive. Without Javascript, it simply loads the content pane by itself in the browser window. I wanted it to load the pane from within the template of the original page, so I devised a method to accomplish this by using some PHP code.

All of the original features of the script are intact, including external css and javascript file support… but as with the original script, once loaded they’re there to stay through subsequent tab switches. I’ll have to see what I can do later about unloading those styles.

I also added cookies to the original script so that it now restores current tab content upon reload.

How it works should be pretty clear from looking at the demo source, and the PHP code is used in the same way that you would to handle any static menu and page templates: designate the currently selected item on the tabbed menu list, include the selected external source file in the content section, and add any associated stylesheets/javascript files to the header. To get the Javascript bit working, the link rel attributes should contain the content container id, and the rev attribute should contain a comma-separated list of the external files, source page first.

I suggest using mod_rewrite to rewrite the urls so that the links look pretty and ensure that all pages will get indexed by search engines.

Download demo source


Razr… fixing it yourself

YAY! It’s fixed! Despite the poorly detailed instructions I was sent along with the replacement OEM LCD unit from ebay, I somehow managed to NOT break any of the tiny ribbons while disassembling, shove the new LCD back in there, and snap it all back together with great success. Though it was much more difficult than I expected… due primarily to the fact that the delicate ribbon running along the entire face of the original LCD unit had to be removed from both the LCD and the glass plate covering, which were all attached to each other with extra strength sticky tape (no mention of this in the instructions at all!). Also the ebay listings advertising that all you need is a T5 screwdriver are complete LIES! You’ll need at the very least the screwdriver, a pin, and some kind of plastic card to use as a wedge to get the casing open, the plate covering off the LCD, and the ribbon off the old LCD face. Fingernails help too.


LCDs are fragile! Do not throw open phone onto bed, exposing large fragile unprotected LCD! Do not sit on, step on, or crush under your knee!

Anyway… I still need to write about GDC last week…

diary San Francisco www

How to get around on public transit in San Francisco

San Francisco public transit trip planner

Next Muni (real-time updates for popular bus/train lines)

Now all I need is a Sidekick…



I now feel completely fine about having cut my hair. In fact I feel guilty for being trivial and getting so upset about it.

I mean… it’s for children! It’s just hair! What was I thinking?!

As an apology, I offer this photo I took of a funny sign I passed on my way to the library.

No adults allowed



My new haircut is terrible! The stylist definitely chopped off more than the required 10 inches… and it really does just look like she just put my hair in a ponytail, cut above the line, and did nothing more.

I’m more convinced than ever now that caucasion people just don’t know how to cut Asian hair. I don’t have much of it left (it’s just about chin-length now) but I’m thinking of going somewhere to fix it.

And to top it all off I just broke my cell phone screen! The inside screen! Rendering it almost completely useless! Will Cingular warranty cover this? We’ll find out tomorrow…

Well it’s been one of those days… ARGH!!!!!!


Donating my hair to Locks of Love

Saddened by the recent loss of my favorite trademark baseball cap — lost during some long-island-iced-tea-induced drunken partying at the Cult of Sue Todd‘s show last Thursday — I have decided to expedite the process of chopping all my hair off and donating it to Locks of Love. (Locks of Love is a charity organization that makes wigs out of donated hair 10″ or longer and gives them to young kids.)

Rather than going with the do-it-myself method which yielded some very crooked results last time, I’ve booked an appointment at a salon for tomorrow. If something goes horribly wrong… well, I’ve decided that it’s about time I got myself a new hat anyway! And hair grows, even under hats! YAY!

But right now I’d like to have a few minutes of silence here for my beloved old hat, which has been with me throughout my travels to foreign lands, and despite being over 3 years old was still in remarkably good condition when it went AWOL…

Anyway, moving on…