Open Hack Day 2008 Wrapup
In the past, I’ve given two long accounts of the Open Hack Day’s (2006, 2007). This time I’m going to keep it pretty short.
My Talks
I gave two talks. The first one went well, no drops in internet access (paying Ash‘s assistant $50 to keep him busy during my talk really paid off). I lost internet access during my second talk, but was saved by Allen Tom and his EVDO-powered laptop. The talks seemed to be well received and generated a lot of questions.
My Job
I won’t mince words, I have hated my job for the past twelve months. Those who follow me on Twitter know that I’ve been a miserable person for quite some time now, frequently venting my frustrations loudly. I’ve simultaneously considered quitting the company, transferring internally and extended leave as solutions to my unhappiness.
It’s difficult to reconcile this attitude towards my job against my attitude leading up to the two previous hack days where I was proud of what I was working on and wanted to share it with the world. So much has changed since London, personally and professionally. It’s hard to accept so much change in such a short period of time, especially when it’s had such a huge impact on my mood.
I did, however, turn a bit of a corner in the past week. As hack day approached I actually found myself happy to be at work. I was enjoying what I was doing and I was looking forward to the next day. I was working twice as hard and getting four times the enjoyment and the only thing that had changed was that I was working towards hack day.Which brings me to…
Mo Kakwan
I will never forget the night I spent with Mo Kakwan at hack day. No, get your minds out of the gutter. It wasn’t like that. It was better. Mo is a hack day legend. Friday night, after the Girl Talk concert, Mo popped into the room where I was stationed for the evening. He was curious to know what was going on and what I did. We chatted for a little while and he explained what he was hacking this year.After a while, he asked if he could hang out in the room with several of us from Y!OS. Without blinking I told him, “of course”. For the next 17 hours (give or take) I was witness to the magic. Mo used me, mostly, as a sounding board for ideas in the early hours. In the later hours I helped him debug some issues in his hack. Throughout, I could see Mo go through all the hack day stages.
Mo started out passionate about the idea and quickly got to work. He was hammering out code, making things work. Before too long, he’d run into problems. After some quick thinking, he routed around the issues, determined to make the hack work. Hours later, as fatigue was kicking in, more problems. With the lack of sleep looming, you could see Mo getting frustrated as each problem mounted. He discovered he had a lot of work left to do and time was not on his side.
I crashed for two hours on the floor from 6:30-8:30am. When I awoke, he looked bad. The early morning had taken it’s toll on him. He’d hit the wall. He looked unsure of himself, disappointed that he might let everyone down by not outdoing his performance at the 2006 hack day.
Determined not to let that happen, I jumped in to lend what help I could. I pumped him up when he seemed down, helped to diagnose the snags he ran into and ran to get him help when I didn’t have an answer (thanks, Zach!). At around 2:00, only an hour before the presentations would start, he hit pay dirt. His virtual mosh pit sprung to life as physics engine-driven moshers hopped and bumped on stage with our recently digitized voices playing in the background. The joy on his face was incredible as we shared the (for me, anyway) most painful high-five, ever.
The joy of the hack is an amazing thing. That moment where your brain clicks in and says, “holy shit, after all that I can’t fucking believe it works!” It’s like the top of Everest to a climber. You get there cold, tired, beaten, exhausted and near death…but you will never trade that moment for anything else in your life. I relived that moment through Mo on Saturday…and realized how much I’ve missed it.
For the last twelve months I haven’t had my Everest. I’ve just been walking around the mountain…cold, hungry and near death. I need hack day. Not just one of them, I need lots of them. In fact, I need every day to be hack day. My happiness and my sanity depend on it.
So, how do I find a way to make every day hack day? I guess that’s my next hack.
6 comments September 15, 2008
Pulled pork to vegan in four months
Back in February I made pulled pork for our Super Bowl party. It was a defining moment as an omnivore, the culmination of 30+ years of meat eating. Four months later (mid June) I made the switch, cold turkey, to straight up vegan.
I don’t miss meat, I don’t miss eggs, I don’t miss dairy. As long as I go to places that have several tasty, vegan options I’m quite happy. You really can’t go wrong with Thai (which I love) and Lisa and I have been able to find a few really great vegetarian/vegan spots. I’ve been going strong for more than two months now and I’ve never once had an urge or a craving to give in to.
My mom asked me the other day how my “vegan diet” was going. I don’t think she understands that it’s not a diet, it’s a way of life. It’s not just about what you eat, it’s about everything you buy and use. Lisa and I have been going room by room, switching everything we own to vegan. Just today I got my first two pair of vegan shoes: the Simple Shoes ecoS-Hemp and the Sno Tire-Hemp.
Of course, just because I don’t consider it a “vegan diet” doesn’t mean I haven’t lost weight. I’m down almost ten pounds since mid-May, almost 2/3′s of which is body fat.
4 comments August 18, 2008
Eat your own dogfood
If you’re developing a web service of any kind, eat your own dogfood. Build something using your web service. In fact, build many things using your web service. Do it early and often before you release your web service to the public. Find out what sucks about your web service, what’s broken and what’s simply downright inconvenient about your web service and then fix it. If you find you want to murder someone while using your own web service, imagine what your consumers will think of it.
All too often I find myself running into web services that are inconvenient to use from a developer standpoint. Often it’s because the people implementing the web service build whatever’s convenient for them. Spend some time building applications using your web service, make a list of the things that were harder than they should have been and then go fix them. Your users will thank you.
Photo by booleansplit
1 comment July 2, 2008
Yahoo! Address Book Web Service released (finally)
When we first released the Yahoo! Mail Web Service, many people asked me if they could get access to the Yahoo! Address Book through it. I’m happy to say that today you can finally access the Yahoo! Address Book via web service.
This has been a really long time coming and I think it’s great that the Yahoo! Mail Web Service finally has the complimentary service it’s been crying out for. Also, it’ll be nice when certain, nameless social networking applications stop asking me for my username and password to import my Yahoo! Address Book.
2 comments June 4, 2008
Customer service starts with the customer
On Thursday I received a very strange phone call on my work line. Caller ID indicated only that the call had been transfered to my desk from elsewhere within the company. In the past, this has almost always been the calling card of recruiters. They find my profile on LinkedIn but don’t have my phone number. They know I work at Yahoo!, however, so they call the receptionist and ask to be transfered to me.
This time was different, however. I answered the phone, “This is Ryan.” Booming from the other end of the line I heard, “RYAN” in a strong southern accent. What followed could only be described as 5 minutes of nonstop railing against Yahoo! Customer Care. This gentleman had lost the password to his Yahoo! Mail account and over the course of the last week felt he was being given the runaround by our support technicians, going as far as to say that they had been “rude and hateful” towards him.
Working on his last nerve, he somehow found out about Yahoo!’s “postmaster Ryan K”. I’m nearly certain he’s referring to Ryan Knight, the “Ryan K” who took over the Yahoo! Mail blog after I hung up my evangelism cape. He managed to find the number for the Yahoo! Sunnyvale office and asked the receptionist to connect him to “Ryan K”. There’s more than one, so I can only guess that the receptionist rolled the dice and transferred him to me. Fortunately, he found a sympathetic ear.
After listening to him throw the customer care group under the bus for 5 straight minutes, we finally got to the part of the phone call where he would let me participate in the conversation. I asked some questions to collect as much information as possible. I tried to explain some of what might have happened during his dealings with customer care. He explained how important his email account was and how frustrating dealing with our customer care group was. He wasn’t happy and he wanted to make sure I was keenly aware of that fact.
After about 10 minutes on the phone with him, however, something happened. He came to know that I understood his frustrations and that I was equally disappointed with the experience he had been going through. In that instant, the phone conversation immediately lightened up. We each cracked a few jokes, shared a couple of laughs, established some common ground. Over the course of the next 5 minutes I collected a little more information and told him that I’d work my backchannels to get him the help he needed. It was the full 180. He started the phone call with spite and venom and he finished the call hopeful that we’d have this situation resolved for him. He was appreciative and, dare I say it, a bit happier.
Whether you’re dealing with 250 users or 250 million users, you can’t service your customers without talking to them. I mean really talking to them, not handling them with a phone in one hand and a script in the other. Talk to them, get to know them, understand why they’re upset and then make it all better.
7 comments May 9, 2008
Activator: Pimp my buddy list
Neal’s Web 2.0 video is up on YDN now. This is his YOS talk and includes a sneak peek of my new project, Activator, at about 30:20 into the video.
True to it’s name, Activator is here to activate your social graph. It’s meant to help out with “cold starting” social networks. Many times when you first arrive at a social network, you have no friends and no clear means of how to find your existing friends. Activator’s charter is to find those people for you and surface them so you can quickly and easily add them. I’m still trying to figure out what’s the best way to write openly about Activator without getting myself into trouble. For now, check out Neal’s video and you’ll see a quick screenshot of what Activator may look like when released.
1 comment May 1, 2008
My new Yahoo! project
Well, I guess now that Ari and Neal have totally totally let the cat out of the bag about YOS, I finally get to talk a little more openly about my new project: Activator. There’s a short paragraph in that article that mentions Activator:
The activator engine handles the combining of different relationship groupings, such as the Yahoo Mail e-mail address book, Yahoo Messenger contacts, Flickr friends, Yahoo 360, and Yahoo Mash, Sample said. Yahoo will be careful to protect user privacy and won’t apply the information without user consent, he added.
That’s not a great description of Activator, kind of leaves you wondering what the hell it actually does. As soon as I figure out how much I can talk about it I’ll post more. In any case, when you hear them talk about Activator you can think of me.
3 comments April 24, 2008
Code coverage != code quality
My current project has a new requirement that in order to be feature complete we must reach 80% code coverage with our unit tests. At first, this seems like a good idea. You want to ensure code quality. Unit tests can help with that. So you figure you’ll come up with a way of measuring how much of your code is being tested. Soon, however, deadlines get tighter and actual features need to be finished. The code coverage is short of the required 80%. So you take the following code:
if(unreachable) {
doTheUnreachable();
}
int codeCoverageRequired = 80;
cout < < "Feature complete requires " << codeCoverageRequired << "% code coverage" << endl;
This code has 4 executable lines of code, only 3 of which are being executed. You’re only at 75% code coverage. So you make the following change:
if(unreachable) {
doTheUnreachable();
}
int codeCoverageRequired = 80;
cout < < "Feature complete requires ";
cout << codeCoverageRequired;
cout << " % code coverage";
cout << endl;
This code has 7 lines of executable code, 6 of which are being executed. Now you’re at 86% code coverage. You’ve boosted your code coverage numbers by 10% simply by adjusting some lines of code. The quality is no better, but your code coverage is higher.
You can also play games by under-reporting the total lines of code in your project. As it turns out, this is easier than you might think. The code coverage tool we’re using (gcov) appears to have an issue with not reporting the lines of code in files that don’t get tested at all.
By gaming the system you’re able to give management the warm, fuzzy feeling that the code quality is high when, in truth, the opposite may true. Even a high code coverage number without gaming the system doesn’t necessarily mean that the code quality is high. Take the following, for example:
size_t function( void *ptr, size_t size, size_t nmemb, void *stream) {
((string*)stream).append(ptr, size * nmemb);
return size * nmemb;
}
string requestUrl(string url) {
static string buffer;
CURL* ch = curl_easy_init();
curl_easy_setopt(ch, CURLOPT_URL, "http://unclehulka.com/ryan/blog/");
curl_easy_setopt(ch, CURLOPT_WRITEDATA, &buffer);
curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, writehandle);
curl_easy_perform(ch);
curl_easy_cleanup(ch);
return buffer;
}
If you call requestUrl() from your unit test, you’ll end up with 100% code coverage, however this code is as buggy as it gets (see the ‘static string’ declaration).
The lesson is if you want to ensure code quality, use something that actually measures code quality.
3 comments April 20, 2008
Krav Maga – Day 7
Yeah, okay…totally lagging in posting this. Day 7 was this past Saturday (3/23). We started out slow with our warmups. Running around, touching shoulders, dropping and doing pushups and situps. We eventually partnered up. I joined up with a well-tattooed guy about my height but, perhaps, a little bigger than me. We did a bunch of 1-2 punching combinations with the heavy pads. The best part about my partner is that he barked. Not literally, but the noise he made as he exhaled with every punch sounded just like a dog. At one point, Lisa looked around wondering who let the dog in the gym. Then she realized the dog was beating the living hell out of my blocking pad.
We eventually got back to knees. This time I partnered up with another Ryan. The name was the only thing we had in common, he was a head taller than me and much, much stronger. When we did knees he was either throwing me 3 feet backwards or 1 foot in the air. That being said, it was more enjoyable than the last guy who did a number on my jaw. We focused a lot on the knees that involve a hold. In the first, you grab your partner by the tricep and shoulder and then ram your knee into them. In the second, you lock your hands behind their neck, pull them in towards you and throw your knee into their face/chin/chest.
The conditioning is getting a little better. I’ve been doing some conditioning on the side. Using a deck of cards, I turn cards face up one-by-one. Every red card is pushups, every black card is squats. Aces and number cards are 1-9, face cards are 10 and jokers are wild…20 pushups or squats. This past Monday I got through 30 cards in 30 minutes, finishing 95 pushups and 120 squats. Doesn’t sound like a lot for 30 minutes, but it’ll get your attention. I can’t take credit for this hellish workout. Credit for that goes to Matt Furey‘s book, Combat Conditioning.
Speaking of books, our school carries Complete Krav Maga, which features pictures of one of my instructors (Kirian). I’m going to pick up a copy soonish.
5 comments March 27, 2008
Krav Maga – Day 6
I skipped Krav Maga on Saturday last week (trying to give my thumbs more time to heal up) so this past Monday was day 6. I’m a little behind in posting this, so hopefully I remember everything.
As usual, Jesse worked us over pretty good from the start. I have to say, my conditioning is improving. I still get tired and it’s still difficult to keep my hands up through long drills. But it’s getting easier. I’m no longer doubled over gasping for air during drills. That’s really the strongest measure of what three weeks of classes has done for me. Technique is great and all, but I need to get back in shape.
We did a lot of punching and kicking combinations as a warm up. Eventually, Jesse turned us loose doing hammer punches. Imagine you’re hanging a picture on the wall and you’re putting up the nail. Clench your fist like you’re holding a hammer and hammer the nail into the wall. Now take the hammer out of your hand and replace the wall with your partner, holding the heavy bag. Generate power from the legs and twist the trunk, transferring power to the shoulders and drive the bottom of your fist into the bag as hard as possible. When done right, your partner will wonder if you’re about to stop their heart with these blows (I was getting concerned when my partner was wailing on me). We started out with just the right and progressed to left-right combinations. Periodically Jesse would signal for us to go “all out”, hammering with the left and the right in rapid succession, as hard and as fast as we could. It’s a pretty devastating blow. Imagine leading with a kick or knee to the groin to double your opponent over and then driving a hammer fist into the back of their neck. Yeah, brutal.
We also did some work on getting out of side headlocks. Imagine someone comes up to you from the side and wraps their arm around your head and neck from the side. They pull you to one side, knocking you off balance and torquing your neck in the process. The counter is to go with it. If the attacker comes from your left and pulls you that direction, pivot on the ball of your left foot, swinging the right foot in the direction the attacker is pulling you. When your right foot lands, you should be perpendicular to your opponent and as close to them as possible. The free right hand swings downwards and then up, into their groin. Strike at least once, preferably two or three times. As this is happening, the left hand goes up, eventually coming between your head and your opponent’s head. With the left hand, you smash the bridge of the nose with your palm and grab the chin with your fingers. Pull back, causing the head to tilt backwards. At this point, your opponent is wide open for a range of different attacks. Punch the face or throat. Better yet, bust out that powerful hammer punch you just learned.
It’s great fun. I was paired up with Nate, a level 2 student that I’ve worked with before. He’s big and not afraid to smack me around a bit (other people seem to think you’re made of glass at times) and he’s really good at telling me everything I’m doing wrong. After a few minutes I was getting the hang of it, but then class was over (pitty).
My thumbs are still pretty torn up, but are getting better. I managed to get out of this class without any new injuries, although one of my partners managed to poke me in the eye pretty well during one of the drills. No biggie, I made sure to put a little extra mustard on the hammer punches to return the favor.
In other Krav Maga news, we were given handbooks by the school. Among other things, it details what we’ll learn at each level. Let’s just say that the first item on the list for the green belt curriculum (level 3) is head-butting. Just 10 months to go.
1 comment March 19, 2008

