<?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>Stupid Idea</title>
	<atom:link href="http://www.stupididea.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stupididea.com</link>
	<description></description>
	<lastBuildDate>Tue, 08 May 2012 05:53:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Ruby, Linux, Autotest, Rspec 2, Cucumber</title>
		<link>http://www.stupididea.com/2012/05/08/ruby-linux-autotest-rspec-2-cucumber/</link>
		<comments>http://www.stupididea.com/2012/05/08/ruby-linux-autotest-rspec-2-cucumber/#comments</comments>
		<pubDate>Tue, 08 May 2012 05:33:02 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=312</guid>
		<description><![CDATA[Of the posts I&#8217;ve written this article about Rspec, Autotest, etc. has been one of the more visited. Time to update that ooold information. If you don&#8217;t know what any of this is, the idea of Autotest is to get a &#8230; <a href="http://www.stupididea.com/2012/05/08/ruby-linux-autotest-rspec-2-cucumber/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Of the posts I&#8217;ve written <a href="http://www.stupididea.com/2009/03/15/non-rails-autotest-rspec-libnotify-linux/">this article about Rspec, Autotest, etc.</a> has been one of the more visited. Time to update that <em>ooold</em> information.</p>
<p>If you don&#8217;t know what any of this is, the idea of <a href="https://github.com/grosser/autotest">Autotest</a> is to get a test suite to run continuously in the background and provide ambient notifications about the failure/success status <em>whenever a file is saved</em>. You get feedback as soon as you break your test suite. The Linux part of this post involves getting Linux to pop up an on-screen display listing number of failed tests.</p>
<p><a href="http://cukes.info/">Cucumber</a> is a BDD (Behavior-Driven Development) tool where you write out the features in plain language but then parse that natural language with regexps to pin tests behind it (called step definitions).</p>
<p><a href="https://github.com/rspec/rspec">Rspec</a> is a nice expressive test assertion library that can be used both in Cucumber feature step definitions and for traditional unit tests.</p>
<p>The process is much faster and cleaner now due to better gems and the convenience of Bundler. I&#8217;ll update with details about non-Rails projects.</p>
<p>The Gemfile section (note autotest-standalone and autotest-notification:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">group <span style="color:#ff3333; font-weight:bold;">:test</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  gem <span style="color:#996600;">'rspec'</span>
  gem <span style="color:#996600;">'rspec-rails'</span>
  gem <span style="color:#996600;">'cucumber'</span>
  gem <span style="color:#996600;">'cucumber-rails'</span>
  gem <span style="color:#996600;">'database_cleaner'</span>
  gem <span style="color:#996600;">'autotest-standalone'</span>
  gem <span style="color:#996600;">'autotest-rails'</span>
  gem <span style="color:#996600;">'autotest-notification'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Setup commands:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># install the gems of course</span>
bundle <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #666666; font-style: italic;"># steps for Rails</span>
rake generate rspec:<span style="color: #c20cb9; font-weight: bold;">install</span>
rake generate cucumber:<span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #666666; font-style: italic;"># complained if I didn't do this</span>
rake db:generate
<span style="color: #666666; font-style: italic;"># Do some magic for the notifications plugin</span>
an-install</pre></div></div>

<p>Then to run the tests:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AUTOFEATURE</span>=<span style="color: #c20cb9; font-weight: bold;">true</span>; autotest</pre></div></div>

<p>It&#8217;s working for me on Ubuntu 12.04.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2012/05/08/ruby-linux-autotest-rspec-2-cucumber/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installing Ubuntu Pangolin on Beagle Bone</title>
		<link>http://www.stupididea.com/2012/05/03/installing-ubuntu-pangolin-on-beagle-bone/</link>
		<comments>http://www.stupididea.com/2012/05/03/installing-ubuntu-pangolin-on-beagle-bone/#comments</comments>
		<pubDate>Thu, 03 May 2012 08:11:15 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=307</guid>
		<description><![CDATA[Just a quick note if you&#8217;re like me and you want to put Ubuntu on your Beagle Bone. The Beagle Bone is a sweet little palm-sized motherboard/processor guy that&#8217;s nice for little hardware projects. It comes with the Angstrom operating system &#8230; <a href="http://www.stupididea.com/2012/05/03/installing-ubuntu-pangolin-on-beagle-bone/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Just a quick note if you&#8217;re like me and you want to put Ubuntu on your <a href="http://beagleboard.org/bone">Beagle Bone</a>. The Beagle Bone is a sweet little palm-sized motherboard/processor guy that&#8217;s nice for little hardware projects. It comes with the Angstrom operating system loaded onto the SD card. This operating system was fine for initial development but I ran into an issue where I couldn&#8217;t leave a server to run and log out. If I checked back the server was always dead no matter what I did to detach it (maybe it was just pegging itself and restarting). So I wanted to see if Ubuntu would handle any better.</p>
<p>Anyways, I kept trying to just flash an image from <a href="https://wiki.ubuntu.com/ARM/OMAP">the official Ubuntu page</a> onto an SD card and boot it, but it wasn&#8217;t working. Then I saw that there is a script that does all the work for you mentioned on this page:</p>
<p><a href="http://elinux.org/BeagleBoardUbuntu#Canonical.2FUbuntu_Images">http://elinux.org/BeagleBoardUbuntu#Canonical.2FUbuntu_Images</a></p>
<p>Works like a charm, and Ubuntu does seem to be more stable than Angstrom on the Beagle Bone. Thanks to the author of the script, Robert C. Nelson.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2012/05/03/installing-ubuntu-pangolin-on-beagle-bone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site Idea</title>
		<link>http://www.stupididea.com/2011/08/29/site-idea/</link>
		<comments>http://www.stupididea.com/2011/08/29/site-idea/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 23:39:29 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Culture]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=297</guid>
		<description><![CDATA[Site allows users to enter their &#8220;cultural genetic code&#8221;; it consists of a humongous catalog of beliefs, attitudes, values, described responses to hypothetical situations, etc. For example, a user would subscribe to the statement, &#8220;It&#8217;s not okay to treat a &#8230; <a href="http://www.stupididea.com/2011/08/29/site-idea/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Site allows users to enter their &#8220;cultural genetic code&#8221;; it consists of a humongous catalog of beliefs, attitudes, values, described responses to hypothetical situations, etc. For example, a user would subscribe to the statement, &#8220;It&#8217;s not okay to treat a waiter badly because of a mistake in the order.&#8221; and a thousand other statements<sup><a href="http://www.stupididea.com/2011/08/29/site-idea/#footnote_0_297" id="identifier_0_297" class="footnote-link footnote-identifier-link" title="So far, it&amp;#8217;s similar to hunch.com. The differences are the focus on cataloging values over consumer and aesthetic preferences, and the focus on sharing statements with others in groups.&nbsp;">1</a></sup> . The site would collect demographic data up-front but would hold onto it until a large-enough database had been constructed. Later, correlations and clustering could be identified, but in addition there would be the option for users to &#8220;bundle up&#8221; values and tropes into new groupings with evocative labels. So someone could bundle up &#8220;It&#8217;s wrong to eat meat&#8221; with &#8220;the US should have an aggressive foreign policy when it comes to protecting against genocide&#8221; into &#8220;Red-blooded Veggie&#8221; or whatever. Then people could choose to &#8220;adopt&#8221; the new values package, and then fork and modify it with their own additions. The point would be to promote the idea that values should be chosen &#8220;for their value&#8221; instead of their belonging to a particular obligatory milieu, and that values should be viewed as being elective and configurable and capable of being put into pragmatic competition with each other.</p>
<p>---</p><ol class="footnotes"><li id="footnote_0_297" class="footnote">So far, it&#8217;s similar to <a href="http://hunch.com" target="_blank">hunch.com</a>. The differences are the focus on cataloging values over consumer and aesthetic preferences, and the focus on sharing statements with others in groups. </li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2011/08/29/site-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Movie Idea</title>
		<link>http://www.stupididea.com/2011/05/15/movie-idea/</link>
		<comments>http://www.stupididea.com/2011/05/15/movie-idea/#comments</comments>
		<pubDate>Sun, 15 May 2011 05:11:15 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=288</guid>
		<description><![CDATA[The title of the movie is Dog Whistle. The main character is a young Arab-American slacker who generally tries to keep his head down and avoid any kind of social engagement. His life changes when he gets into a minor &#8230; <a href="http://www.stupididea.com/2011/05/15/movie-idea/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The title of the movie is <em>Dog Whistle</em>. The main character is a young Arab-American slacker who generally tries to keep his head down and avoid any kind of social engagement. His life changes when he gets into a minor fender bender at a gas station. The other driver, a middle-aged white man in a business suit, refuses to be placated and rages irrationally at the protagonist until he snaps and, uncharacteristically, yells at the businessman with enough force to silence him. This moment of victory is cut short when the older man flashes a sinister grin, begins to whistle eerily and then gets in his car and drives off. The main character soon realizes that the man is a local politician with national ambitions and a unique ability to compel people&#8217;s attentions with his nativist and xenophobic message. As the movie progresses, the main character is &#8220;chased&#8221; by the politician&#8217;s television and radio appearances, which have the effect of causing the moderate people in the protagonist&#8217;s life to turn against him.  Imagine a scene in a diner where one moment the waitress is serving the hero his food with a smile and the next she is stabbing a knife down on the counter and tipping his food onto the floor. Within moments the whole diner has become murderously ill-disposed toward him. The climax involves the main character confronting the politician at a town-hall-style meeting where the protagonist is in danger of being ripped apart by the zombie-like mob.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2011/05/15/movie-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Human Capacities</title>
		<link>http://www.stupididea.com/2011/05/15/human-capacities/</link>
		<comments>http://www.stupididea.com/2011/05/15/human-capacities/#comments</comments>
		<pubDate>Sun, 15 May 2011 04:13:32 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=224</guid>
		<description><![CDATA[I started writing this in January 2010 and for some reason abandoned it. Lemme see if I can pick it up and complete the thought, with the caveat that the person completing it is living in a completely different decile of &#8230; <a href="http://www.stupididea.com/2011/05/15/human-capacities/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>I started writing this in January 2010 and for some reason abandoned it. Lemme see if I can pick it up and complete the thought, with the caveat that the person completing it is living in <strong>a completely different decile</strong> of his life.</em></p>
<p>For whatever reason, a theme has emerged for me in the last couple days: <em>fragmentation</em>. Specifically, of consciousness. The sense that life events are disconnected, that memory isn&#8217;t real, that each moment stands alone and isn&#8217;t configured to a particular past or future. I&#8217;m not even really complaining. I&#8217;m reasonably satisfied with the way multiple aspects of my life are going. There&#8217;s just this feeling of being stretched out over too much territory, both in terms of interests and knowledge and in terms of prior time.</p>
<p>My sleep has been irregular recently and I&#8217;ve been taking the 12-hour Mucinex to get over a chest cold, so there is some of that going on, but I don&#8217;t want to chalk up these thoughts to being groggy or high. Actually, I have a burgeoning psychological conviction that the things we feel and the thoughts we have when we&#8217;re in extreme circumstances that &#8220;take us out of ourselves&#8221; are representative of feelings and thoughts we have <em>all the time</em>, but somehow <em>repress</em> and <em>forget</em>. Okay, I know, not that radical, but what I envision is that everyone who isn&#8217;t nicely adjusted is going around doing normal things while simultaneously reiterating various forbidden thoughts, as it were, under their breath. Again, I know, Freudian repression, but I like the sense of an active process. I have a horror movie in my mind about a guy who sees everybody along with the repressed aspects of their psyches, so instead of a &#8220;What Women Want&#8221; scenario, where everyone&#8217;s inner voice is speaking straightforward desires, it&#8217;s people walking around shouting down shrieking pleading voices.</p>
<p>So I&#8217;d like to make explicit a model of human activity that I&#8217;ve recently realized is at the basis of a lot of my thinking about my own personal endeavors. You could call this the <em>quantitative model of human capacity</em> or something. It&#8217;s not so much a viable theoretical model as it is a mental construct that one might find oneself employing without knowing it. Here is how it is made:</p>
<ul>
<li>There is a finite number of seconds, minutes, hours in one&#8217;s life.</li>
<li>In any moment we can be attaining a skill, gaining some knowledge, resting, indulging ourselves, or &#8220;other&#8221;.</li>
<li>As a general rule, the more moments you spend the more you will have of expertise in a skill or mastery in a knowledge subject.</li>
</ul>
<p><em>Here is where I broke off. What&#8217;s remarkable, and what stands as a partial validation of the starting thesis, is that I&#8217;m really not sure where I was going with this. I guess I was going to say that you end up with a distribution of intensities across your personality, and that they can either be tall in a few places or bristly across a wide range of subject matters, with a reduction into absurdity where you are just a smooth surface of uselessly short but expansive knowledge and expertise. Which is just &#8220;jack of all trades&#8230;&#8221; so I don&#8217;t know why I thought this was important. I think I also wanted to express the idea that as you invest in certain areas you close off the possibility of excellence in other areas<sup><a href="http://www.stupididea.com/2011/05/15/human-capacities/#footnote_0_224" id="identifier_0_224" class="footnote-link footnote-identifier-link" title="Like, of course, a technology tree in a game like Civilization or Master of Orion">1</a></sup>. But again, what of it? </em></p>
<p><em>Well, the complaint at least is that you can reach a point where you have many memories and no narrative line to connect them, and you literally doubt whether they all belong to you. I can certainly sympathize with that. </em></p>
<p>&nbsp;</p>
<p>---</p><ol class="footnotes"><li id="footnote_0_224" class="footnote">Like, of course, a technology tree in a game like Civilization or Master of Orion</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2011/05/15/human-capacities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Google</title>
		<link>http://www.stupididea.com/2010/03/28/on-google/</link>
		<comments>http://www.stupididea.com/2010/03/28/on-google/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 22:12:49 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=238</guid>
		<description><![CDATA[This is a long, rambling diatribe that took me a couple weeks to write during odd hours. In that time it seemed that there was another major Google-related story every week and I kept coming up with new insights to &#8230; <a href="http://www.stupididea.com/2010/03/28/on-google/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>This is a long, rambling diatribe that took me a couple weeks to write during odd hours. In that time it seemed that there was another major Google-related story every week and I kept coming up with new insights to add. What I really wanted to say is the stuff at the end.</em></p>
<p>We will find the drama of Google&#8217;s incessant machinations to be world-historical.<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_0_238" id="identifier_0_238" class="footnote-link footnote-identifier-link" title="World-historical is a pretentious phrase that means &amp;#8220;fundamentally influencing the trajectory of history&amp;#8221;. For example, the German philosopher G.W.F. Hegel saw the French Revolution as world-historical because it was &amp;#8220;about&amp;#8221; the effective end of aristocratic power. Even if the revolution partially failed the effect was to demonstrate to all of Europe the power of the masses to topple monarchs. Today we could say that the 9/11 attacks were world-historical because they caused the US to spend the next 10 years defining how issues of international cooperation, security, projection of military force and treatment of non-state combatants would be approached in the future. ">1</a></sup></p>
<p>All I mean is this: Google&#8217;s actions should be viewed in terms of a handful of oddly constituted &#8220;competitors&#8221;. Google acts the way that it does because Microsoft, Apple and Facebook each pose an existential threat to Google. That is, if any of these three competitors fulfills its strategic vision then the revenue faucet at Google (contextual online advertising) gets shut off completely, or else Google becomes a thrall to another corporation (the way that Yahoo! is in thrall to Microsoft now). This struggle is world-historical because it matters deeply which companies are in a dominant position and are able to steer the development of technology and technological practices. Who dominates can spell the difference between an Internet that is open, mostly free-as-in-beer and libertarian versus one that is proprietary, metered and closely monitored by governments and corporations. Is a world characterized by the dominance of Google better or worse than a world in which Microsoft, Apple or Facebook is in charge? Let&#8217;s look at Google and the respective strategic visions of its competitors:</p>
<h2>Google</h2>
<p>Google&#8217;s core business model has become so amorphous that it is in awkward forms of competition with Apple, Microsoft and Facebook. This is despite the fact that the only competitive ad network (supposedly Google&#8217;s core business) belongs to Yahoo!<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_1_238" id="identifier_1_238" class="footnote-link footnote-identifier-link" title="Yahoo! by itself has not been an important player for a long time, since its core concept has always been &amp;#8220;portals&amp;#8221;">2</a></sup>. It helps to be reminded of what this market looks like (2008 numbers grabbed from <a href="http://en.wikipedia.org/wiki/Online_advertising">Wikipedia</a>):</p>
<table style="margin: 1em 1em 1em 0; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%; width: 500px;" border="2" cellspacing="0" cellpadding="4">
<tbody>
<tr align="center">
<th>Vendor</th>
<th>Ad viewers (millions)</th>
</tr>
<tr>
<td><a title="Google" href="http://www.wikipedia.org/wiki/Google">Google</a></td>
<td>1,118</td>
</tr>
<tr>
<td><a title="DoubleClick" href="http://www.wikipedia.org/wiki/DoubleClick">DoubleClick</a> (Google)</td>
<td>1,079</td>
</tr>
<tr>
<td><a title="Yahoo!" href="http://www.wikipedia.org/wiki/Yahoo!">Yahoo!</a></td>
<td>362</td>
</tr>
<tr>
<td><a title="MSN" href="http://www.wikipedia.org/wiki/MSN">MSN</a> (Microsoft)</td>
<td>309</td>
</tr>
<tr>
<td><a title="AOL" href="http://www.wikipedia.org/wiki/AOL">AOL</a></td>
<td>156</td>
</tr>
<tr>
<td><a class="mw-redirect" title="Adbrite" href="http://www.wikipedia.org/wiki/Adbrite">Adbrite</a></td>
<td>73</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>3,087</strong></td>
</tr>
</tbody>
</table>
<p>Since then, Yahoo! and Microsoft have <a href="http://news.yahoo.com/s/ap/20100218/ap_on_hi_te/us_tec_yahoo_microsoft">struck a deal</a> to consolidate the Yahoo! and MSN rows above to combat Google&#8217;s overwhelming market share. It would appear, then, that the online advertising component of Microsoft&#8217;s vast enterprise is Google&#8217;s only <em>actual</em> competitor in Google&#8217;s <em>core business</em>. Yet Google acts as though the producers of operating systems, browsers, smart phones and social networks are their real competition. Why?</p>
<h2>Microsoft</h2>
<p><strong>The competition: </strong>Microsoft is the traditional rival to Google and constitutes the most direct and intelligible threat to Google&#8217;s core business. Microsoft wants a larger share of online ad revenue, which requires convincing people to use their search engine. That they have to work at this goal is a source of frustration for Microsoft; this revenue should come automatically as a consequence of their strategic position as the operating system maker. They write the browser that everyone uses; its search bar defaults to their search engine; by all logic Microsoft should be able to funnel the entire web-browsing populace through its properties. Nobody should ever have to perform a search through Google. The fact that Google is synonymous with searching is a testament to Microsoft&#8217;s incompetence (and possibly their wariness after the antitrust cases of the 90s). No matter how unsuccessful it has been to date Microsoft will always keep trying to leverage its existing technological position to create a situation where users find themselves entering text into Bing&#8217;s search box rather than Google&#8217;s. Google puts its resources into Google Toolbar for IE, Chrome, Chrome OS and Android in order to make this technological position irrelevant. Microsoft can&#8217;t leverage its dominance in desktop operating systems if most web searches originate from Android smart phones or come from browsers that Microsoft doesn&#8217;t control.</p>
<p><strong>The vision: </strong>Microsoft&#8217;s vision for the future is dirt simple and to a certain extent less sinister than other possibilities: Microsoft wants to make the software and services that everyone uses. They want to make money off this. They want to be the only people doing this. It&#8217;s not that they want to make beautiful software or they want to make crappy software; they want to make a hamburger that the whole world will want to eat for $2. Every other consideration is ancillary: if they can get away with embrace-and-extend, then they do that, if open standards is what is forced down their throats, then they do that. The key to understanding Microsoft is that they never pass up an opportunity to make money or to guarantee a continued revenue stream. If they are not charging for something it is because 1) the market has proved that you cannot make money off it anymore (i.e., it has been commoditized to zero) and 2) it is part of a strategy to make money farther down the line. This may not sound heinous, but this attitude dictates how they approach product development: <em>can we sell seat licenses?</em> <em>No? Can we charge different amounts for Home, Pro and Elite editions? No? Can we sell an expensive IDE for it that we will offer for free to students? No? Can we use it to leverage a different area of our business? Okay, it&#8217;s free, but throw some tacky ads in.</em> In other words, Microsoft is always giving away the razor to sell razor blades. Moreover, if the razor blades aren&#8217;t dull and rusty, it&#8217;s because there&#8217;s enough effective competition that Microsoft wouldn&#8217;t be able to sell razor blades otherwise. Microsoft is famous for making crappy products that get better through successive iterations arguably as a result of effective competition. They essentially use the market to find the amount of quality they should put into their products. In the same way, they use the market to determine the level of sleaziness they should put into their products. I lost all of my email from the late 90s because Hotmail <em>disabled</em> the ability to export emails and then <em>deleted</em> my account after a couple of months of inactivity. Microsoft wouldn&#8217;t be able to do this today, but only because of the competition from Gmail<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_2_238" id="identifier_2_238" class="footnote-link footnote-identifier-link" title="In more recent and more petty news, I have two Xbox 360 hard drives, but if I want to import my saved games from my old drive I have to delete the saved games I&amp;#8217;ve put onto the old one">3</a></sup>.</p>
<h2>Apple</h2>
<p><strong>The competition: </strong>Apple is a surprise competitor that Google actually made for itself. Apple and Google were friends. The Google integration with the iPhone helped make the iPhone a success. What happened is that Apple started acting like the shy guy who suddenly learns to assert himself: first they told the music industry how much a single would cost, then they dictated to AT&amp;T the terms under which they would <em>get</em> to offer the iPhone and now they were telling Google what apps they could and couldn&#8217;t offer on Apple&#8217;s platform. As John Locke on <em>Lost </em>likes to say (over and over and over again), <em>Don&#8217;t tell me what I can&#8217;t do</em>. With its Android push, Google is on its way to making the iPhone a niche technology product (like Mac desktops) rather than the the industry (and street fashion) benchmark it has become.  Within the next year, the current norm that you develop an iPhone app and then you think about developing an Android app will most likely be reversed. This has to be seen as overtly aggressive behavior at Cupertino. In fact, Google&#8217;s move should be viewed in light of the other players in the smart phone space. Google knew that RIM, Microsoft and Nokia wouldn&#8217;t lag behind the iPhone in UI and functionality forever, and when they caught up they wouldn&#8217;t default to Google as a search engine. Apple&#8217;s careful tending of its App Store may have made sense in terms of preserving Apple&#8217;s reputation for quality but it also signaled that Apple was falling back into its comfort zone as a premium brand for people who like to pay to avoid hassles. There is a whole other segment of the population, arguably the majority in the US, who are the exact opposite: looking for bargains, willing to trade time for money, possessed of an innate distrust of meticulously crafted aesthetic experiences. Google had to create the Android platform to protect the smart phone space that iPhone created (the post-Blackberry space) from<a href="http://www.engadget.com/2010/02/15/windows-phone-7-series-is-official-and-microsoft-is-playing-to/"> the next iteration of Windows Mobile</a>, since Apple is culturally incapable of carrying the majority of technology users in the long term. And see how Apple is going after that platform, with <a href="http://www.engadget.com/2010/03/02/apple-sues-htc-for-infringing-20-iphone-patents/">a boatload of patent claims</a>!</p>
<p><strong>The vision: </strong>Apple is basically the same company as Microsoft, except Apple has its pride of workmanship. Steve Jobs: &#8220;<em>The only problem with Microsoft is they just have no taste. They have absolutely no taste.</em>&#8221; The difference is more about packaging and presentation than content. They want the whole world to be able to eat their delicious $3 burger, on their beautiful tray, with their well-designed cutlery, etc. Apple is smart about using open standards when they benefit them in their competition with Microsoft, but they are just as smart about shutting things down, creating and carefully tending sealed ecosystems of developers and users. What&#8217;s valid about the recent criticism of Apple&#8217;s corporate tendencies (re: the App store, the iPad, etc.) is the recognition that Apple ultimately wants the computing user experience to only consist of interactions sanctioned by tasteful, reasonable and well-intentioned corporate adults. They don&#8217;t want their users&#8217; experiences to be sleazy, buggy, hacky or quirky. This vision of the future isn&#8217;t immediately horrifying: <em>everything is aesthetically pleasing and works reasonably well</em>. Just note that beyond a certain level of functionality, you pay for things. You pay for content. You pay to get a developer&#8217;s license. You pay to follow the prescribed path. You pay to have your experience, including the &#8220;apps&#8221; that are on offer, vetted and sanitized for you. If you live in Apple&#8217;s world you will be generally pleased with the overall quality of UI interactions, the soundness of the developer APIs and the opportunities for extending the desktop in various sanctioned ways. You will also be constantly aware of the areas in which the <em>will</em> of Apple is strongly present and incontrovertible: <em>Don&#8217;t touch iTunes, we&#8217;ll just block you out with the next point release; Don&#8217;t touch the iPhone&#8217;s firmware, we have ways of making things not work for you after that; Don&#8217;t release embargoed news or we will bury you in lawsuits, <a href="http://thinksecret.com">18-year-old fanboy</a></em>. The freedoms of the Apple world should be familiar to anyone living in a modern liberal democracy; you&#8217;re free to do most of the things that you would normally want to do (as long as you have a baseline amount of money) but there are certain <em>outre </em>activities that will bring the full force of the leviathan down on your head.</p>
<p><b>Or</b>: everything I just said as contained in this poetic and hyperbolic <a href="http://www.osnews.com/story/23009/Tim_Bray_Joins_Google">Tim Bray</a> quote:</p>
<blockquote><p>
 &#8220;The iPhone vision of the mobile Internet’s future omits controversy, sex, and freedom, but includes strict limits on who can know what and who can say what. It’s a sterile Disney-fied walled garden surrounded by sharp-toothed lawyers. The people who create the apps serve at the landlord’s pleasure and fear his anger.</p>
<p>I hate it.</p>
<p>I hate it even though the iPhone hardware and software are great, because freedom’s not just another word for anything, nor is it an optional ingredient.&#8221;
</p></blockquote>
<p><b>Update (3/29/2010):</b> <i>In the comments Robbie points out that the just-so story about Google launching Android over Google Voice doesn&#8217;t work with the actual timeline. He also clued me in to the awesome <a href="http://daringfireball.net/2010/03/generals_war">fighting words</a> <a href="http://www.wired.com/epicenter/2010/01/googles-dont-be-evil-mantra-is-bullshit-adobe-is-lazy-apples-steve-jobs/">coming from Apple</a>, with this killer quote:.</i></p>
<blockquote><p><i>We did not enter the search business, Jobs said. They entered the phone business. Make no mistake they want to kill the iPhone. We won’t let them.</i></p></blockquote>
<h2><strong>Facebook</strong></h2>
<p><strong>The competition: </strong><a href="http://www.wired.com/techbiz/it/magazine/17-07/ff_facebookwall">This article</a> is required reading for understanding Facebook&#8217;s competitive position. I remember<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_3_238" id="identifier_3_238" class="footnote-link footnote-identifier-link" title="because I&amp;#8217;m old">4</a></sup> when Prodigy first started offering Internet it was just another pane framed with Prodigy branding and ads, like you could either play some weird dungeon hack game or: the World Wide Web. Your choice. Somehow Facebook has taken us back to the days of Compuserve, Prodigy and AOL in terms of  creating a single point of access to all the wild, woolly information on the Internet. This has happened because people need access to controlled, walled-garden environments in order to find their friends and share with them but they don&#8217;t want to jump from site to site to do this. So the snowball effect went to Facebook, maybe initially just as a matter of aesthetics and the preppy instinct for networking. With the fait accompli of its success as an aggregator of social graphs, Facebook graciously offered to let the Internet <em>come in</em> out of the cold and provide content that would make Facebook even more sticky. The apps that are on Facebook are actually other websites that are designed to fit <em>inside</em> Facebook, often through &#8220;iframes&#8221;<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_4_238" id="identifier_4_238" class="footnote-link footnote-identifier-link" title="if you want to see where an app is really hosted you can sometimes right click in the main area of the app and open the iframe &nbsp;as a new window">5</a></sup>. That is, Facebook literally frames the World Wide Web. As the article explains, a growing portion of web searches are going <em>through</em> Facebook (the Web results at the bottom of the search are provided by Microsoft). More importantly, Facebook is a major <em>referrer</em> to other websites; when you click on a link that a friend posts and get taken to a news site, Facebook is the referrer.  It makes sense that you should advertise on the site that sends traffic your way. In the past that has meant Google AdWords, but Facebook is considered to be attractive not just for volume of its traffic but for the attributes of those visitors; Facebook visitors are surrounded by friends, playing games, looking for diversions &#8212; they&#8217;re in a better mental state for clicking on an ad, and if they like your product they might just send some free advertising your way on the same network.</p>
<p>In short, Facebook is a horrifying, unfathomable nemesis for Google. Google&#8217;s stated <a href="http://www.google.com/corporate/">mission</a> is to &#8220;to organize the world&#8217;s information and make it universally accessible and useful&#8221; and after largely succeeding in this mission they have been rewarded with a situation in which millions of users are voluntarily withdrawing their most useful information behind Facebook&#8217;s walls, where Google&#8217;s ads aren&#8217;t served.</p>
<p><strong>The vision</strong>: Facebook is a problem for the world because it is hugely important yet there is no profound vision. The vision is, <em>Grow, Grow, Grow. Everyone in the boat</em>. The final victory condition is when every single person in the world plus various fictional and historical personalities are on Facebook and there are no more outgoing links anymore &#8230; <em>because there is nothing outside of Facebook</em>. What&#8217;s worse, the Wired article reveals that the Facebook people<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_5_238" id="identifier_5_238" class="footnote-link footnote-identifier-link" title="or this one anonymous &amp;#8220;veteran&amp;#8221;, who I&amp;#8217;m going to beat up on a lot, because what he says is so emblematic">6</a></sup> think that they&#8217;re geniuses for basically reimplementing AOL:</p>
<blockquote><p>Like typical trash-talking youngsters, Facebook sources argue that their  competition is old and out of touch. &#8220;Google is not representative of  the future of technology in any way,&#8221; one Facebook veteran says.  &#8220;Facebook is an advanced communications network enabling myriad  communication forms. It almost doesn&#8217;t make sense to compare them.&#8221;</p></blockquote>
<p>It&#8217;s hard to express how ridiculous, mendacious and sinister this statement is. Let me run it again: &#8220;Google [an innovative and constantly improving search engine for finding other websites] is not representative of  the future of technology in any way [because other sites are lame]. Facebook [one site] is an advanced communications network [it's a network with one point of failure!] enabling myriad   communication forms [you can talk on your friend's wall or in your news feed or you can send email ... through Facebook ]. It almost doesn&#8217;t make sense to compare them [Yeah].&#8221; This statement expresses contempt for the idea of a company that merely wants to <em>organize</em> the world&#8217;s knowledge because, after all, the future is about <em>owning</em>, <em>controlling</em> and <em>monetizing</em> the world&#8217;s knowledge because all the discussions and social interactions  that produced the knowledge occurred on one&#8217;s property.  A meatspace equivalent of this concept of the future is the spread of private-public spaces, like <a href="http://www.nowpublic.com/photography_banned_downtown_silver_spring_maryland">this one</a>; you&#8217;re out  in public in a nice, clean space, when you suddenly realize that all of this, the streets, the sidewalk, the street lights, all are privately owned. You might not mind the trade-off&#8211;freedom for convenience, safety and comfort generally makes a lot of sense&#8211;but how is it a measure of progress when more and more &#8220;public&#8221; spaces are actually privately owned spaces where you have to follow The Management&#8217;s rules? As the statement indicates, Facebook represents a future in which more and more communication takes place on one site and <em>stays</em> on that site. Obviously, Facebook wants to encourage this future, but it&#8217;s notable that  the speaker has contempt for Google for not explicitly pursuing this vision.</p>
<h2>Google Again</h2>
<p>You may have gathered from this analysis that I like Google. I admit to being a bit of a fanboy (Google Mail, Google Reader, Google Voice, Android phone; in a moment of insanity I even released to Google my vital statistics through <a href="http://google.com/health">Google Health</a>) but I feel this misses the point. In this article I am not trying to argue that Google is good and Microsoft, Apple and Facebook are bad. This argument, moreover, has nothing to do with the <em>technical merits</em> of any of these companies; I really like Android OS and I run Ubuntu on my home and work computers, but I can see that the iPhone and Windows 7 are in many ways better engineered, more stable or more aesthetically put-together pieces of software. Google has a rather odd way of presenting itself and its software, a minimalism and lack of UI polish, that probably alienates many users who are instantly comfortable with Facebook.  I am arguing that either through accident or due to the idealism of its founders Google has aligned its interests with the interests of the <span style="text-decoration: underline;">open</span>, <span style="text-decoration: underline;">participatory</span>, <span style="text-decoration: underline;">distributed</span> Internet, while these other companies have vested interests in &#8230; something else. In other words, Google by its nature as an <span style="text-decoration: underline;">Internet</span> company and a congenital aggregator champions the open Internet; Google&#8217;s hegemony is an open Internet hegemony. These other companies are an OS vendor, a user experience maker and a social software connection factory. Their hegemonies are very different.</p>
<p>In Apple&#8217;s hegemony, for example, pretty much all media purchases go through iTunes. So it&#8217;s a market that&#8217;s run by Apple, and they take a cut, and they have a vested interest in making sure that all media is properly monetized. You can only synch iTunes with Apple products so they have hardware lock-in to their market. And they play cultural gatekeeper on all kinds of media and applications. This isn&#8217;t about the ethics or the legality of whether they can do this. Of course they can do this. This is about what would happen if Apple ruled the world. The answer is that the world would suck. As it is, Apple is pretty bad at <a href="http://androidandme.com/2010/03/news/android-boasts-7-of-10-top-smartphones-in-the-united-states/">holding onto market position</a> in the long run (precisely because of its instincts for hardware lock-in and control), so we are free to praise their hardware and software and even to use their services (though I wouldn&#8217;t recommend it).</p>
<p>I would say that an Apple hegemony is not very realistic, if only because there will always be a significant portion of the population that feels alienated by Apple&#8217;s brand image. Some of us just don&#8217;t feel that clean. Likewise a pure Microsoft hegemony is not likely, because it turns out that the best operating system is made out of HTML, Javascript, CSS and HTTP, and Microsoft is absolutely incompetent when it comes to the Internet. A Facebook and Microsoft hegemony is more than likely; today it seems almost like a fait accompli. <a href="http://www.wired.com/beyond_the_beyond/2010/03/the-farmville-horror">This article</a> about Farmville contains the horrifying claim &#8220;Twenty-six million people play <em>Farmville</em> every day. More people play <em>Farmville</em> than <em>World of Warcraft</em>, and <em>Farmville</em> users outnumber those who own a Nintendo Wii.&#8221;. What is worrisome about Facebook is that it is built on <a href="http://en.wikipedia.org/wiki/Network_effect">network effect</a> and the more that Facebook outpaces other networks the more that the network effect, rather than any other criteria of quality or innovation, guarantees its future dominance. Right now it looks like Facebook is a Katamari ball that is going to roll up the world, and once it does that there will be no pages left for Google to index except for Facebook&#8217;s front page (&#8220;It&#8217;s free and anyone can join&#8221;). More importantly, there will be no pages to serve ads <em>on</em>, and no advertisers willing to pay for tasteful contextual ads that don&#8217;t say &#8220;your Aunt bought this product. Why don&#8217;t you?&#8221;</p>
<p>Even if Facebook&#8217;s success wouldn&#8217;t lead to an absolute economic hegemony it could lead to the decline of Google. There is a feeling today that Google is growing too big and our (American? Western? Human?) leveling instinct is to wish for them to fall. There is even a rather twisted desire to see Google proven to be unethical and thus in hypocritical contradiction of its &#8220;Don&#8217;t be evil.&#8221; standard of conduct (twisted because all the world would gain is another unabashedly &#8220;evil&#8221; corporation, rather than one that makes highly relevant gestures like <a href="http://www.boingboing.net/2010/03/25/brin-googles-reroute.html">this one</a>). There are a couple reasons why Google fading away doesn&#8217;t make the world a better place.</p>
<p>First, it should be clear that Google has already made the world a better place, or at least a cooler one. Gmail, Google Maps with StreetView, Google Books and Google Scholar, YouTube, Android &#8212; these things absolutely <em>made</em> the last couple years. Perhaps more importantly, Google showed the world how to do things in a different way&#8211; release your software in so-called &#8220;beta&#8221; so that you can crowdsource your user acceptance testing; create APIs and tolerant licenses for your services so that developers can mash up your service with their own independent offerings; make it easy for users to get data in <em>and out</em> of your services; demonetize entire industries and <a href="http://www.wired.com/beyond_the_beyond/2010/02/creative-destruction-as-destructive-destruction">leave everyone to figure out how to make money in the aftermath</a>.</p>
<p>Second, Google is an important political force in the world, both directly and indirectly. Directly, Google is usually on the right side of important issues relating to technology and civil society (from <a href="http://www.businessweek.com/ap/financialnews/D9EJLMVO0.htm">this article</a>: &#8220;patent reform, copyright laws, digital books and open Internet access&#8230; Google also lobbied Congress, the U.S. Trade Representative, the U.S. Department of Commerce and the White House about international freedom of expression and online censorship&#8221;). Indirectly, Google is a major supporter of <a href="http://en.wikipedia.org/wiki/Open_source">open source software</a> through their many open sourced projects, the <a href="http://code.google.com/soc/">Google Summer of Code</a> project and more recently their mass deployment of the Linux kernel in the form of Android devices. In addition, there is a kind of hands-off libertarian streak to Google&#8217;s policies that has influenced the world in a good way. I&#8217;ve always been impressed by Google&#8217;s stance that it won&#8217;t alter its search indexes to avoid <a href="http://www.google.com/explanation.html">offensive results</a>. More and more, Google has come be an unlikely defender of the principles of free expression and fair use against states that can&#8217;t handle the radically destabilizing effect of the Internet (not just China, but supposedly liberal countries such as France, Germany, Australia and the US).</p>
<p>I will conclude this article with a third reason that the world would be worse off without Google. It may seem a bit obscure and technical but it strikes me as the most important, and I will devote more time to just this reason, cuz well it&#8217;s the most interesting to me.</p>
<h2>Open Standards</h2>
<p>Google is the great champion of <a href="http://en.wikipedia.org/wiki/Open_standard">open standards</a>. Open standards may seem irrelevant from the standpoint of an end user, interesting only to a software developer like myself, but they are actually critical to maintaining a general atmosphere of freedom from heavy-handed systems of control. This is because the opposite of an open standard is an economic wedge that is used to create a situation of lock-in and compulsion.  Open standards are particularly important when it comes to any mode of communication. To understand the effect of not having open standards, imagine if there were many different kinds of telephone <em>that could not talk to each other</em>. You would either have to own many telephones or you would have to carefully coordinate with all the people you want to talk to so that everyone uses the same kind of telephone.  This is the actual situation we have today with IM, with MSN, Yahoo, AIM, Google Talk, etc. With technologies that involve more money and infrastructure there is usually a <em>standards war</em> early on in the commercial rollout of the technology. Perhaps the most famous and iconic of these standards wars is <a href="http://en.wikipedia.org/wiki/Videotape_format_war">Betamax vs. VHS</a> in the 70s (though people say good things about AC vs. DC). The thing is, the goal of a standards war is not to establish an open standard, but to arrive at a de facto <em>industry standard</em>. An industry standard can be something that only one company is legally entitled to make, because they own all the patents and IP on it, yet the entire industry depends on this product to function. With DVD, for example, anyone who wants to make a DVD player has to pay a company that licenses the software library used for reading DVDs.<sup><a href="http://www.stupididea.com/2010/03/28/on-google/#footnote_6_238" id="identifier_6_238" class="footnote-link footnote-identifier-link" title="You can actually go to jail for trying to figure out how to read a DVD on your own.">7</a></sup> Once you win a standards war you have everyone else over a barrel.</p>
<p>Google has made a point of using open standards in its products. It should be be made clear: <em>Google does this purely out of its own self-interest</em>. Imagine, in the situation where there are different standards for telephones, that you arrive late on the scene with your own telephone. Let&#8217;s say Company A has 40% of the market, B has 30%, and several also-rans have the remainder of the market. Do you try to go in with your own standard and displace one of the other players? The problem is that Company A has the network effect; if you don&#8217;t like Company A then you&#8217;re probably using Company B; if you try to compete in a zero-sum way then you&#8217;ll just end up as another also-ran. How do you get market share when there are strong network effects in play and it&#8217;s too late to create an industry standard? You <em>make the network effect irrelevant</em>.  You say to all the other also-rans, &#8220;Let&#8217;s use the same standard. No one will own it. No one will license it. Anyone can use this standard.&#8221; You turn the remainder into a network bloc that is the same size as one of the larger players.</p>
<p>Google has done this most notably with Google Talk. Unlike MSN Messenger or AIM, Google Talk doesn&#8217;t run on a proprietary &#8220;Google Protocol&#8221;. Instead it uses the Jabber protocol, which is the same thing I use at work.  I can connect to any Gmail account from my work IM and vice versa. The voice chat component of Google Talk is also an open standard (unlike Skype&#8217;s). More recently, Google has been promoting its slightly weird Google Wave as an <a href="http://www.waveprotocol.org/">open protocol</a> that anyone can implement. That is, they are offering to establish an open standard even before anyone has claimed this space of hybrid IM/email. They&#8217;ve done this in part because they want to make sure that Wave succeeds <em>as a technology</em> and not just as a product. <a href="http://googlewavedev.blogspot.com/2010/03/novell-pulse-and-google-wave.html">Novell has already bought in</a>, thus helping to increase the chance that weird hybrid IM/email will succeed as a technology.</p>
<p>I was inspired to write this entire article because of something that I saw when <a href="http://www.google.com/buzz">Google Buzz</a> rolled out. Google Buzz was not in itself a particularly exciting offering from Google. They added a section to Gmail that shows a stream of <em>items</em> from your friends, initially determined as your most frequent contacts, plus they have their own geo-tagged Twitter/facewall thing that I have no reason to use. The most important aspect of Buzz is that the items, which can all be commented on in Buzz, can come from multiple sources: Twitter, Flickr, Youtube, etc. These are the default options for sharing, but you can actually add anything that has an RSS feed to your list of sites that Buzz publishes updates for, provided that you have to ability to &#8220;claim&#8221; it as your own. So for example, this here site stupididea.com is part of my Buzz profile, and when I publish this article on my blog, an update will go out to all the people subscribed to me.</p>
<h3>Minor Digression</h3>
<p>Here&#8217;s how you syndicate your own blog through Google Buzz. First, edit the html of your blog theme and put this tag between the</p>
<pre>&lt;head&gt;</pre>
<p>and</p>
<pre>&lt;/head&gt;</pre>
<p>tags:</p>
<pre>&lt;link rel="me" type="text/html" href="http://www.google.com/profiles/your.username"/&gt;</pre>
<p>So in my case in the WordPress theme for http://www.stupididea.com I put this tag:</p>
<pre>&lt;link rel="me" type="text/html" href="http://www.google.com/profiles/tristil"/&gt;</pre>
<p>Then you have to edit your profile through the edit link that is displayed next to your name on the Buzz page.</p>
<div style="clear:both"></div>
<p style="text-align: center; clear:both;"><a href="http://www.stupididea.com/wp-content/uploads/2010/03/Screenshot.png"><img class="size-full wp-image-242 aligncenter" title="Add Link to Google Profile" src="http://www.stupididea.com/wp-content/uploads/2010/03/Screenshot.png" alt="Add Link to Google Profile" width="506" height="179" /></a></p>
<div style="clear:both"></div>
<p>You have to make sure to click the checkbox so that Google knows that this page is &#8220;about you&#8221; rather than just a page you like. Finally, to make Google pick up your site right away you can use this site: <a href="https://sgapi-recrawl.appspot.com/">https://sgapi-recrawl.appspot.com/</a>.<br />
You should then see something like this:</p>
<div style="clear:both"></div>
<p style="text-align: center;"><a href="http://www.stupididea.com/wp-content/uploads/2010/03/Screenshot-1.png"><img class="size-full wp-image-253 aligncenter" title="Connected Sites" src="http://www.stupididea.com/wp-content/uploads/2010/03/Screenshot-1.png" alt="Connected Sites" width="321" height="348" /></a></p>
<div style="clear:both"></div>
<h3>End Digression</h3>
<p>It&#8217;s not the easiest process, but what I really want to point out is how Google is building both technical and conventional openness into its Buzz platform . In technical terms, Google&#8217;s use of the <a href="http://gmpg.org/xfn/">XFN open standard</a> (the rel=&#8221;me&#8221; in the tag above) makes it easy for developers to create sites that can hook into Buzz. There&#8217;s no developer account signup with a dedicated key or anything. In terms of conventional or effective openness, Buzz is doing things differently than Facebook. Instead of inviting other sites to set up shop <em>within</em> a walled garden, they&#8217;re providing a way for sites to keep users updated on their content within a single interface so that they will remain attached to those outside sites. This may seem like a nothing difference, but think of it this way: with Buzz&#8217;s Flickr connection the idea is to <em>keep you apprised of what&#8217;s happening on Flickr</em>, since you might not check it that often. Google Buzz probably increases traffic to Flickr. Buzz&#8217;s Twitter connection means that people who can&#8217;t be bothered to be on Twitter see the tweets from their friends, etc. This is the opposite of Facebook&#8217;s strategy, which is to create a space for content that will make Facebook itself more sticky. They want you to view your pictures inside Facebook galleries, to comment on them within Facebook and to share them on to other Facebook accounts.</p>
<p>To be honest, at the moment Google Buzz isn&#8217;t much different from other aggregator sites like <a href="http://friendfeed.com/">Friendfeed</a>. To understand what&#8217;s actually cool about Buzz you have to look at what Google is planning to do with it. On the <a href="http://code.google.com/apis/buzz/documentation/">Buzz API documentation page</a> toward the end there is this description of what&#8217;s to come:</p>
<blockquote><p>Over the next several months Google Buzz will introduce an API for developers, including full/read write support for posts with the <a href="http://tools.ietf.org/html/rfc5023">Atom Publishing Protocol</a>, rich activity notification with <a href="http://activitystrea.ms/">Activity Streams</a>, delegated authorization with <a href="http://oauth.net/">OAuth</a>, federated comments and activities with <a href="http://www.salmon-protocol.org/">Salmon</a>, distributed profile and contact information with <a href="http://code.google.com/p/webfinger/">WebFinger</a>, and much, much more.</p></blockquote>
<p>All those terms refer to <strong>open standards</strong> for technologies that allow Google to achieve a counterintuitive goal: they remove Google from a position of absolute control and open up possibilities for other sites to continue to exist and thrive. Each of these technologies describes a way to <em>distribute</em> the control and authority over a social software network. The ones that are particularly interesting are <a href="http://www.salmon-protocol.org/">Salmon</a> and <a href="http://code.google.com/p/webfinger/">WebFinger</a>. With Salmon the idea is that comments are maintained between Google Buzz and the actual blog post that is being commented on as well as any other site that is using the Salmon protocol. So for example if people are interested in this blog post, at present they may choose to comment on it through Google Buzz or directly on my website. This kind of sucks for me, because now people are commenting in two places, and if most of the comments are in Google Buzz it may look like no one is interested in my post. If I were making my living off this, I might feel that Google is stealing my oxygen, by letting people share my blog posts and then annotating them up in the Google cloud. So something like Salmon is a way for Google to contribute back to the site that contributed the content, and also to allow another aggregator-type site to consume and contribute back in the same fashion. Through this technology, Google, the content sites, and the other aggregator site are placed on the same level, so that competition is based on feature implementation rather than a power position. In a similar fashion Webfinger is a way for Google to allow other sites to put their users into the same mix of people as Buzz without simply signing their users up for Google accounts. Some weird also-ran social network like <a href="http://www.bebo.com/c/site/index">Bebo</a> or <a href="http://badoo.com/">Badoo</a> can connect its users to Buzz without ceding its &#8220;ownership&#8221; of those users. They could even bring the Buzz technologies into their own site so that they won&#8217;t lose any of their branding or web impressions. It&#8217;s not clear how Google will manage this, but in general they are unlikely to care, because every such use increases Google Buzz&#8217;s network effect.</p>
<p>Google is in this game for network effect, and in particular their goal is to <strong>destroy</strong> Facebook&#8217;s current ungodly influence over users and content producers. They will sacrifice their own chances for a market power position in order to achieve this goal. This is because 1) they know it&#8217;s too late to beat Facebook at its current game and 2) they don&#8217;t actually want to run something like Facebook. The fundamental truth about Google<em> is that they don&#8217;t like managing things</em>. As much as Google keeps growing, they don&#8217;t want to have to hire on a huge number of mediocre employees to watch the plantations, to moderate content and issue bans. They only want to hire the brightest people in the world to make the software that aggregates the content that other people produce.<em> </em>Because as much as Google appears to be something else <em>Google is still an Internet ad company</em>. Everything else they do, as abstract and seemingly unrelated as it is to this core business, is actually about the ads. Google is forever like the US during the cold war, fighting a war in Southeast Asia to deter an attack on West Germany. The good news for us is that this means that Google is fighting <em>for </em>the open Internet, not out of any particular altruism, but because only the open Internet can provide the huge year-on-year revenues that Google has enjoyed up till now.</p>
<p>Finally, then, what&#8217;s so special about the open Internet? Why should we care? There is a whole other meandering blog post in this question, but I&#8217;ll simply conclude with this formulation: the open Internet is a good because it is uncontrollable. The open Internet has low entrance costs. Facebook came to power through the open Internet, not through a cooperation deal with the phone company or through the blessing of a government. An Apple, Microsoft or Facebook Internet is a controlled Internet. There are still opportunities there but there is also a collar around your neck. The Internet isn&#8217;t about signing terms and conditions documents to get going. It&#8217;s not about living within a single clean white frame.</p>
<p>---</p><ol class="footnotes"><li id="footnote_0_238" class="footnote">World-historical is a pretentious phrase that means &#8220;fundamentally influencing the trajectory of history&#8221;. For example, the German philosopher G.W.F. Hegel saw the French Revolution as world-historical because it was &#8220;about&#8221; the effective end of aristocratic power. Even if the revolution partially failed the effect was to demonstrate to all of Europe the power of the masses to topple monarchs. Today we could say that the 9/11 attacks were world-historical because they caused the US to spend the next 10 years defining how issues of international cooperation, security, projection of military force and treatment of non-state combatants would be approached in the future. </li><li id="footnote_1_238" class="footnote">Yahoo! by itself has not been an important player for a long time, since its core concept has always been &#8220;portals&#8221;</li><li id="footnote_2_238" class="footnote">In more recent and more petty news, I have two Xbox 360 hard drives, but if I want to import my saved games from my old drive I have to delete the saved games I&#8217;ve put onto the old one</li><li id="footnote_3_238" class="footnote">because I&#8217;m old</li><li id="footnote_4_238" class="footnote">if you want to see where an app is really hosted you can sometimes right click in the main area of the app and open the iframe  as a new window</li><li id="footnote_5_238" class="footnote">or this one anonymous &#8220;veteran&#8221;, who I&#8217;m going to beat up on a lot, because what he says is so emblematic</li><li id="footnote_6_238" class="footnote">You can actually go to jail for <a href="http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act">trying to figure out how to read a DVD on your own</a>.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2010/03/28/on-google/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Bit of Wisdom</title>
		<link>http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/</link>
		<comments>http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 05:30:55 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Philosophy]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=230</guid>
		<description><![CDATA[People think that there are authorities out there with direct knowledge when in fact there is no direct knowledge, there is only focal knowledge, knowledge that is located around a set of practices, discourses, institutional locations, etc. So for example &#8230; <a href="http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>People think that there are authorities out there with direct knowledge when in fact there is no direct knowledge, there is only <em>focal</em> knowledge, knowledge that is located <em>around</em> a set of practices, discourses, institutional locations, etc. So for example a doctor doesn&#8217;t know bodies; a doctor knows a bunch of things <em>about</em> the body when it&#8217;s presented in the examination room at the hospital. He&#8217;s the authority at that place in that time because of the weave of social premises that support him there. I forget why I thought this was important<sup><a href="http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/#footnote_0_230" id="identifier_0_230" class="footnote-link footnote-identifier-link" title=" That is, what distinguishes this thought from introductory Foucault. ">1</a></sup> . I had to get out of bed to write this because I couldn&#8217;t let this thought go.</p>
<p><strong>Update:</strong> I remember now. It was because I had a mental vision along the following lines:</p>
<p>that a programmer as a patient might look at a doctor trying to determine a treatment for him<sup><a href="http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/#footnote_1_230" id="identifier_1_230" class="footnote-link footnote-identifier-link" title="in my vision it was a large red cancer on the lung contracted by ingesting an experimental drug">2</a></sup> and find that he recognizes the doctor&#8217;s prescription as a kind of workaround or kludge. Then I thought that the programmer would try to talk to the doctor on the level of processes, establish a common language like, but I thought that the doctor wouldn&#8217;t buy into it. The doctor wouldn&#8217;t see the workaround primarily as an absence of knowledge, but as a positive knowledge <em>of treatment</em>. He would say, &#8220;listen, what I know is that this practice alleviates some of the symptoms of the condition&#8221;, and that would be the basis of his authority.</p>
<p>What I mean is that the programmer tries to model a domain of reality, so he sees both the attempt at approximation and correspondence and the inevitable collapse of the pretense that the model re-presents the reality. A database of people is not the people&#8211;it&#8217;s not even a reference to the people, but rather to their vital statistics. Of course. How else could it be? So knowledge as a model carried in the head of someone&#8211; it&#8217;s not the thing, it&#8217;s not the authoritative image representation of the thing, it&#8217;s not the essence of the thing stored away, instead it&#8217;s what programmers call &#8220;<a href="http://en.wikipedia.org/wiki/Domain-specific_language">domain specific</a>&#8220;, it&#8217;s a specific socially-constructed protocol for interacting with a socially-constructed thing. In my vision the programmer&#8217;s disappointment doesn&#8217;t touch the doctor, because the doctor isn&#8217;t interested in the purity of a perfect model but in the efficacy of sound practices. The final step is that &#8220;people&#8221; believe in authorities at a level that is less sophisticated than either the programmer or the doctor&#8217;s (not supposing that one is more sophisticated that the other). They think that authorities just know stuff&#8211; authoritatively, without context.</p>
<p>I know the central situation is vague (what is the doctor ignorant about? etc.) but that&#8217;s because it&#8217;s from a daydreaming-thought-experiment of the kind I often have.</p>
<p>---</p><ol class="footnotes"><li id="footnote_0_230" class="footnote"> That is, what distinguishes this thought from introductory Foucault. </li><li id="footnote_1_230" class="footnote">in my vision it was a large red cancer on the lung contracted by ingesting an experimental drug</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2010/01/08/a-bit-of-wisdom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntax Stupid Idea</title>
		<link>http://www.stupididea.com/2009/06/23/syntax-stupid-idea/</link>
		<comments>http://www.stupididea.com/2009/06/23/syntax-stupid-idea/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:27:36 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=217</guid>
		<description><![CDATA[I&#8217;m a big fan of English-like programming syntax. I love that Ruby has an unless operator and that both it and if can be put after the statement, like do_this if this or do_this unless that . I also like &#8230; <a href="http://www.stupididea.com/2009/06/23/syntax-stupid-idea/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of English-like programming syntax. I love that Ruby has an <code>unless</code> operator and that both it and <code>if</code> can be put after the statement, like</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">do_this <span style="color:#9966CC; font-weight:bold;">if</span> this</pre></div></div>

<p> or</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">do_this <span style="color:#9966CC; font-weight:bold;">unless</span> that</pre></div></div>

<p>. I also like Javascript&#8217;s <code>this</code> word. I&#8217;d like to see all the prepositions in English utilized. How about a <b>neither &#8230; nor</b> expression syntax?</p>
<p>Okay, so the thing I want at the moment is demonstrative pronouns. We&#8217;re always testing a variable and then doing something with that variable. That sounds like <b>that</b>. How about this, then?</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">if</span> hash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:key</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:another_key</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#996600;">&quot;some value&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> hash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:key</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:another_key</span><span style="color:#006600; font-weight:bold;">&#93;</span> 
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#vs.</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> hash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:key</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:another_key</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#996600;">&quot;some value&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> that 
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Granted, you could just assign the long value lookup to a variable, which gives more readable code. In fact, hell, you should always do this. I still want this construct. I can be talked out of it, though. What I&#8217;m more hot for is this construct:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$variable</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$blah</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;key&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;another_key&quot;</span><span style="color: #009900;">&#93;</span> ? <span style="color: #000088;">$blah</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;key&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;another_key&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;default value&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># vs.
</span>
<span style="color: #000088;">$variable</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$blah</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;key&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;another_key&quot;</span><span style="color: #009900;">&#93;</span> ? same <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;default value&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Cuz repeating the tested variable in a ternary just feels stupid, even when you&#8217;re using a well-named variable, amiright?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2009/06/23/syntax-stupid-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Stupid Idea</title>
		<link>http://www.stupididea.com/2009/06/12/another-stupid-idea/</link>
		<comments>http://www.stupididea.com/2009/06/12/another-stupid-idea/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 15:10:06 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=214</guid>
		<description><![CDATA[Oh hai. I&#8217;ll start writing here again, I swear. This is just a quick &#8220;I had an idea&#8221; post. An idea for a Firefox extension/Jetpack plugin: You right-click on some text, select &#8220;speak it&#8221;, the text gets sent to the &#8230; <a href="http://www.stupididea.com/2009/06/12/another-stupid-idea/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oh hai. I&#8217;ll start writing here again, I swear. This is just a quick &#8220;I had an idea&#8221; post.</p>
<p>An idea for a Firefox extension/<a href="https://jetpack.mozillalabs.com/">Jetpack</a> plugin: You right-click on some text, select &#8220;speak it&#8221;, the text gets sent to the cloud and returns with a hidden flash element that plays high-quality text to speech. Sounds like it might exist already.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2009/06/12/another-stupid-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non-Rails Autotest + RSpec + LibNotify + Linux</title>
		<link>http://www.stupididea.com/2009/03/15/non-rails-autotest-rspec-libnotify-linux/</link>
		<comments>http://www.stupididea.com/2009/03/15/non-rails-autotest-rspec-libnotify-linux/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 02:41:11 +0000</pubDate>
		<dc:creator>method</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.stupididea.com/?p=208</guid>
		<description><![CDATA[Update: The information below is VERY outdated. Take a look at new instructions for getting this set up. Each of those terms actually means something! If you don&#8217;t know what any one of those terms means, then you probably won&#8217;t &#8230; <a href="http://www.stupididea.com/2009/03/15/non-rails-autotest-rspec-libnotify-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2><strong>Update: </strong>The information below is VERY outdated. Take a look at <a title="Ruby, Linux, Autotest, Rspec 2, Cucumber" href="http://www.stupididea.com/2012/05/08/ruby-linux-autotest-rspec-2-cucumber/">new instructions</a> for getting this set up.</h2>
<p>Each of those terms actually means something! If you don&#8217;t know what any one of those terms means, then you probably won&#8217;t enjoy this post.</p>
<p>It&#8217;s surprising that something so cool and so central to the Ruby TDD world as <a href="http://zentest.rubyforge.org/ZenTest/">Autotest</a> is completely undocumented. Autotest with Rails and <a href="http://rspec.info/">RSpec</a> just works, and there are many googleable examples of how to add hooks for using Growl or libnotify. I couldn&#8217;t find any reliable advice for how to use Autotest with a non-Rails project and how to use RSpec instead of Unit/Test. The libnotify part is easy once the other two are solved, but I&#8217;ll share what I have going on anyway. This information may be available in pieces somewhere else, but I&#8217;ll just put it all here to help the other lost googlers.</p>
<p>The first thing to know is that <a href="http://blog.nicksieger.com/articles/2007/01/30/rspec-autotest-for-standalone-projects">this blog post</a> is out of date. Autotest now speaks RSpec as one of its native &#8220;styles&#8221;. The trick is that you have to tell autotest about this style by creating a file called <strong>autotest/discover.rb</strong> in your project root. This contains:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Autotest.<span style="color:#9900CC;">add_discovery</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  <span style="color:#996600;">&quot;rspec&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>The second thing to know is that Autotest looks in your <code>lib/</code> folder for your files and in your <code>spec/</code> folder for your tests, which should be called<br />
<code>file_name_spec.rb</code>.</p>
<p>There&#8217;s not much more to know. You can add awesome heads-up notification using libnotify. You need to get <code>libnotify-bin</code> using something like <code>sudo apt-get install libnotify-bin</code>. Then in the root of your project directory create an .autotest file like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> <span style="color:#6666ff; font-weight:bold;">Autotest::GnomeNotify</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Time notification will be displayed before disappearing automatically</span>
  EXPIRATION_IN_SECONDS = <span style="color:#006666;">2</span>
  ERROR_STOCK_ICON = <span style="color:#996600;">&quot;gtk-dialog-error&quot;</span>
  SUCCESS_STOCK_ICON = <span style="color:#996600;">&quot;gtk-dialog-info&quot;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Convenience method to send an error notification message</span>
  <span style="color:#008000; font-style:italic;">#</span>
  <span style="color:#008000; font-style:italic;"># [stock_icon]   Stock icon name of icon to display</span>
  <span style="color:#008000; font-style:italic;"># [title]        Notification message title</span>
  <span style="color:#008000; font-style:italic;"># [message]      Core message for the notification</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">notify</span> stock_icon, title, message
    options = <span style="color:#996600;">&quot;-t #{EXPIRATION_IN_SECONDS * 1000} -i #{stock_icon}&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">system</span> <span style="color:#996600;">&quot;notify-send #{options} '#{title}' <span style="color:#000099;">\&quot;</span>#{message}<span style="color:#000099;">\&quot;</span>&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  Autotest.<span style="color:#9900CC;">add_hook</span> <span style="color:#ff3333; font-weight:bold;">:red</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>at<span style="color:#006600; font-weight:bold;">|</span>
    example_text = <span style="color:#996600;">&quot;&quot;</span>
    num_examples = <span style="color:#006666;">0</span>
    examples = at.<span style="color:#9900CC;">files_to_test</span>.<span style="color:#9900CC;">each_pair</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>key, values<span style="color:#006600; font-weight:bold;">|</span>
      example_text <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">&quot;- #{key}<span style="color:#000099;">\n</span>&quot;</span>
      values.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>value<span style="color:#006600; font-weight:bold;">|</span>
        num_examples <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
        example_text <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">&quot;  * #{value}<span style="color:#000099;">\n</span>&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    notify ERROR_STOCK_ICON, <span style="color:#996600;">&quot;Tests failed&quot;</span>, <span style="color:#996600;">&quot;&lt;strong&gt;#{num_examples} examples failed in #{at.files_to_test.size} files&lt;/strong&gt;<span style="color:#000099;">\n</span>#{example_text}&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  Autotest.<span style="color:#9900CC;">add_hook</span> <span style="color:#ff3333; font-weight:bold;">:green</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>at<span style="color:#006600; font-weight:bold;">|</span>
    notify SUCCESS_STOCK_ICON, <span style="color:#996600;">&quot;All tests passed, good job!&quot;</span>, <span style="color:#996600;">&quot;&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>I&#8217;ve modified mine to have very verbose notifications. I got it from <a href="http://ph7spot.com/articles/getting_started_with_autotest">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stupididea.com/2009/03/15/non-rails-autotest-rspec-libnotify-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

