<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>+rw</title>
	<atom:link href="http://plusrw.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://plusrw.wordpress.com</link>
	<description>Reading and Writing the Web</description>
	<lastBuildDate>Thu, 16 Dec 2010 17:19:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='plusrw.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>+rw</title>
		<link>http://plusrw.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://plusrw.wordpress.com/osd.xml" title="+rw" />
	<atom:link rel='hub' href='http://plusrw.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Gemspecs</title>
		<link>http://plusrw.wordpress.com/2010/04/09/gemspecs/</link>
		<comments>http://plusrw.wordpress.com/2010/04/09/gemspecs/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 22:15:36 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=81</guid>
		<description><![CDATA[I don&#8217;t follow Yehuda Katz&#8217; blog (though I should) but he posted an article on basic gem configuration and build steps. It irks me to no end when I clone a git repo and run through the following process: &#62; gem build somegem.gemspec &#62; gem install ./ [write code using gem] &#62; run code #ERROR# [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=81&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t follow Yehuda Katz&#8217; blog (though I should) but he <a href="http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/">posted an article</a> on basic gem configuration and build steps.  It irks me to no end when I clone a git repo and run through the following process:</p>
<p>&gt; gem build somegem.gemspec<br />
&gt; gem install ./<br />
[write code using gem]<br />
&gt; run code<br />
#ERROR# some gem code is missing a file in &#8220;require_once&#8221;<br />
&gt; ls /path/to/gem/file/that/is/missing<br />
File not found:  /path/to/gem/file/that/is/missing<br />
&gt; cd /path/to/gem/repo<br />
&gt; ls  /path/to/gem/repo/path/to/gem/file/that/is/missing<br />
missing.rb<br />
&gt; rake build<br />
#ERROR# missing gem my_crappy_test_library<br />
&gt; gem install my_crappy_test_library<br />
&gt; rake build<br />
#ERROR# missing gem my_crappy_mock_library<br />
&gt; rake build<br />
OK<br />
&gt; gem install pkg/</p>
<p>When it could simply be:</p>
<p>&gt; gem build somegem.gemspec<br />
&gt; gem install ./<br />
[write code using gem]<br />
&gt; run code</p>
<p>The first scenario happens when someone uses a tool like jeweler to build their gemspec and forgets to commit the latest generated (or what should have been generated) gemspec.  Jewler likes to list every single file packaged with the gem, so the gemspec must be refreshed whenever a file is added or removed.  When writing a gemspec by hand one, can simply say &#8220;all the files in the lib directory are part of this gem.&#8221;  You can use a handy tool like a .gitignore to prevent unwanted files from appearing in your gem.</p>
<p>Why is this such a big issue?  Because, as Yehuda wrote, writing your own gemspec isn&#8217;t that hard.  In fact, it&#8217;s kind of enjoyable, being that it&#8217;s a Ruby DSL.  Ruby was designed to cause the lowest amount of pain for developers.  Our Ruby code should reflect that ethos.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/81/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=81&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2010/04/09/gemspecs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>Text to Speech on Mac OS X</title>
		<link>http://plusrw.wordpress.com/2010/04/06/text-to-speech-on-mac-os-x/</link>
		<comments>http://plusrw.wordpress.com/2010/04/06/text-to-speech-on-mac-os-x/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 03:20:17 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=75</guid>
		<description><![CDATA[My wife is a graduate student who spends most of her time reading a ton of articles for her classes.  Once a week, she has to drive an hour and a half to Detroit for work.  One night, she was worried that she&#8217;d have enough time to work in Detroit and read all of her [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=75&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My wife is a graduate student who spends most of her time reading a ton of articles for her classes.  Once a week, she has to drive an hour and a half to Detroit for work.  One night, she was worried that she&#8217;d have enough time to work in Detroit and read all of her articles.  The proverbial light bulb went off in my head and I remembered a feature that Mac OS X has had since Jaguar (2002): Text to Speech.</p>
<p>Previously, I could just select a block of text, then go to the current application menu, click &#8220;Services,&#8221; then &#8220;Speak selected text.&#8221;  However, Apple seems to have removed this feature in Snow Leopard.  After a little digging, I found it again.  Here&#8217;s how to get it working:</p>
<p>(Note: click the images to get a full view)</p>
<p>Open System Preferences (either click the spotlight search magnifying glass in the top left and type &#8220;System Preferences&#8221; or find System Preferences in the Applications folder).</p>
<p>Click the &#8220;Keyboard&#8221; icon toward the middle/top.</p>
<p>Click the &#8220;Keyboard Shortcuts&#8221; tab at the top.</p>
<p><a href="http://img.skitch.com/20100407-n5kiu1x9anhp54gwk6d4ne2y8j.jpg"><img class="alignnone" title="Keyboard Shortcuts" src="http://img.skitch.com/20100407-n5kiu1x9anhp54gwk6d4ne2y8j.jpg" alt="" width="620" height="550" /></a></p>
<p>In the left pane, select the &#8220;Services&#8221; item.  In the right pane, scroll down and check the box next to &#8220;Add to iTunes as a Spoken Track.&#8221;</p>
<p>This will add an item to the &#8220;Services&#8221; submenu when you open the main application menu in any program.</p>
<p>For example, let&#8217;s open a page in Safari and convert the text to speech.</p>
<p>We&#8217;ll go to <a href="http://www.jabberwocky.com/carroll/walrus.html">http://www.jabberwocky.com/carroll/walrus.html</a> and convert the poem to a sound file.</p>
<p>In Safari, browse to http://www.jabberwocky.com/carroll/walrus.html</p>
<p>Highlight all of the text.  It&#8217;s OK if some images get in there, they should be ignored by the Text to Speech conversion.</p>
<p>In the top menu (next to the Apple) click &#8220;Safari&#8221;, then click &#8220;Services&#8221; and then click &#8220;Add to iTunes as a Spoken Track.&#8221;</p>
<p><a href="http://img.skitch.com/20100407-jr8sjs3hbu5tb95ie81182a78j.jpg"><img class="alignnone" title="Safari TTS" src="http://img.skitch.com/20100407-jr8sjs3hbu5tb95ie81182a78j.jpg" alt="" width="880" height="550" /></a></p>
<p>You should see a spinning cog in your top menu bar as Mac OS creates an audio file for you and putting it in iTunes. Click the spinning cog if you want to cancel.</p>
<p>When the cog disappears, there should be a new playlist in iTunes called &#8220;Spoken Text.&#8221;  In it, you&#8217;ll see a track called &#8220;Text to Speech.&#8221;  You can rename this to &#8220;The Walrus and the Carpenter&#8221; and copy the track to your iPod.</p>
<p><a href="http://img.skitch.com/20100407-j5we95c3fnnk1xpybjjnn5i582.jpg"><img class="alignnone" title="iTunes Spoken Text" src="http://img.skitch.com/20100407-j5we95c3fnnk1xpybjjnn5i582.jpg" alt="" width="880" height="550" /></a></p>
<p>And that&#8217;s it!  Enjoy your free audio books!</p>
<p>Bonus:</p>
<p>If you&#8217;d like to change the voice of the computer&#8217;s reader, there are six standard voices you can choose from.  Simply go to System Preferences, click &#8220;Speech&#8221;, then click the &#8220;Text to Speech&#8221; tab, then select the voice you want from the &#8220;System voice&#8221; drop-down list.  The voice you select here will be used the next time you use the &#8220;Add to iTunes as a Spoken Track&#8221; service menu item.</p>
<p><a href="http://img.skitch.com/20100407-m8mwsrx6u62ig8q6cp1m9umm5m.jpg"><img class="alignnone" title="System Voice" src="http://img.skitch.com/20100407-m8mwsrx6u62ig8q6cp1m9umm5m.jpg" alt="" width="666" height="487" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=75&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2010/04/06/text-to-speech-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100407-n5kiu1x9anhp54gwk6d4ne2y8j.jpg" medium="image">
			<media:title type="html">Keyboard Shortcuts</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100407-jr8sjs3hbu5tb95ie81182a78j.jpg" medium="image">
			<media:title type="html">Safari TTS</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100407-j5we95c3fnnk1xpybjjnn5i582.jpg" medium="image">
			<media:title type="html">iTunes Spoken Text</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100407-m8mwsrx6u62ig8q6cp1m9umm5m.jpg" medium="image">
			<media:title type="html">System Voice</media:title>
		</media:content>
	</item>
		<item>
		<title>And Now For Something Completely Different</title>
		<link>http://plusrw.wordpress.com/2010/01/24/and-now-for-something-completely-different/</link>
		<comments>http://plusrw.wordpress.com/2010/01/24/and-now-for-something-completely-different/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 15:38:14 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/2010/01/24/and-now-for-something-completely-different/</guid>
		<description><![CDATA[Friday was my last day working in Ann Arbor (1hr away, by car, 4 by train/bike) at Greenview Data. At Greenview I had helped to build an email archiving system, writing mainly Ruby and Perl code using Agile (XP) development practices. Two of the best years of my career were spent there &#8211; I learned [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=74&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Friday was my last day working in Ann Arbor (1hr away, by car, 4 by train/bike) at Greenview Data. At Greenview I had helped to build an email archiving system, writing mainly Ruby and Perl code using Agile (XP) development practices. Two of the best years of my career were spent there &#8211; I learned so much and discovered who I was as a software craftsman. My coworkers there helped keep me accountable and we had a great time learning together new concepts and some neat tools. In the end, we have an email archiving system that provides discoverability and redundancy across 3 data centers in the US. </p>
<p>The biggest change in the last year has been my migration from graphic IDEs and text editors to vim. Once I discovered it&#8217;s underlying philosophy, I was hooked. Now Linux has returned as my development platform of choice. Linux especially works well when working with Ruby C extensions. </p>
<p>This next week I&#8217;ll be finishing some work for the State of Michigan and then February begins my work at BrighterPlanet! Conservation, sustainability, and environmental stewardship have become hot issues for me over the past three years. I&#8217;m really excited to be working on that front as a Rails developer developing apps that help people start thinking about their relationship with the environment and helping some grassroots environmental projects get started through the company&#8217;s project fund. When I found BrighterPlanet&#8217;s open telecommuting position, I couldn&#8217;t pass it up.</p>
<p>So now I will be working from home during the day. Julie and I have been setting up the office as our coworking facility and I&#8217;ve been tinkering around with my old PC to see if it&#8217;s usable as a Linux development platform. I also got a nice 22&#8243; Dell monitor (same components as Apple LCDs) to reduce neck straining with my laptop. It also doubles as our TV <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>2010 is already shaping up to be an excellent year!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=74&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2010/01/24/and-now-for-something-completely-different/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting SPSS Statistics 17 to Work with Mac OS X Snow Leopard</title>
		<link>http://plusrw.wordpress.com/2010/01/14/getting-spss-statistics-17-to-work-with-mac-os-x-snow-leopard/</link>
		<comments>http://plusrw.wordpress.com/2010/01/14/getting-spss-statistics-17-to-work-with-mac-os-x-snow-leopard/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 02:43:14 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=67</guid>
		<description><![CDATA[My wife is a grad student who does quantitative studies from time to time. Her advisor recommended that she use SPSS to help her generate statistics from her research data. Of course, SPSS is a gigantic, bloated Java app developed by IBM. Being an IBM product targeted toward large institutions, it also costs an arm [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=67&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My wife is a grad student who does quantitative studies from time to time. Her advisor recommended that she use <a href="http://www.spss.com/">SPSS</a> to help her generate statistics from her research data. Of course, SPSS is a gigantic, bloated Java app developed by IBM. Being an IBM product targeted toward large institutions, it also costs an arm and a leg.  I really wish <a href="http://www.r-project.org/">R</a> was more well known and widely used because it is free software.</p>
<p>My wife recently found that after I upgraded her laptop to Snow Leopard, it rendered SPSS unusable. Mac OS reported that the application is incompatible with Snow Leopard. For a brief time, SPSS offered a free patch that allows you to use SPSS with Snow Leopard, but it expired December 31st, 2009 and you are now told to buy an upgrade for $100.  A poster mentioned in a help forum that the only reason SPSS 17 didn&#8217;t work with Snow Leopard was that SPSS 17 was designed for Java 1.5 and Snow Leopard only comes with Java 1.6 installed.  My blood boiled as I realized that SPSS was attempting to charge me $100 for not having an older version of Java installed. I was also suspicious of the fact that Mac OS warned of an incompatibility before the application even attempted to launch. How was it so sure?</p>
<p>I found some <a href="http://rhizomicomm.blogspot.com/2009/09/tips-tricks-fixing-spss-mac-v17-in-snow.html">tutorials</a> for getting SPSS 17 to work with Snow Leopard, but they involved magic and cargo culting.  Therefore, I give you the simplest instructions for installing it:</p>
<ol>
<li><a href="http://redirectingat.com/?id=292X457&amp;url=http%3A%2F%2Fwww.cs.washington.edu%2Fhomes%2Fisdal%2Fsnow_leopard_workaround%2Fjava.1.5.0-leopard.tar.gz">Download a Java 1.5 package</a> that was designed for Leopard, but will work with Snow Leopard, too.</li>
<li>Extract the package by double-clicking the downloaded file.  A &#8220;1.5.0&#8243; folder will appear.</li>
<li>Drag the 1.5.0 folder into Macintosh HD/Library/System/Frameworks/JavaVM.framework/versions. Say yes you want to overwrite and authenticate with your user name and password.</li>
<li>In spotlight (click the magnifying glass in the top right) type &#8220;Java Preferences&#8221; and click the top hit.</li>
<li>In the bottom-most box, drag Java 1.5 32-bit to the top of the box, ahead of Java 1.6.  This tells OS X to try and use Java 1.5 to open your apps before it tries the newer 1.6 version.</li>
<li>Download and install the <a href="http://support.spss.com/ProductsExt/Statistics/Patches/17.0.2/Client/Mac/17.0.2_Readme.html">SPSS 17.0.2 patch</a></li>
<li>This is the ridiculous part. Snow Leopard ships with a <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://support.apple.com/kb/HT3258">black list of applications that it &#8220;knows&#8221; are incompatible</a>. Apple is trying to protect us, here. The only way it knows you&#8217;re trying to run an incompatible application is that it checks the name of the application you try to run against its blacklist. Simply rename your SPSS program by going to Applications/SPSSInc/Statistics17, highlight SPSSStatistics17.0, press return, then rename it to something like SPSS. Now Mac OS will not recognize that you&#8217;re running SPSS 17.</li>
</ol>
<p>Happy statisticing, or whatever it is you do&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=67&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2010/01/14/getting-spss-statistics-17-to-work-with-mac-os-x-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby Development on Linux, Part 3</title>
		<link>http://plusrw.wordpress.com/2009/07/11/ruby-development-on-linux-part-3/</link>
		<comments>http://plusrw.wordpress.com/2009/07/11/ruby-development-on-linux-part-3/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 15:50:54 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=62</guid>
		<description><![CDATA[I&#8217;ve posted earlier about my attempts to find the perfect development environment on Linux, an environment that would match the elegance and ease of TextMate on OS X.  I&#8217;ve always been a fan of the freedom that you get with Linux and I&#8217;ve been willing to sacrifice prettiness as long as the environment is intuitive [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=62&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a href="http://plusrw.wordpress.com/2008/05/01/linux-editor-update/">posted</a> earlier about my attempts to find the perfect development environment on Linux, an environment that would match the elegance and ease of TextMate on OS X.  I&#8217;ve always been a fan of the freedom that you get with Linux and I&#8217;ve been willing to sacrifice prettiness as long as the environment is intuitive and easy to use.</p>
<p>So far, my journey has been wrought with failures, but there have been a few bright spots.</p>
<p>By far, my favorite platform is <a href="http://www.ubuntu.com/">Ubuntu</a>.  They&#8217;ve really nailed the desktop usability aspect as it trumped CentOS and Fedora in being able to recognize my video card and use dual monitors.  However, Ubuntu still suffers from some quirks.  With full visual effects enabled, I can only open so many instances of Firefox without strange things like page content not scrolling.  When I hit a certain number of windows open over several desktops, Gnome freaks out and merges them all into a single workspace, disabling full visual effects.</p>
<p>I have tried many text editors and IDEs but all come up short in some way.</p>
<p>I can&#8217;t stand vi&#8217;s separate edit and navigation modes.</p>
<p><a href="http://www.xemacs.org/">XEmacs</a> is quick and powerful, but there are too many quirks that keep me from loving it.  The speedbar widget exists as a separate window, which makes task switching more of a pain.  Simply finding settings and saving them across sessions is cryptic and difficult.  Installing a language extension requires some elisp programming.  I just want to click!  Copy and paste are broken.  If I copy in emacs, I can&#8217;t paste into another app, and vice-versa.  The only way to do it is to use the edit drop-down menu in each app.  Aside from that, the actual act of text editing in emacs is a breeze.  However, I still miss the Textmate macros that generate things like RSpec describe and it blocks.  One redeeming quality of xemacs is that I can have multiple windows open.</p>
<p><a href="http://www.netbeans.org/">Netbeans</a> works, but is a bit slow.  I also hate having to create an nbproject folder to keep project state.  The same goes with Eclipse, Aptana, JetBrains, and all the rest.  IDEs are too cumbersome, especially when most of them force you into a MDI interface.  I really like having many different windows open when editing a project.  Tabs just don&#8217;t do it for me.  In fact, that&#8217;s one area where Textmate disappoints me.</p>
<p>I had tried to make <a href="http://projects.gnome.org/gedit/">gedit</a> act like Textmate, but it would crash a lot.</p>
<p>Lately, I&#8217;ve had the best results with <a href="http://www.activestate.com/komodo_edit/">Komodo Edit</a>.  I&#8217;ve been able to customize the keyboard shortcuts so that alt acts just like the command button in Textmate/OS X.  It&#8217;s very helpful when I have to switch off our Mac onto the Linux box.  I&#8217;ve also set up a &#8220;cobalt&#8221; theme.  Working in split-screen mode with the whole project window spanned across monitors works well enough for my desire for multiple windows.  I can have the code on one side with the spec on the other.  Komodo also features the quick file open command and can show you where a method is defined.  The drop-down autocomplete is also nice.  There is no integration with rspec, et al, but I&#8217;m fine using the terminal.  In fact one annoyance I have with Textmate is that any output to STDOUT in a spec is assumed to be HTML in Textmate&#8217;s output screen.  This means I have to use HTMLEntities.new.encode when inspecting an object.  With the terminal, text is text!  Komodo also requires project files to be maintained in the root directory of your project, but I guess I can live with that.  One final complaint: Komodo tends to crash if I have too many separate windows open.  I guess I just can&#8217;t have 6 projects open at a time.</p>
<p><a href="http://redcareditor.com/">Redcar</a> is a very promising project.  It&#8217;s designed to act just like Textmate and will support TM bundles.  It&#8217;s also written in Ruby!  The only thing that has kept me from using it is that the gtk-ruby libraries that it uses have C extensions that are written specifically for Ruby 1.8.  I&#8217;ve spent a good chunk of time porting them to 1.9 compatibility, but it&#8217;s such a large task I don&#8217;t have time to port it all.  I do have Ruby 1.8 installed in parallel, but trying to get everything to run proves difficult when different components of Redcar try to run /usr/local/bin/ruby (which points to 1.9 on my system).</p>
<p>Over all, Komodo on Ubuntu has made life manageable, but not quite the experience I get with Textmate.  I&#8217;m sure once Redcar is 1.9 compatible I&#8217;ll be switching.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/62/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=62&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2009/07/11/ruby-development-on-linux-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>CurbFu &#8211; Now With Killer Testing!</title>
		<link>http://plusrw.wordpress.com/2009/05/20/curbfu-now-with-killer-testing/</link>
		<comments>http://plusrw.wordpress.com/2009/05/20/curbfu-now-with-killer-testing/#comments</comments>
		<pubDate>Thu, 21 May 2009 01:06:16 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=53</guid>
		<description><![CDATA[Matt Wilson and I have been making some awesome new updates to CurbFu &#8211; our convenient wrapper for Ruby&#8217;s curb gem &#8211; itself an wrapper around libcurl. Our latest improvement revolves around integration testing. At Greenview Data, we have several Rack apps that talk to each other, including a Rails app. While all of code [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=53&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/hypomodern">Matt Wilson</a> and <a href="http://twitter.com/dkastner">I</a> have been making some awesome new updates to <a href="http://github.com/gdi/curb-fu/tree/master">CurbFu</a> &#8211; our convenient wrapper for Ruby&#8217;s <a href="http://github.com/taf2/curb/tree/master">curb</a> gem &#8211; itself an wrapper around <a href="http://curl.haxx.se/">libcurl</a>.</p>
<p>Our latest improvement revolves around integration testing.  At <a href="http://greenviewdata.com/">Greenview Data</a>, we have several Rack apps that talk to each other, including a Rails app.  While all of code for the individual apps was unit tested, we still lacked a good integration test to make sure everything played well together.</p>
<p>In the past I had tried to set up a VM instance that was controlled by a series of RSpec Story Runner tests.  Getting the test server instances updated and running was a pain, managing all of the running processes was a pain (especially testing a system with down processes), and writing tests to verify data became quite contrived.</p>
<p>With the introduction of Bryan Helmkamp&#8217;s <a href="http://github.com/brynary/rack-test/tree/master">Rack::Test</a> and Rails 2.3&#8242;s support for <a href="http://github.com/chneukirchen/rack/tree/master">Rack</a>, I dreamed of having these apps running in memory, able to send HTTP requests to each other without having to set up a separate integration testing system.  Now that all of our apps use CurbFu to send HTTP requests to each other, we seized the opportunity to create a testing module that override&#8217;s CurbFu&#8217;s get/post/put/delete operations.  Instead of sending a real HTTP request over the internet, CurbFu will now call any rack apps you specify directly using Rack::Test.</p>
<p>Essentially, this system is similar to <a href="http://github.com/chrisk/fakeweb/tree/master">FakeWeb</a> and <a href="http://github.com/brynary/webrat/tree/master">Webrat&#8217;s</a> newly added Rack support, but the difference is that if you use CurbFu for all of your HTTP communication, you can quickly and easily set up an integration test environment or set up smart mocks of HTTP services.</p>
<p>How does it work?</p>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">require &#8216;curb-fu&#8217;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">CurbFu.stubs = {</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">&#8216;a.example.com&#8217; =&gt; RackApp1.new,</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">&#8216;b.example.com&#8217; =&gt; RackApp2.new</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">}</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">class RackApp1</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">def call(env)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">CurbFu.get(&#8216;http://b.example.com&#8217;)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">end</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">end</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">class RackApp2</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">def call(env)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">puts &#8220;WOW!&#8221;</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">end</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">end</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">CurbFu.get(&#8216;a.example.com&#8217;)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:345px;width:1px;height:1px;">#=&gt; WOW!</div>
<p><code></p>
<pre>require 'curb-fu'

CurbFu.stubs = {
  'a.example.com' =&gt; RackApp1.new,
  'b.example.com' =&gt; RackApp2.new
}

class RackApp1
  def call(env)
    response = Rack::Response.new
    response.status, response.body = [200, '']
    CurbFu.get('http://b.example.com')
    response.finish
  end
end

class RackApp2
  def call(env)
    response = Rack::Response.new
    response.status, response.body = [200, "WOW!"]
    response.finish
  end
end

puts CurbFu.get('a.example.com').body
#=&gt; WOW!</pre>
<p></code></p>
<p>Loading a Rails app is a bit more involved:</p>
<p><code> </code></p>
<p><code></p>
<pre>require 'curb-fu'
require '/path/to/rails/app/config/environment'
require 'dispatch'

CurbFu.stubs = {
  'my.cool.railsa.pp' =&gt; ActionController::Dispatcher.new
}</pre>
<p></code></p>
<p>We&#8217;ve set up a series of <a href="http://github.com/aslakhellesoy/cucumber/tree/master">Cucumber</a> stories to test the interplay between our various rack apps.  By having the rails app in memory, we&#8217;re able to access ActiveRecord objects from our step definitions, as if we&#8217;re within the rails app. We&#8217;re also able to stub specific methods on objects within our rack apps and we throw up quick little Rack apps that can pretend to be things like a Solr server or a site hosting an RSS feed.  The sky is the limit!</p>
<p>Once caveat we&#8217;ve run into is the issue of namespacing.  It may be a good idea to namespace your Rails model classes as they may conflict with other loaded Rack apps.</p>
<p>Have fun testing!</p>
<p>Links:<br />
<a href="http://github.com/gdi/curb-fu/tree/master"> CurbFu</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=53&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2009/05/20/curbfu-now-with-killer-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>Double Negatives</title>
		<link>http://plusrw.wordpress.com/2009/01/27/double-negatives/</link>
		<comments>http://plusrw.wordpress.com/2009/01/27/double-negatives/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 04:04:35 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Style]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=42</guid>
		<description><![CDATA[Recently I was working on a project adding new functionality that would queue a long-running task to a background job. The original code looked something like this: receive_data forward_data My task was to run enqueue_data instead of forward_data since the forwarding was taking too long. I wanted to retain the ability to run forward_data if [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=42&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I was working on a project adding new functionality that would queue a long-running task to a background job. The original code looked something like this:</p>
<pre><code>receive_data
forward_data
</code></pre>
<p>My task was to run <em>enqueue_data</em> instead of <em>forward_data</em> since the forwarding was taking too long. I wanted to retain the ability to run <em>forward_data</em> if a specific parameter was passed in.  Since I was creating a parameter that would override a default feature, my first intuition was to name this parameter &#8220;noenqueue&#8221;:</p>
<pre><code>receive_data
if params['noenqueue']
  forward_data
else
  enqueue_data
end
</code></pre>
<p>I then smacked myself in the forehead when I realized I had &#8220;pulled a Microsoft.&#8221;  I had created a setting that is named such that setting it to true would disable a feature, while setting it to false would enable the feature.  You see this all the time in Microsoft products.</p>
<p><img src="http://img.skitch.com/20090128-1xk7jkp9sw8fu1jnkgtjet1mja.jpg" alt="" /></p>
<p>It irritates me because you have to think in double-negative terms when setting the parameter.  Instead, it is much more intuitive to create settings that are positive &#8211; that setting them to true will enable something.</p>
<p>Lesson learned: I renamed the parameter to &#8220;forward_immediately&#8221;:</p>
<pre><code>receive_data
if params['forward_immediately']
  forward_data
else
  enqueue_data
end
</code></pre>
<p>One good syntactic feature of Ruby is the <em>unless</em> keyword. I prefer to use &#8220;unless variable.nil?&#8221; instead of &#8220;if variable&#8221; if I want to only operate on non-nil objects.  I find it a bit more intuitive.</p>
<pre><code>unless document.nil?
  document.write
end</code></pre>
<p>However, you can still get into trouble when you need to branch:</p>
<pre><code>unless document.nil?
  document.write
else
  document.new(str).write
end</pre>
<p></code></p>
<p>An <em>else</em> branch on an <em>unless</em> is, in my opinion, the least readable or intuitive way to write branches.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=42&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2009/01/27/double-negatives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20090128-1xk7jkp9sw8fu1jnkgtjet1mja.jpg" medium="image" />
	</item>
		<item>
		<title>Great Lakes Ruby Bash 2008</title>
		<link>http://plusrw.wordpress.com/2008/08/20/great-lakes-ruby-bash-2008/</link>
		<comments>http://plusrw.wordpress.com/2008/08/20/great-lakes-ruby-bash-2008/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 02:07:41 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=39</guid>
		<description><![CDATA[I&#8217;m really excited about the upcoming Great Lakes Ruby Bash in Ann Arbor on October 11th.  The distinguished Rubyists of the Grand Rapids Ruby Users Group are joining forces with us (Ann Arbor Ruby group) to put the conference together.  After attending eRubyCon in Columbus last weekend, I have to say the local conferences are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=39&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m really excited about the upcoming <a href="http://greatlakesrubybash.org/">Great Lakes Ruby Bash</a> in Ann Arbor on October 11th.  The distinguished Rubyists of the Grand Rapids Ruby Users Group are joining forces with us (Ann Arbor Ruby group) to put the conference together.  After attending eRubyCon in Columbus last weekend, I have to say the local conferences are much more engaging than the mega-conferences like RailsConf.  It&#8217;s great being able to get a chance to talk to everyone.  Hope to see you there!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/plusrw.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/plusrw.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=39&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2008/08/20/great-lakes-ruby-bash-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>BackgrounDRb 1.0.4 &#8211; Considerations</title>
		<link>http://plusrw.wordpress.com/2008/07/18/backgroundrb-104-considerations/</link>
		<comments>http://plusrw.wordpress.com/2008/07/18/backgroundrb-104-considerations/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 03:38:48 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Libraries]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=34</guid>
		<description><![CDATA[Today I gleefully updated BackgrounDRb to 1.0.4 after I learned that a new release was out that supported clustered BDRb servers.  I quickly learned that regiester_status has been removed.  That&#8217;s right.  All that code that sends data from your workers to your app need to be refactored to put data into cache[job_key].  This approach is more [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=34&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today I gleefully updated <a href="http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/913db7da586c09cf">BackgrounDRb to 1.0.4</a> after I learned that a new release was out that supported clustered BDRb servers.  I quickly learned that <strong>regiester_status</strong> has been removed.  That&#8217;s right.  All that code that sends data from your workers to your app need to be refactored to put data into cache[job_key].  This approach is more thread-safe, however.  Perhaps you could even write your own wrapper that puts data into cache on a call to register_status.</p>
<p>All in all, however, there are some really cool new features related to clustering.  I was starting to think for a while that BDRb had been abandoned and that Bj was the new way to go.  This release clearly puts BackgrounDRb on top for spawning asynchronous tasks.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/plusrw.wordpress.com/34/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/plusrw.wordpress.com/34/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=34&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2008/07/18/backgroundrb-104-considerations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
		<item>
		<title>Does MobileMe&#8217;s Push Email Really &#8220;Push?&#8221;</title>
		<link>http://plusrw.wordpress.com/2008/07/13/does-mobilemes-push-email-really-push/</link>
		<comments>http://plusrw.wordpress.com/2008/07/13/does-mobilemes-push-email-really-push/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 22:19:25 +0000</pubDate>
		<dc:creator>dkastner</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Emerging Technologies]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://plusrw.wordpress.com/?p=31</guid>
		<description><![CDATA[When Steve Jobs first announced &#8220;push email&#8221; for the upcoming iPhone 2.0 software, I was skeptical.  The two protocols I knew of, POP3 and IMAP, operate on a protocol that is always initiated by the client.  The user has to continuously check in with the server to see if new messages have arrived.  With POP3 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=31&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When Steve Jobs first announced &#8220;push email&#8221; for the upcoming iPhone 2.0 software, I was skeptical.  The two protocols I knew of, POP3 and IMAP, operate on a protocol that is always initiated by the client.  The user has to continuously check in with the server to see if new messages have arrived.  With POP3 and IMAP, you can approximate push email by polling server several times a minute.  I figured that Exchange supported some sort of persistent connection that allowed push, but from the way it was presented at Steve&#8217;s keynote, it seemed that they were touting push email for any mail account accessed by an iPhone.  I wrote off &#8220;push email&#8221; as a marketing ploy.  Im my mind, the mail server would have to know where the client was at all times to &#8220;push&#8221; updates.</p>
<p>Well, it turns out that MobileMe supports Push-IMAP, a relatively new protocol.  The way it works is a client logs into the MobileMe server with a long-lived HTTPS connection.  Through this connection, the client sends any updates to the server.  The server sets up a long-lived response to send back notifications of new messages.  Data is compressed to help lower bandwidth requirements.  P-IMAP is an open protocol and a P-IMAP to IMAP bridge can be set up to allow legacy mail servers to provide push services.  In addition to email updates, P-IMAP allows other data, such as contacts and calendars to be synchronized.</p>
<p>What seems surprising to me is that Apple is going to have to set up a system that will have to handle millions (well, at least thousands) of simultaneous connections.  Let&#8217;s hope they can do it!</p>
<p>So, is MobileMe&#8217;s push really &#8220;push?&#8221;  Well, technically, no.  The client still has to initiate and maintain a connection to the server.  If the server kept track of what IP address each iPhone had and initiated connections out to each iPhone, it would be a true push system.  In reality it&#8217;s a more scalable way to handle continuous polling.</p>
<p> </p>
<p>More information:</p>
<p><a href="http://www.ietf.org/proceedings/04mar/slides/lemonade-1/sld1.htm">P-IMAP</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/plusrw.wordpress.com/31/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/plusrw.wordpress.com/31/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/plusrw.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/plusrw.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/plusrw.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=plusrw.wordpress.com&amp;blog=2223420&amp;post=31&amp;subd=plusrw&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://plusrw.wordpress.com/2008/07/13/does-mobilemes-push-email-really-push/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03d7ad7d47bb43c2f058dc22e01dcc7a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dkastner</media:title>
		</media:content>
	</item>
	</channel>
</rss>
