<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Stefan Tilkov&apos;s Random Stuff</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/" />
    <link rel="self" type="application/atom+xml" href="http://www.innoq.com/blog/st/atom.xml" />
    <id>tag:www.innoq.com,2007-11-25:/blog/st//3</id>
    <updated>2008-05-14T07:15:03Z</updated>
    <subtitle>Thoughts on Architecture, REST and SOA, Model-Driven Development, and whatever else crosses my path</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.0</generator>

<entry>
    <title>JRuby on Rails @ RheinJUG</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/jruby_on_rails_rheinjug.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2655</id>

    <published>2008-05-14T07:14:44Z</published>
    <updated>2008-05-14T07:15:03Z</updated>

    <summary>Last Thursday, I had a lot of fun talking about JRuby on Rails at the Düsseldorf Java User Group -- I had a great audience with smart questions and a topic I&apos;m really excited about. As usual, I&apos;ve put the...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
        <category term="Ruby and RoR" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Last Thursday, I had a lot of fun talking about JRuby on Rails at the <a href="http://www.rheinjug.de/">Düsseldorf Java User Group</a> -- I had a great audience with smart questions and a topic I'm really excited about. As usual, I've put <a href="/blog/st/presentations/2008/2008-05-09-JRuby--JUGD.pdf">the slides online</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>XML Tax</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/xml_tax.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2654</id>

    <published>2008-05-14T05:34:08Z</published>
    <updated>2008-05-14T05:35:26Z</updated>

    <summary>Excellent answer from Norm Walsh to Jeff Atwood&apos;s XML criticism: I don&apos;t necessarily think all the alternatives to XML suck, but the mindless, knee-jerk rejection of XML because it contains a small amount of additional syntax certainly does. Like all...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Excellent answer from <a href="http://norman.walsh.name/2008/05/13/thetax">Norm Walsh</a> to Jeff Atwood's <a href="http://www.codinghorror.com/blog/archives/001114.html">XML criticism</a>:</p>

<blockquote>
  <p>I don't necessarily think all the alternatives to XML suck, but the mindless, knee-jerk rejection of XML because it contains a small amount of additional syntax certainly does. Like all tools, it's a question of how you use it. Please think twice before subjecting yourself, your fellow programmers, and your users to more fragile, ASCII-only, ad hoc syntaxes.</p>
</blockquote>

<p>This is an occasion where I agree that both alternatives (XML and more light-weight approaches) are worth being considered.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Dynamic Languages Strike Back</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/dynamic_languages_strike_back.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2653</id>

    <published>2008-05-13T20:35:30Z</published>
    <updated>2008-05-13T20:35:32Z</updated>

    <summary>Superb talk by Steve Yegge (judging from the transcript, at least). Be sure to check out the comments, too....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Superb talk by Steve Yegge</a> (judging from the transcript, at least). Be sure to check out the comments, too.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Implementing a Blog</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/implementing_a_blog.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2652</id>

    <published>2008-05-13T17:39:24Z</published>
    <updated>2008-05-13T17:37:12Z</updated>

    <summary>Martin Probst on all those &amp;#8220;easy&amp;#8221; blog apps: Implementing a blog is writing a tiny handler that shoves stuff into the database and out of it, and then spending ridiculous amounts of time filtering comments for spam. Which is one...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://www.martin-probst.com/blog/2008/05/13/implementing-a-blog">Martin Probst</a> on all those &#8220;easy&#8221; blog apps:</p>

<blockquote>
  <p>Implementing a blog is writing a tiny handler that shoves stuff into the database and out of it, and then spending ridiculous amounts of time filtering comments for spam. Which is one of the really difficult things to do on the internet - validating users as real users, without being inaccessible.</p>
</blockquote>
]]>
        

    </content>
</entry>

<entry>
    <title>&quot;Blogosphäre&quot; (aus JavaSPEKTRUM 03/08)</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/blogosphare_aus_javaspektrum_0_1.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2651</id>

    <published>2008-05-13T07:56:23Z</published>
    <updated>2008-05-13T07:57:34Z</updated>

    <summary> Haben Sie es sich mit “Ihrer” Haus-und-Hof-Programmiersprache gemütlich gemacht? Vielleicht ist die Zeit gekommen, sich neu und breiter zu orientieren – glaubt man zumindest dem Tenor zahlreicher Blog-Postings, stehen wir vor der Zeit der “polyglotten Programmierer”. Meine Kolumne im...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<blockquote>
  <p>Haben Sie es sich mit “Ihrer” Haus-und-Hof-Programmiersprache gemütlich gemacht? Vielleicht ist die Zeit gekommen, sich neu und breiter zu orientieren – glaubt man zumindest dem Tenor zahlreicher Blog-Postings, stehen wir vor der Zeit der “polyglotten Programmierer”.</p>
