<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The Real Adam</title>
	<atom:link href="http://therealadam.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://therealadam.com</link>
	<description>Developer at large, expert typist, fungineer</description>
	<lastBuildDate>Sat, 18 May 2013 17:04:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='therealadam.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/999116b97a3284a6b130eda28e875f47?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>The Real Adam</title>
		<link>http://therealadam.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://therealadam.com/osd.xml" title="The Real Adam" />
	<atom:link rel='hub' href='http://therealadam.com/?pushpress=hub'/>
		<item>
		<title>The downsides of live music</title>
		<link>http://therealadam.com/2013/05/18/the-downsides-of-live-music/</link>
		<comments>http://therealadam.com/2013/05/18/the-downsides-of-live-music/#comments</comments>
		<pubDate>Sat, 18 May 2013 15:38:30 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[writings]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2939</guid>
		<description><![CDATA[I am a giant music nerd. I listen to a ton of music, I think about music a lot, and I often seek out new music via Twitter and Rdio. Besides a dislike for showtunes and reggae, I’m a pretty open-minded listener. Yet, it is exceedingly rare that I seek out live music. When I [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2939&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am a giant music nerd. I listen to a ton of music, I think about music a lot, and I often seek out new music via Twitter and Rdio. Besides a dislike for showtunes and reggae, I’m a pretty open-minded listener.</p>
<p>Yet, it is exceedingly rare that I seek out live music. When I do, I’m that concert goer who is only buying tickets for long-established acts. In the past several years, I’ve seen Paul McCartney, Ray Wylie Hubbard, Lucinda Williams, Steely Dan, Ben Folds, and Ryan Adams. The youngest of these started their career twenty years ago.</p>
<p>What’s up with that? Well, I simply don’t like live music. I’ve got reasons.</p>
<h3>Performances don&#8217;t start on time</h3>
<p>Having performed in jazz bands, orchestras, stand-up showcases, and improv shows, I&#8217;ve come to accept as axiom that performances just don&#8217;t start on time. There&#8217;s lots of good reasons for this. Everyone wants to get as many people into the seats as possible to make the show better, to improve the audience experience, or simply to make an extra buck.</p>
<p>The reasons that performances at live music venues don&#8217;t start on time come down to selfishness. The performers didn&#8217;t arrive on time, the stage wasn&#8217;t not have been set up in time. Worse, these have a knock-on effect. Once a performance is behind, it only gets <em>more</em> behind. There&#8217;s no shortening the break between bands or reducing the time between doors opening and the first band playing.</p>
<p>This leads me to the most inane reason live music is not on time: selling beer. &#8220;Doors open at 8 PM&#8221; almost universally means that you can walk in at 8 PM, but you can count on not seeing any live music until 9 PM. The opening act for the opening act is the selling of booze. I&#8217;ve got better ways to spend my time than standing around for an hour staking out a spot just so the venue can sell beer.</p>
<h3>Standing for a couple hours sucks</h3>
<p>Whether it&#8217;s standing in line for a roller coaster or waiting through beer-time, an opening act, and the changing of the stage, standing around is the worst. Fatigue and boredom set in; you&#8217;re taken out of the experience of enjoying music played in front of a lot of people. Sore feet and knees do not an enjoyable listening experience make.</p>
<p>Thank you, venues with seats, and thank you, crowds that don&#8217;t feel the need to show their enthusiasm by standing upright. You make live music a much more civil, enjoyable experience.</p>
<h3>Crowds of people are the worst</h3>
<p>Suppose you get a good room, with good sound, and a great performer. You&#8217;ve still got to tend to the other people in the room. The drunk heckler, the people calling out songs, the tall person blocking your view. That&#8217;s all <em>after</em> you stood in line to get in, waited to go to the bathroom, or put out of mind the guy who lit up next to you.</p>
<h3>Opening acts</h3>
<p>Opening acts. They&#8217;re a necessary but inconsistent evil. Sometimes you&#8217;ll see a really good one. One of the best bands I saw at a Dallas radio station &#8220;festival&#8221; was on the third stage. One of the worst bands I ever saw was an opener that was sufficiently uncertain of their own skills that the majority of the between-song banter was insults at the audience and counter-heckling gone bad.</p>
<p>I salute events that eschew the opening act and cut straight to the main performer. Give the people what they want.</p>
<h3>It’s too loud</h3>
<p>I don’t know why, but live music is universally an assault on my ear drums. I&#8217;ve been at concerts where I could feel the music moving <em>inside</em> my pants. That seems a bit excessive to me.</p>
<p>Beyond the personal discomfort, there&#8217;s nothing about loudness that makes music better. If everything is loud, nothing is loud. Sustained loudness is boring.</p>
<p>Short bouts of loudness; that&#8217;s interesting. The juxtaposition of the opening arpeggios of &#8220;Wouldn&#8217;t It Be Nice&#8221; with the wall-of-sound that follows is really nice. The way &#8220;Thunder Road&#8221; or <em>Bolero</em> grow into something loud and great is what makes them interesting. The amazing loudness of the opening of <em>Also Sprach Zarahustra</em> contrasted with the nearly non-existent quietness of the second movement is genius.</p>
<p>Don&#8217;t turn it up because you can. Turn it up because you mean it.</p>
<h3>Drums are a lie</h3>
<p>Let&#8217;s talk about the actual music again. In particular, drums. Drums, my friend, are a lie. They do not sound like you think they do. What you hear on the radio and on albums are the results of trained sound engineers using microphone and equalizer tricks to make drums sound decent.</p>
<p>This is problematic for two reasons. First off, drums are really loud in the hands of an enthusiastic player. Often quite a bit louder than your typical amplifier. Thus, it&#8217;s guaranteed you&#8217;re going to hear a lot more drums than guitars, horns, strings, or vocals at a live music event. I take that back; I guarantee you that you will not be able to hear strings at any music club you ever go to, but I&#8217;ll come back to that.</p>
<p>The more problematic aspect of a drum kit is you&#8217;re going to hear <em>raw drums</em> when you go to a live music event. Very little microphone tricks or equalizer cleverness; the drums may not even be isolated. That means the snare is going to sound like a can of beans getting hit with a stick. The toms will sound like someone banging on an empty box. The cymbals are going to sound like a mad person beating on pots and pans.</p>
<p>If you&#8217;re anything like me, you&#8217;re not going to enjoy them drums.</p>
<h3>It sounds terrible</h3>
<p>Drums are not the only problematic instrument. In my experience, most live clubs have very poor sound. Even if it&#8217;s not too loud, the mix is wrong, you can&#8217;t hear the melody, you can&#8217;t hear the singing, or the overall sound is distorted.</p>
<p>Assuming that clubs don&#8217;t exist merely to move booze (not a big leap in reasoning, I know), I don&#8217;t understand how this is the situation. If you want to be a part of a music scene, a good sound system and someone who can operate it seems like par for the course.</p>
<p>I am happy to note that, if you&#8217;re lame like me and only go to see performers who have been around the block dozens of times, you&#8217;re going to have a much better listening experience. Less prominent musicians are starting to tour with just one accompanying performer and that person is not playing a drum kit. The A-list performers have really good drummers (Paul McCartney&#8217;s drummer is a blast to watch) and the sound engineers on the tour are <em>excellent</em>. This makes for a far more enjoyable, balanced sound.</p>
<h3>There&#8217;s little mystery</h3>
<p>This one is rather personal, though I&#8217;ve spoken with musicians who feel the same way. If you know how to make music, watching the performance of music can be boring. A song that you can listen to and quickly pick up the structure and details of isn&#8217;t all that exciting. Even if it is, you can see the musicians enjoying the performance of the song and just <em>wish</em> you were up there playing and not down here watching.</p>
<p>I do enjoy watching very talented performers do their thing. Someone who mixes music with a good stage show or interesting banter between songs is fun to watch. The Rolling Stones are interesting to watch because Mick Jagger is such a good showman, Charlie Watts seems so apathetic, and Keith Richards is, well, Keef. I&#8217;ve really enjoyed seeing Hayes Carll and Lyle Lovett because the stories they tell are great and their banter between songs is amusing.</p>
<p>Genres I <em>don&#8217;t</em> know how to make are also fascinating. Hip-hop is not a thing I really know how to make, so that&#8217;s fun. Jazz and classical can be fun because I know how they work but didn&#8217;t reach the level where I could <em>really</em> make it. My new rule is, whenever <em>Rite of Spring</em> is performed, I need to be there; it&#8217;s relatively short (about forty minutes), really awesome, and I&#8217;m certain I would not be able to perform it with an orchestra without ruining it for everyone else.</p>
<hr />
<p>Maybe I&#8217;m doing it wrong. Perhaps my heuristics for trying to time a concert so I arrive as the opening act is finishing require tweaking. I should definitely remember to bring earplugs more often. It&#8217;s entirely possible I&#8217;m just a grumpy guy.</p>
<p>But: I&#8217;m not the guy who tells you about the hippest new musical thing. I&#8217;m probably not the guy who&#8217;s going to catch your favorite band. I&#8217;m the guy who goes to see Paul McCartney out of reverence and because my wife and I both like him. I&#8217;m the guy who listens to an album as a long-form idea. I&#8217;m the guy who wants to understand the history and creation of a thing. That&#8217;s just the nerd I am: I understand music over time, not over the course of an evening.</p>
<p><em>Ed. this originally ran in <a href="http://therealadam.com/the-internet-todo-list-for-enthusiastic-readers/">The Internet Todo List for Enthusiastic Readers</a>. You should check that out. It was pointed out that I&#8217;m a bit of an old man. In spirit, this is absolutely true. Also worth noting: I&#8217;m going to see Paul McCartney again this week, so I must not <em>entirely</em> hate live music. Human inconsistencies, eh?</em></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2939&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/05/18/the-downsides-of-live-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>30.245673 -97.768836</georss:point>
		<geo:lat>30.245673</geo:lat>
		<geo:long>-97.768836</geo:long>
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	</item>
		<item>
		<title>Learning from a dropped refactoring</title>
		<link>http://therealadam.com/2013/05/01/learning-from-a-dropped-refactoring/</link>
		<comments>http://therealadam.com/2013/05/01/learning-from-a-dropped-refactoring/#comments</comments>
		<pubDate>Wed, 01 May 2013 14:47:55 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2935</guid>
		<description><![CDATA[You don&#8217;t have to deploy every bit of code you write. In fact, it&#8217;s pretty healthy if you throw some of the code you write before you even think about committing it. Case in point: I sat down to refactor some Sifter code this weekend. I wanted to experiment with an idea about how Rails [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2935&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>You don&#8217;t have to deploy every bit of code you write. In fact, it&#8217;s pretty healthy if you throw some of the code you write before you even <em>think</em> about committing it.</p>
<p>Case in point: I sat down to refactor some <a href="https://sifterapp.com">Sifter</a> code this weekend. I wanted to experiment with an idea about how Rails apps should be organized. I moved some code around, stepped back, and decided the idea behind my refactoring wasn&#8217;t sufficiently well cooked and stashed it instead of committing it.</p>
<hr />
<p>I think that one can follow SOLID principles without radically decoupling your app from Rails and especially ActiveRecord. Instead, you let AR objects do what they&#8217;re good at: representing data. You push behavior, as much as possible, out into objects. What you should end up with is a handful of models that encapsulate the tables in your database and a bunch of classes that encapsulate the <em>logic</em> and behavior of your application; whether these classes live in <code>app/models</code> or somewhere else is a matter of personal taste.</p>
<p>My goal is to extract an object that encapsulates user authentication behavior; a class that is mostly concerned with conditions and telling other objects to do things. I extracted a class focused on &#8220;remember me&#8221; session behavior. It looked something like this:</p>
<pre><code>class UserAuthentication &lt; Struct.new(:user)

  def remember_token?
    user.remember_expires_at.present? &amp;&amp; (Time.now.utc &lt; user.remember_expires_at)
  end

  def remember_me(offset=10.years)
    time = offset.from_now.utc
    user.touch_remember_token(time) unless remember_token?
  end

  def forget_me
    user.clear_remember_token!
  end
  
end</code></pre>
<p>Then, for compatibility, I added this to the model:</p>
<pre><code>  def authentication
    UserAuthentication.new(self)
  end

  delegate :remember_token?, :remember_me, :forget_me, to: :authentication</code></pre>
<p>The principles I&#8217;m following are thus:</p>
<ul>
<li>Don&#8217;t expose AR&#8217;s API to collaborators. Therefore, <code>UserAuthentication</code> must call methods on <code>User</code> rather than directly update attributes and save records.</li>
<li>Encapsulate behavior in non-model classes. Therefore, <code>User</code> shouldn&#8217;t know when or how to manipulate &#8220;remember me&#8221; data, only expose an API that handles the mechanics.</li>
</ul>
<p>The result: now my extracted class, <code>UserAuthentication</code> has meaning, but doesn&#8217;t really <em>own</em> any behavior. It&#8217;s a bit envious of the <code>User</code> model. That &#8220;envy&#8221; hints that its behavior really should live in the model.</p>
<p>Further, using <code>delegate</code> means the <code>User</code> model&#8217;s API surface area isn&#8217;t actually reduced. Granted, this is a stopgap measure. I should really hunt down all invocations of the delegated method and convert them to use <code>UserAuthentication</code> instead.</p>
<p>At this point, it feels like my refactoring isn&#8217;t making forward progress. I&#8217;ve rearranged things a bit, but I don&#8217;t think I&#8217;ve made the code that much better.</p>
<hr />
<p>As I alluded earlier, I decided to stash this refactoring for later contemplation. Maybe next time I should start from the callers of the APIs I want to refactor and drive the changes from there. Perhaps my conjecture about decoupling ActiveRecord data from application behavior needs tuning.</p>
<p>I beat the &#8220;ship lots of stuff!&#8221; drum a lot, but I&#8217;m happy with this result. Learning to strike the balance between shipping the first thing you type out and the thing your future self won&#8217;t hate is an undervalued skill. It takes practice, and that&#8217;s just what I did here. Plus, I parleyed it into a blog post. <strong>Everyone wins</strong>!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2935&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/05/01/learning-from-a-dropped-refactoring/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	</item>
		<item>
		<title>What I wish I&#8217;d known about rewrites</title>
		<link>http://therealadam.com/2013/04/22/what-i-wish-id-known-about-rewrites/</link>
		<comments>http://therealadam.com/2013/04/22/what-i-wish-id-known-about-rewrites/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 14:40:19 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[rewrites]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2922</guid>
		<description><![CDATA[I can&#8217;t say enough good things about How to Survive a Ground-Up Rewrite Without Losing Your Sanity. Having been party to a few projects like this, a lot of this advice rings true to me. Let me quote you the good parts! You must identify the business value of the rewrite: The key to fixing [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2922&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I can&#8217;t say enough good things about <a href="http://onstartups.com/tabid/3339/bid/97052/Screw-You-Joel-Spolsky-We-re-Rewriting-It-From-Scratch.aspx">How to Survive a Ground-Up Rewrite Without Losing Your Sanity</a>. Having been party to a few projects like this, a lot of this advice rings true to me. Let me quote you the good parts!</p>
<div class="center"><img src="http://therealadam.files.wordpress.com/2013/04/burndown.png?w=500&#038;h=250" alt="Burndown" border="0" width="500" height="250" /></div>
<p>You must identify the <em>business</em> value of the rewrite:</p>
<p>
<blockquote>The key to fixing the &#8220;developers will cry less&#8221; thing is to identify, specifically, what the current, crappy system is holding you back from doing. E.g. are you not able to pass a security audit? Does the website routinely fall over in a way that customers notice? Is there some sexy new feature you just can&#8217;t add because the system is too hard to work with? Identifying that kind of specific problem both means you&#8217;re talking about something observable by the rest of the business, and also that you&#8217;re in a position to make smart tradeoffs when things blow up (as they will).</p></blockquote>
<p>The danger of unicorn rewrites:</p>
<p>
<blockquote>For the Unhappy Rewrite, the biz value wasn&#8217;t perfectly clear. And, thus, as often happens in that case, everyone assumed that, in the bright, shiny world of the New System, all their own personal pet peeves would be addressed. The new system would be faster! It would scale better! The front end would be beautiful and clever and new! It would bring our customers coffee in bed and read them the paper.</p></blockquote>
<p>Delivering value incrementally is of the greatest importance:</p>
<p>
<blockquote>Over my career, I&#8217;ve come to place a really strong value on figuring out how to break big changes into small, safe, value-generating pieces. It&#8217;s a sort of meta-design &#8212; designing the process of gradual, safe change.</p></blockquote>
<p>But &#8220;big bang&#8221; incremental delivery is accidental waterfall:</p>
<blockquote><p>False incrementalism is breaking a large change up into a set of small steps, but where none of those steps generate any value on their own. E.g. you first write an entire new back end (but don&#8217;t hook it up to anything), and then write an entire new front end (but don&#8217;t launch it, because the back end doesn&#8217;t have the legacy data yet), and then migrate all the legacy data. It&#8217;s only after all of those steps are finished that you have anything of any value at all.</p>
</blockquote>
<p>Always keep failure on the table:</p>
<p>
<blockquote>If a 3-month rewrite is economically rational, but a 13-month one is a giant loss, you&#8217;ll generate a lot value by realizing which of those two you&#8217;re actually facing.</p></blockquote>
<p>I <em>really</em> wish I&#8217;d thought of applying &#8220;The Shrink Ray&#8221;, an idea borrowed from <a href="http://laughingmeme.org">Kellan Elliot-McCrea</a>:</p>
<p>
<blockquote>We have a pattern we call shrink ray. It&#8217;s a graph of how much the old system is still in place. Most of these run as cron jobs that grep the codebase for a key signature. Sometimes usage is from wire monitoring of a component. Sometimes there are leaderboards. There is always a party when it goes to zero. A big party.</p></blockquote>
<p>Engineer your migration scripts as idempotent, repeatable machines. You&#8217;re going to run them <em>a lot</em>:</p>
<p>
<blockquote>Basically, treat your migration code as a first class citizen. It will save you a lot of time in the long run.</p></blockquote>
<p>Finally, you should fear rewrites, but developing the skill to pull them off is huge:</p>
<p>
<blockquote>I want to wrap up by flipping this all around &#8212; if you learn to approach your rewrites with this kind of ferocious, incremental discipline, you can tackle incredibly hard problems without fear.</p></blockquote>
<p>Whenever I talk to people with monolithic applications, slow-running test suites, and an urge to do something drastic, I want to mind-meld the ideas above into their brains. You can turn code around, but it takes time, patience, and a culture of relentless improvement and quality to make it happen.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2922&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/22/what-i-wish-id-known-about-rewrites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/burndown.png" medium="image">
			<media:title type="html">Burndown</media:title>
		</media:content>
	</item>
		<item>
		<title>Look up every once in a while!</title>
		<link>http://therealadam.com/2013/04/12/look-up-every-once-in-a-while/</link>
		<comments>http://therealadam.com/2013/04/12/look-up-every-once-in-a-while/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 14:46:25 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Expanded ideas]]></category>
		<category><![CDATA[writings]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2916</guid>
		<description><![CDATA[Sometimes, I feel conditioned never to look beyond the first ten feet of the earth. Watch where you&#8217;re going, don&#8217;t run into things, avoid being eaten by bears. Modern life! When I remind myself to look up, there’s so much great stuff. Trees, antennae, water towers, buildings. Airplanes, birds, superheroes. Never mind the visual pollution [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2916&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Sometimes, I feel conditioned never to look beyond the first ten feet of the earth. Watch where you&#8217;re going, don&#8217;t run into things, avoid being eaten by bears. Modern life!</p>
<div id="attachment_2918" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-2918" alt="A Texas sunset" src="http://therealadam.files.wordpress.com/2013/04/img_0906.png?w=604"   /><p class="wp-caption-text">I see stuff like this out my office window every day. Be jealous.</p></div>
<p>When I remind myself to look up, there’s so much great stuff. Trees, antennae, water towers, buildings. Airplanes, birds, superheroes. Never mind the visual pollution of smoke, contrails, and billboards. Nifty things, natural and man-made.</p>
<p>Clouds in particular are nifty. They’re almost always changing, even if you look at the same patch of sky. They have pleasing shapes, and just a little bit of texture. Simple pleasure, clouds are.</p>
<p>And sunsets! Hooo boy, those are great. I thought they were overrated for a long time, but boy was I wrong. Colors, dynamics, fading off into darkness. I&#8217;m pretty sure sunsets invented the word &#8220;poetic&#8221;.</p>
<p><em>Ed. This originally appeared in my <a href="http://tinyletter.com/therealadam">Internet Todo List for Enthusiastic Thinkers</a>. It&#8217;s an email thing you can subscribe to. When you do, good things come to you, often via email. It&#8217;s free, and it bears no shilling for other people.</em></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2916&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/12/look-up-every-once-in-a-while/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>32.745713 -96.845820</georss:point>
		<geo:lat>32.745713</geo:lat>
		<geo:long>-96.845820</geo:long>
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/img_0906.png" medium="image">
			<media:title type="html">A Texas sunset</media:title>
		</media:content>
	</item>
		<item>
		<title>Exemplary documentation: size and purpose</title>
		<link>http://therealadam.com/2013/04/11/exemplary-documentation-size-and-purpose/</link>
		<comments>http://therealadam.com/2013/04/11/exemplary-documentation-size-and-purpose/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 01:40:27 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[writings]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2913</guid>
		<description><![CDATA[There&#8217;s a lot to say about programmer-focused software documentation. It&#8217;s more crucial than many developers think, so it is often neglected. Even when its not neglected, it&#8217;s often an after-thought. I&#8217;ve noticed there are three kinds of documentation I&#8217;m interested in. When I first come across some software, I want short and focused examples of [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2913&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s a lot to say about programmer-focused software documentation. It&#8217;s more crucial than many developers think, so it is often neglected. Even when its not neglected, it&#8217;s often an after-thought. I&#8217;ve noticed there are three kinds of documentation I&#8217;m interested in.</p>
<p>When I first come across some software, I want <strong>short and focused examples</strong> of how I can use it for my own purposes. I&#8217;m not looking for a lot of theory or exposition; just show me the benefit. If I can&#8217;t <em>quickly</em> see how the software works and makes my life easier, I&#8217;m very likely to discard it. In other words, I want shorter, &#8220;tweet-sized&#8221; documentation that sells me on the sizzle right away.</p>
<div class="center"><img class="aligncenter" style="border:0;" alt="rbenv's README" src="http://therealadam.files.wordpress.com/2013/04/rbenv-readme.png?w=400&#038;h=344" width="400" height="344" border="0" /></div>
<p><a href="https://github.com/sstephenson/rbenv">rbenv</a>&#8216;s old README is a good example. I can see from the screenshot what using rbenv looks like. The bullet points make it easy to know the specifics of what this software is about.</p>
<p>If I come back to some software, I often want to <strong>learn the whole thing in one sitting</strong>. I want a longer document that I can read through in a <em>serial</em> fashion to learn most or all of the concepts and details about using the code. It should cover the domain ideas of the software, the individual APIs, and how it all works together to make something. To continue the metaphor, I want a well-written, &#8220;Instapaper-length&#8221; document worthy of reading in a comfy chair.</p>
<div class="center"><img class="aligncenter" style="border:0;" alt="Backbone.js homepage" src="http://therealadam.files.wordpress.com/2013/04/backbone.png?w=260&#038;h=678" width="260" height="678" border="0" /></div>
<p>The <a href="http://documentcloud.github.io/backbone/">Backbone.js</a> homepage is great at serving as a long-form read. It serves as a reference document and guide at the same time.</p>
<p>After I start using something, I will often want to return to it to <strong>remember</strong> how to do specific things or to <strong>figure out</strong> if a task is possible at all. This is when I lean most on traditional API documentation. One to three paragraphs, easily searched are the ideal here. Kind of like the &#8220;Tumblr-post&#8221; of documentation.</p>
<p>I&#8217;ve yet to find all three of these qualities in the documentation for a single piece of software. Finding that software has done a really good job at one of them is delight enough. I can&#8217;t imagine how excited the world, at large, would be if something were to have all three. There would be a lot of rejoicing.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2913&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/11/exemplary-documentation-size-and-purpose/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<georss:point>32.745713 -96.845820</georss:point>
		<geo:lat>32.745713</geo:lat>
		<geo:long>-96.845820</geo:long>
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/rbenv-readme.png" medium="image">
			<media:title type="html">rbenv&#039;s README</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/backbone.png" medium="image">
			<media:title type="html">Backbone.js homepage</media:title>
		</media:content>
	</item>
		<item>
		<title>The Third Shift</title>
		<link>http://therealadam.com/2013/04/10/the-third-shift/</link>
		<comments>http://therealadam.com/2013/04/10/the-third-shift/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 03:13:33 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Expanded ideas]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[writings]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2909</guid>
		<description><![CDATA[In the days of industrial labor, many factories ran three shifts per day. Three eight-hour shifts per day keeps a factory fully utilized and some business major&#8217;s spreadsheets happy. Luckily, for many of us, knowledge/thinking oriented businesses don&#8217;t usually follow this paradigm. We&#8217;re not (often) pressured to pick up a double shift, possibly freeing time [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2909&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In the days of industrial labor, many factories ran three shifts per day. Three eight-hour shifts per day keeps a factory fully utilized and some business major&#8217;s spreadsheets happy. Luckily, for many of us, knowledge/thinking oriented businesses don&#8217;t usually follow this paradigm. We&#8217;re not (often) pressured to pick up a double shift, possibly freeing time to do useful things that we don&#8217;t get paid for.</p>
<p>For the ambitious (possible euphemism), this opens up an interesting opportunity: allocating the second shift to one&#8217;s own projects. Writing that great book you&#8217;ve got inside you, penciling a comic, running your Etsy business on the side, or bootstrapping that web app you&#8217;re dreaming about all make a great fit for a second shift. Find time before or after your day job, and then aim for the sky.</p>
<p>I found it easy to take this logic to the next level and think, well if two shifts works and I can make progress on _two_ things, three shifts might work and then I can do _three_ things! Wake up early, do something awesome. Work the nine to five, do awesome things. Take a couple hours in the evening, do even more awesome things. Seems good, right?</p>
<p>Unfortunately, the third shift is a bandaid over too many projects and lead me to do lower quality work across the board.</p>
<p>I need more physical rest and mental space than working on three things affords. Turning down an extra hour of sleep or the bleeping of an alarm clock is a hard bargain. One side project, as it turns out, is plenty.</p>
<p>That said, the third shift _is_ useful as a &#8220;turbo button&#8221; that I only press when I really mean it and used only for short-term projects that are important to whatever awesome thing I&#8217;m trying to do. A couple weeks waking up early to bang out a presentation  or longer-form article are good. Sustaining that for a series of projects doesn&#8217;t work for me.</p>
<p>In short: ambition is great, but striking a balance with mental and physical rest is better.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2909&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/10/the-third-shift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	</item>
		<item>
		<title>A newsletter</title>
		<link>http://therealadam.com/2013/04/09/a-newsletter/</link>
		<comments>http://therealadam.com/2013/04/09/a-newsletter/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 01:57:11 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Expanded ideas]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2908</guid>
		<description><![CDATA[So I did this thing where I wrote a newsletter. I&#8217;m going to do it again. The first iteration of this publication was a bit like a written late-night variety show. I wrote about interesting articles, or things that interested me. Each &#8220;episode&#8221; almost always closed with some kind of musically awesome thing I&#8217;d found [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2908&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So I did this thing where I wrote a <a href="http://tinyletter.com/therealadam">newsletter</a>. I&#8217;m going to do it again. The first iteration of this publication was a bit like a written late-night variety show. I wrote about interesting articles, or things that interested me. Each &#8220;episode&#8221; almost always closed with some kind of musically awesome thing I&#8217;d found on the internet.</p>
<p>The next iteration of this <a href="http://tinyletter.com/therealadam">newsletter</a> will be like a hand-delivered transmogrification of this weblog. I&#8217;ll include links to the articles I thought were most special or had a surprising reception. I&#8217;ll occasionally write &#8220;commentary tracks&#8221; on how an article came to be. Each edition will almost certainly end with a musical or pop culture find, because what fun is running a newsletter if I can&#8217;t annoy you with my pop culture tastes?</p>
<p>My hope is that you&#8217;ll find this interesting. You can <a href="http://tinyletter.com/therealadam/letters">take a look at what I&#8217;ve written previously</a> and subscribe to this free internet email <a href="http://tinyletter.com/therealadam">newsletter</a> at your discretion. I think you might like it.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2908&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/09/a-newsletter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	</item>
		<item>
		<title>Web design for busy programmers</title>
		<link>http://therealadam.com/2013/04/08/web-design-for-busy-programmers/</link>
		<comments>http://therealadam.com/2013/04/08/web-design-for-busy-programmers/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 01:58:50 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[writings]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2907</guid>
		<description><![CDATA[Here it is: I&#8217;m somewhere between horribly afraid and way-too-smart to seriously attempt front-end web work. Browsers are not the software whose bugs I am interested in knowing about. That said, putting information on the web that doesn&#8217;t look like utter dross is a kind of required literacy in our field. While bravely dipping my [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2907&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Here it is: I&#8217;m somewhere between horribly afraid and way-too-smart to seriously attempt front-end web work. Browsers are not the software whose bugs I am interested in knowing about.</p>
<p>That said, putting information on the web that doesn&#8217;t look like utter dross is a kind of required literacy in our field. While bravely dipping my toes back into the front-end waters, I recently found some great tricks. Rediscovered, probably, but I&#8217;m not sure where the idea originally came from.</p>
<p>Most important: design in greyscale. Color is hard and can lead to tinkering. My goal is to get in and out of the front-end bits quickly, so tinkering is the enemy. Greyscale is one dimensional, greatly simplifying matters. Give important information higher contrast and less important information or &#8220;chrome&#8221; less contrast. Now you&#8217;re done thinking about color.</p>
<p>Almost as important: use a fixed-with font. As a programmer, you look at them everyday, so it&#8217;s a touchpoint of comfort. Pick a font you don&#8217;t use in your editor all day, just so you can stare at something different for a while. Copy and paste a &#8220;font stack&#8221; from the aptly named <a href="http://cssfontstack.com" title="http://cssfontstack.com">fontstacks</a>. Make important things big and unimportant things small. Now you&#8217;re done thinking about type.</p>
<p>The key to avoiding browser dragons, it seems, is to skip  horizontal layout, i.e. pull quotes, text wrapped around images, etc. It&#8217;s pretty easy to use CSS if you only run things down the left side of the page. All the depth and despair of CSS is in trying to get things to appear off the left margin. So don&#8217;t do that. Leave it to people who know how browsers work and how to manage their gnarly bugs. Now you&#8217;re done thinking about layout.</p>
<p>It&#8217;s tempting to think you should make your code examples look really nice. Don&#8217;t worry about it; highlighting code is of marginal value. You&#8217;ll never be satisfied with how it looks. The human mind is capable of reading code without a rainbow spectrum of colors. Spend time on writing about the code, not on polishing the colors and how its highlighted.</p>
<p>With all of those things out of the way, your way is clear to think about the really important things. What do you need to say, how do you structure the message, what do you leave out, how do you organize all the information? That&#8217;s the essence of publishing on the web, not the accidental complexity of making things look interesting.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2907&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/08/web-design-for-busy-programmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	</item>
		<item>
		<title>The gift and the curse of green-field projects</title>
		<link>http://therealadam.com/2013/04/03/the-gift-and-the-curse-of-green-field-projects/</link>
		<comments>http://therealadam.com/2013/04/03/the-gift-and-the-curse-of-green-field-projects/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 14:40:31 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2895</guid>
		<description><![CDATA[The &#8220;green field&#8221; in software is a gift and a curse. On the bright side, you have an opportunity to use the new-shiny. Past wrongs can be righted. You can move quickly, without worry about why some code exists, how it works, or whether you should care about it. Life is good. The peril I&#8217;ve [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2895&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The &#8220;green field&#8221; in software is a gift and a curse. </p>
<p>On the bright side, you have an opportunity to use the new-shiny. Past wrongs can be righted. You can move quickly, without worry about why some code exists, how it works, or whether you should care about it. Life is good.</p>
<div id="attachment_2894" class="wp-caption alignright" style="width: 310px"><img src="http://therealadam.files.wordpress.com/2013/04/grass.jpg?w=300&#038;h=225" alt="Fresh-cut grass" width="300" height="225" class="size-medium wp-image-2894" /><p class="wp-caption-text">Does anything smell better than grass you didn&#8217;t have to cut yourself? Courtesy <a href="http://www.flickr.com/photos/28264224@N06/6917955679/">KENSR199</a></p></div>
<p>The peril I&#8217;ve found is that green field projects are by their nature isolated. They don&#8217;t have a deployment or monitoring story. They don&#8217;t spring forth fully integrated with other critical systems. The project probably hasn&#8217;t proven itself as useful yet.</p>
<p>Letting a green-field live in isolation too long is the root of lots of problems. I&#8217;ve experienced scope creep, confused expectations, and declining morale that all could have been avoided had I brought a green-field project &#8220;into the fold&#8221; sooner. But the whole point of a green field is that you don&#8217;t integrate too soon, lest you spin your wheels on legacy things.</p>
<p>Green field projects are fun and an often welcome change of pace from working within an existing system. However, succeeding on a green field project is just as hard, or harder, than succeeding with a legacy system. It&#8217;s a different set of trade-offs that each developer has to get good at.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2895&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/03/the-gift-and-the-curse-of-green-field-projects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>32.745713 -96.845820</georss:point>
		<geo:lat>32.745713</geo:lat>
		<geo:long>-96.845820</geo:long>
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/grass.jpg?w=300" medium="image">
			<media:title type="html">Fresh-cut grass</media:title>
		</media:content>
	</item>
		<item>
		<title>Hypermedia chicken, web browser egg</title>
		<link>http://therealadam.com/2013/04/02/hypermedia-chicken-web-browser-egg/</link>
		<comments>http://therealadam.com/2013/04/02/hypermedia-chicken-web-browser-egg/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 14:31:01 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[hypermedia]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2883</guid>
		<description><![CDATA[A lot of the hypermedia philosophy is centered around the idea that API clients should work a lot like web browsers and plain-old Hypertext Markup Language. They should follow hyperlinks, leverage media types, cache data when they can, and intelligently take advantage of the meaning of hyperlinks whenever possible. The problem with that is, web [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2883&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A lot of the hypermedia philosophy is centered around the idea that API clients should work a lot like web browsers and plain-old Hypertext Markup Language. They should follow hyperlinks, leverage media types, cache data when they can, and intelligently take advantage of the meaning of hyperlinks whenever possible.</p>
<p><img src="http://therealadam.files.wordpress.com/2013/04/hypermediachickenegg.jpg?w=525&#038;h=173" alt="Good APIs require good services *and* good clients" width="525" height="173" class="aligncenter size-large wp-image-2891" /></p>
<p>The problem with that is, <strong>web browsers are way more capable than HTTP clients</strong> developers are using to build API clients with.</p>
<p>Here are some things web browsers have become pretty good at:</p>
<ul>
<li>GET and POST requests
</li>
<li>Following links and redirects
</li>
<li>Discovering data structures via HTML forms and submitting data using that schema
</li>
<li>Using headers to negotiate content types
</li>
<li>Caching data when possible and expiring those caches
</li>
<li>Handling streaming data and chunked responses
</li>
<li>A bunch of stuff I&#8217;m probably forgetting
</li>
</ul>
<p>Here are some things the HTTP client in your typical standard library are good at:</p>
<ul>
<li>GET, POST, PUT, and DELETE requests
</li>
<li>Following redirects (if you manage to set the right options)
</li>
</ul>
<p>What&#8217;s at play here is a chicken and egg problem. Client developers can&#8217;t build on hypermedia principles until they are working at the level of hypermedia abstractions. Arming them only with HTTP requests and the ability to choose their encoding and schema poison is too low level.</p>
<p>Protocols like <a href="http://stateless.co/hal_specification.html">HAL</a> or <a href="http://amundsen.com/media-types/collection/">Collection+JSON</a> <em>could</em> light a path to solving this problem. Rather than dealing in pure data, services and consumers work with data annotated with hypermedia-like semantics for traversing data structures and creating new data. If these protocols can gain traction, it&#8217;s &#8220;simply&#8221; a matter of getting HTTP clients into widespread use (read: standard libraries in stable releases of your-favorite-programming-language) that are as good at HTTP as web browsers are. At that point, API providers and API consumers could start using hypermedia principles to build APIs for those who aren&#8217;t interested in the mechanics of hypermedia.</p>
<p>Until then, it seems to me that putting hypermedia principles front-and-center is suboptimal. It&#8217;s akin to telling someone who wants to use your website that they need to understand MVC patterns first. It&#8217;s only going to discourage and confuse them. </p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=therealadam.com&#038;blog=303123&#038;post=2883&#038;subd=therealadam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://therealadam.com/2013/04/02/hypermedia-chicken-web-browser-egg/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>32.745713 -96.845820</georss:point>
		<geo:lat>32.745713</geo:lat>
		<geo:long>-96.845820</geo:long>
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2013/04/hypermediachickenegg.jpg?w=525" medium="image">
			<media:title type="html">Good APIs require good services *and* good clients</media:title>
		</media:content>
	</item>
	</channel>
</rss>
