<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:ent="http://www.purl.org/NET/ENT/1.0/" version="2.0">
  <channel>
    <title>Curiouser and Curiouser! on ruby</title>
    <link>http://matt.blogs.it/</link>
    <description>RSS feed for topic ruby</description>
    <copyright>Copyright 2006 Matt Mower</copyright>
    <generator>Squib/0.4.0.348</generator>
    <managingEditor>self@mattmower.com</managingEditor>
    <webMaster>self@mattmower.com</webMaster>
    <language>en-gb</language>
    <item>
      <title>It's not quite Ruby.NET but...</title>
      <link>http://matt.blogs.it/entries/00001778.html</link>
      <pubDate>Tue, 19 Apr 2005 12:46:01 +0100</pubDate>
      <description>&lt;p&gt;Via &lt;a href="http://feeds.feedburner.com/Synesthesia?m=171"&gt;Julian&lt;/a&gt;, a &lt;a href="http://www.saltypickle.com/rubydotnet/"&gt;Ruby to .NET bridge!&lt;/a&gt;&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001778.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>A Bishop and a Reverend walk into a bar</title>
      <link>http://matt.blogs.it/entries/00001785.html</link>
      <pubDate>Sun, 24 Apr 2005 21:59:29 +0100</pubDate>
      <description>&lt;p&gt;Last weekend I ported the &lt;a href="http://www.divmod.org/projects/reverend"&gt;Reverend&lt;/a&gt; bayesian classifier from Python to Ruby (thanks &lt;a href="http://homepages.unl.ac.uk/~alsburyj/"&gt;Jon&lt;/a&gt; for the original pointer to Reverend).  What I didn't realise was that &lt;a href="http://tech.rufy.com/"&gt;Lucas Carlson&lt;/a&gt; was, simultaneously, working a similar library... ah well, there's a good chance we'll roll my work into his more general classifier library.&lt;/p&gt;
&lt;p&gt;Anyway for what it's worth my port, &lt;a href="http://rubyforge.org/projects/bishop/"&gt;Bishop&lt;/a&gt;, is available for download and as a RubyGem.  I anticipate at least one more release before deciding what to do with it.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001785.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Stemmer gem</title>
      <link>http://matt.blogs.it/entries/00001786.html</link>
      <pubDate>Sun, 24 Apr 2005 22:03:00 +0100</pubDate>
      <description>&lt;p&gt;The unreleased version of &lt;a href="http://rubyforge.org/projects/bishop/"&gt;Bishop&lt;/a&gt; uses Ray Pereda's port to Ruby of &lt;a href="http://www.tartarus.org/~martin/PorterStemmer/"&gt;Martin Porter's&lt;/a&gt; word stemming algorithm.&lt;/p&gt;
&lt;p&gt;I've used this code before and I noticed Lucas uses the same code.  Despite it's size it made sense to us to package it as a RubyGem so that others could make use of it without duplication.  Thanks to a suggestion by &lt;a href="http://tech.rufy.com/"&gt;Lucas&lt;/a&gt; it's also going to be easy to plugin other stemmers later.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001786.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>It's a fine ART</title>
      <link>http://matt.blogs.it/entries/00001793.html</link>
      <pubDate>Wed, 04 May 2005 11:01:50 +0100</pubDate>
      <description>&lt;p&gt;Something I was messing around with at the weekend is a Ruby implementation of the ART-1 and ART-2 clustering algorithms.  ART stands for &lt;a href="http://web.umr.edu/~tauritzd/art/"&gt;Adaptive Resonance Theory&lt;/a&gt;.  I have no idea what "adaptive resonance" means but that hasn't stopped me so far.&lt;/p&gt;
