<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Verbose Logging</title>
    <link>http://verboselogging.com/</link>
    <description>software development with some really amazing hair</description>
    <language>en-us</language>
    <managingEditor>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</managingEditor>
    <webMaster>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</webMaster>
    <lastBuildDate>Wed, 04 Apr 2012 10:00:00 -0600</lastBuildDate>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/VerboseLogging" /><feedburner:info uri="verboselogging" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.5/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>VerboseLogging</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
      <title>Go, The Standard Library Available</title>
      <category>Books</category>
      <pubDate>Wed, 04 Apr 2012 10:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/oB94chaQmBw/go-the-standard-library-available</link>
      <guid isPermaLink="false">http://verboselogging.com/2012/04/04/go-the-standard-library-available</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;It&amp;#8217;s actually happening. &lt;strong&gt;&lt;a href="http://thestdlib.com/go.html"&gt;I&amp;#8217;m writing a book.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I saw a gap in the programming world. Most languages have an extensive standard library and core that a lot of programmers are missing out on. I was doing things the long way because I just didn&amp;#8217;t know the standard library had something built in.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m trying to fill that gap with deep looks at the standard library of your favorite language. My first step is called &lt;strong&gt;&lt;a href="http://thestdlib.com/go.html"&gt;Go, The Standard Library&lt;/a&gt;&lt;/strong&gt;, about the new programming language from some really smart people at Google.&lt;/p&gt;
&lt;p&gt;You can head to &lt;a href="http://thestdlib.com/go.html"&gt;thestdlib.com&lt;/a&gt; to get &lt;strong&gt;&lt;a href="http://thestdlib.com/go.html"&gt;Go, The Standard Library&lt;/a&gt;&lt;/strong&gt; in it&amp;#8217;s super beta form. I&amp;#8217;ve got a first draft for the first chapter, which you can download absolutely free. If you like what you see, and I think you will, buy the book for only &lt;strong&gt;$29&lt;/strong&gt; and get involved in the writing process now! See the book as it&amp;#8217;s being written and give valuable feedback so I can make the best book possible.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t forget to sign up for the &lt;a href="http://thestdlib.com/"&gt;mailing list&lt;/a&gt; as well to keep abreast of updates to the book and other cool Standard Library things. I&amp;#8217;ll also be writing about related things here.&lt;/p&gt;
&lt;p&gt;If you want the full meal deal:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Follow &lt;a href="https://twitter.com/thestdlib"&gt;TheStdLib&lt;/a&gt; on Twitter&lt;/li&gt;
	&lt;li&gt;Subscribe to the &lt;a href="http://thestdlib.com/"&gt;mailing list&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Get &lt;a href="http://thestdlib.com/go.html"&gt;Go, The Standard Library&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="/feed"&gt;Subscribe&lt;/a&gt; to this blog&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=oB94chaQmBw:tUC0CxNy4p4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=oB94chaQmBw:tUC0CxNy4p4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=oB94chaQmBw:tUC0CxNy4p4:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=oB94chaQmBw:tUC0CxNy4p4:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/oB94chaQmBw" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2012/04/04/go-the-standard-library-available</feedburner:origLink></item>
    <item>
      <title>Mass Effect: A Retrospective</title>
      <category>Editorial</category>
      <pubDate>Tue, 27 Mar 2012 10:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/isuOow-lG5Q/mass-effect-a-retrospective</link>
      <guid isPermaLink="false">http://verboselogging.com/2012/03/27/mass-effect-a-retrospective</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;This is a weird gaming emotion post. If you&amp;#8217;re not into video games, or just don&amp;#8217;t feel like reading something not about programming, I won&amp;#8217;t feel bad if you leave. I just wanted to post this here as it&amp;#8217;s my main blogging platform, and it&amp;#8217;s about computer stuff so why not.&lt;/p&gt;
