<?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>Pivotal Labs &#187; mac</title>
	<atom:link href="http://pivotallabs.com/tag/mac/feed/" rel="self" type="application/rss+xml" />
	<link>http://pivotallabs.com</link>
	<description>Agility Developed</description>
	<lastBuildDate>Sat, 25 May 2013 16:52:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Use Autospec to Your Advantage</title>
		<link>http://pivotallabs.com/use-autospec-to-your-advantage/</link>
		<comments>http://pivotallabs.com/use-autospec-to-your-advantage/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 06:15:00 +0000</pubDate>
		<dc:creator>Pivotal Labs</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[autotest]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/use-autospec-to-your-advantage/</guid>
		<description><![CDATA[<p><p>I like Autotest because it allows me to stay within my code editor and let my test suite run automatically in the background. After each run I get a nice, unobtrusive, growl notification informing me whether my most recent change caused the tests to fail or pass.</p>

<p>It used to be that setting up and configuring Autotest for the OS X with pretty growl notifications was a nontrivial task. I remember that I spent several hours getting it working a year ago. However, there has been <a href="http://www.bitcetera.com/en/techblog/2009/05/27/mac-friendly-autotest/" title="Mac Friendly Autotest">several developments</a> with Autotest in recent months that greatly simplify the process. One of those enhancements is that Autotest can now use FSEvent introduced in OS X Leopard so that it no longer has to continuously poll the filesystem. This has the advantage of vastly reducing Autotest's CPU usage when idle.</p> <a href="http://pivotallabs.com/use-autospec-to-your-advantage/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/use-autospec-to-your-advantage/">Use Autospec to Your Advantage</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I like Autotest because it allows me to stay within my code editor and let my test suite run automatically in the background. After each run I get a nice, unobtrusive, growl notification informing me whether my most recent change caused the tests to fail or pass.</p>
<p>It used to be that setting up and configuring Autotest for the OS X with pretty growl notifications was a nontrivial task. I remember that I spent several hours getting it working a year ago. However, there has been <a href="http://www.bitcetera.com/en/techblog/2009/05/27/mac-friendly-autotest/" title="Mac Friendly Autotest">several developments</a> with Autotest in recent months that greatly simplify the process. One of those enhancements is that Autotest can now use FSEvent introduced in OS X Leopard so that it no longer has to continuously poll the filesystem. This has the advantage of vastly reducing Autotest&#8217;s CPU usage when idle.</p>
<h2>Install Autotest</h2>
<p>To setup Autotest on a Mac I recommend following this nice, up-to-date, <a href="http://www.viget.com/extend/how-why-to-run-autotest-on-your-mac/" title="How to run Autotest on your Mac">walkthrough</a> on the Viget Labs Blog.</p>
<h2>Using Autotest with RSpec</h2>
<p>Complete instructions for Autotest integration with RSpec are described on the <a href="http://wiki.github.com/dchelimsky/rspec/autotest-integration" title="RSpec Autotest Integration">RSpec wiki</a>. The gist of it is this:</p>
<p><strong>Add an initialize hook to Autotest</strong></p>
<p>Place the following code snippet in a file called <code>.autotest</code> in the root of your Rails project:</p>
<pre><code>Autotest.add_hook&#40;:initialize&#41; {|at|
  at.add_exception %r{^.git}  # ignore Version Control System
  at.add_exception %r{^./tmp}  # ignore temp files, lest autotest will run again, and again...
  #  at.clear_mappings         # take out the default &#40;test/test*rb&#41;
  at.add_mapping&#40;%r{^lib/.*.rb$}&#41; {|f, _|
    Dir['spec/**/*.rb']
  }
  nil
}
</code></pre>
<p><strong>Start Autospec in Terminal</strong></p>
<p><code>RUBYLIB=./lib RUBYOPT=-rubygems AUTOFEATURE=true autospec</code></p>
<p>To avoid typing or remembering this cumbersome set of options to start autospec, I added it as an alias to my bash environment.</p>
<p><code>alias autospec='RUBYLIB=./lib RUBYOPT=-rubygems AUTOFEATURE=true autospec'</code></p>
<h3>Autotest Alternative</h3>
<p>For using Autotest with RSpec there is also the <a href="http://github.com/mislav/rspactor/">RSpactor</a> gem which touts advantages homogeneous to those provided by the new autotest-fsevent. I have not tried RSpactor yet. If you do be sure to check out the <a href="http://wiki.github.com/mislav/rspactor">RSpactor wiki</a> as there is no README on Github.</p>
<h2>Notes</h2>
<ul>
<li><strong>I do not recommend using Autotest/Autospec with RubyMine.</strong> The auto save feature of RubyMine would cause Autotest to run incessantly.</li>
<li>Sometimes autospec seems to hang after running for a while and stops detecting that a file has changed. When this happens I send a SIGINT to the process by pressing CTRL+C. This causes autospec to reload and run the entire test suite.</li>
<li>To kill autospec press CTRL+C twice.</li>
</ul>
<p>The post <a href="http://pivotallabs.com/use-autospec-to-your-advantage/">Use Autospec to Your Advantage</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/use-autospec-to-your-advantage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git config push.default matching</title>
		<link>http://pivotallabs.com/git-config-push-default-matching/</link>
		<comments>http://pivotallabs.com/git-config-push-default-matching/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 23:29:00 +0000</pubDate>
		<dc:creator>Alex Chaffee</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/git-config-push-default-matching/</guid>
		<description><![CDATA[<p><p>Upgraded to git 1.6.3 yet? You should, and <a href="http://jasonrudolph.com/blog/2009/05/27/git-up-10-reasons-to-upgrade-your-old-git-installation/">Jason Rudolph says why</a> &#40;and if you're on a Mac, <a href="http://robsanheim.com/2009/01/14/upgrading-git-via-macports/">Rob Sanheim says how</a>.&#41;</p>

<p>Sadly, after you do upgrade, when you start doing "git push", your console will start to be littered with the following oddly patronizing message:</p>

<pre><code>warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches &#40;default&#41;
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch
</code></pre>

<p>While I'm generally in favor of verbose warnings, this one is kind of bizarre. Essentially, it's saying, "Warning! The command you just ran will continue to operate exactly as it did before!" Guys, telling us about new options is great but that's what release notes are for.</p>

<p>Worse, they don't provide keystroke-level instruction beyond the offhand gerund "configuring" on how to shush it. Here's the result of my 8-minute speluking inside the output of "git help config":</p>

<pre><code>git config push.default matching
</code></pre>

<p>[Or, thanks to Alastair Brunton below</p>

<pre><code>git config --global push.default matching
</code></pre>

<p>] </p>

<p>There, now, that wasn't so hard after all, was it?</p> <a href="http://pivotallabs.com/git-config-push-default-matching/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/git-config-push-default-matching/">git config push.default matching</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Upgraded to git 1.6.3 yet? You should, and <a href="http://jasonrudolph.com/blog/2009/05/27/git-up-10-reasons-to-upgrade-your-old-git-installation/">Jason Rudolph says why</a> &#40;and if you&#8217;re on a Mac, <a href="http://robsanheim.com/2009/01/14/upgrading-git-via-macports/">Rob Sanheim says how</a>.&#41;</p>
<p>Sadly, after you do upgrade, when you start doing &#8220;git push&#8221;, your console will start to be littered with the following oddly patronizing message:</p>
<pre><code>warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches &#40;default&#41;
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch
</code></pre>
<p>While I&#8217;m generally in favor of verbose warnings, this one is kind of bizarre. Essentially, it&#8217;s saying, &#8220;Warning! The command you just ran will continue to operate exactly as it did before!&#8221; Guys, telling us about new options is great but that&#8217;s what release notes are for.</p>
<p>Worse, they don&#8217;t provide keystroke-level instruction beyond the offhand gerund &#8220;configuring&#8221; on how to shush it. Here&#8217;s the result of my 8-minute speluking inside the output of &#8220;git help config&#8221;:</p>
<pre><code>git config push.default matching
</code></pre>
<p>[Or, thanks to Alastair Brunton below</p>
<pre><code>git config --global push.default matching
</code></pre>
<p>] </p>
<p>There, now, that wasn&#8217;t so hard after all, was it?</p>
<p>The post <a href="http://pivotallabs.com/git-config-push-default-matching/">git config push.default matching</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/git-config-push-default-matching/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Standup 03/09/2009</title>
		<link>http://pivotallabs.com/standup-03-09-2009/</link>
		<comments>http://pivotallabs.com/standup-03-09-2009/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 22:24:00 +0000</pubDate>
		<dc:creator>Mike Grafton</dc:creator>
				<category><![CDATA[Standup]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[rubymine]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/standup-03-09-2009/</guid>
		<description><![CDATA[<p><h1>Help</h1>

<blockquote>
    <p><em>How do you make a Mac not sleep?</em></p>
</blockquote>

<p>Use the Energy Saver section of the System Preferences.</p>

<h1>Interesting</h1>

<ul>
<li><p>RubyMine 749 is out.  Many of the existing bugs have been fixed, but a few new ones have been found.  Notably, running specs with a "#" character in the describe string has problems.</p></li>
<li><p>The USPS has a nifty <a href="http://www.usps.com/webtools/address.htm">web service for addresses</a>.   The zip code lookup &#40;which gives you zip+4&#41; and the address standardization services were found to be useful.</p></li>
</ul> <a href="http://pivotallabs.com/standup-03-09-2009/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/standup-03-09-2009/">Standup 03/09/2009</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h1>Help</h1>
<blockquote>
<p><em>How do you make a Mac not sleep?</em></p>
</blockquote>
<p>Use the Energy Saver section of the System Preferences.</p>
<h1>Interesting</h1>
<ul>
<li>
<p>RubyMine 749 is out.  Many of the existing bugs have been fixed, but a few new ones have been found.  Notably, running specs with a &#8220;#&#8221; character in the describe string has problems.</p>
</li>
<li>
<p>The USPS has a nifty <a href="http://www.usps.com/webtools/address.htm">web service for addresses</a>.   The zip code lookup &#40;which gives you zip+4&#41; and the address standardization services were found to be useful.</p>
</li>
</ul>
<p>The post <a href="http://pivotallabs.com/standup-03-09-2009/">Standup 03/09/2009</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/standup-03-09-2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Best Remote Pairing Settings 2008</title>
		<link>http://pivotallabs.com/best-remote-pairing-settings-revisited/</link>
		<comments>http://pivotallabs.com/best-remote-pairing-settings-revisited/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 10:50:00 +0000</pubDate>
		<dc:creator>Chad Woolley</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[remote]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/best-remote-pairing-settings-revisited/</guid>
		<description><![CDATA[<p><p>About a year and a half ago, I made <a href="http://pivots.pivotallabs.com/users/chad/blog/articles/216-best-remote-pairing-settings">two</a> <a href="http://pivots.pivotallabs.com/users/chad/blog/articles/217-best-remote-pairing-audio-video-options">posts</a> on the "Best Remote Pairing Settings".</p>

<p><img src="http://assets.pivotallabs.com/177/original/chad_remote_pair.jpg" alt="A Remote Pair" /></p>

<p>The world has moved on, and so has the state of the art in remote pairing.  I work remote 75% of the time, so this is an important topic for me.  The setup we have now is working pretty good, so I wanted to describe it for the benefit of other remoties.  Also, I'm only going to describe one specific setup - the one that is currently working best for me.  So, here it is:</p>

<h2>Computer and OS</h2>

<p><strong>Macintoshes running OS X 10.5 &#40;Leopard&#41; and maxed out on ram &#40;at least 2 gig+&#41;, with a second monitor, ideally a 24".</strong></p>

<p>Pivotal uses 24" <a href="http://www.apple.com/imac/">iMacs</a> <a href="http://flickr.com/photos/thewoolleyman/2996286345/in/set-72157608596834086/">exclusively</a>.  This lets you have your remote pair's screen up on the second monitor, while still having the primary iMac screen available for local work &#40;configuration, looking stuff up, temporary soloing, etc&#41;.  You must be very disciplined and up-front - you should be explicit about when you are paying attention to your pair and when you are not, but that's a whole other topic.</p>

<p>Also, at my home office, I have an iMac which I use for screen sharing, but I usually run the Skype audio/video on my MacBook.  This takes the CPU load off of the iMac, which is important, because Skype is a CPU hog &#40;more on that later&#41;.</p>

<h2>Screen Sharing Software</h2>

<p><strong><a href="http://docs.info.apple.com/article.html?path=Mac/10.5/en/14066.html">Apple Screen Sharing</a> which comes with Leopard.</strong></p>

<p>Apple has done a nice job making the screen sharing app perform well, and the most important feature for any remote pairing screen sharing tool is performance.  In my opinion, it performs better than any other VNC client on any platform, assuming you have a good connection &#40;possibly excluding some windows native-video-hook solutions like UltraVNC or Remote Desktop, but there's no way I would ever use Windows for development&#41;. All VNC clients which use the <a href="http://www.realvnc.com/docs/rfbproto.pdf">standard RFB Protocol</a> can only be tweaked so much, and will only give you mediocre performance.  However, there are several annoying bugs and gotchas with Apple Screen Sharing:</p>

<ul>
<li>It is hard to find.  Look under /System/Library/CoreServices/Screen Sharing.app.  It is easiest to use Spotlight/Quicksilver or drag it to your dock.  Supposedly you can start it with iChat but this never worked for me, I had to run the app directly.</li>
<li>Most of the useful features are disabled by default with no way to access them via menu or toolbar buttons.  This is an amazingly annoying decision by Apple, but it is fairly easy to hack the toolbar buttons back into existence.  Here is a <a href="http://www.macworld.com/article/135649/2008/09/screen_sharing_buttons.html">Macworld tutorial showing two options</a>.  </li>
</ul>

<p>In general, it seems that the best remote-control tools are those with some sort of native/low-level GUI integration: Leopard Screen Sharing, NoMachine NX, UltraVNC, Windows Remote Desktop, etc.  Higher-level platform agnostic tools &#40;like standard VNC/RFB protocol&#41; just don't perform as well - no matter how much you tweak the available color/depth/etc settings.</p>

<h2>Audio/Video Hardware</h2>

<p><strong><a href="http://www.plantronics.com">Plantronics</a> GamePro USB Headset</strong></p>

<p>This is a great headset, and you need a really good headset if you are going to wear it all day, every day.  Cloth earpieces, mic cover, very long cord, and I believe it also has some echo cancellation built in &#40;there's a huge box inline in the cord that does something&#41;.  Unfortunately, I don't see the exact model on the <a href="http://www.plantronics.com">Plantronics website</a> anymore.  It may be replaced by the "GameCom" model, but I haven't tried this.</p>

<p><strong>Built-in iMac Microphone/Speaker</strong></p>

<p>The built-in microphone and speaker on iMacs is really good.  If you want to talk to a group of people remotely &#40;for example, project standup&#41;, this is the way to do it.  However, if the ambient noise gets too much, you can switch back to the headset.</p>

<p>You can even combine the two.  For example, if you want to hear the surrounding conversations, but your pair is having trouble hearing you over the noise, then can wear the headset, but still keep the input set to the built-in iMac mic.</p>

<p>Sometimes you will need to adjust the input/output levels to reduce echo, and the remote pair should handle this themselves - they know what it sounds like.</p>

<p><strong>Built-in iMac camera</strong></p>

<p>Just like the built-in iMac mic and speaker, the iSight is a great camera.  A detached iSight is just as good, if you want to be able to move it around or aim it without moving the computer.</p>

<h2>Audio/Video Software</h2>

<p><strong><a href="http://www.skype.com">Skype</a></strong></p>

<p>Skype is the best I've found.  It does have drawbacks: it crashes rather frequently, it sucks a lot of CPU, it can do bad things to your network if you become a supernode, and it doesn't support video in conferences.</p>

<p>However, it has great echo cancellation, it is free, and easy to use.  The echo cancellation is really the most important thing - all other audio conferencing tools I've tried seem to have much more issues with echoes - even when you are using echo-cancelling hardware devices or speakerphones.</p>

<p>Some people seem to like iChat, but I have not had good luck with it.  It takes longer than Skype to connect, the echo cancellation is not as good &#40;sometimes it is, sometimes not&#41;, and most annoyingly, it doesn't always close.  I often end up having to force quit it - which is even more annoying when it is stuck on a freeze-frame of me making a stupid face or scratching my nose.  Skype never does this - video always goes away when you shut your video or kill the call.</p>

<p>iChat has video conferencing, though, which is a benefit.  You can sort of work around this by putting up the video preview in iChat, and having multiple remote people connect to view it via screen sharing, if you only want to see video for one of the participants &#40;e.g. a couple of remote people calling in to a company meeting&#41;.</p>

<h2>Network, Network, Network</h2>

<p>This is the last but most important component to usable remote pairing.  A fast, low-latency network connection is critical.  I don't have any numbers, but I believe that low latency is at least as important as high bandwidth.  I also &#40;without proof&#41; believe that ping is not necessarily a good indicator of latency - I bet it is possible to have a good ping &#40;ICMP&#41; but still have issues with TCP/UDP latency.  Who knows what's going on in the tubes between you and your pair?  Any data, tools, or insight on this would be very welcome.</p>

<p>As empirical evidence, for the first year or two at Pivotal I had DSL, which was pretty fast with low ping, but had continual problems with performance.  Then, I switched to corporate-grade cable with a significantly higher bandwidth limit.  My experience improved dramatically and my problems decreased greatly.  This was about the same time I switched to Leopard screen sharing, so I think that had something to do with it, but the better connection definitely made a huge difference.  Again, sorry I don't have more concrete numbers, but I will guarantee that the better your connection, the better your experience will be.  </p>

<p>Also, if you are in a corporate network, this may cause you problems.  Even if there is a big pipe to your location, there may be saturation on your local LANs or intranet.  Again, no hard data, but this is backed up by experiences of having consistently better performance when connecting to another remote at-home pair with a good connection as opposed to connecting to the Pivotal office which has a much larger pipe.</p>

<h2>Remote Pairing Presentation at RailsConf 2008</h2>

<ul>
<li>At RailsConf 2008, Michael Buffington and Joe O'Brien did a <a href="http://en.oreilly.com/rails2008/public/schedule/detail/1924">good presentation on Remote Pairing</a>.  This is a very good presentation which covered many important aspects of remote pairing, as well as presenting some innovative ideas.  Unfortunately, I don't see a <a href="http://en.oreilly.com/rails2008/public/schedule/proceedings">link to the preso</a>, please post one in the comments if you have it.</li>
</ul>

<h2>Summary</h2>

<p>This isn't meant to be the be-all, end-all set of recommendations, it's just what is working pretty well for me now.  By "pretty well", I mean that I can be an efficient pair, even when I'm driving the remote machine.  </p>

<p>However, I've learned to cope with a lot, and adapted my work habits.  It has forced me to become much better at communication, and describing what, why, and how I am programming.  In general, though, I believe that remote pairing is physically, emotionally, and intellectually taxing.  Regardless, I personally deal with it because Pivotal is such an awesome place to work and Pivots are such incredible developers.  Most importantly, I come out in person for a week every month, attend retrospectives and brownbags, have some beers, and generally stay "entangled" with the rest of the team in person.  If I was 100% remote, I don't think I could handle it long-term.</p>

<p>So, I hope this helps out all the other remoties out there.  Please let me know what you think, your experiences, and what works well for you.</p> <a href="http://pivotallabs.com/best-remote-pairing-settings-revisited/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/best-remote-pairing-settings-revisited/">Best Remote Pairing Settings 2008</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>About a year and a half ago, I made <a href="http://pivots.pivotallabs.com/users/chad/blog/articles/216-best-remote-pairing-settings">two</a> <a href="http://pivots.pivotallabs.com/users/chad/blog/articles/217-best-remote-pairing-audio-video-options">posts</a> on the &#8220;Best Remote Pairing Settings&#8221;.</p>
<p><img src="http://assets.pivotallabs.com/177/original/chad_remote_pair.jpg" alt="A Remote Pair" /></p>
<p>The world has moved on, and so has the state of the art in remote pairing.  I work remote 75% of the time, so this is an important topic for me.  The setup we have now is working pretty good, so I wanted to describe it for the benefit of other remoties.  Also, I&#8217;m only going to describe one specific setup &#8211; the one that is currently working best for me.  So, here it is:</p>
<h2>Computer and OS</h2>
<p><strong>Macintoshes running OS X 10.5 &#40;Leopard&#41; and maxed out on ram &#40;at least 2 gig+&#41;, with a second monitor, ideally a 24&#8243;.</strong></p>
<p>Pivotal uses 24&#8243; <a href="http://www.apple.com/imac/">iMacs</a> <a href="http://flickr.com/photos/thewoolleyman/2996286345/in/set-72157608596834086/">exclusively</a>.  This lets you have your remote pair&#8217;s screen up on the second monitor, while still having the primary iMac screen available for local work &#40;configuration, looking stuff up, temporary soloing, etc&#41;.  You must be very disciplined and up-front &#8211; you should be explicit about when you are paying attention to your pair and when you are not, but that&#8217;s a whole other topic.</p>
<p>Also, at my home office, I have an iMac which I use for screen sharing, but I usually run the Skype audio/video on my MacBook.  This takes the CPU load off of the iMac, which is important, because Skype is a CPU hog &#40;more on that later&#41;.</p>
<h2>Screen Sharing Software</h2>
<p><strong><a href="http://docs.info.apple.com/article.html?path=Mac/10.5/en/14066.html">Apple Screen Sharing</a> which comes with Leopard.</strong></p>
<p>Apple has done a nice job making the screen sharing app perform well, and the most important feature for any remote pairing screen sharing tool is performance.  In my opinion, it performs better than any other VNC client on any platform, assuming you have a good connection &#40;possibly excluding some windows native-video-hook solutions like UltraVNC or Remote Desktop, but there&#8217;s no way I would ever use Windows for development&#41;. All VNC clients which use the <a href="http://www.realvnc.com/docs/rfbproto.pdf">standard RFB Protocol</a> can only be tweaked so much, and will only give you mediocre performance.  However, there are several annoying bugs and gotchas with Apple Screen Sharing:</p>
<ul>
<li>It is hard to find.  Look under /System/Library/CoreServices/Screen Sharing.app.  It is easiest to use Spotlight/Quicksilver or drag it to your dock.  Supposedly you can start it with iChat but this never worked for me, I had to run the app directly.</li>
<li>Most of the useful features are disabled by default with no way to access them via menu or toolbar buttons.  This is an amazingly annoying decision by Apple, but it is fairly easy to hack the toolbar buttons back into existence.  Here is a <a href="http://www.macworld.com/article/135649/2008/09/screen_sharing_buttons.html">Macworld tutorial showing two options</a>.  </li>
</ul>
<p>In general, it seems that the best remote-control tools are those with some sort of native/low-level GUI integration: Leopard Screen Sharing, NoMachine NX, UltraVNC, Windows Remote Desktop, etc.  Higher-level platform agnostic tools &#40;like standard VNC/RFB protocol&#41; just don&#8217;t perform as well &#8211; no matter how much you tweak the available color/depth/etc settings.</p>
<h2>Audio/Video Hardware</h2>
<p><strong><a href="http://www.plantronics.com">Plantronics</a> GamePro USB Headset</strong></p>
<p>This is a great headset, and you need a really good headset if you are going to wear it all day, every day.  Cloth earpieces, mic cover, very long cord, and I believe it also has some echo cancellation built in &#40;there&#8217;s a huge box inline in the cord that does something&#41;.  Unfortunately, I don&#8217;t see the exact model on the <a href="http://www.plantronics.com">Plantronics website</a> anymore.  It may be replaced by the &#8220;GameCom&#8221; model, but I haven&#8217;t tried this.</p>
<p><strong>Built-in iMac Microphone/Speaker</strong></p>
<p>The built-in microphone and speaker on iMacs is really good.  If you want to talk to a group of people remotely &#40;for example, project standup&#41;, this is the way to do it.  However, if the ambient noise gets too much, you can switch back to the headset.</p>
<p>You can even combine the two.  For example, if you want to hear the surrounding conversations, but your pair is having trouble hearing you over the noise, then can wear the headset, but still keep the input set to the built-in iMac mic.</p>
<p>Sometimes you will need to adjust the input/output levels to reduce echo, and the remote pair should handle this themselves &#8211; they know what it sounds like.</p>
<p><strong>Built-in iMac camera</strong></p>
<p>Just like the built-in iMac mic and speaker, the iSight is a great camera.  A detached iSight is just as good, if you want to be able to move it around or aim it without moving the computer.</p>
<h2>Audio/Video Software</h2>
<p><strong><a href="http://www.skype.com">Skype</a></strong></p>
<p>Skype is the best I&#8217;ve found.  It does have drawbacks: it crashes rather frequently, it sucks a lot of CPU, it can do bad things to your network if you become a supernode, and it doesn&#8217;t support video in conferences.</p>
<p>However, it has great echo cancellation, it is free, and easy to use.  The echo cancellation is really the most important thing &#8211; all other audio conferencing tools I&#8217;ve tried seem to have much more issues with echoes &#8211; even when you are using echo-cancelling hardware devices or speakerphones.</p>
<p>Some people seem to like iChat, but I have not had good luck with it.  It takes longer than Skype to connect, the echo cancellation is not as good &#40;sometimes it is, sometimes not&#41;, and most annoyingly, it doesn&#8217;t always close.  I often end up having to force quit it &#8211; which is even more annoying when it is stuck on a freeze-frame of me making a stupid face or scratching my nose.  Skype never does this &#8211; video always goes away when you shut your video or kill the call.</p>
<p>iChat has video conferencing, though, which is a benefit.  You can sort of work around this by putting up the video preview in iChat, and having multiple remote people connect to view it via screen sharing, if you only want to see video for one of the participants &#40;e.g. a couple of remote people calling in to a company meeting&#41;.</p>
<h2>Network, Network, Network</h2>
<p>This is the last but most important component to usable remote pairing.  A fast, low-latency network connection is critical.  I don&#8217;t have any numbers, but I believe that low latency is at least as important as high bandwidth.  I also &#40;without proof&#41; believe that ping is not necessarily a good indicator of latency &#8211; I bet it is possible to have a good ping &#40;ICMP&#41; but still have issues with TCP/UDP latency.  Who knows what&#8217;s going on in the tubes between you and your pair?  Any data, tools, or insight on this would be very welcome.</p>
<p>As empirical evidence, for the first year or two at Pivotal I had DSL, which was pretty fast with low ping, but had continual problems with performance.  Then, I switched to corporate-grade cable with a significantly higher bandwidth limit.  My experience improved dramatically and my problems decreased greatly.  This was about the same time I switched to Leopard screen sharing, so I think that had something to do with it, but the better connection definitely made a huge difference.  Again, sorry I don&#8217;t have more concrete numbers, but I will guarantee that the better your connection, the better your experience will be.  </p>
<p>Also, if you are in a corporate network, this may cause you problems.  Even if there is a big pipe to your location, there may be saturation on your local LANs or intranet.  Again, no hard data, but this is backed up by experiences of having consistently better performance when connecting to another remote at-home pair with a good connection as opposed to connecting to the Pivotal office which has a much larger pipe.</p>
<h2>Remote Pairing Presentation at RailsConf 2008</h2>
<ul>
<li>At RailsConf 2008, Michael Buffington and Joe O&#8217;Brien did a <a href="http://en.oreilly.com/rails2008/public/schedule/detail/1924">good presentation on Remote Pairing</a>.  This is a very good presentation which covered many important aspects of remote pairing, as well as presenting some innovative ideas.  Unfortunately, I don&#8217;t see a <a href="http://en.oreilly.com/rails2008/public/schedule/proceedings">link to the preso</a>, please post one in the comments if you have it.</li>
</ul>
<h2>Summary</h2>
<p>This isn&#8217;t meant to be the be-all, end-all set of recommendations, it&#8217;s just what is working pretty well for me now.  By &#8220;pretty well&#8221;, I mean that I can be an efficient pair, even when I&#8217;m driving the remote machine.  </p>
<p>However, I&#8217;ve learned to cope with a lot, and adapted my work habits.  It has forced me to become much better at communication, and describing what, why, and how I am programming.  In general, though, I believe that remote pairing is physically, emotionally, and intellectually taxing.  Regardless, I personally deal with it because Pivotal is such an awesome place to work and Pivots are such incredible developers.  Most importantly, I come out in person for a week every month, attend retrospectives and brownbags, have some beers, and generally stay &#8220;entangled&#8221; with the rest of the team in person.  If I was 100% remote, I don&#8217;t think I could handle it long-term.</p>
<p>So, I hope this helps out all the other remoties out there.  Please let me know what you think, your experiences, and what works well for you.</p>
<p>The post <a href="http://pivotallabs.com/best-remote-pairing-settings-revisited/">Best Remote Pairing Settings 2008</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/best-remote-pairing-settings-revisited/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>How to tell Apple/DotMac/MobileMe Backup that .Trash is trash</title>
		<link>http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/</link>
		<comments>http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 02:14:00 +0000</pubDate>
		<dc:creator>Alex Chaffee</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/</guid>
		<description><![CDATA[<p><p>First of all, fie on Apple for giving both their cloud storage service and their backup program names that are almost completely google-proof. They've recently corrected one of those by renaming "dot mac" to "MobileMe" but calling your backup program "Backup" is a great way to make it really hard to investigate. It's like, imagine how hard it would be to do a background check on someone named John Doe.</p>

<p>So I use the <a href="http://support.apple.com/kb/HT1061">Dot Mac Backup</a> and it works pretty smoothly, which is the second most important feature in a backup program. &#40;The most important feature is the ability to actually restore files.&#41; But then one day it said that to incrementally back up my "Home Minus Media" set -- the set containing my Home Folder, but excluding big-ticket items like Music, Movies, Backups, Downloads, and so on -- would require 63 DVDs. WTF?</p>

<p>It turned out that the problem occurred after I trashed a few old DVD rips that I had finished watching, and the culprit was the directory <code>/Users/chaffee/.Trash</code>. Seems like the UI was helpfully excluding it from the list of subdirectories of <code>/Users/chaffee</code>, it being a system file and all, so I couldn't mark it to exclude. That's OK, I think, I'm a power user, so I'll just check the box that says "Show invisible system files."</p>

<p>Except there's no such box. Try as I might, I can't find a way to exclude the Trash folder from the UI. I had to dig into the file system and edit Backup's own data file, as follows.</p> <a href="http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/">How to tell Apple/DotMac/MobileMe Backup that .Trash is trash</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>First of all, fie on Apple for giving both their cloud storage service and their backup program names that are almost completely google-proof. They&#8217;ve recently corrected one of those by renaming &#8220;dot mac&#8221; to &#8220;MobileMe&#8221; but calling your backup program &#8220;Backup&#8221; is a great way to make it really hard to investigate. It&#8217;s like, imagine how hard it would be to do a background check on someone named John Doe.</p>
<p>So I use the <a href="http://support.apple.com/kb/HT1061">Dot Mac Backup</a> and it works pretty smoothly, which is the second most important feature in a backup program. &#40;The most important feature is the ability to actually restore files.&#41; But then one day it said that to incrementally back up my &#8220;Home Minus Media&#8221; set &#8212; the set containing my Home Folder, but excluding big-ticket items like Music, Movies, Backups, Downloads, and so on &#8212; would require 63 DVDs. WTF?</p>
<p>It turned out that the problem occurred after I trashed a few old DVD rips that I had finished watching, and the culprit was the directory <code>/Users/chaffee/.Trash</code>. Seems like the UI was helpfully excluding it from the list of subdirectories of <code>/Users/chaffee</code>, it being a system file and all, so I couldn&#8217;t mark it to exclude. That&#8217;s OK, I think, I&#8217;m a power user, so I&#8217;ll just check the box that says &#8220;Show invisible system files.&#8221;</p>
<p>Except there&#8217;s no such box. Try as I might, I can&#8217;t find a way to exclude the Trash folder from the UI. I had to dig into the file system and edit Backup&#8217;s own data file, as follows.</p>
<ul>
<li>In Backup, create a backup set and exclude at least one item in it</li>
<li>Quit the Backup app</li>
<li>In Finder, open up <code>~/Library/Application Support/Backup/BackupSets</code></li>
<li>There will be a list of randomly named <code>.backupset</code> folders. Each contains a folder named <code>Contents</code>. For each, use Quick Look &#40;hit Space&#41; on and a file named <code>InfoPlist.strings</code> to find the one containing your set.</li>
</ul>
<p><img src="http://s3.amazonaws.com/assets.pivotallabs.com/101/original/backup_set.png" alt="Finding your backup set" /></p>
<ul>
<li>Open its sibling named <code>User.quickpick</code> in a text editor like TextMate.</li>
<li>The &#8220;quickpick&#8221; file is actually a folder, so open up the file buried under there named <code>DefinitionPlist.strings</code></li>
<li>Find the section &#8220;Prune Paths&#8221; and add an entry for <code>~/.Trash</code></li>
</ul>
<p><img src="http://s3.amazonaws.com/assets.pivotallabs.com/110/original/definitionplist.png" alt="Prune Paths" /></p>
<ul>
<li>Save the file and relaunch Backup.</li>
</ul>
<p>You should see the &#8220;<code>.Trash</code>&#8221; entry excluded as if you had clicked on it &#8212; which you would have if they had showed you the silly thing in the first place.</p>
<p><img src="http://s3.amazonaws.com/assets.pivotallabs.com/103/original/no_trash.png" alt="No Trash" /></p>
<p>As you can see from the screenshot, I&#8217;ve still got some excess gigabytes to hunt down and exclude, but at least I won&#8217;t get burned the next time I erase a metric buttload of pr0n&#8211; uh, I mean, content I legally acquired and temporarily transferred onto my personal computer in compliance with the DMCA.</p>
<p>The post <a href="http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/">How to tell Apple/DotMac/MobileMe Backup that .Trash is trash</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/how-to-tell-apple-dot-mac-backup-that-trash-is-trash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA_HOME on Mac OS X</title>
		<link>http://pivotallabs.com/java-home-on-mac-os-x/</link>
		<comments>http://pivotallabs.com/java-home-on-mac-os-x/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 01:57:00 +0000</pubDate>
		<dc:creator>Alex Chaffee</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/java-home-on-mac-os-x/</guid>
		<description><![CDATA[<p><p>For the millionth time, cause I always forget... </p>

<p>Put this in ~/.bashrc:</p>

<pre><code>export JAVA_HOME=/Library/Java/Home
</code></pre>

<p>[UPDATE: or this, which according to Mike Swingler, follows the Java version chosen in Java Preferences:</p>

<pre><code>export JAVA_HOME=`/usr/libexec/java_home`
</code></pre>

<p>]</p>

<p>Also, run "sudo visudo" and add the line</p>

<pre><code>Defaults        env_keep += "JAVA_HOME"
</code></pre>

<p>or else commands like "sudo gem install" won't be able to find Java.</p>

<p>Without the above, I got the following error &#40;which seemed to have been run through a baby-talk filter&#41; when running "sudo gem install rjb":</p>

<pre><code>extconf.rb:44: JAVA_HOME is not setted. &#40;RuntimeError&#41;
</code></pre> <a href="http://pivotallabs.com/java-home-on-mac-os-x/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/java-home-on-mac-os-x/">JAVA_HOME on Mac OS X</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>For the millionth time, cause I always forget&#8230; </p>
<p>Put this in ~/.bashrc:</p>
<pre><code>export JAVA_HOME=/Library/Java/Home
</code></pre>
<p>[UPDATE: or this, which according to Mike Swingler, follows the Java version chosen in Java Preferences:</p>
<pre><code>export JAVA_HOME=`/usr/libexec/java_home`
</code></pre>
<p>]</p>
<p>Also, run &#8220;sudo visudo&#8221; and add the line</p>
<pre><code>Defaults        env_keep += "JAVA_HOME"
</code></pre>
<p>or else commands like &#8220;sudo gem install&#8221; won&#8217;t be able to find Java.</p>
<p>Without the above, I got the following error &#40;which seemed to have been run through a baby-talk filter&#41; when running &#8220;sudo gem install rjb&#8221;:</p>
<pre><code>extconf.rb:44: JAVA_HOME is not setted. &#40;RuntimeError&#41;
</code></pre>
<p>The post <a href="http://pivotallabs.com/java-home-on-mac-os-x/">JAVA_HOME on Mac OS X</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/java-home-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Removing Old Ruby Source Installation After a Leopard Upgrade</title>
		<link>http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/</link>
		<comments>http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 22:38:00 +0000</pubDate>
		<dc:creator>Chad Woolley</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rubygems]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/</guid>
		<description><![CDATA[<p><p><a href="http://flickr.com/photos/archangeli/193096013/">
<img src="http://s3.amazonaws.com/assets.pivotallabs.com/80/original/ruby_slippers.jpg" alt="Removing Ruby" />
</a></p>

<p>I just upgraded to Leopard on my Mac.  Previously, on Tiger, I had installed Ruby from source, in the default /usr/local/lib prefix.  After reading the <a href="http://groups.google.com/group/ruby-talk-google/browse_thread/thread/47bee7e58a4ed143/5bf876513f98013d?lnk=raot">discussion</a> on the <a href="http://ruby.macosforge.org/">Apple-provided Ruby installation</a>, I decided to try it - mainly to ensure that <a href="http://geminstaller.rubyforge.org">my apps, such as GemInstaller</a>, play well with it &#40;on Pivotal's Mac pair workstations, we still install Ruby from source, so everything matches our demo/production environments as closely as possible, and things are in consistent locations&#41;.</p>

<p>So, I wanted to uninstall the old Ruby source installation, and only have the Apple-provided Ruby on disk.  Googling for a few minutes did not provide exact instructions for this, so I'm writing up what I did, in hopes that it will help you!</p>

<p>I didn't use the "--prefix" option when I originally installed Ruby from source, so it was in the default location of /usr/local/lib/ruby, with binaries in /usr/local/bin.</p>

<p>WARNING: Use 'rm -rf' at your own risk - a sleep-deprived encounter with 'rm -rf' and a stray file named '~' is what "motivated" my Leopard upgrade in the first place...</p>

<p>First, I deleted the old ruby libraries/gems, which was easy enough, because they all lived under /usr/local/bin/ruby:</p>

<pre><code>sudo rm -rf /usr/local/lib/ruby
</code></pre>

<p>However, this left all the old ruby/gems executables in /usr/local/bin.  This resulted in errors when trying to run executable gems that I had not yet installed under the Apple Ruby installation:</p>

<pre><code>$ cheat
/usr/local/bin/cheat:9:in `require': no such file to load -- rubygems &#40;LoadError&#41;
from /usr/local/bin/cheat:9
</code></pre>

<p>Instead of a cryptic rubygems error, I should get a 'file not found error':</p>

<pre><code>$ sudo rm /usr/local/bin/cheat
$ cheat
-bash: /usr/local/bin/cheat: No such file or directory
</code></pre>

<p>So, I want to purge everything ruby-releated from my /usr/local/bin folder.  I whipped up a quick ruby one-liner which just prints out &#40;almost&#41; all ruby-related files in /usr/local/bin:</p>

<pre>
ruby -e &#34;old_ruby_execs = `egrep 'rubygems&#124;bin/ruby&#124;env ruby' /usr/local/bin/*`; require 'pp'; pp old_ruby_execs.split&#40;&#34;n&#34;&#41;.collect{&#124;line&#124; line.split&#40;':'&#41;.first}.uniq&#34;
</pre>

<p>Yeah, I know, ugly and obtuse, but one-liners are kind of fun, and help me remember that Ruby is great tool for sysadmin scripts.  Feel free to put it in a class and test it if you are so inclined.</p>

<p>Even though I tried to make a fairly specific regexp for egrep, when inspecting that list, I did find a 'jgem' file, which was part of JRuby.  I'm planning on reinstalling JRuby anyway, so I didn't care if that got deleted along with the other ruby stuff.</p>

<p>Anyway, if the output of that looks like everything you want to delete, then run this one-liner to do the actual deed &#40;the 'sudo echo' is to 'prime' the sudo auth, so you don't get a noninteractive password prompt&#41;:</p>

<pre>
sudo echo; ruby -e &#34;old_ruby_execs = `egrep 'rubygems&#124;bin/ruby&#124;env ruby' /usr/local/bin/*`; old_ruby_execs.split&#40;&#34;n&#34;&#41;.collect{&#124;line&#124; line.split&#40;':'&#41;.first}.uniq.each { &#124;exec&#124; p 'removing ' + exec; `sudo rm #{exec}`}&#34;
</pre>

<p>After that, the only thing that I saw left was the 'ruby' executable itself, which I whacked as well:</p>

<pre><code>$ sudo rm /usr/local/bin/ruby
</code></pre>

<p>That seems to be about it, as least good enough to get all the old invalid executables off my path.  I'm sure this could have been done cleaner if I had taken more care with the original source install.  However, a good brute-force approach never hurt anyone.  Much.  Feel free to post links to relevant and helpful stuff.</p> <a href="http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/">Removing Old Ruby Source Installation After a Leopard Upgrade</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/archangeli/193096013/"><br />
<img src="http://s3.amazonaws.com/assets.pivotallabs.com/80/original/ruby_slippers.jpg" alt="Removing Ruby" /><br />
</a></p>
<p>I just upgraded to Leopard on my Mac.  Previously, on Tiger, I had installed Ruby from source, in the default /usr/local/lib prefix.  After reading the <a href="http://groups.google.com/group/ruby-talk-google/browse_thread/thread/47bee7e58a4ed143/5bf876513f98013d?lnk=raot">discussion</a> on the <a href="http://ruby.macosforge.org/">Apple-provided Ruby installation</a>, I decided to try it &#8211; mainly to ensure that <a href="http://geminstaller.rubyforge.org">my apps, such as GemInstaller</a>, play well with it &#40;on Pivotal&#8217;s Mac pair workstations, we still install Ruby from source, so everything matches our demo/production environments as closely as possible, and things are in consistent locations&#41;.</p>
<p>So, I wanted to uninstall the old Ruby source installation, and only have the Apple-provided Ruby on disk.  Googling for a few minutes did not provide exact instructions for this, so I&#8217;m writing up what I did, in hopes that it will help you!</p>
<p>I didn&#8217;t use the &#8220;&#8211;prefix&#8221; option when I originally installed Ruby from source, so it was in the default location of /usr/local/lib/ruby, with binaries in /usr/local/bin.</p>
<p>WARNING: Use &#8216;rm -rf&#8217; at your own risk &#8211; a sleep-deprived encounter with &#8216;rm -rf&#8217; and a stray file named &#8216;~&#8217; is what &#8220;motivated&#8221; my Leopard upgrade in the first place&#8230;</p>
<p>First, I deleted the old ruby libraries/gems, which was easy enough, because they all lived under /usr/local/bin/ruby:</p>
<pre><code>sudo rm -rf /usr/local/lib/ruby
</code></pre>
<p>However, this left all the old ruby/gems executables in /usr/local/bin.  This resulted in errors when trying to run executable gems that I had not yet installed under the Apple Ruby installation:</p>
<pre><code>$ cheat
/usr/local/bin/cheat:9:in `require': no such file to load -- rubygems &#40;LoadError&#41;
from /usr/local/bin/cheat:9
</code></pre>
<p>Instead of a cryptic rubygems error, I should get a &#8216;file not found error&#8217;:</p>
<pre><code>$ sudo rm /usr/local/bin/cheat
$ cheat
-bash: /usr/local/bin/cheat: No such file or directory
</code></pre>
<p>So, I want to purge everything ruby-releated from my /usr/local/bin folder.  I whipped up a quick ruby one-liner which just prints out &#40;almost&#41; all ruby-related files in /usr/local/bin:</p>
<pre>
ruby -e &quot;old_ruby_execs = `egrep 'rubygems|bin/ruby|env ruby' /usr/local/bin/*`; require 'pp'; pp old_ruby_execs.split&#40;&quot;n&quot;&#41;.collect{|line| line.split&#40;':'&#41;.first}.uniq&quot;
</pre>
<p>Yeah, I know, ugly and obtuse, but one-liners are kind of fun, and help me remember that Ruby is great tool for sysadmin scripts.  Feel free to put it in a class and test it if you are so inclined.</p>
<p>Even though I tried to make a fairly specific regexp for egrep, when inspecting that list, I did find a &#8216;jgem&#8217; file, which was part of JRuby.  I&#8217;m planning on reinstalling JRuby anyway, so I didn&#8217;t care if that got deleted along with the other ruby stuff.</p>
<p>Anyway, if the output of that looks like everything you want to delete, then run this one-liner to do the actual deed &#40;the &#8216;sudo echo&#8217; is to &#8216;prime&#8217; the sudo auth, so you don&#8217;t get a noninteractive password prompt&#41;:</p>
<pre>
sudo echo; ruby -e &quot;old_ruby_execs = `egrep 'rubygems|bin/ruby|env ruby' /usr/local/bin/*`; old_ruby_execs.split&#40;&quot;n&quot;&#41;.collect{|line| line.split&#40;':'&#41;.first}.uniq.each { |exec| p 'removing ' + exec; `sudo rm #{exec}`}&quot;
</pre>
<p>After that, the only thing that I saw left was the &#8216;ruby&#8217; executable itself, which I whacked as well:</p>
<pre><code>$ sudo rm /usr/local/bin/ruby
</code></pre>
<p>That seems to be about it, as least good enough to get all the old invalid executables off my path.  I&#8217;m sure this could have been done cleaner if I had taken more care with the original source install.  However, a good brute-force approach never hurt anyone.  Much.  Feel free to post links to relevant and helpful stuff.</p>
<p>The post <a href="http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/">Removing Old Ruby Source Installation After a Leopard Upgrade</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/removing-old-ruby-after-a-leopard-upgrade/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CPU Leak</title>
		<link>http://pivotallabs.com/cpu-leak/</link>
		<comments>http://pivotallabs.com/cpu-leak/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 20:42:00 +0000</pubDate>
		<dc:creator>Alex Chaffee</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/cpu-leak/</guid>
		<description><![CDATA[<p><p>I just had to quit Firefox for the umpteenth time because it was taking up 25% of my CPU and 1.5 GB of virtual memory. It makes my lap hot and burns down my battery and activates my fan and slows down my click response time. I have no idea if it was Gmail or Google Reader or one of the other JS-heavy apps and frankly, I'm sick of guessing.</p>

<p>Let's face it: the browser is an operating system. It's time it started acting like one.</p>

<p>Here's what I want my next browser to do:</p>

<ul>
<li>Put every tab's JS in its own thread or process space</li>
<li>Pause that process when I switch tabs &#40;i.e. I don't want Gmail to check for incoming mail or chats unless it's in a visible tab&#41;</li>
<li>Show me a list of the CPU and memory usage of each JS slice like "top" or the Windows process monitor and allow me to kill them without restarting my browser</li>
<li>Same goes for Flash but even moreso: I want every seizure-inducing, focus-stealing, ringtone-blaring flash app to be individually killable and blockable</li>
<li>Show me the content of the page <strong>now</strong> even if some stupid ad or web bug or analytics script on a different server is slow to load</li>
</ul>

<p>And for Santa's sake when I tell you to quit don't swap in every little JS object and free it individually. Throw the whole heap away and quit, damn your eyes!</p>

<p>OK? OK.</p> <a href="http://pivotallabs.com/cpu-leak/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/cpu-leak/">CPU Leak</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I just had to quit Firefox for the umpteenth time because it was taking up 25% of my CPU and 1.5 GB of virtual memory. It makes my lap hot and burns down my battery and activates my fan and slows down my click response time. I have no idea if it was Gmail or Google Reader or one of the other JS-heavy apps and frankly, I&#8217;m sick of guessing.</p>
<p>Let&#8217;s face it: the browser is an operating system. It&#8217;s time it started acting like one.</p>
<p>Here&#8217;s what I want my next browser to do:</p>
<ul>
<li>Put every tab&#8217;s JS in its own thread or process space</li>
<li>Pause that process when I switch tabs &#40;i.e. I don&#8217;t want Gmail to check for incoming mail or chats unless it&#8217;s in a visible tab&#41;</li>
<li>Show me a list of the CPU and memory usage of each JS slice like &#8220;top&#8221; or the Windows process monitor and allow me to kill them without restarting my browser</li>
<li>Same goes for Flash but even moreso: I want every seizure-inducing, focus-stealing, ringtone-blaring flash app to be individually killable and blockable</li>
<li>Show me the content of the page <strong>now</strong> even if some stupid ad or web bug or analytics script on a different server is slow to load</li>
</ul>
<p>And for Santa&#8217;s sake when I tell you to quit don&#8217;t swap in every little JS object and free it individually. Throw the whole heap away and quit, damn your eyes!</p>
<p>OK? OK.</p>
<p>The post <a href="http://pivotallabs.com/cpu-leak/">CPU Leak</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/cpu-leak/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Multi-clipboard for Mac</title>
		<link>http://pivotallabs.com/multi-clipboard-for-mac/</link>
		<comments>http://pivotallabs.com/multi-clipboard-for-mac/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 01:27:00 +0000</pubDate>
		<dc:creator>Alex Chaffee</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/multi-clipboard-for-mac/</guid>
		<description><![CDATA[<p><p>IntelliJ IDEA has a great feature: if you hit control-shift-V you see a list of the ten most recent selections you cut or copied onto the clipboard. Here are two ways to get the same thing on all Mac OS X apps.</p>

<hr />

<h3>Quicksilver's "Clipboard" and "Shelf" plugins</h3>

<ul>
<li><a href="http://theappleblog.com/2006/10/24/quicksilver-screencast-the-clipboard/">Video demo of the QuickSilver clipboard</a></li>
<li><a href="http://www.lifehacker.com/software/mac-os-x/how-to-use-quicksilvers-shelf-111278.php">Using the Shelf module</a></li>
</ul>

<p>Bottom line: </p>

<ol>
<li>In QS preferences, go to &#40;top menu&#41; Plugins / &#40;left menu&#41; AllPlugins</li>
<li>Check the 'Clipboard Module' and the 'Shelf Module' so that they get installed</li>
<li>Bounce QS</li>
<li>Go back into QS preferences and go to &#40;top menu&#41; Preferences / &#40;left menu&#41; Clipboard to tweak your clipboard size and behavior</li>
<li>Now copy some text from some app</li>
<li>Now hit Command-Space, then immediately afterwards once QS comes up Command-L to see the Clipboard History window pop up for you.</li>
</ol>

<p>I think the Shelf module lets you store clips permanently, but I haven't figured out how to use it yet. </p>

<hr />

<h3>JumpCut</h3>

<ul>
<li><a href="http://jumpcut.sourceforge.net">JumpCut project</a> at SourceForge</li>
</ul>

<p>A scissors icon will appear in your menu bar. Whenever you cut or copy a text item, it'll be added to that menu. Clippings can also be accessed
by a hotkey &#40;default is Control-Option-V.&#41; A little window like the one you see when using the application switcher or the brightness controls will appear. While holding the modifier keys , use the arrow keys to scroll through the stack.</p> <a href="http://pivotallabs.com/multi-clipboard-for-mac/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/multi-clipboard-for-mac/">Multi-clipboard for Mac</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>IntelliJ IDEA has a great feature: if you hit control-shift-V you see a list of the ten most recent selections you cut or copied onto the clipboard. Here are two ways to get the same thing on all Mac OS X apps.</p>
<hr />
<h3>Quicksilver&#8217;s &#8220;Clipboard&#8221; and &#8220;Shelf&#8221; plugins</h3>
<ul>
<li><a href="http://theappleblog.com/2006/10/24/quicksilver-screencast-the-clipboard/">Video demo of the QuickSilver clipboard</a></li>
<li><a href="http://www.lifehacker.com/software/mac-os-x/how-to-use-quicksilvers-shelf-111278.php">Using the Shelf module</a></li>
</ul>
<p>Bottom line: </p>
<ol>
<li>In QS preferences, go to &#40;top menu&#41; Plugins / &#40;left menu&#41; AllPlugins</li>
<li>Check the &#8216;Clipboard Module&#8217; and the &#8216;Shelf Module&#8217; so that they get installed</li>
<li>Bounce QS</li>
<li>Go back into QS preferences and go to &#40;top menu&#41; Preferences / &#40;left menu&#41; Clipboard to tweak your clipboard size and behavior</li>
<li>Now copy some text from some app</li>
<li>Now hit Command-Space, then immediately afterwards once QS comes up Command-L to see the Clipboard History window pop up for you.</li>
</ol>
<p>I think the Shelf module lets you store clips permanently, but I haven&#8217;t figured out how to use it yet. </p>
<hr />
<h3>JumpCut</h3>
<ul>
<li><a href="http://jumpcut.sourceforge.net">JumpCut project</a> at SourceForge</li>
</ul>
<p>A scissors icon will appear in your menu bar. Whenever you cut or copy a text item, it&#8217;ll be added to that menu. Clippings can also be accessed<br />
by a hotkey &#40;default is Control-Option-V.&#41; A little window like the one you see when using the application switcher or the brightness controls will appear. While holding the modifier keys , use the arrow keys to scroll through the stack.</p>
<p>The post <a href="http://pivotallabs.com/multi-clipboard-for-mac/">Multi-clipboard for Mac</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/multi-clipboard-for-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatic invocation of multiple OS X terminal windows</title>
		<link>http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/</link>
		<comments>http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 03:35:00 +0000</pubDate>
		<dc:creator>Pivotal Labs</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/</guid>
		<description><![CDATA[<p><p><a href="http://akuaku.org/images/screens.png"><img src="http://akuaku.org/images/screens.png" width="450" /></a>
</p></p>

<p>As the righteous wave of Intel iMacs surges into the Pivotal Labs offices, more Pivots are finding themselves working with multiple OS X Terminal windows. The opening and positioning of terminal windows often follows the same pattern: cd into project directory, run mongrel, open next window, cd into project directory, tail the test log, etc.. To avoid violating <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>, I've hacked up some simple ruby scripts that automate the process. See my <a href="http://www.akuaku.org/archives/2007/03/automatic_termi.shtml">original post</a> for details and links to the scripts.</p>

<p>Now it's just a matter of running one command:
<code>
$ terminals.rb myproject
</code>
This opens up all of the standard windows from the project in their specified positions and running the right processes.</p> <a href="http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/">Automatic invocation of multiple OS X terminal windows</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://akuaku.org/images/screens.png"><img src="http://akuaku.org/images/screens.png" width="450" /></a>
</p>
</p>
<p>As the righteous wave of Intel iMacs surges into the Pivotal Labs offices, more Pivots are finding themselves working with multiple OS X Terminal windows. The opening and positioning of terminal windows often follows the same pattern: cd into project directory, run mongrel, open next window, cd into project directory, tail the test log, etc.. To avoid violating <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>, I&#8217;ve hacked up some simple ruby scripts that automate the process. See my <a href="http://www.akuaku.org/archives/2007/03/automatic_termi.shtml">original post</a> for details and links to the scripts.</p>
<p>Now it&#8217;s just a matter of running one command:<br />
<code><br />
$ terminals.rb myproject<br />
</code><br />
This opens up all of the standard windows from the project in their specified positions and running the right processes.</p>
<p>The post <a href="http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/">Automatic invocation of multiple OS X terminal windows</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/automatic-invokcation-of-multiple-os-x-terminal-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using apc
Database Caching 1/14 queries in 0.011 seconds using apc
Object Caching 1173/1276 objects using apc

 Served from: pivotallabs.com @ 2013-05-25 14:42:08 by W3 Total Cache -->