&lt;p&gt;Basically, what the ART family of algorithms do is partition a series of vectors (whose elements represent &lt;em&gt;features&lt;/em&gt; of some subject) into a number of clusters (sets) where the features of the vectors in one cluster are "closer" to the &lt;em&gt;centre&lt;/em&gt; of that cluster than they are to the centre of any other cluster.&lt;/p&gt;
&lt;p&gt;The centre of a cluster is a mathematical point which depends upon a function of the features of the vectors in the cluster.  As the centre moves vectors may drift between clusters accordingly.&lt;/p&gt;
&lt;p&gt;ART-1 clusters boolean vectors (that is each feature is either on or off) while ART-2 clusters real valued vectors.  It's ART-2 i'm primarily interested in as I'm looking at &lt;em&gt;concept clustering&lt;/em&gt; in weblog posts as part of &lt;a href="http://www.memescope.com/"&gt;MemeScope&lt;/a&gt;.  I went back and did ART-1 for completeness.  Both will be released soon.&lt;/p&gt;
&lt;p&gt;Different clusterings can be obtained by adjusting parameters to the algorithm.  This is much like a b-tree where each bucket can have a different number of keys leading to different shaped trees.  My perception is that, for ART-2 to be useful to me, I will need to find a good way of dynamically adjusting the parameters and reclustering as new data appears.&lt;/p&gt;
&lt;p&gt;The first thing I need to do is to prove that my implementations are sound.  I developed my ART-2 implementation from reading an outline summary of the algorithm.  I have a paper on ART-2 but frankly can't understand the math or the terminology.  My ART-1 implementation was implemented with reference to the code in &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/1584502789/qid=1115200988/sr=8-1/ref=sr_8_xs_ap_i1_xgl/026-1596559-9150828"&gt;AI Application Programming&lt;/a&gt; (an excellent &lt;em&gt;practical&lt;/em&gt; book on this subject).&lt;/p&gt;
&lt;p&gt;What would &lt;strong&gt;really, really&lt;/strong&gt; help me is a set of sample data with expected output.  It's hard to write test cases for the algorithm when I don't know exactly what to expect.  Can anyone help me?  Or point me at someone who can?&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001793.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Ruby</title>
      <link>http://matt.blogs.it/entries/00001817.html</link>
      <pubDate>Thu, 12 May 2005 13:08:25 +0100</pubDate>
      <description>&lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;: less is more, in a most &lt;a href="http://redhanded.hobix.com/redesign2005/"&gt;elegant fashion&lt;/a&gt;.</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001817.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>YARV is coming</title>
      <link>http://matt.blogs.it/entries/00001881.html</link>
      <pubDate>Tue, 28 Jun 2005 09:09:17 +0100</pubDate>
      <description>&lt;p&gt;&lt;blockquote&gt;Ko1 is (firmly) back in the saddle. I totally missed &lt;a href="http://rubyforge.org/pipermail/yarv-devel/2005-June/000287.html"&gt;this&lt;/a&gt; message dated June 2nd, wherein he outlines the three plans for YARV between now and February 2006. [&lt;a href="http://redhanded.hobix.com/"&gt;RedHanded&lt;/a&gt;]&lt;/blockquote&gt;Excellent &lt;a href="http://redhanded.hobix.com/inspect/rubyvmJustMonthsAway.html"&gt;news&lt;/a&gt; for &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; fans everywhere.&lt;/p&gt;
</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001881.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Detecting Ruby platforms</title>
      <link>http://matt.blogs.it/entries/00001882.html</link>
      <pubDate>Wed, 29 Jun 2005 10:52:18 +0100</pubDate>
      <description>&lt;p&gt;I got bitten recently by some naive platform detection code for Ruby.  Ruby defines a constant RUBY_PLATFORM which contains a string identifying the platform and many programs use regular expressions to parse this in the same way that Browser-Agent strings get parsed.  It's not a precise science and I imagine the author of the code:&lt;blockquote&gt;&lt;tt&gt;if RUBY_PLATFORM =~ /win/i&lt;/tt&gt;&lt;/blockquote&gt;hadn't spent much time using a Mac or he'd have come across the platform string&lt;blockquote&gt;powerpc-dar&lt;strong&gt;win&lt;/strong&gt;-8.1.0&lt;/blockquote&gt;and realised it wasn't going to fly.&lt;/p&gt;
&lt;p&gt;I had a look around for Ruby platform detection code and, whilst I found other people doing the same trick, I didn't find a library or a comprehensive attempt to cover available platforms.  So I decided to give it a try and the current result is: &lt;a href="http://matt.blogs.it/gems/ruby/platform.rb"&gt;platform.rb&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you require 'platform' in your code it will define three constants:&lt;ul&gt;&lt;li&gt;Platform::OS&lt;ul&gt;&lt;li&gt;:unix&lt;/li&gt;&lt;li&gt;:win32&lt;/li&gt;&lt;li&gt;:os2&lt;/li&gt;&lt;li&gt;:vms&lt;/li&gt;&lt;li&gt;and so on...&lt;/li&gt;&lt;li&gt;:unknown&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Platform::IMPL&lt;ul&gt;&lt;li&gt;:macosx&lt;/li&gt;&lt;li&gt;:linux&lt;/li&gt;&lt;li&gt;:mingw&lt;/li&gt;&lt;li&gt;and so on...&lt;/li&gt;&lt;li&gt;:unknown&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/li&gt;&lt;li&gt;Platform::ARCH&lt;ul&gt;&lt;li&gt;:powerpc&lt;/li&gt;&lt;li&gt;:x86&lt;/li&gt;&lt;li&gt;and so on...&lt;/li&gt;&lt;li&gt;:unknown&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;If you're a Ruby coder please download this library and run it using:&lt;blockquote&gt;&lt;tt&gt;ruby platform.rb&lt;/tt&gt;&lt;/blockquote&gt;and check that it prints sensible values for your platform.  If not please leave me a comment here with the output of&lt;blockquote&gt;&lt;tt&gt;ruby -e "puts RUBY_PLATFORM"&lt;/tt&gt;&lt;/blockquote&gt;and what you think should be the value for Platform::OS, Platform::IMPL, and Platform::ARCH.  I'm also interested in any comments about other, potentially useful, things we can infer.&lt;/p&gt;
&lt;p&gt;Once I have reasonable coverage I'll release it as a file download and a gem.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001882.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>The Radio Event Horizon</title>
      <link>http://matt.blogs.it/entries/00001914.html</link>
      <pubDate>Thu, 14 Jul 2005 12:08:30 +0100</pubDate>
      <description>&lt;p&gt;I've wanted to move my blog from Radio for quite a while.  It has served me well and I've had fun with it but I feel those days are gone.  It's been a while since I saw Radio as a product with a viable future and I have no more interest in working with Usertalk despite having a number of &lt;a href="http://matt.blogs.it/2005/05/20.html#a1845"&gt;blog ideas&lt;/a&gt; I'd like to develop.&lt;/p&gt;