&lt;h4&gt;Spoiler Alert&lt;/h4&gt;
&lt;p&gt;I&amp;#8217;m going to write as if you know Mass Effect already. There will be spoilers (even if you&amp;#8217;ve played it all the way through, I talk about other things you can read in walkthroughs or alternate playthroughs), and I will assume prior knowledge of the game. On with the show.&lt;/p&gt;
&lt;h2&gt;I had a good ole&amp;#8217; man cry&lt;/h2&gt;
&lt;p&gt;When I finished ME3, I cried. Not like a happy I-can&amp;#8217;t-believe-we-did-it-cry, and certainly not because I thought the ending was terrible, but a genuine deep emotional cry.&lt;/p&gt;
&lt;p&gt;I teared up a little during the ending cinematic and watched the credits for my friends.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; I put my controller down after the father and child bit, sighed a big sigh, and just up and cried. I think it was because now I could finally reflect on what happened in the past hundred or so hours of gameplay over the course of three games. In the first game, I sucked it up when Ashley died, because we had bigger problems to deal with. I didn&amp;#8217;t concern myself with the immediate results of decisions because there was always a more immediate threat. With the Reapers and Shepard dead, I could really look back on what I had done, the decisions I had made, and the final consequences they had resulted in.&lt;/p&gt;
&lt;p&gt;To really understand why, I had to look back on Commander Shepard&amp;#8217;s history.&lt;/p&gt;
&lt;h2&gt;Mass Effect&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/93/2fcc73884feb7dabd519989fe01fc9/ashley.png" class="right bleft bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h3&gt;Kaiden and Ashley&lt;/h3&gt;
&lt;p&gt;Early in my journey, I didn&amp;#8217;t pay much attention to Ashley. I played a female Shepard named Tara, so I spent more time dealing with Kaiden in order to get the Paramour achievement. In retrospect, Ashley aligned more with Tara&amp;#8217;s values, and Kaiden got annoying. He seemed more concerned with doing the right thing right now for every person that came along, as opposed to a more Star Trek like approach of &lt;em&gt;the needs of the many outweigh the needs of the few.&lt;/em&gt; I tried to see the big picture and left no option off the table when it came to stopping Saren. Ashley was a soldier first.&lt;/p&gt;
&lt;h3&gt;Garrus&lt;/h3&gt;
&lt;p&gt;Garrus was always at my side. From the initial missions on the Citadel, right up until the last dash past a Reaper to the beam. His sniper rifle was always ready to take out whatever came our way. He was a good friend.&lt;/p&gt;
&lt;h3&gt;Wrex&lt;/h3&gt;
&lt;p&gt;Wrex always made me laugh, and never gave up. Shotgun in hand and witty lines on the tip of his Krogan tongue, he didn&amp;#8217;t take shit from anything or anybody. I was immediately sympathetic to him and wanted to cure the genophage, but you can only do so much in one game. I prevented Ashley from putting a bullet in his head and he remained in the universe.&lt;/p&gt;
&lt;h3&gt;Tali&lt;/h3&gt;
&lt;p&gt;You meet Tali in a dark alleyway getting jumped by thugs. She kicks ass and takes names, and holds her own. I always thought of Tali like a little sister or something. Her Quarian respirator gave her a vulnerable quality that I felt I needed to protect and look out for. On the other hand, she&amp;#8217;s quick with her Omnitool and is quite useful when the mission calls for an engineer.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/5b/60507f6c01f22a577d796e2bdca0a5/liara.png" class="fleft bright bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h3&gt;Liara&lt;/h3&gt;
&lt;p&gt;A sexy blue scientist trapped in a mine. With Liara&amp;#8217;s brain comes her biotic brawn too, and you quickly learn she can be a formidable ally in combat. Her biotic powers make quite a mess of foes especially if paired with Garrus or another non-biotic as your other squad member. She was always very calm and collected, and was a bit of a moral compass for me. She was more rational than Ashley, but still saw the big picture. For the first game she was a valuable member of the team, though I never pursued any relationship with her until the third instalment.&lt;/p&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Noveria&lt;/h3&gt;
&lt;p&gt;The key part about Noveria was that I opted to kill the Rachni queen. Who needs that shit running around the galaxy? I surprised myself a bit when I opted to ally with the Rachni in ME3. Back in the first game, the problems didn&amp;#8217;t seem so big, but now shit&amp;#8217;s getting real, so we&amp;#8217;ll need a bit more help. Besides, if they get out of control, I&amp;#8217;m sure the Krogan will have fun keeping them in line.&lt;/p&gt;
&lt;h3&gt;Virmire&lt;/h3&gt;
&lt;p&gt;This was tough. You never really had to make these kinds of choices in video games before. You develop relationships with these characters, and now you get to choose who lives and who dies. I was working on a romance with Kaiden&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; so I chose Ashley to stay behind. That decision haunted me throughout the series whenever I had to listen to Kaiden whine. I didn&amp;#8217;t want to leave anybody behind, but I believe Ashley was the better soldier in the end, and she should have been there with me for the rest of the mission.&lt;/p&gt;
&lt;h3&gt;Saren&lt;/h3&gt;
&lt;p&gt;In the end, I felt sorry for Saren. He was being controlled by Sovereign, and (brutally) died twice because of it. I felt like I was doing him a favor; putting him out of his misery. Through the whole game you&amp;#8217;re led to believe your chasing after this madman. Turns out you&amp;#8217;re trying to save a puppet.&lt;/p&gt;
&lt;h2&gt;Mass Effect 2&lt;/h2&gt;
&lt;h3&gt;Mordin&lt;/h3&gt;
&lt;p&gt;Initially I thought Mordin would be more of a nuisance than useful but he quickly became a source of engineering smarts and entertainment. He became a good friend, helped out in any way he could, and even related to Grunt and Garrus.&lt;/p&gt;
&lt;h3&gt;Jack&lt;/h3&gt;
&lt;p&gt;The best description of Jack is the badass biotic. Tattoos and an attitude, she always had something to say, and it probably involved swearing. I liked Jack but she wasn&amp;#8217;t too fond of me, being a girl and all. It was good to see her in the third game as a teacher, and she kind of opened up, and shed some of that harse exterior. I&amp;#8217;m going to play through again as a male Shepard and see how the romance plays out with her.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/a2/8c081e73011aa046e34e92c4bbbbcf/garrus.jpg" class="fright bleft bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h3&gt;Garrus&lt;/h3&gt;
&lt;p&gt;Garrus was a nice familiar face, which helped keep things relative with the new crew members. He was Tara&amp;#8217;s romance in the second instalment opting to cut Kaiden loose. His sniper rifle was once again very useful.&lt;/p&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Collector Station&lt;/h3&gt;
&lt;p&gt;Who needs that shit lying around? I destroyed it, like a boss.&lt;/p&gt;
&lt;h2&gt;Mass Effect 3&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/3b/515045d8428c97bf60aa5c180f801c/edi.jpg" class="fleft bright bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;EDI&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;How do you make artificial life sexy? Put it in a rockin&amp;#8217; robot body. I sort of steered her away from Joker, even though I thought it would be good for him. It seemed like it could be a bad idea for some reason. Maybe because she was Cerberus technology, but something just didn&amp;#8217;t seem entirely honest about her. She turned out alright in the end.&lt;/p&gt;
&lt;h3&gt;Liara&lt;/h3&gt;
&lt;p&gt;Liara seemed more mature in the third chapter. Something about her, maybe her clothes, or just her general attitude, but something stuck out. I gravitated to her and she became my final romance in the series.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll miss her the most.&lt;/p&gt;
&lt;h3&gt;Mordin and the Krogan Genophage&lt;/h3&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/8c/57fdddcf005bbc0b39d8cc0c4e759d/mordin.png" class="fright bleft bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;I was hellbent on curing the genophage since the first game, but this became a harder decision when the shit hit the fan and Mordin would have to stay behind to finish the process. I don&amp;#8217;t know how I would have felt in the first game had I known a character I didn&amp;#8217;t know yet would have to die. I really liked this part of the choice system, since I had already made my decision in the first game, but it&amp;#8217;s not until the second game where you meet the character that has to do the deed, and you don&amp;#8217;t understand the connection until you&amp;#8217;re in the process of going through with it. Mordin was always a moral character&lt;sup class="footnote" id="fnr3"&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; which helped me deal with having to leave him behind. He wanted to do the right thing, though the Solarians weren&amp;#8217;t very happy.&lt;/p&gt;
&lt;h3&gt;Joker&lt;/h3&gt;
&lt;p&gt;It was good to see him cut loose a little bit and bust a move on the dance floor. Not literally, thankfully.&lt;/p&gt;
&lt;h3&gt;Javik&lt;/h3&gt;
&lt;p&gt;What a dick, though it was pretty hilarious hearing about how the Solarians used to eat flies.&lt;/p&gt;
&lt;h3&gt;Legion/The Geth and Tali/The Quarians&lt;/h3&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/aa/d0388501d043930c8d6c3333179386/tali.jpg" class="fleft bright bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Wow, this one was tough. I wanted to free the Geth from the beginning. I told Legion to take care of business and told Tali to get her people to stop, otherwise they&amp;#8217;d be wiped out by the Geth. That failed, and Tali took off her respirator and stepped off a cliff. I started to freak out a little in this scene, and try as I might to save her, I couldn&amp;#8217;t and instead could only watch as my friend fell to her death, because of a decision I made. Legion would be sacrificed in freeing the Geth as well, so that was two friends and an entire race in one decision. This decision also ties into the ending.&lt;/p&gt;
&lt;h3&gt;The End&lt;/h3&gt;
&lt;p&gt;In my ending, I had about 4800 points with a rating of 50% (I charged through the game, with no multiplayer), so I ended up with two choices: destroy the Reapers or control them. I followed through with my mission from day one and opted to destroy them. This left earth saved but in ruins, and destroyed all synthetic life (including the Geth and &lt;span class="caps"&gt;EDI&lt;/span&gt;) and wiped out the Mass relays. Let&amp;#8217;s discuss.&lt;/p&gt;
&lt;p&gt;Now I didn&amp;#8217;t think this was a terrible ending. From the beginning of ME2 (you know, where you die) I had accepted the fact that this was going to be a suicide mission at some point.&lt;sup class="footnote" id="fnr4"&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt; I made sure to talk to all of my friends and ship mates, say my goodbyes, before heading out on the final push to the beam. I sort of took the ending at face value, in that I (Shepard) actually did what happened in the final moments.&lt;/p&gt;
&lt;p&gt;There is the indoctrination theory which basically says that Shepard was being indoctrinated and these last moments were your subconscious dealing with said indoctrination, and by destroying them you are fighting off their control (possibly surviving). The other options were control (an illusion by the Reapers, perhaps?) and depending on your points at the end, synthesis (accepting the indoctrination?). I like that theory myself. Think back to Saren and The Illusive Man. Saren was indoctrinated, The Illusive Man chose control, and both failed.&lt;/p&gt;
&lt;p&gt;So regardless of all that, I chose to do what I came to do, and destroyed the Reapers. This had a number of consequences.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The Mass relays were destroyed, leaving everybody in the system they were in. The fleets that came together to help with the final battle (um, all of them) are basically stuck in our solar system. Ouch.&lt;/li&gt;
	&lt;li&gt;The Normandy went down on a planet in who-knows-what system, which might not even be inhabited, so they could be there until their death. This is the one thing that did bug me a little bit, because it seems a little weird that the Normandy would be running through a Mass relay at that time.&lt;/li&gt;
	&lt;li&gt;All synthetic life was wiped out, including the Geth, which I previously saved at the expense of two friends and an entire race. &lt;span class="caps"&gt;FML&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the galaxy is safe from the Reapers, but at what cost? Friends have been lost, races have been wiped out, systems have been cut off, and Earth (among other planets) is in ruins. They can rebuild, the Mass relay technology was invented once, so I&amp;#8217;m sure somebody can invent it again, but it won&amp;#8217;t happen overnight. I can take a quantum of solace in the fact that Javik is around, and might be able to assist in some way the rebuilding of Mass relays. It will take time, but with the Reapers gone they&amp;#8217;ve got all the time in the world.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot to do to rebuild the galaxy, but they&amp;#8217;ll have to do it without Tara Shepard.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Disclaimer, I worked for BioWare as an engineering coop student, and have many friends that work in the Edmonton office.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; #FemShep &lt;span class="caps"&gt;FTW&lt;/span&gt;&lt;/p&gt;
