<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Toxic Elephant : </title>
    <link>http://www.matijs.net/blog/.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Don't bury it in your back yard!</description>
    <item>
      <title>The Arc Challenge</title>
      <description>&lt;p&gt;Hm, so &lt;a href="http://www.paulgraham.com/arc0.html"&gt;Arc is here&lt;/a&gt;, and Paul Graham gives &lt;a href="http://paulgraham.com/arcchallenge.html"&gt;the Arc challenge&lt;/a&gt;. The answer in Arc is short indeed. First, let&amp;#8217;s see an answer in Rails (loading a framework  is allowed according to the challenge), with &lt;code&gt;said_controller.rb&lt;/code&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;SaidController&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;click&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="ident"&gt;session&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:it&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;what&lt;/span&gt;&lt;span class="punct"&gt;'];&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;show&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;and some templates, for the first page, &lt;code&gt;index.html.erb&lt;/code&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_erb "&gt;&amp;lt;% form_tag '/said/click' do %&amp;gt;
  &amp;lt;%= text_field_tag 'what' %&amp;gt;
  &amp;lt;%= submit_tag %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;second page, &lt;code&gt;click.html.erb&lt;/code&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_erb "&gt;&amp;lt;%= link_to 'click here', {:action =&amp;gt; 'show'} %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;third page, &lt;code&gt;show.html.erb&lt;/code&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_erb "&gt;You said &amp;lt;%= session[:it] %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;The Rails answer may be a little longer (although by how much is hard to say due to the different syntax&amp;#8212;is &lt;code&gt;end&lt;/code&gt; a token?), but it not a case of the same but longer.&lt;/p&gt;


	&lt;p&gt;First, the Rails version is in temporal order, the Arc version is not. Perhaps there&amp;#8217;s a way of reading the Arc version that makes this order natural, but right now, it looks confusing.&lt;/p&gt;


	&lt;p&gt;But the most striking difference is that it is based on a completely different philosophy of how web applications should be developed. The Arc answer is great if you want a web application based on continuations. The Rails answer is what you would use if you want to use &lt;span class="caps"&gt;REST&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m definitely in the &lt;span class="caps"&gt;REST&lt;/span&gt; camp, which makes this example meaningless as a demonstration of Arc. It shows me that Arc can be used to write a short program that does something I don&amp;#8217;t want to do.&lt;/p&gt;


	&lt;p&gt;The ultimate question of course is whether brevity (in terms of number of tokens, not characters) is the single best metric for language power.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Someone wrote &lt;a href="http://arc-challenge.heroku.com/"&gt;a Ruby version&lt;/a&gt; that is about as short as the Arc version, uses the same paradigm, &lt;em&gt;and&lt;/em&gt; is in temporal order:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;said&lt;/span&gt;
  &lt;span class="ident"&gt;aform&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;input&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;foo&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;),&lt;/span&gt; &lt;span class="ident"&gt;submit&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
    &lt;span class="ident"&gt;w_link&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;click here&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
      &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;you said: &lt;span class="expr"&gt;#{arg :foo}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;}}&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 17 Feb 2008 21:14:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:9c770199-a783-4d9c-a432-b4439fbb79f1</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2008/02/17/the-arc-challenge#comments</comments>
      <category>software</category>
      <category>ruby</category>
      <category>arc</category>
      <category>language</category>
      <category>design</category>
      <category>continuations</category>
      <category>rest</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=the-arc-challenge&amp;day=17&amp;month=02&amp;year=2008</trackback:ping>
      <link>http://www.matijs.net/blog/2008/02/17/the-arc-challenge</link>
    </item>
    <item>
      <title>Aaargh!</title>
      <description>&lt;p&gt;I&amp;#8217;m upset. I&amp;#8217;m so upset that I was originally going to call this entry &amp;#8220;Fuck you, Python&amp;#8221;. Now, I realize that&amp;#8217;s not a very nice thing to say, and actually, &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; can&amp;#8217;t really help it anyway. Except by not existing&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;


	&lt;p&gt;Why, why, why must every other new language created these days have significant indenting? You see a new language, like &lt;a href="http://cobra-language.com/"&gt;Cobra&lt;/a&gt;, you read the &lt;a href="http://cobra-language.com/docs/why/"&gt;overview of features&lt;/a&gt;, and you go, cool, great runtime performance, static &lt;em&gt;and&lt;/em&gt; dynamic typing, and contracts, too. So you browse on to the &lt;a href="http://cobra-language.com/docs/hello-world/"&gt;hello world example&lt;/a&gt;, and boom! the absence of end-of-block tokens hits you in the face like an iron fist.&lt;/p&gt;


	&lt;p&gt;Now, in Python&amp;#8217;s case you can tell from the reasoning&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; and the implementation that somebody actually thought this through, but Cobra has the following rationale for using this method of block structuring:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Cobra uses indentation to denote code structure since adept programmers do this anyway in languages that don&amp;#8217;t even require it (C#, Java, C++, etc.)&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Wow. I&amp;#8217;m going to make a language that uses the comma-space token to separate function arguments, since adept programmers put a space after the comma in languages that don&amp;#8217;t even require it.&lt;/p&gt;


	&lt;p&gt;Look, if you use indenting for block structure because you like Python, just say so already.&lt;/p&gt;


	&lt;p&gt;Oh wait, there&amp;#8217;s more:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;In Cobra, one &lt;span class="caps"&gt;INDENT&lt;/span&gt; is accomplished by one &lt;span class="caps"&gt;TAB&lt;/span&gt; or four &lt;span class="caps"&gt;SPACES&lt;/span&gt;.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Huh? Because adept programmers indent four characters anyway even in languages that don&amp;#8217;t require it? Because adept programmers use one tab per four spaces anyway even in editors that don&amp;#8217;t require it?&lt;/p&gt;


	&lt;p&gt;Sheesh.&lt;/p&gt;


	&lt;p&gt;I feel much calmer now.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; See how reasonable I am. I&amp;#8217;m not &lt;em&gt;actually&lt;/em&gt; calling for the non-existance of Python.&lt;/p&gt;


	&lt;p id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; I don&amp;#8217;t agree with that reasoning either, but at least it&amp;#8217;s, you know, reasonable.&lt;/p&gt;</description>
      <pubDate>Thu, 14 Feb 2008 21:35:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:d782b7d8-5a2c-47dd-b764-6814fa48d6d6</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2008/02/14/aaargh#comments</comments>
      <category>software</category>
      <category>python</category>
      <category>cobra</category>
      <category>indent</category>
      <category>madness</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=aaargh&amp;day=14&amp;month=02&amp;year=2008</trackback:ping>
      <link>http://www.matijs.net/blog/2008/02/14/aaargh</link>
    </item>
    <item>
      <title>Hello new year!</title>
      <description>&lt;p&gt;It&amp;#8217;s a new year! Time for more &lt;a href="/blog/articles/2006/01/12/new-year"&gt;resolutions&lt;/a&gt;. I can&amp;#8217;t believe that&amp;#8217;s actually two years ago.&lt;/p&gt;


	&lt;p&gt;Yes, my blog has been neglected, but not for want of anything to write about. Oh, there are so many things I have an opinion about. But always, it&amp;#8217;s the question, is my opinion interesting, new, well informed, etc? And can I write something sizable about it? Not conductive to writing every monday (recently replaced by sunday, but I bet you hadn&amp;#8217;t guessed). Maybe I should try less hard to be reasonable.&lt;/p&gt;


	&lt;p&gt;Oh yeah, e-mail is getting better, mainly thanks to the &lt;a href="http://www.43folders.com/izero"&gt;Inbox Zero&lt;/a&gt; articles.&lt;/p&gt;


	&lt;p&gt;What I really want to be doing: I still don&amp;#8217;t really know, but let&amp;#8217;s look at what I might blog about:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html"&gt;Size is the Enemy&lt;/a&gt;, leading to the issue of abstractions in programming languages.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/001002.html"&gt;80/20&lt;/a&gt;, or the problem of getting your average Java/.NET programmer to really learn and use new things (e.g., new methods of abstraction).&lt;/li&gt;
		&lt;li&gt;Lots of new languages are popping up, all running on some VM or other (e.g., &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, &lt;a href="http://nemerle.org/Main_Page"&gt;Nemerle&lt;/a&gt;, &lt;a href="http://boo.codehaus.org/"&gt;Boo&lt;/a&gt;). Where&amp;#8217;s the development in regular compiled languages?&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This surely points in some direction, but some weighted average will have to be taken to find out what that direction is.&lt;/p&gt;


	&lt;p&gt;I did manage to quit the job that was definitely going in the wrong direction, so there&amp;#8217;s a plus.&lt;/p&gt;


