failing like never before


Once More With Feeling

I have a tendency of starting things and never finishing them and an inability to let go of the past. It is a dangerous pairing. Overtime, my mental to-do list has grown precariously large and every new project I take up is an eternal entry in an infinity long list that feeds my worries and doubts. At some point this has to stop, either I learn to take on less or I learn to let go. For now, I'm going to try to start finishing out old projects.

I started this blog by writing a custom ruby on rails web application for a high school economics project (I wanted to grow it as a blogging platform and sell ads). I transitioned my content to Typo (github link) after a year or so, and then not long after that to WordPress, which it currently still runs on. Towards the end of college, after experimenting with, what was then, a brand new programming language called Go, I thought that it would be a great learning experience to write a blog platform in Go. Not to mention, I wanted to get off of WordPress. WordPress is a perfectly functional application, but it is a sawmill when all I really need is a pocket knife. I find emacs to be preferable to a browser based WYSIWYG editor and I don't want complex, flashy templates laden with javascript. What I want is simplicity and something that just works. Its been more than ten years since I first thought of rewriting this site. Yet every time I started work, I would get caught up in other things and loose interest.

So I've started writing a sort-of flat file blog application, tailored to my requirements and I hope that this time I'll actually finish this time. I'm giving myself until April, when I have to renew my hosting fees. I want to finally put this task to rest, finally get off of WordPress, finally transition off of this ruby on rails hosting service, finally lighten my mental load.


Debroah Harkness’ All Souls Trilogy

I used to pick books by their cover. In the days before smart phones and readily available internet book reviews, my best determinant for a book's quality was the flashiness of the cover and the catchiness of the title. But now with a smart phone always in my pocket, I can instead rely on "expert" reviews for assistance. Some list of highly rated books had Debroah Harkness' All Souls Trilogy near the top, so when a trip to my local library revealed an entire shelf filled with multiple copies of the trilogy, I checked out the lot. My "expert" opinion of the trilogy, here, is mostly spoiler free.

Enter the women...
Diana Bishop is an Oxford educated PhD and Yale history professor, who is highly respected in her field of study and amazingly brilliant. Because her hobbies include rowing, running and yoga, she remains fit and eye-catchingly beautiful despite approaching middle age. She is also, of course, a (super) witch of unusual talent and strength, despite her attempts to forgot her witchy heritage. Bishop is clearly an all around exaggerated and cooler version of author and USC history professor Debroah Harkness (who received her PhD from well respected, but nonetheless uncool cow college, UC Davis).