&lt;p&gt;However a working, developed, blog platform with a large chunk of content creates a pretty strong gravity well.  Migrating to another product is going to be hard. I've not found a product which could give me the escape velocity I need.&lt;/p&gt;
&lt;p&gt;I love working with &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;.  I'd love to have a blogging platform that was written in Ruby.  But, then again, now that I have a Mac I can finally use &lt;a href="http://www.eastgate.com/Tinderbox/"&gt;Tinderbox&lt;/a&gt; and, apparently, Mark Bernstein is working on &lt;a href="http://ahawkins.org/2005/07/13/mark-bernstein-i-spent-an-16-hour-coding-day-yesterday-building-your-next-weblog/"&gt;making Tinderbox a 1st class blogging tool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maybe this time next year I'll be using a new tool and developing new ideas again.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001914.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>80% less crufty</title>
      <link>http://matt.blogs.it/entries/00001916.html</link>
      <pubDate>Thu, 14 Jul 2005 12:38:08 +0100</pubDate>
      <description>&lt;p&gt;About this time last year I was realising that &lt;a href="http://www.lisp.org/"&gt;Lisp&lt;/a&gt; probably wasn't the language for me.  It introduced me to metaprogramming with macros, new ways of looking at OOP, and generally blew fuses in my mind.  But it was also arcane and irregular.  I could have handled the brackets if it were not for the generally cruftyness of the whole thing.  Like Lucas I also found the &lt;a href="http://feeds.feedburner.com/rufytech?m=53"&gt;naming ugly&lt;/a&gt; although I don't think his strategy of aliasing is going to work out unless he only deals with his own code.&lt;/p&gt;
&lt;p&gt;I think that's why I like Ruby so much.  It's full of &lt;a href="http://www.whytheluckystiff.net/articles/seeingMetaclassesClearly.html"&gt;metaprogrammingy goodness&lt;/a&gt; but with 80% less cruft.  Also the regular syntax style makes it great for &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;DSL's&lt;/a&gt; which is not, I would hazard, going to be the case for Lisp.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001916.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Cruftyness isn't everything</title>
      <link>http://matt.blogs.it/entries/00001920.html</link>
      <pubDate>Fri, 15 Jul 2005 18:11:04 +0100</pubDate>
      <description>&lt;p&gt;Ted Leung &lt;a href="http://www.sauria.com/blog/2005/07/14#1345"&gt;noticed&lt;/a&gt; my uninformed &lt;a href="http://matt.blogs.it/2005/07/14.html#a1916"&gt;ramblings&lt;/a&gt; yesterday about Lisp not being a suitable language for DSL's whilst pointing to another post from someone reminiscing about using Lisp for this very purpose.  He also points to a video of a Lisper building a little language for parsers.&lt;/p&gt;