Oh, you wanted new resolutions? Hm, let&amp;#8217;s do some:
	&lt;ul&gt;
	&lt;li&gt;Uncluttered house&lt;/li&gt;
		&lt;li&gt;Learn Japanese&lt;/li&gt;
		&lt;li&gt;Finish more software so it&amp;#8217;s releaseable&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Wed, 23 Jan 2008 06:36:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e5a620d8-767f-4c29-bc46-98259d4d96b4</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2008/01/23/hello-new-year#comments</comments>
      <category>life</category>
      <category>software</category>
      <category>meta</category>
      <category>resolutions</category>
      <category>sneak</category>
      <category>peak</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=hello-new-year&amp;day=23&amp;month=01&amp;year=2008</trackback:ping>
      <link>http://www.matijs.net/blog/2008/01/23/hello-new-year</link>
    </item>
    <item>
      <title>The beauty of git</title>
      <description>&lt;p&gt;After my &lt;a href="http://www.matijs.net/blog/articles/2007/06/18/subversion-and-tagging"&gt;struggles with svk&lt;/a&gt;, working with &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; is a breath of fresh air. It has great support for branching and merging, and putting even the smallest of throwaway projects under version control becomes as simple as:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Gone are the days of the &amp;#8220;oh i&amp;#8217;ll just make ten copies of this script here because setting up a repository takes too long&amp;#8221; style of version control.&lt;/p&gt;</description>
      <pubDate>Sat, 10 Nov 2007 18:57:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:6770d93e-8064-45e9-9ddb-d4ddd83b9aee</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/11/10/the-beauty-of-git#comments</comments>
      <category>software</category>
      <category>svk</category>
      <category>scm</category>
      <category>git</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=the-beauty-of-git&amp;day=10&amp;month=11&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/11/10/the-beauty-of-git</link>
    </item>
    <item>
      <title>I'm not a Mockist</title>
      <description>&lt;p&gt;Let&amp;#8217;s talk about mocking.&lt;/p&gt;


	&lt;p&gt;It apparently is the hot new thing in &lt;a href="http://rubyonrails.org"&gt;Rails&lt;/a&gt;