</blockquote>

<p>Meine <a href="http://www.sigs.de/blog/js/?p=36">Kolumne im aktuellen JavaSPEKTRUM</a> ist online.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>The Day that Middleware Died</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/the_day_that_middleware_died.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2650</id>

    <published>2008-05-10T06:30:32Z</published>
    <updated>2008-05-10T06:30:24Z</updated>

    <summary>Stu Charlton&apos;s take on the end of BEA as we know it....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Stu Charlton's take on <a href="http://www.stucharlton.com/blog/archives/000544.html">the end of BEA as we know it</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>RESTful JavaOne</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/restful_javaone.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2649</id>

    <published>2008-05-09T16:33:13Z</published>
    <updated>2008-05-09T16:30:42Z</updated>

    <summary>Tim Bray, reporting from JavaOne: Down in the big Java One trade-show, there was a “SOA village”, where all the vendors of SOAP/WSDL/WS-* technology were talking about Governance and Reliability and Integration and so on. “Village” is the word all...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://www.tbray.org/ongoing/When/200x/2008/05/07/REST-at-J1">Tim Bray</a>, reporting from JavaOne:</p>

<blockquote>
  <p>Down in the big Java One trade-show, there was a “SOA village”, where all the vendors of SOAP/WSDL/WS-* technology were talking about Governance and Reliability and Integration and so on. “Village” is the word all right; a village left behind by history. It was kind of sad, actually. REST may not have won, but SOA-as-in-WSDL is in the middle of losing.<br /><br />My second take-away, watching the presentations’ sample code: there was way too much of it. When you’ve been living in Ruby-land for a while, Java’s verbosity starts to hurt your eyes. In particular those constructors spilling across two or three lines, festooned with hideously-nested generics cruft; that’s just wrong.</p>
</blockquote>
]]>
        

    </content>
</entry>

<entry>
    <title>SPARQL Update to Complete RESTful SOA Scenario</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/sparql_update_to_complete_rest.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2648</id>

    <published>2008-05-08T05:51:34Z</published>
    <updated>2008-05-08T05:51:35Z</updated>

    <summary> The so far certainly RESTful Web of Linking Open Data provides an outstanding real world pattern for RESTful SOA - as long as there is only read access. Imagine enterprises can easily publish their data internally in the same...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<blockquote>
  <p>The so far certainly RESTful Web of Linking Open Data provides an outstanding real world pattern for RESTful SOA - as long as there is only read access. Imagine enterprises can easily publish their data internally in the same way, and so cross-enterprise organizations could do (assumed that security requirements are as well satisfied). When it comes to UPDATE in Linking Open Data, this most probably will be realized using SPARQL Update. While this is a language not an application protocol, it is based on assumptions on such a protocol, e.g. by addressing the Graph Store and not the Graph. So it might by worthy to "avoid making the same mistakes as Web services".</p>
</blockquote>

<p>More on <a href="http://www.infoq.com/news/2008/05/sparql-update-soa">InfoQ</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Nygard on JSR 308</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/nygard_on_jsr_308.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2647</id>

    <published>2008-05-07T13:37:31Z</published>
    <updated>2008-05-07T13:35:15Z</updated>

    <summary>Michael Nygard on JSR 308 and dynamic languages: Every language has a complexity budget. Java blew through it with generics in Java 5. Now, seriously, take another look at this: @NotEmpty List strings = new ArrayList(); Does that even look...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://www.michaelnygard.com/blog/2008/05/when_should_you_jump_jsr_308_t.html">Michael Nygard</a> on <a href="http://groups.csail.mit.edu/pag/jsr308/">JSR 308</a> and dynamic languages:</p>

<blockquote>
<p>Every language has a complexity budget. Java blew through it with generics in Java 5. Now, seriously, take another look at this:</p>