&lt;p&gt;I think my point about Lisp and DSL's was perhaps too strongly put.  I guess what I was thinking was that I can imagine creating a DSL using Ruby which non-Ruby people could easily use.  I think the ease with which PHP people start using Rails may be some small testament to this, or I may be stretching the evidence to fit my hypothesis.&lt;/p&gt;
&lt;p&gt;So my point is that Lisp DSL's are probably only of use to Lisp hackers since the DSL looks like Lisp and &lt;strong&gt;Lisp is crufty!&lt;/strong&gt; :-)&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.xach.com/bt/dsl-in-lisp.mov.torrent"&gt;video&lt;/a&gt; is really cool to watch though.  It was very interesting to see someone so in command of his language go simply about solving a problem in this way.  Worth watching whether you want to use Lisp or not.&lt;/p&gt;
&lt;p&gt;So, to summarize, I still think Lisp is way cool and I bow to the mastery of the Lisp hacker.  Nevertheless, you'll prize my copy of the &lt;a href="http://pragmaticprogrammer.com/titles/ruby/"&gt;PickAxe&lt;/a&gt; from my cold, dead, hand!&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001920.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Ruby nearly ready to go VrooM</title>
      <link>http://matt.blogs.it/entries/00001957.html</link>
      <pubDate>Mon, 15 Aug 2005 18:56:04 +0100</pubDate>
      <description>&lt;p&gt;Resident Van Gogh of the Ruby world, Why the lucky stiff, reports that Rite and the RubyVM are coming ever closer&lt;blockquote&gt;No need to patch Ruby HEAD yourself. Youre &lt;a href="http://rubyforge.org/pipermail/yarv-devel/2005-August/000344.html"&gt;just a few paragraphs away&lt;/a&gt; from having your own little VM by your side. Keep in mind that this only builds miniruby, so were sort of still in the first trimester on this one. [&lt;a href="http://redhanded.hobix.com/inspect/readyPatchedRite.html"&gt;RedHanded&lt;/a&gt;]&lt;/blockquote&gt;Excellent :-)&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001957.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Checkpoint Charlie</title>
      <link>http://matt.blogs.it/entries/00001967.html</link>
      <pubDate>Wed, 17 Aug 2005 16:42:04 +0100</pubDate>
      <description>&lt;p&gt;&lt;a href="http://www.magpiebrain.com/"&gt;Sam Newman&lt;/a&gt; is organizing a &lt;a href="http://www.magpiebrain.com/archives/2005/08/17/meetup"&gt;Rails &amp; Django meet-up&lt;/a&gt; in Smithfields on September 5th.  The idea is for Rails and Django folks to come together over beer and share ideas and perspectives.  There'll likely be more Pythonistas so I hope they won't mind if the Rubyites bring water pistols (just kidding!)&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001967.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>l.m. hacks RSS and Atom while you wait</title>
      <link>http://matt.blogs.it/entries/00001986.html</link>
      <pubDate>Wed, 14 Sep 2005 08:19:54 +0100</pubDate>
      <description>&lt;p&gt;l.m.orchard has &lt;a href="http://www.decafbad.com/blog/2005/09/13/hacking-rss-and-atom-is-out"&gt;written a book about hacking RSS and Atom&lt;/a&gt;.  I'm doing a lot of stuff with RSS parsing at the moment (right now I'm experimenting with &lt;a href="http://tech.rufy.com/entry/83"&gt;Lucas Carlson's&lt;/a&gt; excellent &lt;a href="http://simple-rss.rubyforge.org/"&gt;SimpleRSS parser&lt;/a&gt;) so I might go pick up a copy, even if he does use Python ;-)&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001986.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Another reason to love Ruby</title>
      <link>http://matt.blogs.it/entries/00001996.html</link>
      <pubDate>Fri, 23 Sep 2005 11:16:55 +0100</pubDate>
      <description>&lt;p&gt;&lt;a href="http://www.geocities.com/ben_bongalon/rubycon/"&gt;RubyCon&lt;/a&gt; is a toolkit for building concept processing and other intelligent reasoning systems.  A brief glance suggests similarities with &lt;a href="http://www.cyc.com/"&gt;Cyc&lt;/a&gt; which I have looked at before.&lt;/p&gt;