land. And like earlier &lt;a href="http://www.matijs.net/blog/articles/2006/10/18/how-to-write-software"&gt;silver
bullets&lt;/a&gt;,
it&amp;#8217;s becoming a religion: Acolytes would rather write ten lines to set up a
mock object than one to instantiate an actual one.&lt;/p&gt;


	&lt;p&gt;Honestly, I have tried to understand the benefits of mocking, but I just don&amp;#8217;t see
them&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;. Then I thought I would have to write a long article about how
mocking is flawed, and would you people please all see sense already.
Luckily, Martin Fowler did it for me, and with a lot more objectivity. Go
read his &amp;#8216;&lt;a href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;Mocks Aren&amp;#8217;t
Stubs&lt;/a&gt;&amp;#8217;. In addition
to explaining the difference between Mocks and Stubs (a difference often
overlooked by the religious), he explains why you might not want to use
what he calls &amp;#8220;mockist testing&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;So, in the spirit of religious tolerance, I can now say: I&amp;#8217;m not a Mockist.&lt;/p&gt;


	&lt;p&gt;My particular reasons?&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Mockist testing is not &lt;span class="caps"&gt;DRY&lt;/span&gt;: Each class&amp;#8217; behavior is now defined in its
  code, its unit tests, and each time it is mocked.&lt;/li&gt;
		&lt;li&gt;Mockist testing tests a particular implementation of behavior, making
  refactoring harder.&lt;/li&gt;
		&lt;li&gt;Mockist testing makes writing your tests more work, inviting you not to test.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Next time you find yourself complaining that setting up your mock objects
