<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/feed.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" version="2.0">
  <channel>
    <feedpress:locale>en</feedpress:locale>
    <feedpress:newsletterId>adamjspooner</feedpress:newsletterId>
    <atom:link rel="self" href="http://feedpress.me/adamjspooner"/>
    <atom:link rel="hub" href="http://feedpress.superfeedr.com/"/>
    <title><![CDATA[Adam Spooner]]></title>
    <link>http://adamjspooner.com//journal</link>
    <description>Adam Spooner</description>
    <dc:language>en-us</dc:language>
    <dc:creator>adamjspooner@gmail.com</dc:creator>
    <dc:rights>Copyright 2019</dc:rights>
    <dc:date>2019-12-18T01:07:50-05:00</dc:date>
    <item>
      <title><![CDATA[Elrond on Courage and the future]]></title>
      <link>http://adamjspooner.com/journal/elrond-on-courage-and-the-future</link>
      <guid>http://adamjspooner.com/journal/elrond-on-courage-and-the-future#when:2013-03-25T00:00:00-04:00</guid>
      <description><![CDATA[<blockquote>
<p><q>For you do not yet know the strength of your hearts, and you cannot foresee what each may meet upon the road.</q> <cite>Elrond</cite></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2013-03-25T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[The "JUSTIN BAILEY"]]></title>
      <link>http://adamjspooner.com/journal/the-justin-bailey</link>
      <guid>http://adamjspooner.com/journal/the-justin-bailey#when:2013-03-24T00:00:00-04:00</guid>
      <description><![CDATA[<p><a href="http://retrogamecrunch.com/games/2/gaiattack"><span class="caps">GAIA</span>ttack</a> is the second game from <a href="https://twitter.com/rustym" title="rustym on Twitter">Rusty</a>, <a href="https://twitter.com/shauninman" title="shauninman on Twitter">Shaun</a>, and <a href="https://twitter.com/8bitmatt" title="8bitmatt on Twitter">Matt</a> in the <a href="http://retrogamecrunch.com/">Retro Game Crunch</a>. It&#8217;s a fun, bottom-to-top platformer similiar to <a href="http://www.supercratebox.com/">Super Crate Box</a> (which is also a lot of fun).</p>

<p>&#8220;So, who&#8217;s Justin Bailey?&#8221; you might be wondering. <span class="caps">JUSTIN</span> <span class="caps">BAILEY</span> is one of <a href="http://www.gamefaqs.com/nes/519689-metroid/cheats">many Metroid passwords</a>. Is he a real person? I have no idea. There are <a href="http://metroid.wikia.com/wiki/Justin_Bailey">a few theories</a> on why <span class="caps">JUSTIN</span> <span class="caps">BAILEY</span> is a Metroid password. So, fire away if you&#8217;ve ever wanted to play Metroid as Samus in a bathing suit.</p>

<p>&#8220;Uh, what does Metroid have to do with <span class="caps">GAIA</span>ttack?&#8221; Well, just like Justin Bailey, &#8220;spooner&#8221; now joins the ranks of cheats putting players in bathing suits. Okay, not really. Enter &#8220;spooner&#8221; (without the quotation marks) on the start screen of <span class="caps">GAIA</span>ttack and <strong>unlock the following cheats</strong>: during play, type &#8220;0&#8221; to go to the next level, &#8220;9&#8221; to go to the previous one, &#8220;8&#8221; to go to the next save point, or &#8220;7&#8221; to go to the previous one. Unfortunately, your score and time won&#8217;t be submitted to <a href="http://retrogamecrunch.com/games/gaiattack/">the leaderboard</a>. So, cheat and have fun.</p>]]></description>
      <dc:subject><![CDATA[video games, kickstarter, retro game crunch, gaiattack]]></dc:subject>
      <dc:date>2013-03-24T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Jiro Ono on Retirement]]></title>
      <link>http://adamjspooner.com/journal/jiro-ono-on-retirement</link>
      <guid>http://adamjspooner.com/journal/jiro-ono-on-retirement#when:2012-10-03T00:00:00-04:00</guid>
      <description><![CDATA[<blockquote>
<p><q>If I don&#8217;t keep working then my body will become useless.</q> <cite>Jiro Ono</cite></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2012-10-03T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Readable Code]]></title>
      <link>https://gist.github.com/3753571</link>
      <guid>https://gist.github.com/3753571#when:2012-09-28T00:00:00-04:00</guid>
      <description><![CDATA[<blockquote>
<p>Well written code should be crafted so that it is polite. It should approach detail gradually, the way a newspaper article does. It should allow the reader to bail out early, as soon as they realize that they don&#8217;t need to understand the whole thing.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2012-09-28T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Programming _is_ Writing]]></title>
      <link>http://ask.slashdot.org/comments.pl?sid=2198700&amp;cid=36293622</link>
      <guid>http://ask.slashdot.org/comments.pl?sid=2198700&amp;cid=36293622#when:2011-06-09T00:00:00-04:00</guid>
      <description><![CDATA[<blockquote>
<p>My current theory is that programming is quite literally writing. The vast majority of programming is not conceptually difficult (contrary to what a lot of people would have you believe). We only make it difficult because we suck at writing. The vast majority of programmers aren&#8217;t fluent, and don&#8217;t even have a desire to be fluent. They don&#8217;t read other people&#8217;s code. They don&#8217;t recognise or use idioms. They don&#8217;t think <strong>in the programming language</strong>. Most code sucks because we have the fluency equivalent of 3 year olds trying to write a novel. And so our programs are needlessly complex.</p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2011-06-09T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[The Dangerous Mr. Kahn]]></title>
      <link>http://adamjspooner.com/journal/the-dangerous-mr-kahn</link>
      <guid>http://adamjspooner.com/journal/the-dangerous-mr-kahn#when:2011-06-08T00:00:00-04:00</guid>
      <description><![CDATA[<p><a href="http://www.nas.org/polArticles.cfm?Doc_Id=2029">David Clemens in his article, The Dangerous Mr. Khan, writes,</a></p>

<blockquote>
<p>&#8230; Why do I call Mr. Khan dangerous? &#8230; Imagine the consequences if his videos did become the <span class="caps">DOS</span> or Windows of education: tens of thousands, hundreds of thousands, millions of young minds, all fed by Mr. Khan’s fizzy version of history. Not only would all students absorb the same value judgments, goofy comments, and cultural relativism, they would also conclude that Mr. Khan’s factoids constitute knowledge of history.</p>
</blockquote>

<p><a href="http://news.ycombinator.com/item?id=2633796">To which Mr. Khan replies,</a></p>

<blockquote>
<p>I start most of [my videos] telling the listener to be skeptical of anything I tell them or anyone tells them; that no matter how footnoted something is, in the end it is dependent on people&#8217;s accounts&#8212;the people who weren&#8217;t killed&#8212;which are subject to bias (no matter how well-intentioned). Very few history books or professors do this. If anything, they create a false sense of certainty.</p>
</blockquote>

<p><a href="http://news.ycombinator.com/item?id=2633341">via</a></p>]]></description>
      <dc:subject><![CDATA[education, opinions]]></dc:subject>
      <dc:date>2011-06-08T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[John C Jay on Becoming a Better Designer]]></title>
      <link>http://adamjspooner.com/journal/john-c-jay-on-becoming-a-better-designer</link>
      <guid>http://adamjspooner.com/journal/john-c-jay-on-becoming-a-better-designer#when:2011-03-07T00:00:00-05:00</guid>
      <description><![CDATA[<blockquote>
<p><q>If all else fails, [working harder than anyone else] is the greatest competitive advantage of any career.</q> <cite>John C Jay</cite></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2011-03-07T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[The Kindness of Strangers]]></title>
      <link>http://adamjspooner.com/journal/the-kindness-of-strangers</link>
      <guid>http://adamjspooner.com/journal/the-kindness-of-strangers#when:2011-02-11T00:00:00-05:00</guid>
      <description><![CDATA[<p>This past weekend Allison and I flew to Chicago to pick up a car I bought on Craigslist. It&#8217;s a &#8217;73 <span class="caps">BMW</span> 2002, and it&#8217;s a fantastic little car. I love 2002s. But that&#8217;s not what I want to talk about.</p>

<p>We arrived in Chicago around 11 a.m. on Friday morning. Matt picked us up in his Mini and drove us back to his place. We talked about the weather, the 2002, Minis, moving to big cities, and the joys of childhood snow days. Our time with Matt was short-lived, but he was extremely kind. Allison was worried about buying one-way tickets, purchasing a car sight-unseen on Craigslist, and being picked up from the airport by a stranger. But, as she said, &#8220;He was wearing <span class="caps">TOMS</span>. So, I knew everything was going to be okay.&#8221;</p>

<p>We left Chicago after stopping for a pie at Giordano&#8217;s, per Jonathan Bowden&#8217;s suggestion. I&#8217;ve never met Jonathan, but it was nice of him to suggest places to eat while visiting Chicago. The pie was delicious.</p>

<p>Allison&#8217;s sister and brother-in-law are the innkeepers at a small bed and breakfast in Marion, Indiana. We stayed with them for two nights. We tinkered with the car, snuggled with Juniper (their brown-coated Boston Terrier), ate good food, and played Catan. Our stay was much too short; we love them dearly.</p>

<p>Sunday morning we began our journey home. The snowy roads caused for mixtures of enjoyment (fish-tailing is fun), anxiety (fish-tailing at fifty miles-per-hour is not fun), and slow progress (two-lane, fifty-mile-per-hour, snow-covered roads take too much time to traverse).</p>

<p>The little Beamer isn&#8217;t car-show-worthy. There are things I can&#8217;t wait to change about it. I&#8217;m a tinkerer at heart. It&#8217;s the programmer in me. Two things I&#8217;d like to upgrade soon are the exhaust and the suspension. The car appears to have been lowered, and we could feel every bump in the road. The exhaust, however, had never been upgraded. It&#8217;s old. It&#8217;s rusty. And is—now—being held onto the car with coat hangers.</p>

<p>West Virginia&#8217;s Turnpike is&#8230; well&#8230; &#8220;shitty&#8221; would be putting it nicely. The entirety of the toll road consisted of kah-chunk-kah-chunk-kah-chunk, interspersed with a few did-we-lose-the-muffler? thunks. I won&#8217;t sugar-coat it; it was awful. Twenty miles north of Beckley is when camel&#8217;s back was finally broken. I heard a horrible metal-on-asphalt sound and saw the trail of sparks flying from underneath the car in my rearview mirror. I pulled over as quickly as I could. Thankfully a rest area was nearby.</p>

<p>I didn&#8217;t bring any tools with me on the trip. Who knows what the <span class="caps">TSA</span> would do if I lugged a case of tools onto a plane. I didn&#8217;t want to find out. So, I opened the trunk at the rest area, scratched my head in that motion-picture-defining way, and began to dig through the nuts and bolts scattered about. I found a rubber tow strap with an s-hook. I dismembered the tow strap and laid down in the parking lot against the tail of the car, s-hook in hand. I surveyed the damage. It wasn&#8217;t too bad, and I was able to rig the muffler to its clamp with the s-hook. I hopped back in the car, delighted with my own ingenuity. Allison&#8217;s tone was normal but her face said otherwise. We set out again, but a new sound joined us as we got up to speed on the highway. It was the rat-a-tat-tat of a drive shaft hitting a muffler. I drove on for a bit hoping it would pass as the drive shaft bent the muffler. I was wrong.</p>

<p>Frustrated and running out of options, I stopped at the next exit. There was a gas station, and inside my best hope laid in a fly swatters&#8217;s twisted metal handle. I stared at the fly swatter for a few minutes trying to envision it walking with me to the car and hugging the muffler as if in a Pixar film. Finally, from behind the counter I heard, &#8220;Can I help you, sweetie?&#8221; The cashier probably wondered what was so fascinating about a fly swatter. I explained my situation to her, and she had an alternative. A friend of hers, someone who lived nearby, was in the station, and she suggested I explain my predicament to him as he was a mechanic.</p>

<p>Finally, a glimmer of hope.</p>

<p>We never exchanged names. I told him my problem. We both got on the ground to look at the dangling muffler, as if staring would help. He hopped up, ran to his truck, rummaged in the tool chest, then asked his wife to run home and get some hangers. He used pliers to bend and snip the hangers as if he&#8217;d done it a hundred times. The sling he fashioned fit my muffler like a charm, and I thanked him more times than I can count. He handed me two more hangers, a pair of pliers, and a box of hand wipes for the rode. I told him he didn&#8217;t have to, but he insisted and I accepted. I offered him a drink and a pack of smokes, but he declined. The, he followed me twenty miles down the highway to make sure it was going to hold. He knew as well as I West Virginia&#8217;s roads would be the best stress test.</p>

<p>Those hangers held my muffler in place the rest of the way home.</p>

<p>I don&#8217;t know his name. I doubt I ever will. We live in a world where the internet affords easy bitching-and-moaning. We complain when a web site isn&#8217;t what we expect, when a site redesigns and it&#8217;s not to our liking, about the ninety-nine cents we have to pay for an app we don&#8217;t need from a phone that costs four hundred dollars. We&#8217;re a spoiled bunch. This stranger sacrificed his time and knowledge to help another human being. Sure, it was a few hangers, some pliers, some hand wipes, and a few minutes, but it was not his problem. He only wanted to help me get home. It&#8217;s an encounter I&#8217;ll never forget and a lesson I&#8217;ve taken to heart.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2011-02-11T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Productivity Guaranteed]]></title>
      <link>http://adamjspooner.com/journal/productivity-guaranteed</link>
      <guid>http://adamjspooner.com/journal/productivity-guaranteed#when:2010-07-23T00:00:00-04:00</guid>
      <description><![CDATA[<p>There are a lot of ways for you to lose focus these days. I read sad stories about people wasting hours on Twitter and Facebook in the name of staying connected. Others stop every few minutes to check their feeds for the latest-and-greatest news. We&#8217;re slowly realizing our multitasking, attention-drained ways are <a href="http://www.city-journal.org/2010/20_2_snd-concentration.html" title="Alain de Botton on Disctraction">not great for us</a>. <a href="http://getconcentrating.com/" title="Concentrate">There</a> <a href="http://www.johnhaney.com/backdrop/" title="Backdrop">are</a> <a href="http://freeverse.com/mac/product/?id=7013" title="Think">even</a> <a href="http://willmore.eu/software/isolator/" title="Isolator">applications</a> geared toward helping you focus. You can use an <a href="http://al3x.net/2009/09/14/my-get-back-to-work-hack.html" title="Alex Payne&#39;s Get-Back-to-Work Hack">/etc/hosts hack</a> to block sites you frequent, something I&#8217;ve used in the past. But I&#8217;d like to take a few minutes to tell you about two surefire ways to become more productive both at work and home.</p>

<h2>Self-Control</h2>

<p>First up is self-control. Self-control doesn&#8217;t get much airtime these days. It ranks right up there with personal responsibility and doing the right thing. We tend not to like these terms because they place emphasis on our ability, and oftentimes we fail. Self-control in getting things done is convincing yourself to not look for distractions when you reach a tough spot. Push through those difficult spots and finish victoriously.</p>

<h2>Focus</h2>

<p>Focus is another key ingredient for productivity. It&#8217;s self-control&#8217;s close relative. What good is focus if it&#8217;s being used on the wrong thing, or worse, some form of time-waster? Focus means turning off the distractions, hopefully without the aid of a tool. It means employing self-control. It&#8217;s the tunnel vision needed for getting things done, on-time with excellence.</p>

<p>Knocking out a stringent todo list is a piece of cake when wielding these two tools. The best part is they&#8217;re free, but they&#8217;re not cheap. We are creatures of habit, and breaking a habit is hard to do. Ask anyone who&#8217;s ever tried to quit smoking&#8212;my uncle is on his fifth try. Maybe you&#8217;re used to browsing the internet on the clock, or maybe worse. Maybe you&#8217;ve convinced yourself it&#8217;s normal. You may need some sort of hack in place to rewire your brain. I did. Ultimately it&#8217;s on you. You&#8217;ve got to want to be productive. You&#8217;ve got to want to create. It will start when you see the joys of accomplishing something rather than absorbing others&#8217; creations.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-07-23T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Chad Fowler on Leadership Amongst Geeks]]></title>
      <link>http://adamjspooner.com/journal/chad-fowler-on-leadership-amongst-geeks</link>
      <guid>http://adamjspooner.com/journal/chad-fowler-on-leadership-amongst-geeks#when:2010-07-23T00:00:00-04:00</guid>
      <description><![CDATA[<blockquote>
<p><q>When it comes to hierarchical boundary crossing, it&#8217;s most often not reluctance that stops people from doing it. It&#8217;s ability. Programmer geeks can&#8217;t lead, and leaders can&#8217;t hack. It&#8217;s rare to find someone who&#8217;s even decent at both.</q> <cite>Chad Fowler</cite></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-07-23T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Hacking Safari 5's Reader]]></title>
      <link>http://adamjspooner.com/journal/hacking-safari-5s-reader</link>
      <guid>http://adamjspooner.com/journal/hacking-safari-5s-reader#when:2010-06-09T00:00:00-04:00</guid>
      <description><![CDATA[<p>If you&#8217;re anything like me, you do a lot of reading on the web. Which probably means you care about the quality of the typography you&#8217;re staring at: the copy&#8217;s color, the page&#8217;s background, font choice, leading, etc. You may have even tried <a href="http://lab.arc90.com/experiments/readability/" title="A simple tool that makes reading on the Web more enjoyable.">Arc90&#8217;s Readability bookmarklet</a> or <a href="http://www.instapaper.com/" title="A simple tool to save web pages for reading later.">Marco Arment&#8217;s Instapaper</a>. Readability is great for getting rid of page clutter and user comments, allowing you to focus on the article&#8217;s content. Instapaper does the same thing as a byproduct. It focuses on aggregating articles you want to read later. I use both tools religiously; I can&#8217;t recommend them enough.</p>

<p>One of the many fantastic features in Safari 5 is called <a href="http://www.apple.com/safari/whats-new.html#reader" title="Safari Reader">Safari Reader</a>&#8212;it&#8217;s <a href="http://twitpic.com/1uwsk5" title="Readability Acknowledged in Safari 5">based on Readability</a>. If you&#8217;re reading this in Safari 5, go to View &gt; Enter Reader or press cmd+shift+R (&#x2318;+&#x21E7;+R) to try it out. Pretty spiffy, huh?</p>

<p>While Safari Reader is extremely handy, I&#8217;m not happy with the default typography:</p>

<p><img alt="Safari Reader&#39;s default text styles" src="https://d32hkf2i5c91ic.cloudfront.net/img/safari.reader/default.png" title="Safari Reader&#39;s default text styles" /></p>

<p>So, I started looking for ways to adjust the type. Thankfully, the internet is full of like-minded individuals, and I found an article on <a href="http://www.macosxhints.com/article.php?story=2010060813435933" title="Modify the look of the Safari 5 Reader on Mac OS X Hints">how to modify the look of the Safari 5 Reader</a>. They recommend creating a backup of the original Reader.html file, and so do I. One thing they don&#8217;t mention is you&#8217;ll need to restart Safari anytime you want to see your changes. I spent a few minutes hacking away at the <span class="caps">CSS</span> and arrived at something I&#8217;m happy with:</p>

<p><img alt="My altered text styles" src="https://d32hkf2i5c91ic.cloudfront.net/img/safari.reader/altered.png" title="My altered text styles" /></p>

<p>Here&#8217;s the <span class="caps">CSS</span> if you&#8217;re interested (&#8220;»&#8221; denotes a continuation on the same line):</p>

<pre><code>&lt;style&gt;
* {
   -webkit-font-smoothing: »
      antialiased;
   font-family: &quot;Helvetica Neue&quot;, »
      Helvetica, sans-serif !important;
   color: #444;
}
a {
   border-bottom: 1px dotted #65a2ef;
   color: #0064e5 !important;
}
a:visited { border: 0; }
a:hover {
   border-color: #cfe2fa;
   color: #4c9bff !important;
}
p, li {
   font-size: 14px;
   line-height: 21px;
}
#article { width: 619px; }
#background { background-color: »
   rgba(0, 0, 0, 0.9); }
#container { margin-left: -333px; }
#drop-shadow { width: 600px; }
.page {
   background: #F6F6F6;
   width: 458px;
}
&lt;/style&gt;</code></pre>

<p>These styles are down and dirty. So, use them at your own risk. The easiest way to add them to Reader.html without disturbing the default styles is by appending the above code below the last <code>&lt;/style&gt;</code> tag and above the first (and only) <code>&lt;script&gt;</code> tag within the document&#8217;s <code>&lt;head&gt;</code>.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-06-09T00:00:00-04:00</dc:date>
    </item>
    <item>
      <title><![CDATA[You're Probably Wrong]]></title>
      <link>http://adamjspooner.com/journal/youre-probably-wrong</link>
      <guid>http://adamjspooner.com/journal/youre-probably-wrong#when:2010-01-06T00:00:00-05:00</guid>
      <description><![CDATA[<p>It&#8217;s Wednesday afternoon, and you&#8217;re headed to your team&#8217;s weekly brainstorming session. You&#8217;re equipped with a plethora of ideas, and these ideas aren&#8217;t cheap. You spent at least two weeks dwelling on them, trimming the fat, making sure they&#8217;re perfect. You enter the conference room early, but you&#8217;re not the only one brimming with ideas and chutzpah.</p>

<p><a href="http://www.randsinrepose.com/archives/2006/11/17/meeting_creatures.html" title="Rands&#39; Meeting Creatures: The Anchor">The Anchor</a> gets the ball rolling, discussing the current state of The Project. But you&#8217;re not interested in the current state. You&#8217;ve got some game-changing ideas that are winners, the kind of ideas where God and everyone in the room will bow down and worship your ingenuity.</p>

<p>The brainstorming sessions are orderly, going around the room starting on The Anchor&#8217;s right. That&#8217;s why you chose to sit on her left. You want to be last because you have the best idea, but guess what&#8230; You&#8217;re probably wrong.</p>

<p>&#8220;You&#8217;re probably wrong,&#8221; is the number one tool I walk into any meeting with. It&#8217;s not about self-abasement, it&#8217;s about humility. Walking into a meeting with the cocksure attitude of, &#8220;my ideas are the best,&#8221; is a surefire way to ignore what everyone else has to offer because you&#8217;ve thought through their idea, apparently, and know it&#8217;s flawed. The truth is the odds are against you. Very few ideas reach The Best Idea status and people rarely recognize them when they are The Best Idea&#8212;remember when Twitter first came out? Few people understood its importance.</p>

<p>So, walk into your next meeting equipped with, &#8220;I&#8217;m probably wrong.&#8221; It will allow you to table your idea and focus on what everyone else has to offer. Who knows, you may learn something new.</p>

<p>Of course, I&#8217;m probably wrong.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-01-06T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Managing CSS and JS in ExpressionEngine]]></title>
      <link>http://adamjspooner.com/journal/managing-css-and-js-in-expressionengine</link>
      <guid>http://adamjspooner.com/journal/managing-css-and-js-in-expressionengine#when:2010-01-04T00:00:00-05:00</guid>
      <description><![CDATA[<p>ExpressionEngine, hereafter EE(ExpressionEngine), has great built-in support for managing style sheets and JavaScript. Here&#8217;s one simple way to manage your style sheets and JavaScript files with cache-busting and gzip compression using EE(ExpressionEngine)&#8217;s templating system.</p>

<p>There&#8217;s one prerequisite for managing styles and scripts using the following method: the <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-htaccess-generator/" title="Leevi Graham&#39;s .htaccess Generator">LG .htaccess Generator</a>. It&#8217;s possible to use a different approach, but this method assumes you&#8217;re using Mr. Graham&#8217;s extension.</p>

<p>First, if you haven&#8217;t already, enable gzip compression from within EE(ExpressionEngine)&#8217;s control panel. Go to Admin &gt; System Preferences &gt; Output and Debugging Preferences and select &#8220;Yes&#8221; under &#8220;Enable <span class="caps">GZIP</span> Output?&#8221; Click &#8220;Update&#8221; to save your settings.</p>

<p>Next, create a new template group for your style sheets. I generally name mine &#8220;styles&#8221;, but name yours whatever you&#8217;d like. Don&#8217;t duplicate a group. Click &#8220;Submit&#8221; to create the group. Within this new group, create a few templates with a type of &#8220;<span class="caps">CSS</span> Stylesheet&#8221;. I generally create a style sheet template for each logical group of styles: a style reset, some typographic styles, default styles, some hacks, etc. Put corresponding styles in each of these templates. I save all templates as files and use EE(ExpressionEngine)&#8217;s built-in template revision system. You should see a checkbox with the label &#8220;Save Template as File&#8221; just above the &#8220;Update&#8221; and &#8220;Update and Finished&#8221; buttons on the template editing page. You&#8217;ll need to allow templates to be saved as files if you don&#8217;t. Go to Templates &gt; Global Template Preferences &gt; and select &#8220;Yes&#8221; under &#8220;Allow Templates to be Saved as Files?&#8221; While you&#8217;re there, select &#8220;Yes&#8221; under &#8220;Save Template Revisions&#8221;. Click &#8220;Update&#8221; to save your settings. This is simply an added safety net since you&#8217;re using some sort of <a href="http://en.wikipedia.org/wiki/Revision_control" title="Wikipedia&#39;s entry on Revision Control">version control</a> for your site, right? Right.</p>

<p>Next, repeat the same steps for your JavaScript files. I typically name the group holding JavaScipt files &#8220;scripts&#8221;. Each of the templates should have the type &#8220;JavaScript&#8221;. I generally store classes and frameworks (jQuery, Prototype, etc.) in separate templates with each class getting its own template.</p>

<p>At this point you should have two template groups: one holding a few style sheets and an index and another holding a few JavaScript files and an index (&#8220;index&#8221; is automatically created when you create a template group).</p>

<p>Being kind to your server means you should serve only one style sheet and one JavaScript file per page load, ostensibly. And Server Side Includes&#8212;or <acronym title="Server Side Includes"><span class="caps">SSI</span></acronym>s&#8212;allow this method to be robust and kind to our servers. <acronym title="Server Side Includes"><span class="caps">SSI</span></acronym>s are called embeds in EE(ExpressionEngine) lingo.</p>

<p>So, we&#8217;ll use each group&#8217;s index file to serve a single file per type. Open your style sheet group&#8217;s index file and add an embed for each of the templates in your group (minus the index, of course). Here&#8217;s my style index as a reference:</p>

<pre><code>{embed=&quot;styles/reset&quot;}
{embed=&quot;styles/type&quot;}
{embed=&quot;styles/layout&quot;}
{embed=&quot;styles/default&quot;}
{embed=&quot;styles/hacks&quot;}</code></pre>

<p>Repeat the same process for your JavaScript group&#8217;s index file. Remember, the order of the embeds is important.</p>

<p>We need to set the content type for these index files so the browser interprets them correctly. Go to Templates &gt; Template Preferences Manager. In the first section, select your style template group name under &#8220;Template Groups&#8221; and &#8220;index&#8221; from the list of templates. In the second section, select &#8220;<span class="caps">CSS</span> Stylesheet&#8221; under &#8220;Type&#8221;. Click &#8220;Update&#8221; to save your settings. Repeat the same steps for your JavaScript group&#8217;s index file, selecting &#8220;JavaScript&#8221; as its type. Don&#8217;t forget to click &#8220;Update&#8221; to save your settings.</p>

<p>At this point, you should be able to visit <code>http://yourdomain/styles/</code> and see a single style sheet containing the files you specified in your style sheet group&#8217;s index. The same goes for your JavaScript group.</p>

<p>There&#8217;s a final step to make this system nearly perfect: a cache-busting system. You&#8217;re caching requests for media files on your server, right? Read <a href="http://developer.yahoo.com/performance/rules.html" title="Yahoo&#39;s Best Practices for Speeding Up Your Web Site">Yahoo&#8217;s Best Practices for Speeding Up Your Web Site</a> if you&#8217;re not sure what I&#8217;m talking about. So, you&#8217;ll need a way to bust the cache when you make changes to your styles and scripts after you&#8217;ve enabled caching on your server. To do this, you need to create two global template variables: one for styles and one for scripts. Go to Templates &gt; Global Variables and &#8220;Create a New Global Variable&#8221;. Name the variable something memorable. I generally name mine <code>CSS_VERSION</code> and <code>JS_VERSION</code>. The &#8220;Variable Content&#8221; should be something that&#8217;s easy to increment. I use a three digit version number, <code>1.0.0</code>. You can use whatever you&#8217;d like, but be sure to keep it simple. Also, do <em>not</em> input any whitespace (spaces, tabs, or line breaks). Click &#8220;Submit&#8221; to save each global variable. These global variables will need to be incremented anytime you make changes to their corresponding files. So, you&#8217;ll need to change the version number(s) if you add or change a style or piece of JavaScript. The actual number is irrelevant. Incrementing makes sense (for our linear view of time) though.</p>

<p>Finally, we need to add a <code>link</code> and <code>script</code> tag to our document&#8217;s head. They should look similar to this (&#8220;»&#8221; denotes a continuation on the same line):</p>

<pre><code>&lt;link rel=&quot;stylesheet&quot; »
      href=&quot;/styles/?v={CSS_VERSION}&quot; »
      type=&quot;text/css&quot; media=&quot;screen&quot; »
      charset=&quot;utf-8&quot;&gt;
&lt;script src=&quot;/scripts/?v={JS_VERSION}&quot; »
      type=&quot;text/javascript&quot; »
      charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</code></pre>

<p>Your mileage may vary.</p>

<p>You&#8217;ll notice after each path is a <span class="caps">GET</span> variable <code>v</code>. This is the cache-busting variable. The <code>v=</code> isn&#8217;t necessary. You could strip it down to just <code>?{CSS_VERSION}</code>, and it would work fine. You&#8217;re probably thinking, &#8220;Why not just put the version number inline? Why store it in a global variable?&#8221; You could definitely place it inline and everything would work as described. I find storing these version numbers in global variables to be cleaner.</p>

<p>One final note: This method isn&#8217;t tied specifically to ExpressionEngine. It should work in any content management system. The nomenclature and syntax will be the only differences.</p>

<p>So, there you have it: a robust, cache-bust-able, single-serving-file method for managing style sheets and JavaScript files in ExpressionEngine. The only ingredient we&#8217;re missing to make it perfect is compression/minification, but this system should be robust enough for the majority of sites.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-01-04T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Piss on the Seat]]></title>
      <link>http://adamjspooner.com/journal/piss-on-the-seat</link>
      <guid>http://adamjspooner.com/journal/piss-on-the-seat#when:2010-01-02T00:00:00-05:00</guid>
      <description><![CDATA[<p>It&#8217;s happened to you as often as it&#8217;s happened to me. You&#8217;re out and about enjoying your day, and then, a grumbling of the bowels. You scan the area and your memory looking for that welcoming sign with little stick figures and the accompanying eight letters R-E-S-T-R-O-O-M. There, in the distance. <span class="caps">BINGO</span>! You rush toward it, trying to look as smooth as possible with a fast-and-casual, New-Yorker&#8217;s pace. You enter, slightly relieved to find the place deserted. Door number one: disgusting; it looks like someone just shared in your present grief and failed to send it to the waste water treatment plant. Door number two: piss on the seat. Door number three: no toilet paper. Back to door number two.</p>

<p>I&#8217;m not sure why but it seems we&#8217;ve lost the ability to mind and respect our surroundings, especially in public. It&#8217;s apparent in any restroom. The stalls are disgusting with un-flushed business, toilet paper strewn about, and piss on the seat. The locks are broken off the doors. The sinks are clogged with paper towels like the Wet Bandits struck again. Not to mention, it looks like you can get some sexual favors by calling the number(s) written on the wall.</p>

<p>I&#8217;m fairly certain your bathroom at home is clean and orderly. You pick up the toilet paper you dropped on the ground. You wipe up the counter where you splashed a gallon of water while washing your hands. You lift or clean the toilet&#8217;s seat. You flush the toilet. You don&#8217;t doodle or write your friend&#8217;s phone number on the wall.</p>

<p>So, where&#8217;s the disconnect? Why is it okay to treat public surroundings any differently than you would your personal surroundings?</p>

<p>It boils down to respect and mindfulness. We no longer respect other people&#8217;s property. Besides, someone gets paid to clean this up, right?</p>

<p>I implore you to mind your surroundings at all times. Clean up after yourself. Respect other people&#8217;s property. Pick up the toilet paper, paper towel, or napkin you just dropped. Lift the seat or wipe it off. Clean up the ketchup you squirted onto the table. It&#8217;s not hard. Respect for the small things in life builds into a respect for the larger things.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2010-01-02T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[On Professionalism]]></title>
      <link>http://adamjspooner.com/journal/on-professionalism</link>
      <guid>http://adamjspooner.com/journal/on-professionalism#when:2009-12-07T00:00:00-05:00</guid>
      <description><![CDATA[<p>I spend a lot of time pondering how to live a meaningful life, and lately I&#8217;ve been thinking about life at work.</p>

<p>Work is a major portion of our lives, at least for most of us, and I&#8217;ve been mulling over what it means to be a professional. The definition most of us are probably familiar with is a professional is someone who gets paid to perform a certain task, duty, trade, or skill. The fourth edition of the American Heritage Dictionary defines a professional as, &#8220;One who earns a living in a given or implied occupation; a skilled practitioner; an expert.&#8221; That&#8217;s a pretty good definition, but I have one major problem with it: it doesn&#8217;t talk about character.</p>

<p>Robert Sutton&#8217;s The No Asshole Rule is a fantastic book about dealing with assholes in the workplace. It covers how to get along with these rude coworkers, prevent their existence in your company, and how to ensure you don&#8217;t become the asshole. The character of a professional is the overarching theme. It&#8217;s something we don&#8217;t talk about enough. We honor things like problem solving skills, the ability to work quickly, having original ideas, etc. If they&#8217;re not an asshole, well, that&#8217;s just a bonus.</p>

<p>Character stems into more areas than just how abrasive you are, which is what The No Asshole Rule focuses on. It&#8217;s more than just your moral and ethical strength. It&#8217;s more than being the nice person at work. It&#8217;s a cocktail of all these things and more. It&#8217;s about living a life you&#8217;re not ashamed to call yours. It&#8217;s about following through and keeping your word. It&#8217;s about being passionate and critical&#8212;the constructive kind, not the negative kind&#8212;while still being sensitive to others. It&#8217;s about being virtuous and courageous. I could continue, but I think you get the idea. The bottom line is this: <strong>your paycheck doesn&#8217;t make you a professional, your character does</strong>.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-12-07T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Sir Joshua Reynolds on Thinking]]></title>
      <link>http://adamjspooner.com/journal/sir-joshua-reynolds-on-thinking</link>
      <guid>http://adamjspooner.com/journal/sir-joshua-reynolds-on-thinking#when:2009-12-06T00:00:00-05:00</guid>
      <description><![CDATA[<blockquote>
<p><q>There is no expedient to which a man will not resort to avoid the real labor of thinking.</q> <cite>Sir Joshua Reynolds</cite></p>
</blockquote>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-12-06T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Thoughts on Writing Team-Centric CSS]]></title>
      <link>http://adamjspooner.com/journal/thoughts-on-writing-team-centric-css</link>
      <guid>http://adamjspooner.com/journal/thoughts-on-writing-team-centric-css#when:2009-12-06T00:00:00-05:00</guid>
      <description><![CDATA[<p>I&#8217;ve worked on a few different front-end development teams over the past few years, and I&#8217;ve seen a range of coding practices&#8212;the good, the bad, and the ugly. What follows is a compendium on <span class="caps">CSS</span> organization.</p>

<h2>Follow Your Code Standards Guide</h2>

<p>I want to be clear, before I dive into any specifics, that you should always follow the code standards or style guide for the team you&#8217;re working with. The goal in code organization for a team of any size is <strong>clarity</strong> and <strong>consistency</strong>. Your code base should look as though one person wrote it. If you don&#8217;t have a code standards guide, then I implore you to write one or adhere to someone else&#8217;s.</p>

<h2>Use Ample White Space</h2>

<p>White space is a key component for clarity in any aspect of design, whether it&#8217;s visual design, writing, coding, etc. White space is free, so you have no reason to be stingy. I recommend using a single line break between properties in a property list; two or more line breaks between declarations starting with the same element, id, or class; and four or more line breaks between declarations for different elements, ids, or classes. One exception is a declaration with one property-value pair; the declaration and property-value pair can inhabit the same line. There&#8217;s a nice side effect when using this style for line breaks: understandable and easily-skimmed <code>git blame</code> (or whichever repository flavor you use), <code>diff</code>, etc.</p>

<h2>Comment Liberally</h2>

<p>Most developers I work with shy away from comments, but I find them indispensable. Annotating your code allows others on your team to understand why you&#8217;ve chosen a certain technique. Alternatively, you could just ask why your teammate chose a certain method. This approach is fine for small teams, but it&#8217;s nearly impossible for large teams. Answering the same question multiple times is a waste of time.</p>

<p>A well-written annotation also helps you. Sometimes you need a reminder for why you wrote a declaration a particular way. I know comments have saved me from myself more than once. Good documentation saves time.</p>

<p>Comments also add clarity. As Donald Knuth said, &#8220;I still think people could be documenting what they write much better. And a comment is different than writing an essay. The way you write a program for another human being is completely different from the way you write it for a computer.&#8221; Your teammates are not computers. Write a commentary they can understand. Remember, the goal is clarity.</p>

<h2>What About File Size?</h2>

<p>I often hear this argument, &#8220;Well-documented code with ample white space sounds nice in the theoretical world, but it leads to larger file sizes in the real world. And serving large files is not good.&#8221; I&#8217;ll be the first to say serving large, fully-commented, abundantly white-spaced files is bad. This sounds like a contradiction to my advice on writing team-centric <span class="caps">CSS</span>, but it&#8217;s not. The files your team uses and tests with should be different from the files you serve your end users. How is this possible? Minification and compression. A major component in any team&#8217;s build process should be the step where comments and white space are stripped from the production files. I use <a href="http://developer.yahoo.com/yui/compressor/" title="Yahou User Interface&#39;s Compressor"><span class="caps">YUI</span>&#8217;s Compressor</a> and <a href="http://www.gzip.org/" title="The gzip home page">gzip</a> to drastically reduce file sizes for lightweight production files.</p>

<p>This leads to another valid argument, &#8220;Multiple versions of the same file bloat the repository.&#8221; I agree. They do. My only counter is that having well-documented, amply white-spaced code adds clarity and consistency in a team environment. The trade-off is well worth it.</p>

<p>Maybe you&#8217;re a freelancer and have worked on a few different teams. Maybe you&#8217;re a one-man shop. Maybe you&#8217;re part of an in-house team. Whatever your role, I hope you found this advice helpful. I don&#8217;t claim to have the ultimate answers for code organization, and I&#8217;d love to hear how you organize your code. <script type="text/javascript">
  //<!--
  function hiveware_enkoder(){var i,j,x,y,x=
  "x=\"783d223078363d345c2237303937363334373761323632646336353135363634343636" +
  "3166363661333334663036333432373363353632393536733165366e6475363d322b327963" +
  "7b35296432333d362b3669353b366832743767386e3665306c322e3178363c6369333b3230" +
  "323d386932283572366f3466373b39273627323d3779373b375c5c655c2232623433373065" +
  "3336623533363964323632353237653333363166363666343236635c5c335c22633d367839" +
  "36366131373639643636653536363130363237653636323137366630343230353336326433" +
  "3635303232393434363079337d323b332935293232372c3769662836723874347364623375" +
  "3473372e3378362b35273625612736283265367035613763335c22373b6679333d64273627" +
  "663b3666336f367265283269633d3630393b3669313c3678642e366c3765366e3067347432" +
  "68373b3569362b653d363866333629667b3666656f36723528366a333d354d656133743268" +
  "322e636d3569326e37283578362e656c3665666e366766743668302c3769332b3538303332" +
  "29643b362d312d366a343e363d3169343b3029327b6379362b393d3678312e366364683661" +
  "3572344132743228636a3529643b337d357d3679633b223b6a3d6576616c28782e63686172" +
  "4174283029293b783d782e7375627374722831293b793d27273b666f7228693d303b693c78" +
  "2e6c656e6774683b692b3d32297b792b3d782e73756273747228692c31293b7d666f722869" +
  "3d313b693c782e6c656e6774683b692b3d32297b792b3d782e73756273747228692c31293b" +
  "7d793d792e737562737472286a293b\";y='';for(i=0;i<x.length;i+=2){y+=unescape" +
  "('%'+x.substr(i,2));}y";
  while(x=eval(x));}hiveware_enkoder();
  //-->
</script> and share your wisdom.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-12-06T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Quick Unix Tip: Find Files by Name]]></title>
      <link>http://adamjspooner.com/journal/quick-unix-tip-find-files-by-name</link>
      <guid>http://adamjspooner.com/journal/quick-unix-tip-find-files-by-name#when:2009-12-04T00:00:00-05:00</guid>
      <description><![CDATA[<p>I frequently need to find files whose name and location I only partly remember. I could use Spotlight, but I find it clunky. Besides, I&#8217;m usually at a command prompt which means this tool is only a few keystrokes away:</p>

<pre><code>find . -iname \*pattern\*</code></pre>

<p>Let&#8217;s dissect it. The name of the command is <code>find</code>, the <code>.</code>&#8212;say, &#8220;dot&#8221;&#8212;means &#8220;start walking the file hierarchy from my current location&#8221;, <code>-iname</code> tells <code>find</code> to look at files names and ignore the case&#8212;case <em>insensitive</em>, and <code>\*pattern\*</code> lets <code>find</code> know what string or pattern we&#8217;re after.</p>

<p>I have a large collection of books in <acronym title="Portable Document Format"><span class="caps">PDF</span></acronym> I frequently reference. I rarely remember the name of the book, but I know it has &#8220;<span class="caps">PHP</span>&#8221; in its title. So, I <code>cd</code> to my directory of books and enter <code>find . -iname \*php\*</code>, and I&#8217;m given a list of books whose titles contain &#8220;<span class="caps">PHP</span>&#8221;. Alternatively, I could&#8217;ve entered <code>find path/to/my/books/ -iname \*php\*</code>.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-12-04T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Hospitals are a Test of Patience]]></title>
      <link>http://adamjspooner.com/journal/hospitals-are-a-test-of-patience</link>
      <guid>http://adamjspooner.com/journal/hospitals-are-a-test-of-patience#when:2009-12-02T00:00:00-05:00</guid>
      <description><![CDATA[<p>Last night I spent six hours of my life in a hospital, which has lead me to believe the ultimate reason hospitals exist is to increase our potential for patience. You&#8217;re confined to levels upon levels of waiting, each longer than the last. But I&#8217;m getting ahead of myself.</p>

<p>I ride my bike to and from work everyday like a good little hippie. I&#8217;ve been seriously riding for nearly 15 years which means I ride on clipless pedals. My first experience with clipless was on a mountain bike. The trail was Salem Park in Winston Salem, NC. I was nervous, as most beginners tend to be. The course was muddy, and I was clumsy. It ended with me wrapped around a tree at the bottom of a set of whoop-de-doos. It was a learning experience: take to the trail when you&#8217;re mildly confident, not your maiden voyage.</p>

<p>I now ride strictly on the road and only as a mode of transportation. I&#8217;ve long since lost the joy of dodging trees, and the mere though of riding on the road for hours bores me to tears. I do, however, still ride exclusively on clipless pedals. This means I&#8217;m that guy with those funny shoes, clip-clopping through the store, seemingly afraid to put his toes on the ground. They look like reverse high heels. The soles are extremely stiff. And the cleat is cause for alarm.</p>

<p>Every morning, upon arriving at work, I walk up a set of rubber coated steps. My cleated riding shoes grip nicely, and the clipclop is muffled to a dull thudthump. Every evening I strap on my riding shoes and exit down a different stairwell. A stairwell with no rubber coating, just raw exposed concrete. This naked set of stairs becomes the banana peel to my Mercedes when wearing my riding shoes. And on this particular evening&#8230; Halfway down the oily slope, I slipped—bike hoisted in the air. I land hard on my ass and left elbow. My kidneys slam into the steps. I slide to a halt and my bike finds its way on top of my legs. I gasp for air like a monk grasping for faith. Nothing coming. Pain is searing through my body, and the only thought running through my head is, &#8220;I so hope I didn&#8217;t break my coccyx.&#8221;</p>

<p>Seconds pass and air finally finds its way back into my lungs. I kick my bike off me and pray that no one walks into the stairwell adding pride to my list of hurts. I laid there for a moment allowing the pain to wash over me, absorbing it, trying to read the pain for more than just bruises. I stand up. I&#8217;m shaking. Nothing feels broken. I walk, hesitantly and purposefully, down the second half of the stairwell. I reach the sidewalk outdoors and try to roll my bike, thinking I could somehow make it home, dazed and confused. The bike jerks a syncopated roll. I look back and the wheel is slightly bent, grabbing the brake pad awkwardly, and I realize there would be no riding in my immediate future.</p>

<p>I grab my phone, which was luckily unharmed in the fall, and call my wife. She was already in transit, so the wait was short—the only short wait of the night. While I&#8217;m on the phone, I notice blood dripping on the concrete. It&#8217;s coming from my elbow. On closer inspection, I see a hole in my elbow. A hole. In my elbow. I end the call, and rush upstairs with my riding shoes still on. I scurry to the sink, turn on the water, grit my teeth, and plunge my elbow into the stream. It stings, but I scrub the hole in my elbow anyways. The hole. In my elbow. I finish the scrub down and grab a few paper towels to hopefully stop the bleeding. I walk over to Joshua whose first reaction was to take a picture. Documentation is key. It&#8217;s the proof that this really happened. Well, that and the doctor&#8217;s bill I&#8217;ll soon receive.</p>

<p>Allison arrives and I ask, &#8220;How would you like to spend the evening in the emergency room?&#8221;</p>

<p>We&#8217;re admitted to the emergency room by a portly woman slowly chewing gum. She sees the hole in my elbow and asks me to fill out some paperwork. Thankfully Allison was there and filled it out as holding a wad of paper towels over an elbow isn&#8217;t conducive to writing. We hand the paperwork back to our friend at the desk, and the waiting begins.</p>

<p>Everyone knows that hospital waiting rooms contain the world&#8217;s most unique people. Take advantage of this. Soak in the sights and sounds &#8230; and smells. You won&#8217;t get this again for a long time, hopefully.</p>

<p>We sit. We wait.</p>

<p>A couple across from us argues about their parent&#8217;s farm. I see no injuries on either of them. They both seem relatively healthy. So, I&#8217;m led to believe that a parent is in the emergency room. Maybe they&#8217;re fighting over who gets what when father kicks the bucket.</p>

<p>We sit. We wait.</p>

<p>&#8220;Spooner,&#8221; is shouted. We&#8217;re overjoyed; it&#8217;s only been twenty minutes. The nurse looks me up and down and asks how I&#8217;m doing. My response is that I&#8217;m fine other than my elbow and my back. She takes a second look up and down and pauses at my feet. I&#8217;m still wearing my riding shoes. She says nothing. We follow her back into a tiny office where she asks me the usual: have I been using drugs, have I had sex with a man since 1978, etc. She takes us to our next waiting room. It&#8217;s a smaller room with a few more people.</p>

<p>We sit. We wait.</p>

<p>Allison isn&#8217;t keen on sitting still for extended periods of time. She won&#8217;t admit it, but I think it&#8217;s because she teaches the kids with <span class="caps">ADD</span>. She can&#8217;t take the waiting anymore and asks if I want some dinner. I decline. She decides to leave and eat. So, I&#8217;m left in this second waiting room, staring at my new friends.</p>

<p>There&#8217;s a woman three rows over with frizzy hair. Her head hangs between her knees and she&#8217;s hugging herself. There are three men next to me—two larger men surrounding a tiny, frail looking thing. I notice handcuffs on the two slices of bread and wonder why they&#8217;re escorting this gentleman about the hospital. Click plays on the two televisions, and both officers are watching it intently. How ironic. A movie about a man who wants to fast forward his humdrum life is playing as we all sit and wait.</p>

<p>We sit. We wait.</p>

<p>Another couple enters the room, the woman clutches a baby. The man is pacing the room while she sits down. I imagine he&#8217;s scoping out the place, checking for monsters. A smile spreads across my face, but I quickly dismiss it as I notice Officer CHiPs is staring at me. He knows we&#8217;re not allowed to have fun in waiting rooms. So, we sit and we wait.</p>

<p>We sit. We wait.</p>

<p>Allison returns from dinner in time for my name to be called. The wait count is up to nearly two hours.</p>

<p>Our nurse leads us back to an emergency room. You know, the kind where you&#8217;re put on a bed enclosed by a curtain that doesn&#8217;t close all the way and doesn&#8217;t reach the ground. So, I sit on the bed. Allison takes the chair. Our nurse asks a few questions about what happened. I explain as succinctly as possible because by now my arm is throbbing and I&#8217;d just like to go home. She asks me, &#8220;On a scale of 1 to 10, how badly does it hurt.&#8221; I say, &#8220;3,&#8221; and we both have a chuckle at how people usually say, &#8220;12 or 13.&#8221; Seriously, the scale doesn&#8217;t go that high. Stop it. She lets us know a doctor will be with us shortly. What she really said was, &#8220;you&#8217;re about to sit and wait.&#8221; So, we sit and wait.</p>

<p>We sit. We wait.</p>

<p>I pull out my phone and continue reading Chris Anderson&#8217;s Free. Allison pulls out her phone and plays Scrabble. She&#8217;s an addict.</p>

<p>There&#8217;s a woman across the hall from us in a glass-faced room, like the kind Milla Jovovich would be trapped behind in Resident Evil. The woman coughs and moans, incessantly—a hacking, nasty, lung&#8217;s-about-to-come-up cough. We&#8217;re afraid something is terribly wrong, like and advanced case of pneumonia or lung cancer or &#8230; something really bad. Thirty minutes pass by and a doctor comes to visit the coughing woman. He enters, greets her, and informs her that there&#8217;s nothing wrong with her. The coughing and moaning stopped instantly and she asked where her shoes were. I wish I shared her diagnoses. All the while, I can&#8217;t help thinking that my coccyx is royally chipped.</p>

<p>The doctor arrives. My elbow is scrubbed and bandaged. I&#8217;m given a shot. I get to piss in one of those funny looking milk jugs, and then we&#8217;re sent on our way.</p>

<p>By this time we&#8217;ve spent six hours in the hospital. There&#8217;s nothing wrong me other than there being a hole in my elbow that&#8217;s too small for stitches and just big enough to be annoying. I&#8217;m a patient person. I don&#8217;t mind waiting. I never have. I imagine I never will.</p>

<p>Some people despise sitting still. Waiting reminds them of all the things they should be doing but can&#8217;t because of some forced restraint. I highly recommend a trip to your local emergency room because hospitals are a test of patience.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-12-02T00:00:00-05:00</dc:date>
    </item>
    <item>
      <title><![CDATA[Advice from Demigods]]></title>
      <link>http://adamjspooner.com/journal/advice-from-demigods</link>
      <guid>http://adamjspooner.com/journal/advice-from-demigods#when:2009-11-20T00:00:00-05:00</guid>
      <description><![CDATA[<p>Last month I read Coders at Work, a collection of Q&amp;A interviews conducted by Peter Seibel with 15 of the top computer scientists of all time. There were some common responses that tied each of these programmers together. I like to think it&#8217;s their inadvertent advice for aspiring programmers.</p>

<p><strong>Read other people&#8217;s code.</strong> This sounds like an inane task. Who wants to waste hours of time reading code with so much good literature out there and so little time to read it? Their arguments were simple: seeing someone else&#8217;s thought process is beneficial, you might learn something new, and you may learn how good&#8212;or bad&#8212;code is organized. <a href="http://www.crockford.com/" title="Douglas Crockford&#39;s Personal Site">Douglas Crockford</a> has an interesting method for reading code. He organizes the code before reading. This allows him to focus on the content and not the organization. Others print out code to annotate it.</p>

<p><strong>Learn to write well.</strong> Nearly every programmer agreed with this point: programming is more like writing than math or engineering. It&#8217;s true, there is an exorbitant amount of math, nay logic, in computer science, but writing a program others can understand is more like writing a novel than a collection of equations.</p>

<p><strong>Learn one language well</strong>, then learn other languages. Learning a language well means understanding the methodologies, not just the syntax. Also, learning a language from different types of programming&#8212;<a href="http://en.wikipedia.org/wiki/Procedural_programming" title="Wikipedia&#39;s entry on Procedural Programming">procedural</a>, <a href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Wikipedia&#39;s entry on Object-Oriented Programming">object-oriented</a>, <a href="http://en.wikipedia.org/wiki/Declarative_programming" title="Wikipedia&#39;s entry on Declarative Programming">declarative</a>, etc.&#8212;can be beneficial as each type approaches different problems in different ways. This can influence the way you view your main language.</p>

<p><strong><acronym title="Integrated Development Environment"><span class="caps">IDE</span></acronym>s and debuggers are overrated.</strong> This does not mean <span class="caps">IDE</span>s and debuggers are bad. This simply means they are not the best tools to use when starting out. By all means, use them if you are a seasoned programmer. I am apt to agree that <span class="caps">IDE</span>s are bad, though. They potentially create hundreds of lines of code without your knowledge, give you far too many hints, and generally dumb down the craft of writing a well-formed program. Debuggers, on the other hand, can be extremely useful if you know how to use them. The unfortunate step is learning how to use them. Stick with a simple text editor&#8212;vim and Emacs are wonderful&#8212;and use print statements for debugging.</p>

<p><strong>Practice, practice, practice.</strong> You can&#8217;t learn a craft unless you practice it often. You can&#8217;t improve unless you practice it daily. Based on some <a href="http://readernaut.com/adam/books/0470279303/why-dont-students-like-school/" title="Why Don&#39;t Students Like School? on Readernaut">other reading</a>, pace yourself. If you plan on practicing 5 hours a week, practice 1 hour each day. Cramming is not the same as practicing.</p>

<p>A deep understanding of <strong>complex math is not necessary to be a good programmer</strong>, but it may be necessary to be a great programmer. <a href="http://www-cs-faculty.stanford.edu/~uno/" title="Donald Knuth&#39;s Home Page">Donald Knuth</a> describes himself as a mathematician and a computer scientist. He&#8217;s also a phenomenal programmer. Now, there are plenty of mathematicians who are lousy programmers, so the argument falls apart, but understanding discrete mathematics&#8212;or any high-level mathematics&#8212;can only improve your understanding of computer science and programming.</p>

<p><strong>Read the classics.</strong> This is the same advice I&#8217;d give to anyone in any field. Read the classics if they exist. There&#8217;s a reason they&#8217;re called classics. My first thought would be, &#8220;What are the classics?&#8221; Mr. Seibel asked every programmer, except Mr. Knuth, if they&#8217;d read <em><a href="http://readernaut.com/search/amazon/?query=the+art+of+computer+programming" title="Search results for The Art of Computer Programming on Readernaut">The Art of Computer Programming</a></em>, by Donald Knuth. Also, Edsger Dijkstra&#8217;s <em><a href="http://www.amazon.com/dp/013215871X/" title="A Discipline of Progamming on Amazon">A Discipline of Programming</a></em> was frequently referenced. These two books (the first is a series) seem like a good place to start. Each programmer also listed books they&#8217;d recommend for anyone from novice to expert.</p>

<p><strong>Learn C, not C++.</strong> Neither is great, but C is better than C++ simply because it&#8217;s smaller. Some programmers defamed C++ while others were ambivalent. Regardless, learning C seems like a good place to start if you&#8217;re familiar with programming. Otherwise, I&#8217;d suggest Python or Ruby as they protect you from making silly mistakes that C and C++ won&#8217;t.</p>

<p><strong>Start with pencil and paper.</strong> A bad design in a new or great language is still a bad design. Think through the problem as much as you can. Start by writing it. Then take it to the machine. If you hit a snag, rinse and repeat.</p>

<p><strong>Brainstorm with the hive mind; program in a vacuum.</strong> Brainstorming with a few people can turn you on to multiple solutions. No two people think exactly alike. Ambivalence was rampant on eXtreme and paired Programming. Basically they all agreed that XP(eXtreme Programming) and paired programming work well, but they usually benefit only the weaker individual.</p>

<p><strong>Multicore processing is the future of programming.</strong> Start wrapping your head around it.</p>

<p>I&#8217;m still mulling over their advice. Some of it seems quite controversial, though most of it is quite good. One thing I&#8217;m trying to keep in mind is most of these programmers started programming at the dawn of the age. There were small systems, small languages, and small groups of like-minded people. They could keep it all&#8212;the architecture, the memory states, the language, etc.&#8212;in their heads because it was such a small set to remember. Now, the languages are larger, the machines are faster, the memory is gigantic. They were born at the right time to be demigods.</p>]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2009-11-20T00:00:00-05:00</dc:date>
    </item>
  </channel>
</rss>