&lt;p&gt;An interesting comparison is that RubyCon claims 170,000 concepts whilst &lt;a href="http://www.opencyc.org/"&gt;OpenCyc&lt;/a&gt; (Cyc's open source cousin) claims 36,000.  I wonder whether I'm comparing apples with apples and what the significance is?&lt;/p&gt;
&lt;p&gt;Well, whatever, RubyCon looks very interesting and the Ruby interface is a compelling feature.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00001996.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>MacOSX on Rails</title>
      <link>http://matt.blogs.it/entries/00002005.html</link>
      <pubDate>Thu, 29 Sep 2005 15:04:14 +0100</pubDate>
      <description>&lt;p&gt;Any MacOSX users that want to give &lt;a href="http://www.rubyonrails.org/"&gt;RubyOnRails&lt;/a&gt; a try might want to check out Ryan Raaum's &lt;a href="http://weblog.rubyonrails.com/archives/2005/09/29/locomotive-0-2-4-easy-rails-for-os-x"&gt;Locomotive&lt;/a&gt; package.  It's kind of a 1-click deal for Rails that includes Ruby, Rails, useful libs, and the SQLLite database (it also includes MySQL and Postgresql bindings if you have those already).  I'm setup already but it looks kinda cool.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002005.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>All your symbols are belong to us</title>
      <link>http://matt.blogs.it/entries/00002014.html</link>
      <pubDate>Tue, 04 Oct 2005 10:43:12 +0100</pubDate>
      <description>&lt;p&gt;I've now lost the trail of breadcrumbs which lead me here, but I just read an article by Brad Parker about his efforts to &lt;a href="http://www.heeltoe.com/retro/cadr/index.html"&gt;revive the code from one of the MIT Lisp machines&lt;/a&gt;.  He and a co-conspirator have gotten an emulator running which allows the Lisp machine to boot and talk to the network.&lt;/p&gt;
&lt;p&gt;Practical?  No.  But I find the idea of a Lisp machine (a computer which is Lisp from the hardware upwards) intriguing so it's an interesting slice of history.&lt;/p&gt;
&lt;p&gt;If someone came up with a Lisp operating system for PC hardware I'd play with it.  I guess a RubyMachine is too much to ask for :-)&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002014.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Eat your heart out GreaseMonkey</title>
      <link>http://matt.blogs.it/entries/00002017.html</link>
      <pubDate>Tue, 04 Oct 2005 19:17:54 +0100</pubDate>
      <description>&lt;p&gt;It's amazing what the &lt;a href="http://mousehole.rubyforge.org/"&gt;MouseHole&lt;/a&gt; web proxy can do:&lt;blockquote&gt;See, heres some incredible advantages over Greasemonkey and any other competition Ive encountered. MouseHole allows user scripts to act as full web applications. In this case, the writeboard feeds are watched and applicable IDs and tokens are stored in the scripts own database. [&lt;a href="http://redhanded.hobix.com/inspect/mouseholinYerWriteboards.html"&gt;RedHanded&lt;/a&gt;]&lt;/blockquote&gt;&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002017.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Models Reloaded!</title>
      <link>http://matt.blogs.it/entries/00002019.html</link>
      <pubDate>Tue, 04 Oct 2005 21:55:28 +0100</pubDate>
      <description>&lt;p&gt;One of the neat things about Rails is that you can open what's called the &lt;em&gt;Developers Console&lt;/em&gt; (it's really &lt;tt&gt;irb&lt;/tt&gt;) and interact directly with your ActiveRecord models.  One nit is that, when you make changes, you need to exit and restart.  Well not any more, thanks to &lt;a href="http://habtm.com/articles/2005/10/04/script-console-reload-models"&gt;Courtnay for this trick&lt;/a&gt;:&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
$ script/console
Loading development environment.
&gt;&gt; ..do stuff here..

then modify your model code..
then..

&gt;&gt; Dispatcher.reset_application!
models reloaded!
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002019.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Sticking my head in the mouse hole</title>
      <link>http://matt.blogs.it/entries/00002023.html</link>
      <pubDate>Wed, 05 Oct 2005 20:56:48 +0100</pubDate>
      <description>&lt;p&gt;So, as an experiment, I have now setup &lt;a href="http://mousehole.rubyforge.org/wiki/wiki.pl?MouseHole"&gt;MouseHole&lt;/a&gt; as a login item for my MacOSX account and set it up as a permanent proxy for Safari.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002023.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Eugh fresh mouse droppings</title>
      <link>http://matt.blogs.it/entries/00002024.html</link>
      <pubDate>Thu, 06 Oct 2005 00:50:28 +0100</pubDate>
      <description>&lt;p&gt;Just to make sure I &lt;em&gt;get it&lt;/em&gt; I wrote my first mouse dropping this evening to go in my mouseHole.  Called &lt;em&gt;got-links&lt;/em&gt; (You can find it in the list of mouseHole &lt;a href="http://mousehole.rubyforge.org/wiki/wiki.pl?UserScripts"&gt;User Scripts&lt;/a&gt;) it's very simple and silly.  It just keeps a count of every site and url that you visit and lets you view the counters by going to &lt;a href="http://mh/got-links/sites/"&gt;sites&lt;/a&gt; and &lt;a href="http://mh/got-links/urls/"&gt;urls&lt;/a&gt;.  Simple, neat, and all in lovely Ruby.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002024.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Talk to me Cocoa</title>
      <link>http://matt.blogs.it/entries/00002025.html</link>
      <pubDate>Fri, 07 Oct 2005 09:26:58 +0100</pubDate>
      <description>&lt;p&gt;One of the things I'm trying to work out is the best way to approach writing GUI apps with Ruby.  There are a number of options including wxRuby, fxRuby, QTRuby, Ruby/tk, RubyCocoa, and so on.  Since I'm really interested in an Aqua interface (for my own benefit) I narrowed the field to wxRuby and RubyCocoa.  The latter looks especially promising to me although I'm not making much progress on it.&lt;/p&gt;