is such a lot of work, ask yourself: &amp;#8220;Am I a Mockist?&amp;#8221;. Maybe you&amp;#8217;re not.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Well, one minor benifit I &lt;em&gt;can&lt;/em&gt; see that you can start writing and testing your views before having written your models. I never seem to want to do that anyway, though.&lt;/p&gt;</description>
      <pubDate>Sun, 04 Nov 2007 13:56:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:04da932f-1828-4516-90ee-04dc6c16d3cf</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/11/04/im-not-a-mockist#comments</comments>
      <category>software</category>
      <category>rails</category>
      <category>mocking</category>
      <category>software</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=im-not-a-mockist&amp;day=04&amp;month=11&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/11/04/im-not-a-mockist</link>
    </item>
    <item>
      <title>Undressed Ruby</title>
      <description>&lt;p&gt;In Ruby, there is really no compile time. There is parse time, and then
there is run time. All class and method definitions are done at run time.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Foo&lt;/span&gt;
    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;bar&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Zoo!&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;is basically&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="constant"&gt;Foo&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Class&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;define_method&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:bar&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Zoo!&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;See, we just removed the class and def keywords from Ruby. What else? Ah
yes, method calls. That&amp;#8217;s just sending messages. In fact, you can replace
any method call &lt;code&gt;foo.bar&lt;/code&gt; with &lt;code&gt;foo.send(:bar)&lt;/code&gt;, like so&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="constant"&gt;Foo&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Class&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;send&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:new&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;send&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:define_method&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:bar&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;send&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:puts&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Zoo!&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;How much syntax can you remove like this? How far can Ruby be undressed? And can you come up with a macro system to put the clothes back on?&lt;/p&gt;


	&lt;p&gt;Some ingredients: &lt;a href="http://lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html"&gt;Why list macros are cool&lt;/a&gt;,
&lt;a href="http://blog.zenspider.com/archives/2005/02/rubytoruby.html"&gt;RubyToRuby&lt;/a&gt;.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Actually, it&amp;#8217;s not the same, since the &lt;code&gt;define_method&lt;/code&gt; way creates a
closure, so you can do like
&lt;a href="http://project.ioni.st/post/1284#snippet_1284"&gt;this&lt;/a&gt;&lt;/p&gt;


	&lt;p id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; Yes, I know I&amp;#8217;m using method call syntax here. But this way I do expose the message-passing view on OO that Ruby has. If you want, you can replace it with &lt;code&gt;send_message(object, method, *args)&lt;/code&gt;, and assume Ruby defines &lt;code&gt;send_message&lt;/code&gt; somewhere.&lt;/p&gt;</description>
      <pubDate>Sun, 14 Oct 2007 12:14:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:f4701d41-fb5f-4b51-864f-3c4d795b0061</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/10/14/undressed-ruby#comments</comments>
      <category>software</category>
      <category>ruby</category>
      <category>macros</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=undressed-ruby&amp;day=14&amp;month=10&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/10/14/undressed-ruby</link>
    </item>
    <item>
      <title>We don't need another Arial</title>
      <description>&lt;p&gt;Some time ago, RedHat released the Liberation set of fonts. They are
intended as metrically identical replacements for Microsoft&amp;#8217;s Arial, Times
New Roman and Courier New fonts.&lt;/p&gt;


	&lt;p&gt;Sounds great, doesn&amp;#8217;t it?&lt;/p&gt;


	&lt;p&gt;Well, apart from the &lt;a href="http://www.mail-archive.com/debian-legal@lists.debian.org/msg36584.html"&gt;license
