<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Ivan Porto Carrero</title>
	
	<link>http://flanders.co.nz</link>
	<description>thoughts.each { &amp;:propagandise }</description>
	<lastBuildDate>Sat, 03 Sep 2011 09:56:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/casualjim" /><feedburner:info uri="casualjim" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>casualjim</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Scalatra is a DSL in a string</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/Ec-FFHoyyEc/</link>
		<comments>http://flanders.co.nz/2011/09/03/scalatra-is-a-dsl-in-a-string/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 09:56:12 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/?p=392</guid>
		<description><![CDATA[I&#8217;ve heard it a couple of times as if that is a bad thing and yes Scalatra is a DSL-IN-A-STRING, but allow me to ellaborate: However a pattern match, for example as you all know is nothing more than an &#8230;<p class="read-more"><a href="http://flanders.co.nz/2011/09/03/scalatra-is-a-dsl-in-a-string/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<div>I&#8217;ve heard it a couple of times as if that is a bad thing and yes Scalatra is a DSL-IN-A-STRING, but allow me to ellaborate:</div>
<div>However a pattern match, for example</div>
<p><script src="https://gist.github.com/1190931.js?file=pf_example.scala"></script></p>
<div>as you all know is nothing more than an isDefinedAt and when that call returns true the data is passed to the partial function, the partial function is lifted and you get a result.</div>
<div>In scalatra we put an extra dsl over this particular behavior which builds up a registry of route matchers. Which are also just scala classes and then we essentially use .isDefinedAt on that route registry to determine which block of code to run and then apply the matching function.</div>
<div>What we do there is nothing different from what people do right before they figure out which bit to run. They do a string.split or run a regex and then pass it to that partial function.</div>
<div>So to me the dsl-in-a-string is a pretty short-sighted response because there is no immediate &#8220;case &#8230; =&gt;&#8221; in sight.</div>
<div>YES WE COPIED SINATRA&#8217;S DOCUMENTATION =&gt; at least we have pretty elaborate documentation, the alternative was no documentation. I don&#8217;t think I&#8217;m going to get a Pulitzer for being original in docs. If that was my aim I should have become a journalist of fiction writer.</div>
<div>The goal of docs is to provide information, ours do that now.</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=Ec-FFHoyyEc:0SUqtOpLoJY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=Ec-FFHoyyEc:0SUqtOpLoJY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=Ec-FFHoyyEc:0SUqtOpLoJY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=Ec-FFHoyyEc:0SUqtOpLoJY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=Ec-FFHoyyEc:0SUqtOpLoJY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=Ec-FFHoyyEc:0SUqtOpLoJY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=Ec-FFHoyyEc:0SUqtOpLoJY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/Ec-FFHoyyEc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2011/09/03/scalatra-is-a-dsl-in-a-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2011/09/03/scalatra-is-a-dsl-in-a-string/</feedburner:origLink></item>
		<item>
		<title>work for backchat</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/om9bbCit5Bg/</link>
		<comments>http://flanders.co.nz/2011/08/01/backchat-developers/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 19:57:20 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[backchat]]></category>
		<category><![CDATA[jobs]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/?p=385</guid>
		<description><![CDATA[Backchat.IO is hiring! BackChat.io is easiest to describe as grep for real-time data. We’re busy developing a platform that makes sense of the data you send it (in real-time). For the social web that means that you can start following &#8230;<p class="read-more"><a href="http://flanders.co.nz/2011/08/01/backchat-developers/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h1 id="backchat.ioishiring">Backchat.IO is hiring!</h1>
<p>BackChat.io is easiest to describe as <em>grep for real-time data</em>. We’re busy developing a platform that makes sense of the data you send it (in real-time).</p>
<p>For the social web that means that you can start following certain users on a network or define a search term and you get those in a unified activity streams format.</p>
<p>But for something more arcane, like say, log data, that means you can send it lines of text and have it extract out fields on which you can define filters. All of this happens in real-time and changes are reflected virtually immediately in open connections.</p>
<p>Our system is designed to allow for easy definition of data sources. Sources that currently feed into our system are <a href="http://twitter.com">Twitter</a>, <a href="http://facebook.com">Facebook</a>, <a href="http://linkedin.com">LinkedIn</a>, SMTP, RSS, ATOM, PubSubHubbub, and more. By next year we hope to provide dozens, if not 100’s, of API implementations.</p>
<p>In the longer term we hope to provide more intelligent stuff like real-time reporting by allowing you to define aggregates like SUM, enhance data with secondary information, and many more crazy ideas. We’re aiming to build our system exclusively on existing standards described in RFC’s or the activity streams spec. However not everything we do is described in standards and that’s where we’ll try to extend an existing standard.<br />
Our use cases are wide, ranging from niche collaboration or social media apps, to communication/PR/marketing agencies, to telecommunications… We operate at an abstraction on a much lower level than most similar services; so many tools you see and use on the web today can be built with only a few lines of code in your favourite language on our platform.</p>
<p>The entire system is built on dogfooding and practicing what we preach. So where it makes sense we rely on our own service, like with log processing. Our entire website is built using the API methods we expose to our customers. Our API integration language will be shared with our customers too.</p>
<h2 id="howdoyouguyswork">How do you guys work?</h2>
<p>We use a mix of technologies like <a href="http://www.scala-lang.org/">scala</a>, <a href="http://akka.iio">akka</a>, <a href="http://mongodb.org">mongodb</a>, <a href="http://lucene.apache.org">lucene</a>, <a href="http://www.zeromq.org/">zeromq</a>, <a href="http://dropbox.com">dropbox</a>, <a href="http://flowdock.com">flowdock</a>, <a href="http://skype.com">skype</a>, …. We apply agile principles to our development process, but this doesn’t mean we follow a doctrine that is being sold because some consultant wants to make some money. To us Agile development means: design for change. Which also means that the process we use is adapted to the people in the process and not vice versa. It’s about being productive and creating an environment where you want to work.<br />
At the moment, all of us work from home. We’re a team of 3, looking for a fourth team-member to start in September. We don’t care where or how you work, just that you deliver 40 hours worth of output, regular github pushes (so new code can be reviewed before it hits our integration branch) and, most importantly, passion!</p>
<h2 id="greatwhatareyouguyslookingfor">Great! What are you guys looking for?</h2>
<p>We’re looking for a passionate developer. This person ideally:</p>
<ul>
<li>knows about concurrent and distributed programming</li>
<li>is well-versed in Scala</li>
<li>can accept a team decision, and understands that communication is the most important part of development as a team.</li>
<li>is polyglot (the ability to work with C#, node.js/javascript, ruby, python and/or php)</li>
<li>preferably knows XMPP beyond using the smack library</li>
<li>has used mongodb</li>
<li>knows Lucene</li>
<li>regular expressions have little or no secrets for you</li>
<li>does not believe in sugar-coating things and voices reservations early</li>
<li>No! Try not. Do, or do not. There is no try. (Some of us hope you’re a Star Wars fan too)</li>
</ul>
<p>It’s a plus if you’ve done some of the following:</p>
<ul>
<li>BIG data</li>
<li>Language parsing and development</li>
<li>Natural language processing</li>
<li>Statistics</li>
<li>knows how to express himself in simple english and not academic language</li>
<li>Netty server development / Java NIO</li>
<li>Jetty customization</li>
<li>Understands the problems communication agencies and social-media developers face</li>
</ul>
<p>What we’re not looking for is someone who has little or no experience, community zealots and big framework lovers (I’m looking at you rails, lift, spring, …). We need doers!</p>
<p>You do not have to live in the UK to work with/for us. We are firm believers in smarter remote-working, and our cloud-based infrastructure is designed to allow us to work from where we want.</p>
<h2 id="open-source">Open-Source?</h2>
<p>We use a lot of open source, and we believe in being good citizens and contribute back where we can. Some of the projects we use: <a href="http://api.mongodb.org/scala/casbah/current/">casbah</a>, <a href="http://akka.io/">akka</a>, <a href="https://github.com/scalatra/scalatra">scalatra</a>, lift-mongodb-record, lift-json, codahale metrics, databinder dispatch, …<br />
So far most of our contributions were to scalatra and peripheral to akka. If we come up with stuff that we all agree on should really be in an open source project then we will actually take the necessary steps to make that happen.</p>
<p>Any open-source library we produce is licensed as MIT and uses as few dependencies as possible (be nice to people with complicated projects).</p>
<h2 id="whatsthevision">What’s the vision?</h2>
<p>To build the best damned developer platform for social-media and real-time data! Quickly!</p>
<p>Our service is primarily aimed at developers. We provide a metered, utility billing model. Depending on which bits and pieces of our infrastructure a developer uses we calculate a price per message for each incoming channel. At the end of the month they get a bill. This billing is updated in real-time so everybody knows exactly where they stand.<br />
For corporate customers we provide a behind-firewall-install license. This license fee may or may not include bespoke development or integration into their systems.</p>
<p>Our founding customer has been O2/Telefonica. They’re using our platform in cool ways, but we can’t talk about that just yet (ssshh).</p>
<h2 id="whoarethecompany">Who are the company?</h2>
<p>Adam Burmister is the CEO of the company and has previously worked as team lead for the bbc.com homepage. He has also done assorted javascript libraries and was nominated for a webby award for his work at xero.com. He’s a Kiwi, so be warned, he sounds funny.</p>
<p>Ivan Porto Carrero is the CTO and has previously almost published a book on IronRuby and has been an MVP for the last 2 years. Worked as an architect/consultant in the .NET sphere and met Adam while he was working as a senior development at xero.com It helps to know that Ivan is from Belgium, as an extremely low bullshit tolerance and it’s best to feed him at regular times with pre-approved snacks. Also, his english sounds funny.</p>
<p>Stefan De Boey was our very first helper and we haven’t managed to scare him off, he’s actually happy with his job, but won’t say so because he’s Belgian and compliments make people suspicious where he’s from (not to mention the thought of making a government).<br />
Stefan typically starts his day between 11am and 12:30 and finishes around 20:00.<br />
Also, his english sounds funny.</p>
<h2 id="okimsold.howdoiapply">Ok, I’m sold. How do I apply?</h2>
<p>Great! We’re looking forward to meeting you.</p>
<p>If you could, please start by sending us your LinkedIn profile and preferably some recent open source projects you worked on.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=om9bbCit5Bg:BSuVdhWYh9Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=om9bbCit5Bg:BSuVdhWYh9Q:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=om9bbCit5Bg:BSuVdhWYh9Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=om9bbCit5Bg:BSuVdhWYh9Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=om9bbCit5Bg:BSuVdhWYh9Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=om9bbCit5Bg:BSuVdhWYh9Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=om9bbCit5Bg:BSuVdhWYh9Q:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/om9bbCit5Bg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2011/08/01/backchat-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2011/08/01/backchat-developers/</feedburner:origLink></item>
		<item>
		<title>Radical language and platform shift</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/g8kJEv4X_Ag/</link>
		<comments>http://flanders.co.nz/2010/09/30/radical-language-and-platform-shift/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 01:42:12 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/?p=375</guid>
		<description><![CDATA[I realize it&#8217;s been a really long time since I put something on this blog. And for those of you expecting more (iron)ruby posts I&#8217;m going to have to dissapoint you. This is mostly a braindump of what I&#8217;ve been &#8230;<p class="read-more"><a href="http://flanders.co.nz/2010/09/30/radical-language-and-platform-shift/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I realize it&#8217;s been a really long time since I put something on this blog. And for those of you expecting more (iron)ruby posts I&#8217;m going to have to dissapoint you. This is mostly a braindump of what I&#8217;ve been working out the last months.</p>
<p>A few months ago Adam Burmister, who I met at  <a href="http://www.xero.com" target="_blank">Xero</a>, and I got incubated by <a href="http://o2.co.uk" target="_blank">O2</a> to do a project that allowed me to push the boundaries and it required me to look outside what I already knew.  I had to go look for a new way of approaching problems, it isn&#8217;t said that the problems couldn&#8217;t be solved with a language like C# or Ruby. The solution would have been pretty much sub-par. In this quest for the best way to approach that problem it turned out that <a href="http://scala-lang.org" target="_blank">Scala</a> was the language that hit a sweet spot for me.</p>
<p>We needed something that resembled Erlang; and while I did my best to really get into <a href="http://www.erlang.org/" target="_blank">Erlang</a> I never could (this could possibly be because of the eye bleeds because the language is just so friggin&#8217; ugly). So it turns out there is a design pattern called <a href="http://en.wikipedia.org/wiki/Active_object">ActiveObject</a> which is at the core the same as an erlang node (it&#8217;s not I know a node has many other properties).   We also needed to be able to process humongous volumes of data (Terrabytes worth) at this point Ruby is out of the picture. I&#8217;m sure I will upset many fanboys but face it ruby is slooooooooooooooow and advances slow, by the time you can properly program distributed systems in ruby the way I had in mind I&#8217;ll be a great grand dad and have a long and pointy grey beard. .Net is lacking libraries and the ruby libraries often are good enough, but <a href="http://www.startuplessonslearned.com/2010/09/good-enough-never-is-or-is-it.html">good enough never is</a>. And since I got tired of patching every single bloody library I touched I vowed to steer clear of ruby. We still use ruby but we use it for what it&#8217;s great at: system automation scripts and sometimes quick prototyping.</p>
<p>We basically needed hadoop, hadoop is a java project (I&#8217;ll return to why not java and C# a little bit later). So once I entered the Java domain a new world opened up for me (old for most other people I realise that). Java has what can only be described as a SHITLOAD of great quality libraries. It&#8217;s just a pithy that Java like C# suffers from what I call programmer masturbation. I&#8217;ve certainly been guilty of that and during my time at Xero they suffered the grunt of it (sorry guys). So lets return to those problems.</p>
<p>You read a book, nicknamed Gang of Four which then becomes &#8220;the bible&#8221;, it has this thing called design patterns and they need to be applied where ever you can.  I&#8217;ll let you in on a little secret: They do next to nothing to make your code more maintainable (quite the opposite in fact) and definitely don&#8217;t make it more understandable unless the next guy also knows &#8220;the bible&#8221;. If he doesn&#8217;t he&#8217;s a fucking retard, everybody knows those design patterns.  The thing that doesn&#8217;t jive is: how is writing more code making your code more maintainable as you have to maintain more code (did I mention more code in this sentence?)The one thing ubiquitous use of design patterns from &#8220;the bible&#8221; does do is give you some job security. Pythonista&#8217;s <a href="http://us.pycon.org/2009/conference/schedule/event/51/" target="_blank">shun design patterns</a> and if not you should apparently.  Having programmed in many languages I tend to agree with the conclusion that having to use crutches like design patterns (I should really make this into a factory or manager of some sort) actually means your language is flawed.</p>
<p>I still need to meet the person that can actually prove to me that your code is more maintainable than code that follows the following simple rules:<br />
* Don&#8217;t Repeat Yourself<br />
* Don&#8217;t write what you don&#8217;t need right now<br />
* write a couple of tests<br />
*  Generalize as if there was no tomorrow.<br />
* Write as little and as simple code as humanly possible (this kills double dispatch and the visitor pattern)<br />
* Remember that you (as do I) have a bird brain, you will have forgotten what you did 2 weeks ago, let alone 6 months from now, so it needs to be understandable by the biggest idiot on the planet, namely the author of the code (in my case me).</p>
<p>I don&#8217;t want to write a post on why I left .NET but it&#8217;s inevitable to mention it. I used to think .NET was the greatest thing since sliced bread and I still think it&#8217;s a really cool piece of technology. However there is only a small minority of .NET programmers I actually get along with so some of the remarks I&#8217;m going to make are not directed at those people. I have felt unhappy about the way .NET was evolving around the same time microsoft introduced the class designer tool. Don&#8217;t even get me started on people advocating UML because that belongs in the same classification, a vertical one. Once Oslo got introduced or is it M I wanted to get out as quickly as possible. I happen to like writing code, if I wanted to drag and drop boxes and connect them with fancy lines I would have gone for a designer career.</p>
<p>.NET also suffers from another problem, whatever the all-knowing company produces is innovation created by them (never mind if some of those things have been around for more than 20 years). And most developers on .NET suffer from that phenomenon that can only be called Stockholm Syndrome. It is mind boggling to me that you want to use tools you know suck, they don&#8217;t make you do a better job faster in fact once you move past the hello world example they fall apart really quickly, not to mention having to debug a problem and submitting a bug (which will then be bounced back as by design).</p>
<p>Enough slamming on .NET let&#8217;s return to Java. Stephen Colebourne goes the next <a href="http://www.jroller.com/scolebourne/entry/the_next_big_jvm_language1">big JVM language is Java</a>, but this time done right??? One of his arguments is 10.000.000 programmers world wide can&#8217;t be wrong. I happen to think that 9,9 million of those programmers mostly likes to get paid, it has little or nothing to do with the fact that it&#8217;s a great or not great language.  It&#8217;s certainly easier than C and definitely C++, ask <a href="http://artlung.com/smorgasborg/Invention_of_Cplusplus.shtml">Bjarne</a>. Most of the java code I read makes me sick to my stomach the boilerplate needed   (the next example is in C# the java one would most def be longer:  <a href="http://code.google.com/p/fizzbuzz/source/browse/#svn/trunk/trunk">fizzbuzz enterprise edition</a>) is atrocious. Java date arithmetic (I know about joda-time) is an absolute nightmare. The fact that you need to write at least 6 (not counting import statements and the main definition) lines of code to be able to read input from the keyboard and  print it out just amplify my point.</p>
<p>So no ruby, no .NET no java what&#8217;s next. There is this cool thing people keep talking about: node.js it&#8217;s crazy fast (if you compare it with languages like ruby and run the correct hello world benchmarks). however the libraries are subpar at best and generally feel like they&#8217;ve been written by very young programmers (with the odd exception of course) who have little or no clue about what&#8217;s going on outside of their blog or what their &#8220;gods&#8221; are saying. I&#8217;m sure it has a place and I&#8217;ve given it more than an honest chance but at the end of the day it would have required a big investment to write all kinds of things that just aren&#8217;t there (yet).</p>
<p>But you know it&#8217;s event driven and asynchronous and that&#8217;s why it&#8217;s fast and only non-blocking IO is the right way to go because using blocking IO is slow. Ok now you got me, you&#8217;re right but also wrong. It depends on your use case and how you work with blocking IO. We&#8217;ve come to go by this simple rule: if you need many short-lived connections (like in say HTTP) then non blocking io is indeed better, however long lasting connections may benefit from blocking IO, because the throughput is a lot higher (although it&#8217;s not quite as black and white as that).</p>
<p>So back to we want erlang but without the bleeding eyes: enter scala + <a href="http://www.akkasource.org" target="_blank">akka</a>. Boy was I happy camper when I started reading their docs. An open-source project, written in this language called scala that solves the same problems as Erlang only this language is beautiful, yes I&#8217;ll repeat that beauuuutifuuuulll. Scala gives me what ruby was never able to give me, a fast, pretty language that supports multiple paradigms with a strong nudge towards functional programming. it can be run on .NET as well as on the JVM meaning we didn&#8217;t have to forego the much needed libraries. And the libraries that are available are in a totally different league than those dinky toys node.js and ruby have to offer. It&#8217;s like comparing the majors to the minors I guess.</p>
<p>The downside is that we do need core i7 machines to get any decent compile times out of the thing and IDE support (while it gets better steadily) is still behind on other languages. If you&#8217;re wondering about LOC count vs ruby I think they&#8217;re about even once you know what you&#8217;re doing. Scala is not an easy language but it&#8217;s heaps of fun to work with and I&#8217;m glad I get to use it the next couple of years.  if you&#8217;re looking for an acceptable alternative on .NET that is supported by the all-knowing hugely innovative company you should look at F#.</p>
<p>As an aside the next time somebody mentions enterprise ready as baked in to me; they will get a rope, chair and nail it&#8217;s quicker and less painful.</p>
<p>There the rant is over, I feel a lot better now. I already know I&#8217;m an idiot so tell me something new.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=g8kJEv4X_Ag:PTLAIpF8fzU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=g8kJEv4X_Ag:PTLAIpF8fzU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=g8kJEv4X_Ag:PTLAIpF8fzU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=g8kJEv4X_Ag:PTLAIpF8fzU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=g8kJEv4X_Ag:PTLAIpF8fzU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=g8kJEv4X_Ag:PTLAIpF8fzU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=g8kJEv4X_Ag:PTLAIpF8fzU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/g8kJEv4X_Ag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2010/09/30/radical-language-and-platform-shift/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2010/09/30/radical-language-and-platform-shift/</feedburner:origLink></item>
		<item>
		<title>Video of FOSDEM IronRuby presentation</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/_pwPVSmgD6U/</link>
		<comments>http://flanders.co.nz/2010/03/12/video-of-fosdem-ironruby-presentation/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 12:24:55 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/?p=371</guid>
		<description><![CDATA[At FOSDEM 2010 I got the chance to talk in the mono dev room about ironruby. In this talk I extended the banshee application to work with IronRuby based plugins. So without further ado here&#8217;s the link: IronRuby: The .NET &#8230;<p class="read-more"><a href="http://flanders.co.nz/2010/03/12/video-of-fosdem-ironruby-presentation/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>At FOSDEM 2010 I got the chance to talk in the mono dev room about ironruby.</p>
<p>In this talk I extended the banshee application to work with IronRuby based plugins.</p>
<p>So without further ado here&#8217;s the link:<br />
<a href='http://andrius.six.lt/~bentkus/videos/mono-fosdem2010/mono-2010-02-07-1000-1100-(Ivan%20Porto%20Carrero)-(The%20Ruby%20and%20the%20.NET%20lovechild).mp4' >IronRuby: The .NET and Ruby love child</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=_pwPVSmgD6U:mpS6_7iYGOI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=_pwPVSmgD6U:mpS6_7iYGOI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=_pwPVSmgD6U:mpS6_7iYGOI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=_pwPVSmgD6U:mpS6_7iYGOI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=_pwPVSmgD6U:mpS6_7iYGOI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=_pwPVSmgD6U:mpS6_7iYGOI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=_pwPVSmgD6U:mpS6_7iYGOI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/_pwPVSmgD6U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2010/03/12/video-of-fosdem-ironruby-presentation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2010/03/12/video-of-fosdem-ironruby-presentation/</feedburner:origLink></item>
		<item>
		<title>Adding a console to your IronRuby application</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/J0hIHcXO3Qk/</link>
		<comments>http://flanders.co.nz/2009/12/01/adding-a-console-to-your-ironruby-application/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 10:00:44 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[IronRuby]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/2009/12/01/adding-a-console-to-your-ironruby-application/</guid>
		<description><![CDATA[When building an application it might be very handy to have a REPL console that knows about the libraries of your application, but you don’t necessarily want to start your application to interact with it.&#160; In Rails they have a &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/12/01/adding-a-console-to-your-ironruby-application/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>When building an application it might be very handy to have a REPL console that knows about the libraries of your application, but you don’t necessarily want to start your application to interact with it.&#160; In Rails they have a script/console command.&#160; Here’s how you create one that knows about ironruby. The example I’m going to use is taken from an IronRubyMVC application.</p>
<p>I started out by creating a folder script.</p>
<p>Then I created a file called console (on a unix system I would chmod +x this file). I also like to have completion in my console so I’ve added the irb/completion library.&#160; Then I’ll require the routes.rb file so that the libraries of my application get loaded.</p>
<pre class="ruby" name="code">#!/usr/bin/env ir
# File: script/console
irb = ENV['OS'] =~ /^Windows/iu ? 'CALL iirb.bat' : 'iirb'

libs =  &quot; -r irb/completion&quot;
# Perhaps use a console_lib to store any extra methods I may want available in the console
libs &lt;&lt;  &quot; -r #{File.dirname(__FILE__) + '/../routes'}&quot;
puts &quot;Loading Poll chat&quot;
exec &quot;#{irb} #{libs} --simple-prompt&quot;</pre>
<p>The 3rd line has CALL iirb.bat as a command on a windows system. The CALL command is needed for the next step because we’re going to execute a batch file from another batch file on windows. Otherwise it wouldn’t work for me.&#160;&#160; CALL is very similar to exec in ruby and gives control to another executable until its task is done.</p>
<p>For windows to be able to use script/console (script\console) instead of ir script/console you also need to create a batch file called console.bat in the script folder. </p>
<pre class="batch" name="code">@ECHO OFF
IF NOT &quot;%~f0&quot; == &quot;~f0&quot; GOTO :WinNT
@&quot;ir.exe&quot; &quot;script/console&quot; %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
:WinNT
@&quot;ir.exe&quot; &quot;%~dpn0&quot; %*</pre>
<p>This is all there is to it to get rails like scripting abilities.</p>
<p>IronRuby has another really cool feature built into IronRuby is the ability to provide REPL’s for your application at run-time. All you need to do is use Repl.new and give it an output and input stream.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=J0hIHcXO3Qk:q-Vjg2YEuP4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=J0hIHcXO3Qk:q-Vjg2YEuP4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=J0hIHcXO3Qk:q-Vjg2YEuP4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=J0hIHcXO3Qk:q-Vjg2YEuP4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=J0hIHcXO3Qk:q-Vjg2YEuP4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=J0hIHcXO3Qk:q-Vjg2YEuP4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=J0hIHcXO3Qk:q-Vjg2YEuP4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/J0hIHcXO3Qk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/12/01/adding-a-console-to-your-ironruby-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/12/01/adding-a-console-to-your-ironruby-application/</feedburner:origLink></item>
		<item>
		<title>A good url regular expression? (repost)</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/pD0LEvxDzFY/</link>
		<comments>http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 11:02:37 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[url regex]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/?p=366</guid>
		<description><![CDATA[I&#8217;m moving this post from http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx I started out blogging on geeks with blogs but I can&#8217;t allow comments there anymore or I get too much spam, so I&#8217;m moving the post from there to this place.  Various people have &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m moving this post from <a href="http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx">http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx</a></p>
<p>I started out blogging on geeks with blogs but I can&#8217;t allow comments there anymore or I get too much spam, so I&#8217;m moving the post from there to this place.  Various people have contributed through the comments in the other blog post. So here I have better control over the spam and can open the comments again.</p>
<p>I have been looking for a good first layer of validating an url to see if it is valid.</p>
<p>For checking the format of the url it seems to me to be the most logical approach to use regular expressions. Up until now I always discarded them as being to “geeky”, meaning i don&#8217;t consider it my life&#8217;s biggest goal to be typing (/?[]\w) all day long (so why did i become a programmer, aaaah yes to make life easier for other people)</p>
<p>Anyway.. to find a good regular expression to that validates urls not url domains. One that doesn&#8217;t allow spaces in the domainname and where the domain can be suffixed with the port number.  Also I need support for the ~/ paths</p>
<p>This is what I came up with.. if somebody as a better idea&#8230; or finds a mistake please let me know.. Always happy to learn something new.</p>
<p><span style="text-decoration: line-through;">^(((ht|f)tps?\:\/\/)|~/|/)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5})(:[\d]{1,5})?)/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&amp;\w+=\w+)*)?</span></p>
<p>I was a bit quickly in using this regex. Simeon pilgrim indicated that the ftp urls won&#8217;t validate when you add a username and a password.</p>
<p>I don&#8217;t really need to validate ftp so I should have removed the ftp protocol from the list of choices.  I need this just to validate urls for weblinks and the link element in an rss feed.  When I need them for ftp I will post the ftp version.. but for now I don&#8217;t have time to spend on elaborating the regex.</p>
<p>Anyway here is the right one : <span style="text-decoration: line-through;">^(http(s?)\:\/\/|~/|/)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&amp;\w+=\w+)*)?</span></p>
<p>A full url validation would include resolving names through dns or making a webrequest to the provided url to see if we get a 200 response. The only way to be sure is to test if it is there in my opinion.</p>
<p>Thanks Simeon.</p>
<p>And for those who really want the ftp validation : <span style="text-decoration: line-through;">^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&amp;\w+=\w+)*)?</span></p>
<p>I am not sure about numbers in the username but I believe you can have a username of numbers alone.</p>
<p>Comments don&#8217;t seem to work on this blog engine.. so just send me a mail through the contact form. thanks</p>
<p>Two days later &#8230;</p>
<p>I discovered there is still a problem with my regular expressions&#8230; folders don&#8217;t get parsed.</p>
<p>I&#8217;ve solved the path issue, so now it should be finding all url&#8217;s</p>
<p>Expression:</p>
<p><span style="text-decoration: line-through;">^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&amp;\w+=\w+)*)?</span></p>
<p>Should parse the url below</p>
<p><span style="text-decoration: underline;"><span style="color: #0000ff;"><a href="http://hh-1hallo.msn.blabla.com:80800/test/test/test.aspx?dd=dd&amp;id=dki">http://hh-1hallo.msn.blabla.com:80800/test/test/test.aspx?dd=dd&amp;id=dki</a></span></span></p>
<p>But not :</p>
<p><a href="http://hh-1hallo">http://hh-1hallo</a>. msn.blablabla.com:80800/test/test.aspx?dd=dd&amp;id=dki</p>
<p style="font-weight: bold;">Update 29/11/2008:</p>
<p>Joe posted what seems to be a great regular expression in the comments</p>
<p>he tested it with the following urls:</p>
<p>http://www.google.com/search?q=good+url+regex&#038;rls=com.microsoft:*&#038;ie=UTF-8&#038;oe=UTF-8&#038;startIndex=&#038;startPage=1</p>
<p>ftp://joe:password@ftp.filetransferprotocal.com</p>
<p>google.ru</p>
<p>https://some-url.com?query=&#038;name=joe?filter=*.*#some_anchor</p>
<p>Expression:</p>
<p style="font-weight: bold;"><span style="font-weight: normal; text-decoration: line-through;">^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&amp;(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$</span></p>
<p style="font-weight: bold;">Update 8/11/2009:</p>
<p style="font-weight: bold;"><span style="font-weight: normal;">Expression</span>:</p>
<p style="font-weight: bold;">^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&amp;(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$</p>
<p>There is a wave for this regex:</p>
<p><a href="https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252BsFbGJUukA">https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252BsFbGJUukA</a></p>
<p>Update 29/09/2010</p>
<p>So people if you don&#8217;t like it don&#8217;t use it.<br />
Now this regex is troubled it has a bunch of issues but it works most of the time.  If you want a more liberal regular expression to just capture urls from text, there is a really good one on the blog of John Gruber.<br />
<a href="http://daringfireball.net/2010/07/improved_regex_for_matching_urls">Improved regex for matching urls @ daring fireball</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=pD0LEvxDzFY:x_OULEIcN0A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=pD0LEvxDzFY:x_OULEIcN0A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=pD0LEvxDzFY:x_OULEIcN0A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=pD0LEvxDzFY:x_OULEIcN0A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=pD0LEvxDzFY:x_OULEIcN0A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=pD0LEvxDzFY:x_OULEIcN0A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=pD0LEvxDzFY:x_OULEIcN0A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/pD0LEvxDzFY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/</feedburner:origLink></item>
		<item>
		<title>Creating launcher scripts for IronRuby</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/1Hei_XkM_WM/</link>
		<comments>http://flanders.co.nz/2009/10/26/creating-launcher-scripts-for-ironruby/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 13:16:48 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[IronRuby]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/2009/10/26/creating-launcher-scripts-for-ironruby/</guid>
		<description><![CDATA[It’s been a while since I blogged, I’ve been terribly busy going through some changes and prepping the book. Anyway lately a lot of blog posts have been written on how to ironruby with cucumber to test your .NET code. &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/10/26/creating-launcher-scripts-for-ironruby/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>It’s been a while since I blogged, I’ve been terribly busy going through some changes and prepping the book.</p>
<p>Anyway lately a lot of blog posts have been written on how to ironruby with cucumber to test your .NET code. While I think it’s great people are using ironruby and cucumber, the guide you can find on aslak’s github wiki isn’t the most ideal solution as it will&#160; only work for windows and it requires MRI to be installed on your system.&#160; So I thought I’d write up how I’ve been creating launchers that work both on windows .NET and mono systems.</p>
<p>Another problem the approach of setting the GEM_PATH to the MRI gem location is that if your gem requires a C-extension (which could easily be a C# extension in IronRuby) ruby will get confused about which one it’s going to need.</p>
<p>I’m going to use cucumber as an example but this counts for most ruby libraries. I’ve been using this for a few months already so it really doesn’t matter which version of IronRuby you’ve got installed. I’ve compiled a fresh version from github and deployed that to C:\ironruby on windows and added C:\ironruby\bin to my PATH environment variable. I installed my ironruby version on my *nix boxes in /usr/local/ironruby and added /usr/local/ironruby/bin, /usr/local/ironruby/silverlight/bin and /usr/local/ironruby/silverlight/scripts to my PATH environment variable.</p>
<h5>1. install the gem: igem install rspec cucumber &#8211;no-rdoc &#8211;no-ri</h5>
<p>this will install the rspec and cucumber gems with their dependencies. And the gems process will actually install the launcher scripts in C:\ironruby\lib\ironruby\gems\1.8\bin and we’re going to use those scripts to create our launcher script</p>
<h5>2. Get the launcher scripts into the bin dir</h5>
<p>On windows you can now go:</p>
<pre>copy C:\ironruby\lib\ironruby\gems\1.8\bin\cucumber C:\ironruby\bin\icucumber
copy C:\ironruby\lib\ironruby\gems\1.8\bin\cucumber.bat C:\ironruby\bin\icucumber.bat</pre>
<p>NTFS supports symlinks so you could also use the junction tool from the sysinternals toolkit to create those instead of copying the files. <a title="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx" href="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx">http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx</a></p>
<p>On *nix based systems there is one more step to go through.</p>
<pre><strike>cp /usr/local/ironruby/lib/IronRuby/gems/1.8/bin/cucumber /usr/local/ironruby/bin/
mv /usr/local/ironruby/bin/cucumber /usr/local/ironruby/bin/icucumber</span></strike>
cp /usr/local/ironruby/lib/IronRuby/gems/1.8/bin/cucumber /usr/local/ironruby/bin/icucumber
chmod +x /usr/local/ironruby/bin/icucumber</pre>
<p>And this is the easier way to properly use installed gems from the ironruby distribution, it will also make it a lot easier to upgrade your gems in 2 different ruby installations at different times etc.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=1Hei_XkM_WM:v_QlpG6HXrA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=1Hei_XkM_WM:v_QlpG6HXrA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=1Hei_XkM_WM:v_QlpG6HXrA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=1Hei_XkM_WM:v_QlpG6HXrA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=1Hei_XkM_WM:v_QlpG6HXrA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=1Hei_XkM_WM:v_QlpG6HXrA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=1Hei_XkM_WM:v_QlpG6HXrA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/1Hei_XkM_WM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/10/26/creating-launcher-scripts-for-ironruby/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/10/26/creating-launcher-scripts-for-ironruby/</feedburner:origLink></item>
		<item>
		<title>A rant on a talk falling to pieces</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/QGM_KuPZbLg/</link>
		<comments>http://flanders.co.nz/2009/07/02/a-rant-on-a-talk-falling-to-pieces/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 13:45:21 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[caricature]]></category>
		<category><![CDATA[IronRuby]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[IronRuby MVC]]></category>
		<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/2009/07/02/a-rant-on-a-talk-falling-to-pieces/</guid>
		<description><![CDATA[Earlier this week I had the pleasure of doing a talk for the Belgian .NET user group.&#160; During this talk I ran in to all kinds of problems. I&#8217;ve done presentations where I was royally underprepared and to avoid that &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/07/02/a-rant-on-a-talk-falling-to-pieces/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Earlier this week I had the pleasure of doing a talk for the Belgian .NET user group.&#160; During this talk I ran in to all kinds of problems. I&#8217;ve done presentations where I was royally underprepared and to avoid that this time I actually started prepping for this talk on time. I was done on time, was prepared had 5 backups of my presentation and samples. What did I learn from this, if you&#8217;re prepared other things will go wrong.    <br />I&#8217;ll share the story of stuff that can go wrong. </p>
<p>Before starting the rant I have some links to share.</p>
<ul>
<li><a href="http://www.slideshare.net/casualjim/ruby-loves-dot-net" target="_blank">Slides</a> </li>
<li>IronRubyMvc sample – <a href="http://irtodo.koolkraft.net/" target="_blank">live demo</a> – <a href="http://github.com/casualjim/ironrubymvc-sample/tree/master" target="_blank">source</a> </li>
<li>Silverlight sample – <a href="http://samples.koolkraft.net/picture_view/" target="_blank">live demo</a> – <a href="http://samples.koolkraft.net/picture_view.zip" target="_blank">source</a> </li>
<li>IronRubyMVC specs – <a href="http://github.com/casualjim/ironrubymvc/tree" target="_blank">source</a> </li>
<li>Sinatra – <a href="http://samples.koolkraft.net/sinatra.zip" target="_blank">source</a></li>
<li>Metaprogramming &#8211; <a href="http://samples.koolkraft.net/metaprogramming.zip" target="_blank">source</a>&#160;</li>
</ul>
<p>I have a device that I call internet on a stick, which is a vodafone usb 3G modem that I plug in to my system and it gets me on the internet (mistake 1). Since I assumed that that thing would continue to work I made most of my demos internet enabled (mistake 2). For example I have a demo where I go download pics from flickr and then show them with some animations with silverlight.    <br />Before my presentation I changed the fonts, opened all the files I was going to talk about ran all the demos again to make sure they would work and everything went fine.     <br />I unplug the USB device and go into the room to hook up the projector etc. The presentation starts and for the first hour everything went really well (from my perspective at least don&#8217;t know about the people attending).     <br />We have a break and I plug the USB device in, at this point the vodafone program hangs (first time ever I swear). What&#8217;s more I can&#8217;t make it go away at all so I reboot my pc (this is still during the break). </p>
<p>Now I&#8217;m getting a little desperate because it still doesn&#8217;t work. With rebooting I also lost all my carefully opened files earlier (I&#8217;m showing code in about 3 different environments and 2 different OS&#8217;es).    <br />So during the presentation I apologise and try to reboot once more while taking questions from the audience and hoping somebody will try to start a discussion with me. After rebooting I got a message saying my date was set to 2001 which I thought was peculiar but clicked it away.&#160; I boot vmware fusion with windows 7 (this took fairly&#160; long and is a little bit funky as the screen resolution changes a lot during this process).     <br />Ok so far so good, by now I&#8217;ve already skipped the silverlight demo promising that it will be available as a download on my blog and will be moving on to the ironrubymvc sample. To prove I do actually use visual studio at times I wanted to open my demo project in visual studio. I open visual studio only for it to tell me that my trial has expired and I can either upgrade or close the application. Oooooookay this is completely weird because i get my software through my msdn subscription and I had been using it earlier that day. </p>
<p>Moral of the story: Either go vastly underprepared and wing it. Or don&#8217;t rely on the internet and always take at least 2 laptops that have identical configurations but I&#8217;m pretty sure those would or explode in my face or something will fall from the ceiling, building collapses or other mishaps. </p>
<p>Instead of having one demo go bad on me now I&#8217;m probably facing a reinstall of my mac because it lost a bunch of settings, for which I&#8217;m holding the vodafone responsible. At this moment I&#8217;m fairly certain that I should go less prepared and just wing it just out of fear for bigger disasters, people may die. </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c3bf1872-2d44-4a67-91a3-8b41f485f175" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/IronRuby" rel="tag">IronRuby</a>,<a href="http://technorati.com/tags/IronRuby+MVC" rel="tag">IronRuby MVC</a>,<a href="http://technorati.com/tags/caricature" rel="tag">caricature</a>,<a href="http://technorati.com/tags/Presentation" rel="tag">Presentation</a></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=QGM_KuPZbLg:TRoK2n47cfs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=QGM_KuPZbLg:TRoK2n47cfs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=QGM_KuPZbLg:TRoK2n47cfs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=QGM_KuPZbLg:TRoK2n47cfs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=QGM_KuPZbLg:TRoK2n47cfs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=QGM_KuPZbLg:TRoK2n47cfs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=QGM_KuPZbLg:TRoK2n47cfs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/QGM_KuPZbLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/07/02/a-rant-on-a-talk-falling-to-pieces/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/07/02/a-rant-on-a-talk-falling-to-pieces/</feedburner:origLink></item>
		<item>
		<title>Very simple IronRuby MVC sample application</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/TZyBa2mkibY/</link>
		<comments>http://flanders.co.nz/2009/06/09/very-simple-ironruby-mvc-sample-application/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 22:45:03 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[IronRuby]]></category>
		<category><![CDATA[IronRuby MVC]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/2009/06/09/very-simple-ironruby-mvc-sample-application/</guid>
		<description><![CDATA[Over the weekend I wrote a very simple task list application with IronRuby MVC and LightSpeed as an OR/M.&#160; And I’ve just put a demo live. This demo is running on a windows 2008 vps with IIS 7 as webserver. &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/06/09/very-simple-ironruby-mvc-sample-application/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Over the weekend I wrote a very simple task list application with IronRuby MVC and LightSpeed as an OR/M.&#160; And I’ve just put a demo live. This demo is running on a windows 2008 vps with IIS 7 as webserver. The source of this sample is also available.</p>
<p> <span id="more-359"></span>
<p>At this moment I’m working on the <a href="http://github.com/jschementi/ironrubymvc/" target="_blank">Ironruby mvc</a> sample for my book. And while I was playing around to get some samples together I tried building the simplest application possible that has some degree relations in the db and does some crud.&#160; And I came up with the original idea of creating a task list application.</p>
<p>As an OR/M I choose to use <a href="http://www.mindscape.co.nz/products/LightSpeed/" target="_blank">LightSpeed</a> and it runs on a sqlite database so it should be immediately usable after checking out.&#160; There is one caveat though. If you’re using a 32-bit OS you’ll need to replace the sqlite dll that is included in the dependencies tree with a 32-bit version of the dll and rebuild the solution.</p>
<p>The links:</p>
<p>Demo:    <br /><a href="http://irtodo.koolkraft.net/">http://irtodo.koolkraft.net/</a></p>
<p>Source of sample:   <br /><a href="http://github.com/casualjim/ironrubymvc-sample">http://github.com/casualjim/ironrubymvc-sample</a></p>
<p>IronRubyMVC source:</p>
<p><a href="http://github.com/jschementi/ironrubymvc">http://github.com/jschementi/ironrubymvc</a></p>
<p>LightSpeed:   <br /><a href="http://www.mindscape.co.nz/products/LightSpeed/">http://www.mindscape.co.nz/products/LightSpeed/</a></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4d3a8ee4-af1e-4a71-8952-a2568042a958" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/IronRuby+MVC" rel="tag">IronRuby MVC</a>,<a href="http://technorati.com/tags/IronRuby" rel="tag">IronRuby</a>,<a href="http://technorati.com/tags/ASP.NET+MVC" rel="tag">ASP.NET MVC</a></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=TZyBa2mkibY:SA9-6_6OJnw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=TZyBa2mkibY:SA9-6_6OJnw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=TZyBa2mkibY:SA9-6_6OJnw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=TZyBa2mkibY:SA9-6_6OJnw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=TZyBa2mkibY:SA9-6_6OJnw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=TZyBa2mkibY:SA9-6_6OJnw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=TZyBa2mkibY:SA9-6_6OJnw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/TZyBa2mkibY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/06/09/very-simple-ironruby-mvc-sample-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/06/09/very-simple-ironruby-mvc-sample-application/</feedburner:origLink></item>
		<item>
		<title>Getting started with Caricature and IronRuby</title>
		<link>http://feedproxy.google.com/~r/casualjim/~3/ZM9J0wZbdmc/</link>
		<comments>http://flanders.co.nz/2009/05/21/getting-started-with-caricature-and-ironruby/#comments</comments>
		<pubDate>Thu, 21 May 2009 13:52:17 +0000</pubDate>
		<dc:creator>Ivan Porto Carrero</dc:creator>
				<category><![CDATA[caricature]]></category>
		<category><![CDATA[IronRuby]]></category>
		<category><![CDATA[Mocking]]></category>

		<guid isPermaLink="false">http://flanders.co.nz/2009/05/21/getting-started-with-caricature-and-ironruby/</guid>
		<description><![CDATA[IronRuby 0.5 was released yesterday. You can download it on codeplex. This post will explain how you setup your ironruby environment to use it for testing existing CLR based assemblies.&#160; We’ll touch installing gems using rake and most importantly writing &#8230;<p class="read-more"><a href="http://flanders.co.nz/2009/05/21/getting-started-with-caricature-and-ironruby/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>IronRuby 0.5 was released yesterday. You can download it on <a href="http://ironruby.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25902#DownloadId=68919" target="_blank">codeplex</a>. This post will explain how you setup your ironruby environment to use it for testing existing CLR based assemblies.&#160; We’ll touch installing gems using rake and most importantly writing a test for a CLR based class where we’ll mock out the dependencies.</p>
<p> <span id="more-351"></span>
<p>The first thing you need to do is download <a href="http://ironruby.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25902#DownloadId=68919" target="_blank">IronRuby</a>. After downloading you can extract it to a location on your hard drive. I extracted mine to C:\ironruby</p>
<p>Now we need to add the path to ir.exe to our PATH variable so we can use it from the command-line. And that is all there is to it to install ironruby on your machine. Now we need to get the necessary gems onto our system. We’ll need bacon and caricature.</p>
<p>Open a console and type the following:</p>
<p>igem list will show you a list of the gems you have installed on your system.</p>
<p>igem install will fetch and install a gem on your system. To install the gems we’re going to need we need to execute the command</p>
<p>igem install bacon caricature</p>
<p>That will result in the following output:</p>
<pre>

+ C:\tools
» cmd
Microsoft Windows [Version 6.1.7100]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\tools&gt;where ir
C:\ironruby\bin\ir.exe

C:\tools&gt;exit
+ C:\tools
» igem list

*** LOCAL GEMS ***

+ C:\tools
» igem install bacon caricature
Successfully installed bacon-1.1.0
Successfully installed caricature-0.6.0
3 gems installed
Installing ri documentation for bacon-1.1.0...
Installing ri documentation for caricature-0.6.0...
Installing RDoc documentation for bacon-1.1.0...
Installing RDoc documentation for caricature-0.6.0...
</pre>
<p>If you would try to execute ibacon at this point that would work. We’ll need to create 2 small files to get ibacon to work.&#160; In the bin directory of ironruby I created 2 files one called ibacon and the other one is ibacon.bat </p>
<p>ibacon</p>
<pre class="ruby" name="code">

#!C:/ironruby/bin/ir.exe
#
# This file was generated by RubyGems.
#
# The application 'bacon' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = &quot;&gt;= 0&quot;

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'bacon', version
load 'bacon'
</pre>
<p>ibacon.bat</p>
<pre name="code">

@ECHO OFF

@&quot;ir.exe&quot; &quot;%~dpn0&quot; %*
</pre>
<p>At this point you’re ready to start writing specs with bacon and caricature. Let’s look at an example I wrote for the controller factory for ironruby mvc.</p>
<p>We’re going to test the following C# code.</p>
<pre class="csharp" name="code">

public interface IWeapon{
    int Attack(IWarrior warrior);
    int Damage();
}

public interface IWarrior
{
    int Id { get; }
    string Name { get; set; }
    bool IsKilledBy(IWeapon weapon);
    int Attack(IWarrior target, IWeapon weapon);
    int SurviveAttackWith(IWeapon weapon);
}

public class Sword : IWeapon
{

    public int Attack(IWarrior warrior){
        return warrior.SurviveAttackWith(this);
    }

    public int Damage(){
        return 4;
    }
}
</pre>
<p>I generally create a bacon_helper.rb file where I group my requires and helper functions etc. In the case of this test I have the following in the bacon_helper.rb:</p>
<pre class="ruby" name="code">

# add some search paths to ironruby
# this first one adds the path with the assemblies
# this enables us not to have to specify a path to the assemblies everywhere.
$: &lt;&lt; File.dirname(__FILE__) + &quot;/bin&quot;
# adds the path to the caricature library.
$: &lt;&lt; File.dirname(__FILE__) + &quot;/../lib&quot;

# load the caricature library
require &quot;caricature&quot;
require 'caricature/clr'

# load the bacon library
require 'bacon'

# Add the .NET framework
require 'mscorlib'

# load the assembly with the C# code
load_assembly 'ClrModels'
</pre>
<p>At this point we’re ready to start writing the test. create a file called sword_spec.rb and we’ll add the following content to the file.</p>
<pre class="ruby" name="code">

require File.dirname(__FILE__) + &quot;/bacon_helper.rb&quot;

describe &quot;ClrModels::Sword&quot; do

  before do
    @warrior = Caricature::Isolation.for ClrModels::IWarrior
  end

  it &quot;should call survive_attack on the mock&quot; do
    @warrior.when_receiving(:survive_attack_with).return(5)

    sword = ClrModels::Sword.new
    sword.attack(@warrior).should.equal 5

    @warrior.did_receive?(:survive_attack_with).should.be.successful
  end

  it &quot;should return different results when expectation is defined with arguments&quot; do
    sword1 = ClrModels::Sword.new
    sword2 = ClrModels::Sword.new

    @warrior.when_receiving(:survive_attack_with).return(5)
    @warrior.when_receiving(:survive_attack_with).with(sword2).return(15)

    sword1.attack(@warrior).should.equal 5
    sword2.attack(@warrior).should.equal 15

    @warrior.did_receive?(:survive_attack_with).with(sword2).should.be.successful
  end

end
</pre>
<p>So now we’ve got 2 tests for our Sword class. The only thing that is left to do is to run the specs. You can do that by executing the ibacon command and passing it the file you want to test.</p>
<pre name="code">

+ C:\dev\caricature
(master) » ibacon spec/sword_spec.rb
ClrModels::Sword
- should call survive_attack on the mock
- should return different results when expectation is defined with arguments

2 specifications (5 requirements), 0 failures, 0 errors
</pre>
<p><div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e7a7ff6b-7e8d-4103-aea9-665298fa5cde" style="float:none; display:inline; margin:0px; padding:0px 0px 0px 0px;">Technorati Tags: <a href="http://technorati.com/tags/ironruby" rel="tag">ironruby</a>,<a href="http://technorati.com/tags/caricature" rel="tag">caricature</a>,<a href="http://technorati.com/tags/mocking" rel="tag">mocking</a></div></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/casualjim?a=ZM9J0wZbdmc:MhSyxsztD5M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=ZM9J0wZbdmc:MhSyxsztD5M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/casualjim?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=ZM9J0wZbdmc:MhSyxsztD5M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/casualjim?i=ZM9J0wZbdmc:MhSyxsztD5M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=ZM9J0wZbdmc:MhSyxsztD5M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/casualjim?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/casualjim?a=ZM9J0wZbdmc:MhSyxsztD5M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/casualjim?i=ZM9J0wZbdmc:MhSyxsztD5M:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/casualjim/~4/ZM9J0wZbdmc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://flanders.co.nz/2009/05/21/getting-started-with-caricature-and-ironruby/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://flanders.co.nz/2009/05/21/getting-started-with-caricature-and-ironruby/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.310 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-03 15:19:33 -->