&lt;p&gt;Today I came across &lt;a href="http://cocoadialog.sourceforge.net/"&gt;CocoaDialog&lt;/a&gt; which might act as a neat stop-gap for some of my needs.  It's designed to be called from a script that needs to get user input or present information.  So in the same way that you can use &lt;a href="http://segment7.net/projects/ruby/growl/"&gt;ruby-growl&lt;/a&gt; to display notifications from a script, you can use CocoaDialog to collect input.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002025.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Instant Rails just add water!</title>
      <link>http://matt.blogs.it/entries/00002033.html</link>
      <pubDate>Wed, 12 Oct 2005 08:52:43 +0100</pubDate>
      <description>&lt;p&gt;Curt Hibbs (he of the excellent one-click Ruby installer for windows) has &lt;a href="http://blog.curthibbs.us/articles/2005/10/11/instant-rails-released-for-windows"&gt;issued a preview release&lt;/a&gt; of his new package &lt;a href="http://instantrails.rubyforge.org/wiki/wiki.pl"&gt;Instant Rails&lt;/a&gt;:&lt;blockquote&gt;Instant Rails is a one-stop Rails runtime solution containing Ruby, Rails, Apache, and MySQL, all preconfigured and ready to run. No installer, you simply drop it into the directory of your choice and run it. It does not modify your system environment. See the Release Notes for a complete list of what is included.&lt;/blockquote&gt;The preview is Windows only but releases for other operating systems will follow.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002033.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Higher Order Messaging</title>
      <link>http://matt.blogs.it/entries/00002046.html</link>
      <pubDate>Fri, 21 Oct 2005 11:22:25 +0100</pubDate>
      <description>&lt;p&gt;Last night I read an excellent article by Nat Pryce about &lt;a href="http://nat.truemesh.com/archives/000535.html"&gt;implementing Higher Order Messaging (HOM) in Ruby&lt;/a&gt;.  A HOM is message that contains a message that is applied to a collection and rules for collating and returning the results.  It's kind of like &lt;tt&gt;Enuermable#collect&lt;/tt&gt; on steriods.&lt;blockquote&gt;&lt;p&gt;Here's how to implement this rule by explicitly iterating over the list of claimants using Ruby's for statement:&lt;tt&gt;&lt;pre&gt;for claimant in claimants
    if claimant.retired? then
        claimant.receive_benefit 50
    end
end&lt;/pre&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Here's the same rule implemented with higher-order functions  methods that accept a block:&lt;tt&gt;&lt;pre&gt;claimants.select {|e| e.retired?}.each {|e| e.receive_benefit 50}&lt;/pre&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;And finally here's the same rule implemented with higher order messages:&lt;tt&gt;&lt;pre&gt;claimants.where.retired?.do.receive_benefit 50&lt;/pre&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;Interesting stuff.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002046.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Here's why I haven't used Java in over a year</title>
      <link>http://matt.blogs.it/entries/00002052.html</link>
      <pubDate>Fri, 28 Oct 2005 12:41:15 +0100</pubDate>
      <description>&lt;p&gt;&lt;a href="http://jutopia.tirsen.com/articles/2005/10/28/why-ruby-on-rails"&gt;Why Ruby on Rails?&lt;/a&gt;.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002052.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Curiouser and Curiouser on Rails!</title>
      <link>http://matt.blogs.it/entries/00002061.html</link>
      <pubDate>Fri, 18 Nov 2005 00:45:47 +0000</pubDate>
      <description>&lt;p&gt;Okay the weblog is back in action, no longer being published using Radio but now using &lt;a href=\"http://rubyforge.org/projects/squib/\"&gt;Squib&lt;/a&gt; which is my new open source weblog tool.  It's heavily influenced by my 3 years of using Radio: like Radio, Squib is an application that runs on your computer and publishes a weblog to a remote server as a static set of pages (it talks to the Radio Community Server using the RCS upstreaming protocol).  Unlike Radio, Squib is written in pure Ruby using the Rails framework and currently clocks in at around 1,000 lines total.&lt;/p&gt;&lt;p&gt;Right now it's in pretty rough shape and probably only usable by someone desparate to escape Radio (let's say maybe your copy of Radio kept upstreaming 0-length files) but wanting to keep compatibility with an existing Radio weblog (same permalinks, etc...)&lt;/p&gt;&lt;p&gt;Over the next couple of weeks I aim to fix the gaping holes.  Source should be available from RubyForge any day now.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002061.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Intense Ruby!</title>
      <link>http://matt.blogs.it/entries/00002065.html</link>
      <pubDate>Fri, 02 Dec 2005 14:43:25 +0000</pubDate>
      <description>&lt;p&gt;Oh my goodness... &lt;a href="http://tryruby.hobix.com/"&gt;Try Ruby&lt;/a&gt;... it's amazing!&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002065.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Io, Io? What's all this then?</title>
      <link>http://matt.blogs.it/entries/00002071.html</link>
      <pubDate>Fri, 30 Dec 2005 22:07:44 +0000</pubDate>
      <description>&lt;p&gt;I've been casting about recently for the next language I will learn. I tried Lisp in 2004 and while it gave me a healthy respect for meta programming I didn't really click with it. Then in October 2004 I fell over Ruby one time too many and decided to give it a try.  It was love at 3rd sight!&lt;/p&gt;
