<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>tag:interblah.net,2008-06-01:kind/blog</id>
  <title>interblah.net - blog</title>
  <updated>2008-06-01T13:37:19+00:00</updated>
  <entry>
    <title>defensio-to-the-rescue</title>
    <id>tag:interblah.net,2008-08-14:/defensio-to-the-rescue</id>
    <updated>2008-08-14T21:34:21+00:00</updated>
    <published>2008-08-14T21:34:01+00:00</published>
    <link href="http://interblah.net/defensio-to-the-rescue"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Defensio to the rescue&lt;/h1&gt;

&lt;p&gt;When I come back to interblah.net, I normally have a quick look at the &lt;a href="http://interblah.net/index"&gt;index&lt;/a&gt; page to see if any new comments are awaiting my attention. And recently that's revealed a few interesting comments (thanks!), and hundreds of spam comments.&lt;/p&gt;

&lt;p&gt;I deliberately didn't do anything clever to combat spam, but I got a bit sick of it today, so I've started sending comments to &lt;a href="http://interblah.net/Defensio"&gt;Defensio&lt;/a&gt; to stem the flow. The implementation was very simple (see github for details), and hopefully that'll stem the flow of links to naughty filth on my site.&lt;/p&gt;

&lt;p&gt;Except for the links that &lt;em&gt;I&lt;/em&gt; add, of course.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/defensio-to-the-rescue"&gt;2 comments for defensio-to-the-rescue&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>ruby-manor-announcement</title>
    <id>tag:interblah.net,2008-08-01:/ruby-manor-announcement</id>
    <updated>2008-08-01T16:33:38+00:00</updated>
    <published>2008-08-01T15:38:33+00:00</published>
    <link href="http://interblah.net/ruby-manor-announcement"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Ruby Manor&lt;/h1&gt;

&lt;p&gt;&lt;img style="float: right;" src="/assets/ruby-manor.png" width="240px" height="200px" /&gt;&lt;/p&gt;

&lt;p&gt;I just posted an &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/309843"&gt;initial anouncement&lt;/a&gt; for &lt;a href="http://interblah.net/ruby-manor"&gt;ruby-manor&lt;/a&gt; to the ruby/rails/lrug mailing lists.&lt;/p&gt;

&lt;p&gt;It's an idea we've been kicking around since a beery campfire talk after RailsConf in Portland - would it be possible to put ona  Ruby conference-ish thing, but subtract all of the unfortunately common &lt;strike&gt;bullshit&lt;/strike&gt; problems that conferences I've been to share:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the outlandish expense&lt;/li&gt;
&lt;li&gt;the poor relevancy of most of the talks&lt;/li&gt;
&lt;li&gt;the roulette you play when incurring 1. without knowing the state of 2. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So we have a few ideas about how to do it differently. Head over to &lt;a href="http://rubymanor.org"&gt;the ruby manor site&lt;/a&gt; to let us know if you're interested.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/ruby-manor"&gt;0 comments for ruby-manor&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>syntax-highlighting-demo</title>
    <id>tag:interblah.net,2008-07-17:/syntax-highlighting-demo</id>
    <updated>2008-07-17T17:33:23+00:00</updated>
    <published>2008-07-17T15:47:35+00:00</published>
    <link href="http://interblah.net/syntax-highlighting-demo"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Syntax Highlighting&lt;/h1&gt;

&lt;p&gt;Working through some of the outstanding issues for &lt;a href="http://interblah.net/vanilla-rb"&gt;vanilla-rb&lt;/a&gt;, I've implemented some simple syntax highlighting (&lt;a href="http://lazyatom.lighthouseapp.com/projects/11797-vanilla/tickets/16"&gt;Ticket 16&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;&lt;pre class="code ruby"&gt;&lt;code&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Ruby&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;coloured&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;with&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;syntax&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;&#xD;
    &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;with&lt;/span&gt; &lt;span class="punct"&gt;=~&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;joy&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&#xD;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello, You Coloured World You&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&#xD;
    &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;It's pretty simple behind the scenes, although there are a few conceptual choices which I may revisit. Here's the scoop.&lt;/p&gt;

