The Sweet Spot
On software, engineering leadership, and anything shiny.

Wisdom Series Graphic - Good Shepherd Christian Church

I was commissioned to create graphics for a sermon series titled “Wisdom” at my home church, Good Shepherd. Some of the artists and leaders decided to go with a lantern motif. I went ahead and sketched up these graphics in Illustrator, bumbling around a bit with the gradient mesh tool in the process.



Sensations - Negotiating Noise

Sensations - Negotiating Noise

I’m showing this and a few more design pieces at Exposed, Cal Christian Fellowship’s art and performance extravaganza tonight. You can visit it today, April 26–the gallery will be open all day in the Wurster lobby, and there are two performance shows: 6PM and 9PM in 112 Wurster.

Designing the ThinkAnywhere Logo

In my IEOR190A class (entrepreneurship), we’re developing a business plan of a company making a device that tracks gestures on any surface. Install it on a whiteboard or a chalkboard and boom, your gesture strokes are digitized and recorded on any Bluetooth-enabled computer.

This device is actually implemented right now by our friend Leo Tran in one of his EE classes, using only an LED light and a Wiimote controller. It works by using the infrared camera within the Wiimote to recognize the movement of the LED. The Wiimote then broadcasts its data to a computer via its Bluetooth link.

ThinkAnywhere Design Sketches

Some concept sketches, just for fun.

Now in designing the logo for this product, I wanted to convey a clean feel for the brand. Smooth, swooshy gradients and simple shapes tend to work well for this kind of thing. So I built a chalkboard (the green) and drew our device mounted above the chalkboard. The yellow beam conveys the idea that our device works via camera sensors.

ThinkAnywhere Branding


The logo was built entirely in Illustrator. I went with a dark background so the lighter shades of the camera, the IR beam and chalkboard could get a “pop”. The font you see there is Colaborate Bold–it’s nicely given out for free.

Tales from the crypt

Now I remember why I love and hate assembling computers.

You’ve got to love the rush of building something cool. The anticipation of the new BIOS screen–blue letters on black indicating some really high memory size and clock frequency. You are your very own Dr. Frankenstein and the monster is about to liiiiiive…

But more frequently than not, it plays out like this: after scanning the electronics ads (Slickdeals, Dealnews, the ever-present Fry’s ads on the back of the San Jose Mercury) for what seems like years, you finally get the courage to splurge a couple hundred bucks on assorted parts. You’ve done your research; the heatsink fan doesn’t collide with the on-board capacitors, your brand of memory doesn’t have any motherboard compatibility errors, your motherboard manufacturer is of good repute and doesn’t, for the first time, have parts from some no-name Chinese manufacturer (okay, so this is me speaking here).

You get your parts, and spend a couple of hours putting it all together. You painstakingly push clips into place, apply thermal grease as needed, silently curse the motherboard powers-that-be that pack front panel pin connectors so closely together. Your fingers grow raw from turning the screwdriver so many times. You wonder to yourself whether you’ll somehow accidentally fry some component by putting it on the table, or whether if by accidentally scraping your screwdriver across the PCB you’ve just junked your expensive toy.

I’ll spare you the gory details. But essentially, what usually happens is you get it all Assembled Together after an hour or so and then comes the Moment of Truth: you push the power button to witness your machine come gloriously to life and, in a wonderful demonstration of Murphy’s Law, one or more of the following will happen:

  1. You witness a bright flash of light, then smoke rises out from the PCB.

  2. Your computer will beep at you. Continuously. The screen will stay off, just for dramatic effect.

  3. Midway through the OS installation, your computer will freeze.

  4. Your hard drive gets corrupted from a rogue reboot.

  5. Nothing.

By the way, these have all happened to me at some point(s) in time.

After aforementioned catastrophe, you exhale deeply, clench your fists and then proceed to Pinpoint The Problem.

Remember the Scientific Method? Remember how you had to isolate one variable–the independent variable–while keeping everything else at a “control”? Well here’s the part where you scrounge up all available parts and start switching them in and out, testing each component one by one to see which part the problem resides in.

I hate the Scientific Method.

Here’s where you begin the Gradual Spiral Into Despair. It’s the sinking feeling you get after a couple of days you realize that you still don’t know what the problem is. Look at you, a loner in your room surrounded by junky computer parts all over the place. You’ve got red eyes from lack of sleep and staring at monitors. You haven’t seen a human being in two days. And when was the last time you showered?

But it’s all worth it when you emerge on the other side, bruised and broken but victorious.

Here’s to the ones who nevertheless press on. Here’s to the ones who will rather take a bullet than give up on your rig. Here’s to the ones who scoff at light and food and warmth and human companionship. Here’s to you, True Geek. You’ve got your scars, now here’s your reward: Dual Cores of Computing Sweetness. It’s rather worth it, won’t you say? Right?

Hey, you still there?

After site duplication, an .htaccess redirect for old Wordpress posts

I think I must preface this post with a bit of context:

A month ago I added a new blog ( I wanted that blog to become my personal blog and let this blog ( transition into a technical blog.

Here comes a technical post about transforming a personal blog into a technical blog.

So here were the problem(s) I faced:

  • Most of my posts here at were of personal nature, many which dated all the way back to 2002, my sophomore year of high school!

  • However, I had begun to write technical posts for a year or two–some thoughts on interface design, an occasional programming trick, cool regex expressions, et cetera.

  • Many of my posts have been linked all around the Internet.

Essentially, I wanted to:

  • Move the personal contents of the g9labs blog to the andrewhao blog,

  • While keeping all in-links to old g9labs content alive.

My solution was two-fold:

  1. I made a copy of my g9Labs* blog to the andrewhao blog. This was harder than I anticipated–I initially expected to simply use the WP export plugin to dump data from g9Labs* and import into andrewhao. However, this lost much of my metadata–comments, categories, tags. So I just decided to completely copy my g9Labs* WP database and WP directory into andrewhao. Yeah, hacky, I know. I’m not very proud of it.

  2. I added an .htaccess file to that did some magic. It identifies requests for posts that are earlier than the date of the blog fork and redirects those requests to, which is hosting a mirror of the post.

# redirecting requests to posts older than 2008-02-02 to
# pass the requester a 301 code (permanently removed)
# @author: Andrew Hao

# Lexically compare regex groups $1-$3 with the date: Feb. 03, 2008.
# Note that the RewriteRule below is reached only if the condition is true.
# Finally, note that $1-$3 are regex groups from the RewriteRule regex below.
RewriteCond $1$2$3 <20080203

# Match the incoming request: /YYYY/MM/DD/post-title and redirect the browser
# to
RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/*$$1
/$2/$3/$4/ [L,R=301]
... rest of .htaccess ...