&lt;p&gt;Over the last year I've spent quite a lot of my free time working in Ruby and it has been very rewarding. Recently I implemented the weblog tool I am using now with Ruby and Rails. I think Ruby is great.&lt;/p&gt;
&lt;p&gt;However if learning Ruby has taught me anything it's that the greatest power has come from new ways to think about solving problems. For example I now routinely think in terms of blocks in a way I could never have conceived of when I was a Java developer. So, lately, I've started wondering what other tricks I can learn.&lt;/p&gt;
&lt;p&gt;It has been on my mind for a while to try Smalltalk. Much like Lisp, Smalltalk is kind of revered as a hallowed and sacred language from which many good things we now enjoy have flowed. However I've seen some talk about &lt;a href="http://iolanguage.com/"&gt;Io&lt;/a&gt; lately and especially about the &lt;a href="http://tech.rufy.com/articles/2005/12/27/classes-are-just-a-prototype-pattern"&gt;advantages of prototype based OO&lt;/a&gt;. Today Dave Fayram showed me some Io code that was very intriguing. I think Smalltalk is going to have to wait!&lt;/p&gt;
&lt;p&gt;I've downloaded the Io binaries for MacOSX and an Io bundle for TextMate and over the weekend I hope to find enough time to learn some of the syntax and get a feel for the prototypy goodness.&lt;/p&gt;
&lt;p&gt;Wish me luck!&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002071.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>ActiveRecord, Ruby 1.8.4, and GCC4</title>
      <link>http://matt.blogs.it/entries/00002098.html</link>
      <pubDate>Mon, 16 Jan 2006 11:53:45 +0000</pubDate>
      <description>&lt;p&gt;Yesterday was something of an exercise in frustration when I attempted to update my PowerBook to the latest and greatest Ruby 1.8.4. I use DarwinPorts so you'd think it would be easy but it's wasn't because (a) I didn't realise you had to manually use&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo port sync
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to get the list of ports to update (so I didn't realise they even had 1.8.4) and (b) various ports wouldn't update properly or compile.&lt;/p&gt;

&lt;p&gt;In the end I ripped out my existing DarwinPorts installation, upgraded to the latest XCode 2.2, and began to rebuild. At the end I had 1.8.4 along with the relevant gems and extensions and it all seems fine.  Squib is running okay using it.&lt;/p&gt;

&lt;p&gt;However I notice that the ActiveRecord unit test suite is &lt;a href="http://rafb.net/paste/results/2P0lnM33.html"&gt;failing in some rather peculiar ways&lt;/a&gt;. Most of the errors relate to the non-existence of tables and rows which are there at the beginning of the test run (I verified that the executed DDL correctly created the tables). So it seems like something is dropping the tables and/or deleting rows as the tests execute. But if there was such a huge problem with Ruby/MySQL why is squib running okay?  (Yes I am backing up my data!)&lt;/p&gt;

&lt;p&gt;Where I do have cause for concern is the interplay between GCC v3.3 and GCC v4.0.1.  When I tried building Ruby 1.8.4 just after the release (to help with Rails testing) it didn't seem to work properly using GCC4. The wisdom at that time seemed to be that something in the GCC4 compiler wasn't right and was building ruby improperly. So naturally I used&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gcc_select 3.3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;before attempting to get the Ruby DarwinPort built. However when I came to testing the MySQL native extension I got a very unpleasant error:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;dyld: NSLinkModule() error
    dyld: Symbol not found: _sprintf$LDBLStub
    Referenced from: /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle
    Expected in: flat namespace
    Trace/BPT trap&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The general wisdom seemed to be that this was an error caused by compiling with GCC4 but I was compiling with GCC3! In desparation I tried using GCC4 and it worked!&lt;/p&gt;

&lt;p&gt;But now I have Ruby compiled with GCC3 and various native bits and pieces with GCC4 and it does not make me happy or comfortable that everything will be okay. Especially in the light of the unit test failures in ActiveRecord.&lt;/p&gt;

&lt;p&gt;I'd be interested in hearing from anyone else whose tried these tests. Maybe there is something amiss with them.&lt;/p&gt;

&lt;p&gt;Overall I'm left with the feeling that Ruby 1.8.3 and 1.8.4 could have been smoother. And was it beyond Apple just to fix the Ruby install that came with Tiger in the first place?&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002098.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>You're not seeing me from my best side</title>
      <link>http://matt.blogs.it/entries/00002116.html</link>
      <pubDate>Thu, 19 Jan 2006 13:55:27 +0000</pubDate>
      <description>&lt;p&gt;Ugh:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;
Irulan:~/Projects/squib matt$ action_profiler WelcomeController#index
WARNING: overridding NODE *
/opt/local/lib/ruby/site&lt;em&gt;ruby/1.8/rubygems/custom&lt;/em&gt;require.rb:27: [BUG] Bus Error
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.3.0]
Abort trap
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's not what I wanted to see. Yet ZenProfiler is working:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;Irulan:/opt/local/lib/ruby/gems/1.8/gems/ZenHacks-1.0.1 matt$ sh zenprofile-demo.sh 
zenspider profiler:
Iter = 5000, T = 0.70851300 sec, 0.00014170 sec / iter
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
100.00     0.61      0.61        1   610.00   610.00  Range#each
 90.16     1.16      0.55     5000     0.11     0.11  Factorial#factorial
 77.05     1.63      0.47     5000     0.09     0.09  Integer#downto
 16.39     1.73      0.10        1   100.00   100.00  dummy
 16.39     1.83      0.10    20000     0.00     0.00  Fixnum#*
  0.00     1.83      0.00        1     0.00     0.00  Fixnum#to_s
  0.00     1.83      0.00        1     0.00     0.00  ZenProfiler#instance
  0.00     1.83      0.00        2     0.00     0.00  Time#initialize
  0.00     1.83      0.00        1     0.00     0.00  String#to_i
  0.00     1.83      0.00        1     0.00     0.00  Object#initialize
  0.00     1.83      0.00        1     0.00     0.00  IO#write
  0.00     1.83      0.00        1     0.00     0.00  Time#-
  0.00     1.83      0.00        1     0.00     0.00  Module#method_added
  0.00     1.83      0.00        1     0.00     0.00  Float#/
  0.00     1.83      0.00        1     0.00     0.00  Array#shift
  0.00     1.83      0.00        2     0.00     0.00  Time#now
  0.00     1.83      0.00        1     0.00     0.00  Class#new
  0.00     1.83      0.00        1     0.00     0.00  Kernel.printf
  0.00     1.83      0.00        1     0.00   610.00  #toplevel
  0.00     1.83      0.00        1     0.00     0.00  Class#inherited&lt;/p&gt;