issues&lt;/a&gt;,
there&amp;#8217;s another problem: Metric equivalence isn&amp;#8217;t everything. Arial is
already the metrically equivalent substitute for Helvetica, and look at it:
Arial is basically Helvetica&amp;#8217;s &lt;a href="http://www.ms-studio.com/articles.html"&gt;ugly twin
sister&lt;/a&gt;. So, will Liberation &lt;a href="http://www.wildlyappropriate.com/article/290/if-this-is-liberation-ill-take-helvetica"&gt;be any
better?&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Linux already has a set of fonts that are not only metrically equivalent to,
but actually look like Helvetica, Times Roman and Courier: The &lt;a href="http://pages.cs.wisc.edu/~ghost/doc/AFPL/5.50/Fonts.htm#Free_fonts"&gt;&lt;span class="caps"&gt;URW&lt;/span&gt;
fonts&lt;/a&gt;.
To see them on the screen, instead of the ugly jagged bitmap versions,
you&amp;#8217;ll need to make them available to X, and turn off bitmap fonts in
fontconfig&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;


	&lt;p&gt;But the &lt;span class="caps"&gt;URW&lt;/span&gt; fonts themselves look ugly too, because their hinting is bad.
Liberation would solve that, wouldn&amp;#8217;t it? No it wouldn&amp;#8217;t, because
Liberation&amp;#8217;s hinting &lt;a href="http://www.press.redhat.com/2007/05/09/liberation-fonts/"&gt;isn&amp;#8217;t done
yet&lt;/a&gt;:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;The first release is a set of fully usable fonts, but they will lack the fully [sic] hinting capability [...] provided by TrueType/FreeType technology.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;So why not spend the effort on providing good hinting for the &lt;span class="caps"&gt;URW&lt;/span&gt; fonts, so
we can have actual nice looking real Helvetica on our Linux screens?&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; On Debian, and probably Ubuntu, that&amp;#8217;s&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;sudo aptitude install gsfonts-x11&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;and&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;sudo dpkg-reconfigure fontconfig-config&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;respectively. Answer &lt;strong&gt;no&lt;/strong&gt; to using bitmapped fonts.&lt;/p&gt;</description>
      <pubDate>Sun, 16 Sep 2007 13:00:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:61026707-054e-404c-9665-822fbff127f5</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/09/16/we-dont-need-another-arial#comments</comments>
      <category>software</category>
      <category>typography</category>
      <category>helvetica</category>
      <category>arial</category>
      <category>urw</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=we-dont-need-another-arial&amp;day=16&amp;month=09&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/09/16/we-dont-need-another-arial</link>
    </item>
    <item>
      <title>Disqualified by advertising</title>
      <description>&lt;p&gt;I was enthousiastic about &lt;a href="http://www.noobkit.com/"&gt;noobkit&lt;/a&gt; for about a week.  Finally an alternative to the rough style of Ruby&amp;#8217;s standard &lt;span class="caps"&gt;API&lt;/span&gt; documentation.&lt;/p&gt;


	&lt;p&gt;Until I actually wanted to use it.&lt;/p&gt;


	&lt;p&gt;Most pages have a full width block of Google ads above the main content. This is just too much. For some methods, the text is one line. The ad block then is five times as big.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ll go back to using &lt;a href="http://api.rubyonrails.org/"&gt;the old version&lt;/a&gt;, thanks.&lt;/p&gt;


	&lt;p&gt;[Also, the search function is not geared towards &lt;span class="caps"&gt;API&lt;/span&gt; documentation, but instead uses a generic Google-like method. Why not highlight the search results that actually describe the method or methods with the searched name?]&lt;/p&gt;</description>
      <pubDate>Thu, 23 Aug 2007 16:36:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b55e33e2-e2ae-4200-bc3c-7877df2d125f</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/08/23/disqualified-by-advertising#comments</comments>
      <category>web</category>
      <category>usability</category>
      <category>rails</category>
      <category>advertising</category>
      <category>api</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=disqualified-by-advertising&amp;day=23&amp;month=08&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/08/23/disqualified-by-advertising</link>
    </item>
    <item>
      <title>Zurich</title>
      <description>&lt;p&gt;So, I&amp;#8217;m reading &lt;a href="http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html"&gt;Steve Yegge&amp;#8217;s
