<?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>Erik&#039;s blog</title>
	<atom:link href="http://erikeldridge.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://erikeldridge.wordpress.com</link>
	<description>Code, notes, recipes, general musings</description>
	<lastBuildDate>Sat, 25 Jun 2011 19:43:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='erikeldridge.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Erik&#039;s blog</title>
		<link>http://erikeldridge.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://erikeldridge.wordpress.com/osd.xml" title="Erik&#039;s blog" />
	<atom:link rel='hub' href='http://erikeldridge.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Notes from &#8220;Web Application Development with Closure Compiler&#8221; talk by Alan Leung on 6/22/11</title>
		<link>http://erikeldridge.wordpress.com/2011/06/25/notes-from-web-application-development-with-closure-compiler-talk-by-alan-leung-on-62211/</link>
		<comments>http://erikeldridge.wordpress.com/2011/06/25/notes-from-web-application-development-with-closure-compiler-talk-by-alan-leung-on-62211/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 19:43:39 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Alan Leung]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[Closure compiler]]></category>
		<category><![CDATA[compiler]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1234</guid>
		<description><![CDATA[Alan visited Twitter on 6/22 and presented an introductory talk on Google&#8217;s Closure compiler for JavaScript. Alan is tech lead on Closure team. Here are the slides: http://acleung.com/twitter_talk.pdf Notes * JavaScript was originally designed for small DOM operations. Now that we&#8217;re building large-scale apps in JS, we can use some help. * Google uses Closure [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1234&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Alan visited Twitter on 6/22 and presented an introductory talk on <a title="Google Closure compiler documentation" href="http://code.google.com/closure/compiler/">Google&#8217;s Closure compiler</a> for JavaScript. Alan is tech lead on Closure team.</p>
<p>Here are the slides:<br />
<a title="&quot;Web Application Development with Closure Compiler&quot; slide deck" href="http://acleung.com/twitter_talk.pdf"> http://acleung.com/twitter_talk.pdf</a></p>
<p>Notes</p>
<p>* JavaScript was originally designed for small DOM operations. Now that we&#8217;re building large-scale apps in JS, we can use some help.<br />
* Google uses Closure for all but a couple products<br />
* The Closure compiler can perform ~55 optimization passes, including linting code, validating function definitions, performing gzip-optimized compression, trimming dead branches<br />
* Closure can also provide compile-time constants, e.g., &#8220;if(INTERNAL){&#8230;&#8221;, and trim unused branches that result<br />
* Closure uses a graph coloring heuristic for variable renaming</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1234&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/06/25/notes-from-web-application-development-with-closure-compiler-talk-by-alan-leung-on-62211/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>A nice button</title>
		<link>http://erikeldridge.wordpress.com/2011/06/05/a-nice-button/</link>
		<comments>http://erikeldridge.wordpress.com/2011/06/05/a-nice-button/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 09:10:06 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1231</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1231&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre class="brush: css;">
input[type=submit] {

  font-size: inherit;

  padding: 0.5ex 1ex;
  margin: 0;

  border: 1px solid #ccc;

  /* http://border-radius.com/ */
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;

  /* http://www.colorzilla.com/gradient-editor/ */
  background: #ffffff; /* Old browsers */
  background: -moz-linear-gradient(top, #ffffff 0%, #cccccc 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#cccccc)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #ffffff 0%,#cccccc 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #ffffff 0%,#cccccc 100%); /* Opera11.10+ */
  background: -ms-linear-gradient(top, #ffffff 0%,#cccccc 100%); /* IE10+ */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#cccccc',GradientType=0 ); /* IE6-9 */
  background: linear-gradient(top, #ffffff 0%,#cccccc 100%); /* W3C */
}
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1231&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/06/05/a-nice-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes from Kyle Neath&#8217;s presentation at Twitter on 5/31</title>
		<link>http://erikeldridge.wordpress.com/2011/05/31/notes-from-kyle-neaths-presentation-at-twitter-on-531/</link>
		<comments>http://erikeldridge.wordpress.com/2011/05/31/notes-from-kyle-neaths-presentation-at-twitter-on-531/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 04:19:21 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[notes]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[history api]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[kneath]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1213</guid>
		<description><![CDATA[Slides http://warpspire.com/talks/responsive/ hashbang urls are a kludgy workaround for lack of history api. Since history api is coming, they have no future. Since urls are forever, especially w/ tweets being stored in the lib of congress, use of hashbangs results in permanent support for a temporary condition. break pre-existing url fragment behavior result in confusing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1213&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>Slides <a title="presentation slides on Kyle Neath's blog" href="http://warpspire.com/talks/responsive/">http://warpspire.com/talks/responsive/</a></li>
<li>hashbang urls
<ul>
<li>are a kludgy workaround for lack of history api. Since history api is coming, they have no future. Since urls are forever, especially w/ tweets being stored in the lib of congress, use of hashbangs results in permanent support for a temporary condition.</li>
<li>break pre-existing url fragment behavior</li>
<li>result in confusing routing logic</li>
</ul>
</li>
<li>“responsive web design” is adapting to client <em>and </em>seeming responsive to user input
<ul>
<li>page load isn’t just a benchmark; a page is only “loaded” when the user can scroll, read text, and click links</li>
</ul>
</li>
<li>well-designed urls provide a command-line-like interface for web apps</li>
<li>all web assets should have a url, i.e., navigation should not allow access to a resource that cannot then be accessed directly via a url
<ul>
<li>anti-pattern: infinite scroll that forces the user to scroll through pages of content every time the page refreshes</li>
<li>see <a title="Neath's example of infinite scroll with useful url" href="http://warpspire.com/experiments/history-api/">http://warpspire.com/experiments/history-api/</a> for example of infinite scroll w/ useful url</li>
</ul>
</li>
<li>native elements should behave as the user expects
<ul>
<li>do not modify common key combos, e.g., shift + click</li>
<li>take advantage of the back button, tabs, links, etc</li>
</ul>
</li>
<li>responsiveness is as much about performance as perception
<ul>
<li>wait ~500ms before showing loader image; showing loaders immediately can actually make the page seem slower</li>
</ul>
</li>
<li>ssl
<ul>
<li>is required now that there are common, easy ways to sniff credentials</li>
<li>a new ssl handshake is very slow, and required for each domain</li>
<li>use http keep-alive to reuse ssl connections</li>
<li>multiple parallel requests to a new domain will each have to perform a handshake; instead, complete one fast request, and then reuse the connection for subsequent parallel requests</li>
<li>github optimized its backend to 40ms latency before realizing that the ssl handshake takes 500ms
<ul>
<li>a case of perception &gt; performance</li>
<li>favor science over theory, i.e., test time-to-usable in multiple regions instead of just running perf tests on components</li>
</ul>
</li>
<li>templates</li>
<li>use something simple, e.g., mustache</li>
<li>avoid rendering on client <em>and</em> server; pick one</li>
<li>kneath prefers server-side</li>
<li>for server-side rendering, passing html back as one value in a json object allows for passing data back in other keys</li>
</ul>
</li>
<li>html 5 history api
<ul>
<li>allows for partial page updates w/ real urls</li>
<li>history.js provides conditional history api support w/ fallback to hashbang <a title="jQuery history.js plugin" href="http://plugins.jquery.com/project/history-js">http://plugins.jquery.com/project/history-js</a></li>
<li>fall back to full reloads</li>
</ul>
</li>
<li>allows for much richer state management. See github’s new issues dashboard</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1213&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/05/31/notes-from-kyle-neaths-presentation-at-twitter-on-531/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes from Neil Gershenfeld&#8217;s 5/24 talk at Twitter</title>
		<link>http://erikeldridge.wordpress.com/2011/05/24/notes-from-neil-gershenfelds-524-talk-at-twitter/</link>
		<comments>http://erikeldridge.wordpress.com/2011/05/24/notes-from-neil-gershenfelds-524-talk-at-twitter/#comments</comments>
		<pubDate>Tue, 24 May 2011 20:45:17 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[notes]]></category>
		<category><![CDATA[bits and atoms]]></category>
		<category><![CDATA[fablab]]></category>
		<category><![CDATA[Neil Gershenfeld]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1208</guid>
		<description><![CDATA[My mind was just blown by a talk from Neil Gershenfeld, director of the Bits and Atoms lab at MIT. His team created the fab lab. Here are  some notes This is a house created by a fab lab: http://www.fablabhouse.com/en This is a wireless network created out of junk in Afghanistan: http://www.npr.org/templates/story/story.php?storyId=125866561 This is a next-generation [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1208&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My mind was just blown by a talk from Neil Gershenfeld, director of the Bits and Atoms lab at MIT. His team created the <a title="Fab Central: MIT's Fab Lab program" href="http://fab.cba.mit.edu/">fab lab</a>. Here are  some notes</p>
<ul>
<li>This is a house created by a fab lab: <a href="http://www.fablabhouse.com/en">http://www.fablabhouse.com/en</a></li>
<li>This is a wireless network created out of junk in Afghanistan: <a href="http://www.npr.org/templates/story/story.php?storyId=125866561">http://www.npr.org/templates/story/story.php?storyId=125866561</a></li>
<li>This is a next-generation learning environment he created because schools like MIT and Stanford cannot scale <a href="http://www.fabacademy.org/">http://www.fabacademy.org/</a>, and kids are now doing advanced material fabrication at fab labs around the world</li>
<li>The only current US representative who was previously a scientist recently authored a bill for a national fab lab: <a href="http://scripts.mit.edu/~emu/fab/?p=2196">http://scripts.mit.edu/~emu/fab/?p=2196</a></li>
<li>Fab labs can create the machinery required to create fab labs. There are currently 100 around the world. That number doubles every year.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1208&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/05/24/notes-from-neil-gershenfelds-524-talk-at-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes from Rob Pike&#8217;s 5/12 talk on Go at Twitter</title>
		<link>http://erikeldridge.wordpress.com/2011/05/12/notes-from-rob-pikes-512-talk-on-go/</link>
		<comments>http://erikeldridge.wordpress.com/2011/05/12/notes-from-rob-pikes-512-talk-on-go/#comments</comments>
		<pubDate>Thu, 12 May 2011 19:24:50 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[notes]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[robpike]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1206</guid>
		<description><![CDATA[See golang.org for language documentation W/in a factor of 2 slower than C/C++. Generally w/in 20% speed of c/c++ programs Intrinsically safe This talk has been presented before, so the slides may be online. see google io 2010 archive check out article in Register about Go that quotes Odersky: “I like a lot of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1206&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>See <a href="http://golang.org/">golang.org</a> for language documentation</li>
<li>W/in a factor of 2 slower than C/C++. Generally w/in 20% speed of c/c++ programs</li>
<li>Intrinsically safe</li>
<li>This talk has been presented before, so the slides may be online. see google io 2010 archive</li>
<li>check out <a href="http://www.theregister.co.uk/2011/05/05/google_go/">article in Register about Go</a> that quotes Odersky: “I like a lot of the design decisions they made in the language … Basically, I like all of them.”</li>
<li>built on 4 self-reinforcing principles: simple, ortho, succinct, safe</li>
<li>see axiom of choice in type theory</li>
<li>public/private hint in variable name is one of the best things about the language</li>
<li>see CSP tradition</li>
<li>uses a deterministic model, channels, for concurrency</li>
<li>the “go” keyword launches a go routine</li>
<li>“for { … ” declares an infinite loop</li>
<li>expressiveness comes from orthogonal composition of constructs</li>
<li>Go conceived while waiting for 45 min gcc compilation</li>
<li>Go app engine sdk is a complete installation vs building from source</li>
</ul>
<p>Questions</p>
<p>How is the language intrinsically safe?</p>
<ul>
<li>no stack overflows</li>
</ul>
<p>Interoperability?</p>
<ul>
<li>native swig support for C/C++ progs</li>
<li>no java interop</li>
</ul>
<p>Exceptions?</p>
<ul>
<li>no try/catch</li>
<li>uses panic/recover</li>
<li>function-level, not statement-level</li>
</ul>
<p>Channel implementation?</p>
<ul>
<li>not like erlang channels</li>
<li>passing channel over netchan is coming</li>
</ul>
<p>Generics?</p>
<ul>
<li>Core team has members that believe generics must <em>and</em> must-not be included</li>
</ul>
<p>Upgrading?</p>
<ul>
<li>gofix rewrites code</li>
<li>gofont pretty-prints/formats code</li>
</ul>
<p>Inspirations?</p>
<ul>
<li>Oberon</li>
<li>New Squeek</li>
<li>Didn’t cherry-pick features to build an ideal language, but they did include elements that helped them be productive</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1206&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/05/12/notes-from-rob-pikes-512-talk-on-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>Learnings from an attempted robbery</title>
		<link>http://erikeldridge.wordpress.com/2011/04/21/learnings-from-an-attempted-robbery/</link>
		<comments>http://erikeldridge.wordpress.com/2011/04/21/learnings-from-an-attempted-robbery/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 04:51:13 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[learnings]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1192</guid>
		<description><![CDATA[My wife and I were waiting for the BART when a woman started yelling for help. She said, &#8220;they stole my iphone!&#8221; Her voice was coming from the stairs leading into the station. I couldn&#8217;t see her, but there were two young men, boys, really, jumping down the stairs three at a time. They were [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1192&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My wife and I were waiting for the <a href="http://www.bart.gov/">BART</a> when a woman started yelling for help. She said, &#8220;they stole my iphone!&#8221;</p>
<p>Her voice was coming from the stairs leading into the station. I couldn&#8217;t see her, but there were two young men, boys, really, jumping down the stairs three at a time. They were yelling back at her, &#8220;shut the f**k up. I never took anything from you.&#8221; It was difficult to determine if we were really seeing a robbery or just an argument.</p>
<p>But if a woman is yelling for help, and there are a couple people running away, something&#8217;s probably amiss. I started walking towards the two guys as they rounded a corner away from the stairs. They were moving out of view, towards the platform of an inbound train. They were trying to blend into the crowd.</p>
<p>I shouted at them, but they didn&#8217;t stop or look back. A person they passed said to me, &#8220;they&#8217;re going around the other side.&#8221; It took me moment to understand what he was saying. I was confused why he was speaking so matter-of-factly, and otherwise doing nothing to help.</p>
<p>Finally, I understood and reversed my path to head them off. When I came around the other side, they had broken into a run, and were heading directly towards me. A few people now, men and women, young and old, were trying to stop them. As we moved to push one of them against a wall, he started swinging, hitting a woman in the face. I grabbed for his leg to get him on the ground. We all fell. I grabbed the guy&#8217;s arms and held them behind his back. We restrained him until the police came. </p>
<p>Both men were arrested, and the phone was recovered.</p>
<p>My takeaways:</p>
<p>1) <strong>Yelling &#8220;HELP!&#8221; as loud as possible is good</strong></p>
<p>I was surprised by how slowly the crowd reacted. Luckily, the victim kept shouting, and &#8220;help&#8221; is a pretty disruptive word. At one point I needed assistance keeping the thief on the ground. Shouting &#8220;help!&#8221; worked (see below).</p>
<p>I&#8217;d like to get more practice shouting for help and reacting to requests for help. These seem like a couple good skill sets to have. </p>
<p>2) <strong>Awareness of surroundings while using an iphone, ipad, etc in public is good</strong></p>
<p>The officer we talked with at the BART station said this type of crime is very common. A person will be looking at his/her phone and a thief will grab it and run.</p>
<p>3) <strong>Yelling a description of the attackers is good</strong></p>
<p>For example, &#8220;HELP! Stop those two guys! They stole my phone!&#8221; (repeat) </p>
<p>This helps people like me, who didn&#8217;t witness the crime, quickly get a sense of things.</p>
<p>4) <strong>Holding the attacker&#8217;s arms behind his back worked well</strong></p>
<p>Here&#8217;s a more detailed description:<br />
We were both sitting. I was behind him. His arms were behind his back, and I had my arms between his and his back. As my arms became tired, I grabbed my elbows.</p>
<p>At one point, the guy tried to get his feet under him and stand up. My hold would have been weakened by this, so I shouted for help. A man standing next to us then put his foot on the assailant&#8217;s hip and held him down. From this I learned &#8230;</p>
<p>5) <strong>Standing on an attacker is good</strong></p>
<p>If two or three people just put their foot on someone on the ground, it would be super-helpful in keeping the person pinned. I hadn&#8217;t thought of it before, but it really works, and it seems like a low-risk way to assist.</p>
<p>6) <strong>Hitting someone is illegal</strong></p>
<p>The woman who was hit had the wherewithal to recognize it as assault. I might have overlooked this fact. I very nearly didn&#8217;t get involved in the whole incident, thinking I was misunderstanding what I was seeing, but I was witnessing theft and assault.</p>
<p>7) <strong>Being a part of a community feels good</strong></p>
<p>The thieves were just walking away from the victim, as though they expected no one to do anything. Had the train come a minute earlier, they could have jumped on and disappeared. </p>
<p>I&#8217;m so happy things worked out differently. Thankfully, the assailants weren&#8217;t armed.</p>
<p>My thanks to all the people who helped. The BART employees and police were great, esp. Officer Rodriguez. I feel like we&#8217;re a community. It became easier to help as more people became involved, and I became comfortable shouting and grappling and trusting other people with my safety.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1192&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/04/21/learnings-from-an-attempted-robbery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>Trying out posterous</title>
		<link>http://erikeldridge.wordpress.com/2011/03/15/trying-out-posterous/</link>
		<comments>http://erikeldridge.wordpress.com/2011/03/15/trying-out-posterous/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 08:42:34 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1175</guid>
		<description><![CDATA[I&#8217;m going to try out posterous for a while, so you can find me over there. So far, I&#8217;ve posted: Tools and tips I&#8217;ve found helpful Variations on a cross-browser JavaScript log utility An exploration into Ajax navigation JavaScript inheritence Calling a parent constructor in JavaScript<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1175&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to try out posterous for a while, so you can find me over there. So far, I&#8217;ve posted:</p>
<ul>
<li><em><a title="Tools and tips I've found helpful" href="http://erikeldridge.posterous.com/tools-and-tips-ive-found-helpful">Tools and tips I&#8217;ve found helpful</a></em></li>
<li><em><a href="http://erikeldridge.posterous.com/a-cross-browser-javascript-log-utility">Variations on a cross-browser JavaScript log utility</a></em></li>
<li><em><a href="http://erikeldridge.posterous.com/46013445">An exploration into Ajax navigation</a></em></li>
<li><em><a href="http://erikeldridge.posterous.com/javascript-inheritence">JavaScript inheritence</a></em></li>
<li><em><a href="http://erikeldridge.posterous.com/calling-a-parent-constructor-in-javascript">Calling a parent constructor in JavaScript</a></em></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1175&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/03/15/trying-out-posterous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>cross-domain ajax with easyXDM</title>
		<link>http://erikeldridge.wordpress.com/2011/03/07/cross-domain-ajax-with-easyxdm/</link>
		<comments>http://erikeldridge.wordpress.com/2011/03/07/cross-domain-ajax-with-easyxdm/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 09:52:20 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[tutorial]]></category>
		<category><![CDATA[easyXDM]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1156</guid>
		<description><![CDATA[While hacking around with easyXDM recently, I learned a few things I thought were worth noting/sharing. I wanted to replace something like a jQuery ajax call, eg $.ajax({"url":"http://localhost/resource.json", "success":function(data){...}}) with a cross-domain equivalent, but it wasn&#8217;t immediately obvious where/how easyXDM would fit in. It was all in the documentation (see the code sample in the shipped [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1156&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>While hacking around with <a href="http://easyxdm.net/">easyXDM</a> recently, I learned a few things I thought were worth noting/sharing.  I wanted to replace something like a jQuery ajax call, eg<br />
<code>$.ajax({"url":"http://localhost/resource.json", "success":function(data){...}})</code><br />
with a cross-domain equivalent, but it wasn&#8217;t immediately obvious where/how easyXDM would fit in.  It was all in the documentation (see the code sample in the <em>shipped /cors/ interface</em> section of the <a title="easyXDM's readme file" href="https://github.com/oyvindkinsey/easyXDM/blob/master/README.md">readme</a> file), but not phrased in the way I expected.  Here are the steps I went through to get it working:</p>
<ol>
<li>Upload the <em><a title="easyXDM's cors index file" href="https://github.com/oyvindkinsey/easyXDM/blob/master/src/cors/index.html">src/cors/index.html</a></em> easyXDM support file to the domain I wanted to make available to cross-domain requests.  For example, I wanted <em>localhost</em> to be the provider of data, so I made the file available at <em>http://localhost/easyXDM/src/cors/index.html.</em></li>
<li>Edit <em>src/cors/index.html</em> file to set <em>useAccessControl</em> to <em>false</em>, eg <code>var useAccessControl = false;</code>. The code comments state that this stops the code from using response headers to determine access control.  Setting this to false seems like a bad idea, but it&#8217;s what I had to do to get it working. I definitely want to learn more about how to establish access control safely.</li>
<li>Edit <em>src/cors/index.html</em> file to pull <a title="easyXDM javascript lib" href="http://easyxdm.net/current/easyXDM.debug.js">easyXDM.debug.js</a> and <a title="json2 javascript lib" href="http://easyxdm.net/current/json2.js">json2.js</a> from the provider&#8217;s domain</li>
<li>Wherever I wanted to make an ajax call, I needed to include easyXDM.debug.js and json2.js, and then drop in this code:</li>
</ol>
<pre class="brush: jscript;">
  var rpc = new easyXDM.Rpc({
      remote: &quot;http://localhost/easyXDM/src/cors/index.html&quot;
  },
  {
      remote: {
          request: {}
      }
  });

  rpc.request({
      url: &quot;http://localhost/resource.json&quot;,
      method: &quot;GET&quot;
  }, function(response){
      console.log(JSON.parse(response.data));
  });
</pre>
<p>Here are some resources I found helpful:</p>
<ul>
<li>The easyXDM source code: <a href="https://github.com/oyvindkinsey/easyXDM">https://github.com/oyvindkinsey/easyXDM</a></li>
<li>The easyXDM XHR example: <a href="http://consumer.easyxdm.net/current/example/xhr.html">http://consumer.easyxdm.net/current/example/xhr.html</a></li>
<li>Øyvind Sean Kinsey&#8217;s <a href="http://msdn.microsoft.com/en-us/scriptjunkie/ff800814.aspx">Cross-Document Messaging and RPC</a> article</li>
</ul>
<p>To conclude, if you you&#8217;d like to learn more about honey badgers, and you don&#8217;t mind profanity, this is worth watching:</p>
<span style="text-align:center; display: block;"><a href="http://erikeldridge.wordpress.com/2011/03/07/cross-domain-ajax-with-easyxdm/"><img src="http://img.youtube.com/vi/4r7wHMg5Yjg/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1156/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1156&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/03/07/cross-domain-ajax-with-easyxdm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
		<item>
		<title>hello world with Scala and sbt</title>
		<link>http://erikeldridge.wordpress.com/2011/02/23/hello-world-with-scala-and-sbt/</link>
		<comments>http://erikeldridge.wordpress.com/2011/02/23/hello-world-with-scala-and-sbt/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 09:09:57 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1138</guid>
		<description><![CDATA[Preamble I&#8217;d like to learn more about Scala.  To get started, I&#8217;m going to run through a hello world example on sbt&#8217;s Google Code site.  Here are my system details: Mac 10.6.6 Scala 2.7.7 sbt 0.7.4 Java 1.6 Steps Create a new sbt project by simply running the command sbt.  I set the name to &#8220;hw&#8221;, the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1138&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Preamble</strong></p>
<p>I&#8217;d like to learn more about <a title="Scala's Web site" href="http://www.scala-lang.org/">Scala</a>.  To get started, I&#8217;m going to run through a hello world example on <a title="sbt's Google Code site" href="http://code.google.com/p/simple-build-tool/">sbt&#8217;s Google Code site</a>.  Here are my system details:</p>
<ul>
<li>Mac 10.6.6</li>
<li>Scala 2.7.7</li>
<li>sbt 0.7.4</li>
<li>Java 1.6</li>
</ul>
<p><strong>Steps</strong></p>
<ol>
<li>Create a new sbt project by simply running the command <em>sbt</em>.  I set the name to &#8220;hw&#8221;, the organization to &#8220;foo.com&#8221;, and the project version to &#8220;1.0&#8243;, and accepted the defaults for the Scala and sbt versions but just hitting enter.  After building the project, sbt will leave a command prompt open.  Close this by typing ctrl-D.  Note: The <a title="the sbt documentation's quick start" href="http://code.google.com/p/simple-build-tool/wiki/Setup#Quick_Setup">quick start</a> creates the code first, but then doesn&#8217;t talk about where to put it, which I found a bit confusing, so I&#8217;m presenting it here in reverse order.
<div id="attachment_1139" class="wp-caption alignnone" style="width: 562px"><img class="size-full wp-image-1139" title="Screen shot of sbt creating a project" src="http://erikeldridge.files.wordpress.com/2011/02/screen-shot-2011-02-23-at-12-34-47-am.png?w=552&#038;h=379" alt="Screen shot of sbt creating a project" width="552" height="379" /><p class="wp-caption-text">Screen shot of sbt creating a project</p></div></li>
<li>Create the file <em>hw.scala</em> in the <em>src/main/scala/</em> directory generated by sbt:<br />
<em>echo &#8216;object Hi { def main(args: Array[String]) { println(&#8220;Hi!&#8221;) } }&#8217; &gt; src/main/scala/hw.scala</em></li>
<li>Compile the project: <em>sbt compile</em>
<p><div id="attachment_1143" class="wp-caption alignnone" style="width: 562px"><a href="http://erikeldridge.files.wordpress.com/2011/02/scrnshot.png"><img class="size-full wp-image-1143" title="Screen shot of compiling a project" src="http://erikeldridge.files.wordpress.com/2011/02/scrnshot.png?w=552&#038;h=260" alt="Screen shot of compiling a project" width="552" height="260" /></a><p class="wp-caption-text">Screen shot of compiling a project</p></div></li>
<li>Run the project: <em>sbt run</em>
<p><div id="attachment_1142" class="wp-caption alignnone" style="width: 645px"><img class="size-full wp-image-1142" title="Screen shot of running a project" src="http://erikeldridge.files.wordpress.com/2011/02/screen-shot-2011-02-23-at-12-36-42-am.png?w=635&#038;h=433" alt="Screen shot of running a project" width="635" height="433" /><p class="wp-caption-text">Screen shot of running a project</p></div></li>
</ol>
<p><strong>Conclusion</strong></p>
<p>So that&#8217;s that. It&#8217;s just hello world, but I found it helpful as an introduction to sbt&#8217;s relationship to Scala.  Time to call it a day, like these birds are doing:</p>
<p><div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/15958381@N02/2041712059/"><img title="birds on a wire" src="http://farm3.static.flickr.com/2205/2041712059_0bc04d1f8b.jpg" alt="birds on a wire" width="500" height="375" /></a><p class="wp-caption-text">&quot;birds on a wire&quot; by touterse</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1138&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/02/23/hello-world-with-scala-and-sbt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>

		<media:content url="http://erikeldridge.files.wordpress.com/2011/02/screen-shot-2011-02-23-at-12-34-47-am.png" medium="image">
			<media:title type="html">Screen shot of sbt creating a project</media:title>
		</media:content>

		<media:content url="http://erikeldridge.files.wordpress.com/2011/02/scrnshot.png" medium="image">
			<media:title type="html">Screen shot of compiling a project</media:title>
		</media:content>

		<media:content url="http://erikeldridge.files.wordpress.com/2011/02/screen-shot-2011-02-23-at-12-36-42-am.png" medium="image">
			<media:title type="html">Screen shot of running a project</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2205/2041712059_0bc04d1f8b.jpg" medium="image">
			<media:title type="html">birds on a wire</media:title>
		</media:content>
	</item>
		<item>
		<title>A dive into HTTP 1.1 message formatting</title>
		<link>http://erikeldridge.wordpress.com/2011/01/23/a-dive-into-http-1-1-message-formatting/</link>
		<comments>http://erikeldridge.wordpress.com/2011/01/23/a-dive-into-http-1-1-message-formatting/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 08:26:01 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[specification]]></category>
		<category><![CDATA[http]]></category>

		<guid isPermaLink="false">http://erikeldridge.wordpress.com/?p=1094</guid>
		<description><![CDATA[It&#8217;s time to take a moment and think about Hypertext Transfer Protocol (HTTP) message formatting, specifically HTTP 1.1.  To quote Wikipedia&#8217;s article on HTTP, &#8220;HTTP functions as a request-response protocol in the client-server computing model&#8221;. The article also provides an example I find helpful: In HTTP, a web browser, for example, acts as a client, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1094&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time to take a moment and think about Hypertext Transfer Protocol (HTTP) message formatting, specifically HTTP 1.1.  To quote <a href="http://en.wikipedia.org/wiki/Http">Wikipedia&#8217;s article on HTTP</a>, &#8220;HTTP functions as a request-response protocol in the client-server computing model&#8221;.  The article also provides an example I find helpful:</p>
<blockquote><p>In HTTP, a web browser, for example, acts as a client, while an application running on a computer hosting a web site functions as a server. The client submits an HTTP request message to the server. The server, which stores content, or provides resources, such as HTML files, or performs other functions on behalf of the client, returns a response message to the client. A response contains completion status information about the request and may contain any content requested by the client in its message body.</p></blockquote>
<p><strong>Requests</strong></p>
<p>In general, what does an HTTP request look like?  We can see one by requesting yahoo.com via <a href="http://curl.haxx.se/">cURL</a> on the command line:</p>
<p><code>$ curl -v yahoo.com</code></p>
<blockquote><p>&gt; GET / HTTP/1.1<br />
&gt; User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3<br />
&gt; Host: yahoo.com<br />
&gt; Accept: */*<br />
&gt;<br />
&lt; HTTP/1.1 301 Moved Permanently<br />
&lt; Date: Sat, 22 Jan 2011 20:36:32 GMT<br />
&lt; Location: http://www.yahoo.com/<br />
&lt; Vary: Accept-Encoding<br />
&lt; Content-Type: text/html; charset=utf-8<br />
&lt; Cache-Control: private<br />
&lt; Age: 0<br />
&lt; Transfer-Encoding: chunked<br />
&lt; Connection: keep-alive<br />
&lt; Server: YTS/1.18.5</p></blockquote>
<p>In the output above, the request follows <a href="http://tools.ietf.org/html/rfc2616#section-5">the request message format defined in the HTTP 1.1 specification</a> (hereafter referred to as &#8220;the spec&#8221;):</p>
<pre>Request = Request-Line
          *(( general-header
            | request-header
            | entity-header ) CRLF)
            CRLF
            [ message-body ]</pre>
<p>&nbsp;</p>
<p>As an aside, I have to draw attention to the usage of carriage return line feed (CRLF) in there.  Douglas Crockford puts this in perspective in <a href="http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-1">volume 1 of his lecture series <em>Crockford on JavaScript</em></a>:</p>
<blockquote><p>&#8230;<br />
One thing that is odd about ASCII is that it has a carriage return character and a line feed character. This was to model the way that Teletypes actually worked, where the carriage return character would take the print element and push it over to the left. The line feed character would take the platen and spin it one line. So most lines are going to end with going back and rolling the paper, and it took two separate codes to do that. Most timesharing systems didn&#8217;t require people to type in both codes — generally they would allow people to hit the return key, and then they would echo the line space key, just because there&#8217;s no reason to make people type both characters. Also, other devices don&#8217;t work that way. Most other printers of the time would just take a line of text and print it and advance; there was no way to separate the carriage return from the line feed function. So this was a pretty device specific thing.</p>
<p>Most systems who adopted ASCII as their character set chose one or the other. The systems that tended to be more hardware focused in their orientation tended to pick line feed, and the systems that tended to be more human focused tended to pick carriage return, and that was fine until they needed to interoperate. Then you&#8217;d have a committee of people, some using line feed, some using carriage return — how do you resolve that? You could just pick one. You could even flip a coin, because it really doesn&#8217;t matter. But these committees could not decide. Nobody wanted to be the guy who got it wrong, and nobody wanted to be the guy who had to change, so they came up with a mutually disagreeable compromise, which is: We will always require both. So that&#8217;s the way the internet protocols work. We haven&#8217;t been using Teletype machines in I don&#8217;t know how many years — they&#8217;re decades obsolete — but <strong>we&#8217;re still forcing both sets of control codes to be transmitted in HTTP because of this Teletype heritage</strong>.<br />
&#8230;</p></blockquote>
<p>Back to the yahoo.com example, the <em>Request-Line</em> is &#8220;GET / HTTP/1.1&#8243;.  The spec defines the components of this line as:</p>
<pre>Request-Line = Method SP Request-URI SP HTTP-Version CRLF</pre>
<p>The Method is &#8220;GET&#8221;, the Request-URI is &#8220;/&#8221; (relative to the domain being called, i.e., we&#8217;re requesting the root of yahoo.com), the HTTP-Version is &#8220;HTTP/1.1&#8243;.</p>
<p>We also have a few headers in there: <em>User-Agent</em>, <em>Host</em>, and <em>Accept</em>.  The spec defines headers as follows:</p>
<blockquote><p>The request-header fields allow the client to pass additional information about the request, and about the client itself, to the server. These fields act as request modifiers, with semantics equivalent to the parameters on a programming language method invocation.</p></blockquote>
<p>All of the headers in our request are <a title="The request headers section of the HTTP 1.1 spec" href="http://tools.ietf.org/html/rfc2616#section-5.3">request-headers</a>, as opposed to general- or entity-headers.  The <em><a title="User-Agent section of the HTTP 1.1 specification" href="http://tools.ietf.org/html/rfc2616#section-14.43">User-Agent</a></em> header describes client making the request.  It is optional, but helpful for the service receiving the request, and so &#8220;User agents SHOULD include this field with requests.&#8221;  The <em><a title="HTTP 1.1 specification section on Host header" href="http://tools.ietf.org/html/rfc2616#section-14.23">Host header</a></em> is required (a &#8220;client MUST include a Host header field in all HTTP/1.1 request messages&#8221;).The <em><a title="Accept header section of the HTTP 1.1 specification" href="http://tools.ietf.org/html/rfc2616#section-14.1">Accept</a> </em>header tells the server what type of media is acceptable for the response.  In the yahoo.com request, we&#8217;re saying all media types are acceptable, i.e., we&#8217;ll accept PDFs, HTML, RSS, etc.</p>
<p>We don&#8217;t have a message-body, so there&#8217;s not much more to say about the request message.</p>
<p>&nbsp;</p>
<span style="text-align:center; display: block;"><a href="http://erikeldridge.wordpress.com/2011/01/23/a-dive-into-http-1-1-message-formatting/"><img src="http://img.youtube.com/vi/oXgUPsaGwHg/2.jpg" alt="" /></a></span>
<p>&nbsp;</p>
<p><strong>Responses</strong></p>
<p>The <a href="http://tools.ietf.org/html/rfc2616#section-6">format for responses</a> is very similar to that for requests:</p>
<pre>Response = Status-Line
           *(( general-header
            | response-header
            | entity-header ) CRLF)
            CRLF
            [ message-body ]</pre>
<p>&nbsp;</p>
<p>In Yahoo!&#8217;s response, the <em>Status-Line</em> is &#8220;HTTP/1.1 301 Moved Permanently&#8221;, which, when broken into its constituents, tells us that the <em>HTTP-Version</em> of the message format is &#8220;HTTP/1.1&#8243;, the <em>Status-Cod</em>e is &#8220;301&#8243;, and the <em>Reason-Phrase</em> is &#8220;Moved Permanently&#8221;.  The spec says &#8220;The Status-Code is intended for use by automata and the Reason-Phrase is intended for the human user. The client is not required to examine or display the Reason-Phrase.&#8221;</p>
<p>The first digit of the <em>Status-Code</em> communicates the general type of the response:</p>
<blockquote><p>- 1xx: Informational &#8211; Request received, continuing process</p>
<p>- 2xx: Success &#8211; The action was successfully received, understood, and accepted</p>
<p>- 3xx: Redirection &#8211; Further action must be taken in order to complete the request</p>
<p>- 4xx: Client Error &#8211; The request contains bad syntax or cannot be fulfilled</p>
<p>- 5xx: Server Error &#8211; The server failed to fulfill an apparently valid request</p></blockquote>
<p><a href="http://tools.ietf.org/html/rfc2616#section-10">Specific, pre-defined Status-Codes</a> are described in detail by the spec, but the spec is extensible, so services can define their own codes.  For example, Yahoo! and Twitter will return <a href="http://developer.yahoo.com/yql/guide/errors.html">999</a> and <a href="http://apiwiki.twitter.com/w/page/22554652/HTTP-Response-Codes-and-Errors">420</a>, respectively, for requests exceeding rate limits.</p>
<p>When a service returns a custom <em>Status-Code</em> unknown to the client, the <em>Reason-Phrase</em> can help a user determine the status of the response.  The spec doesn&#8217;t explicitly state this, but it seems like the <em>Reason-Phrase</em> is arbitrary.  Twitter&#8217;s <em>Reason-Phrase</em> for 420 made me laugh out loud: Enhance Your Calm.  I love web services with a sense of humor.</p>
<p>Yahoo!&#8217;s response contained several headers: <em>Date</em>, <em>Location</em>, <em>Vary</em>, <em>Content-Type</em>, <em>Cache-Control</em>, <em>Age</em>, <em>Transfer-Encoding</em>, <em>Connection</em>, and <em>Server</em>.</p>
<p>The <em><a href="http://tools.ietf.org/html/rfc2616#section-14.18">Date</a></em> general-header communicates the time at which the response was generated.  I can see how this would be helpful for debugging clock-skew issues in signed requests.</p>
<p>The <em><a title="The Location header section in the HTTP 1.1 specification" href="http://tools.ietf.org/html/rfc2616#section-14.30">Location</a></em> response-header &#8220;is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource&#8221;.  I most often see <em>Location</em> used with 3xx responses, i.e., redirect to this location, but I recently learned of another use, one that&#8217;s actually called out in the spec:</p>
<blockquote><p>For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server&#8217;s preferred URI for automatic redirection to the resource.</p></blockquote>
<p>This seems intuitive to me.  Suppose we make a request to create a new object, e.g.,<br />
<code>curl -X POST http://example.com/new/resource</code>, then it makes sense that example.com would return <em>201</em> with a <em>Location</em> header pointing to the new resource.</p>
<p>The spec states that the <em><a title="The Vary header section of the HTTP 1.1 specification" href="http://tools.ietf.org/html/rfc2616#section-14.44">Vary</a></em> response-header &#8220;indicates the set of request-header fields that fully determines, while the response is fresh, whether a cache is permitted to use the response to reply to a subsequent request without revalidation&#8221;, but its use is still a bit unclear to me.  Fortunately, Subbu Allamaraju, author of O&#8217;Reilly&#8217;s <em><a title="RESTful Web Services Cookbook" href="http://www.restful-webservices-cookbook.org/">RESTful Web Services Cookbook</a></em>, posted <a href="http://www.subbu.org/blog/2007/12/vary-header-for-restful-applications">an informative analysis of the Vary header</a> on his blog.  According to his write-up a &#8220;server can use this response header to indicate the client of the list of request headers it uses to resolve a given URI to a representation&#8221;.</p>
<p>In the yahoo.com example, Yahoo! is telling us that it uses the <em>Accept-Encoding</em> request-header to determine which representation of the resource to return.  In other words, requesting yahoo.com gzipped via <em>Accept-Encoding: gzip</em> will result in a different representation of the resource than requesting yahoo.com uncompressed.  If a user agent knows this, it can cache the returned resource accordingly.</p>
<p>The <em><a href="http://tools.ietf.org/html/rfc2616#section-14.17">Content-Type</a></em> entity-header &#8220;indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET.&#8221;  In our case, Yahoo! sent us back <a href="http://www.rfc-editor.org/rfc/rfc2854.txt">text/html</a>, using the <a href="http://tools.ietf.org/html/rfc2279">utf-8 charset</a>.</p>
<p>The <em><a href="http://tools.ietf.org/html/rfc2616#section-14.9">Cache-Control</a></em> general-header &#8220;is used to specify directives that MUST be obeyed by all caching mechanisms along the request/response chain.&#8221;  In the yahoo.com response, <em>Cache-Control</em> is set to &#8220;<a href="http://tools.ietf.org/html/rfc2616#section-14.9.1">private</a>&#8221; meaning &#8220;all or part of the response message is intended for a single user and MUST NOT be cached by a shared cache&#8221;.  This makes sense because Yahoo! displays private data on its home page for logged-in users, and we wouldn&#8217;t want this content cached and displayed to other users.</p>
<p>The <em><a href="http://tools.ietf.org/html/rfc2616#section-14.6">Age</a></em> response-header &#8220;conveys the sender&#8217;s estimate of the amount of time since the response (or its revalidation) was generated at the origin server&#8221;, literally, the age of the resource.  The value is given in seconds.  So our response was 0 seconds of age.</p>
<p>The <em><a href="http://tools.ietf.org/html/rfc2616#section-14.41">Transfer-Encoding</a></em> general-header &#8220;indicates what (if any) type of transformation has been applied to the message body in order to safely transfer it between the sender and the recipient&#8221;.  <em>Transfer-Encoding</em> differs from <em>Content-Encoding</em> in that the former refers to the transmission while the latter refers to the entity being transmitted.  Yahoo!&#8217;s response was &#8220;<a href="http://tools.ietf.org/html/rfc2616#section-3.6.1">chunked</a>&#8220;, meaning the message body is transmitted in a series of pieces, as defined by the spec.</p>
<p><em><a href="http://tools.ietf.org/html/rfc2616#section-14.10">Connection</a></em> is a general-header that defines the TCP connection behavior for communication between the client and server.  In Yahoo!&#8217;s response, the <em>Connection</em> header is set to keep-alive.  Maintaining a <a href="http://tools.ietf.org/html/rfc2068#section-8">persistent connection</a> is more efficient than opening and closing connections for each request/response, and HTTP 1.1 made persistence the default behavior, but for backwards compatibility, servers can also send <em>Connection: keep-alive</em> to maintain a connection that would otherwise be closed.</p>
<p>The <a href="http://tools.ietf.org/html/rfc2068#section-14.39"><em>Server</em> response-header</a> simply communicates the server that handled the request.  In Yahoo!&#8217;s case, its Yahoo! Traffic Server (YTS), a.k.a. <a href="http://trafficserver.apache.org/">Apache Traffic Server</a>.</p>
<p><strong>Conclusion</strong></p>
<p>In short, <code>curl -v</code> and <a title="The HTTP 1.1 specification" href="http://tools.ietf.org/html/rfc2616">the spec</a> are our friends.  HTTP is a standard for transmitting hypertext and defines things such as request methods and response codes.  HTTP interactions consist of requests and responses.  Requests look something like this:</p>
<pre>GET / HTTP/1.1
headers \r\n
\r\n
message-body</pre>
<p>&nbsp;</p>
<p>and responses look something like this:</p>
<pre>HTTP/1.1 200 OK
headers \r\n
\r\n
message-body</pre>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/erikeldridge.wordpress.com/1094/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/erikeldridge.wordpress.com/1094/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/erikeldridge.wordpress.com/1094/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=erikeldridge.wordpress.com&amp;blog=5116848&amp;post=1094&amp;subd=erikeldridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://erikeldridge.wordpress.com/2011/01/23/a-dive-into-http-1-1-message-formatting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f8779f49369322564937c1f164647d35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">erikeldridge</media:title>
		</media:content>
	</item>
	</channel>
</rss>
