<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jasonw22</title>
    <link>http://virb.com/jasonw22</link>
    <description><![CDATA[]]></description>
    <generator>Virb 2.0 (@jasonw22)</generator>
    <language>en</language>
    <item>
      <title>Fallacy of volume and revenue: The iPhone difference</title>
      <link>http://virb.com/jasonw22/posts/text/1081743</link>
      <description><![CDATA[<blockquote>Shared by  Jason Wehmhoener 
<br />
@davidrdesign check this one</blockquote>
<div><br /><p>From Microsoft to Dell to Motorola, 2008 has been a very burdensome year for number-chasers. For those who find value in and thus only pay attention to market share, units shipped and revenue, the argument for volume is becoming increasingly more difficult to justify.</p>
<p>In <a href="http://gigaom.com/2009/01/29/what-sony-ericsson-must-do-to-succeed-in-the-mobile-space/">What Sony Ericsson Must Do To Stage a Comeback</a>, Jose Fermoso includes an interesting table:</p>
<p><img style="clear:both;display:block" src="http://counternotions.files.wordpress.com/2009/01/sales.png?w=430&amp;h=191" alt="sales.png" border="0" width="430" height="191" /></p>
<p>In any argument advanced to show why, for instance, Nokia is trailing Apple in the smartphone market, some will always counter by pointing to Nokia's volume dominance in units shipped, which dwarfs Apple's by a factor of 25X. Nokia's revenue is about 1.5X higher than Apple's as well. What's more interesting for shareholders, however, is the fact that Apple's <em>profit</em> is more than 2X over Nokia's.</p>
<p>Indeed, for every phone sold in this scenario, Apple makes over <em> 55X in profits</em> compared to Nokia:</p>
<p><img style="clear:both;display:block" src="http://counternotions.files.wordpress.com/2009/01/profits.png?w=431&amp;h=269" alt="profits.png" border="0" width="431" height="269" /></p>
<p><strong>Make it up in volume?</strong></p>
<p>The corollary to units shipped is often the notion of a <em>platform</em>: the larger it is, the more lucrative it usually gets. Once a product gains <a href="http://en.wikipedia.org/wiki/Network_effect">network effect</a>, it often dominates a market and thus is able to siphon off most of the revenue in that market. Revenue without profit, unfortunately, is not very meaningful.</p>
<p>Motorola, for instance, has shipped an awful lot of RAZRs but its mobile division has been at the brink of going under. In the table above, Sony Ericsson is shown to <em>lose</em> over $10 for each phone sold. No wonder Sony is slated to become one of the casualties of the contraction in the cellphone market. Nokia is the volume leader, but its per-phone profit is a meager $6.64, versus Apple's $369.27.</p>
<p>Surely, products without <em>significant</em> market share will fail to create an ecosystem necessary to garner mind share, developer interest and, ultimately, users. Android is not yet a significant threat to iPhone because it doesn't nearly have a comparable ecosystem and because it doesn't have a significant ecosystem it hasn't been able to attract enough developers to create one. Google may be able to fund Android's growing pains, but a company like Palm cannot do the same for its upcoming Pre.</p>
<p><strong>Profits matter</strong></p>
<p>Pre has to compete directly against the iPhone. But while Palm continues to spiral downward financially quarter-by-quarter, its competitor Apple is very <em>profitable</em>, likely to have about $30 billion in cash by the time the first Pre is sold.</p>
<p>The most amazing trick Apple has performed over the last six years has been the unflinching fiscal discipline to introduce new products into new markets to establish new platforms while maintaining remarkably profitable margins. Apple hasn't carved out 3/4 of the digital music market by inundating it with cheap devices. Neither has it elected to chase after market share by peddling $49 "iPhone nanos" at Radio Shack. As can be seen above, the iPhone is an extremely profitable product which fuels its own R&amp;D that keeps it a generation ahead of its potential rivals. In iPhone charts, third parties see not just the number of units sold but more importantly, a competently managed, profitable, growing ecosystem with which they can reliably associate, whereas any discussion of Pre's prospects must necessarily include <a href="http://counternotions.com/2009/01/12/pre/">Palm's dismal financial outlook</a>.</p>
<p>Therein lies the magic of the iPhone numbers.</p>
Posted in Apple, Google, Miscellaneous, Mobile]]></description>
      <pubDate>Tue, 10 Feb 2009 21:59:12 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1081743</guid>
    </item>
    <item>
      <title>Why Sustainable Power Is Unsustainable</title>
      <link>http://virb.com/jasonw22/posts/text/1077700</link>
      <description><![CDATA[Urchin writes &quot;Although scientists are agreed that we must cut carbon emissions from transport and electricity generation to prevent the globe's climate becoming hotter, the most advanced 'renewable' technologies are too often based upon non-renewable resources including indium and platinum -- resources that could dry up in 10-15 years if they were widely used in the renewable energy market.&quot;<p><a href="http://news.slashdot.org/article.pl?sid=09/02/07/2325242&amp;from=rss"><img src="http://slashdot.org/slashdot-it.pl?from=rss&amp;op=image&amp;style=h0&amp;sid=09/02/07/2325242" /></a></p><p><a href="http://news.slashdot.org/article.pl?sid=09/02/07/2325242&amp;from=rss">Read more of this story</a> at Slashdot.</p>
<p><a href="http://feedads.googleadservices.com/~at/9E5Wr5Dz1UhEN9DvRPSeQAdZ9-g/a"><img src="http://feedads.googleadservices.com/~at/9E5Wr5Dz1UhEN9DvRPSeQAdZ9-g/i" border="0" ismap="ismap" /></a></p>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:12 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077700</guid>
    </item>
    <item>
      <title>Rob Moxon</title>
      <link>http://virb.com/jasonw22/posts/text/1077699</link>
      <description><![CDATA[<p><img src="http://farm4.static.flickr.com/3396/3262066938_5c8fab1c93_o.jpg" alt="alt" /></p>
<p>Third year student, <a href="http://www.robmoxon.co.uk/">Rob Moxon</a>, is currently seeking work placements in and around the UK.</p>

    


<a href="http://www.addthis.com/bookmark.php"><img src="http://www.formfiftyfive.com/wp-includes/images/heart.gif" border="0" alt="alt" /> Spread the love!</a>

]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:12 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077699</guid>
    </item>
    <item>
      <title>About that deflation risk</title>
      <link>http://virb.com/jasonw22/posts/text/1077698</link>
      <description><![CDATA[<div><div><img src="http://www.princeton.edu/~pkrugman/gap_inflation" alt="INSERT DESCRIPTION" /><span>Look out below</span></div> <p>There has been a distinct change in tone from the Obama team today, as they seem to have become suddenly aware that there's a real risk that the stimulus plan will either fail to pass, or be emasculated to the point that it doesn't come close to doing the job. Obama himself has warned of catastrophe if we fail to act, and -- finally!- <a href="http://theplumline.whorunsgov.com/economy/obama-rachets-up-rhetoric-attacks-gop-economic-philosophy/">denounced the tax-cut philosophy</a>. Meanwhile, Larry Summers has finally <a href="http://www.bloomberg.com/apps/news?pid=newsarchive&amp;sid=aLqmR5ZB_RYI">made the point</a> I've been pushing for a while -- that we're at major risk of falling into a deflationary trap.</p> <p>I thought it might be useful to present a bit of evidence behind that concern. The figure above plots an estimate of the output gap -- the difference between actual and potential GDP, as a percentage of potential -- and the change in the inflation rate. Both series are taken from the IMF <a href="http://www.imf.org/external/pubs/ft/weo/2008/02/weodata/index.aspx">WEO database</a>, for convenience, and use data from 1980-2007.</p> <p>It's not a perfect fit -- this is economics, not physics, and anyway stuff besides the output gap bounces inflation around from year to year. But still, there's a clear correlation, driven largely but not entirely by the deep slump and disinflation of the early 1980s, and an implied slope of about 0.5 -- that is, every percentage point by which real GDP fall short of potential tends to reduce the inflation rate by about half a point over the course of the year.</p> <p>And right now the <a href="http://www.cbo.gov/ftpdocs/99xx/doc9967/01-27-StateofEconomy_Testimony.pdf">CBO is saying</a> that in the absence of a policy action the average output gap will average 6.8 percent over the next two years. Do the math: if anything like the historical relationship between output and inflation holds, we're looking at major deflation.</p> <p>OK, maybe that relationship won't hold -- getting to actual deflation may take a deeper slump than merely reducing the inflation rate. And maybe a regression driven in part by 80s data isn't a good guide to current events. But deflation is a huge risk -- and getting out of a deflationary trap is very, very hard.</p> <p>We truly are flirting with disaster.</p> </div> <p><i>-- Delivered by <a href="http://feed43.com/">Feed43</a> service</i></p>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:11 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077698</guid>
    </item>
    <item>
      <title>Thelonius Monk's advice to saxophonist Steve Lacy (1960)</title>
      <link>http://virb.com/jasonw22/posts/text/1077697</link>
      <description><![CDATA[<p><img alt="MYA6SaFwkj4zx7gxbt2HM8VCo1_500" title="MYA6SaFwkj4zx7gxbt2HM8VCo1_500" src="http://www.swiss-miss.com/wp-content/uploads/legacy/a/6a00d834515beb69e20111683ca574970c-800wi-480x652.jpg" border="0" /></p>
<p><em>A Genius is the one most like himself.<br />
- Thelonius Monk</em></p>
<p><a href="http://log.ericalba.org/post/74636533/mrgan-thelonius-monks-advice-to-saxophonist">Thelonius Monk's advice to saxophonist Steve Lacy</a> (1960)</p>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:11 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077697</guid>
    </item>
    <item>
      <title>The smart grid</title>
      <link>http://virb.com/jasonw22/posts/text/1077696</link>
      <description><![CDATA[<p><img src="http://designyoutrust.com/wp-content/uploads4/ge03.jpg" alt="alt" width="580" /></p>
<p>What if you power the 21st century with 21st century power?<br />
GE shows their innovation. Built up on a great <a href="http://ge.ecomagination.com/smartgrid/">website</a>.</p>
<hr />
<p>Posted by Sublevel for <a href="http://designyoutrust.com">Design Yout Trust</a>, 2009. <a href="http://designyoutrust.com/2009/02/07/the-smart-grid/">Permalink</a> | <a href="http://designyoutrust.com/2009/02/07/the-smart-grid/#comments">1 comment</a>
<br />
Design You Trust sponsors. We're proud all of them:<br />
<a href="http://www.dreamtemplate.com/">Dream Template</a> - Premium Website Templates | <a href="https://w3-markup.com/order">W3 MARKUP</a> - CSS &amp; HTML for Your Designs | <a href="http://Envisionext.net">Envisionext.net</a> - Bulletproof Hosting | <a href="http://www.behance.net">Behance Network</a></p><img src="http://feeds2.feedburner.com/~r/dyt/~4/B6DSa2haPR8" height="1" width="1" />]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:10 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077696</guid>
    </item>
    <item>
      <title>Maker Profile - Music Machines on Make: television</title>
      <link>http://virb.com/jasonw22/posts/text/1077695</link>
      <description><![CDATA[<p></p>

<p>Enter the plugged-in world of Tim Kaiser, a maker who creates experimental musical instruments from scavenged objects. Tim seeks out unique sounds everywhere he goes plucking chimes out of grandfather clocks and jingle mechanisms from children's toys.  And he doesn't stop there - his electronic instruments have to look cool, too.   So, Tim houses them in wildly inventive containers. Then meet the musical maverick who inspired him, Harry Partch. </p>

<p>Learn more about Tim Kaiser at <a href="http://www.timkaiser.org/">www.timkaiser.org</a>. </p>

<p>Get the <a href="http://blip.tv/file/get/Make-MakerProfileMusicMachinesOnMakeTelevision747.m4v">m4v</a>, subscribe in <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=74069835&amp;s=143441">iTunes</a>, watch on <a href="http://www.youtube.com/watch?v=mTJYq7wU2rM">YouTube </a>or <a href="http://blip.tv/file/1744720">Blip</a>.<br />
<strong></strong></p>
<a href="http://blog.makezine.com/archive/2009/02/maker_profile_music_machines_on_mak.html?CMP=OTC-0D6B48984890">Read more</a> | <a href="http://blog.makezine.com/archive/2009/02/maker_profile_music_machines_on_mak.html?CMP=OTC-0D6B48984890"> Permalink</a> | <a href="http://blog.makezine.com/archive/2009/02/maker_profile_music_machines_on_mak.html?CMP=OTC-0D6B48984890#comments">Comments</a> | 









<a href="http://blog.makezine.com/archive/make_television/?CMP=OTC-0D6B48984890">Read more articles in Make: television</a> | 


<a href="http://digg.com/submit?url=blog.makezine.com%2Farchive%2F2009%2F02%2Fmaker_profile_music_machines_on_mak.html&amp;title=Maker%20Profile%20-%20Music%20Machines%20on%20Make%3A%20television&amp;bodytext=%20Enter%20the%20plugged-in%20world%20of%20Tim%20Kaiser%2C%20a%20maker%20who%20creates%20experimental%20musical%20instruments%20from%20scavenged%20objects.%20Tim%20seeks%20out%20unique%20sounds%20everywhere%20he%20goes%20plucking%20chimes%20out%20of%20grandfather%20clocks%20and%20jingle%20mechanisms%20from%20children%26apos%3Bs%20toys.%20And%20he..&amp;topic=tech_news">Digg this!</a>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:10 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077695</guid>
    </item>
    <item>
      <title>Pure Data - open source audiovisual processing environment</title>
      <link>http://virb.com/jasonw22/posts/text/1077694</link>
      <description><![CDATA[<p><span style="display:inline"><img alt="pd_20090207.jpg" src="http://www.hackszine.com/pd_20090207.jpg" width="600" height="480" /></span></p>

<p>Pure Data is an open source patch programming language, similar to Max/MSP, written by Miller Puckette. It's a high-level visual programming environment, where you add input and data manipulation objects to a stage and drag connections between them to define how messages are passed through the system when it is running. With a minor amount of effort, it's possible to create applications that perform complex real-time manipulation of audio and video data.</p>

<p>I was introduced to Pure Data (Pd) this afternoon by my friend Vince Veneziani. He's working on creating a tutorial for Pd and sent over an introduction to the programming environment, including a sample application patch that plays video on the faces of a bunch of spinning cubes, which can be controlled in real time as the application runs.</p>

<blockquote>About six months ago, I was reading up on music creation and the program Max/MSP, a graphical workflow environment for creating and manipulating audio and video. Very complex, but powerful stuff. The author of Max/MSP, Miller S. Puckette, later created a piece of similar, open-source software called Pure Data (pd). Pure Data is similar to Max/MSP except that it's free for anyone to use and make stuff with.

<p><br />
In this post, we'll go over what exactly I managed to do with PD. It involved using an M-Audio MIDI controller to manipulate videos in a real-time graphical environment. Sound too complicated or scary for you? It's really not. C'mon, I'll show you how it works.</p></blockquote>

<p>I mentioned that Pd is a graphical programming environment, but like any language, there's a steep initial learning curve, and you'll need to figure out a lot about the types of objects that are available and how they function. I've only started playing with this, myself, but thankfully there are a number of helpful tutorials in the Pd documentation.</p>

<p>Have you used Pd before? If you have any tips, tricks, tutorials, or a cool patch you'd like to share, add it to the comments!</p>

<p><a href="http://puredata.info/">Pure Data</a><br />
<a href="http://www.gearfuse.com/gearfuse-originals-video-midi-mixer-using-pure-data/">Vince's Pd Introduction - Video MIDI Mixer</a><br />
<a href="http://puredata.info/docs/tutorials">Pd Tutorials</a></p>
<a href="http://blog.makezine.com/archive/2009/02/pure_data_open_source_audiovisual_p.html?CMP=OTC-0D6B48984890">Read more</a> | <a href="http://blog.makezine.com/archive/2009/02/pure_data_open_source_audiovisual_p.html?CMP=OTC-0D6B48984890"> Permalink</a> | <a href="http://blog.makezine.com/archive/2009/02/pure_data_open_source_audiovisual_p.html?CMP=OTC-0D6B48984890#comments">Comments</a> | 



<a href="http://blog.makezine.com/archive/hacks/?CMP=OTC-0D6B48984890">Read more articles in hacks</a> | 


<a href="http://digg.com/submit?url=blog.makezine.com%2Farchive%2F2009%2F02%2Fpure_data_open_source_audiovisual_p.html&amp;title=Pure%20Data%20-%20open%20source%20audiovisual%20processing%20environment&amp;bodytext=%20Pure%20Data%20is%20an%20open%20source%20patch%20programming%20language%2C%20similar%20to%20Max%2FMSP%2C%20written%20by%20Miller%20Puckette.%20It%26apos%3Bs%20a%20high-level%20visual%20programming%20environment%2C%20where%20you%20add%20input%20and%20data%20manipulation%20objects%20to%20a%20stage%20and%20drag%20connections%20between%20them%20to...&amp;topic=tech_news">Digg this!</a>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:09 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077694</guid>
    </item>
    <item>
      <title>IBM Offers to Send Laid-Off Staff to Other Countries</title>
      <link>http://virb.com/jasonw22/posts/text/1077693</link>
      <description><![CDATA[TheAmit writes to tell us that many recently laid off IBM employees have been offered jobs if they will only move somewhere it is cheap to employ them. IBM's new Project Match program offers some financial assistance for moving and immigration help for visas. "However, the move has not gone well with the IBM staff union. Slamming the offer, a union spokesperson said that not only were jobs being shipped overseas, but Big Blue was trying to export the people for peanuts too. He added that at a time of rising unemployment IBM should be looking to keep both the work and the workers in the United States. "<p><a href="http://news.slashdot.org/article.pl?sid=09/02/06/2010241&amp;from=rss"><img src="http://slashdot.org/slashdot-it.pl?from=rss&amp;op=image&amp;style=h0&amp;sid=09/02/06/2010241" /></a></p><p><a href="http://news.slashdot.org/article.pl?sid=09/02/06/2010241&amp;from=rss">Read more of this story</a> at Slashdot.</p>
<p><a href="http://feedads.googleadservices.com/~at/VdJVJYSLN7VKKdGeP-DMrvIH6H8/a"><img src="http://feedads.googleadservices.com/~at/VdJVJYSLN7VKKdGeP-DMrvIH6H8/i" border="0" ismap="ismap" /></a></p>]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:07 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077693</guid>
    </item>
    <item>
      <title>Lake Shikotsu Ice Festival 2009 (Japan)</title>
      <link>http://virb.com/jasonw22/posts/text/1077692</link>
      <description><![CDATA[<p><img src="http://designyoutrust.com/wp-content/uploads4/snow1.jpg" alt="alt" width="580" height="400" /><br />
<br /><br />Read the rest of <a href="http://designyoutrust.com/2009/02/06/lake-shikotsu-ice-festival-2009-japan/">Lake Shikotsu Ice Festival 2009 (Japan)</a></p>
<hr />
<p>Posted by Dmitry Utkin for <a href="http://designyoutrust.com">Design Yout Trust</a>, 2009. <a href="http://designyoutrust.com/2009/02/06/lake-shikotsu-ice-festival-2009-japan/">Permalink</a> | <a href="http://designyoutrust.com/2009/02/06/lake-shikotsu-ice-festival-2009-japan/#comments">No comments</a>
<br />
Design You Trust sponsors. We're proud all of them:<br />
<a href="http://www.dreamtemplate.com/">Dream Template</a> - Premium Website Templates | <a href="https://w3-markup.com/order">W3 MARKUP</a> - CSS &amp; HTML for Your Designs | <a href="http://Envisionext.net">Envisionext.net</a> - Bulletproof Hosting | <a href="http://www.behance.net">Behance Network</a></p><img src="http://feeds2.feedburner.com/~r/dyt/~4/O_sTr8hbIls" height="1" width="1" />]]></description>
      <pubDate>Sun, 08 Feb 2009 22:55:06 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1077692</guid>
    </item>
    <item>
      <title>Sense.</title>
      <link>http://virb.com/jasonw22/posts/text/1043628</link>
      <description><![CDATA[<p>A few moments ago, shortly after President Obama took the oath of office, a switch was flipped and <a href="http://www.whitehouse.gov">a new website for the Whitehouse was unveiled</a>. Since the 90's there have been more than a handful of upgrades, updates, and redesigns to the President's website but this new site is a vast improvement over the others. Not due to the wonderful design or the fact that each page validates, those improvements are nice but they are small and mostly unseen merits compared to the bigger improvements to the space.</p>

<p>Macon Phillips (former online strategist for Blue State Digital]]></description>
      <pubDate>Tue, 20 Jan 2009 19:07:24 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1043628</guid>
    </item>
    <item>
      <title>What a Hat</title>
      <link>http://virb.com/jasonw22/posts/text/1043627</link>
      <description><![CDATA[<p> <img src="http://media.canada.com/24be34eb-ecfe-4969-88c2-5aa898db4139/arethaseyward.jpg" alt="alt" /></p>
<p>I really don't think enough attention is being paid to Aretha Franklin's hat. I mean, that was <i>some hat</i>. She walked out on stage and a TNR colleague, who is manning the office with me, and I both uttered, &quot;Wow.&quot; And my mom immediately texted me, &quot;The hat! Yes. Aretha!&quot; </p><p>--<i>Seyward Darby </i><br /></p><img src="http://blogs.tnr.com/tnr/aggbug.aspx?PostID=208780" width="1" height="1" />]]></description>
      <pubDate>Tue, 20 Jan 2009 19:07:23 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1043627</guid>
    </item>
    <item>
      <title>The Worlds Hardest Game - Free Arcade &amp; Classic Game from AddictingGames</title>
      <link>http://virb.com/jasonw22/posts/text/1027224</link>
      <description><![CDATA[<blockquote>Shared by  Jason Wehmhoener 
<br />
for cryin' out loud</blockquote>
The Worlds Hardest Game, a Free Arcade &amp; Classic Game from AddictingGames:  Don't Get Hit By Blue Balls! Keep your Red Square away from the Blue Balls on your way to the Green Zone or you'll DIE! And trust us; you'll die. A lot. This really is the World's Hardest Game!
]]></description>
      <pubDate>Mon, 12 Jan 2009 02:13:47 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1027224</guid>
    </item>
    <item>
      <title>Writing Blazing Fast, Infinitely Scalable, Pure-WSGI Utilities</title>
      <link>http://virb.com/jasonw22/posts/text/1027223</link>
      <description><![CDATA[<blockquote>Shared by  Jason Wehmhoener 
<br />
Makes sense to me.</blockquote>
<div><p>Lately I've really fallen in love with writing utilities whose interface is
simply HTTP.  By making it accessible via HTTP, it's really easy to write
clients that talk to the utility and, if the need arises, there are lots of
tools that already exist for doing things with HTTP, like load balancing and
caching, etc.</p>
<p>While it would be easy to use a framework to build these utilities, lately I've
been choosing not to do so.  Web frameworks like <a href="http://www.djangoproject.com/">Django</a> and <a href="http://pylonshq.com/">Pylons</a> are great
when you need to build a fully-featured web application that will be accessible
by people.  When it will only be computers talking to the service, however, a
lot of the machinery provided by frameworks is unneeded and will only slow your
utility down.  Instead of using a framework, we're going to write a pure <a href="http://wsgi.org/wsgi/">WSGI</a>
application.</p>
<div>
<h1><a name="an-example-music-discovery-website">An Example: Music Discovery Website</a></h1>
<p>This has all been very abstract, so let's take an example: Suppose you run a
music discovery website that lets you play songs online.  Next to each song, you
simply want to display how many times the song has been played.</p>
<p>One solution to that problem could be to have a <span>play_count</span> column on the
table where the song metadata is stored.  Every time someone plays the song, you
could issue an <span>UPDATE</span> on the row and increase the <span>play_count</span> by one.
This solution will work while your site is small, but as more and more people
begin using the application, the number of writes to your database is going to
kill its performance.</p>
<p>A much more robust and scalable solution is to append a new line to a text
log file every time a song is played, and have a process run regularly to scoop
up all of the log files and update those <span>play_count</span> fields in the database.</p>
<p>However, even if you have that regular process run once every hour, there's
still too great a lag time between when a user takes an action and when they see
the results of that action.  This is where our WSGI utility comes into play. It
can serve as a realtime play counter to count the plays in between the time when
the logs are analyzed and the <span>play_count</span> columns updated.</p>
</div>
<div>
<h1><a name="song-play-counter">Song Play Counter</a></h1>
<p>We can design the interface for our WSGI song play counter utility any way that
we like, but I'm going to try to keep it as <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> as I can.  The interface
will look like this:</p>
<ul>
<li><span>GET</span> <span>/song/SONGID</span> will return the current play count of the given song</li>
<li><span>POST</span> <span>/song/SONGID</span> will increment the play count of the given song by one, and return its new value</li>
<li><span>GET</span> <span>/</span> will return a mapping of all songs registered to their respective play counts</li>
<li><span>DELETE</span> <span>/</span> will clear the whole mapping</li>
</ul>
<p>So let's get started.  First, I always like to start with a very basic skeleton:</p>
<div><pre><span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">application</span>(environ, start_response):
    start_response(<span style="color:#BA2121">'200 OK'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
    <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#BA2121">'Hello world!'</span>,)
</pre></div>
<p>This does what you would imagine, returns <span>Hello</span> <span>world!</span> to each and every
request that it receives.  Not very useful, so let's make it more interesting:</p>
<div><pre><span style="color:#008000;font-weight:bold">from</span> <span style="color:#0000FF;font-weight:bold">collections</span> <span style="color:#008000;font-weight:bold">import</span> defaultdict
counts <span style="color:#666666">=</span> defaultdict(<span style="color:#008000">int</span>)

<span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">application</span>(environ, start_response):
    <span style="color:#008000;font-weight:bold">global</span> counts
    path <span style="color:#666666">=</span> environ[<span style="color:#BA2121">'PATH_INFO'</span>]
    method <span style="color:#666666">=</span> environ[<span style="color:#BA2121">'REQUEST_METHOD'</span>]
    <span style="color:#008000;font-weight:bold">if</span> path<span style="color:#666666">.</span>startswith(<span style="color:#BA2121">'/song/'</span>):
        song_id <span style="color:#666666">=</span> path[<span style="color:#666666">6</span>:]
        <span style="color:#008000;font-weight:bold">if</span> method <span style="color:#666666">==</span> <span style="color:#BA2121">'GET'</span>:
            start_response(<span style="color:#BA2121">'200 OK'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#008000">str</span>(counts[song_id]),)
        <span style="color:#008000;font-weight:bold">elif</span> method <span style="color:#666666">==</span> <span style="color:#BA2121">'POST'</span>:
            counts[song_id] <span style="color:#666666">+=</span> <span style="color:#666666">1</span>
            start_response(<span style="color:#BA2121">'200 OK'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#008000">str</span>(counts[song_id]),)
        <span style="color:#008000;font-weight:bold">else</span>:
            start_response(<span style="color:#BA2121">'405 METHOD NOT ALLOWED'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#BA2121">'Method Not Allowed'</span>,)
    start_response(<span style="color:#BA2121">'404 NOT FOUND'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
    <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#BA2121">'Not Found'</span>,)
</pre></div>
<p>We've now added the data structure that we're using to keep track of the counts,
which in this case is a <span>defaultdict(int)</span>.  We're also now looking at the
request path and method, as well.  If it's a GET starting with /song/, we look
up the count and return it, and if it's a POST starting with /song/, we
increment it by one before returning it.  Also, we're doing the proper thing if
we detect a method that's not allowed: we're returning HTTP error code 405.</p>
<p>Now let's add the final bit of functionality:</p>
<div><pre><span style="color:#008000;font-weight:bold">from</span> <span style="color:#0000FF;font-weight:bold">collections</span> <span style="color:#008000;font-weight:bold">import</span> defaultdict
counts <span style="color:#666666">=</span> defaultdict(<span style="color:#008000">int</span>)

<span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">application</span>(environ, start_response):
    <span style="color:#408080;font-style:italic"># ... start of app</span>
    <span style="color:#008000;font-weight:bold">if</span> path<span style="color:#666666">.</span>startswith(<span style="color:#BA2121">'/song/'</span>):
        <span style="color:#408080;font-style:italic"># ... song-specific logic</span>
    <span style="color:#008000;font-weight:bold">elif</span> path <span style="color:#666666">==</span> <span style="color:#BA2121">'/'</span>:
        <span style="color:#008000;font-weight:bold">if</span> method <span style="color:#666666">==</span> <span style="color:#BA2121">'GET'</span>:
            res <span style="color:#666666">=</span> <span style="color:#BA2121">','</span><span style="color:#666666">.</span>join([<span style="color:#BA2121">'</span><span style="color:#BB6688;font-weight:bold">%s</span><span style="color:#BA2121">=</span><span style="color:#BB6688;font-weight:bold">%s</span><span style="color:#BA2121">'</span> <span style="color:#666666">%</span> (k, v) <span style="color:#008000;font-weight:bold">for</span> k, v <span style="color:#AA22FF;font-weight:bold">in</span> counts<span style="color:#666666">.</span>iteritems()])
            start_response(<span style="color:#BA2121">'200 OK'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (res,)
        <span style="color:#008000;font-weight:bold">elif</span> method <span style="color:#666666">==</span> <span style="color:#BA2121">'DELETE'</span>:
            counts <span style="color:#666666">=</span> defaultdict(<span style="color:#008000">int</span>)
            start_response(<span style="color:#BA2121">'200 OK'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#BA2121">'OK'</span>,)
        <span style="color:#008000;font-weight:bold">else</span>:
            start_response(<span style="color:#BA2121">'405 METHOD NOT ALLOWED'</span>, [(<span style="color:#BA2121">'content-type'</span>, <span style="color:#BA2121">'text/plain'</span>)])
            <span style="color:#008000;font-weight:bold">return</span> (<span style="color:#BA2121">'Method Not Allowed'</span>,)
    <span style="color:#408080;font-style:italic"># ... rest of app</span>
</pre></div>
<p>We've done basically the same thing here as we did with the previous example: we
are looking at the request path and method and doing the appropriate action.
There really is nothing very tricky going on here.  We're inventing our own
format for the case where we return the counts for all songs, but it's nothing
that will be hard to parse.</p>
<p><strong>NOTE:</strong> Generally you would want to use some sort of threading lock primitive
before accessing a global dictionary like this.  I will be using <a href="http://pypi.python.org/pypi/Spawning/0.7">Spawning</a> to
run this <a href="http://wsgi.org/wsgi/">WSGI</a> application, with a threadpool size of 0 to use cooperative
coroutines instead of standard threads, so I am able to get away without locks
for this application.  To install <a href="http://pypi.python.org/pypi/Spawning/0.7">Spawning</a> for yourself, just type:</p>
<div><pre>sudo easy_install Spawning
</pre></div>
</div>
<div>
<h1><a name="running-the-utility">Running the Utility</a></h1>
<p>Let's just take a quick look at how this utility works, from the command line:</p>
<div><pre><span style="color:#19177C">$ </span>spawn -t 0 -p 8000 counter.application
</pre></div>
<p>...and in another window:</p>
<div><pre><span style="color:#19177C">$ </span>curl http://127.0.0.1:8000/song/1
0
<span style="color:#19177C">$ </span>curl -X POST http://127.0.0.1:8000/song/1
1
<span style="color:#19177C">$ </span>curl http://127.0.0.1:8000/song/1
1
<span style="color:#19177C">$ </span>curl -X POST http://127.0.0.1:8000/song/5
1
<span style="color:#19177C">$ </span>curl -X POST http://127.0.0.1:8000/song/5
2
<span style="color:#19177C">$ </span>curl http://127.0.0.1:8000/
<span style="color:#19177C">1</span><span style="color:#666666">=</span>1,5<span style="color:#666666">=</span>2
<span style="color:#19177C">$ </span>curl -X DELETE http://127.0.0.1:8000/
OK
</pre></div>
<p>As you can see, it seems to be working correctly. The play counter is behaving
as expected.</p>
</div>
<div>
<h1><a name="writing-a-client-to-talk-to-our-utility">Writing a Client to Talk to our Utility</a></h1>
<p>Now that we have our WSGI utility written to keep track of the counts on our
songs, we should write a client library to communicate with this server.</p>
<div><pre><span style="color:#008000;font-weight:bold">import</span> <span style="color:#0000FF;font-weight:bold">httplib</span>

<span style="color:#008000;font-weight:bold">class</span> <span style="color:#0000FF;font-weight:bold">CountClient</span>(<span style="color:#008000">object</span>):
    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">__init__</span>(<span style="color:#008000">self</span>, servers<span style="color:#666666">=</span>[<span style="color:#BA2121">'127.0.0.1:8000'</span>]):
        <span style="color:#008000">self</span><span style="color:#666666">.</span>servers <span style="color:#666666">=</span> servers

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">_get_server</span>(<span style="color:#008000">self</span>, song_id):
        <span style="color:#008000;font-weight:bold">return</span> <span style="color:#008000">self</span><span style="color:#666666">.</span>servers[song_id <span style="color:#666666">%</span> <span style="color:#008000">len</span>(<span style="color:#008000">self</span><span style="color:#666666">.</span>servers)]

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">_song_request</span>(<span style="color:#008000">self</span>, song_id, method):
        conn <span style="color:#666666">=</span> httplib<span style="color:#666666">.</span>HTTPConnection(<span style="color:#008000">self</span><span style="color:#666666">.</span>_get_server(song_id))
        conn<span style="color:#666666">.</span>request(method, <span style="color:#BA2121">'/song/</span><span style="color:#BB6688;font-weight:bold">%s</span><span style="color:#BA2121">'</span> <span style="color:#666666">%</span> (song_id,))
        resp <span style="color:#666666">=</span> conn<span style="color:#666666">.</span>getresponse()
        play_count <span style="color:#666666">=</span> <span style="color:#008000">int</span>(resp<span style="color:#666666">.</span>read())
        conn<span style="color:#666666">.</span>close()
        <span style="color:#008000;font-weight:bold">return</span> play_count

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">get_play_count</span>(<span style="color:#008000">self</span>, song_id):
        <span style="color:#008000;font-weight:bold">return</span> <span style="color:#008000">self</span><span style="color:#666666">.</span>_song_request(song_id, <span style="color:#BA2121">'GET'</span>)

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">increment_play_count</span>(<span style="color:#008000">self</span>, song_id):
        <span style="color:#008000;font-weight:bold">return</span> <span style="color:#008000">self</span><span style="color:#666666">.</span>_song_request(song_id, <span style="color:#BA2121">'POST'</span>)

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">get_all_play_counts</span>(<span style="color:#008000">self</span>):
        dct <span style="color:#666666">=</span> {}
        <span style="color:#008000;font-weight:bold">for</span> server <span style="color:#AA22FF;font-weight:bold">in</span> <span style="color:#008000">self</span><span style="color:#666666">.</span>servers:
            conn <span style="color:#666666">=</span> httplib<span style="color:#666666">.</span>HTTPConnection(server)
            conn<span style="color:#666666">.</span>request(<span style="color:#BA2121">'GET'</span>, <span style="color:#BA2121">'/'</span>)
            counts <span style="color:#666666">=</span> conn<span style="color:#666666">.</span>getresponse()<span style="color:#666666">.</span>read()
            conn<span style="color:#666666">.</span>close()
            <span style="color:#008000;font-weight:bold">if</span> <span style="color:#AA22FF;font-weight:bold">not</span> counts:
                <span style="color:#008000;font-weight:bold">continue</span>
            dct<span style="color:#666666">.</span>update(<span style="color:#008000">dict</span>([<span style="color:#008000">map</span>(<span style="color:#008000">int</span>, pair<span style="color:#666666">.</span>split(<span style="color:#BA2121">'='</span>)) <span style="color:#008000;font-weight:bold">for</span> pair <span style="color:#AA22FF;font-weight:bold">in</span> counts<span style="color:#666666">.</span>split(<span style="color:#BA2121">','</span>)]))
        <span style="color:#008000;font-weight:bold">return</span> dct

    <span style="color:#008000;font-weight:bold">def</span> <span style="color:#0000FF">reset_all_play_counts</span>(<span style="color:#008000">self</span>):
        status <span style="color:#666666">=</span> <span style="color:#008000">True</span>
        <span style="color:#008000;font-weight:bold">for</span> server <span style="color:#AA22FF;font-weight:bold">in</span> <span style="color:#008000">self</span><span style="color:#666666">.</span>servers:
            conn <span style="color:#666666">=</span> httplib<span style="color:#666666">.</span>HTTPConnection(server)
            conn<span style="color:#666666">.</span>request(<span style="color:#BA2121">'DELETE'</span>, <span style="color:#BA2121">'/'</span>)
            resp <span style="color:#666666">=</span> conn<span style="color:#666666">.</span>getresponse()<span style="color:#666666">.</span>read()
            <span style="color:#008000;font-weight:bold">if</span> resp <span style="color:#666666">!=</span> <span style="color:#BA2121">'OK'</span>:
                status <span style="color:#666666">=</span> <span style="color:#008000">False</span>
            conn<span style="color:#666666">.</span>close()
        <span style="color:#008000;font-weight:bold">return</span> status
</pre></div>
<p>What we have here is a simple class that converts Python method calls to the
RESTful HTTP equivalents that we have written for our WSGI utility.  The best
part about this setup, though, is that it uses a hash based on the song_id to
determine which server to connect to.  If you only ever do per-song operations,
this setup is quite literally infinitely scalable.  You could have thousands of
servers keeping track of song counts, none of them knowing about each other.
Since the decision about which server to talk to happens on the client side,
there needs to be no communication between the servers whatsoever.</p>
<p>However, if you start to use the <span>get_all_play_counts</span> and
<span>reset_all_play_counts</span>, then eventually after many many servers are added it
will start to get slower.</p>
<p>Let's explore this client:</p>
<div><pre><span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span><span style="color:#008000;font-weight:bold">from</span> <span style="color:#0000FF;font-weight:bold">countclient</span> <span style="color:#008000;font-weight:bold">import</span> CountClient
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c <span style="color:#666666">=</span> CountClient()
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>get_play_count(<span style="color:#666666">1</span>)
<span style="color:#808080">0</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>increment_play_count(<span style="color:#666666">1</span>)
<span style="color:#808080">1</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>increment_play_count(<span style="color:#666666">1</span>)
<span style="color:#808080">2</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>get_play_count(<span style="color:#666666">1</span>)
<span style="color:#808080">2</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>increment_play_count(<span style="color:#666666">5</span>)
<span style="color:#808080">1</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>get_all_play_counts()
<span style="color:#808080">{1: 2, 5: 1}</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>reset_all_play_counts()
<span style="color:#808080">True</span>
<span style="color:#000080;font-weight:bold">&gt;&gt;&gt; </span>c<span style="color:#666666">.</span>get_all_play_counts()
<span style="color:#808080">{}</span>
</pre></div>
</div>
<div>
<h1><a name="benchmarks">Benchmarks!</a></h1>
<p>I'm not a benchmarking nut in any way, shape, or form these days.  However, in
Python it's quite tough to beat pure-WSGI applications for raw speed.  Using my
MacBook Pro with a 2.5GHz Intel Core 2 Duo and 2 GB 667 MHz DDR2 SDRAM I got
these results from ApacheBench:</p>
<pre>e:Desktop ericflo$ ab -n 10000 http://127.0.0.1:8000/song/1
...
Concurrency Level:      1
Time taken for tests:   7.792 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1020000 bytes
HTML transferred:       10000 bytes
Requests per second:    1283.31 [#/sec] (mean)
Time per request:       0.779 [ms] (mean)
Time per request:       0.779 [ms] (mean, across all concurrent requests)
Transfer rate:          127.83 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:     0    1   0.8      1      43
Waiting:        0    1   0.5      0      43
Total:          1    1   0.8      1      43
</pre>
<p>Take these results with a huge grain of salt, but suffice it to say, it's fast.
It would probably be even faster using <a href="http://code.google.com/p/modwsgi/">mod_wsgi</a> instead of <a href="http://pypi.python.org/pypi/Spawning/0.7">Spawning</a>.</p>
</div>
<div>
<h1><a name="drawing-conclusions-from-this-exercise">Drawing Conclusions From This Exercise</a></h1>
<p>I don't want to misconstrue my standpoint on this: frameworks definitely have
their place.  There's no way you would want to write an entire user-facing
application with pure WSGI unless you were using lots of middleware and stuff
and at some point you're just recreating <a href="http://pylonshq.com/">Pylons</a>.  But when you're writing a
HTTP utility like we did here, then I think that pure-WSGI is the way to go.</p>
<p>I'd like to touch on one more nice side effect of using pure-WSGI: You can run
it in any application server that supports WSGI.  That means
<a href="http://code.google.com/appengine/">Google App Engine</a>, Apache, Spawning, CherryPy, and many other containers. It
can easily be served by pure python so even on very restrictive shared hosting
it's possible to run your utility.</p>
<p>What do you think of pure-WSGI utilities?  Are you using them in your app? I'd
love to hear about it--leave me a comment and tell me your thoughts on this
subject.</p>
</div></div>
]]></description>
      <pubDate>Mon, 12 Jan 2009 02:13:46 -0800</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/1027223</guid>
    </item>
    <item>
      <title>Rock Port, Missouri, First 100 Percent Wind-powered Community In U.S.</title>
      <link>http://virb.com/jasonw22/posts/text/721977</link>
      <description><![CDATA[Rock Port Missouri, with a population of just over 1,300 residents, has announced that it is the first 100% wind powered community in the United States. Four wind turbines supply all the electricity for the small town. Rock Port's 100% wind power status is due to four wind turbines located on agricultural lands within the city limits of Rock Port (Atchison County). The city of Rock Port uses approximately 13 million kilowatt hours of electricity each year. It is predicted that these four turbines will produce 16 million kilowatt hours each year.<img src="http://feeds.sciencedaily.com/~r/sciencedaily/~4/336576361" height="1" width="1" />]]></description>
      <pubDate>Wed, 16 Jul 2008 10:29:19 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/721977</guid>
    </item>
    <item>
      <title>Incorrectly Cleaved Protein Leads To Schizophrenia</title>
      <link>http://virb.com/jasonw22/posts/text/721976</link>
      <description><![CDATA[The causes of schizophrenia are not yet clear. But now, researchers have discovered that a disturbed cleavage of the Nrg-1 protein lies at the basis of the development of the disease. Greater understanding of this molecular process is a first step toward improved diagnosis and more effective treatment of schizophrenia and other related disorders.<img src="http://feeds.sciencedaily.com/~r/sciencedaily/~4/336576368" height="1" width="1" />]]></description>
      <pubDate>Wed, 16 Jul 2008 10:29:19 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/721976</guid>
    </item>
    <item>
      <title>A Vast Repository for Greenhouse Gas? [Deep Sea News]</title>
      <link>http://virb.com/jasonw22/posts/text/721975</link>
      <description><![CDATA[<p><span><a><img alt="ResearchBlogging.org" src="http://www.researchblogging.org/images/rbicons/ResearchBlogging-Large-Trans.png" width="120" height="90" /></a></span>Admittedly, before reading the actual paper I was a little uneasy about the latest paper in PNAS by Goldberg et al.  The paper describes a deep-sea basalt formation that would allow for storage of anthropogenic carbon dioxide.  The area is the Juan de Fuca plate of the Oregon and Washington Coasts.  The authors suggest that the area <blockquote>provides unique and significant advantages over other potential geological storage options, including (i) vast reservoir capacities sufficient to accommodate centuries-long U.S. production of fossil fuel CO2 at locations within pipeline distances to populated areas and CO2 sources along the U.S. west coast; (ii) sufficiently closed water-rock circulation pathways for the chemical reaction of CO2 with basalt to produce stable and nontoxic (Ca2+, Mg2+, Fe2+)CO3 infilling minerals, and (iii) significant risk reduction for post-injection leakage by geological, gravitational, and hydrate-trapping mechanisms.</blockquote>  </p>

<p>The new proposed site is a 78,000 square kilometer part of the ocean floor 2500m down.  Under 200m of basalt the plan would be to pump as much as 150 years of the U.S CO2 production.  Will it work?  At current the technology still needs work but the proximity to shore makes the Juan de Fuca at least semi feasible.  However, we are still looking at 5-10 year time frame at the minimum.  The chemical process between basalts and CO2 convert it into a solid benign chalk material.  The scientists here even mapped out specific areas that they say are isolated from earthquakes, hydrothermal vents or other factors that might upset the system.  Unreacting CO2 would not rise up through the formation and even if it did the formation is capped with clay sediments.<br />
 </p>

<p>The environmental impacts are harder to assess but if CO2 escapes during the injection process there could be significant local mortality.  The nearby Juan de Fuca ridge is a active volcanic spot lined with many hydrothermal vents and their associated communities.  Are there unforseen impacts of to these systems?  How geologically stable is the site actually? Is this potential for local impact worth the removal of 150 years of CO2 from the atmosphere?  Are we trading one habitat or organism for another?</p>

<p>Hard questions to answer.  Of course I don't feel these are faults of the study or the author.  However you can see why I feel uneasy.  But there is more...</p>

<p>First it seems that the move is into the deep.  We ran out fish...go to the deep!  We need oil...get it from the deep!  What do we do will all this rubbish...put it in the deep!  Where can we get precious metals...from the deep!  Where do we put all of our excess carbon dioxide we generate...into the deep!  All of these share one thing in common as solutions, besides relying upon the deep sea, they don't actually address the cause of any of the problems...overfishing, overpopulation, reliance on fossil fuels, pollution, etc.  It is easier it seems to put a band aid on the issue than to address the issue itself.  </p>

<p><span title="ctx_ver"></span>Goldberg, D.S., Takahashi, T., Slagle, A.L. (2008). Carbon dioxide sequestration in deep-sea basalt. <span style="font-style:italic">Proceedings of the National Academy of Sciences DOI: <a href="http://dx.doi.org/10.1073/pnas.0804397105">10.1073/pnas.0804397105</a></span></p>

<p><br />
</p> <a href="http://scienceblogs.com/deepseanews/2008/07/a_vast_repository_for_greenhou.php#commentsArea">Read the comments on this post...</a><img src="http://feeds.feedburner.com/~r/ScienceblogsCombinedFeed/~4/336561314" height="1" width="1" />]]></description>
      <pubDate>Wed, 16 Jul 2008 10:29:18 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/721975</guid>
    </item>
    <item>
      <title>The Nostalgia of the Poet</title>
      <link>http://virb.com/jasonw22/posts/text/715904</link>
      <description><![CDATA[<img src="http://web.ncf.ca/ek867/dechirico.nostalgia.jpg" width="200" height="448" border="0" /><p>
The Nostalgia of the Poet<br />1914<br /><a href="http://pintura.aut.org/BU04?Autnum=11.243">Giorgio de Chirico</a><br />b. July 10, 1988
</p><div>July 11, 2008</div>
<div><a href="http://page2rss.com/2008_07_001-15_archives.html#July%2011,%202008">permanent link</a>
</div><div><br /><center><img src="http://web.ncf.ca/ek867/symonds.light.jpg" width="380" height="303" border="0" /><p>
<a href="http://hupix.net/pages.php?id=170">Working with the light</a></p><p><a href="http://hupix.net/index.php">Hugh Symonds</a>
</p></center>
<center>_______________________</center><p><br /></p><center>Let us enter into this relation.
</center><p>

The Step Not Beyond<br />
(Le Pas Au-Dela)<br />
Maurice Blanchot<br />
translated by Lycette Nelson

</p><blockquote>Time, time: the step not beyond that is not acomplished in time would lead outside of time, without this outside being intemporal, but there where time would fall, fragile fall, according to this "outside of time in time" towards which writing would attract us, were we allowed, having disappeared from ourselves, to write within the secret of the ancient fear.
o From where does it come, this power of uprooting, of destruction or change, in the first words written facing the sky, in the solitude of the sky, words by themselves without prospect or pretense: "it--the sea"?
(....)<p>
o All words are adult. Only the space in which they reverberate--a space infinitely empty, like a garden where, even after the children have disappeared, their joyful cries continue to be heard--leads them back towards the perpetual death in which they seem to keep being born.</p><p>
<a href="http://www.mediafire.com/download.php?tddtjtjtmnz">pdf download</a>
</p></blockquote><center>_______________________</center><p><br /><a href="http://www.telegraph.co.uk/portal/main.jhtml?xml=/portal/2008/06/28/sm_america28.xml">America and China: The Eagle and the Dragon</a><br />Telegraph
</p><blockquote />With a $3 trillion war bill and an economy that flounders as China's soars, could America's era of dominance on the world stage be coming to an end? Mick Brown and the photographer Alec Soth travelled across America and China to observe how the future of these two great nations is intertwined, and to find out whether, in the run-up to the Beijing Olympics and the US election, we are on the brink of a new world order.<p>via <a href="http://www.jmcolberg.com/weblog/2008/07/america_and_china_the_eagle_an_1.html" />J]]></description>
      <pubDate>Sun, 13 Jul 2008 05:04:30 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/715904</guid>
    </item>
    <item>
      <title>Prince Siddhartha Meditating under a Tree</title>
      <link>http://virb.com/jasonw22/posts/text/715903</link>
      <description><![CDATA[<img src="http://web.ncf.ca/ek867/murikami.siddhatha.jpg" width="200" height="268" border="0" /><p>
Prince Siddhartha<br /> Meditating under a Tree<br /><a href="http://www.kahitsukan.or.jp/kag_e.html">Kagaku Murakami</a><br /> (1888-1939)
</p><div>July 03, 2008</div>
<div><a href="http://page2rss.com/2008_07_001-15_archives.html#July%2003,%202008">permanent link</a>
</div><div><br /><center><img src="http://web.ncf.ca/ek867/kafka.fence.jpg" width="180" height="308" border="0" /><p>
Franz Kafka<br />
July 3, 1883 - June 3, 1924</p><p>


<a href="http://www.kafka.org/">The Kafka Project</a></p><p>


 <a href="http://www.themodernword.com/kafka/">Das Schloss</a><br />Franz Kafka at the Modern Word
</p></center><p><center><span>.....................................................</span></center>
<p><blockquote /><blockquote />We are as forlorn as children lost in the woods. When you stand in front of me and look at me, what do you know of the griefs that are in me and what do I know of yours? And if I were to cast myself down before you and weep and tell you, what more would you know about me than you know about hell when someone tells you it is hot and dreadful? For that reason alone we human beings ought to stand before one another as reverently, as reflectively, as lovingly, as we would before the entrance to hell.<br />]]></description>
      <pubDate>Sun, 13 Jul 2008 05:04:30 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/715903</guid>
    </item>
    <item>
      <title>Windowsill Daydreaming</title>
      <link>http://virb.com/jasonw22/posts/text/715902</link>
      <description><![CDATA[<img src="http://web.ncf.ca/ek867/white.windowsill.dreaming.jpg" width="200" height="264" border="0" /><p>
Windowsill Daydreaming<br /><a href="http://www.masters-of-photography.com/W/white/white.html">Minor White</a><br />
1958
</p><img src="http://web.ncf.ca/ek867/hokusai.carp.jpg" width="200" height="565" border="0" /><p>
Carp leaping<br /> up a cascade<br /><a href="http://en.wikipedia.org/wiki/Hokusai">Katsushika Hokusai</a>
</p><div>July 09, 2008</div>
<div><a href="http://page2rss.com/2008_07_001-15_archives.html#July%2009,%202008">permanent link</a>
</div><div><br /><center><img src="http://web.ncf.ca/ek867/white.cunningham.jpg" width="340" height="392" border="0" /><p>
Minor White<br />July 9, 1908 - June 24, 1976</p><p><a href="http://www.masters-of-photography.com/W/white/white.html">1</a>  <a href="http://www.clevelandart.org/explore/artist.asp?searchText=Minor+White&amp;display=list&amp;tab=1&amp;recNo=0">2</a>  <a href="http://collections.sfmoma.org/THA3778*1">3</a>  <a href="http://www.josephbellows.com/artists/minor-white/">4</a>  <a href="http://www.stephendaitergallery.com/dynamic/artist.asp?ArtistID=40">5</a>
</p></center><p>
</p><center>_______________________</center><p><br /><a href="http://www-tech.mit.edu/V105/N57/nudewh.57a.html">Dreams with a memory- Minor White remembered</a>

<a href="http://www.viewcamera.com/pdf/2005/CorrectedBiggerstaff.pdf">Legacy: The Continuing Influence of Ansel Adams and Minor White</a>  [PDF]<br />
Eric Biggerstaff</p><p>
<a href="http://www.viewcamera.com">View Camera :: The Journal of Large-Format Photography</a></p><p>
</p><center><span>.....................................................</span></center>
<p>



</p><center><img src="http://web.ncf.ca/ek867/white.colorado.jpg" width="320" height="438" border="0" /><p>
Vicinity of Georgetown, Colorado<br />1962 
</p></center><p>
</p><center>_______________________</center><p><br /><a href="http://www.kritike.org/Current_Issue.html">Kritike</a><br /> Volume Two Number One (June 2008)</p><p>

<a href="http://www.kritike.org/journal/issue_3/westmoreland_june2008.pdf">Interruptions: Derrida and Hospitality</a>  [PDF]<br />

Mark W. Westmoreland

</p><blockquote>Come in. Welcome. Be my guest and I will be yours. Shall we ask, in accordance with the Derridean question, "Is not hospitality an interruption of the self?"  What is the relationship between the interruption and the moment one enters the host's home? Derrida calls us toward a new understanding of hospitality--as an interruption. This paper will illuminate the history of hospitality in the West as well as trace Derrida's discussions of hospitality throughout many of works. The overall goal of this project is to provide readers of Derrida with a sort of reference guide for his discussions on and deconstructive approach to hospitality.<p>

Throughout most of Derrida's work, there lurks an oasis of hospitality, sometimes on the verge of the horizon. At other times, it shines in the foreground. It is in these shining moments that we--both host and guest-- will venture in order to grasp the foundation of Derrida's thoughts on hospitality. Only then will we clearly see the horizon. This new understanding of hospitality requires a rethinking of the laws of common, conditional hospitality in contrast with the law, or perhaps we should say ethics, of unconditional hospitality.</p></blockquote>via <a href="http://www.continental-philosophy.org/">Continental Philosophy</a> <p>
</p><center>_______________________</center><p><br /></p><blockquote><blockquote><pre><i>from</i>
<a href="http://www.poems.com/today.php">For the Fifty (Who Made PEACE with Their Bodies)</a>
Philip Metres
<span>Poetry Daily
</span>

1.
In the green beginning,
         in the morning mist,
                   they emerge from their chrysalis

of clothes: peel off purses &amp; cells,
         slacks &amp; Gap sweats, turtle-
                   necks &amp; tanks, Tommy's &amp; Salvation

Army, platforms &amp; clogs,
         abandoning bras &amp; lingerie, labels
                   &amp; names, courtesies &amp; shames,

the emperor's rhetoric of defense,
         laying it down, their child-
                   stretched or still-taut flesh

giddy in sudden proximity,
         onto the cold earth: bodies fetal or supine,
                   as if come-hithering

or dead, wriggle on the grass to form
         the shape of a word yet to come, almost
                   embarrassing to name: a word

thicker, heavier than the rolled rags
         of their bodies seen from a cockpit:
                   they touch to make

the word they want to become:
         it's difficult to get the news
                   from our bodies, yet people die each day

for lack of what is found there:
         here: the fifty hold, &amp; still
                   to become a testament, a will,

embody something outside
         themselves &amp; themselves: the body,
                   the dreaming disarmed body.

<span>...(<a href="http://www.poems.com/today.php">more</a>)</span>

</pre>
</blockquote>from<br /><a href="http://www.amazon.com/See-Earth-Philip-Metres/dp/1880834812/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1215571034&amp;sr=8-1">To See the Earth</a><br />Philip Metres <br /><span>amazon</span>
</blockquote><center>_______________________</center><p><br /></p><center><img src="http://web.ncf.ca/ek867/ferreira.pilgrims.jpg" width="340" height="339" border="0" /><p>
<a href="http://www.virgilioferreira.com/projectos/daily-pilgrims">Daily Pilgrims</a><br /><a href="http://www.virgilioferreira.com/">Virgilio Ferreira</a></p><p>via <a href="http://www.mexicanpictures.com/headingeast/">Heading East</a>
</p></center><p>

</p><center>_______________________</center><p><br /><a href="http://www.jcrt.org/archives/09.2/index.shtml">Journal for Cultural and Religious Theory</a> <br />9.2 - Summer 2008<br /><span>via <a href="http://itself.wordpress.com/2008/07/08/new-jcrt/" />An und f]]></description>
      <pubDate>Sun, 13 Jul 2008 05:04:29 -0700</pubDate>
      <guid>http://virb.com/jasonw22/posts/text/715902</guid>
    </item>
  </channel>
</rss>
