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

<channel>
	<title>Marc-André Cournoyer&#039;s blog</title>
	<atom:link href="http://macournoyer.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://macournoyer.wordpress.com</link>
	<description>My software passion spreading place</description>
	<lastBuildDate>Fri, 27 Jan 2012 22:29:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='macournoyer.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Marc-André Cournoyer&#039;s blog</title>
		<link>http://macournoyer.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://macournoyer.wordpress.com/osd.xml" title="Marc-André Cournoyer&#039;s blog" />
	<atom:link rel='hub' href='http://macournoyer.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Blog Moved! plzplzplzbbq update your feed (plz)</title>
		<link>http://macournoyer.wordpress.com/2008/12/09/blog-moved-plzplzplzbbq-update-your-feed-plz/</link>
		<comments>http://macournoyer.wordpress.com/2008/12/09/blog-moved-plzplzplzbbq-update-your-feed-plz/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 05:08:55 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/?p=243</guid>
		<description><![CDATA[I moved my blog to: http://macournoyer.com/blog. New feed is at http://macournoyer.com/blog.atom I know, I&#8217;m asking a lot&#8230; But I guarantee you&#8217;ll have a lot more fun if you update your feed to point to my new blog. kthxbai<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=243&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I moved my blog to: <a href="http://macournoyer.com/blog">http://macournoyer.com/blog</a>.</p>
<p>New feed is at http://macournoyer.com/blog.atom</p>
<p>I know, I&#8217;m asking a lot&#8230; But I guarantee you&#8217;ll have a lot more fun if you update your feed to point to my new blog.</p>
<p>kthxbai</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/243/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=243&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/12/09/blog-moved-plzplzplzbbq-update-your-feed-plz/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>Thin 1.0</title>
		<link>http://macournoyer.wordpress.com/2008/09/30/thin-10/</link>
		<comments>http://macournoyer.wordpress.com/2008/09/30/thin-10/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 13:11:26 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/09/30/thin-10/</guid>
		<description><![CDATA[Thin 1.0, codename That&#8217;s What She Said, is out! gem install thin 1.0, OMGWTFBBQ! Yes 1.0! That doesn&#8217;t mean it&#8217;s bug free or anything. But, it does mean that it&#8217;s been running on a number of servers and no show &#8230; <a href="http://macournoyer.wordpress.com/2008/09/30/thin-10/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=241&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Thin 1.0, codename That&#8217;s What She Said, is out!</p>
<p><code>gem install thin</code></p>
<h4>1.0, OMGWTFBBQ!</h4>
<p>Yes 1.0! That doesn&#8217;t mean it&#8217;s bug free or anything. But, it does mean that it&#8217;s been running on a number of servers and no show stopper bugs have been found since a while.</p>
<h4>Special thanks to&#8230;</h4>
<p>A lot of people have helped me achieve this milestone. I&#8217;m very proud to say that Thin is no longer my project, but the collaborative work of many bright people.</p>
<p>Here they are. If you like Thin or if it helped you in any way, please take a couple minutes and recommend them.<br />
(If you contributed to Thin in any way and are not on the list, that&#8217;s an error so please let me know!)</p>
<ul>
<li>Aman Gupta</li>
<li><a href="http://workingwithrails.com/person/3211-francis-cianfrocca" title="Francis Cianfrocca from Unknown">Francis Cianfrocca</a></li>
<li>thronedrk</li>
<li><a href="http://workingwithrails.com/person/7672-kent-sibilev" title="Kent Sibilev from United States, Fort Lauderdale">Kent Sibilev</a></li>
<li><a href="http://workingwithrails.com/person/5421-ezra-zygmuntowicz" title="Ezra Zygmuntowicz from United States, Spokane WA.">Ezra Zygmuntowicz</a></li>
<li><a href="http://www.workingwithrails.com/person/7298-matt-todd" title="Matt Todd from United States, Atlanta, GA">Matt Todd</a></li>
<li><a href="http://workingwithrails.com/person/7739-evan-weaver" title="Evan Weaver from United States, Delaware">Evan Weaver</a></li>
<li><a href="http://www.workingwithrails.com/person/7192-wayne-e-seguin" title="Wayne E. Seguin from United States, Buffalo, NY">Wayne Seguin</a></li>
<li><a href="http://workingwithrails.com/person/3331-kevin-williams" title="Kevin Williams from United States, Denver, Colorado">Kevin Williams</a></li>
<li><a href="http://workingwithrails.com/person/9293-james-golick" title="James Golick from Canada, Montreal, Quebec">James Gollick</a></li>
<li><a href="http://workingwithrails.com/person/7123-gary-haran" title="Gary Haran from Canada, Montreal">Gary Haran</a></li>
<li>Gump</li>
<li><a href="http://workingwithrails.com/person/11689-chad-nantais" title="Chad Nantais from Canada, Vancouver, BC">Chad Nantais</a></li>
<li>Wincent Colaiuta</li>
<li><a href="http://workingwithrails.com/person/5957-cheah-chu-yeow" title="Cheah Chu Yeow from Singapore">Chu Yeow</a></li>
<li><a href="http://www.workingwithrails.com/person/6186-blake-mizerany" title="Blake Mizerany from United States, San Francisco, CA">Blake Mizerany</a></li>
<li><a href="http://workingwithrails.com/person/6272-pedro-belo" title="Pedro Belo from United States, San Francisco / CA">Pedro Belo</a></li>
<li><a href="http://www.workingwithrails.com/person/7160-dan-kubb" title="Dan Kubb from Canada, Mission, BC">Dan Kubb</a></li>
<li><a href="http://workingwithrails.com/person/8208-michael-klishin" title="Michael Klishin from Ukraine, Kiev">Michael S. Klishin</a></li>
<li>Ricardo Chimal</li>
<li><a href="http://workingwithrails.com/person/1721" title="Mark Bates from United States, Boston, MA">Mark Bates</a></li>
<li><a href="http://workingwithrails.com/person/14599" title="Hellekin Wolf from France, Paris">Hellekin Wolf</a></li>
<li>Jason May</li>
</ul>
<p>Also thanks to everyone who&#8217;ve taken the risk to run Thin on <a href="http://code.macournoyer.com/thin/users/" title="Thin - yet another web server">their website</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=241&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/09/30/thin-10/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>Presenting Rack at Montreal Against Rails</title>
		<link>http://macournoyer.wordpress.com/2008/09/14/presenting-at-montreal-against-rails/</link>
		<comments>http://macournoyer.wordpress.com/2008/09/14/presenting-at-montreal-against-rails/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 18:12:28 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[montreal]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/09/14/presenting-at-montreal-against-rails/</guid>
		<description><![CDATA[I&#8217;ll be presenting Rack this Tuesday at the first Montreal Against Rails (the non-Rails meeting). I&#8217;ll show how to use Rack and then I&#8217;d like to try something new (and probably crazy-stupid). Building a web framework with Rack is so &#8230; <a href="http://macournoyer.wordpress.com/2008/09/14/presenting-at-montreal-against-rails/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=237&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be presenting <a href="http://rack.rubyforge.org/" title="a Ruby Webserver Interface">Rack</a> this Tuesday at the first <a href="http://www.montrealonrails.com/2008/09/11/montreal_against_rails-tuesday/" title="tuesday">Montreal Against Rails</a> (the non-Rails meeting).</p>
<p>I&#8217;ll show how to use Rack and then I&#8217;d like to try something new (and probably crazy-stupid). Building a web framework with Rack is so easy, I&#8217;ll be doing pair programming with anyone from the audience to create our own custom framework live during the presentation (in 30 min). We&#8217;ll start with <a href="http://refactormycode.com/codes/491-very-simple-rack-framework" title="Very Simple Rack framework - RefactorMyCode.com">the code posted on RefactorMyCode</a> as the application code, we&#8217;ll implement the framework code during the presentation. So submit your ideas there before the event.</p>
<p>To take part in first and biggest Montreal Ruby pair programming session and watch the other cool presentations, make sure to <a href="http://upcoming.yahoo.com/event/1093407" title="Montreal on Rails #11 (aka Montreal Against Rails) at Standout Jobs (Tuesday September 16, 2008) - Upcoming">RSVP</a>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/237/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/237/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/237/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=237&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/09/14/presenting-at-montreal-against-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby on V8</title>
		<link>http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/</link>
		<comments>http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 03:53:49 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/</guid>
		<description><![CDATA[Google Chrome looks cool, ok&#8230; But what is even cooler for me is V8, the super JavaScript VM. JavaScript is a dynamic language, just like Ruby. You can add stuff to objects at runtime, like Ruby. It&#8217;s object oriented, like &#8230; <a href="http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=229&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://upload.wikimedia.org/wikipedia/en/thumb/d/d5/V8.svg/150px-V8.svg.png" alt="V8" width="250" align="left" />Google Chrome looks cool, ok&#8230; But what is even cooler for me is <a href="http://code.google.com/apis/v8/" title="Google V8 JavaScript Engine - Google Code">V8, the super JavaScript VM</a>.</p>
<p>JavaScript is a dynamic language, just like Ruby.<br />
You can add stuff to objects at runtime, like Ruby.<br />
It&#8217;s object oriented, like Ruby.<br />
It has a GC, like Ruby.<br />
&#8230;</p>
<p>What if we could run Ruby on V8?</p>
<p>Well, it&#8217;s a lot easier that you think. If you remember a while ago, someone released <a href="http://hotruby.yukoba.jp/" title="HotRuby - Ruby on JavaScript and Flash">HotRuby</a>. It runs YARV bytecode in the browser.</p>
<p>So I plugged the 2 together just to see what would happened =&gt; <a href="http://github.com/macournoyer/rbv8" title="macournoyer's rbv8 at master &mdash; GitHub">rbv8</a>.</p>
<h4>It&#8217;s fast (sometimes)</h4>
<p>I used <a href="http://hotruby.yukoba.jp/benchmark/bm_loop_times.html" title="Benchmark - HotRuby - Ruby on JavaScript &amp; Flash">the script on HotRuby site</a> to benchmark.</p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst">sum <span style="color:#E28964;">=</span> <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span><span style="color:#65B042;">&quot;</span></span>
<span style="color:#3387CC;">50000</span>.<span style="color:#89BDFF;">times</span>{ |<span style="color:#3E87E3;">e</span>| sum <span style="color:#E28964;">+=</span> e.<span style="color:#89BDFF;">to_s</span> }</pre>
<p></code></pre>
<p>And just for fun, I also wrote it in C:</p>
<p><del datetime="00">
<pre>int main (int argc, char const *argv[])
{
  char *str = malloc(sizeof(char) * 238890);
  char buf[5];
  size_t i;

  for (i = 0; i &lt; 50000; ++i) {
    sprintf(buf, "%d", i);
    strcat(str, buf);
  }
  return 0;
}</pre>
<p></del></p>
<p><strong>Update:</strong> seems like my C code was the suck, thx for some commenters for pointing it out. Here&#8217;s a better version which is way faster (thx to Hongli Lai):</p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;">&lt;</span>stdio.h<span style="color:#65B042;">&gt;</span></span></span>
<span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;">&lt;</span>stdlib.h<span style="color:#65B042;">&gt;</span></span></span>
<span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;">&lt;</span>string.h<span style="color:#65B042;">&gt;</span></span></span>

<span style="color:#99CF50;">int</span> <span style="color:#89BDFF;">ma<span style="color:#89BDFF;">in</span></span> (<span style="color:#99CF50;">int</span> argc, <span style="color:#99CF50;">char</span> <span style="color:#99CF50;">const</span> *argv[])
{
  <span style="color:#99CF50;">char</span> *str = <span style="color:#DAD085;">malloc</span>(<span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">char</span>) * <span style="color:#3387CC;">238890</span>);
  <span style="color:#99CF50;">char</span> buf[<span style="color:#3387CC;">5</span>];
  <span style="color:#9B859D;">size_t</span> i;
  <span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">long</span> last = <span style="color:#3387CC;">0</span>;

  <span style="color:#E28964;">for</span> (i = <span style="color:#3387CC;">0</span>; i &lt; <span style="color:#3387CC;">50000</span>; ++i) {
    <span style="color:#99CF50;">int</span> len = <span style="color:#DAD085;">sprintf</span>(buf, <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span><span style="color:#DDF2A4;">%d</span><span style="color:#65B042;">&quot;</span></span>, i);
    <span style="color:#DAD085;">memcpy</span>(str + last, buf, len);
    last += len;
  }
  <span style="color:#E28964;">return</span> <span style="color:#3387CC;">0</span>;
}</pre>
<p></code></pre>
<p><ins datetime="00">Also here&#8217;s a Javascript version:</ins></p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#99CF50;">var</span> sum <span style="color:#E28964;">=</span> <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span><span style="color:#65B042;">&quot;</span></span>;
<span style="color:#E28964;">for</span> (<span style="color:#99CF50;">var</span> i <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span>; i <span style="color:#E28964;">&lt;</span> <span style="color:#3387CC;">50000</span>; i<span style="color:#E28964;">++</span>) {
  sum <span style="color:#E28964;">+</span><span style="color:#E28964;">=</span> i.<span style="color:#DAD085;">toString</span>();
};</pre>
<p></code></pre>
<pre>C:              0.017 sec
Javascript:     0.063 sec
rbv8:           0.987 sec
Firefox 3:      3.636 sec
Safari 3:       4.368 sec
Opera 9.50:     4.679 sec
Ruby 1.8.6:     9.565 sec
Ruby 1.9.0:     9.669 sec
Rubinius 0.8.0: 15.576 sec
JRuby 1.1 b1:   42.691 sec</pre>
<p><strong>OMG OMG OMG OMG!!!</strong> 10 times faster then YARV <del datetime="00">and faster then C</del>!</p>
<p><ins datetime="00">Update: Ok&#8230; if your replace += w/ &lt;&lt;, YARV beats the Javascript version running on V8, thx to Nobu Nakada for noting this</ins></p>
<p>But wait, don&#8217;t go tell your friends yet! It seems, that all the other benchmarks I tried were slower (sometimes by a very wide margin).</p>
<p>But I think this means that the potential is there, it just need to be exploited properly.</p>
<p><ins datetime="00">Also another fun thing to note, is that if you change Fixnum#times to while i &lt; 50000 in the Ruby code, it becomes a lot slower. No idea why.</ins></p>
<h4>Me wants to try</h4>
<p>If you wanna try rbv8:<br />
You need Ruby 1.9 installed as `ruby19` and make sure you meet V8 Pre-requisites: <a href="http://code.google.com/apis/v8/build.html#pre_reqs" title="How to Download and Build V8 - Google V8 JavaScript Engine - Google Code">http://code.google.com/apis/v8/build.html#pre_reqs</a>.</p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst">git clone git://github.com/macournoyer/rbv8.git
cd rbv8
rake
bin/rbv8 sample/concat.rb</pre>
<p></code></pre>
<p>Note that this is just a prototype. I just hacked this in an hour to benchmark it. See the README file for what needs to be done next.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/229/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/229/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=229&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/feed/</wfw:commentRss>
		<slash:comments>60</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/en/thumb/d/d5/V8.svg/150px-V8.svg.png" medium="image">
			<media:title type="html">V8</media:title>
		</media:content>
	</item>
		<item>
		<title>You&#8217;re just in a giant Object.class_eval block</title>
		<link>http://macournoyer.wordpress.com/2008/08/08/youre-just-in-a-giant-objectclass_eval-block/</link>
		<comments>http://macournoyer.wordpress.com/2008/08/08/youre-just-in-a-giant-objectclass_eval-block/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 14:02:17 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/08/08/youre-just-in-a-giant-objectclass_eval-block/</guid>
		<description><![CDATA[&#62;&#62; Object.methods.size =&#62; 85 &#62;&#62; def i_is_in_ur_Object; &#34;kthxbai&#34; end =&#62; nil &#62;&#62; Object.methods.size =&#62; 86 &#62;&#62; String.new.i_is_in_ur_Object =&#62; &#34;kthxbai&#34; Careful what you put in there!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=224&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#E28964;">&gt;&gt;</span> <span style="color:#9B859D;">Object</span>.<span style="color:#89BDFF;">methods</span>.<span style="color:#89BDFF;">size</span>
=&gt; <span style="color:#3387CC;">85</span>
<span style="color:#E28964;">&gt;&gt;</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">i_is_in_ur_Object</span>; <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>kthxbai<span style="color:#65B042;">&quot;</span></span> <span style="color:#E28964;">end</span>
=&gt; <span style="color:#3387CC;">nil</span>
<span style="color:#E28964;">&gt;&gt;</span> <span style="color:#9B859D;">Object</span>.<span style="color:#89BDFF;">methods</span>.<span style="color:#89BDFF;">size</span>
=&gt; <span style="color:#3387CC;">86</span>
<span style="color:#E28964;">&gt;&gt;</span> <span style="color:#9B859D;">String</span>.<span style="color:#89BDFF;">new</span>.<span style="color:#89BDFF;">i_is_in_ur_Object</span>
=&gt; <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>kthxbai<span style="color:#65B042;">&quot;</span></span></pre>
<p></code></pre>
<p>Careful what you put in there!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/224/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/224/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=224&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/08/08/youre-just-in-a-giant-objectclass_eval-block/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>The Class and Module love story</title>
		<link>http://macournoyer.wordpress.com/2008/08/05/the-class-and-module-love-story/</link>
		<comments>http://macournoyer.wordpress.com/2008/08/05/the-class-and-module-love-story/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 14:41:32 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/08/05/the-class-and-module-love-story/</guid>
		<description><![CDATA[In Ruby, Class is a Module which, like any object, has a class. &#62;&#62; Class.superclass =&#62; Module &#62;&#62; Module.class =&#62; Class But the crazy thing is, it&#8217;s the complete opposite in the implementation. (Excerpt from ruby.h) typedef struct { VALUE &#8230; <a href="http://macournoyer.wordpress.com/2008/08/05/the-class-and-module-love-story/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=222&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In Ruby, <code>Class</code> is a <code>Module</code> which, like any object, has a class.</p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#E28964;">&gt;&gt;</span> <span style="color:#9B859D;">Class</span>.<span style="color:#89BDFF;">superclass</span>
=&gt; <span style="color:#3E87E3;">Module</span>
<span style="color:#E28964;">&gt;&gt;</span> <span style="color:#9B859D;">Module</span>.<span style="color:#89BDFF;">class</span>
=&gt; <span style="color:#3E87E3;">Class</span></pre>
<p></code></pre>
<p>But the crazy thing is, it&#8217;s the complete opposite in the implementation.<br />
(Excerpt from <code>ruby.h</code>)</p>
<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#99CF50;">typedef</span> <span style="color:#99CF50;">struct</span> {
    VALUE super;
    <span style="color:#99CF50;">struct</span> st_table *iv_tbl;
} rb_classext_t;

<span style="color:#99CF50;">struct</span> RClass {
    <span style="color:#99CF50;">struct</span> RBasic basic;
    rb_classext_t *ptr;
    <span style="color:#99CF50;">struct</span> st_table *m_tbl;
    <span style="color:#99CF50;">struct</span> st_table *iv_index_tbl;
};
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RCLASS_IV_TBL</span>(<span style="color:#3E87E3;">c</span>) (RCLASS(c)-&gt;ptr-&gt;iv_tbl)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RCLASS_M_TBL</span>(<span style="color:#3E87E3;">c</span>) (RCLASS(c)-&gt;m_tbl)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RCLASS_SUPER</span>(<span style="color:#3E87E3;">c</span>) (RCLASS(c)-&gt;ptr-&gt;super)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RCLASS_IV_INDEX_TBL</span>(<span style="color:#3E87E3;">c</span>) (RCLASS(c)-&gt;iv_index_tbl)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RMODULE_IV_TBL</span>(<span style="color:#3E87E3;">m</span>) RCLASS_IV_TBL(m)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RMODULE_M_TBL</span>(<span style="color:#3E87E3;">m</span>) RCLASS_M_TBL(m)
#<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">RMODULE_SUPER</span>(<span style="color:#3E87E3;">m</span>) RCLASS_SUPER(m)</pre>
<p></code></pre>
<p>We see it gets the instance variable table (<code>RMODULE_IV_TBL</code>) just like it&#8217;s a class. Modules are stored in <code>RClass</code> structs.</p>
<p>I know. I&#8217;m totally confused too.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/222/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/222/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/222/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=222&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/08/05/the-class-and-module-love-story/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>RefactorMyCodeBook.com</title>
		<link>http://macournoyer.wordpress.com/2008/07/22/refactormycodebookcom/</link>
		<comments>http://macournoyer.wordpress.com/2008/07/22/refactormycodebookcom/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 01:19:04 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[refactormycode]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/07/22/refactormycodebookcom/</guid>
		<description><![CDATA[You can now follow people on RefactorMyCode.com. Wow it&#8217;s like FaceBook + code snippets! Better get your mom an account! You&#8217;ll then have a page with all stuff posted by your new friends and even an Atom feed. To follow &#8230; <a href="http://macournoyer.wordpress.com/2008/07/22/refactormycodebookcom/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=221&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://refactormycode.com/users/1" title="macournoyer - RefactorMyCode.com"><img src="http://img.skitch.com/20080723-bmqqi9tn25qbgf2jf7fwiygsdt.jpg" alt="Followers" height="100" align="right" /></a>You can now follow people on <a href="http://refactormycode.com/" title="Recent codes - RefactorMyCode.com">RefactorMyCode.com</a>. Wow it&#8217;s like FaceBook + code snippets! Better get your mom an account!</p>
<p>You&#8217;ll then have a <a href="http://refactormycode.com/users/1/friends" title="macournoyer friends - RefactorMyCode.com">page with all stuff posted by your new friends</a> and even an <a href="feed://refactormycode.com/users/1/friends.atom">Atom feed</a>.</p>
<p>To follow someone, simply go to their profile page and click on &#8220;Follow this user&#8221;.</p>
<p>Hope you like it!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/221/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/221/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=221&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/07/22/refactormycodebookcom/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20080723-bmqqi9tn25qbgf2jf7fwiygsdt.jpg" medium="image">
			<media:title type="html">Followers</media:title>
		</media:content>
	</item>
		<item>
		<title>You See the Invisible Block?</title>
		<link>http://macournoyer.wordpress.com/2008/07/21/you-see-the-invisible-block/</link>
		<comments>http://macournoyer.wordpress.com/2008/07/21/you-see-the-invisible-block/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 04:21:17 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/07/21/you-see-the-invisible-block/</guid>
		<description><![CDATA[require &#34;rubygems&#34;;require &#34;thin&#34;;require&#34;markaby&#34;; class Invisible HTTP_METHODS =[:get,:post,:head,:put,:delete];attr_reader :request, :response, :params; def initialize(&#38;block); @actions =[]; @with=[]; @layouts={};@views={};@helpers=Module.new;@app=self; instance_eval( &#38;block) if block end; def action(method, route, &#38;block); @actions&#60;&#60; [method.to_s, build_route(@with*&#34;/&#34;+route),block] end;HTTP_METHODS. each{&#124;m&#124;class_eval &#34;def #{m}(r='/',&#38;b); action('#{m}', r, &#38;b) end&#34;} def with(route); @with.push(route);yield;@with.pop end; &#8230; <a href="http://macournoyer.wordpress.com/2008/07/21/you-see-the-invisible-block/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=220&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre style="background-color:#000;color:#F8F8F8;overflow:auto;line-height:12px;font-size:12px;padding:6px;"><code>
<pre class="sunburst"><span style="color:#E28964;">require</span> <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>rubygems<span style="color:#65B042;">&quot;</span></span>;<span style="color:#E28964;">require</span> <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>thin<span style="color:#65B042;">&quot;</span></span>;<span style="color:#E28964;">require</span><span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>markaby<span style="color:#65B042;">&quot;</span></span>; <span style="color:#E28964;">class</span> <span style="color:#3E87E3;">Invisible</span>
<span style="color:#3E87E3;">HTTP_METHODS</span> <span style="color:#E28964;">=</span>[<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>get</span>,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>post</span>,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>head</span>,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>put</span>,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>delete</span>];<span style="color:#E28964;">attr_reader</span> <span style="color:#3387CC;"><span style="color:#3387CC;">:</span>request</span>,
<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>response</span>, <span style="color:#3387CC;"><span style="color:#3387CC;">:</span>params</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">initialize</span>(<span style="color:#3E87E3;"><span style="color:#E28964;">&amp;</span>block</span>); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>actions</span> <span style="color:#E28964;">=</span>[]; <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>with</span><span style="color:#E28964;">=</span>[];
<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>layouts</span><span style="color:#E28964;">=</span>{};<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>views</span><span style="color:#E28964;">=</span>{};<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>helpers</span><span style="color:#E28964;">=</span><span style="color:#9B859D;">Module</span>.<span style="color:#89BDFF;">new</span>;<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span><span style="color:#E28964;">=</span><span style="color:#3E87E3;">self</span>; <span style="color:#89BDFF;">instance_eval</span>(
<span style="color:#E28964;">&amp;</span>block) <span style="color:#E28964;">if</span> block <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">action</span>(<span style="color:#3E87E3;">method<span style="color:#3E87E3;">,</span> route<span style="color:#3E87E3;">,</span> <span style="color:#E28964;">&amp;</span>block</span>); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>actions</span><span style="color:#E28964;">&lt;&lt;</span>
[method.<span style="color:#89BDFF;">to_s</span>, <span style="color:#89BDFF;">build_route</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>with</span><span style="color:#E28964;">*</span><span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>/<span style="color:#65B042;">&quot;</span></span><span style="color:#E28964;">+</span>route),block] <span style="color:#E28964;">end</span>;<span style="color:#3E87E3;">HTTP_METHODS</span>.
each{|<span style="color:#3E87E3;">m</span>|class_eval <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>def <span style="color:#DAEFA3;"><span style="color:#DAEFA3;">#{</span>m<span style="color:#DAEFA3;">}</span></span>(r='/',&amp;b); action('<span style="color:#DAEFA3;"><span style="color:#DAEFA3;">#{</span>m<span style="color:#DAEFA3;">}</span></span>', r, &amp;b) end<span style="color:#65B042;">&quot;</span></span>}
<span style="color:#E28964;">def</span> <span style="color:#89BDFF;">with</span>(<span style="color:#3E87E3;">route</span>); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>with</span>.<span style="color:#89BDFF;">push</span>(route);<span style="color:#E28964;">yield</span>;<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>with</span>.<span style="color:#89BDFF;">pop</span> <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">render</span>(<span style="color:#3E87E3;"></span>
<span style="color:#3E87E3;"><span style="color:#E28964;">*</span>args<span style="color:#3E87E3;">,</span><span style="color:#E28964;">&amp;</span>block</span>);options<span style="color:#E28964;">=</span>args.<span style="color:#89BDFF;">last</span>.<span style="color:#89BDFF;">is_a?</span>(<span style="color:#3E87E3;">Hash</span>)<span style="color:#3387CC;">?a</span>rgs.<span style="color:#89BDFF;">pop</span>: {};<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>response</span>.
status<span style="color:#E28964;">=</span>options.<span style="color:#89BDFF;">delete</span>(<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>status</span>)<span style="color:#E28964;">||</span><span style="color:#3387CC;">200</span>;layout<span style="color:#E28964;">=</span><span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>layouts</span>[options.<span style="color:#89BDFF;">delete</span>(
<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>layout</span>)<span style="color:#E28964;">||</span><span style="color:#3387CC;"><span style="color:#3387CC;">:</span>default</span>];assigns<span style="color:#E28964;">=</span>{<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>request</span>=&gt;request,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>response</span>=&gt;response,
<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>params</span>=&gt;params,<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>session</span>=&gt;session};content<span style="color:#E28964;">=</span>args.<span style="color:#89BDFF;">last</span>.<span style="color:#89BDFF;">is_a?</span>(<span style="color:#3E87E3;">String</span>)?
args.<span style="color:#89BDFF;">last</span> : <span style="color:#9B859D;">Markaby</span>::<span style="color:#89BDFF;">Builder</span>.<span style="color:#89BDFF;">new</span>(assigns,<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>helpers</span>, <span style="color:#E28964;">&amp;</span>(block<span style="color:#E28964;">||</span><span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>views</span>[
args.<span style="color:#89BDFF;">last</span>] )).<span style="color:#89BDFF;">to_s</span> ; content <span style="color:#E28964;">=</span> <span style="color:#9B859D;">Markaby</span>::<span style="color:#89BDFF;">Builder</span>.<span style="color:#89BDFF;">new</span>( assigns.<span style="color:#89BDFF;">merge</span>(
<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>content</span> =&gt; content), <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>helpers</span>, <span style="color:#E28964;">&amp;</span>layout).<span style="color:#89BDFF;">to_s</span> <span style="color:#E28964;">if</span> layout; <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>response</span>.
headers.<span style="color:#89BDFF;">merge!</span>(options);<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>response</span>.<span style="color:#89BDFF;">body</span><span style="color:#E28964;">=</span>content <span style="color:#E28964;">end</span>;def <span style="color:#89BDFF;">layout</span>(name<span style="color:#E28964;">=</span>
<span style="color:#3387CC;"><span style="color:#3387CC;">:</span>default</span>, <span style="color:#E28964;">&amp;</span>block); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>layouts</span>[name]<span style="color:#E28964;">=</span>block <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">view</span>(<span style="color:#3E87E3;">name<span style="color:#3E87E3;">,</span><span style="color:#E28964;">&amp;</span>block</span>);
<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>views</span>[name]<span style="color:#E28964;">=</span>block <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">helpers</span>(<span style="color:#3E87E3;"><span style="color:#E28964;">&amp;</span>block</span>);<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>helpers</span>.<span style="color:#89BDFF;">instance_eval</span>(
<span style="color:#E28964;">&amp;</span>block ) ; <span style="color:#89BDFF;">instance_eval</span>(<span style="color:#E28964;">&amp;</span>block)  <span style="color:#E28964;">end</span>;  <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">session</span>;  <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>request</span>.<span style="color:#89BDFF;">env</span>[
<span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>rack.session<span style="color:#65B042;">&quot;</span></span>]<span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">use</span>(<span style="color:#3E87E3;">middleware<span style="color:#3E87E3;">,</span> <span style="color:#E28964;">*</span>args</span>);<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span><span style="color:#E28964;">=</span>middleware.<span style="color:#89BDFF;">new</span>(
<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span>,<span style="color:#E28964;">*</span>args) <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">run</span>(<span style="color:#3E87E3;"><span style="color:#E28964;">*</span>args</span>);<span style="color:#9B859D;">Thin</span>::<span style="color:#89BDFF;">Server</span>.<span style="color:#89BDFF;">start</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span>, <span style="color:#E28964;">*</span>args) <span style="color:#E28964;">end</span>
<span style="color:#E28964;">def</span> <span style="color:#89BDFF;">call</span>(<span style="color:#3E87E3;">env</span>); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>request</span> <span style="color:#E28964;">=</span> <span style="color:#9B859D;">Rack</span>::<span style="color:#89BDFF;">Request</span>.<span style="color:#89BDFF;">new</span>(env); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>response</span> <span style="color:#E28964;">=</span><span style="color:#3E87E3;">Rack</span>::
<span style="color:#9B859D;">Response</span>.<span style="color:#89BDFF;">new</span>; <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>params</span> <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>request</span>.<span style="color:#89BDFF;">params</span>; <span style="color:#E28964;">if</span> action <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">recognize</span>(env[
<span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>PATH_INFO<span style="color:#65B042;">&quot;</span></span>], <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>params</span>[<span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>_method<span style="color:#65B042;">&quot;</span></span>] <span style="color:#E28964;">||</span>env[<span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>REQUEST_METHOD<span style="color:#65B042;">&quot;</span></span>]); <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>params</span>.
<span style="color:#89BDFF;">merge!</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>path_params</span>);action.<span style="color:#89BDFF;">last</span>.<span style="color:#89BDFF;">call</span>;<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>response</span>.<span style="color:#89BDFF;">finish</span>; <span style="color:#E28964;">else</span>; [<span style="color:#3387CC;">404</span>,
{}, <span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>Not found<span style="color:#65B042;">&quot;</span></span>]; <span style="color:#E28964;">end</span>; <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">self.run</span>(<span style="color:#3E87E3;"><span style="color:#E28964;">*</span>args<span style="color:#3E87E3;">,</span><span style="color:#E28964;">&amp;</span>block</span>);<span style="color:#E28964;">new</span>(<span style="color:#E28964;">&amp;</span>block).
<span style="color:#89BDFF;">run</span>(<span style="color:#E28964;">*</span>args) <span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">self.app</span>;<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span><span style="color:#E28964;">||=</span><span style="color:#3E87E3;">self</span>.<span style="color:#89BDFF;">new</span> <span style="color:#E28964;">end</span>;def <span style="color:#3E87E3;">self</span>.<span style="color:#89BDFF;">call</span>(env)
<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>app</span>.<span style="color:#89BDFF;">call</span>(env) <span style="color:#E28964;">end</span>; <span style="color:#E28964;">private</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">build_route</span>(<span style="color:#3E87E3;">route</span>);pattern<span style="color:#E28964;">=</span> route.
<span style="color:#89BDFF;">split</span>(<span style="color:#65B042;"><span style="color:#65B042;">&quot;</span>/<span style="color:#65B042;">&quot;</span></span>).<span style="color:#89BDFF;">inject</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>\/*<span style="color:#65B042;">'</span></span>) { |<span style="color:#3E87E3;">r</span>, <span style="color:#3E87E3;">s</span>| r <span style="color:#E28964;">&lt;&lt;</span> (s[<span style="color:#3387CC;">0</span>] <span style="color:#E28964;">==</span> <span style="color:#3387CC;">?:</span> <span style="color:#E28964;">?</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>(\w+)<span style="color:#65B042;">'</span></span> : s) <span style="color:#E28964;">+</span>
<span style="color:#65B042;"><span style="color:#65B042;">'</span>\/*<span style="color:#65B042;">'</span></span> } <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>\/*<span style="color:#65B042;">'</span></span>;[<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;">^<span style="color:#CF7D34;"><span style="color:#CF7D34;">#{</span>pattern<span style="color:#CF7D34;">}</span></span>$</span><span style="color:#E9C062;"><span style="color:#E9C062;">/i</span></span>,route.<span style="color:#89BDFF;">scan</span>(<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;"><span style="color:#CF7D34;">\:</span><span style="color:#E9C062;"><span style="color:#E9C062;">(</span><span style="color:#CF7D34;">\w</span>+<span style="color:#E9C062;">)</span></span></span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>).<span style="color:#89BDFF;">flatten</span>] <span style="color:#E28964;">end</span>
<span style="color:#E28964;">def</span> <span style="color:#89BDFF;">recognize</span>(<span style="color:#3E87E3;">url<span style="color:#3E87E3;">,</span> method</span>); method <span style="color:#E28964;">=</span>method.<span style="color:#89BDFF;">to_s</span>.<span style="color:#89BDFF;">downcase</span>; <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>actions</span>.
detect <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">m</span>,(<span style="color:#3E87E3;">pattern</span>,<span style="color:#3E87E3;">keys</span>),<span style="color:#3E87E3;">_</span>| method<span style="color:#E28964;">==</span>m<span style="color:#E28964;">&amp;&amp;</span><span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>path_params</span><span style="color:#E28964;">=</span><span style="color:#89BDFF;">match_route</span>(
pattern,keys,url)<span style="color:#E28964;">end</span>;<span style="color:#E28964;">end</span>;def <span style="color:#89BDFF;">match_route</span>(pattern,keys,url);matches,
params<span style="color:#E28964;">=</span>(url.<span style="color:#89BDFF;">match</span>(pattern)<span style="color:#E28964;">||</span><span style="color:#E28964;">return</span>)[<span style="color:#3387CC;">1</span>..<span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span>],{};keys.<span style="color:#89BDFF;">each_with_index</span>{
<span style="color:#E28964;">|</span>key,i<span style="color:#E28964;">|</span> params[key]<span style="color:#E28964;">=</span>matches[i]};params;<span style="color:#E28964;">end</span>;<span style="color:#E28964;">end</span>; <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">method_missing</span>(<span style="color:#3E87E3;"></span>
<span style="color:#3E87E3;">method<span style="color:#3E87E3;">,</span> <span style="color:#E28964;">*</span>args<span style="color:#3E87E3;">,</span>  <span style="color:#E28964;">&amp;</span>block</span>);  ; <span style="color:#E28964;">if</span> <span style="color:#9B859D;">Invisible</span>.<span style="color:#89BDFF;">app</span> .<span style="color:#89BDFF;">respond_to?</span>(method) ;
<span style="color:#9B859D;">Invisible</span>.<span style="color:#89BDFF;">app</span>. <span style="color:#89BDFF;">send</span>( method, <span style="color:#E28964;">*</span>args, <span style="color:#E28964;">&amp;</span>block);  <span style="color:#E28964;">else</span>; <span style="color:#E28964;">super</span>; <span style="color:#E28964;">end</span>; <span style="color:#E28964;">end</span></pre>
<p></code></pre>
<p><a href="http://github.com/macournoyer/invisible/tree/master" title="macournoyer's invisible at master &mdash; GitHub">No!</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/220/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/220/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=220&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/07/21/you-see-the-invisible-block/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
		<item>
		<title>RubyFringe == Awesome</title>
		<link>http://macournoyer.wordpress.com/2008/07/21/rubyfringe-awesome/</link>
		<comments>http://macournoyer.wordpress.com/2008/07/21/rubyfringe-awesome/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 02:29:37 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/07/21/rubyfringe-awesome/</guid>
		<description><![CDATA[Nick Sieger though us about Jazz, Giles Bowkett got a standing ovation, Zed Shaw sang &#8220;Matz can&#8217;t patch&#8221; and &#8220;Don&#8217;t fuck Chad&#8217;s community&#8221;, Geoffrey Grosenbach was wearing a kilt, Hampton Catlin presented Haml for Javascript, Damien Katz made me cry &#8230; <a href="http://macournoyer.wordpress.com/2008/07/21/rubyfringe-awesome/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=218&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://rubyfringe.com/images/rf_attending.jpg" alt="RubyFringe" align="left" /><a href="http://blog.nicksieger.com/articles/2008/07/19/jazzers-and-programmers" title="Jazzers and Programmers">Nick Sieger</a> though us about Jazz, <a href="http://gilesbowkett.blogspot.com/" title="Giles Bowkett">Giles Bowkett</a> got a standing ovation, <a href="http://www.zedshaw.com/" title="ZSFA -- All About Me">Zed Shaw</a> sang &#8220;Matz can&#8217;t patch&#8221; and &#8220;Don&#8217;t fuck Chad&#8217;s community&#8221;, <a href="http://geoffreygrosenbach.com/" title="Geoffrey Grosenbach">Geoffrey Grosenbach</a> was wearing a kilt, <a href="http://hamptoncatlin.com/" title="Hampton Catlin - Always Finding A Better Way.">Hampton Catlin</a> presented Haml for Javascript, <a href="http://damienkatz.net/" title="Damien Katz">Damien Katz</a> made me cry and <a href="http://rubyisawesome.com/" title="">Tom Preston-Werner</a> is my new hero.</p>
<h4>Better reviews</h4>
<ul>
<li><a href="http://globalnerdy.com/2008/07/20/rubyfringe-day-1-notes-part-1/" title="Day 1 Notes, Part 1">http://globalnerdy.com/2008/07/20/rubyfringe-day-1-notes-part-1/</a></li>
<li><a href="http://globalnerdy.com/2008/07/20/rubyfringe-day-1-notes-part-2/" title="Day 1 Notes, Part 2">http://globalnerdy.com/2008/07/20/rubyfringe-day-1-notes-part-2/</a></li>
<li><a href="http://globalnerdy.com/2008/07/21/rubyfringe-day-2-notes-part-1/" title="Day 2 Notes, Part 1">http://globalnerdy.com/2008/07/21/rubyfringe-day-2-notes-part-1/</a></li>
<li><a href="http://www.seanr.ca/tech/?p=27" title="RubyFringe, Day One">http://www.seanr.ca/tech/?p=27</a></li>
<li><a href="http://www.seanr.ca/tech/?p=30" title="RubyFringe, Day Two">http://www.seanr.ca/tech/?p=30</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/218/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/218/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=218&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/07/21/rubyfringe-awesome/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>

		<media:content url="http://rubyfringe.com/images/rf_attending.jpg" medium="image">
			<media:title type="html">RubyFringe</media:title>
		</media:content>
	</item>
		<item>
		<title>MeshU slides and code</title>
		<link>http://macournoyer.wordpress.com/2008/05/20/meshu-slides-and-code/</link>
		<comments>http://macournoyer.wordpress.com/2008/05/20/meshu-slides-and-code/#comments</comments>
		<pubDate>Wed, 21 May 2008 00:23:28 +0000</pubDate>
		<dc:creator>macournoyer</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[thin]]></category>

		<guid isPermaLink="false">http://macournoyer.wordpress.com/2008/05/20/meshu-slides-and-code/</guid>
		<description><![CDATA[Code is at http://github.com/macournoyer/meshu<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=217&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/418726' width='425' height='348'></iframe>
<p>Code is at http://github.com/macournoyer/meshu</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/macournoyer.wordpress.com/217/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/macournoyer.wordpress.com/217/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macournoyer.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macournoyer.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macournoyer.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macournoyer.wordpress.com&amp;blog=343861&amp;post=217&amp;subd=macournoyer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macournoyer.wordpress.com/2008/05/20/meshu-slides-and-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfec5f7d1a4aaafc5a2451be8c42d26a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macournoyer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