&lt;p class="footnote" id="fn3"&gt;&lt;a href="#fnr3"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; Except possibly for one part. I seem to remember him wanting to kill somebody in ME2, which I might have let happen. Will have to see on another play through.&lt;/p&gt;
&lt;p class="footnote" id="fn4"&gt;&lt;a href="#fnr4"&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt; ME2 &lt;strong&gt;was&lt;/strong&gt; a suicide mission for some people.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=isuOow-lG5Q:qtn_QTGg0DM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=isuOow-lG5Q:qtn_QTGg0DM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=isuOow-lG5Q:qtn_QTGg0DM:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=isuOow-lG5Q:qtn_QTGg0DM:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/isuOow-lG5Q" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2012/03/27/mass-effect-a-retrospective</feedburner:origLink></item>
    <item>
      <title>I'd Be a Terrible Contractor</title>
      <category>Editorial</category>
      <pubDate>Wed, 01 Feb 2012 10:00:00 -0700</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/aiGmRzq4Esw/i-d-be-a-terrible-contractor</link>
      <guid isPermaLink="false">http://verboselogging.com/2012/02/01/i-d-be-a-terrible-contractor</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;Instead of doing the standard 9-5 salary based job, it&amp;#8217;s popular in the software development world to work as a contractor, or freelancer.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Right now, I do the 9-5 thing. I&amp;#8217;m learning it&amp;#8217;s because of one major fact.&lt;/p&gt;