latest&lt;/a&gt;, and he
drops some not so suble hints to the reader that they should apply at
Google. I talk about that to &lt;a href="http://www.matijs.net/blog/articles/2006/06/29/i-got-married"&gt;my wife&lt;/a&gt;, how working at Google would
definitely be nice, but that it would mean moving from Amsterdam (the
Netherlands) to Zurich (Switzerland), because that&amp;#8217;s where Google is in
Europe. And then she says:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt; Zurich has the best zoo in Europe.&lt;/p&gt;
	&lt;/blockquote&gt;</description>
      <pubDate>Wed, 27 Jun 2007 21:12:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:a51d9fa3-b3a4-4256-b910-6a5e4d086682</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/06/27/zurich#comments</comments>
      <category>life</category>
      <category>google</category>
      <category>zurich</category>
      <category>career</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=zurich&amp;day=27&amp;month=06&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/06/27/zurich</link>
    </item>
    <item>
      <title>People Ready</title>
      <description>&lt;p&gt;First, what the hell does Microsoft&amp;#8217;s slogan &lt;a href="http://www.microsoft.com/business/peopleready/default.mspx"&gt;people ready&lt;/a&gt; even mean? The campaign&amp;#8217;s site seems to think it means you need people to run a business. Well, I don&amp;#8217;t see any businesses around run by small rodents, so I guess they&amp;#8217;re right. That&amp;#8217;s &lt;a href="http://www.microsoft.com/presspass/press/2006/mar06/03-16PeopleReadyPR.mspx"&gt;some vision&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;So, what&amp;#8217;s this about? Some bloggers got paid for writing &lt;a href="http://peopleready.federatedmedia.net/"&gt;about people ready&lt;/a&gt;, and  people &lt;a href="http://valleywag.com/tech/spokesbloggers/microsoft-pays-star-writers-to-recite-slogan-271485.php"&gt;got upset&lt;/a&gt;.
Now, some defend themselves saying &lt;a href="http://www.readwriteweb.com/archives/people_ready.php"&gt;they didn&amp;#8217;t endorse anything&lt;/a&gt;, and some defend themselves saying &lt;a href="http://www.crunchnotes.com/?p=409"&gt;of course it&amp;#8217;s an ad box&lt;/a&gt; (whatever an ad box is).&lt;/p&gt;


	&lt;p&gt;Well, I don&amp;#8217;t think &lt;a href="http://www.peoplereadybusiness.federatedmedia.net/archives/70"&gt;this looks like an ad&lt;/a&gt;, and it may not be an endorsement of a Microsoft product, but it &lt;em&gt;is&lt;/em&gt; an endorsement of a Microsoft campaign. Oh, and look at the right of the page. It says &amp;#8220;Click here to submit your own People Ready Business story&amp;#8221;. So, that pretty much suggests that the content on the left was also submitted the same way. But of course, it wasn&amp;#8217;t.&lt;/p&gt;


	&lt;p&gt;Luckily, at least one of the entries &lt;a href="http://peopleready.federatedmedia.net/archives/211"&gt;seems to have been written while drunk&lt;/a&gt;.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;People readiness is something only people that are ready for people to be ready can be ready for.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;All this via &lt;a href="http://diveintomark.org/archives/2007/06/24/fm-translation"&gt;Mark&amp;#8217;s translation&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Finally, back to the meaning: &amp;#8220;people ready&amp;#8221; means ready for people, right? Just like &lt;a href="http://en.wikipedia.org/wiki/HD_ready"&gt;HD ready&lt;/a&gt; means ready for HD. Well, sort of anyway. But no, it means the people are ready. &lt;a href="http://www.flickr.com/photos/waderockett/243690259/"&gt;See&lt;/a&gt;?&lt;/p&gt;


	&lt;p&gt;Campaign lame.&lt;/p&gt;</description>
      <pubDate>Mon, 25 Jun 2007 20:27:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:ad77694a-f9c8-49ff-9956-8bf45472adda</guid>
      <author>blog@matijs.net (matijs)</author>
      <comments>http://www.matijs.net/blog/2007/06/25/people-ready#comments</comments>
      <category>software</category>
      <category>web</category>
      <category>microsoft</category>
      <category>shills</category>
      <category>blogging</category>
      <category>advertising</category>
      <trackback:ping>http://www.matijs.net/blog/trackbacks?article_id=people-ready&amp;day=25&amp;month=06&amp;year=2007</trackback:ping>
      <link>http://www.matijs.net/blog/2007/06/25/people-ready</link>
    </item>
  </channel>
</rss>