<code>@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();</code>
<p>Does that even look like Java? That complexity budget is just a dim smudge in our rear-view mirror here. We&#8217;re so busy keeping the compiler happy here, we&#8217;ll completely forget what our actual project it.</p>
<p>
All this is coming at exactly the worst possible time for Java the Language. The community is really, really excited about dynamic languages now. Instead of those contortions, we could just say:
</p>
<code>var strings = ["one", "two"];</code>
<p>
Now seriously, which one would you rather write? True, the dynamic version doesn&#8217;t let me enlist the compiler&#8217;s aid for enforcement. True, I do need many more unit tests with the dynamic code. Still, I&#8217;d prefer that &#8220;low ceremony&#8221; approach to the mouthful of formalism above.
</p>
<p>
So, getting back to that mainstream Java developer&#8230; it looks like there are only two choices: more dynamic or more static. More formal and strict, or more loosey-goosey and terse. JSR 308 will absolutely accelerate this polarization.
</p>
</blockquote>

<p>I have a similar feeling with <a href="http://www.scala-lang.org/">Scala</a> &#8212; I have no doubt it&#8217;s now probably 50 times faster than JRuby, and will probably continue to be at least an order of magnitude faster for the foreseeable future; its type system will probably catch errors I never knew I was able of making &#8212; but I just can&#8217;t see myself having fun programming in it.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Just Add Scaling</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/just_add_scaling.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2646</id>

    <published>2008-05-05T05:47:23Z</published>
    <updated>2008-05-05T05:47:22Z</updated>

    <summary>Great post from Ola Bini about the &quot;lack of scalability&quot; of Ruby. It&apos;s interesting to see how many commenters totally miss the point, either feeling they need to explain scalability to him, our mixing up a framework (Rails) with a...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
        <category term="Ruby and RoR" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://ola-bini.blogspot.com/2008/05/just-add-scaling.html">Great post</a> from Ola Bini about the "lack of scalability" of Ruby. It's interesting to see how many commenters totally miss the point, either feeling they need to explain scalability to him, our mixing up a framework (Rails) with a language (Ruby). </p>
]]>
        

    </content>
</entry>

<entry>
    <title>That crazy old economy can be so selective sometimes</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/05/that_crazy_old_economy_can_be.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2645</id>

    <published>2008-05-03T08:10:24Z</published>
    <updated>2008-05-03T08:10:25Z</updated>

    <summary>I just love Fake Steve&apos;s Fake Jonathan Schwartz: More important, the MySQL deal has demonstrated our commitment to the open source community and gained us huge amounts of good will from people who don&apos;t like to pay for things, which...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I just <em>love</em> <a href="http://fakesteve.blogspot.com/2008/05/that-crazy-old-economy-can-be-so.html">Fake Steve's Fake Jonathan Schwartz</a>:</p>

<blockquote>
  <p>More important, the MySQL deal has demonstrated our commitment to the open source community and gained us huge amounts of good will from people who don't like to pay for things, which for a company in our dire situation is absolutely invaluable.</p>
</blockquote>

<p>Brilliant.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>JRuby and Ruby</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/04/jruby_and_ruby.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2644</id>

    <published>2008-04-30T15:15:03Z</published>
    <updated>2008-04-30T15:15:03Z</updated>

    <summary>I spent a lot of time at JAX last week in discussions about Ruby and Rails, both on stage and offline. A recurring theme was the Java community&apos;s reluctance to accept anything that doesn&apos;t run on the JVM. The arguments...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I spent a lot of time at JAX last week in discussions about Ruby and Rails, both on stage and offline. A recurring theme was the Java community's reluctance to accept anything that doesn't run on the JVM. The arguments brought forward can be separated roughly into the following three categories:</p>

<ul>
<li>Legacy. People insist on being able to protect their existing investments, in terms of hardware, software, and skills. Being able to run Ruby as just another language on the JVM, essentially including the option to simply deliver byte code without ever talking about a change in the programming language, is perceived as a key requirement.</li>
<li>Performance and Scalability. Scaling with processes instead of threads; having to manage a cluster of long-running processes; being forced to rely on Apache's features for load-balancing: there was general agreement that this is a lot worse than being able to rely on the existing Java infrastructure.</li>
</ul>

<p>I don't necessarily agree with these criticisms. For one, I believe systems should be coupled much more loosely than by running them on the same VM and integrating them on the language level. I also think that in many cases, scaling with processes in a shared-nothing architecture scales perfectly well, and it also doesn't require any sophisticated infrastructure beyond a boilerplate Unix platform. I expect a lot of innovation to occur within the Ruby VM space, specifically around Rubinius. And lastly, I know from personal experience that in many cases the JVM and a fat app server sitting on top of it are used to serve a simple JSP/servlet application to a few dozen users, i.e. used in a scenario where Perl CGI would suffice.</p>