&lt;h2&gt;I&amp;#8217;d be terrible at it&lt;/h2&gt;
&lt;p&gt;It comes down to the fact that as a contractor, &lt;strong&gt;you have no control over the environment.&lt;/strong&gt; The company paying you doesn&amp;#8217;t use git? Too bad. Git, but no GitHub? So sad. Test-unit when you love rspec? Why don&amp;#8217;t I get my violin and play you a sad song?&lt;/p&gt;
&lt;p&gt;When you&amp;#8217;re employed full time, you can at least lobby to get things changed. I did this successfully to some degree at a previous job (svn to git migration).&lt;/p&gt;
&lt;h2&gt;Choices&lt;/h2&gt;
&lt;p&gt;Oh sure, you can pick and choose your clients, but nobody&amp;#8217;s perfect. You&amp;#8217;ll have to sacrifice on something. If you found the perfect client, then you&amp;#8217;d probably want to work for them all the time.&lt;/p&gt;
&lt;p&gt;In that case, why aren&amp;#8217;t you doing the 9-5 salary thing? Then you don&amp;#8217;t have to worry about handling benefits, stashing money for taxes, and all that crap that comes with being a contractor.&lt;/p&gt;
&lt;h2&gt;Diva&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;d whine so much about things not going my way. Or I&amp;#8217;d just charge the customer more money. Oh you don&amp;#8217;t use GitHub? How about $5/hr more. Oh you don&amp;#8217;t use git at all? Mercurial? That&amp;#8217;s fine, at least it&amp;#8217;s a &lt;span class="caps"&gt;DVCS&lt;/span&gt;. &lt;span class="caps"&gt;SVN&lt;/span&gt;? Maybe $20/hr more. I really hate &lt;span class="caps"&gt;SVN&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Life&amp;#8217;s too short to work with shitty tools.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On another note, happy birthday mom! Love you!&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; There are differences between the two terms, and there is even a third, the consultant, but I&amp;#8217;m concentrating on the fact that you&amp;#8217;re working for yourself.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aiGmRzq4Esw:VzE6uxsxmdA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aiGmRzq4Esw:VzE6uxsxmdA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aiGmRzq4Esw:VzE6uxsxmdA:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aiGmRzq4Esw:VzE6uxsxmdA:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/aiGmRzq4Esw" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2012/02/01/i-d-be-a-terrible-contractor</feedburner:origLink></item>
    <item>
      <title>Proc, Block, and Two Smoking Lambdas</title>
      <category>Programming</category>
      <pubDate>Tue, 20 Sep 2011 10:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/EQAzdM35cwE/proc-block-and-two-smoking-lambdas</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/09/20/proc-block-and-two-smoking-lambdas</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/82/e37bbd0d09a85b24b1265f4a046160/vinnie.jpg" class="fright bleft bbottom round medium" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Ruby 1.9 has 4 different ways to deal with closures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cue music&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Proc&lt;/h2&gt;
&lt;p&gt;Procs are the weird ones of the bunch. Technically, all of these things I&amp;#8217;m going to describe are Procs. By that I mean, if you check the &lt;code&gt;class&lt;/code&gt;, it&amp;#8217;s a &lt;code&gt;Proc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;Proc&lt;/code&gt; is made by using &lt;code&gt;Proc.new&lt;/code&gt; and passing a block, &lt;code&gt;Proc.new { |x| x }&lt;/code&gt;, or by using the &lt;code&gt;proc&lt;/code&gt; keyword, &lt;code&gt;proc { |x| x }&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;return&lt;/code&gt; from inside exits completely out of the method enclosing the &lt;code&gt;Proc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;Proc&lt;/code&gt; doesn&amp;#8217;t care about the arguments passed. If you define a &lt;code&gt;Proc&lt;/code&gt; with two parameters, and you pass only 1, or possibly 3, it keeps on trucking. In the case of 1 argument, the second parameter will have the value &lt;code&gt;nil&lt;/code&gt;. If you pass extra arguments, they will be ignored and lost.&lt;/p&gt;
&lt;h2&gt;Block&lt;/h2&gt;
&lt;p&gt;Blocks are when you pass an anonymous closure to a method:&lt;/p&gt;
&lt;pre&gt;def my_method
  my_other_method(1) do |x, y|
    return x + y
  end