&lt;h2&gt;Blocks of content&lt;/h2&gt;

&lt;p&gt;I recently fixed code syntax highlighting on the &lt;a href="http://interblah.net/rails-engines"&gt;rails-engines&lt;/a&gt; site, which is built using the reasonably-excellent &lt;a href="http://interblah.net/radiant-cms"&gt;radiant-cms&lt;/a&gt; system. In Radiant, you markup blocks of content, typically like this:&lt;/p&gt;

&lt;p&gt;&lt;pre class="code html"&gt;&lt;code&gt;&amp;lt;r:code lang=&amp;quot;ruby&amp;quot;&amp;gt;&#xD;
class Blah&#xD;
  def something&#xD;
  end&#xD;
end&#xD;
&amp;lt;/r:code&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Radiant lets you define &lt;em&gt;tags&lt;/em&gt; that wrap around content within the page, making this pretty simple.&lt;/p&gt;

&lt;p&gt;However, &lt;a href="http://interblah.net/vanilla"&gt;vanilla&lt;/a&gt; doesn't work like that, or at least it doesn't at the moment. The building block of a page is the &lt;a href="http://interblah.net/snip"&gt;snip&lt;/a&gt;, not a chunk of text wrapped in a tag. There's no tag processing going on here at all, beyond the single, magically snip inclusion that makes it all work. This presents a problem when we want to treat a certain piece of text differently to the rest of the body of a snip.&lt;/p&gt;

&lt;h2&gt;The Vanilla Way&lt;/h2&gt;

&lt;p&gt;Since the building block is the snip, the natural thing to do is to move the code snippet into its own snip, and include that via a &lt;a href="http://interblah.net/code"&gt;code&lt;/a&gt; dynasnip (see below for the self-syntax-highlighted source!). And so this call &lt;/p&gt;

&lt;p&gt;&amp;#123;code ruby,test-code-highlighting&amp;#125;&lt;/p&gt;

&lt;p&gt;works nicely for us. After the call to the &lt;a href="http://interblah.net/code"&gt;code&lt;/a&gt; dynasnip, the first parameter is the language, and the second is the snip name to include:&lt;/p&gt;

&lt;p&gt;&lt;pre class="code ruby"&gt;&lt;code&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Included&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;from_another_snip&lt;/span&gt;&#xD;
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;syntax highlighted!&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;... but it's a pain to have to move every code sample out into its own snip (although that's certainly useful for larger chunks of code.&lt;/p&gt;

&lt;p&gt;The solution to this, is to allow rendering of individual &lt;em&gt;parts&lt;/em&gt; of snips via syntax highlighting. By adding the snip part to the parameter list&lt;/p&gt;

&lt;p&gt;&amp;#123;code ruby,syntax-highlighting-demo,rubycodesample&amp;#125;&lt;/p&gt;

&lt;p&gt;we get&lt;/p&gt;

&lt;p&gt;&lt;pre class="code ruby"&gt;&lt;code&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Test&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;initialize&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="constant"&gt;nil&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello, World&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;The code dynasnip is rendering the &lt;a href="http://interblah.net/syntax-highlighting-demo/rubycodesample.raw"&gt;rubycodesample&lt;/a&gt; part of this very blog post!&lt;/p&gt;

&lt;h2&gt;Next steps&lt;/h2&gt;