<p>But while I don't find these arguments convincing enough for many use cases, it's very hard to find arguments <em>against</em> running Ruby on the JVM. JRuby has reached a level of maturity that makes it a great choice even if you don't care about Java at all. As it runs Rails, I'm reasonably confident it will run basically any Ruby library I could care about -- except, of course, those that rely on a native library to deliver their features. But in this case, the vast ecosystem of Java libraries should outweigh this disadvantage easily.</p>

<p>So assuming you can deploy your Ruby application to a JVM platform without hassle, why wouldn't you?</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Steve Yegge on XEmacs</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/04/steve_yegge_on_xemacs.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2643</id>

    <published>2008-04-29T17:17:01Z</published>
    <updated>2008-04-29T17:17:22Z</updated>

    <summary>Smart stuff from Steve Yegge: Eclipse and similar environments want to be self-hosting, but they&apos;re not, because Java is not self-hosting. In spite of Java&apos;s smattering of dynamic facilities, Java remains as fundamentally incapable of self-hosting as C++. Self-hosting only...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Smart stuff from <a href="http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html">Steve Yegge</a>:</p>

<blockquote>
  <p>Eclipse and similar environments want to be self-hosting, but they're not, because Java is not self-hosting. In spite of Java's smattering of dynamic facilities, Java remains as fundamentally incapable of self-hosting as C++. Self-hosting only works if the code can "fold" on itself and become more powerful while making itself smaller and cleaner. I'm not really talking about macros here, even though that's probably the first thing you thought of. I'm thinking more along the lines of implementing JITs and supercompilers in the hosted runtime, rather than in the C++ or Java "hardware" substrate, which is where everyone puts them today.<br /><br />I suspect (without proof) that in self-hosted environments, you can eventually cross a threshold where your performance gains from features implemented in the hosted environment outpace the gains from features in the substrate, because of this self-reinforcing effect: if code can make <em>itself</em> faster and smarter, then it will be faster and smarter at making itself faster and smarter. In C++ and Java, making this jump to the self-reinforcing level is essentially intractable because, ironically, they have so many features (or feature omissions) for the sake of performance that they get in their own way.<br /><br />To be sure, Emacs, the current crop of popular scripting languages, and other modestly self-hosting environments are all pretty far from achieving self-reinforcing performance. But Emacs has achieved it for productivity – at least, for the relatively small percentage of Emacs users who learn enough elisp to take advantage of it. There are just enough of us doing it to generate a steady supply of new elisp hackers, and the general-purpose artifacts we produce are usually enough to keep the current crop of casual users happy.</p>
</blockquote>

<p>(Personally, I've abandoned the Emacs religion and switched to TextMate. But I'm among the casual users who will be happy that they can switch back the day I can no longer use a Mac ...)</p>
]]>
        

    </content>
</entry>

<entry>
    <title>New Languages &amp; Compilers</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/04/new_languages_compilers.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2642</id>

    <published>2008-04-29T07:14:58Z</published>
    <updated>2008-04-29T07:15:25Z</updated>

    <summary>Microsoft&apos;s Doug Purdy: In addition, it is not very often that you can be part of a team that aspires to radically change the dynamics of building a new language, to the extent that a developer can write their own model-driven...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
        <category term="Model Driven Engineering" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://douglaspurdy.com/2008/04/29/new-languages-compilers/">Microsoft's Doug Purdy</a>:</p>

<blockquote>
  <p>In addition, it is not very often that you can be part of a team that aspires to radically change the dynamics of building a new language, to the extent that a developer can write their own model-driven language in a straightforward way while getting all the language services (Intellisense, colorization, etc.) for “free”.</p>
</blockquote>

<p>Sounds a lot like <a href="http://www.eclipse.org/gmt/oaw/doc/4.2/html/contents/xtext_reference.html">Xtext</a> to me …</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Displaying Key Combinations on OS X for Presentations</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2008/04/displaying_key_combinations_on.html" />
    <id>tag:www.innoq.com,2008:/blog/st//3.2641</id>

    <published>2008-04-22T15:56:44Z</published>
    <updated>2008-04-22T15:59:24Z</updated>

    <summary>Ryan Bates from railscasts.com uses it, IIRC – damn if I can remember the OS X tool&apos;s name: What do you use to let the audience know which control-command-shift-option-whatever combination has been used? Any hint, preferably before tomorrow 10am CET,...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Ryan Bates from railscasts.com uses it, IIRC – damn if I can remember the OS X tool's name: What do you use to let the audience know which control-command-shift-option-whatever combination has been used?</p>

<p>Any hint, preferably before tomorrow 10am CET, would be greatly appreciated :-)</p>
]]>
        

    </content>
</entry>

</feed>