end&lt;/pre&gt;
&lt;p&gt;They work exactly like a &lt;code&gt;Proc&lt;/code&gt;. It wouldn&amp;#8217;t matter how many arguments &lt;code&gt;my_other_method&lt;/code&gt; called &lt;code&gt;yield&lt;/code&gt; with, the block would execute just fine.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; The &lt;code&gt;return&lt;/code&gt; will also return out of &lt;code&gt;my_method&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Lambda&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;lambda&lt;/code&gt; is probably what you deal with most of time. You make them with the &lt;code&gt;lambda&lt;/code&gt; keyword: &lt;code&gt;f = lambda { |x| x + 1 }&lt;/code&gt;. They are a bit different.&lt;/p&gt;
&lt;p&gt;Unlike a &lt;code&gt;Proc&lt;/code&gt;, using &lt;code&gt;return&lt;/code&gt; in a &lt;code&gt;lambda&lt;/code&gt; will simply return from the &lt;code&gt;lambda&lt;/code&gt;, pretty much like you&amp;#8217;d expect.&lt;/p&gt;
&lt;p&gt;Also unlike a &lt;code&gt;Proc&lt;/code&gt;, &lt;code&gt;lambda&lt;/code&gt; likes to whine if you pass an incorrect number of arguments. It will blow up with an &lt;code&gt;ArgumentError&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Stabby&lt;/h2&gt;
&lt;p&gt;The stabby is new in Ruby 1.9, and is just syntactic sugar for &lt;code&gt;lambda&lt;/code&gt;. These are equivalent:&lt;/p&gt;
&lt;pre&gt;f = lambda { |x| x + 1 }&lt;/pre&gt;
&lt;pre&gt;f2 = -&amp;gt;(x) { x + 1 }&lt;/pre&gt;
&lt;h2&gt;What&amp;#8217;s all this then?&lt;/h2&gt;
&lt;p&gt;So anyway I wrote some specs, and here they are (or rather their output). If you want to check out the actual specs, or run them for yourself, head on over to &lt;a href="https://github.com/darkhelmet/proc-block"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;script src="https://gist.github.com/1224675.js?file=out.txt"&gt;&lt;/script&gt;&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; The addition won&amp;#8217;t work too well, but hey.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQAzdM35cwE:wyhW1bxEHuo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQAzdM35cwE:wyhW1bxEHuo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQAzdM35cwE:wyhW1bxEHuo:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQAzdM35cwE:wyhW1bxEHuo:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/EQAzdM35cwE" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/09/20/proc-block-and-two-smoking-lambdas</feedburner:origLink></item>
    <item>
      <title>Rubygems Beyond The Thunderdome</title>
      <category>Editorial</category>
      <pubDate>Wed, 14 Sep 2011 09:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/MZxojA9SJPo/rubygems-beyond-the-thunderdome</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/09/14/rubygems-beyond-the-thunderdome</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/1b/64b56edbbf8724c1650410066d4e4f/vegan.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/78/1dcd9709b05e12efcf448d2da33a51/vegan.jpg" class="fright bleft bbottom round medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stop me if you&amp;#8217;ve heard this one before.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You get into some new tech over the weekend. With enough excitement to kill a horse, you whip up a ruby gem and put it on Github.&lt;/p&gt;
&lt;p&gt;You get a few hits, some people using it over the next little while. A few bugs get reported, and you fix them. A few features get requested, and you implement them. A few pull requests get submitted too, and you merge them. You&amp;#8217;re using it yourself, so you&amp;#8217;re finding your own bugs and implementing your own features too.&lt;/p&gt;
&lt;p&gt;But the motivation wears off. Maybe your project doesn&amp;#8217;t work out as well as you&amp;#8217;d hoped. Maybe the lustre of the new tech fades, and you move on to other things. You leave your gem and code online because other people with more enthusiasm than you are still using it.&lt;/p&gt;
&lt;h2&gt;Fast forward&lt;/h2&gt;
&lt;p&gt;A month or two pass and nothing fantastic has happened. You haven&amp;#8217;t touched your gem, no new pull requests, messages about it, or anything. You&amp;#8217;re looking at something on your Github profile, and notice that this gem of yours has a new fork.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s this? Somebody else working on it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nope.&lt;/strong&gt; It&amp;#8217;s a &lt;em&gt;passive aggressive fork (&lt;span class="caps"&gt;PAF&lt;/span&gt;).&lt;/em&gt;&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;Wat?&lt;/h2&gt;
&lt;p&gt;This fork is filled with useless commit messages like &amp;#8220;remove this garbage&amp;#8221;, &amp;#8220;fix stupid bug that&amp;#8217;s been there forever&amp;#8221;, and &amp;#8220;Why ________?&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/86/e08d7604cfa023644e143b258f649e/mad-max.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/33/5eff23154a4193f93464a8c5f97520/mad-max.jpg" class="fright bleft bbottom round medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a fork made by somebody upset that your original project didn&amp;#8217;t work exactly like they wanted it to. They commit in anger and stay silent instead of talking to you, the author, about the changes and getting them pulled into the repo.&lt;/p&gt;
&lt;p&gt;Instead of using the great tools we have for collaborating (Github), they work as fast as these tools allow, and generate a Network Graph of Hatred.&lt;/p&gt;
&lt;p&gt;Instead of working together for something good, like how I imagine Burning Man, it turns into Mad Max.&lt;/p&gt;
&lt;h2&gt;Lame-stream media&lt;/h2&gt;
&lt;p&gt;This is basically the exact opposite of what you want to happen in a nice &lt;span class="caps"&gt;FOSS&lt;/span&gt; world. &amp;#8220;Fuck this asshole and his stupid code!&amp;#8221; is basically what I see when I see a &lt;span class="caps"&gt;PAF&lt;/span&gt;. I put this code up for the world to use, &lt;span class="caps"&gt;FOR&lt;/span&gt; &lt;span class="caps"&gt;FREE&lt;/span&gt;, and you were a complete dick about it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maybe a clause in the license should be something along the lines of &amp;#8220;Free to do what you want with it, as long as you&amp;#8217;re not a dick about it.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So while there is definitely some greatness about Github, &lt;span class="caps"&gt;OSS&lt;/span&gt;, and that whole scene,&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; it&amp;#8217;s not all unicorns farting rainbows that the community would have you believe. With the good comes the bad.&lt;/p&gt;
&lt;p&gt;Even if you get some digital love from a few people being great citizens in the &lt;span class="caps"&gt;FOSS&lt;/span&gt; world, don&amp;#8217;t be surprised when a motorcycle berserker shits all over your code.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; This is kind of a passive aggressive blog post isn&amp;#8217;t it?&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; The good outweighs the bad by a solid margin.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=MZxojA9SJPo:v5GI2k7HyeI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=MZxojA9SJPo:v5GI2k7HyeI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=MZxojA9SJPo:v5GI2k7HyeI:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=MZxojA9SJPo:v5GI2k7HyeI:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/MZxojA9SJPo" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/09/14/rubygems-beyond-the-thunderdome</feedburner:origLink></item>
    <item>
      <title>IE7 Eats Babies</title>
      <category>Software</category>
      <pubDate>Mon, 25 Jul 2011 08:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/qVMiQg6Aol4/ie7-eats-babies</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/07/25/ie7-eats-babies</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;But you already knew that, right?&lt;/p&gt;