&lt;p&gt;While this certainly works, it's a pain to have to reference the current snip in order to get to the snip part. I have to do this with the &lt;a href="http://interblah.net/comments-are-alive"&gt;comments&lt;/a&gt; dynasnip too, in order to find all the snips that are related to it. We could solve this if:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Each renderer knew which snip it was rendering - currently true :)&lt;/li&gt;
&lt;li&gt;Each renderer knew which renderer called it - not currently possible :(&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ideally, the &lt;em&gt;code&lt;/em&gt; dynasnip would be able to ask it's renderer (the &lt;em&gt;Ruby&lt;/em&gt; renderer) to ask the renderer that is invoking it (in the case of this post, the &lt;em&gt;Markdown&lt;/em&gt; renderer) which snip is doing the including. With me? &lt;/p&gt;

&lt;pre&gt;Code dyna 
    --&gt; rendered by Ruby Renderer 
        --&gt; invoked by Markdown Render while rendering this blog post&lt;/pre&gt;

&lt;p&gt;Yeah, it's a bit complicated, but it's probably worth it; it could help avoid circular rendering problems at the same time.&lt;/p&gt;

&lt;p&gt;Anyway - syntax highlighting. Woot!&lt;/p&gt;

&lt;h2&gt;Super Bonus Appendix&lt;/h2&gt;

&lt;p&gt;Here's the code from the &lt;a href="http://interblah.net/code"&gt;code&lt;/a&gt; dynasnip, highlighting itself, like an eternal self-consuming snake. Don't say I didn't warn you!&lt;/p&gt;

&lt;p&gt;&lt;pre class="code ruby"&gt;&lt;code&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;syntax/convertors/html&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;CodeHighlighter&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Dynasnip&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;handle&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;language&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;snip_to_render&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;part_to_render&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;content&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;snip&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Vanilla&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;snip&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;snip_to_render&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;text&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;snip&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;__send__&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;part_to_render&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;to_sym&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;convertor&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Syntax&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Convertors&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;HTML&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;for_syntax&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;language&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;code&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;convertor&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;convert&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;text&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="punct"&gt;%(&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;pre class=&amp;quot;code &lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;language&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;%(&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;code&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;%(&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
&#xD;
  &lt;span class="constant"&gt;self&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/syntax-highlighting-demo"&gt;31 comments for syntax-highlighting-demo&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>reevoo-labs</title>
    <id>tag:interblah.net,2008-07-04:/reevoo-labs</id>
    <updated>2008-07-04T09:39:45+00:00</updated>
    <published>2008-07-04T09:32:26+00:00</published>
    <link href="http://interblah.net/reevoo-labs"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Reevoo Labs Lives!&lt;/h1&gt;

&lt;p&gt;At &lt;a href="http://interblah.net/reevoo"&gt;reevoo&lt;/a&gt;, we rely heavily on open source software. As a part of this, we're all very keen on contributing back to the community, both in terms of cold, hard source code, and in sharing our experiences developing software&lt;/p&gt;

&lt;p&gt;My colleague &lt;a href="http://interblah.net/luke-redpath"&gt;luke-redpath&lt;/a&gt; has just pushed our new &lt;a href="http://interblah.net/reevoo-labs"&gt;reevoo-labs&lt;/a&gt; site live:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://labs.reevoo.com/assets/2008/7/3/reevoolabs_cropped.jpg" width="600" height="190"&gt;&lt;/p&gt;

&lt;p&gt;I'm looking forward to posting there about some of the issues we're grappling with at &lt;a href="http://interblah.net/reevoo"&gt;reevoo&lt;/a&gt;: how to test well, how testing affects refactoring, and trying to innovate on the web whilst still remaining commercially viable. &lt;a href="http://labs.reevoo.com"&gt;Check it out.&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>wham-bam-thank-you-spam</title>
    <id>tag:interblah.net,2008-07-02:/wham-bam-thank-you-spam</id>
    <updated>2008-07-17T17:37:10+00:00</updated>
    <published>2008-07-02T21:48:36+00:00</published>
    <link href="http://interblah.net/wham-bam-thank-you-spam"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Wham, Bam, Thank You Spam!&lt;/h1&gt;

&lt;p&gt;My ultra-secure commenting system has finally fallen foul of the malicious robots of spammers. They're probably terrorists, hijacking the precious interblah.net-page-rank fluids to build some kind of &lt;em&gt;net-bomb&lt;/em&gt;. Unthinkable!&lt;/p&gt;

&lt;p&gt;Anyway, this is good for me, because it forces me to develop some new stuff to counter the spam. And the first step is being able to delete snips. Here's my quick-n-dirty &lt;a href="http://interblah.net/dynasnip"&gt;dynasnip&lt;/a&gt; for the moment:&lt;/p&gt;

&lt;p&gt;&lt;h1&gt;delete&lt;/h1&gt;
&lt;p&gt;Usage: (no details)&lt;/p&gt;
&lt;pre class="code ruby"&gt;&lt;code&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;vanilla/dynasnip&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&#xD;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;vanilla/dynasnips/login&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&#xD;
&#xD;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Delete&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Dynasnip&lt;/span&gt;&#xD;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;Login&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Helper&lt;/span&gt;&#xD;
&#xD;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;handle&lt;/span&gt;&#xD;
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="ident"&gt;login_required&lt;/span&gt; &lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="ident"&gt;logged_in?&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;name&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;app&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;request&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:snip_to_delete&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;snip_to_delete&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Vanilla&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;snip&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&#xD;
    &lt;span class="ident"&gt;snip_to_delete&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;destroy&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;snip_to_delete&lt;/span&gt;&#xD;
    &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Snip &lt;span class="expr"&gt;#[snip 'name' cannot be found]&lt;/span&gt; has been deleted.&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&#xD;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&#xD;
  &lt;span class="constant"&gt;self&lt;/span&gt;&#xD;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(If the dynasnip only contains a class name, it's probably loaded from the Vanilla application directly. This is typical of the basic dynasnips like link_to, etc)&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;I've also added the link to the template, but this in turn raises some interesting, unanswered questions about how to take Vanilla.rb from an interesting toy into a proper web platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/wham-bam-thank-you-spam"&gt;0 comments for wham-bam-thank-you-spam&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>mashed-2008</title>
    <id>tag:interblah.net,2008-06-22:/mashed-2008</id>
    <updated>2008-07-17T15:13:34+00:00</updated>
    <published>2008-06-22T14:37:57+00:00</published>
    <link href="http://interblah.net/mashed-2008"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Mashed 2008&lt;/h1&gt;

&lt;p&gt;Well, I'm just back from &lt;a href="http://mashed08.backnetwork.com/"&gt;Mashed 2008&lt;/a&gt;, but before my brain shuts down due to lack of sleep (thanks, people playing RockBand all night, you are &lt;em&gt;awesome&lt;/em&gt;), I just wanted to post a video of our (prize-winning!) hack.&lt;/p&gt;

&lt;p&gt;We took some of the (somewhat odd) XML subtitle feeds that the BBC generate, and extracted interesting words at specific points in time. We then hooked this up to some flash (originally developed by &lt;a href="http://ten4design.co.uk/"&gt;TEN4 Design&lt;/a&gt;), stolen from &lt;a href="http://dylan.sonybmgmusic.co.uk/create"&gt;Sony BMG&lt;/a&gt;, and quite thoroughly hacked, presenting it alongside content from the BBC Redux corresponding to the subtitles, to produce this. &lt;/p&gt;

&lt;p&gt;I like to call it &lt;em&gt;Subterranean Homesick News&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;object width="400" height="300"&gt;   &lt;param name="allowfullscreen" value="true" /&gt;   &lt;param name="allowscriptaccess" value="always" /&gt;   &lt;param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1214166&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;   &lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1214166&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;I'll post a link to the full video once it's ready&lt;/strike&gt; &lt;a href="http://vimeo.com/1214367"&gt;Here's the longer video&lt;/a&gt; - I particularlly like the Hissy fit. I think there are some great moments in it (as well, as some not so great bits, but that's what you get after 24 hours of sleepless hackery).&lt;/p&gt;

&lt;p&gt;Anyway, I hope you enjoy it.&lt;/p&gt;

&lt;h2&gt;Behind the Scenes&lt;/h2&gt;

&lt;p&gt;The hack involves some Ruby, some Javascript, some Flash, and some magic. The animated Bob Dylan isn't pre-rendered with the subtitles - that's all live thanks to &lt;a href="http://www.techbelly.com"&gt;Ben Griffiths&lt;/a&gt; flash deconstruction skills (learned on the spot, no less). The interesting terms are the result of a collaboration between myself and &lt;a href="http://jamesandre.ws"&gt;James Andrews&lt;/a&gt; (although whereever you see good words, it's his work - all the not-so-good words are my fault).&lt;/p&gt;

&lt;p&gt;Anyway - great fun. I'll amend this post with the timestamps of some of my favourite moments in the movie. (#mashed tag for robotic things.)&lt;/p&gt;

&lt;h2&gt;Epilogue&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.oreillygmt.co.uk/2008/07/subterranean-ho.html"&gt;Our interview for O'Reilly GMT on the southbank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jamesandre.ws/post/39521431/mashed-2008-team-bob"&gt;James Andrews' post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techbelly.com/2008/06/24/mashed08-team-bob/"&gt;Ben's post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mashedlit.blogspot.com/2008/06/subterranean-homesick-news.html"&gt;Someone else likes our subversion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://interblah.net/mashed-2008"&gt;386 comments for mashed-2008&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>more-vanilla-tweaks</title>
    <id>tag:interblah.net,2008-06-04:/more-vanilla-tweaks</id>
    <updated>2008-06-04T22:46:14+00:00</updated>
    <published>2008-06-04T22:46:14+00:00</published>
    <link href="http://interblah.net/more-vanilla-tweaks"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;More Vanilla Tweaks&lt;/h1&gt;

&lt;p&gt;So thanks for your patience thus far. My grand &lt;a href="http://interblah.net/vanilla"&gt;vanilla&lt;/a&gt; experiment is going relatively well. Lessons learned so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links in atom feeds need to be absolute, not relative;&lt;/li&gt;
&lt;li&gt;Folks like to post empty comments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've updated some of the documentation so &lt;a href="http://github.com/lazyatom/vanilla-rb/tree/master/README"&gt;it should be a bit clearer&lt;/a&gt; how you can play with your own &lt;a href="http://interblah.net/vanilla-rb"&gt;vanilla-rb&lt;/a&gt; clones:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gem install gem install soup sqlite3-ruby rack ratom RedCloth BlueCloth
$ git clone git://github.com/lazyatom/vanilla-rb.git
$ cd vanilla-rb
$ rake setup
$ rackup lib/vanilla.ru
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let me know how it goes...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/more-vanilla-tweaks"&gt;1190 comments for more-vanilla-tweaks&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>comments-are-alive</title>
    <id>tag:interblah.net,2008-06-03:/comments-are-alive</id>
    <updated>2008-07-17T15:03:08+00:00</updated>
    <published>2008-06-03T22:32:43+00:00</published>
    <link href="http://interblah.net/comments-are-alive"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Comments Are Alive!&lt;/h1&gt;

&lt;p&gt;I just pushed a first attempt at a super simple commenting dyna - you can see it in operation on this (view &lt;a href="http://interblah.net/comments-are-alive.raw"&gt;raw&lt;/a&gt;) and the previous blog post. It operates very simply, is almost certainly ripe for abuse and spamming, but lets walk before we run, yeah?&lt;/p&gt;

&lt;p&gt;Next up, some proper instructions about how to get vanilla running.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://interblah.net/comments-are-alive"&gt;2 comments for comments-are-alive&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>already-we-have-vanilla-goodness</title>
    <id>tag:interblah.net,2008-06-02:/already-we-have-vanilla-goodness</id>
    <updated>2008-06-03T22:36:45+00:00</updated>
    <published>2008-06-02T00:39:27+00:00</published>
    <link href="http://interblah.net/already-we-have-vanilla-goodness"/>
    <author>
      <name>james</name>
    </author>
    <content type="html">&lt;h1&gt;Already, We Have Vanilla Goodness&lt;/h1&gt;


	&lt;p&gt;After some furious bugfixing (thanks to the strictness of Firefox 3 for chastising me!), things are running quite smoothly here. I&amp;#8217;ve written the starts of a conceptual &lt;a href="http://interblah.net/vanilla-rb-tutorial"&gt;vanilla-rb-tutorial&lt;/a&gt;, please do check that out.&lt;/p&gt;


	&lt;p&gt;I also limited the number of blog posts&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; that appear on the home page to 3, and added a link to the full blog that shows the most recent 10. Making this change with vanilla was utterly trivial &amp;#8211; the &lt;a href="http://interblah.net/start"&gt;start&lt;/a&gt; snip originally included the &lt;a href="http://interblah.net/blog"&gt;blog&lt;/a&gt; snip directly, but rather than do that, I can just use the underlying &lt;code&gt;kind&lt;/code&gt; dynasnip to grab the 3 most recent &lt;code&gt;blog&lt;/code&gt; snips and display them in place.&lt;/p&gt;


	&lt;p&gt;I really love how flexible vanilla makes the content it stores. I&amp;#8217;m looking forward to playing around more!&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Oh, and just because I can, this blog post was written using textile, whereas the others use Markdown. All on the same page, naturally. Add &lt;code&gt;.raw&lt;/code&gt; to the url for this post to see!&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://interblah.net/already-we-have-vanilla-goodness"&gt;4 comments for already-we-have-vanilla-goodness&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>interblah-is-now-vanilla-flavoured</title>
    <id>tag:interblah.net,2008-06-01:/interblah-is-now-vanilla-flavoured</id>
    <updated>2008-06-02T00:34:34+00:00</updated>
    <published>2008-06-01T11:39:29+00:00</published>
    <link href="http://interblah.net/interblah-is-now-vanilla-flavoured"/>
    <author>
      <name>interblah.net</name>
    </author>
    <content type="html">&lt;h1&gt;Welcome to Vanilla&lt;/h1&gt;

&lt;p&gt;Yes, it looks different here, doesn't it. That's because I've flipped the switch, loosed the reins, unharnessed the wild boar and turned on &lt;a href="http://interblah.net/vanilla-rb"&gt;Vanilla.rb&lt;/a&gt;. Here's my work-in-progress tutorial: &lt;a href="http://interblah.net/vanilla-rb-tutorial"&gt;vanilla-rb-tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's going to be a bit broken around here for a while, but the idea there is to motivate me to fix things. You won't be able to log in (since you can't register), which means no creating or editing snips for you lot at the moment. You can, however, see what the raw contents of the snips are - just add .raw to the end of pretty much any URL&lt;/p&gt;

&lt;p&gt;You can, of course, download vanilla an play about with it locally; the current authentication scheme is trival when you've access to the filesystem.&lt;/p&gt;

&lt;p&gt;Some notable things that I need to consider in more detail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feeds - an atom one is available at the moment, but it's implementation is pretty crufty&lt;/li&gt;
&lt;li&gt;Commenting - (&lt;a href="http://lazyatom.lighthouseapp.com/projects/11797-vanilla/tickets/5"&gt;Ticket 5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better internal parsing (&lt;a href="http://lazyatom.lighthouseapp.com/projects/11797-vanilla/tickets/8"&gt;Ticket 8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lazyatom.lighthouseapp.com/projects/11797-vanilla/tickets"&gt;Muchos other stuff&lt;/a&gt;, including documentation about how other folks can use vanilla!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So - here we go!&lt;/p&gt;</content>
  </entry>
</feed>