&lt;p&gt;real    0m1.631s
user    0m0.704s
sys     0m0.295s&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I did wonder about the witches brew that I ended up with when getting Ruby 1.8.4 via DarwinPorts.  Damn.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002116.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>RubyInside</title>
      <link>http://matt.blogs.it/entries/00002239.html</link>
      <pubDate>Tue, 30 May 2006 09:58:34 +0100</pubDate>
      <description>&lt;p&gt;&lt;a href="http://www.petercooper.co.uk/"&gt;Peter Cooper&lt;/a&gt; has created a stylish new aggregator blog &lt;a href="http://www.rubyinside.com/"&gt;RubyInside&lt;/a&gt; where he is highlighting interesting stuff going on with Ruby. I read quite a few Rubyist blogs but can't keep up with them all and appreciate a commentary from someone like Peter about what's worth knowing.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002239.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
    <item>
      <title>Why I love Ruby so much</title>
      <link>http://matt.blogs.it/entries/00002299.html</link>
      <pubDate>Mon, 17 Jul 2006 23:44:47 +0100</pubDate>
      <description>&lt;pre&gt;&lt;code&gt;module Enumerable
    # return a new array of tuples where each element of this array
    # is matched with each element of the other array
    def permute( other )
        self.inject( [] ) do |container,element|
            container | Array.new( other.size, element ).zip( other )
        end
    end

    # Return a map using a new Thread to compute each mapped value asynchronously
    def map_asynch( &amp;amp;block )
        self.map { |element| Thread.new { block.call( element ) } }.map { |thread| thread.value }
    end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I'm particularly pleased with how simple the asynchronous map turned out to be and the fact that it becomes available to any Enumerable is gravy.&lt;/p&gt;</description>
      <guid isPermaLink="true">http://matt.blogs.it/entries/00002299.html</guid>
      <ent:cloud ent:href="http://matt.blogs.it/topics/">
      </ent:cloud>
    </item>
  </channel>
</rss>