&lt;p&gt;These days, in fancy &lt;span class="caps"&gt;AJAX&lt;/span&gt; applications, you frequently want a link on a page to just do asynchronous things. You don&amp;#8217;t actually want the link to go anywhere.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s just ignore the fact that this goes against &lt;a href="http://en.wikipedia.org/wiki/Progressive_enhancement"&gt;progressive enhancement&lt;/a&gt; okay?&lt;/p&gt;
&lt;h2&gt;Can I see your ID please?&lt;/h2&gt;
&lt;p&gt;So sometimes the link is important enough, and you throw an &lt;code&gt;id&lt;/code&gt; on it and you can do this in jQuery.&lt;/p&gt;
&lt;pre&gt;$('#important-link').click(function() { alert('trololol'); });&lt;/pre&gt;
&lt;h2&gt;Stay classy&lt;/h2&gt;
&lt;p&gt;Sometimes you have multiple links which need to do the same thing, so you give it a class.&lt;/p&gt;
&lt;pre&gt;$('.kind-of-important-link').click(function() { alert('trololol'); });&lt;/pre&gt;
&lt;h2&gt;App frameworks to the rescue&amp;#8230;?&lt;/h2&gt;
&lt;p&gt;Sometimes, for whatever reason, the links just use anchors. The &lt;code&gt;href&lt;/code&gt; attribute of the link is something like &lt;code&gt;#my-link&lt;/code&gt; instead of a real &lt;span class="caps"&gt;URL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;This works fine if you are using this for its original purpose (even in IE7), jumping to an element with the &lt;code&gt;id&lt;/code&gt; of &lt;code&gt;my-link&lt;/code&gt;, but if an app was built using this as the way to do javascripty things, you&amp;#8217;ll run into problems.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;You probably want to do something like this:&lt;/p&gt;
&lt;pre&gt;$('a[href="#my-link"').click(function() { alert('trololol'); });&lt;/pre&gt;
&lt;p&gt;In IE7 land however (or at least this specific application), the &lt;code&gt;href&lt;/code&gt; gets replaced with the entire current &lt;span class="caps"&gt;URL&lt;/span&gt; with the anchor fragment tacked onto the end, so jQuery doesn&amp;#8217;t match &lt;code&gt;$('a[href="#my-link"')&lt;/code&gt; anymore. You need to use the &lt;code&gt;attributeEndsWith&lt;/code&gt; selector.&lt;/p&gt;
&lt;pre&gt;$('a[href$="#my-link"').click(function() { alert('trololol'); });&lt;/pre&gt;
&lt;p&gt;And there was much rejoicing.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Any sammy.js users out there?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=qVMiQg6Aol4:PLJqESN6cmw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=qVMiQg6Aol4:PLJqESN6cmw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=qVMiQg6Aol4:PLJqESN6cmw:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=qVMiQg6Aol4:PLJqESN6cmw:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/qVMiQg6Aol4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/07/25/ie7-eats-babies</feedburner:origLink></item>
    <item>
      <title>Things You Need To Start Caring About Now</title>
      <category>Editorial</category>
      <pubDate>Wed, 20 Jul 2011 08:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/KVyAdabWIOg/things-you-need-to-start-caring-about-now</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/07/20/things-you-need-to-start-caring-about-now</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;You need to start caring about a few things. &lt;strong&gt;Now.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Code style&lt;/h2&gt;
&lt;p&gt;Looking through code, you see all sorts of things. Some of them are good. Some of them are downright amazing pieces of code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some of them are horrible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some of them are so bad you feel your grip tensing around the keyboard and you have to restrain yourself so you don&amp;#8217;t snap the bloody thing in half.&lt;/p&gt;
&lt;p&gt;They might be bad decisions. They might be caused by someone who didn&amp;#8217;t have the knowledge to make the proper decision. They might have been good decisions then, but terrible now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But I don&amp;#8217;t care about those things.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m here to talk about code style. For example, what&amp;#8217;s wrong with this block of ruby from a style point of view?&lt;/p&gt;
&lt;script src="https://gist.github.com/1073318.js?file=car.rb"&gt;&lt;/script&gt;&lt;p&gt;Here&amp;#8217;s my list:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The &lt;code&gt;turn_on!&lt;/code&gt; method is indented 3 spaces when everything else is 2 spaces.&lt;/li&gt;
	&lt;li&gt;Cylinders is spelled wrong.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;private&lt;/code&gt; doesn&amp;#8217;t start a new block, so it shouldn&amp;#8217;t be indented (the code afterwards shouldn&amp;#8217;t be indented either).&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;repair&lt;/code&gt; is called with parentheses, even though all other methods with no arguments are called without.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;change_spark_plugs&lt;/code&gt; is called with parentheses while &lt;code&gt;Engine.new&lt;/code&gt; is called without.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;drive&lt;/code&gt; is defined without parentheses while &lt;code&gt;initialize&lt;/code&gt; is.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I care about this kind of thing, and seeing code like this &lt;strong&gt;pisses me off&lt;/strong&gt;. I honestly can&amp;#8217;t understand how people can write code like this and either not notice those things I listed, or notice but not care. I really don&amp;#8217;t care how amazing your algorithm is, or how elegantly you implemented something, if the code looks like shit. I &lt;strong&gt;will&lt;/strong&gt; re-write it in proper style and be happy.&lt;/p&gt;
