<?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/"
	>

<channel>
	<title>See John Code</title>
	<atom:link href="http://www.seejohncode.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.seejohncode.com</link>
	<description>Ramblings by John Crepezzi</description>
	<lastBuildDate>Sat, 05 May 2012 02:15:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Streaks</title>
		<link>http://www.seejohncode.com/2012/05/04/streaks/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=streaks</link>
		<comments>http://www.seejohncode.com/2012/05/04/streaks/#comments</comments>
		<pubDate>Sat, 05 May 2012 02:15:26 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=719</guid>
		<description><![CDATA[<p>Yesterday, my 124-day blogging and open-source coding streak came to an end.  I&#8217;ll continue to keep the same goals, and am sad to see it go &#8211; but hopefully we&#8217;ll build it back up</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/04/streaks/">Streaks</a></p>]]></description>
			<content:encoded><![CDATA[<p>Yesterday, my 124-day blogging and open-source coding streak came to an end.  I&#8217;ll continue to keep the same goals, and am sad to see it go &#8211; but hopefully we&#8217;ll build it back up</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/04/streaks/">Streaks</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/05/04/streaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do It.</title>
		<link>http://www.seejohncode.com/2012/05/02/do-it/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=do-it</link>
		<comments>http://www.seejohncode.com/2012/05/02/do-it/#comments</comments>
		<pubDate>Thu, 03 May 2012 01:43:26 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=713</guid>
		<description><![CDATA[<p># of People who do nothing is greater than # of People who make excuses to not do something is greater than # of People who talk about doing something is greater than # of People who attempt to do something is greater than # of People who do something</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/02/do-it/">Do It.</a></p>]]></description>
			<content:encoded><![CDATA[<p># of People who do nothing <strong>is greater than</strong></p>
<p># of People who make excuses to not do something <strong>is greater than</strong></p>
<p># of People who talk about doing something <strong>is greater than</strong></p>
<p># of People who attempt to do something <strong>is greater than</strong></p>
<p># of People who do something</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/02/do-it/">Do It.</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/05/02/do-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Bash Completion and Detail</title>
		<link>http://www.seejohncode.com/2012/05/01/git-bash-completion-and-detail/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-bash-completion-and-detail</link>
		<comments>http://www.seejohncode.com/2012/05/01/git-bash-completion-and-detail/#comments</comments>
		<pubDate>Tue, 01 May 2012 22:40:46 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=695</guid>
		<description><![CDATA[<p>One of the things I can&#8217;t live without is git bash integration in my $PS1.  This gives me feedback on the branch and status of my current directory.  Here&#8217;s an example screenshot: So how do you get this set up?  Here&#8217;s how I do it (in ~/.bash_profile): And then you can just include the git [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/01/git-bash-completion-and-detail/">Git Bash Completion and Detail</a></p>]]></description>
			<content:encoded><![CDATA[<p>One of the things I can&#8217;t live without is git bash integration in my $PS1.  This gives me feedback on the branch and status of my current directory.  Here&#8217;s an example screenshot:</p>
<p><a href="http://www.seejohncode.com/wp-content/uploads/2012/05/shot.jpg"><img class="alignnone size-full wp-image-696" title="shot" src="http://www.seejohncode.com/wp-content/uploads/2012/05/shot.jpg" alt="" width="599" height="128" /></a></p>
<p>So how do you get this set up?  Here&#8217;s how I do it (in ~/.bash_profile):</p>
<pre class="brush: bash; title: ; notranslate">
GIT_COMPLETION_PATH=/etc/bash_completion.d/git
if [ -f $GIT_COMPLETION_PATH ]; then
  . $GIT_COMPLETION_PATH
  GIT_PS1_SHOWDIRTYSTATE=true # */+ for dirty
  GIT_PS1_SHOWSTASHSTATE=true # $ for stashes
  GIT_PS1_SHOWUNTRACKEDFILES=true # % for untracked
fi
</pre>
<p>And then you can just include the git completion function in your $PS1 where you want it. My $PS1 is super simple, and just has this and the current path (and some nice colors):</p>
<pre class="brush: bash; title: ; notranslate">
export PS1=&quot;\e[0;33m\w\e[0;91m\$(__git_ps1 ' (%s)')\e[0;96m \$\e[0m &quot;
</pre>
<p>Note: the location of your git bash_completion directory may be different (especially if you installed git via homebrew).  I like to solve that with a symbolic link, instead of changing this configuration (I just find it cleaner that way &#8211; much nicer for upgrades too):</p>
<p><em>git -&gt; /usr/local/Cellar/git/1.7.9.6/etc/bash_completion.d/git-completion.bash</em></p>
<p>If you like this &#8211; read more of <a title="My dotfiles" href="http://www.seejohncode.com/2012/02/13/my-dotfiles/">my dotfiles</a></p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/05/01/git-bash-completion-and-detail/">Git Bash Completion and Detail</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/05/01/git-bash-completion-and-detail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Tip: Viewing a Git Stash</title>
		<link>http://www.seejohncode.com/2012/04/30/git-tip-viewing-a-git-stash/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-tip-viewing-a-git-stash</link>
		<comments>http://www.seejohncode.com/2012/04/30/git-tip-viewing-a-git-stash/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 23:20:42 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=692</guid>
		<description><![CDATA[<p>I use `git stash` very often to set some code aside while I work temporarily in another branch.  Sometimes, I want to peek at what I have stashed instead of taking it out.  You can do that very easily with `git stash show`:</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/30/git-tip-viewing-a-git-stash/">Git Tip: Viewing a Git Stash</a></p>]]></description>
			<content:encoded><![CDATA[<p>I use `git stash` very often to set some code aside while I work temporarily in another branch.  Sometimes, I want to peek at what I have stashed instead of taking it out.  You can do that very easily with `git stash show`:</p>
<pre class="brush: bash; title: ; notranslate">
git stash show -p  # view a diff
</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/30/git-tip-viewing-a-git-stash/">Git Tip: Viewing a Git Stash</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/30/git-tip-viewing-a-git-stash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: Testing Multipart Uploads with RSpec</title>
		<link>http://www.seejohncode.com/2012/04/29/quick-tip-testing-multipart-uploads-with-rspec/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=quick-tip-testing-multipart-uploads-with-rspec</link>
		<comments>http://www.seejohncode.com/2012/04/29/quick-tip-testing-multipart-uploads-with-rspec/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 01:50:27 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[spec]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=687</guid>
		<description><![CDATA[<p>I couldn&#8217;t find this practically anywhere, so I thought I&#8217;d write a quick post on how to test multi-part uploads with RSpec.  The problem is that if you try to write something like: You&#8217;ll actually be sending the string &#8220;&#60;File:&#8230;&#62;&#8221; down as a request parameter.  What you actually want is a bit more obscure, but [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/29/quick-tip-testing-multipart-uploads-with-rspec/">Quick Tip: Testing Multipart Uploads with RSpec</a></p>]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t find this practically anywhere, so I thought I&#8217;d write a quick post on how to test multi-part uploads with RSpec.  The problem is that if you try to write something like:</p>
<pre class="brush: ruby; title: ; notranslate">
post :photo, :file =&gt; File.open(path)
</pre>
<p>You&#8217;ll actually be sending the string &#8220;&lt;File:&#8230;&gt;&#8221; down as a request parameter.  What you actually want is a bit more obscure, but works perfectly:</p>
<pre class="brush: ruby; title: ; notranslate">
post :photo, :file =&gt; Rack::Test::UploadedFile.new(path, mime_type) # text/jpg
</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/29/quick-tip-testing-multipart-uploads-with-rspec/">Quick Tip: Testing Multipart Uploads with RSpec</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/29/quick-tip-testing-multipart-uploads-with-rspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roku</title>
		<link>http://www.seejohncode.com/2012/04/28/roku/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=roku</link>
		<comments>http://www.seejohncode.com/2012/04/28/roku/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 02:33:31 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=684</guid>
		<description><![CDATA[<p>I got a Roku box a few days ago &#8211; to replace my Google TV in my living room.  The Roku is definitely less powerful, can&#8217;t browse the web quite as well &#8211; but has been pretty enjoyable.  For the things it does, the Roku outperforms.  Netflix, Amazon Prime, and Hulu all felt pretty hacked [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/28/roku/">Roku</a></p>]]></description>
			<content:encoded><![CDATA[<p>I got a Roku box a few days ago &#8211; to replace my Google TV in my living room.  The Roku is definitely less powerful, can&#8217;t browse the web quite as well &#8211; but has been pretty enjoyable.  For the things it does, the Roku outperforms.  Netflix, Amazon Prime, and Hulu all felt pretty hacked into Google TV, but the Roku gives them a much more solid feel.</p>
<p>TV is a pretty exciting space, looking forward to what&#8217;s coming next &#8211; seems like it may be one of the next big battlegrounds as we head towards making computers even more ubiquitous.</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/28/roku/">Roku</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/28/roku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sopatrack Update</title>
		<link>http://www.seejohncode.com/2012/04/27/sopatrack-update/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sopatrack-update</link>
		<comments>http://www.seejohncode.com/2012/04/27/sopatrack-update/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 01:42:34 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[cispa]]></category>
		<category><![CDATA[pipa]]></category>
		<category><![CDATA[sopa]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=680</guid>
		<description><![CDATA[<p>With this whole CISPA mess heating up, I thought it&#8217;d be good to write an update post (here&#8217;s the original) about a recent update that was made to Randy&#8217;s site, Sopatrack. With the new update, comes a lot more data to view, and the expansion (despite the name) beyond SOPA to other bills in Congress. [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/27/sopatrack-update/">Sopatrack Update</a></p>]]></description>
			<content:encoded><![CDATA[<p>With this whole <a href="http://www.washingtonpost.com/business/technology/cispa-whos-for-it-whos-against-it-and-how-it-could-affect-you/2012/04/27/gIQA5ur0lT_story.html">CISPA mess</a> heating up, I thought it&#8217;d be good to write an update post (<a href="http://www.seejohncode.com/2012/01/16/stop-sopa-and-pipa/">here&#8217;s the original</a>) about a recent update that was made to Randy&#8217;s site, <a href="http://sopatrack.com/">Sopatrack</a>.</p>
<p>With the new update, comes a lot more data to view, and the expansion (despite the name) beyond SOPA to other bills in Congress.  The re-design really helps to make the raw data more clear.  My favorite page is the <a href="http://sopatrack.com/bills">bills page</a>, which breaks down funding on supporting and opposing sides for each bill.</p>
<p>Check it out, and keep your <a href="http://sopatrack.com/congresspeople">congresspeople</a> responsible!</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/27/sopatrack-update/">Sopatrack Update</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/27/sopatrack-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino: Combination Lock Opener</title>
		<link>http://www.seejohncode.com/2012/04/26/arduino-combination-lock-opener/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-combination-lock-opener</link>
		<comments>http://www.seejohncode.com/2012/04/26/arduino-combination-lock-opener/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 02:21:59 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[arduino]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=676</guid>
		<description><![CDATA[<p>So I&#8217;ve started in on my first Arduino project &#8211; an automatic combination lock opener.  It&#8217;ll automatically turn and guess the combination for a Master lock like this.  It&#8217;ll have a screen to display its current combination attempt, and will spin the dial itself.  I thought for a while about it, and I think I [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/26/arduino-combination-lock-opener/">Arduino: Combination Lock Opener</a></p>]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve started in on my first Arduino project &#8211; an automatic combination lock opener.  It&#8217;ll automatically turn and guess the combination for a Master lock <a href="http://www.northerntool.com/images/product/images/17856_lg.jpg">like this</a>.  It&#8217;ll have a screen to display its current combination attempt, and will spin the dial itself.  I thought for a while about it, and I think I have some really neat ideas to make it more interesting:</p>
<ol>
<li>An optimization can be made by taking advantage of the lock&#8217;s imperfect positioning, and instead of trying every number, trying every other number first.</li>
<li>Based on where 1 spin ends, you can make the next move you choose to make start close to the end position of your last move.</li>
<li>The last turn, you can spin the lock and continually attempt opening, without re-trying the combinations.</li>
</ol>
<p>So, my hopes are that with these optimizations, I can go from:</p>
<ul>
<li>1st dial &#8211; 40 possibilities</li>
<li>2nd dial &#8211; 40 possibilities</li>
<li>3rd dial &#8211; 40 possibilities</li>
<li>40 * 40 * 40 = 64000 combinations</li>
</ul>
<p>To:</p>
<ul>
<li>1st dial &#8211; 20 possibilities</li>
<li>2nd dial &#8211; 20 possibilities</li>
<li>3rd dial &#8211; spinning as I go</li>
<li>20 * 20 * 1 = 400 combinations</li>
</ul>
<p>I&#8217;ll post here updates as I have them, and hopefully soon we&#8217;ll have a cool combination lock unlocker.</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/26/arduino-combination-lock-opener/">Arduino: Combination Lock Opener</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/26/arduino-combination-lock-opener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Async.js is Boss</title>
		<link>http://www.seejohncode.com/2012/04/25/async-js-is-boss/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=async-js-is-boss</link>
		<comments>http://www.seejohncode.com/2012/04/25/async-js-is-boss/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 03:47:42 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=672</guid>
		<description><![CDATA[<p>A JavaScript library I really like is async by caolan.  It makes common tasks for multiple async operations really natural, which is especially useful for Node programming. Check it out!</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/25/async-js-is-boss/">Async.js is Boss</a></p>]]></description>
			<content:encoded><![CDATA[<p>A JavaScript library I really like is <a href="https://github.com/caolan/async">async by caolan</a>.  It makes common tasks for multiple async operations really natural, which is especially useful for Node programming.</p>
<p>Check it out!</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/25/async-js-is-boss/">Async.js is Boss</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/25/async-js-is-boss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding the Caller in Ruby</title>
		<link>http://www.seejohncode.com/2012/04/24/finding-the-caller-in-ruby/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=finding-the-caller-in-ruby</link>
		<comments>http://www.seejohncode.com/2012/04/24/finding-the-caller-in-ruby/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 23:59:55 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=667</guid>
		<description><![CDATA[<p>In Ruby, it can be really useful to know, in the flow of execution, the call stack within a certain method.  For that we have Kernel#caller. #caller returns an Array representing the current call stack, where each element is a String like &#8220;file:line in &#8216;name&#8217;&#8221;.  Here&#8217;s an example: which will output: ex.rb:8:in `do_it' ex.rb:11:in `&#60;main&#62;'</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/24/finding-the-caller-in-ruby/">Finding the Caller in Ruby</a></p>]]></description>
			<content:encoded><![CDATA[<p>In Ruby, it can be really useful to know, in the flow of execution, the call stack within a certain method.  For that we have Kernel#caller.</p>
<p>#caller returns an Array representing the current call stack, where each element is a String like &#8220;file:line in &#8216;name&#8217;&#8221;.  Here&#8217;s an example:</p>
<pre class="brush: ruby; title: ; notranslate">
def actually_do_it
  caller.join(&quot;\n&quot;)
end

def do_it
  actually_do_it
end

puts do_it
</pre>
<p>which will output:</p>
<pre>ex.rb:8:in `do_it'
ex.rb:11:in `&lt;main&gt;'</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/24/finding-the-caller-in-ruby/">Finding the Caller in Ruby</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/24/finding-the-caller-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Path Dependencies with Bundler</title>
		<link>http://www.seejohncode.com/2012/04/23/path-dependencies-with-bundler/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=path-dependencies-with-bundler</link>
		<comments>http://www.seejohncode.com/2012/04/23/path-dependencies-with-bundler/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 00:14:16 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[bundler]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=665</guid>
		<description><![CDATA[<p>I&#8217;m a big fan of splitting up applications into separate pieces whenever possible.  This is especially convenient in Ruby with tools like bundler &#38; rubygems to make modularization a breeze. Often when I turn something into a gem, I want to work on my application and its dependency at the same time.  For that reason, [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/23/path-dependencies-with-bundler/">Path Dependencies with Bundler</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of splitting up applications into separate pieces whenever possible.  This is especially convenient in Ruby with tools like bundler &amp; rubygems to make modularization a breeze.</p>
<p>Often when I turn something into a gem, I want to work on my application and its dependency at the same time.  For that reason, bundler let&#8217;s you declare dependencies by path, instead of rebuilding:</p>
<p>If a normally line in your Gemfile looks like:</p>
<pre class="brush: ruby; title: ; notranslate">
gem 'autodoc'
</pre>
<p>you can specify a path as an argument to `gem` like:</p>
<pre class="brush: ruby; title: ; notranslate">
gem 'autodoc', :path =&gt; '/Users/john/Development/autodoc'
</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/23/path-dependencies-with-bundler/">Path Dependencies with Bundler</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/23/path-dependencies-with-bundler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim: Git Plugin</title>
		<link>http://www.seejohncode.com/2012/04/22/vim-git-plugin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vim-git-plugin</link>
		<comments>http://www.seejohncode.com/2012/04/22/vim-git-plugin/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 03:04:29 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=662</guid>
		<description><![CDATA[<p>Another vim plugin I love enough to feature here is git-vim which gives you convenient access to git commands from inside of vim.  I only use a few of them (and only in their base form) &#8211; but I find them pretty indispensable: :GitLog Will open a git log in a new buffer of the changes to [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/22/vim-git-plugin/">Vim: Git Plugin</a></p>]]></description>
			<content:encoded><![CDATA[<p>Another vim plugin I love enough to feature here is <a href="https://github.com/motemen/git-vim">git-vim</a> which gives you convenient access to git commands from inside of vim.  I only use a few of them (and only in their base form) &#8211; but I find them pretty indispensable:</p>
<p><strong>:GitLog</strong></p>
<p>Will open a git log in a new buffer of the changes to the current file</p>
<p><strong>:GitBlame</strong></p>
<p>Will open a vertical buffer containing the line-by-line blame of the current file</p>
<p><strong>:GitDiff</strong></p>
<p>Will open a buffer next to the existing buffer, with its current diff</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/22/vim-git-plugin/">Vim: Git Plugin</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/22/vim-git-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chillaxin</title>
		<link>http://www.seejohncode.com/2012/04/22/chillaxin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=chillaxin</link>
		<comments>http://www.seejohncode.com/2012/04/22/chillaxin/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 06:23:43 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=656</guid>
		<description><![CDATA[<p>Its what I&#8217;m doing.</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/22/chillaxin/">Chillaxin</a></p>]]></description>
			<content:encoded><![CDATA[<p>Its what I&#8217;m doing.</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/22/chillaxin/">Chillaxin</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/22/chillaxin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CICONF San Francisco</title>
		<link>http://www.seejohncode.com/2012/04/20/ciconf-san-francisco/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ciconf-san-francisco</link>
		<comments>http://www.seejohncode.com/2012/04/20/ciconf-san-francisco/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 00:23:09 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=653</guid>
		<description><![CDATA[<p>I&#8217;ll be speaking in August at CICONF in San Francisco!!  If you haven&#8217;t already picked up your ticket, you definitely should.  Its going to be a really good conference, with some great talks.  Not to mention, SF is always a good time in itself. Are my German friends coming out again?</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/20/ciconf-san-francisco/">CICONF San Francisco</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be speaking in August at <a href="http://ciconf.com/">CICONF in San Francisco</a>!!  If you haven&#8217;t already picked up your ticket, you definitely should.  Its going to be a really good conference, with some great talks.  Not to mention, SF is always a good time in itself.</p>
<p>Are my German friends coming out again?</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/20/ciconf-san-francisco/">CICONF San Francisco</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/20/ciconf-san-francisco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaling is Hard</title>
		<link>http://www.seejohncode.com/2012/04/19/scaling-is-hard/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scaling-is-hard</link>
		<comments>http://www.seejohncode.com/2012/04/19/scaling-is-hard/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 23:51:46 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=651</guid>
		<description><![CDATA[<p>It&#8217;s really easy to pretend that your application can scale.  When you&#8217;re presented with the actual challenges, though &#8211; pretty much every expectation you have falls apart. Rate limits, server load, edge cases, hardware failure, concurrency issues.  The worst part is, as much as you plan, you&#8217;ll never avoid it.  The best you can do [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/19/scaling-is-hard/">Scaling is Hard</a></p>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s really easy to pretend that your application can scale.  When you&#8217;re presented with the actual challenges, though &#8211; pretty much every expectation you have falls apart.</p>
<p>Rate limits, server load, edge cases, hardware failure, concurrency issues.  The worst part is, as much as you plan, you&#8217;ll never avoid it.  The best you can do is measure everything and adapt as the challenges come.  Scale is accomplished through planning and effort.</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/19/scaling-is-hard/">Scaling is Hard</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/19/scaling-is-hard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: The Actual Type of an Object</title>
		<link>http://www.seejohncode.com/2012/04/18/ruby-the-actual-type-of-an-object/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ruby-the-actual-type-of-an-object</link>
		<comments>http://www.seejohncode.com/2012/04/18/ruby-the-actual-type-of-an-object/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 03:27:45 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=642</guid>
		<description><![CDATA[<p>Today&#8217;s post was inspired by my friend Mat Brown. So, in Ruby it&#8217;s quite possible to hide the class of an object, and make it pretend to be something else.  Sometimes this can be useful &#8211; for example if you don&#8217;t want to extend a core object, but want people to be able to work [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/18/ruby-the-actual-type-of-an-object/">Ruby: The Actual Type of an Object</a></p>]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s post was inspired by my friend <a href="https://github.com/outoftime">Mat Brown.</a></p>
<p>So, in Ruby it&#8217;s quite possible to hide the class of an object, and make it pretend to be something else.  Sometimes this can be useful &#8211; for example if you don&#8217;t want to extend a core object, but want people to be able to work with an object as if you had.  A core example of this is how Rails *used* to treat ActiveSupport::TimeWithZone.  You can take the concept pretty far:</p>
<pre class="brush: ruby; title: ; notranslate">
class String
  def class
    Fixnum
  end
end
</pre>
<p>So, the class is…</p>
<pre class="brush: ruby; title: ; notranslate">
&quot;hello&quot;.class # Fixnum
</pre>
<p>Then we get smart with Ruby, but the library implementers keep up with us:</p>
<pre class="brush: ruby; title: ; notranslate">
&quot;hello&quot;.is_a?(Fixnum) # false

class String
  def is_a?(clazz)
    clazz == Fixnum
  end
end

&quot;hello&quot;.is_a?(Fixnum) # true, gahhhh
</pre>
<p>Again and again, every time we think we&#8217;ve figured out the real class &#8211; we get stumped.</p>
<p>Luckily, there are a few ways that are normally not (and shouldn&#8217;t be) overridden:</p>
<pre class="brush: ruby; title: ; notranslate">
Fixnum === &quot;hello&quot; # false

# which you can mess up with
class Class
  def ===(obj)
  if obj.is_a?(String) &amp;&amp; self == Fixnum
    true
  elsif String === obj
    false
  else
    super
  end
end

Fixnum === &quot;hello&quot; # true
String === &quot;hello&quot; # false
</pre>
<p>And .. for the most fun, we can bind Object&#8217;s base implementation of #class against an object and call it:</p>
<pre class="brush: ruby; title: ; notranslate">
Object.instance_method(:class).bind(&quot;hello&quot;).call # String
</pre>
<p>And wouldn&#8217;t you know it:</p>
<pre class="brush: ruby; title: ; notranslate">
class Object
  def class
    if self.is_a?(String)
      Fixnum
    else
      super
    end
  end
end

Object.instance_method(:class).bind(&quot;hello&quot;).call # Fixnum
</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/18/ruby-the-actual-type-of-an-object/">Ruby: The Actual Type of an Object</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/18/ruby-the-actual-type-of-an-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Short Tip: Rescuing a Method in Ruby</title>
		<link>http://www.seejohncode.com/2012/04/17/short-tip-rescuing-a-method-in-ruby/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=short-tip-rescuing-a-method-in-ruby</link>
		<comments>http://www.seejohncode.com/2012/04/17/short-tip-rescuing-a-method-in-ruby/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 21:49:12 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=637</guid>
		<description><![CDATA[<p>Ruby has some nice sugar around rescuing from errors that may be thrown from a method.  A lot of times, I see code like this: But you can make it a bit nicer to do the same with:</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/17/short-tip-rescuing-a-method-in-ruby/">Short Tip: Rescuing a Method in Ruby</a></p>]]></description>
			<content:encoded><![CDATA[<p>Ruby has some nice sugar around rescuing from errors that may be thrown from a method.  A lot of times, I see code like this:</p>
<pre class="brush: ruby; title: ; notranslate">
def some_method
  begin
    danger_danger
    true # good return
  rescue Error
    false # error return
  end
end
</pre>
<p>But you can make it a bit nicer to do the same with:</p>
<pre class="brush: ruby; title: ; notranslate">
def some_method
  danger_danger
  true # good response
rescue Error
  false # error response
end
</pre>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/17/short-tip-rescuing-a-method-in-ruby/">Short Tip: Rescuing a Method in Ruby</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/17/short-tip-rescuing-a-method-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Node.js in CoffeeScript</title>
		<link>http://www.seejohncode.com/2012/04/16/writing-node-js-in-coffeescript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=writing-node-js-in-coffeescript</link>
		<comments>http://www.seejohncode.com/2012/04/16/writing-node-js-in-coffeescript/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 00:24:19 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=629</guid>
		<description><![CDATA[<p>Now I know I&#8217;ve spoken slightly poorly of CoffeeScript in the past, but I&#8217;ve been getting into it a bit more recently on some small libraries I&#8217;ve been writing for Node.  Turns out, it&#8217;s really easy to write parts of your Node applications in CoffeeScript and have them automatically compiled for you. First, add &#8220;coffee-script&#8221; [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/16/writing-node-js-in-coffeescript/">Writing Node.js in CoffeeScript</a></p>]]></description>
			<content:encoded><![CDATA[<p>Now I know I&#8217;ve <a href="http://www.seejohncode.com/2011/02/13/coffeescript/">spoken slightly poorly of CoffeeScript</a> in the past, but I&#8217;ve been getting into it a bit more recently on some small libraries I&#8217;ve been writing for Node.  Turns out, it&#8217;s really easy to write parts of your Node applications in CoffeeScript and have them automatically compiled for you.</p>
<p>First, add &#8220;coffee-script&#8221; to your dependencies in package.json (definitely specify a real version instead of using *):</p>
<pre>{
  ...
  "dependencies": {
    "coffee-script": "*"
  }
  ... 
}</pre>
<p>And then, any time you need a file that&#8217;s written in CoffeeScript, just make sure you have require &#8220;coffee-script&#8221; before requiring it:</p>
<pre class="brush: jscript; title: ; notranslate">
require(&quot;coffee-script&quot;);
require(&quot;./something_in_coffeescript&quot;); // something_in_coffeescript.coffee
...
</pre>
<p>And off you go!</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/16/writing-node-js-in-coffeescript/">Writing Node.js in CoffeeScript</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/16/writing-node-js-in-coffeescript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino is Cool</title>
		<link>http://www.seejohncode.com/2012/04/15/arduino-is-cool/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-is-cool</link>
		<comments>http://www.seejohncode.com/2012/04/15/arduino-is-cool/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 03:02:48 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[arduino]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=627</guid>
		<description><![CDATA[<p>Programming with Arduino reminds me a lot of the excitement I got when I first wrote code for mobile devices.  Its fun to make something real move, to contrast all of the code we write that only puts things on the screens.</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/15/arduino-is-cool/">Arduino is Cool</a></p>]]></description>
			<content:encoded><![CDATA[<p>Programming with Arduino reminds me a lot of the excitement I got when I first wrote code for mobile devices.  Its fun to make something real move, to contrast all of the code we write that only puts things on the screens.</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/15/arduino-is-cool/">Arduino is Cool</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/15/arduino-is-cool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hastebin Clients</title>
		<link>http://www.seejohncode.com/2012/04/14/hastebin-clients/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hastebin-clients</link>
		<comments>http://www.seejohncode.com/2012/04/14/hastebin-clients/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 03:06:04 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[hastebin]]></category>

		<guid isPermaLink="false">http://www.seejohncode.com/?p=625</guid>
		<description><![CDATA[<p>I&#8217;ve seen a lot of fun hastebin clients popping up, so I thought it&#8217;d make sense to get a list going for anyone interested: The original &#8211; written in Ruby A small python client gist by Devon Meunier WinHaste by Aidan Ryan &#8211; using hastebin from windows A vim client from Grant Heffernan An emacs [...]</p><p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/14/hastebin-clients/">Hastebin Clients</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen a lot of fun <a href="http://hastebin.com/">hastebin</a> clients popping up, so I thought it&#8217;d make sense to get a list going for anyone interested:</p>
<ul>
<li><a href="https://github.com/seejohnrun/haste-client">The original &#8211; written in Ruby</a></li>
<li><a href="https://gist.github.com/1668147">A small python client</a> gist by Devon Meunier</li>
<li><a href="https://github.com/ajryan/WinHaste">WinHaste</a> by Aidan Ryan &#8211; using hastebin from windows</li>
<li><a href="http://grantheffernan.wordpress.com/2012/04/11/hastebin-from-vim/">A vim client</a> from Grant Heffernan</li>
<li><a href="https://github.com/rlister/emacs-haste-client">An emacs client</a> from Ric Lister</li>
<li><a href="http://hastebin.com/johabohugu">A tiny sed wrap</a> by Norman Gray</li>
</ul>
<p>Its fun to see people not only using hastebin, but thinking of ways to use it that are more convenient for how they work!</p>
<p><hr>

Read this post on <a href="http://www.seejohncode.com/2012/04/14/hastebin-clients/">Hastebin Clients</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.seejohncode.com/2012/04/14/hastebin-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

