<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.therealadam.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Real Adam</title>
	
	<link>http://weblog.therealadam.com</link>
	<description>Developer at large, expert typist</description>
	<lastBuildDate>Thu, 02 Feb 2012 13:21:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="weblog.therealadam.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://1.gravatar.com/blavatar/999116b97a3284a6b130eda28e875f47?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>The Real Adam</title>
		<link>http://weblog.therealadam.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://weblog.therealadam.com/osd.xml" title="The Real Adam" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.therealadam.com/TheRealAdam" /><feedburner:info uri="therealadam" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://weblog.therealadam.com/?pushpress=hub" /><item>
		<title>The cost of jerks in social apps</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/mOzBA-dY_80/</link>
		<comments>http://weblog.therealadam.com/2012/01/31/the-cost-of-jerks-in-social-apps/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 04:31:09 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Curated]]></category>
		<category><![CDATA[Expanded ideas]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2089</guid>
		<description><![CDATA[Trolls, spammers, and people gaming social software are a giant pain in the ass. At best, they are an everyday reminder that people are sometimes jerks. At worst, they can warp the direction of your product and soak up valuable time. Kellan Elliot-McCrea, formerly of Flickr and currently of Etsy, has written a great piece [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2089&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Trolls, spammers, and people gaming social software are a giant pain in the ass. At best, they are an everyday reminder that people are sometimes jerks. At worst, they can warp the direction of your product and soak up valuable time. Kellan Elliot-McCrea, formerly of Flickr and currently of Etsy, has written <a href="http://laughingmeme.org/2011/07/23/cost-of-false-positives/">a great piece on the arithmetic of trying to deal with jerks</a>, specifically Twitter spam:</p>
<blockquote><p>
They’re really expensive. They burn your most precious resources when running a startup: good will, and time. Your support staff has to address the issues (while people are yelling at them), your engineers are in the database mucking about with columns, until they finally break down about build an unbanning tool which inevitably doesn’t scale to really massive attacks, or new interesting attack vectors, which means you’re either back monkeying with the live databases or you’ve now got a team of engineers dedicated just to building tools to remediate false positives. And now you’re burning engineer cycles, engineering motivation (cleaning up mistakes sucks), staff satisfaction AND community good will. That’s the definition of expensive.
</p></blockquote>
<p>Unfortunately, there&#8217;s just no good answer. You can&#8217;t ignore jerks forever and you can&#8217;t try to outmaneuver them too early. The answer isn&#8217;t purely product design, community management, or tools. It&#8217;s not all about the monetary cost to your business, but it&#8217;s not all about the intangible cost.</p>
<p>Basically, it takes a really, really sharp product person to figure this out. I highly recommend them, if you have the means.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2089/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2089/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2089/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2089&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/mOzBA-dY_80" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2012/01/31/the-cost-of-jerks-in-social-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2012/01/31/the-cost-of-jerks-in-social-apps/</feedburner:origLink></item>
		<item>
		<title>Hip-hop for nerds: “Otis”</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/HCl-y2HRdhA/</link>
		<comments>http://weblog.therealadam.com/2012/01/29/hip-hop-for-nerds-otis/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 23:50:43 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2085</guid>
		<description><![CDATA[(Ed. Herein, I attempt to break down a current favorite of mine, &#8220;Otis&#8221; by Jay-Z and Kanye West, in terms familiar and interesting to nerds, specifically of the nerd and/or comedy persuasion.) &#8220;Otis&#8221; is a song arranged and performed by two best pals, Jay-Z and Kanye West. It opens with a sample of Otis Redding [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2085&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>(Ed. Herein, I attempt to break down a current favorite of mine, &#8220;Otis&#8221; by Jay-Z and Kanye West, in terms familiar and interesting to nerds, specifically of the nerd and/or comedy persuasion.)</em></p>
<p><a href="http://www.youtube.com/watch?v=BoEKWtgJQAU&amp;ob=av3e">&#8220;Otis&#8221;</a> is a song arranged and performed by two best pals, Jay-Z and Kanye West. It opens with a sample of Otis Redding (hence the title) singing &#8220;Try a little tenderness&#8221;. Opening with a sample like this tells us two things:</p>
<ul>
<li>Misters Z and West enjoy the music of Mr. Redding enough that they were compelled to include it in their own music.</li>
<li>The gentlemen are also well connected and affluent, as not just everyone can afford to sample a legend like Redding in their music</li>
</ul>
<p>A digression: sampling in hip-hop is one of its key characteristics and is of particular interest to nerds. It is a way that we can connect, through &#8220;nerding out&#8221; with the artist and find what it is that they respect and listen to. It is also a bit of a recursive structure; &#8220;Otis&#8221; samples Otis, Otis borrowed from gospel and blues, blues and gospel borrowed from traditional songs, etc. Finally, sampling is a recombinant form; in &#8220;Otis&#8221;, there is a verbatim sample in the opening bars, but the sample devolves to a looped-beat in the middle of the song and a mere sound-effect at the end of the song.</p>
<p>As Misters Z and West enter the song proper, the rappers trade verses about their affluence (&#8220;New watch alert, Hublot&#8217;s / Or the big face Rollie I got two of those&#8221;), the recursive (again, nerdy) deception they use to evade the papperazzi (&#8220;They ain&#8217;t see me &#8216;cuz I pulled up in my other Benz / Last week I was in my other other Benz&#8221;), a conflicting verse about how they would seek the paparazzi out (&#8220;Photo shoot fresh, looking like wealth / I&#8217;m &#8216;bout to call the paparazzi on myself&#8221;), more boasting of their affluence and skill (&#8220;Couture level flow, it&#8217;s never going on sale / Luxury rap, the Hermes of verses&#8221;), and such.</p>
<p>This song features a video, so we wouldn&#8217;t be properly doing a nerd dissection of it if we were to neglect that. It opens with our heroes approaching a Maybach sedan with a saw and a blow torch. Following a &#8220;car modification montage&#8221;, it appears the doors have been removed from the car and the front end of the car has been placed on the back, and vice versa. Another display of affluence, with perhaps a touch of hipster irony thrown in.</p>
<p>The video follows with various shots of our heroes rapping and driving the Maybach through an abandoned dock or airfield. Our heroes are in the front seat of the car and there are four models in the back seat, one seated precariously atop the one in the middle as our heroes make dangerous-looking manuvers in the car. At one point it appears they will lose a model through the door-less side of the car. At multiple points, it appears the boobs of the models might fight free of their loose fitting shirt. It should be noted that the <em>appearance</em> of a possible free boob could be considered quite progressive for a hip-hop music video.</p>
<p>The Maybach is, in my opinion, the most difficult to interpret signal the song and video send. Are we to understand that Misters Z and West are so affluent they can afford to put down six figures on the purchase and massively impractical modification of a high-end luxury car? Perhaps they had a spare one laying around and felt it would be a better use to destroy it than to leave it around. Or, perhaps this was a vehicle for a clever tax deduction?</p>
<blockquote>
<p>Mr. West&#8217;s CPA: You&#8217;re going to owe a lot of tax on this purchase of your other-other Benz, &#8216;Ye.</p>
<p>Mr. West: What if I were to use it in a music video for the purposes of promoting my upcoming album?</p>
<p>Mr. West&#8217;s CPA: Well then you could depreciate it at 50% this year and 25% for the next two years, but you&#8217;re still going to owe a lot.</p>
<p>Mr. West: If I were to take it to a chop shop and have them put the ass-end of the car on the front and turn the doors into wings, could I depreciate it faster?</p>
<p>Mr. West&#8217;s CPA: throw some models in the back seat, and it *just might work*!</p>
</blockquote>
<p><em>(Ed. as it turns out, the vehicle was to be auctioned and the proceeds donated to charity)</em></p>
<p>The other enigma of the video is the presence of comedian Aziz Ansari. Mr. Ansari has documented <em>(Ed. hilariously)</em> his friendship with Mr. West. Thus it is not shocking to see him appear in the video. He appears for only an instant, and his appearance marks the absence of the models in the rest of the video. Perhaps, we are to believe, Mr. Ansari is the pumpkin that the models turn into after some deadline has passed for Misters Z and West.</p>
<p>Despite, or perhaps because, of its mysteries, I find &#8220;Otis&#8221; is a fantastic piece of hip-hop production. The samples is well chosen and deconstructed, the verses are interesting (if mentally unchallenging), and the video is engaging to watch. I would easily rank it amongst the top songs of recent memory, were I one to make lists of top songs.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2085/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2085/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2085/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2085&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/HCl-y2HRdhA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2012/01/29/hip-hop-for-nerds-otis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2012/01/29/hip-hop-for-nerds-otis/</feedburner:origLink></item>
		<item>
		<title>Make time for your projects</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/ZPnucVgE0lo/</link>
		<comments>http://weblog.therealadam.com/2012/01/26/make-time-for-your-projects/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 05:08:41 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Curated]]></category>
		<category><![CDATA[Expanded ideas]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2080</guid>
		<description><![CDATA[Stick it to the man. Wake up early and do your best work, for yourself. Waking Up at 5am to Code: At 5am I jump out of bed and code for two hours, then get ready for work. I do this every day, including weekends. I&#8217;ve done this at various times. It&#8217;s a fantastic hack, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2080&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Stick it to the man. Wake up early and do your best work, for yourself. <a href="http://www.mattgreer.org/post/2fiveam">Waking Up at 5am to Code</a>:</p>
<blockquote><p>
At 5am I jump out of bed and code for two hours, then get ready for work. I do this every day, including weekends.
</p></blockquote>
<p>I&#8217;ve done this at various times. It&#8217;s a fantastic hack, especially if you&#8217;re a morning person. No one&#8217;s around to bug you, nothing else is in your head. It&#8217;s just you, your project, and the earlybirds.</p>
<p>I highly recommend it if you have the means.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2080/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2080/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2080/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2080&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/ZPnucVgE0lo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2012/01/26/make-time-for-your-projects/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&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2012/01/26/make-time-for-your-projects/</feedburner:origLink></item>
		<item>
		<title>Stand on the shoulders of others’ REST mistakes</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/vXqQcuThBY0/</link>
		<comments>http://weblog.therealadam.com/2012/01/24/stand-on-the-shoulders-of-others-rest-mistakes/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 03:39:35 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Curated]]></category>

		<guid isPermaLink="false">http://weblog.therealadam.com/?p=2072</guid>
		<description><![CDATA[Like all API design, putting a REST API on your app is tricky business that most people learn through lots of mistakes. So stand on the shoulders of other peoples mistakes! Thus, REST worst practices: In the REST world, the resource is key, and it’s really tempting to simply look at a Django model and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2072&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Like all API design, putting a REST API on your app is tricky business that most people learn through lots of mistakes. So stand on the shoulders of other peoples mistakes! Thus, <a href='http://jacobian.org/writing/rest-worst-practices/'>REST worst practices</a>:</p>
<blockquote><p>In the REST world, the resource is key, and it’s really tempting to simply look at a Django model and make a direct link between resources and models — one model, one resource. This fails, though, as soon as you need to provide any sort of aggregated resource, and it really fails with highly denormalized models. Think about a Superhero model: a single GET /heros/superman/ ought to return all his vital stats along with a list of related Power objects, a list of his related Friend objects, etc. So the data associated with a resource might actually come out of a bunch of models. Think select_related(), except&nbsp;arbitrary.</p>
</blockquote>
<p>Mistaking the app&#8217;s internal model with what API users want to work with was the mistake I made on the first API I wrote.</p>
<blockquote><p>Any big API is going to need to have dedicated servers that just serve API applications: the performance characteristics of large-scale APIs are so different from web apps in general that they almost always require separately-tuned servers.</p></blockquote>
<p>This is how I prefer to roll my APIs lately. At the least, they should be a separate set of controllers. If you can extract a <a href="https://github.com/postrank-labs/goliath">completely</a> <a href="https://github.com/intridea/grape">different</a> application even better.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2072/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2072/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2072/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2072&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/vXqQcuThBY0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2012/01/24/stand-on-the-shoulders-of-others-rest-mistakes/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&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2012/01/24/stand-on-the-shoulders-of-others-rest-mistakes/</feedburner:origLink></item>
		<item>
		<title>Represent dat API</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/lvisN3lh_WY/</link>
		<comments>http://weblog.therealadam.com/2012/01/19/represent-dat-api/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 05:37:22 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2066</guid>
		<description><![CDATA[Rails is missing an abstraction when it comes to building REST APIs, in my opinion. Requests route through controllers, controllers call models or services to obtain the right objects. And then…you awkwardly try to bang a JSON object together with an ERB template? It gets awkward quickly. There&#8217;s a lot of experimentation in the wild [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2066&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Rails is missing an abstraction when it comes to building REST APIs, in my opinion. Requests route through controllers, controllers call models or services to obtain the right objects. And then…you awkwardly try to bang a JSON object together with an ERB template? It gets awkward quickly.</p>
<p>There&#8217;s a lot of experimentation in the wild attempting to figure out what works well here. You can <a href="http://railstips.org/blog/archives/2011/12/01/creating-an-api/">bang out a bunch of presenter classes</a>. You can <a href="http://engineering.gowalla.com/2011/10/24/boxer/">describe and compose representations</a>. You can go <a href="https://github.com/apotonick/roar">resource oriented</a>.</p>
<p>I came across one yesterday that immediately caught my eye. You could <a href="http://gmarik.info/blog/2012/01/16/map-as-presenter-and-more">just use `lambda`</a> to implement a bunch of functions that present, decorate, or map objects from one representation to another. To borrow an example:</p>
<pre><code>
# Define a base representation
UrlsPresenter = lambda do
  {
    'self'    =&gt; "#{Gauges.api_url}/me",
    'gauges'  =&gt; "#{Gauges.api_url}/gauges",
    'clients' =&gt; "#{Gauges.api_url}/clients",
  }
end

# Compose the base representation with more data
UserPresenter = lambda do |user|
  {
    'id'          =&gt; user.id,
    'email'       =&gt; user.email,
    'name'        =&gt; user.name,
    'urls'        =&gt; UrlsPresenter.call
  }
end

# Pass an object to the presenter and convert it to JSON
UserPresenter[user].to_json
</pre>
<p></code></p>
<p>I love that this one adds no machinery and no state. Input, function, output. With just `lambda`, you can describe a bunch of transformations and string them together into meaningful and interesting pipelines. I'm experimenting with this now, hoping to find an interesting way that functional programming approaches can make it simpler to build APIs with Rails.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2066/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2066&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/lvisN3lh_WY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2012/01/19/represent-dat-api/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&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2012/01/19/represent-dat-api/</feedburner:origLink></item>
		<item>
		<title>When to Class.new</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/ZgtQT9RUz5E/</link>
		<comments>http://weblog.therealadam.com/2011/12/30/when-to-class-new/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 21:25:10 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2061</guid>
		<description><![CDATA[In response to Why metaprogram when you can program?, an astute reader asked for an example of when you would want to use Class.new in Ruby. It&#8217;s a rarely needed method, but really fun when faced with a tasteful application. Herein, a couple ways I&#8217;ve used it and an example from the wild. Dead-simple doubles [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2061&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In response to <a href="http://weblog.therealadam.com/2011/12/09/why-metaprogram-when-you-can-program/">Why metaprogram when you can program?</a>, an astute reader asked for an example of when you would want to use <code>Class.new</code> in Ruby. It&#8217;s a rarely needed method, but really fun when faced with a tasteful application. Herein, a couple ways I&#8217;ve used it and an example from the wild.</p>
<h2 id="dead-simpledoubles">Dead-simple doubles</h2>
<p>In my opinion, the most &#8220;wholly legitimate&#8221; frequent application of <code>Class.new</code> is in test code. It&#8217;s a great tool for creating test doubles, fakes, stubs, and mocks without the weight of pulling in a framework. To wit:</p>
<pre><code>TinyFake = Class.new do

  def slow_operation
    "SO FAST"
  end

  def critical_operation
    @critical = true
  end

  def critical_called?
    @critical
  end

end

tiny_fake = TinyFake.new
tiny_fake.slow_operation
tiny_fake.critical_operation
tiny_fake.critical_called? == true</code></pre>
<p><code>TinyFake</code> functions as a fake and as a mock. We can call a dummy implementation of <code>slow_operation</code> without worrying about the snappiness of our suite. We can verify that a method was called in the verification section of our test method. Normally you would only do one of these things at a time, but this shows how easy it is to roll your own doubles, fakes, stubs, or mocks.</p>
<p>The thing I like about this approach over defining classes inside a test file or class is that it&#8217;s all scoped inside the method. We can assign the class to a local and keep the context for each test method small. This approach is also really great for testing mixins and parent classes; define a new class, add the desired functionality, and test to suit.</p>
<h2 id="dslinternals">DSL internals</h2>
<p>Rack and Resque are two examples of libraries that expose an API based largely on writing a class with a specific entry point. Rack middlewares are objects with a <code>call</code> method that generates a response based on an environment hash and any other middlewares that are contained within the middleware. Resque expects the classes that work through enqueued jobs define a <code>perform</code> method.</p>
<p>In practice, putting these methods in a class is the way to go. But, hypothetically, we are way too lazy to type <code>class</code>/<code>end</code>, or perhaps we want to wrap a bunch of standard instrumentation and logging around a simple chunk of code. In that case, we can write ourself a little shortcut:</p>
<pre><code>module TinyDSL

  def self.performer(&amp;block)
    c = Class.new
    c.class_eval { define_method(:perform, block) }
    c
  end

end

Thingy = TinyDSL.performer { |*args| p args }
Thingy.new.perform("one", 2, :three)</code></pre>
<p>This little DSL gives us a shortcut for defining classes that implement whatever contract is expected of <code>performer</code> objects. From this humble beginning, we could mix in modules to add functionality around the <code>performer</code>, or we could pass a parent class to <code>Class.new</code> to make the generated class inherit from another class.</p>
<p>That leads us to the sort-of shortcoming of this particular application of <code>Class.new</code>: if the unique function of <code>performer</code> is to wrap a class around a method (for instance, as part of an API exported by another library), why not just subclass or mixin that functionality in the client application? This is the question you have to ask yourself when using <code>Class.new</code> in this way and decide if the metaprogramming is pulling its weight.</p>
<h2 id="howclass.newisusedinsinatra">How Class.new is used in Sinatra</h2>
<p>Sinatra is a little language for writing web applications. The language specifies how HTTP requests are mapped to blocks of Ruby. Originally, you wrote your Sinatra applications like so:</p>
<pre><code>get '/'  { [200, {"Content-Type" =&gt; "text/plain"}, "Hello, world!"] }</code></pre>
<p>Right before Sinatra 1.0, the team added a cleaner way to to build and compose applications as Ruby classes. It looks the same, except it happens inside the scope of a class instead of the global scope:</p>
<pre><code>class SomeApp &lt; Sinatra::Base

    get '/'  { [200, {"Content-Type" =&gt; "text/plain"}, "Hello, world!"] }

end</code></pre>
<p>It turns out that the former is implemented in terms of the latter. When you use the old, global-level DSL, it creates a new class via <code>Class.new(Sinatra::Base)</code> and then <code>class_eval</code>s a block into it to define the routes. Short, clever, effective: the best sort of <code>Class.new</code>.</p>
<hr />
<p>So that&#8217;s how you might see <code>Class.new</code> used in the wild. As with any metaprogramming or construct labeled &#8220;Advanced (!)&#8221;, the main thing to keep in mind, when you use it or when you set upon refactoring an existing usage, is whether it is pulling its conceptual weight. If there&#8217;s a simpler way to use it, do that instead.</p>
<p>But sometimes a nail is, in fact, a nail.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2061/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2061/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2061/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2061&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/ZgtQT9RUz5E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2011/12/30/when-to-class-new/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2011/12/30/when-to-class-new/</feedburner:origLink></item>
		<item>
		<title>The year of change that was 2011</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/y8XGYYi8BNk/</link>
		<comments>http://weblog.therealadam.com/2011/12/29/the-year-of-change-that-was-2011/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 19:46:04 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Expanded ideas]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2057</guid>
		<description><![CDATA[The year is winding down, and its time to reflect on the 2011 that was. The year took me into the dark abyss of the American housing market and back out the other end. Somehow I ended up in Austin, a little lighter in the pocket-book to show for it. It saw the most exciting, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2057&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The year is winding down, and its time to reflect on the 2011 that was. The year took me into the dark abyss of the American housing market and back out the other end. Somehow I ended up in Austin, a little lighter in the pocket-book to show for it. It saw the most exciting, and ultimate, year of that which was Gowalla. I got in pretty good shape, and then got into pretty mediocre shape. I read a lot, coded a lot, wrote a bit, and learned a lot about everything. &#8216;Twas a tough year, but all&#8217;s well that ends well, or so they say.</p>
<h2 id="thingsiread">Things I read</h2>
<p>The most interesting fiction I read this year was <em>Neuromancer</em>. This one was probably more jaw dropping before <em>The Matrix</em> came out, but it was still interesting. That said, it reads like the Cliffs Notes version of Neal Stephenson.</p>
<p>The best non-fiction I read was <em>Godël&#8217;s Proof</em>. It&#8217;s a short, clear explanation of his approach to computability. Even if you&#8217;re medicore at math and proofs, like myself, this one will stick.</p>
<p>The best technical book I consumed this year was <em>Smalltalk Best Practice Patterns</em>. First off, I love Kent Beck&#8217;s concise but powerful writing style. Second off, this book is like discovering that someone wrote down a really good theory of the elements of software decades ago and no one told you about them. Third, you should get a copy of this book, look for the used ones.</p>
<h2 id="thingsimadethisyear">Things I made this year</h2>
<p>I piled a lot of the things I learned about infrastructure and shipping software at Gowalla into <a href="http://speakerdeck.com/u/therealadam/p/mixing-a-persistence-cocktail-1">Mixing a Persistence Cocktail</a>. How to think about scaling, how to ship incrementally, overcoming <strong>THE FEAR</strong>. It&#8217;s all there.</p>
<p>I large chunk of my time at work on <a href="http://github.com/gowalla/chronologic">Chronologic</a>. I <a href="http://speakerdeck.com/u/therealadam/p/chronologic-you-put-your-feeds-in-it">presented on it</a> too. Then I open sourced it. We deployed it at Gowalla and it held up, but not without some rough spots. I <a href="http://speakerdeck.com/u/therealadam/p/cassandra-at-gowalla">presented on those too</a>.</p>
<p>I did a lot of open source tinkering this year. A lot of it is half-baked, but at least it&#8217;s out there. That was a major personal goal for the year, so I&#8217;m glad I at least stuck my neck out there, even if I&#8217;m not rolling in kudos. Yet!</p>
<h2 id="thingsiwrotethisyear:">Things I wrote this year</h2>
<p>Modulo a summer lull, I ended up doing a good bit of writing this year. The crowd favorites were <a href="http://weblog.therealadam.com/2011/12/09/why-metaprogram-when-you-can-program/">Why metaprogram when you can program?</a>, <a href="http://weblog.therealadam.com/2011/11/06/the-current-and-future-ruby-platform/">The Current and Future Ruby Platform</a><br />
<a href="http://weblog.therealadam.com/2011/12/01/cassandra-at-gowalla/">Cassandra at Gowalla</a>, and <a href="http://weblog.therealadam.com/2011/10/09/your-frienemy-the-orm/">Your Frienemy, the ORM</a>. My personal favorites were <a href="http://weblog.therealadam.com/2011/01/06/the-ear-is-connected-to-the-brain/">The ear is connected to the brain</a>, <a href="http://weblog.therealadam.com/2011/05/04/post-hoc-career-advice-for-twenty-year-old-adam/">Post-hoc career advice for twenty-something Adam</a>, and <a href="http://weblog.therealadam.com/2011/07/09/how-to-listen-to-stravinskys-rite-of-spring/">How to listen to Stravinsky&#8217;s Rite of Spring</a>.</p>
<p>Of course, working at Gowalla this year was quite the ride. I wrote about that too, sometimes rather obliquely. <a href="http://weblog.therealadam.com/2011/08/31/relentless-shipping/">Relentless shipping</a>,<br />
<a href="http://weblog.therealadam.com/2011/11/26/the-pitfalls-of-growing-a-team/">The pitfalls of growing a team</a>, <a href="http://weblog.therealadam.com/2011/07/16/the-guy-doing-the-typing-makes-the-call/">The guy doing the typing makes the call</a>, <a href="http://weblog.therealadam.com/2011/07/02/skip-the-hyperbole/">Skip the hyperbole</a>, <a href="http://weblog.therealadam.com/2011/11/29/sleep-is-the-best/">Sleep is the best</a>, and <a href="http://weblog.therealadam.com/2011/04/13/dont-complain-make-things-better/">Don&#8217;t complain, make things better</a> were all borne of things I learned over the course of the year.</p>
<hr />
<p>If I had to pithily summarize the year, I&#8217;d tie it together under change. Change is good, challenging, frustrating, and inevitable. Better to change than not, though!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2057/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2057&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/y8XGYYi8BNk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2011/12/29/the-year-of-change-that-was-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2011/12/29/the-year-of-change-that-was-2011/</feedburner:origLink></item>
		<item>
		<title>Four essential topics of 2011, in charts</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/llaiFmyPaUc/</link>
		<comments>http://weblog.therealadam.com/2011/12/22/four-essential-topics-of-2011-in-charts/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 04:43:50 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[The System]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2052</guid>
		<description><![CDATA[The Year In 4 Charts: Planet Money does an excellent job collecting four economic charts (themselves chosen from three collections of best-of charts). I&#8217;m a dilettante as far as economics and economics go, but these charts do a great job of rolling up what seemed to have been the essential stories of the year. A [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2052&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.npr.org/blogs/money/2011/12/22/144139101/the-year-in-4-charts?sc=tw&amp;cc=share">The Year In 4 Charts</a>: Planet Money does an excellent job collecting four economic charts (themselves chosen from three collections of best-of charts). I&#8217;m a dilettante as far as economics and economics go, but these charts do a great job of rolling up what seemed to have been the essential stories of the year.</p>
<div class="center"><img src="http://therealadam.files.wordpress.com/2011/12/spendingandrevenues_custom.jpg?w=462&#038;h=347" alt="Spendingandrevenues custom" border="0" width="462" height="347" /></div>
<p>A picture can nullify a thousand talking points, no?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2052/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2052/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2052/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2052&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/llaiFmyPaUc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2011/12/22/four-essential-topics-of-2011-in-charts/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&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>

		<media:content url="http://therealadam.files.wordpress.com/2011/12/spendingandrevenues_custom.jpg" medium="image">
			<media:title type="html">Spendingandrevenues custom</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2011/12/22/four-essential-topics-of-2011-in-charts/</feedburner:origLink></item>
		<item>
		<title>Making a little musical thing</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/vP4fWKu8d00/</link>
		<comments>http://weblog.therealadam.com/2011/12/18/making-a-little-musical-thing/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 01:07:18 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2046</guid>
		<description><![CDATA[After software development, music is probably the thing I know the most about. My brain is full of history, trivia, and a modest bit of practical knowledge on how to read notation and make music come out. That said, I haven&#8217;t really practiced music in several years. I&#8217;ve been busy nerding out on other things, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2046&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After software development, music is probably the thing I know the most about. My brain is full of history, trivia, and a modest bit of practical knowledge on how to read notation and make music come out. That said, I haven&#8217;t really <em>practiced</em> music in several years. I&#8217;ve been busy nerding out on other things, and I&#8217;ve grown a bit lazy. Too lazy to find people to play with, too lazy for scales, too lazy to even tune a stringed instrument. Very, very lazy.</p>
<p>Long story short, I&#8217;ve been wanting to get back into music lately, but I want to learn something new. Something entirely mysterious to me. Given my recent fascination with hip-hop, I&#8217;m eager to try my hand at making the beats that form the musical basis of the form.</p>
<p>There are a lot of priors to cover (tinkering with various sequencers, drum machines, and synthesizers; steeping myself in sample culture; listening to the actual music and understanding its history), but I just made a short, mediocre little beat and put it on the internet. Herein, I reflect on making that little musical thing:</p>
<ul>
<li>I&#8217;m sure that, if I get serious about this, I&#8217;ll need real software like Ableton or Logic. But for my tinkering, it turns out GarageBand is sufficient. The included software instruments aren&#8217;t amazing or even idiomatic samples (no TR808, no &#8220;Apache&#8221; break included), but with a little bit of tinkering, they produce results.</li>
<li>Laying a drum track down that is little more than a fancy click track helps to get started. GarageBand has a handy feature where you can define the a number of bars as a loop and then record multiple takes, review them, and discard the takes you don&#8217;t want.</li>
<li>What an app lacks in samples you can make up in effects. Throwing a heavy dose of echo and a ridiculous helping of reverb made an otherwise pedestrian drum track way more interesting.</li>
<li>I didn&#8217;t go into this with anything in my head that I wanted to make real. For the drum track, I ended up with a pretty typical beat. A little quantization made it end up sound better and more interesting than it really is. This process, manual input with some computer-assisted tweaking, produced way better results than the iOS drum machines I&#8217;ve used in the past.</li>
<li>Tapping out the bass-line took a little more time than the drums. I didn&#8217;t have anything &#8220;standard&#8221; in my head, so I doodled a bit. This is where the &#8220;takes&#8221; gizmo in GarageBand came in really handy. Record a bunch of things, decide which one is most interesting, clean it up a little, throw an effect or two on it to make it more interesting, on to the next track.</li>
<li>In retrospect, lots of effects is maybe a crutch. I don&#8217;t have enough taste yet to tell.</li>
<li>With the drums and bass down, it&#8217;s time to adorn the track with a melody or interesting hit for effect. I added one subtle thing, but couldn&#8217;t think of anything I liked that was worth making prominent. If I were actually trying to use this beat for something, I&#8217;d keep digging. But for my first or second beat, it&#8217;s not a big deal.</li>
</ul>
<p>I wanted to jot down my thoughts because I&#8217;d like to write more about making and understanding music, but also because I keep meaning to write down what I find challenging and interesting as I start from a &#8220;beginner&#8217;s mind&#8221; in some craft or skill. And so I did.</p>
<p>You&#8217;re six hundred words into this thing now, so I&#8217;ll reward you, if we could call it a reward, with <a href="http://soundcloud.com/therealadam/an-beat">&#8220;An Beat&#8221;</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2046/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2046/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2046/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2046&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/vP4fWKu8d00" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2011/12/18/making-a-little-musical-thing/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&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2011/12/18/making-a-little-musical-thing/</feedburner:origLink></item>
		<item>
		<title>Crafting lightsabers, uptime the systems, a little Clojure</title>
		<link>http://feeds.therealadam.com/~r/TheRealAdam/~3/IxlB-AxvBJw/</link>
		<comments>http://weblog.therealadam.com/2011/12/16/crafting-lightsabers-uptime-the-systems-a-little-clojure/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 14:51:10 +0000</pubDate>
		<dc:creator>Adam Keys</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Curated]]></category>

		<guid isPermaLink="false">https://therealadam.wordpress.com/?p=2041</guid>
		<description><![CDATA[Herein, some great technical writings from the past week or two. Crafting your editor lightsaber Vim: revisited, on how to approach Vim and build your very own config from first principles. My personal take on editor/shell configurations is that its way better to have someone else maintain them. Find something like Janus or oh-my-zsh, tweak [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2041&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Herein, some great technical writings from the past week or two.</p>
<h2>Crafting your editor lightsaber</h2>
<p><a href="http://mislav.uniqpath.com/2011/12/vim-revisited/">Vim: revisited</a>, on how to approach Vim and build your very own config from first principles. My personal take on editor/shell configurations is that its way better to have <em>someone else</em> maintain them. Find something like <a href="https://github.com/carlhuda/janus">Janus</a> or <a href="https://github.com/robbyrussell/oh-my-zsh">oh-my-zsh</a>, tweak the things it includes to work for you, and get back to doing what you do. That said, I&#8217;m increasingly tempted to craft my own config, if only to promote the fullness and shine of my neck beard.</p>
<h2>Uptime all the systems</h2>
<p><a href="http://techblog.netflix.com/2011/12/making-netflix-api-more-resilient.html?spref=tw&amp;m=1">Making the Netflix API More Resilient</a> lays out the system of circuit breakers, dashboards, and automatons Netflix uses to proactively maintain API reliability in the face of external failures. Great ideas anyone maintaining a service that needs to stay online.</p>
<p><a href="http://www.paperplanes.de/2011/12/13/list-all-of-the-riak-keys.html">List All of the Riak Keys</a>, on the trickiness of <code>SELECT * FROM all_the_things</code>-style queries in Riak, or any distributed database, really. The short story is that these kinds of queries are impractical and not something you can do in production. The longer story is that there are ways to work around it with clever use of indexes and data structures. Make sure you check out the <a href="http://riakhandbook.com/">Riak Handbook</a> from the same author.</p>
<h2>A little bit of Clojure</h2>
<p><a href="http://reiddraper.com/introducing-knockbox/">Introducing Knockbox</a> introduces a Clojure library for dealing with conflict resolution in data stored in distributed databases like Riak. If you&#8217;re working with any database that leaves you wondering what to do when two clients get in a race condition, these are the droids you&#8217;re looking for. I would have paid pretty good money to have known about this a few months ago.</p>
<p><a href="http://blog.fogus.me/2010/03/23/clojures-mini-languages/">Clojure&#8217;s Mini-languages</a> is a great teaser on Clojure if, like me, you&#8217;ve tinkered with it before but are coming back to it. This is particularly useful if you&#8217;ve seen some Lisp or Scheme before, but are slightly confused by what&#8217;s going on with all the non-paren characters that appear in your typical Clojure program. Having taken a recent dive into the JVM ecosystem, I have to say there&#8217;s a lot to like in Clojure. If your brain understands static types but thinks better in dynamic types (mine does), give this a look.</p>
<p>&#8212;</p>
<p>I occasionally post <a href="http://tumble.therealadam.com/">links with shorter comments</a>, if you&#8217;d like a slightly more-frequent dose of what you just read.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/therealadam.wordpress.com/2041/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/therealadam.wordpress.com/2041/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/therealadam.wordpress.com/2041/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=weblog.therealadam.com&amp;blog=303123&amp;post=2041&amp;subd=therealadam&amp;ref=&amp;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/TheRealAdam/~4/IxlB-AxvBJw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://weblog.therealadam.com/2011/12/16/crafting-lightsabers-uptime-the-systems-a-little-clojure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd2382441bbe2ec68e3bf36aea0ca2ea?s=96&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">therealadam</media:title>
		</media:content>
	<feedburner:origLink>http://weblog.therealadam.com/2011/12/16/crafting-lightsabers-uptime-the-systems-a-little-clojure/</feedburner:origLink></item>
	</channel>
</rss>