&lt;p&gt;The best quote I can think of is from &lt;a href="http://c2.com/cgi/wiki?CodeForTheMaintainer"&gt;the C2 wiki&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I would add &lt;span class="caps"&gt;OCD&lt;/span&gt; to the list too.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a fixed version:&lt;/p&gt;
&lt;script src="https://gist.github.com/1073318.js?file=car_fixed.rb"&gt;&lt;/script&gt;&lt;p&gt;That&amp;#8217;s how I would write it, which I believe is also the &amp;#8220;correct&amp;#8221; style as judged by the ruby community. It really doesn&amp;#8217;t matter how you write it, as long as it&amp;#8217;s consistent. &lt;strong&gt;If you indent with 4 spaces, then use 4 spaces everywhere!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One particular point of contention for me is the use of parentheses around method calls. My rule is if the method is called without parameters, no parentheses. Otherwise, use parens! This way, your internal decision tree to use parens or not is very simple.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;Whitespace&lt;/h2&gt;
&lt;p&gt;I fucking hate inconsistent and inappropriate whitespace. On a bad file, it will take me up to 5 minutes to sift through the diff chunks in &lt;a href="http://gitx.frim.nl/"&gt;GitX&lt;/a&gt; in order to stage only the relevant chunks, ignoring chunks consisting only of whitespace.&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are you kidding me?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Set your fucking editor to strip trailing whitespace. Any editor &lt;a href="https://github.com/vigetlabs/whitespace-tmbundle"&gt;worth&lt;/a&gt; &lt;a href="http://www.emacswiki.org/emacs/DeletingWhitespace"&gt;its&lt;/a&gt; &lt;a href="http://vim.wikia.com/wiki/Remove_unwanted_spaces"&gt;salt&lt;/a&gt; will have a way to do this. If not, make your &lt;a href="http://snipplr.com/view/28523/git-precommit-hook-to-fix-trailing-whitespace/"&gt;&lt;span class="caps"&gt;VCS&lt;/span&gt;&lt;/a&gt; do it.&lt;/p&gt;
&lt;h2&gt;Your environment&lt;/h2&gt;
&lt;p&gt;You&amp;#8217;re an adult and a professional, and I&amp;#8217;m not a babysitter. I&amp;#8217;m also not a fan of developer setup documentation past a simple list:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;git (git@github.com:company/project.git)&lt;/li&gt;
	&lt;li&gt;MySQL (5.x)&lt;/li&gt;
	&lt;li&gt;MongoDB (&amp;gt;= 1.8)&lt;/li&gt;
	&lt;li&gt;Redis (latest)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That should be all I have to tell you to get your &lt;em&gt;environment&lt;/em&gt; setup.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t care if you install MySQL from the dmg, MacPorts, homebrew, or download the latest tarball and compile from source. You should probably have a preference; you should &lt;strong&gt;care about your environment.&lt;/strong&gt;  Then, if something doesn&amp;#8217;t work, you can probably figure out how to fix it.&lt;/p&gt;
&lt;p&gt;I also don&amp;#8217;t want to tell you how to install MongoDB, because &lt;em&gt;I&lt;/em&gt; don&amp;#8217;t want to be told how to install MongoDB. If you&amp;#8217;ve never used it before, maybe try investigating this new technology you&amp;#8217;re going to use by heading over the website and read, oh I don&amp;#8217;t know, the install docs. They probably aren&amp;#8217;t very long.&lt;/p&gt;
&lt;h2&gt;Go Forth and Care&lt;/h2&gt;
&lt;p&gt;Care about what your code looks like, not just what it does. Care about trailing whitespace and whitespace only changes. Care about your computer. You have to deal with this stuff every day, so you might as well start caring about it sooner rather than later.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; An exception is DSLs (like &lt;a href="http://rspec.info/"&gt;rspec&lt;/a&gt;) where it would just look silly if you used parens.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; If anybody knows of a way to tell git to ignore whitespace only chunks when I add something, please let me know in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=KVyAdabWIOg:_lCX6FZiVB4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=KVyAdabWIOg:_lCX6FZiVB4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=KVyAdabWIOg:_lCX6FZiVB4:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=KVyAdabWIOg:_lCX6FZiVB4:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/KVyAdabWIOg" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/07/20/things-you-need-to-start-caring-about-now</feedburner:origLink></item>
    <item>
      <title>Worst URL Shortener Ever</title>
      <category>Programming</category>
      <pubDate>Sun, 26 Jun 2011 10:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/kjCKp-WHM3c/worst-url-shortener-ever</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/06/26/worst-url-shortener-ever</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;I was bored last night, so I hacked this up. My original thought was since riak has an &lt;span class="caps"&gt;HTTP&lt;/span&gt; interface, I could just proxy &lt;code&gt;GET&lt;/code&gt; requests to it when a short &lt;span class="caps"&gt;URL&lt;/span&gt; was used, but either I was doing it wrong or you can&amp;#8217;t set the &lt;code&gt;Location&lt;/code&gt; header when you &lt;code&gt;POST&lt;/code&gt; documents. Oh well.&lt;/p&gt;
