<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.backdrifter.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Backdrifter</title>
	
	<link>http://www.backdrifter.com</link>
	<description>The personal site of Jared Hanson</description>
	<lastBuildDate>Fri, 02 Sep 2011 03:49:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.backdrifter.com/backdrifter" /><feedburner:info uri="backdrifter" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Setting Up a Ruby Environment on Mac OS X 10.7</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/MusKys11b0U/</link>
		<comments>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 03:49:34 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=420</guid>
		<description><![CDATA[I recently picked up a new Mac mini, so I could have a stand-alone development system.  One of the nice things about a fresh system is that it offers a clean slate on which to install development tools.
Ruby is one of the languages I use on a regular basis.  Unfortunately, the proliferation of [...]]]></description>
			<content:encoded><![CDATA[<p>I recently picked up a new <a href="http://www.apple.com/macmini/">Mac mini</a>, so I could have a stand-alone development system.  One of the nice things about a fresh system is that it offers a clean slate on which to install development tools.</p>
<p><a href="http://www.ruby-lang.org/">Ruby</a> is one of the languages I use on a regular basis.  Unfortunately, the proliferation of interpreters and <a href="http://rubygems.org/">gems</a> can be hard to keep under control.  One of my goals with the new system was to improve this process.</p>
<p>This posts documents the commands I executed, for future reference.</p>
<p><span id="more-420"></span></p>
<p><b>Mac OS X 10.7 Ruby Environment</b></p>
<p>Before we get started, let&#8217;s inspect the standard Ruby install that ships with Mac OS X 10.7.<br />
<code style="text-align: left;"><br />
$ which ruby<br />
/usr/bin/ruby</p>
<p>$ ruby --version<br />
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]</p>
<p>$ which gem<br />
/usr/bin/gem</p>
<p>$ gem --version<br />
1.3.6</p>
<p>$ gem environment<br />
RubyGems Environment:<br />
  - RUBYGEMS VERSION: 1.3.6<br />
  - RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]<br />
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8<br />
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby<br />
  - EXECUTABLE DIRECTORY: /usr/bin<br />
  - RUBYGEMS PLATFORMS:<br />
    - ruby<br />
    - universal-darwin-11<br />
  - GEM PATHS:<br />
     - /Library/Ruby/Gems/1.8<br />
     - /Users/jaredhanson/.gem/ruby/1.8<br />
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8<br />
  - GEM CONFIGURATION:<br />
     - :update_sources => true<br />
     - :verbose => true<br />
     - :benchmark => false<br />
     - :backtrace => false<br />
     - :bulk_threshold => 1000<br />
  - REMOTE SOURCES:<br />
     - http://rubygems.org/<br />
