<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>ryan kennedy's blog</title>
	<atom:link href="http://unclehulka.com/ryan/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://unclehulka.com/ryan/blog</link>
	<description>because the ass won't kick itself</description>
	<pubDate>Wed, 02 Jul 2008 18:24:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Eat your own dogfood</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/07/02/eat-your-own-dogfood/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/07/02/eat-your-own-dogfood/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 18:24:36 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/?p=500</guid>
		<description><![CDATA[If you&#8217;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&#8217;s broken and what&#8217;s simply [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/booleansplit/2447000009/"><img src='http://farm3.static.flickr.com/2298/2447000009_28aba2f8e4_m_d.jpg' alt='Now we know why Laura is doing so well on the growth charts. - by booleansplit' class='alignright' border='0' /></a>If you&#8217;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&#8217;s broken and what&#8217;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.</p>
<p>All too often I find myself running into web services that are inconvenient to use from a developer standpoint. Often it&#8217;s because the people implementing the web service build whatever&#8217;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.</p>
<p><i>Photo by <a href="http://flickr.com/photos/booleansplit/">booleansplit</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/07/02/eat-your-own-dogfood/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Yahoo! Address Book Web Service released (finally)</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/06/04/yahoo-address-book-web-service-released-finally/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/06/04/yahoo-address-book-web-service-released-finally/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 17:31:05 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/?p=499</guid>
		<description><![CDATA[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&#8217;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&#8217;s great that [...]]]></description>
			<content:encoded><![CDATA[<p>When we first <a href="http://unclehulka.com/ryan/blog/archives/2006/09/26/if-you-need-me-on-friday/">released the Yahoo! Mail Web Service</a>, many people asked me if they could get access to the <a href="http://address.yahoo.com/">Yahoo! Address Book</a> through it. I&#8217;m happy to say that today you can finally <a href="http://developer.yahoo.com/addressbook/">access the Yahoo! Address Book via web service</a>.</p>
<p>This has been a really long time coming and I think it&#8217;s great that the Yahoo! Mail Web Service finally has the complimentary service it&#8217;s been crying out for. Also, it&#8217;ll be nice when certain, nameless social networking applications stop asking me for my username and password to import my Yahoo! Address Book.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/06/04/yahoo-address-book-web-service-released-finally/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Customer service starts with the customer</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/05/09/customer-service-starts-with-the-customer/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/05/09/customer-service-starts-with-the-customer/#comments</comments>
		<pubDate>Sat, 10 May 2008 07:45:39 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Unfiled]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/05/09/customer-service-starts-with-the-customer/</guid>
		<description><![CDATA[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&#8217;t have my phone [...]]]></description>
			<content:encoded><![CDATA[<p>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&#8217;t have my phone number. They know I work at Yahoo!, however, so they call the receptionist and ask to be transfered to me.</p>
<p>This time was different, however. I answered the phone, &#8220;This is Ryan.&#8221; Booming from the other end of the line I heard, &#8220;RYAN&#8221; 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 &#8220;rude and hateful&#8221; towards him.</p>
<p>Working on his last nerve, he somehow found out about Yahoo!&#8217;s &#8220;postmaster Ryan K&#8221;. I&#8217;m nearly certain he&#8217;s referring to <a href="http://www.ymailblog.com/blog/2007/08/the-blog-returns-with-new-features-and-a-new-face/">Ryan Knight</a>, the &#8220;Ryan K&#8221; 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 &#8220;Ryan K&#8221;. There&#8217;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.</p>
<p>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&#8217;t happy and he wanted to make sure I was keenly aware of that fact.</p>
<p>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&#8217;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&#8217;d have this situation resolved for him. He was appreciative and, dare I say it, a bit happier.</p>
<p>Whether you&#8217;re dealing with 250 users or 250 million users, you can&#8217;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&#8217;re upset and then make it all better.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/05/09/customer-service-starts-with-the-customer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Activator: Pimp my buddy list</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/05/01/activator-pimp-my-buddy-list/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/05/01/activator-pimp-my-buddy-list/#comments</comments>
		<pubDate>Thu, 01 May 2008 17:58:51 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/05/01/activator-pimp-my-buddy-list/</guid>
		<description><![CDATA[Neal&#8217;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&#8217;s name, Activator is here to activate your social graph. It&#8217;s meant to help out with &#8220;cold starting&#8221; social networks. Many times when you [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.yahoo.net/blogs/theater/archives/2008/05/yos_a_deep_dive_with_neal_sample.html">Neal&#8217;s Web 2.0 video</a> is up on <a href="http://developer.yahoo.net">YDN</a> now. This is his YOS talk and includes a sneak peek of my new project, Activator, at about 30:20 into the video.</p>
<p>True to it&#8217;s name, Activator is here to activate your social graph. It&#8217;s meant to help out with &#8220;cold starting&#8221; 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&#8217;s charter is to find those people for you and surface them so you can quickly and easily add them. I&#8217;m still trying to figure out what&#8217;s the best way to write openly about Activator without getting myself into trouble. For now, check out Neal&#8217;s video and you&#8217;ll see a quick screenshot of what Activator may look like when released.</p>
<p><embed src=http://cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop_wrapper.swf?sv=0&#038;id=7626177&#038;autoStart=0&#038;infoEnable=1&#038;shareEnable=0&#038;prepanelEnable=1&#038;carouselEnable=0&#038;postpanelEnable=1 width=400 height=300 type=application/x-shockwave-flash></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/05/01/activator-pimp-my-buddy-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My new Yahoo! project</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/04/24/my-new-yahoo-project/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/04/24/my-new-yahoo-project/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 07:26:36 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/04/24/my-new-yahoo-project/</guid>
		<description><![CDATA[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&#8217;s a short paragraph in that article that mentions Activator:
The activator engine handles the combining of different relationship groupings, such as [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I guess now that Ari and Neal have totally <a href="http://www.news.com/8301-13953_3-9928557-80.html?part=rss&#038;subj=news&#038;tag=2547-1_3-0-20">totally let the cat out of the bag about YOS</a>, I finally get to talk a little more openly about my new project: Activator. There&#8217;s a short paragraph in that article that mentions Activator:</p>
<blockquote><p>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&#8217;t apply the information without user consent, he added.</p></blockquote>
<p>That&#8217;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&#8217;ll post more. In any case, when you hear them talk about Activator you can think of me.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/04/24/my-new-yahoo-project/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Code coverage != code quality</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/04/20/code-coverage-code-quality/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/04/20/code-coverage-code-quality/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 18:13:45 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/04/20/code-coverage-code-quality/</guid>
		<description><![CDATA[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&#8217;ll come up with a way of measuring [...]]]></description>
			<content:encoded><![CDATA[<p>My current project has a new requirement that in order to be feature complete we must reach 80% <a href="http://en.wikipedia.org/wiki/Code_coverage">code coverage</a> 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&#8217;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:</p>
<pre>
   if(unreachable) {
      doTheUnreachable();
   }

   int codeCoverageRequired = 80;
   cout < < "Feature complete requires " << codeCoverageRequired << "% code coverage" << endl;
</pre>
<p>This code has 4 executable lines of code, only 3 of which are being executed. You&#8217;re only at 75% code coverage. So you make the following change:</p>
</pre>
<pre>
   if(unreachable) {
      doTheUnreachable();
   }

   int codeCoverageRequired = 80;
   cout < < "Feature complete requires ";
   cout << codeCoverageRequired;
   cout << " % code coverage";
   cout << endl;
</pre>
<p>This code has 7 lines of executable code, 6 of which are being executed. Now you&#8217;re at 86% code coverage. You&#8217;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.</p>
<p>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&#8217;re using (<a href="http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_8.html">gcov</a>) appears to have an issue with not reporting the lines of code in files that don&#8217;t get tested at all.</p>
<p>By gaming the system you&#8217;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&#8217;t necessarily mean that the code quality is high. Take the following, for example:</p>
</pre>
<pre>
   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, &#038;buffer);
      curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, writehandle);
      curl_easy_perform(ch);
      curl_easy_cleanup(ch);

      return buffer;
   }
</pre>
<p>If you call requestUrl() from your unit test, you&#8217;ll end up with 100% code coverage, however this code is as buggy as it gets (see the &#8217;static string&#8217; declaration).</p>
<p>The lesson is if you want to ensure code quality, use something that actually measures code quality.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/04/20/code-coverage-code-quality/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Krav Maga - Day 7</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/03/27/krav-maga-day-7/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/03/27/krav-maga-day-7/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 07:19:25 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Health]]></category>

		<category><![CDATA[Krav Maga]]></category>

		<category><![CDATA[Recreation]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/03/27/krav-maga-day-7/</guid>
		<description><![CDATA[Yeah, okay&#8230;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah, okay&#8230;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.</p>
<p>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.</p>
<p>The conditioning is getting a little better. I&#8217;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&#8230;20 pushups or squats. This past Monday I got through 30 cards in 30 minutes, finishing 95 pushups and 120 squats. Doesn&#8217;t sound like a lot for 30 minutes, but it&#8217;ll get your attention. I can&#8217;t take credit for this hellish workout. Credit for that goes to <a href="http://www.mattfurey.com/">Matt Furey</a>&#8217;s book, <a href="http://www.amazon.com/Combat-Conditioning-Functional-Exercises-Fitness/dp/B000P1GZYE/">Combat Conditioning</a>.</p>
<p>Speaking of books, our school carries <a href="http://www.amazon.com/Complete-Krav-Maga-Self-Defense-Techniques/dp/1569755736/">Complete Krav Maga</a>, which features pictures of one of my instructors (Kirian). I&#8217;m going to pick up a copy soonish.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/03/27/krav-maga-day-7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Krav Maga - Day 6</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/03/19/krav-maga-day-6/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/03/19/krav-maga-day-6/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 07:41:07 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Health]]></category>

		<category><![CDATA[Krav Maga]]></category>

		<category><![CDATA[Recreation]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/03/19/krav-maga-day-6/</guid>
		<description><![CDATA[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&#8217;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. [...]]]></description>
			<content:encoded><![CDATA[<p>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&#8217;m a little behind in posting this, so hopefully I remember everything.</p>
<p>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&#8217;s still difficult to keep my hands up through long drills. But it&#8217;s getting easier. I&#8217;m no longer doubled over gasping for air during drills. That&#8217;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.</p>
<p>We did a lot of punching and kicking combinations as a warm up. Eventually, Jesse turned us loose doing hammer punches. Imagine you&#8217;re hanging a picture on the wall and you&#8217;re putting up the nail. Clench your fist like you&#8217;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&#8217;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 &#8220;all out&#8221;, hammering with the left and the right in rapid succession, as hard and as fast as we could. It&#8217;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.</p>
<p>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&#8217;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.</p>
<p>It&#8217;s great fun. I was paired up with Nate, a level 2 student that I&#8217;ve worked with before. He&#8217;s big and not afraid to smack me around a bit (other people seem to think you&#8217;re made of glass at times) and he&#8217;s really good at telling me everything I&#8217;m doing wrong. After a few minutes I was getting the hang of it, but then class was over (pitty).</p>
<p>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. <img src='http://unclehulka.com/ryan/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>In other Krav Maga news, we were given handbooks by the school. Among other things, it details what we&#8217;ll learn at each level. Let&#8217;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.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/03/19/krav-maga-day-6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Krav Maga - Day 5</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/03/10/krav-maga-day-5/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/03/10/krav-maga-day-5/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 06:08:33 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Health]]></category>

		<category><![CDATA[Krav Maga]]></category>

		<category><![CDATA[Recreation]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/03/10/krav-maga-day-5/</guid>
		<description><![CDATA[Before you ask&#8230;yes, I plan to blog every day of Krav Maga.
After the class on Saturday, I was looking forward to a slightly more tame Monday class. Jesse, the Monday instructor (and Saturday assistant), usually spends more of his class going over technique. That means things slow down a bit giving you more time to [...]]]></description>
			<content:encoded><![CDATA[<p>Before you ask&#8230;yes, I plan to blog every day of Krav Maga.</p>
<p>After the class on Saturday, I was looking forward to a slightly more tame Monday class. Jesse, the Monday instructor (and Saturday assistant), usually spends more of his class going over technique. That means things slow down a bit giving you more time to catch your breath. Today however&#8230;he had some surprises for us.</p>
<p>Things started out pretty normal. Some running (with ~16 people in a crowded room, running becomes interesting) along with pushups and mountain climbers to get the blood moving. After that we partnered up. I was teamed up with the 14 year old in the room, not his lucky day. If he was lucky he weighted around 130 pounds&#8230;roughly 100 pounds less than me. We started out with one person on all fours. They then piked up so they were on their hands and toes with their butt up in the air. The other partner then military crawled underneath them to the other side. One there, the partner on the ground dropped low, allowing the other partner to jump over them back to the starting position. The person on the ground goes back into the piked position and we start over. At one point, the instructor blew his whistle and we went either all under (back and forth) or all over (back and forth). It was insane, I&#8217;ve got the carpet burns on my knees to prove it.</p>
<p>When that was over, one partner again got on all fours. The other partner then sits on their shoulders, hooking their feet around the other partner&#8217;s knees on the ground. The partner on top leans back and sits back up&#8230;kind of like doing a situp. This is where the weight discrepancy came into play. I started on top, leaned back and the kid&#8217;s arms buckled and I flattened him like a pancake. Fortunately I caught myself with my arms and managed not to pop his skull. Not wanting a lawsuit, they found me a larger partner.</p>
<p>When that was done we went back to punching and kicking drills, this time moving around the classroom to get used to throwing punches while on the move. Usually we stand in one place and throw them, so this was a nice change of pace. These punching and kicking drills still kill me. My arms get tired and it becomes difficult to keep the hands up, which is essential in any combative confrontation (protect your head at all costs).</p>
<p>We wrapped up with more choking. I pitty the fool who tries to choke me from the front. He&#8217;s in for a rude surprise, roshambo style.</p>
<p>I feel like my conditioning is improving. I won&#8217;t say it&#8217;s good, because it&#8217;s not. I&#8217;m still the fat guy huffing and puffing (sometimes wheezing) with his hands on his knees. But I&#8217;m huffing and puffing a little less and I&#8217;m going on three weeks without missing a day. I dare say I&#8217;ve even dropped a little bit of fat over the past week, according to the scale anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/03/10/krav-maga-day-5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Important safety tips when handling json-c</title>
		<link>http://unclehulka.com/ryan/blog/archives/2008/03/10/important-safety-tips-when-handling-json-c/</link>
		<comments>http://unclehulka.com/ryan/blog/archives/2008/03/10/important-safety-tips-when-handling-json-c/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 08:06:13 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://unclehulka.com/ryan/blog/archives/2008/03/10/important-safety-tips-when-handling-json-c/</guid>
		<description><![CDATA[We&#8217;ve been using json-c internally for parsing and generating JSON in my new project. It&#8217;s a pretty nasty interface to work with, so I&#8217;ve been considering putting a prettier face on it for C++ developers. Today I sat down to do that. Instead, I spent many hours allowing json-c to repeatedly win games of roshambo.
It [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been using <a href="http://oss.metaparadigm.com/json-c/">json-c</a> internally for parsing and generating JSON in my new project. It&#8217;s a pretty nasty interface to work with, so I&#8217;ve been considering putting a prettier face on it for C++ developers. Today I sat down to do that. Instead, I spent many hours allowing json-c to repeatedly win games of <a href="http://www.erikandanna.com/Humor/FlashStuff/SouthPark/roshamboN.htm">roshambo</a>.</p>
<p>It started out simply enough, a simple class to wrap the json_object:</p>
<pre>
#include &lt;string&gt;
#include &lt;json/json_object.h&gt;

class JsonObject {
    private:
        json_object* obj;
        JsonObject();

    public:
        static JsonObject parse(const std::string&amp; json);
        ~JsonObject();
};
</pre>
<p>There wasn&#8217;t much to it at this point, but I had enough to set up my Makefile to check that everything compiled properly. Sadly&#8230;it did not. While the compilation step was successful, linking wasn&#8217;t so fortunate:</p>
<blockquote><p>
libjsonwrapper.so.1: undefined reference to `json_object_put(json_object*)&#8217;<br />
libjsonwrapper.so.1: undefined reference to `json_tokener_parse(char*)&#8217;
</p></blockquote>
<p>I spent some time (and by some time I mean most of Sunday) futzing with the Makefile, making sure json-c was properly installed, compiling my own version of json-c, checking different hardware architectures and operating systems&#8230;all with no luck whatsoever. I even looked at some other code that we have that uses json-c, checking out the Makefile to see what that code was doing that I wasn&#8217;t.</p>
<p>At around 8:45pm I took a break and went for Sunday bowling (Homestead Lanes does a special on Sunday nights, it&#8217;s great&#8230;you should go sometime). When I got home, I dug back in. Still no dice.</p>
<p>So I went back to the other code we&#8217;d written that uses json-c and looked at some other things. Finally, I happened upon it:</p>
<pre>
#include &lt;json/json.h&gt;
</pre>
<p>It&#8217;s subtle, but including json.h instead of json_object.h makes all the difference in the world. At first I didn&#8217;t want to know why, I was just mad that it mattered at all. Obviously json.h is some aggregate header that keeps you from having to #include every little file you need. But clearly it&#8217;s also performing a little black magic along the way that does something to affect linking. Ready to lose my shit, I dug into the header:</p>
<pre>
#ifdef __cplusplus
extern "C" {
#endif

#include "bits.h"
#include "debug.h"
#include "linkhash.h"
#include "arraylist.h"
#include "json_util.h"
#include "json_object.h"
#include "json_tokener.h"

#ifdef __cplusplus
}
#endif
</pre>
<p>Whoomp there it is: <b>extern &#8220;C&#8221;</b>. If you include json.h it does the right thing and makes everything inside of json-c use C linkage when compiling C++. If you don&#8217;t include json.h and instead include one of the files that it includes&#8230;then nothing uses C linkage causing the linker to FAIL.</p>
<p>Thanks json-c for consuming a day of my life that I can never have back.</p>
]]></content:encoded>
			<wfw:commentRss>http://unclehulka.com/ryan/blog/archives/2008/03/10/important-safety-tips-when-handling-json-c/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