&lt;p&gt;Anyway, this uses riak just to store the &lt;span class="caps"&gt;URL&lt;/span&gt;, and the riak key as the &lt;em&gt;short&lt;/em&gt; &lt;span class="caps"&gt;URL&lt;/span&gt; key. There is no error checking, UI, or anything fancy. It&amp;#8217;s pretty much the simplest thing that could possibly work.&lt;/p&gt;
&lt;script src="https://gist.github.com/1047235.js?file=shrt.rb"&gt;&lt;/script&gt;&lt;p&gt;Also, it&amp;#8217;s kind of a lie, since the URLs it makes are actually a little long. Whatever.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=kjCKp-WHM3c:uph1orPsDtg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=kjCKp-WHM3c:uph1orPsDtg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=kjCKp-WHM3c:uph1orPsDtg:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=kjCKp-WHM3c:uph1orPsDtg:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/kjCKp-WHM3c" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/06/26/worst-url-shortener-ever</feedburner:origLink></item>
    <item>
      <title>Idiomatic Go Channel Timeout</title>
      <category>Programming</category>
      <pubDate>Sat, 18 Jun 2011 10:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/Tj3jv1P49wk/idiomatic-go-channel-timeout</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/06/18/idiomatic-go-channel-timeout</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;I&amp;#8217;ve been doing a lot of &lt;a href="http://golang.org/"&gt;Go&lt;/a&gt; programming lately, and it&amp;#8217;s good stuff.&lt;/p&gt;
&lt;p&gt;Go is a fairly new programming language coming out of Google from the minds of some really smart people, like &lt;a href="http://en.wikipedia.org/wiki/Rob_Pike"&gt;Rob Pike&lt;/a&gt; and Russ Cox (among others). It&amp;#8217;s a C family language, so it has curly braces, has simple yet advanced concurrency features, and garbage collection. It&amp;#8217;s both high and low level, and was originally billed as a systems programming language. Now though, it seems it fits as a both a general purpose and scripting language.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;For concurrency, Go has channels and goroutines. You can fire off any function as a goroutine and it executes concurrently with the rest of your code.&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; You communicate with that goroutine with channels. As it says on the &lt;a href="http://golang.org/doc/codewalk/sharemem/"&gt;Go website&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Don&amp;#8217;t communicate by sharing memory; share memory by communicating.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So maybe, as an example, you want to download some pages over &lt;span class="caps"&gt;HTTP&lt;/span&gt; and send them to a processing function. But you don&amp;#8217;t have all day, so you want to timeout the processing function if it doesn&amp;#8217;t receive any data in, say 10 seconds.&lt;/p&gt;
&lt;p&gt;Boom. Straight from the &lt;a href="http://golang.org/doc/GoCourseDay3.pdf"&gt;slides of Rob Pike&lt;/a&gt;:&lt;/p&gt;
&lt;script src="https://gist.github.com/1032762.js?file=timeout.go"&gt;&lt;/script&gt;&lt;p&gt;The pattern in the &lt;code&gt;Process()&lt;/code&gt; function is from page 32 of 47 of Rob Pike&amp;#8217;s slides, and is a pretty slick way to timeout receiving from a channel. Using the &lt;code&gt;After()&lt;/code&gt; function in the &lt;code&gt;time&lt;/code&gt; package in the standard library allows you to handle the timeout by exploiting the fact that a select statement will procede with the first available option, and block when there is no default action. Awesome!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m going to get back to programming.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; The compiler is SO fast.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; Check out the documentation and implementation for a more detailed explanation.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tj3jv1P49wk:fMsz55LMUxU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tj3jv1P49wk:fMsz55LMUxU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tj3jv1P49wk:fMsz55LMUxU:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tj3jv1P49wk:fMsz55LMUxU:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/Tj3jv1P49wk" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/06/18/idiomatic-go-channel-timeout</feedburner:origLink></item>
    <item>
      <title>Simple Ruby Pipes</title>
      <category>Programming</category>
      <pubDate>Fri, 06 May 2011 08:00:00 -0600</pubDate>
      <link>http://feedproxy.google.com/~r/VerboseLogging/~3/H0rVBBMrpb4/simple-ruby-pipes</link>
      <guid isPermaLink="false">http://verboselogging.com/2011/05/06/simple-ruby-pipes</guid>
      <author>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</author>
      <description>&lt;p&gt;Here&amp;#8217;s something I cooked up this evening. Nothing too epic, but it&amp;#8217;s a neat illustration of metaprogramming with ruby.&lt;/p&gt;
&lt;script src="https://gist.github.com/958433.js?file=pipes.rb"&gt;&lt;/script&gt;&lt;p&gt;Ruby allows you to reopen classes and add methods to them. You can also make a &lt;code&gt;Module&lt;/code&gt; and &lt;code&gt;include&lt;/code&gt; that in a class to add methods. I&amp;#8217;ve added four methods to the &lt;code&gt;Symbol&lt;/code&gt; class and overridden one method in the &lt;code&gt;Array&lt;/code&gt; class (using &lt;code&gt;alias&lt;/code&gt; to keep the old method around since &lt;code&gt;super&lt;/code&gt; doesn&amp;#8217;t quite work).&lt;/p&gt;
&lt;p&gt;Now we can pipe arrays like bash using a simple syntax! Wee!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=H0rVBBMrpb4:0WH-u-lCh4I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=H0rVBBMrpb4:0WH-u-lCh4I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=H0rVBBMrpb4:0WH-u-lCh4I:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=H0rVBBMrpb4:0WH-u-lCh4I:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/H0rVBBMrpb4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://verboselogging.com/2011/05/06/simple-ruby-pipes</feedburner:origLink></item>
  </channel>
</rss>