</code></p>
<p><b>Install RVM: Ruby Version Manager</b></p>
<p><a href="http://beginrescueend.com/">RVM</a> is a tool that allows us to work with multiple Ruby environments, including different interpreter versions and sets of gems.</p>
<p>Install it just as the instructions recommend:<br />
<code><br />
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)<br />
</code></p>
<p>The installation script will output useful messages, explaining exactly what it is doing and offering hints about what to do after installation is complete.  The one critical thing to do is source the rvm script, so that the command is available in the shell.  I keep this in my <a href="https://github.com/jaredhanson/dotfiles">dotfiles</a>, so it is always available.  You can also source it temporarily in the current shell by executing:<br />
<code><br />
$ source "$HOME/.rvm/scripts/rvm"<br />
</code></p>
<p><b>Install Ruby</b></p>
<p>Now that RVM is installed, we can proceed to install local versions of Ruby.  To minimize differences, I first install the same version of Ruby shipped with the OS.  RVM makes it easy to install and switch to newer version later.<br />
<code><br />
$ rvm install 1.8.7<br />
$ rvm use 1.8.7<br />
</code></p>
<p>Now, the version of Ruby in use is completely isolated from the system.<br />
<code><br />
$ which ruby<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/bin/ruby<br />
$ which gem<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/bin/gem<br />
</code></p>
<p>Rake is my most utilized Ruby-based utility, so that is first on my list to install.<br />
<code><br />
$ gem install rake<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/timeout.rb:60: [BUG] Segmentation fault<br />
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.0.1]</p>
<p>Abort trap: 6<br />
</code></p>
<p>Damn.</p>
<p><b>Install Ruby with GCC 4.2</b></p>
<p>Mac OS X 10.7 is using an <a href="http://llvm.org/">LLVM</a>-based compiler by default, which is causing trouble.  Luckily, a <a href="http://stackoverflow.com/questions/6170813/why-cant-i-install-rails-on-lion-using-rvm">solution</a> can be found on <a href="http://stackoverflow.com/">Stack Overflow</a>.</p>
<p>RVM makes it easy to remove the broken installation of Ruby:<br />
<code><br />
$ rvm remove 1.8.7<br />
</code></p>
<p>Installing Ruby 1.8.7 with plain (non-LLVM) gcc fixes the issue:<br />
<code><br />
CC=/usr/bin/gcc-4.2 rvm install 1.8.7<br />
</code></p>
<p>Gems can now be installed successfully:<br />
<code><br />
$ gem install rake<br />
Fetching: rake-0.9.2.gem (100%)<br />
Successfully installed rake-0.9.2<br />
1 gem installed<br />
Installing ri documentation for rake-0.9.2...<br />
Installing RDoc documentation for rake-0.9.2...</p>
<p>$ which rake<br />
/Users/jaredhanson/.rvm/gems/ruby-1.8.7-p352/bin/rake<br />
</code></p>
<p><b>Conclusion</b></p>
<p>RVM is now installed, and can be used to manage multiple Ruby environments.  Additionally, <a href="http://beginrescueend.com/gemsets/">gemsets</a> can be used to manage which sets of gems are available in each environment.  This is a much cleaner and more flexible way to manage a Ruby development system.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/MusKys11b0U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/</feedburner:origLink></item>
		<item>
		<title>Using nvm and npm to Manage Node.js</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/ai2qncydbmI/</link>
		<comments>http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 22:59:36 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[nave]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[nvm]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=396</guid>
		<description><![CDATA[Node.js v0.4.0 has been available for a week.  I&#8217;ve been experimenting with Node for a while, and I think its going to be a big part of my toolkit in the future.  It&#8217;s currently under active development, and at this early stage managing version conflicts can be a challenge.  With the latest [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nodejs.org/">Node.js</a> v0.4.0 has been available for a week.  I&#8217;ve been experimenting with Node for a while, and I think its going to be a big part of my toolkit in the future.  It&#8217;s currently under active development, and at this early stage managing version conflicts can be a challenge.  With the latest stable release, I took the opportunity to set up a better development environment.</p>
<p>Key to setting this up was using <a href="https://github.com/creationix/nvm">nvm</a>, which stands for Node Version Manager.  This let&#8217;s you run multiple versions of Node, each in an isolated environment.  I currently have v0.2.6 and v0.4.0, and can easily switch between them.  This makes it easy to update to the latest release, while still being able to fall back to the previous release when using modules that are not yet compatible with v0.4.0.</p>
<p><span id="more-396"></span></p>
<p>It&#8217;s worth noting that <a href="https://github.com/isaacs/nave">nave</a> (Virtual Environments for Node), is an alternative to nvm.  In fact, nave was recommended by <a href="http://aaronblohowiak.com/">Aaron Blohowiak</a> at the last <a href="http://www.meetup.com/jsmeetup/events/16243344/">SF JavaScript Meetup</a> I attended.</p>
<p>In comparing the two, one thing stood out to me.  From nave&#8217;s credits:</p>
<blockquote><p>
Nvm is also really nice, but has to be sourced rather than being run, and thus is a little bit wonky for some use cases. But it doesn&#8217;t involve subshells, which makes it better for many others.
</p></blockquote>
<p>I&#8217;m comfortable sourcing things in my shell, and the concept of subshells didn&#8217;t quite sit well with me on first impression.  So, I went the nvm route.  It&#8217;s worth paying attention to both however, as neither is yet the de-facto Node version manager.</p>
<p>OK, let&#8217;s get into the details of installing and using nvm.  First, we will install nvm using the recommended instructions.  Clone the nvm repository into a <i>.nvm</i> directory.</p>
<p><code>$ git clone git://github.com/creationix/nvm.git ~/.nvm</code></p>
<p>nvm itself is just a shell function, which needs to be sourced in order to be available.  To have it sourced in every terminal you open, put the following line in <i>.bash_profile</i>:</p>
<p><code>. ~/.nvm/nvm.sh</code></p>
<p>Since I was previously using v0.2.6 as my primary version of Node, I wanted to ensure that I also had that version available under nvm.  The install process is as simple as stating which version is wanted.</p>
<p><code>$ nvm install v0.2.6</code></p>
<p>In my initial attempt, I got the following error: <code>-bash: wget: command not found</code>.  <a href="http://www.gnu.org/software/wget/">Wget</a> isn&#8217;t available by default on Mac OS X, and for some reason I hadn&#8217;t previously installed it.  It&#8217;s a standard utility, however, and easy to install.  Download <a href="http://ftp.gnu.org/gnu/wget/wget-1.9.1.tar.gz">wget-1.9.1.tar.gz</a> and execute the following:</p>
<p><code>$ tar xvzf wget-1.9.1.tar.gz<br />
$ cd wget-1.9.1<br />
$ ./configure<br />
$ make<br />
$ sudo make install</code></p>
<p>With that problem resolved, we can reattempt installation of v0.2.6.</p>
<p><code>$ nvm install v0.2.6<br />
$ which node<br />
/Users/jaredhanson/.nvm/v0.2.6/bin/node</code></p>
<p>As you can see, nvm installed v0.2.6 into the .nvm directory it manages.  You can also see the structure it sets up to allow for simultaneous installation of multiple versions.  This is what we want.</p>
<p>This is like a fresh installation of Node, so we also need to reinstall npm and any additional modules we are using.  This is done in the usual manner.</p>
<p><code>$ curl http://npmjs.org/install.sh | sh<br />
$ which npm<br />
/Users/jaredhanson/.nvm/v0.2.6/bin/npm</code></p>
<p><code>$ npm install connect</code></p>
<p>When modules are installed under an nvm environment, they are installed only for the version in use.  You can see them by listing the contents of the version&#8217;s <i>lib</i> directory.</p>
<p><code>$ ls ~/.nvm/v0.2.6/lib/node<br />
connect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wafadmin<br />
connect@0.5.9&nbsp;npm@0.2.18&nbsp;qs@0.0.5</code></p>
<p>Now that we have recreated the v0.2.6 environment, including necessary modules, it is time to install v0.4.0.</p>
<p><code>$ nvm install v0.4.0</code></p>
<p>Easy.  We can list the versions of Node we have installed using <code>nvm ls</code>.</p>
<p><code>$ nvm ls<br />
v0.2.6<br />
v0.4.0 *</code></p>
<p>With <code>nvm use</code>, we can switch between versions.</p>
<p><code>$ nvm use v0.2.6<br />
Now using node v0.2.6<br />
$ nvm use v0.4.0<br />
Now using node v0.4.0</code></p>
<p>With v0.4.0 freshly installed, you&#8217;re probably eager to execute your application and see what happens.  This eagerness will bite you though, resulting in something that looks like the following.</p>
<p><code>$ node main.js<br />
...<br />
Error: Cannot find module 'connect'<br />
...</code></p>
<p>Remember, each version of Node managed by nvm maintains its modules separately from other versions.  Each time you install a new version, you&#8217;ll also have to repeat the process of installing the modules you need using the usual <code>npm install</code> command.</p>
<p><code>$ npm install connect</code></p>
<p>This may seem like unnecessary bookkeeping, but it is in fact a good thing.  New versions of Node introduce API and ABI changes that can break compatibility with existing modules.  With modules associated with specific versions of Node, development is easier because compatibility issues are easier to isolate.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/ai2qncydbmI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/</feedburner:origLink></item>
		<item>
		<title>Technology By The Numbers</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/pD6B37cDvYg/</link>
		<comments>http://www.backdrifter.com/2011/02/16/technology-by-the-numbers/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 21:37:21 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[bigdata]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=372</guid>
		<description><![CDATA[Fascinating presentation by Jonathan Reichental, entitled &#8220;Mind-blowing, world-changing technology* *by the numbers.&#8221;

The numbers give you a sense of the enormous impact technology has on the world.

Technology&#8217;s most obvious impact has been on the way we communicate.  Take a look at the numbers pertaining to email, blogging, and tweeting.

107 trillion emails were sent last year
152 [...]]]></description>
			<content:encoded><![CDATA[<p>Fascinating <a href="http://www.youtube.com/watch?v=IzF3WgZKoU4">presentation</a> by <a href="http://www.reichental.com/">Jonathan Reichental</a>, entitled &#8220;Mind-blowing, world-changing technology* <small>*by the numbers.</small>&#8221;</p>
<p><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/IzF3WgZKoU4" frameborder="0" allowfullscreen></iframe></p>
<p>The numbers give you a sense of the enormous impact technology has on the world.</p>
<p><span id="more-372"></span></p>
<p>Technology&#8217;s most obvious impact has been on the way we communicate.  Take a look at the numbers pertaining to email, blogging, and tweeting.</p>
<ul>
<li>107 trillion emails were sent last year</li>
<li>152 million blogs are active today</li>
<li>50,000 blogs get created every single day</li>
<li>25 billion tweets were broadcast last year</li>
<li>150 million people use Twitter</li>
</ul>
<p>Technology companies, harnessing network effects, have reached the size of the largest governments and economies in the world.  This will have profound impacts on society, and only now are we confronting these issues.</p>
<ul>
<li>The combined market capitalazation of <a href="http://www.ibm.com/">IBM</a>, <a href="http://www.hp.com/">HP</a>, <a href="http://www.microsoft.com/">Microsoft</a>, <a href="http://www.apple.com/">Apple</a>, and <a href="http://www.google.com/">Google</a> is $1 trillion</li>
<li>14 countries have a GDP more than $1 trillion</li>
<li>190 countries have a GDP less than $1 trillion</li>
</ul>
<p/>
<ul>
<li>If <a href="http://www.facebook.com/">Facebook</a> was a country, it would be the 3rd largest in the world</li>
<li>650 million people have accounts on Facebook</li>
<li>Facebook is projected to reach 1 billion accounts later this year</li>
</ul>
<p>While people are increasing connected to the network, machines are as well.  Data collected from sensors is increasing at an enormous rate.</p>
<ul>
<li>The <a href="http://public.web.cern.ch/public/en/lhc/lhc-en.html">Large Hadron Collider</a> collects 1TB of data per second</li>
</ul>
<p>At the same time these numbers are increasing, the time it takes to adopt new technology is decreasing.</p>
<ul>
<li>Radio took 38 years to reach 50 million people</li>
<li>TV took 13 years to reach 50 million people</li>
<li>The Internet took 4 years to reach 50 million people</li>
</ul>
<p>The video is full of interesting statistics.  Imagine what the statistics will be in 5 or 10 years.</p>
<p>/via <a href="http://radar.oreilly.com/2011/02/golden-age-of-technology.html">O&#8217;Reilly Radar</a></p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/pD6B37cDvYg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/02/16/technology-by-the-numbers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2011/02/16/technology-by-the-numbers/</feedburner:origLink></item>
		<item>
		<title>Google Offers OAuth Alternative to Improve Security</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/dtH2-LsFenQ/</link>
		<comments>http://www.backdrifter.com/2011/02/10/google-offers-oauth-alternative-to-improve-security/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 22:22:02 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[pauth]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=357</guid>
		<description><![CDATA[Google is now offering two-factor authentication, making sign-in more secure.
It&#8217;s an extra step, but it&#8217;s one that significantly improves the security of your Google Account because it requires the powerful combination of both something you know—your username and password—and something that only you should have—your phone. A hacker would need access to both of these [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/">Google</a> is now <a href="http://googleblog.blogspot.com/2011/02/advanced-sign-in-security-for-your.html">offering</a> <a href="http://en.wikipedia.org/wiki/Two-factor_authentication">two-factor authentication</a>, making sign-in more secure.</p>
<blockquote><p>It&#8217;s an extra step, but it&#8217;s one that significantly improves the security of your Google Account because it requires the powerful combination of both something you <i>know</i>—your username and password—and something that only you should <i>have</i>—your phone. A hacker would need access to both of these factors to gain access to your account.</p></blockquote>
<p>That important security enhancement is garnering a lot of attention.  What I find interesting is the point that only got a sentence&#8217;s mention.</p>
<blockquote><p>You can also set up one-time application-specific passwords to sign in to your account from non-browser based applications that are designed to only ask for a password, and cannot prompt for the code.</p></blockquote>
<p>This sounds an awful lot like <a href="http://blog.docuverse.com/2009/01/05/oauth-alternative-for-twitter/">PAuth</a>, which <a href="http://blog.docuverse.com/">Don Park</a> suggested as an alternative to <a href="http://oauth.net/">OAuth</a> over two years ago.  I&#8217;ve always wondered why that didn&#8217;t get more attention. </p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/dtH2-LsFenQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/02/10/google-offers-oauth-alternative-to-improve-security/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2011/02/10/google-offers-oauth-alternative-to-improve-security/</feedburner:origLink></item>
		<item>
		<title>Working On Forked Projects Using GitHub</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/I5RrUMqXDLg/</link>
		<comments>http://www.backdrifter.com/2011/02/09/working-on-forked-projects-using-github/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 22:10:43 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=329</guid>
		<description><![CDATA[On Friday, I finally became active on GitHub, something I&#8217;ve waited far too long to do.  My first action was to fork Jeremie Miller&#8217;s Locker project.  In the process of doing that, I captured some notes about working on projects at GitHub, which I&#8217;m posting here in case others might find them useful. [...]]]></description>
			<content:encoded><![CDATA[<p>On Friday, I finally became active on <a href="https://github.com/">GitHub</a>, something I&#8217;ve waited far too long to do.  My first action was to <a href="https://github.com/jaredhanson/Locker">fork</a> <a href="http://twitter.com/jeremie">Jeremie Miller</a>&#8217;s <a href="https://github.com/quartzjer/Locker">Locker</a> project.  In the process of doing that, I captured some notes about working on projects at GitHub, which I&#8217;m posting here in case others might find them useful.  I know I&#8217;ll be referring to this post until these commands become second nature.</p>
<p><span id="more-329"></span></p>
<p>First things first, you&#8217;ll need to have a GitHub account, associated with your <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a> public key for authentication.  I had done that previously, according to GitHub&#8217;s helpful <a href="http://help.github.com/key-setup-redirect">instructions</a>.  In fact, GitHub has done a terrific job of documentation, and I highly recommend reading through <a href="http://help.github.com/">Help.GitHub</a> if your are new to either <a href="http://git-scm.com/">Git</a> or GitHub.</p>
<p>With that out of the way, we can get on with the business of <a href="http://help.github.com/forking/">forking</a> a project.  Each project on GitHub has a <i>Fork</i> button.  Clicking it will create a forked repository in your account.</p>
<p>Now that we have a forked repository, we can begin developing.</p>
<p>First, clone the repository to your development system.</p>
<p><code>$ git clone git@github.com:jaredhanson/Locker.git<br />
$ cd Locker</code></p>
<p>Let’s examine the clone a bit.</p>
<p><code>$ git branch -a<br />
* master<br />
remotes/origin/HEAD -&gt; origin/master<br />
remotes/origin/master</code></p>
<p><code>$ git remote -v<br />
origin	git@github.com:jaredhanson/Locker.git (fetch)<br />
origin	git@github.com:jaredhanson/Locker.git (push)</code></p>
<p>You can see from this that we have a local master branch, and a remote master branch.  The remote branch is aliased to <i>origin</i>, and its location is your account&#8217;s repository.</p>
<p>We are going to want to track changes from the original project, so lets add it as a remote repository, aliased to <i>upstream</i>, and fetch it.</p>
<p><code>$ git remote add upstream git://github.com/quartzjer/Locker.git<br />
$ git fetch upstream</code></p>
<p>At the time I first forked the project, there were bugs, some of which were fixed by Philip Harrison in his <a href="https://github.com/Harrison/Locker">fork</a>.  So, we are going to add that fork as a remote repository, fetch it, and merge the changes in. </p>
<p><code>$ git remote add harrison-github git://github.com/Harrison/Locker.git<br />
$ git fetch harrison-github</code></p>
<p>Before merging the changes, however, we are going to make a local branch in which to do our work.  This branch allows us to isolate our modifications, eliminating any worry about making the master branch unstable.  This is typical in Git workflows, because branches are cheap to create and easy to merge.  We will call our branch <i>session-secret</i>, which is descriptive of the work we will be doing on it.</p>
<p><code>$ git branch session-secret<br />
$ git checkout session-secret</code></p>
<p>Now that we have switched to a new branch, we will merge in the changes.</p>
<p><code>$ git merge harrison-github/connect_secret<br />
Auto-merging Ops/Dashboard/dashboard.js<br />
Auto-merging locker.js<br />
Merge made by recursive.<br />
Ops/Dashboard/dashboard.js |    2 +-<br />
locker.js                  |    2 +-<br />
2 files changed, 2 insertions(+), 2 deletions(-)</code></p>
<p>We can see that changes to two files were merged into the branch.  However, there are some more session secret-related bugs that I know about, so I&#8217;m going to go ahead and fix those myself.  Once I&#8217;ve completed that work, I can check the status of the repository to see what has been modified.</p>
<p><code>$ git status<br />
# On branch session-secret<br />
# Changed but not updated:<br />
#   (use "git add <file>..." to update what will be committed)<br />
#   (use "git checkout -- <file>..." to discard changes in working directory)<br />
#<br />
#	modified:   Apps/HelloWorld/hello.js<br />
#	modified:   Apps/MergedContacts/contacts.js<br />
#	modified:   Connectors/AmazonHistory/server.js<br />
#	modified:   Connectors/ChromeHistory/client.js<br />
#	modified:   Connectors/Facebook/client.js<br />
#	modified:   Connectors/Flickr/client.js<br />
#	modified:   Connectors/IMAP/demo.js<br />
#	modified:   Connectors/Twitter/client.js<br />
#	modified:   Connectors/Twitter/pull_contacts.js<br />
#	modified:   Connectors/foursquare/client.js<br />
#	modified:   Contexts/facebook.js<br />
#<br />
no changes added to commit (use "git add" and/or "git commit -a")</code></p>
<p>I&#8217;ve modified some files with bug fixes, which I&#8217;ll add and commit.</p>
<p><code>$ git add -u<br />
$ git commit -m “Add session secret, which is now required by Connect."</code></p>
<p>With all the fixes applied to the branch, we can now push the branch to GitHub.  Once the branch is available there, GitHub provides tools to submit pull requests, allowing the maintainer to bring changes from our fork into the upstream repository.</p>
<p><code>$ git push origin session-secret</code></p>
<p>Our work on that branch is complete.  We&#8217;ve tested it and are satisfied that the changes are stable, so let&#8217;s merge them into the master branch.</p>
<p><code>$ git checkout master<br />
$ git merge session-secret</code></p>
<p>Now let&#8217;s do a quick review of the changes between our development system and our GitHub repository.</p>
<p><code>$ git diff origin/master</code></p>
<p>The changes look OK, so let&#8217;s push the master branch up to the origin repository.</p>
<p><code>$ git push origin master</code></p>
<p>With everything up-to-date, our work is a wrap.</p>
<p>Since Friday, development on the upstream repository has continued.  My changes have been pulled in, and changes from other developers have been committed.</p>
<p>Let&#8217;s fetch the upstream repository and review the changes.</p>
<p><code>$ git fetch upstream<br />
$ git diff upstream/master</code></p>
<p>The changes pass our review, so we will merge them straight into our master branch.</p>
<p><code>$ git merge upstream/master</code></p>
<p>Now, let&#8217;s examine the status of our local clone.  Since we just pulled in changes from the upstream repository, our forked repository on GitHub is now out-of-date.</p>
<p><code>$ git status<br />
# On branch master<br />
# Your branch is ahead of 'origin/master' by 1 commit.<br />
#<br />
nothing to commit (working directory clean)</code></p>
<p>It&#8217;s our goal to track changes as closely as possible, keeping all repositories up-to-date, so let&#8217;s go ahead and push the new changes into our repository.</p>
<p><code>$ git push origin master</code></p>
<p>Since we are tidying up, we will also delete our session-secret branch from both the local and remote repository.  The changes it contained have been merged into the upstream repository, so the branch is no longer needed.</p>
<p><code>$ git branch -d session-secret<br />
$ git push origin :session-secret</code></p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/I5RrUMqXDLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/02/09/working-on-forked-projects-using-github/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2011/02/09/working-on-forked-projects-using-github/</feedburner:origLink></item>
		<item>
		<title>Web vs. App Confusion</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/xEiYF3wYuOw/</link>
		<comments>http://www.backdrifter.com/2010/12/08/web-vs-app-confusion/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 21:14:14 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[chromeos]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ios]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=319</guid>
		<description><![CDATA[Google held a event yesterday focused on their various Chrome-related initiatives: Chrome, Chrome OS, and Chrome Web Store. TechCrunch was there, reporting the announcements as they were made.
Habits die hard with me, especially when a certain amount of nostalgia is involved, so I’m still using Firefox as my primary browser.  However, I’m deeply impressed [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/">Google</a> held a event yesterday focused on their various Chrome-related initiatives: <a href="http://www.google.com/chrome/">Chrome</a>, <a href="http://www.google.com/chromeos/">Chrome OS</a>, and <a href="https://chrome.google.com/webstore/">Chrome Web Store</a>. <a href="http://techcrunch.com/">TechCrunch</a> was there, <a href="http://techcrunch.com/2010/12/07/live-from-googles-chrome-event-chrome-os-web-store-and-more/">reporting</a> the announcements as they were made.</p>
<p>Habits die hard with me, especially when a certain amount of nostalgia is involved, so I’m still using <a href="http://www.mozilla.com/firefox/">Firefox</a> as my primary browser.  However, I’m deeply impressed with Chrome, both as a user and as a developer, and have been meaning to make the switch for a while.</p>
<p>I’m feeling the a sense of urgency to do so now, if only to wrap my mind around what is occuring with Chrome OS and Chrome Web Store.  Both of these projects raise a lot of questions, and cause a lot of confusion, because they represent some fundamental shifts in how we experience the web.</p>
<p><span id="more-319"></span></p>
<p>Chrome OS is the most nebulous of these projects.  What does it mean for the browser blur the lines into OS and window manager? How does it relate to <a href="http://www.android.com/">Android</a>? Even Google seems a bit hazy with its answers to these questions, so I’m willing leaving them open until the air clears.</p>
<p>Chrome Web Store is a reality today, however, so I’ve been trying to understand what impact it may have.  What I’m most struck by the tension between the web and apps.</p>
<p>As content has moved into the cloud, interaction has moved into the browser, and applications have become hosted remotely.  Google is a primary beneficiary of this trend, and they’ve been leading the way in adopting <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">Ajax</a> technologies (combining <a href="http://en.wikipedia.org/wiki/HTML">HTML</a>, <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a>, and <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>), and encouraging others to do so as well.</p>
<p><a href="http://www.apple.com/">Apple</a>, with <a href="http://www.apple.com/ios/">iOS</a> and the App Store, offers a platform that reverses the trend in some ways.  Content often remains in the cloud, but applications are installed locally and interaction moves to the device.  Development, using <a href="http://en.wikipedia.org/wiki/Objective-C">Objective-C</a> and <a href="http://developer.apple.com/technologies/mac/cocoa.html">Cocoa</a> frameworks, follows a more traditional approach from the desktop era, but carried forward into the mobile future.</p>
<p>I think much of this tension is created by the use of technologies with such traditionally different uses.  Desktop development has always been application-centric, whereas web development has historically been document-centric.  <a href="http://en.wikipedia.org/wiki/HTML5">HTML5</a>, continuing the trend started by Ajax, brings a full-fledged application framework to the browser.</p>
<p>Yet, in many cases, we are still struggling cleanly categorize these technologies based on past notions.  For example, read this <a href="http://code.google.com/chrome/webstore/docs/index.html">explanation</a> Google offers when defining the concept of apps in the Chrome Web Store documentation:</p>
<blockquote><p>
An installable web app can be a normal website with a bit of extra metadata; this type of app is called a <b>hosted app</b>. Alternatively, an installable web app can bundle all its content into an archive that users download when they install the app; this is a <b>packaged app</b>. Both hosted and packaged apps have icons in Chrome&#8217;s New Tab page, and most users shouldn&#8217;t be able to tell the difference between them without looking at the address bar.
</p></blockquote>
<p>Note the need to explicitly define the difference between a local (packaged) app and a remote (hosted) app.</p>
<p>The nature of the web is rapidly changing.  Constant connectivity means we, as developers, get to shift content storage and data processing between the server and client in any number of ways.  A broad continuum exists that will defy efforts at categorization.  Instead, we should strive to understand the nuances of each approach and balance them according to application requirements.</p>
<p>This train of thought was sparked by an <a href="http://techcrunch.com/2010/12/07/google-chrome-apps-the-widget-economy-is-back/">article</a> on TechCrunch in which <a href="http://www.bigwidelogic.com/">John Biggs</a> points out the confusion between sites, apps, widgets, and whatnot.  He closes with this advice:</p>
<blockquote><p>
What needs to happen is this: folks like Netflix need to build XBox and Roku-like apps for Chrome and Chrome OS. This will allow users to browse, select, and watch movies from their browsers.
</p></blockquote>
<p>Let’s remind ourselves that people <a href="http://www.youtube.com/watch?v=o4MwTvtyrUQ">don’t know</a> what a browser is, and that specific technologies <a href="http://www.backdrifter.com/2008/01/17/what-is-a-web-browser/">don’t matter</a>.  The web encompasses everything, and it is very much <a href="http://www.wired.com/magazine/2010/08/ff_webrip/">alive</a>.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/xEiYF3wYuOw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2010/12/08/web-vs-app-confusion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2010/12/08/web-vs-app-confusion/</feedburner:origLink></item>
		<item>
		<title>Think Different</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/9GQtXq6_t3E/</link>
		<comments>http://www.backdrifter.com/2010/11/28/think-different/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 21:37:08 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[inspiration]]></category>
		<category><![CDATA[stevejobs]]></category>
		<category><![CDATA[thinkdifferent]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=303</guid>
		<description><![CDATA[Cult of Mac recently sat down with John Sculley for an interview, in which he describes Steve Jobs and the methodology he uses to build products.  Jobs is undisputably the premier modern “captain of industry,” and the observations and insights in the interview are fascinating.
The pair shared power at Apple until Jobs was forced [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cultofmac.com/">Cult of Mac</a> recently <a href="http://www.cultofmac.com/john-sculley-the-secrets-of-steve-jobs-success-exclusive-interview/21572">sat down</a> with <a href="http://www.johnsculley.com/">John Sculley</a> for an <a href="http://www.cultofmac.com/john-sculley-on-steve-jobs-the-full-interview-transcript/63295">interview</a>, in which he describes Steve Jobs and the methodology he uses to build products.  Jobs is undisputably the premier modern “<a href="http://en.wikipedia.org/wiki/Captain_of_industry">captain of industry</a>,” and the observations and insights in the interview are fascinating.</p>
<p>The pair shared power at <a href="http://www.apple.com/">Apple</a> until Jobs was forced to resign after losing a power struggle.  Apple’s struggles after that time brought it to the brink of its existence, until Jobs returned in 1997 and revitalized the company he founded.  Regarding the timing, Scully remarks:</p>
<blockquote><p>I’m actually convinced that if Steve hadn’t come back when he did — if they had waited another six months — Apple would have been history. It would have been gone, absolutely gone.</p>
<p>What did he do? He turned it right back to where it was — as though he never left. He went all the way back.</p></blockquote>
<p><span id="more-303"></span></p>
<p>As evidence of that, this <a href="http://www.youtube.com/watch?v=vmG9jzCHtSQ">video</a> (via <a href="http://kottke.org/10/09/think-different">Jason Kottke</a>) highlights one of Jobs&#8217; first tasks after taking back the helm: getting Apple on track with their branding.</p>
<p><center><br />
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/vmG9jzCHtSQ?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vmG9jzCHtSQ?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
</center></p>
<p>Jobs goes all the way back to Apple&#8217;s core value, which he defines:</p>
<blockquote><p>We believe that people with passion can change the world for the better.</p></blockquote>
<p>From there, he uses his brilliant marketing talents and introduces the memorable <a href="http://en.wikipedia.org/wiki/Think_different">&#8220;Think different.&#8221;</a> campaign.</p>
<blockquote><p>Think different honors those people who have changed the world.</p></blockquote>
<p>The <a href="http://www.youtube.com/watch?v=4oAB83Z1ydE">commercial</a> is inspiring.  I&#8217;m capturing it here, because it is worth reflecting on.</p>
<p><center><br />
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/4oAB83Z1ydE?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4oAB83Z1ydE?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
</center></p>
<blockquote><p>
Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes.</p>
<p>The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo. You can quote them, disagree with them, glorify or vilify them.</p>
<p>About the only thing you can’t do is ignore them. Because they change things. They push the human race forward.</p>
<p>And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.
</p></blockquote>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/9GQtXq6_t3E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2010/11/28/think-different/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2010/11/28/think-different/</feedburner:origLink></item>
		<item>
		<title>What If… Questions for Reinventing Management</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/JH8qNMQPECM/</link>
		<comments>http://www.backdrifter.com/2010/11/10/what-if-questions-for-reinventing-management/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 16:55:59 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[garyhamel]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[umairhaque]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=281</guid>
		<description><![CDATA[A tweet by Tim O&#8217;Reilly came through my stream the other day, which I followed to Managment Innovation eXchange, in order to read the leading questions.  As expected, they are intriguing.
Many businesses tout themselves as radical and disruptive.  This is especially true in places like the Bay Area, where small startups with fast-paced, [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://twitter.com/timoreilly/status/1732683428274176">tweet</a> by <a href="http://tim.oreilly.com/">Tim O&#8217;Reilly</a> came through my stream the other day, which I followed to <a href="http://www.managementexchange.com/">Managment Innovation eXchange</a>, in order to read the leading questions.  As expected, they are intriguing.</p>
<p>Many businesses tout themselves as radical and disruptive.  This is especially true in places like the Bay Area, where small startups with fast-paced, development-driven cultures are trying to develop the next innovative technology.</p>
<p>Building a startup into a successful company requires growth in many areas, including employees and customers.  This growth brings with it significant challenges, which often require a difficult transition in how the company operates.  As leadership and management functions evolve in an organization, it&#8217;s important to retain the same culture of innovation.</p>
<p>The questions asked by MIX are intended to be thought-provoking, as they aim to reinvent management for the 21st century.  Indeed, I found them interesting enough that I decided to collect them here.</p>
<p><span id="more-281"></span></p>
<p><b>What if&#8230;</b></p>
<blockquote><p>we were led by values rather than controlled by bosses?</p></blockquote>
<blockquote><p>your company felt less like a bureaucracy and more like a community?</p></blockquote>
<blockquote><p>you could offer a dissenting opinion without jeopardizing your job?</p></blockquote>
<blockquote><p>we didn&#8217;t go to work for a company but dedicated ourselves to a cause?</p></blockquote>
<blockquote><p>we spoke the language of honor, truth, love, justice, and, beauty inside our organizations?</p></blockquote>
<blockquote><p>the short-term didn&#8217;t always trump the long-term and the urgent never displaced the important?</p></blockquote>
<blockquote><p>our organizations were truly open to the world?</p></blockquote>
<blockquote><p>decision-making reflected more collective wisdom and less politics?</p></blockquote>
<blockquote><p>power flowed to those who add value and away from those who don&#8217;t?</p></blockquote>
<blockquote><p>making a difference was just as important as making the numbers?</p></blockquote>
<blockquote><p>our management systems were designed to amplify imagination and unleash contribution?</p></blockquote>
<blockquote><p>work felt like play?</p></blockquote>
<blockquote><p>the only way to win was to figure out a way for everybody to win?</p></blockquote>
<blockquote><p>our companies were as human as the human beings inside them?</p></blockquote>
<blockquote><p>people spent a lot less time cutting red tape and a lot more time inventing the future?</p></blockquote>
<blockquote><p>you didn&#8217;t need permission to try something new?</p></blockquote>
<blockquote><p>management education was designed to enlighten and ennoble as much as to promote?</p></blockquote>
<blockquote><p>our organizations were highly adaptable, endlessly inventive, and truly inspiring?</p></blockquote>
<blockquote><p>management values matched up to management behaviors?</p></blockquote>
<blockquote><p>direction came from the bottom-up and the outside-in as much as from the top-down?</p></blockquote>
<blockquote><p>organizations grew without losing human scale?</p></blockquote>
<blockquote><p>we had such a compelling sense of purpose it would spell the end of micromanaging?</p></blockquote>
<blockquote><p>your company&#8217;s measurement systems captured the things that really create value?</p></blockquote>
<blockquote><p>every leader in your company was someone actually worth following?</p></blockquote>
<blockquote><p>our organizations actually deserved the very best that every employee can give?</p></blockquote>
<blockquote><p>more people in your company challenged the status quo than defended it?</p></blockquote>
<blockquote><p>big ideas were never squashed by little minds?</p></blockquote>
<blockquote><p>your company had no secrets from you, its customers, the world?</p></blockquote>
<blockquote><p>leaders placed as much emphasis on experimentation as on planning?</p></blockquote>
<blockquote><p>authority and influence had nothing to do with your hierarchical postion and everything to do with your ability to lead?</p></blockquote>
<blockquote><p>innovation was something that happened because of the system, rather than in spite of it?</p></blockquote>
<blockquote><p>every company was great at discovering great ideas and contributions from beyond its borders?</p></blockquote>
<blockquote><p>leaders dropped &#8220;command and control&#8221; for &#8220;motivate and mentor&#8221;?</p></blockquote>
<blockquote><p>our work answered the question, &#8220;What&#8217;s worth my life?&#8221;</p></blockquote>
<blockquote><p>people inside companies were freed by trust instead of ruled by fear?</p></blockquote>
<blockquote><p>we valued diversity, disagreement, and divergence highly as conformance, consensus, and cohesion?</p></blockquote>
<p>As I was reading the questions, I couldn&#8217;t help recalling the ideas of <a href="http://blogs.hbr.org/haque/">Umair Haque</a>, whose articles on <a href="http://blogs.hbr.org/haque/2008/02/whats_your_companys_dna.html">strategy</a> seem designed as answers to many of the questions asked. That&#8217;s no surprise, as <a href="http://www.garyhamel.com/">Gary Hamel</a>, who Haque <a href="http://blogs.hbr.org/haque/2008/04/comment_response_to_strategy_c.html">cites</a> as a mentor, is one of the people behind MIX.</p>
<p>There are some real gems in there.  Let me know your favorites in the comments.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/JH8qNMQPECM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2010/11/10/what-if-questions-for-reinventing-management/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2010/11/10/what-if-questions-for-reinventing-management/</feedburner:origLink></item>
		<item>
		<title>Stack Level Too Deep with RSpec 2 and Webrat</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/JksGYYHxbas/</link>
		<comments>http://www.backdrifter.com/2010/11/07/stack-level-too-deep-with-rspec-2-and-webrat/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 19:54:33 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[webrat]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=253</guid>
		<description><![CDATA[I&#8217;m currently following along with the Ruby on Rails Tutorial, hoping to pick up some tips and improve my understanding of Rails 3.  I recommend the tutorial, especially to people just learning Rails.  For those with more experience, you&#8217;ll find certain aspects to be a bit elementary.  However, I&#8217;m personally appreciating the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently following along with the <a href="http://railstutorial.org/book">Ruby on Rails Tutorial</a>, hoping to pick up some tips and improve my understanding of <a href="http://rubyonrails.org/">Rails</a> 3.  I recommend the tutorial, especially to people just learning Rails.  For those with more experience, you&#8217;ll find certain aspects to be a bit elementary.  However, I&#8217;m personally appreciating the focus on testing throughout the development process.</p>
<p>The Rails community is still catching up to the recently released Rails 3.  <a href="http://rspec.info/">RSpec</a>, which the tutorial recommends for testing, is no exception.  RSpec 2 is the latest version, and the first to bring compatibility with Rails 3.  However, I&#8217;m finding that there are still a few kinks that need to be worked out.</p>
<p>Most of the issues I&#8217;ve encountered have been easy to solve.  However, I encountered a particularly frustrating problem dealing with the interrelation between <a href="https://github.com/rspec/rspec-rails">rspec-rails</a> and <a href="https://github.com/brynary/webrat">webrat</a>, which is described in this <a href="https://github.com/rspec/rspec-rails/issues/#issue/140">issue</a>.  It is a known problem that has been variously fixed and re-broken by commits to the two libraries in question.</p>
<p><span id="more-253"></span></p>
<p>When executing an integration test using the following code:<br />
<code style="text-align: left;"><br />
describe "LayoutLinks" do<br />
&nbsp;&nbsp;describe "GET /" do<br />
&nbsp;&nbsp;&nbsp;&nbsp;it "should have a Home page at '/'" do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get '/'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.should have_selector('title', :content => "Home")<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end<br />
</code></p>
<p>A failure is reported:<br />
<code><br />
Failures:<br />
&nbsp;&nbsp;1) LayoutLinks GET / should have a Home page at '/'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Failure/Error: response.should have_selector('title', :content => "Home")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack level too deep<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ./spec/requests/layout_links_spec.rb:8<br />
</code></p>
<p>I haven&#8217;t traced down the exact issue, but it appears to be caused by webrat 0.7.2, and its interaction with both rspec-rails 2.0.1 and 2.1.0.  I attempted upgrading to webrat 0.7.2.beta.2, but that did not resolve the issue. However, <i>downgrading</i> to webrat 0.7.1 did.</p>
<p>Simply specify the following in your Gemfile:<br />
<code><br />
group :test do<br />
&nbsp;&nbsp;gem "webrat", "0.7.1"<br />
end<br />
</code></p>
<p>Execute <code>bundle install</code> to use webrat 0.7.1 and the error will be resolved.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/JksGYYHxbas" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2010/11/07/stack-level-too-deep-with-rspec-2-and-webrat/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2010/11/07/stack-level-too-deep-with-rspec-2-and-webrat/</feedburner:origLink></item>
		<item>
		<title>Skype Announces A Future Announcement</title>
		<link>http://feeds.backdrifter.com/~r/backdrifter/~3/hVEJmcJmlNM/</link>
		<comments>http://www.backdrifter.com/2010/06/22/skype-announces-a-future-announcement/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 18:21:39 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[facetime]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[skypekit]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=244</guid>
		<description><![CDATA[As I was going through my morning routine, scanning news feeds and sipping coffee, my attention was grabbed by the TechCrunch headline &#8220;Skype Opens Up SkypeKit SDK To All Devices And Desktop Apps.&#8221;  Being a developer and wanting deeper technical details, I eagerly click on over to SkypeKit.  Rather than the detail I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>As I was going through my morning routine, scanning news feeds and sipping coffee, my attention was grabbed by the <a href="http://techcrunch.com/">TechCrunch</a> headline <a href="http://techcrunch.com/2010/06/22/skype-skypekit-sdk/">&#8220;Skype Opens Up SkypeKit SDK To All Devices And Desktop Apps.&#8221;</a>  Being a developer and wanting deeper technical details, I eagerly click on over to <a href="http://developer.skype.com/public/skypekit">SkypeKit</a>.  Rather than the detail I&#8217;m expecting, I&#8217;m greeted with marketing fluff concluded with this final sentence:</p>
<blockquote><p>Developers can register for an invitation to the SkypeKit Beta Program beginning on July 23.</p></blockquote>
<p>So, let me get this straight.  You&#8217;re announcing that I can sign up for a future announcement.  Gee, thanks!</p>
<p><span id="more-244"></span></p>
<p>Despite the fact that this behavior disillusions me, I understand the <strike>pragmatic</strike> reasons why people in <a href="http://www.skype.com/">Skype</a>&#8217;s management and marketing department would be motivated to do this.</p>
<p>Skype&#8217;s announcement coincides with the imminent release of <a href="http://www.apple.com/iphone/">iPhone 4</a>.  In the past few years, <a href="http://www.apple.com/">Apple</a> has dramatically changed the communications landscape with the iPhone.  The latest device includes the biggest revolution since the original iPhone: <a href="http://www.apple.com/iphone/features/facetime.html">FaceTime</a>, which allows iPhone-to-iPhone video calling.  Incidentally, FaceTime also represents the biggest threat Skype has ever encountered.</p>
<p>FaceTime is set to catapult <a href="http://en.wikipedia.org/wiki/Voice_over_IP">VoIP</a> straight into mainstream mobile devices, using <a href="http://www.ietf.org/">IETF</a>-approved open standards <a href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol">SIP</a> and <a href="http://en.wikipedia.org/wiki/Real-time_Transport_Protocol">RTP</a>.  Apple has promised to make their extensions open as well.  When that happens, FaceTime will proliferate on applications and devices other than the iPhone.  Skype, meanwhile, has let innovation stagnate around an entrenched, but proprietary protocol.  The leverage they hold in the protocol is about to be eliminated.</p>
<p>They know it too.  Let&#8217;s look at the initial <a href="http://blogs.skype.com/devzone/2010/06/skypekit_beta.html">statements</a> given in response given to the &#8220;open&#8221; question:</p>
<blockquote><p>
<b>Is SkypeKit ‘open’? What will you restrict?</b><br />
The topic of openness is often debated and its definition can mean different things to different people. For starters, we believe in an open Internet and open standards.
</p></blockquote>
<p>Next time, just answer &#8220;no.&#8221;  If you believe in open standards, back it up by providing protocol specifications.  At this point, it&#8217;s tough for me to look at what Skype is offering and see it as the future of communications.  Open standards have marched forward, while Skype has stood still.</p>
<img src="http://feeds.feedburner.com/~r/backdrifter/~4/hVEJmcJmlNM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2010/06/22/skype-announces-a-future-announcement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.backdrifter.com/2010/06/22/skype-announces-a-future-announcement/</feedburner:origLink></item>
	</channel>
</rss>