Enter the vampire...
Matthew Clairmont is (about) 1500 years of age, fabulously wealthy (thanks to hundreds of years worth of accumulated riches), astonishingly brilliant and unnaturally well-educated (since he spent his unnatural lifetime accumulating degrees in various subject areas) and of course, broodingly handsome (because all vampires are HAWT). Clairmont has that bad-boy vibe, with a bloody and messy past (what member of the un-dead doesn't) hidden beneath a gentlemen's veneer. But his best characteristic is his deep love and undying devotion for his one true love, Debroah... I mean, Diana Bishop.

With Earth! Fire! Wind! Water! and Heart!...
The star crossed lovers Bishop and Clairmont must use their combined powers and a little help from their magical and non-magical friends to embark on a twisting adventure of self-preservation and a quest to save the world from evil.

Although the All Souls Trilogy thankfully avoids true Twilight levels of creepiness, it clearly possesses all the right elements to follow in the wake of the very profitable teen vampire novels. One of the most notable similarities being an unrealistic romance between a blandly awesome Mary Sue and her vampire Darcy, that goes from zero to fanfic faster then Hermoine Granger can raise her hand. A little sprinkle of creepy night time voyeurism and a dash of B.O. sniffing is even thrown in for good measure.

Although occasionally fast paced, the trilogy is generally slow moving. Too much time is spent describing the layout of a reading room at an Oxford college and the mechanics of requesting books. In the time it takes to describe Bishop's early morning run I could have just taken my own morning run. Add in numerous flashbacks, time jumps, side plots and ancillary characters, and the story is a lurching, disjointed slog-fest desperately in need of a therapist.

Taking the advice "write what you know" true to heart, Harkness plays to her strengths and litters the trilogy with historical tidbits and by the second book, we start to see quite a bit of historical fiction involving the likes of Christopher Marlowe and Walter Raleigh. But Harkness overindulges, and excessive in-depth descriptions of all things 16th century England are endless, contributing little to an already dragging plot and only succeed in stoking the enthusiasm of history buffs on the hunt for historical cameos.

All novels suffer deficiencies. A Twilight lover might find it in their heart to ignore the flaws of this trilogy. And make no mistake, this is a series meant to endear itself to the same people who enjoyed Twilight. For someone like me, the moment I started to see Twilight connections my guard was up and every word that followed faced a deeply prejudiced reader. I still finished the trilogy, with a generous helping of speed reading, because I hate to leave a book unfinished. When I turned the last page and everything was tied up in a nice pretty pink bow, and all the heroes were holding hands and singing kumbaya, I breathed a sigh of relief.



A Postmortem of Temporary Success

I submitted my previous post, Why Working at Google Is Not My Dream Job (Anymore), to HackerNews and it hit the front page! Within the first hour of its submission my post reached the front page, and then quickly peaked at number ten. It floated between the number ten and twelve spots for another three hours, but after six hours it had dropped to the second page. By the time I got home from work, it had fallen to the fourth or fifth page and had accumulated 196 points and 166 comments. You can tell I am a little bit excited about all this. I think in one day I had the same number of views that I have had in the last three years. Here's a link to the HN comments.

Have a look at this traffic graph of my site from today:

traffic graph

Some other quick notes.

  • I probably should have picked a different title. It served well to grab the attention of readers on HN, but it doesn't serve as well to summarize the contents of the post.
  • Lots of people had similar experiences with Google and other large companies. This is not surprising.
  • Lots of people had quite the opposite experience interviewing at Google. This is also not surprising.
  • There were some pretty rude/crass comments made. This should be expected with the internet.
  • At peak bandwidth, my server was struggling a little bit. Pages were definitely loading a little slower.
  • My comments section needs work. It is not escaping quotes properly
  • Someone took the opportunity to explore other posts and comment on a six year old post.



Why Working at Google Is Not My Dream Job (Anymore)

I had to sign several NDAs with Google and I am honestly too lazy to check what I can and cannot disclose. In light of that, I'll keep this vague and hopefully avoid getting sued (fingers-crossed).

I still remember being in high school and reading about how amazing it was to work at Google. About how amazing their free cafeterias were, their company gyms, massage chairs, and on-site laundry machines. Not to mention the brightly colored walls and hip decorations, which were a stark contrast to Intel where I interned. Conan O’Brien once compared Intel's offices to a parking garage, and complimented them on their excellent design choice to match the grey trim with the grey walls. When I was in university, and I learned more about the ground breaking projects Google had, the brilliant people they employed, and the amazing resources they provided their engineers, I knew that Google was a company I wanted to work for. What computer science undergraduate didn't dream of working at Google? To work at the same company with brilliant minds like Guido van Rossum, Leonard Kleinrock, and Ken Thompson? But in college, after two phone interviews I was rejected from a summer internship, and turned down for a full time position after another three phone interviews.

But not too long ago I interviewed with Google again. The entire experience, from first e-mail to final phone call stretched from the end of November to the beginning of April. I passed the phone interviews and the on-site interviews, all of which were arduous but not unmanageable.

After finding out I passed the interviews, and Google finished doing my background check, I spent the next two months on an emotional roller-coaster. I spoke to a couple hiring mangers, exchanged many confused and angry emails with friends and colleagues at Google, and had numerous phone calls with my recruiter, whose tone ranged from apologetic to congratulatory. At various times, I was not entirely sure if I was fully rejected, or if the only thing standing between me and a formal job offer was some paper work. Many phone calls with the recruiter (who was very kind and helpful) were required for clarification, but did little to assuage my annoyance as she was not allowed to explain any of the inner workings of the hiring process. As the weeks dragged on I received job offers from two other companies, so I gave the Google recruiter a deadline and the inscrutable bureaucracy missed it with all the grace of a three-legged elephant.

I am not overly found of interviews. They can be difficult and uncomfortable and require me taking time off from my current job, and getting my chain jerked around does nothing to help improve the situation. I was contacted by another Google recruiter two months back, who asked me if I was interested in the exciting new job opportunity she had (I wasn't, my current job is more interesting). The caveat was that I would have to do some more interviews. I was surprised to discover that although working at Google has been my dream job for many years, I turned down this opportunity with no difficulty whatsoever. The time and the trouble involved just didn't seem worth it anymore. While I still believe Google is doing great things, there are also other companies in the industry doing groundbreaking work, many of whom can reach a decision over an applicant in three months or less.

The problem is not the fault of the excellent people that Google employs, but rather the creaking, rambling structure of their hiring process. Why is the whole process so obfuscated? Why are they doing background checks and calling references before they are even close to being ready to make an offer? Why is some arbitrary committee rejecting a candidate at the eleventh hour after everything else has been approved? Why does the rain fall from up-above? How many licks does it take to get to the center of a tootsie pop?

These are questions that us non-Googlers (non-ooglers? nono-oglers?) may never know the answer to. But we can take solace in the fact that the Silicon Valley is a big place with many wonderful opportunities. And hey, I hear Facebook is hiring :)

(EDIT: see hackernews discussion)


My Bag

Below, is a list of all the items that I kept in my Timbuk2 messenger bag at all times.

  • hemp shoulder bag (for groceries)
  • ear plugs
  • ear buds
  • zip-lock bags
  • hand sanitizer
  • deodorant
  • sunblock
  • e-book reader
  • sunglasses
  • reading glasses
  • bike light
  • business cards
  • band-aids
  • tissues
  • pens and pencils
  • notebook
  • cell phone charger (for outlet and car)
  • USB memory stick
  • loose change
  • toothbrush

Basically anywhere I went, I took that bag with me, carrying all the aforementioned contents. It was essentially my purse, and with it, I was ready for any situation the world could throw at me. I never had to worry about packing for a trip or being an hour away from home and wishing I had my cell phone charger. Earlier this year, when I was given short notice that I had to fly to LA, all I needed to pack was a change of clothes. When I decided to go to the beach on a whim, I already had sun-screen ready to go. But because of the sheer amount of crap that I carried I found I could not carry the bag for an extended amount of time without my should hurting. This should not be any great surprise.

So in light of that, I've changed to a more minimalist carry along, eschewing everything except for my reading glasses and whatever essentials I know I will need. For example, now when I go to work I only carry my reading glasses, gym clothes, and laptop.

Of course, now I am completely unprepared for my everyday trials. Last Sunday I was in San Francisco, when a pebble in my shoe caused a cut on my heel and I was forced to duck into a drug store to buy some band-aids, a situation that could have been avoided if I had had my messenger bag stocked with band-aids with me (or if I had just taken the pebble out earlier). I foresee many more such instances should I continue in my minimalist carry-along lifestyle.

Clearly, the only solution is to work out more until my shoulder doesn't get as tired as quickly.


Why I Hate Remote Working

(Because titles with broad, sweeping statements (that may not actually totally reflect the author's opinion) are wonderful at garnering attention... So maybe read all the way through before deciding to lambaste me?)

I work in the Silicon Valley and my team works with people scattered across America, Singapore, Israel, and India. A terrific feat, that without technologies like desktop sharing, VoIP, and IM would be virtually impossible. Many tech companies support and even encourage remote workers these days. And why shouldn't they? It allows the company to hire the best engineers around the world without having to worry about providing a physical space for the engineers to work out of.

But communicating with people that are 12 hours ahead of you is hard. At 9 PM in California, it's 9:30 AM in India. So by the time that 9 PM meeting is done, it's 10 PM (or 1 AM(!) on the east coast), just enough time to talk "off-line" to individual people, wrap up loose ends, and go to sleep. You'll try to share the pain, alternating who has to take the late night meeting, so that everyone only loses one night a week. But things don't always work out according to plan. People are busy or sick, so meetings get moved, and then the management bureaucracy rears it's head and suddenly you're spending two or three nights a week in meetings.

Do you need some help from your co-workers that are abroad? Well I hope you enjoy working till 2 AM to accommodate their schedule. Do make sure to load up on coffee before tomorrow's 9 AM meeting.

And you'll especially love dragging yourself to work for your early morning meeting only to find it's been rescheduled (Hey, it was your fault. Maybe you should have checked your e-mails before you drove to work).

Social life? What's that? Maybe you'll make the mistake of going out with friends and accidentally miss your 8 PM meeting, much to the displeasure of your manager(s).

So now that I've raised your ire and piqued your interest, I can afford to be a little more reasonable. I do in fact work quite a lot, but it is not a 24/7 lifeless schedule. I have no trouble working with people in the midwest or the east coast; the time difference is not so substantial to be a burden. I've on occasion worked from home, or some other remote location and found it to be fairly easy and enjoyable.

This is not my attempt to publicly flame my company or deride my co-workers or managers. I actually like my company and enjoy the people I work with, but like all relationships it often needs work. The idea of remote workers working closely together as a team is relatively new to this world and difficult to pull off. They are plenty of success stories (just look at the open source community), but also many stories more like mine. I do not believe we created this globally distributed team without fully considering it's implication or the strain it would place on the engineers, and now that we're knee deep into it, happiness and normalcy is a long slog away.

TLDR: Long distance relationships are hard work. Make sure you've considered the challenges and set guidelines before you jump feet first into it.


Exceptions: A Tale of Love and Hate

I am very much a "C" style programmer, so exceptions are not something I use, or see on an everyday basis. Despite this, I've always had a love/hate relationship with exceptions, with my emotions depending on the situation I'm in.

In the past few years, I've used OCaml and Python on occasion to do some quick prototyping (and even some not-too-quick prototyping), and I found the languages' support for exceptions to be quite useful. Being able to call library functions without having to continuously check their return values, and instead be able to rely on the called functions to throw an exception when something bad happens, allows me to write much more quickly. Compare this, for example, to OpenCL in C (because C doesn't have exceptions), which I've been exploring recently. Even the most basic of OpenCL programs, to multiply two vectors, requires 50+ lines of boilerplate code, half of which is "if" statements checking to make sure a cl function didn't return -1. When I was writing my first OpenCL program, I was muttering in annoyance with how much boilerplate cruft I had to spew out and dreaming of exceptions. What I wanted, was for the cl functions to throw an exception on error, which would then allow me to have a single generic catch-all exception handler to dump some error messages and gracefully die.

But we shouldn't forget that exceptions have a place outside of simple prototyping also. Some level of terseness is always appreciated, especially when it allows the programmer to focus on the real task at hand, instead of writing an error check for every function call.

The real magic of exception handlers is that they allow the program to unwind the call stack all in one go, without actually having to jump to each and every return address on the stack as it goes. This is quite powerful, allowing the program to immediately handle the exception when it occurs, and removing the need for the programmer to organize her code to pass the error back up the call stack to where it can be processed.

But as Uncle Ben reminded us, with great power comes great responsibility. The power of exception handlers also gives programmers the ability to screw things up in remarkable ways. Because the exception basically forces a jump to the closest exception handler, all the code in between the exception and the handler won't get executed. This may include important bits like free() and close(), or even just simple things like finishing up printing parts of an output message. While the exception handler is *supposed* to handle all those bits, it's not uncommon for them to be forgotten. A common reason for this, is placing the exception handler very far away from where the exception might be thrown.

Which leads me nicely into my next story. I was working on a bug in some Python code last week, where an exception was thrown somewhere within several thousand lines of code and then handled way at the top of the program. The error message printed was "Exception occurred in <wubwubwub> server," making it quite possibly one of the most useless error messages of all time. I spent a good five minutes raging silently at the programming gods before trying to identify a root cause. It's important to remember that the point of exception handlers is to improve our lives not just in the short term, but also for the long term when code needs to be fixed and maintained.

There are of course many other reasons to love or hate exceptions. But these are the ones that strike a particular chord with me because of my limited experiences. I don't believe exceptions are totally bad, it is merely a powerful tool that is far too often misused, much like "goto" (let's not get ourselves muddled in that argument though...). My personal belief is that the power and terseness of exceptions is sufficient enough that it shouldn't be completely eschewed, but simply used sparingly and with great care. The problem with that idea of course, is that software development sits in the real world, not some lovey-dovey happy-place, where there is always plenty of time to work on projects, everyone is properly trained, all code is properly reviewed, and vampires sparkle in the sun.



Despite some early attempts, I have never found micro-blogging to be my "style." Possibly because I lack the ability to come up with short, pithy statements on the fly, or simply because I never had enough friends on Twitter to make it worth my while. But on occassion, I've seen or thought of something that would have made a great Twitter post. Such as:

  • the old Asian man I see in the mornings wearing a faded, neon t-shirt with the words "Super Fresh" on it
  • a guy rubbing deoderent on his groin in the gym locker room
  • Charles Xavier works at my company (his legal name is literally, Charles Xavier)
  • while driving home, a truck tailgated me on an empty 4 lane freeway at 5:30 AM
  • a lady shopping at Walmart wearing bright pink fluffy slippers
  • apparently a lot of people think it's OK to clip their fingernails on the train

When I was thinking about writing this post, I thought I would have a much longer and more interesting list. Sorry guys.


Tagged as: No Comments