<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Stefan Tilkov&apos;s Random Stuff</title>
        <link>http://www.innoq.com/blog/st/</link>
        <description>Thoughts on Architecture, REST and SOA, Model-Driven Development, and whatever else crosses my path</description>
        <language>en</language>
        <copyright>Copyright 2010</copyright>
        <lastBuildDate>Fri, 19 Mar 2010 19:14:44 +0100</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>New SoftwareArchitekTOUR Podcast Episodes</title>
            <description><![CDATA[<p>I forgot to mention here on the blog that there are two new episodes of our <a href="http://www.heise.de/developer/podcast/">SoftwareArchitekTOUR podcast</a> online: The first one with <a href="http://voelterblog.blogspot.com/">Markus Voelter</a> and myself, about <a href="http://www.heise.de/developer/artikel/Episode-18-Anti-Patterns-und-Tools-fuer-REST-924171.html">REST patterns, anti-patterns and tools</a>; the second one with <a href="http://weblogs.thinktecture.com/cweyer/">Christian Weyer</a> on <a href="http://www.heise.de/developer/artikel/Episode-19-REST-in-der-NET-Welt-947193.html">REST with .NET</a>.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/03/new_softwarearchitektour_podca.html</link>
            <guid>http://www.innoq.com/blog/st/2010/03/new_softwarearchitektour_podca.html</guid>
            
            
            <pubDate>Fri, 19 Mar 2010 19:14:44 +0100</pubDate>
        </item>
        
        <item>
            <title>RFC 5789: PATCH Method for HTTP</title>
            <description><![CDATA[<p>After a long, long time, the HTTP PATCH verb has become an official standard: <a href="http://tools.ietf.org/html/rfc5789">IETF RFC 5789</a>. From the abstract:</p>

<blockquote>
  <p>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification.  The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource.</p>
</blockquote>

<p>That's pretty great news, even though it will probably take some time before you can actually gain much of a benefit from it. Until now, there were two options of dealing with resource creation (and update, for that matter):</p>

<ul>
<li>Use a POST to create a new resource when you want the server to determine the URI of the new resource</li>
<li>Use a PUT to do a <em>full update</em> of a resource (or create if it's not there already)</li>
</ul>

<p>Sometimes, though, what you're looking for is a <em>partial</em> update. You have a bunch of different choices: You can design overlapping resources so that one of them reflects the part you're interested in, and do a PUT on that; or you can use POST, which is so unrestricted it can essentially mean anything.</p>

<p>With PATCH, you have a standardized protocol-level verb that expresses the intent of a partial update. That's nice, but its success depends on two factors:</p>

<ul>
<li>The availability of standardized patch formats that can be re-used independently of the application</li>
<li>The support for the verb in terms of infrastructure, specifically intermediaries and programming toolkits</li>
</ul>

<p>In any case, I will definitely start advocating its use for the purpose it's been intended to support, even if this means going with home-grown patch formats for some time: It's still better than POST, and using some sort of <code>x-http-method-override</code>-style workaround should work nicely if needed.</p>

<p>Kudos to <a href="http://www.snellspace.com/wp/index.php">James Snell</a> for investing the time and energy to take this up.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/03/rfc_5789_patch_method_for_http.html</link>
            <guid>http://www.innoq.com/blog/st/2010/03/rfc_5789_patch_method_for_http.html</guid>
            
            
            <pubDate>Fri, 19 Mar 2010 18:31:10 +0100</pubDate>
        </item>
        
        <item>
            <title>Blogging from Emacs</title>
            <description><![CDATA[<p>As I've re-discovered my love for Emacs (using Aquamacs on OS X), I'm
playing around with using Emacs for Blogging. Now that I've managed to patch weblogger.el to include support for MT summaries, I have another excuse less to not blog.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/03/blogging_from_emacs.html</link>
            <guid>http://www.innoq.com/blog/st/2010/03/blogging_from_emacs.html</guid>
            
            
            <pubDate>Tue, 16 Mar 2010 10:18:33 +0100</pubDate>
        </item>
        
        <item>
            <title>heise.de Developer Podcast: Einstieg in REST</title>
            <description><![CDATA[<p>heise.de has released <a href="http://www.heise.de/developer/artikel/Episode-17-Einstieg-in-REST-921652.html">a new episode</a> of our <a href="http://www.heise.de/developer/podcast/">German SoftwareArchitekTOUR podcast</a>, the first of a two-part conversation I did with <a href="http://voelterblog.blogspot.com/">Markus Völter</a> on REST. </p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/02/heisede_developer_podcast_eins.html</link>
            <guid>http://www.innoq.com/blog/st/2010/02/heisede_developer_podcast_eins.html</guid>
            
            
            <pubDate>Fri, 12 Feb 2010 13:07:38 +0100</pubDate>
        </item>
        
        <item>
            <title>iPad Thoughts</title>
            <description><![CDATA[<p>There have been some (some? rather a few million) interesting posts regarding Apple's iPad. One worth reading in its entirety is <a href="http://plasmasturm.org/log/ipadworriers/">Aristotle Pagaltzis's</a>, from which I quote:</p>

<blockquote>
  <p>But how would the fundamental experience of the device suffer if Apple shipped a dev environment with the iPad, just like one used to be part of every home computer (incl. the Apple II)? Is that really an inconceivable proposition? Or heck, it could be a $20 download on the App Store for all I care. That’s no hurdle for a teenager, not even a big one for a preteen. Why must the iPad require a dev licence and a Mac to write code for? (Obviously: because that makes Apple a lot of money.)</p>
</blockquote>

<p>Anybody can build a development environment for the iPad/iPhone, this seems to be just a matter of enough commercial interest or enough open source enthusiasts to combine their forces. The real problem is the fact that the only way to get software onto an iPad is through the AppStore. I don't even believe it should be Apple who address the development environment aspect; I'm pretty sure that there'd be a great option for somebody else to build an awesome environment, perhaps based on a modern dynamic language, and this could be hosted on any platform to produce applications for the iPad. But you wouldn't be able to install the development environment itself to the iPad, as the AppStore approval policy explicitly forbids installation of any sort of interpreter, nor could you install applications built with it unless they go through the AppStore.</p>

<p>Apple's reasons for insisting on the AppStore as the only delivery method are understandable from a commercial point of view, at least for now. But ultimately, they'll harm both the users and Apple itself – which makes me pretty sure this will change – who knows, maybe even the first generation of the iPad OS will allow the user to install applications via some other means than the AppStore. My guess is that Apple will wait until they have a very firm position, similar to the way the dropped DRM from iTunes music once they no longer had to rely on it. </p>

<p>Until then, at least there's the set of interpreters built into Mobile Safari … </p>

<p>One line of reasoning that I don't really buy into, though, is the one related to "tinkering". As <a href="http://al3x.net/2010/01/28/ipad.html">Alex Payne writes</a>:</p>

<blockquote>
  <p>The thing that bothers me most about the iPad is this: if I had an iPad rather than a real computer as a kid, I’d never be a programmer today. I’d never have had the ability to run whatever stupid, potentially harmful, hugely educational programs I could download or write. I wouldn’t have been able to fire up ResEdit and edit out the Mac startup sound so I could tinker on the computer at all hours without waking my parents. The iPad may be a boon to traditional eduction, insofar as it allows for multimedia textbooks and such, but in its current form, it’s a detriment to the sort of hacker culture that has propelled the digital economy.</p>
</blockquote>

<p>I have some sympathy for these feelings because I have similar personal experience. But the whole things smells a little like complaining about not being able to tinker with your car anymore. The level of detailed fiddling you can do with any sort of device that becomes mainstream has been going down steadily – while my grandfather probably could have repaired a mild engine damage without too many problems, I'm pretty sure not too many people do this anymore today. I believe it's fine to be able to tinker on a totally different level, even if it's in the form of Web apps that run locally. The hypothetical development environment on the iPad – can you imagine what kind of <a href="http://scratch.mit.edu/">Scratch</a> one could build? – would be more than enough of a compensation from my point of view. </p>

<p>The feeling I understand not at all, though, is the one expressed by <a href="http://www.tbray.org/ongoing/When/201x/2010/01/27/iPad">Tim Bray</a>:</p>

<blockquote>
  <p>It’s probably a pretty sweet tool for consuming media, even given the unfortunate 4:3 aspect ratio. And consuming media is obviously a big deal for a whole lot of people. <br /> <br />For creative people, this device is nothing.</p>
</blockquote>

<p>Given the fact that I expect there to be millions of people who'll use an iPad to write, and paint, and sketch, using a multitude of applications built for the purpose, I beg to disagree.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/ipad_thoughts.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/ipad_thoughts.html</guid>
            
            
            <pubDate>Sun, 31 Jan 2010 20:23:06 +0100</pubDate>
        </item>
        
        <item>
            <title>WS-REST 2010</title>
            <description><![CDATA[<p>Call for Papers for <a href="http://ws-rest.org/">WS-REST 2010</a>, Paper Submission Deadline: February 8, 2010</p>

<h3>Call for Papers</h3>

<p>The First International Workshop on RESTful Design (WS-REST 2010) aims to provide a forum for discussion and dissemination of research on the emerging resource-oriented style of Web service design.</p>

<h3>Background</h3>

<p>Over the past few years, several discussions between advocates of the two major architectural styles for designing and implementing Web services (the RPC/ESB-oriented approach and the resource-oriented approach) have been mainly held outside of the research and academic community, within dedicated mailing lists, forums and practitioner communities. The RESTful approach to Web services has also received a significant amount of attention from industry as indicated by the numerous technical books being published on the topic.</p>

<p>This first edition of WS-REST, co-located with the WWW2010 conference, aims at providing an academic forum for discussing current emerging research topics centered around the application of REST, as well as advanced application scenarios for building large scale distributed systems.</p>

<p>In addition to presentations on novel applications of RESTful Web services technologies, the workshop program will also include discussions on the limits of the applicability of the REST architectural style, as well as recent advances in research that aim at tackling new problems that may require to extend the basic REST architectural style. The organizers are seeking novel and original, high quality paper submissions on research contributions focusing on the following topics:</p>

<ul>
<li>Applications of the REST architectural style to novel domains</li>
<li>Design Patterns and Anti-Patterns for RESTful services</li>
<li>RESTful service composition</li>
<li>Inverted REST (REST for push events)</li>
<li>Integration of Pub/Sub with REST</li>
<li>Performance and QoS Evaluations of RESTful services</li>
<li>REST compliant transaction models</li>
<li>Mashups</li>
<li>Frameworks and toolkits for RESTful service implementations</li>
<li>Frameworks and toolkits for RESTful service consumption</li>
<li>Modeling RESTful services</li>
<li>Resource Design and Granularity</li>
<li>Evolution of RESTful services</li>
<li>Versioning and Extension of REST APIs</li>
<li>HTTP extensions and replacements</li>
<li>REST compliant protocols beyond HTTP</li>
<li>Multi-Protocol REST (REST architectures across protocols)</li>
</ul>

<p>All workshop papers are peer-reviewed and accepted papers will be published as part of the ACM Digital Library. Two kinds of contributions are sought: short position papers (not to exceed 4 pages in ACM style format) describing particular challenges or experiences relevant to the scope of the workshop, and full research papers (not to exceed 8 pages in the ACM style format) describing novel solutions to relevant problems. Technology demonstrations are particularly welcome, and we encourage authors to focus on "lessons learned" rather than describing an implementation.</p>

<p>Papers must be submitted electronically in PDF format. Submit at the <a href="http://www.easychair.org/conferences/?conf=WSREST2010">WS-REST 2010 EasyChair installation</a>.</p>

<h3>Important Dates</h3>

<ul>
<li>Submission deadline: February 8, 2010, 23.59 Hawaii time</li>
<li>Notification of acceptance: March 1, 2010</li>
<li>Camera-ready versions of accepted papers: March 14, 2010</li>
<li>WS-REST 2010 Workshop: April 26, 2010</li>
</ul>

<h3>Program Committee Chairs</h3>

<ul>
<li>Cesare Pautasso, Faculty of Informatics, USI Lugano, Switzerland</li>
<li>Erik Wilde, School of Information, UC Berkeley, USA</li>
<li>Alexandros Marinos, Faculty of Engineering &amp; Physical Sciences, University of Surrey, UK</li>
</ul>

<h3>Program Committee</h3>

<ul>
<li>Rosa Alarcon, Pontificia Universidad Catolica de Chile</li>
<li>Subbu Allamaraju, Yahoo Inc., USA</li>
<li>Tim Bray, Sun Microsystems, USA</li>
<li>Bill Burke, Red Hat, USA</li>
<li>Benjamin Carlyle, Australia</li>
<li>Stuart Charlton, Elastra, USA</li>
<li>Joe Gregorio, Google, USA</li>
<li>Michael Hausenblas, DERI, Ireland</li>
<li>Rohit Khare, 4K Associates, USA</li>
<li>Frank Leymann, University of Stuttgart, Germany</li>
<li>Mark Nottingham, Yahoo Inc., Australia</li>
<li>Aristotle Pagaltzis, Germany</li>
<li>Ian Robinson, Thoughtworks, USA</li>
<li>Richard Taylor, UC Irvine, USA</li>
<li>Stefan Tilkov, innoQ, Germany</li>
<li>Steve Vinoski, Verivue, USA</li>
<li>Jim Webber, Thoughtworks, USA</li>
<li>Olaf Zimmermann, IBM Zurich Research Lab, Switzerland</li>
</ul>

<h3>Contact</h3>

<p>WS-REST Web site: http://ws-rest.org/ <br/>
WS-REST Email: chairs@ws-rest.org</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/wsrest_2010.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/wsrest_2010.html</guid>
            
            
            <pubDate>Thu, 07 Jan 2010 15:31:15 +0100</pubDate>
        </item>
        
        <item>
            <title>Are We Doing it Wrong?</title>
            <description><![CDATA[<p>Tim Bray has a <a href="http://www.tbray.org/ongoing/When/201x/2010/01/02/Doing-It-Wrong">very interesting post</a> on enterprise development – check out the comments. I&#8217;ve said something like this there too, but like to elaborate a bit:</p>

<p>I strongly believe that building your own software is an essential ingredient for a successful, information-centric company such as a bank, an insurance company, or even a telco. I think it&#8217;s an excellent idea to use commodity services in all areas where you don&#8217;t have, nor want to have, any competitive advantages. But you should build something on your own if you want to innovate.</p>

<p>I also wrote that while it&#8217;s pretty fashionable to deride the claims that enterprise software is &#8220;inherently more complex&#8221; than much of the Web stuff, it <em>is</em> in fact true sometimes. One of the reasons is the absurd complexity of laws in some countries, and the rate in which more and more complexity is added to them. If you&#8217;re in a regulated business, this tends to create a huge amount of complexity you simply can&#8217;t escape from (unless you change the laws, or rather the whole legislative and political process, of course).</p>

<p>Another source of complexity is the business side, coming up with more and more complex product requirements. In many Web companies, there&#8217;s no difference between the business and technology decision makers – perfect &#8220;business/IT alignment&#8221;. This simply isn&#8217;t true in most large businesses. As a tech person, you have a choice of quitting or adapting to it …</p>

<p>I still agree that many of the practices, technologies and tools used on the Web can be put to excellent use within the enterprise. But even if you are given free choice of weapons in terms of tools and methodology, the typical constraints can ruin your day pretty soon.</p>

<p>Anyway, while I see some issues with Tim&#8217;s post, I still think there&#8217;s a lot of truth in it. Given that I spend most of my time in enterprise contexts, I strongly believe <a href="http://www.innoq.com/blog/st/2009/09/the_web_in_the_enterprise.html">putting more of the Web into the enterprise</a> is an excellent idea. </p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/are_we_doing_it_wrong.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/are_we_doing_it_wrong.html</guid>
            
            
            <pubDate>Wed, 06 Jan 2010 12:08:32 +0100</pubDate>
        </item>
        
        <item>
            <title>Actor Thinking</title>
            <description><![CDATA[<p><a href="http://www.javalimit.com/2010/01/actor-thinking.html">Kresten Krab Thorup</a>:</p>

<blockquote>
  <p>For many years, I have been searching for what I call the "holy grail of concurrent programming." I have been looking for a set of abstractions as powerful as classes and objects which describes activities and their coordination. Just as was the case for the medieval quest for the holy grail, I am not alone. Many other researchers are searching for this. I remember that at the time when I started doing my Ph.D. in 1996, I was talking to Doug Lea about this subject; and he urged me to continue this line of thought. My thesis subject ended up going down another path, but the issue has persisted at the back of my mind, ready to jump up whenever I experienced new evidence that might guide me. <br /> <br/> For the last couple of years I have been pursuing these issues more persistently; as chief editor of the JAOO and QCon conferences I have invited speakers that have something related to this on their hearts and mind, and the last six months - since working more intensively with the Erlang programming language - they have started to grow into a more consistent picture. <br /> <br /> So here is a little essay and some ramblings on some of the things I have found out so far.</p>
</blockquote>

<p>Excellent stuff.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/actor_thinking.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/actor_thinking.html</guid>
            
            
            <pubDate>Tue, 05 Jan 2010 23:42:48 +0100</pubDate>
        </item>
        
        <item>
            <title>innoQ at [OOP 2010]</title>
            <description><![CDATA[<p>January 26-28 we'll be at OOP in Munich again. I'll do a talk on "<a href="http://www.sigs-datacom.de/konferenz/sessiondetails.html?tx_mwconferences_pi1%5BshowUid%5D=102&amp;tx_mwconferences_pi1%5Bpointer%5D=0&amp;tx_mwconferences_pi1%5Bmode%5D=1&amp;tx_mwconferences_pi1%5Bs%5D=0">REST with Java</a>", and we (<a href="http://www.innoq.com/de">innoQ</a>) will have a booth in the exhibition area, too (more about some of the stuff we'll talk about later). <a href="mailto:stefan.tilkov@innoq.com">Send me an e-mail</a> if you want to schedule a meeting …</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/innoq_at_oop_2010.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/innoq_at_oop_2010.html</guid>
            
            
            <pubDate>Tue, 05 Jan 2010 14:47:40 +0100</pubDate>
        </item>
        
        <item>
            <title>(German) DSL Unconference</title>
            <description><![CDATA[<p>Wie <a href="http://voelterblog.blogspot.com/2009/12/dsl-unconference-einladung.html">Markus Völter</a> schon ganz richtig schreibt:</p>

<blockquote>
  <p>Am 18./19. Februar findet in einem schönen Hotel in der Mitte Deutschlands (Details folgen :-)) eine zweitätige kleine Unconference (Open Space) rund um DSLs statt. Die Idee ist: miteinander reden, philosophieren, diskutieren, demonstrieren, coden, voneinander lernen - rund um DSLs, intern und extern. Also Dinge wie: Scala, Groovy, Ruby, Eclipse, MPS, Parser, etc. <br />Das ganze ist keine Schulung, jeder Teilnehmer muss etwas beitragen!</p>
</blockquote>

<p>Wir organisieren das gemeinsam ohne kommerziellen Hintergedanken, d.h. die Kosten werden geteilt (wer mit 200-250 Euro pro Person kalkuliert, liegt wahrscheinlich nicht falsch).</p>

<p>Bei Interesse an einer Teilnahme bitte eine kurze Mail mit einem Beitragsvorschlag per E-Mail an <a href="mailto:voelter@acm.org">Markus</a> oder <a href="mailto:stefan.tilkov@innoq.com">mich</a>, Rückfragen gerne auch hier in den Kommentaren.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/01/german_dsl_unconference.html</link>
            <guid>http://www.innoq.com/blog/st/2010/01/german_dsl_unconference.html</guid>
            
            
            <pubDate>Mon, 04 Jan 2010 17:13:07 +0100</pubDate>
        </item>
        
        <item>
            <title>Clojure/Lisp Readability</title>
            <description><![CDATA[<p>Tim Bray has put up an excellent set of <a href="http://www.tbray.org/ongoing/When/200x/2009/12/01/Clojure-Theses">theses on Clojure</a>. I can agree with most of them, but wonder about the idea that "Lisp is a handicap".</p>

<p>I understand where Tim comes from, and I fully admit that even after playing with Lisp, Scheme and Clojure for quite some time, I'm still not sure whether this is really an issue. I would only feel qualified to really comment on it once I have used it on a real project with some complexity. But what I found interesting is the example Tim gives:</p>

<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>apply</span> merge-with <span style='color:#808030; '>+</span>
  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>pmap</span> count-lines
    <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>partition-all</span> *batch-size*
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>line-seq</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>reader</span> filename<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>

<p>I find this particular example to be extremely readable if you read it from the inside out - the <code>reader</code> function presumably returns a reader for the file named <code>filename</code>; <code>line-seq</code> returns a (lazy) sequence of the lines in the file, <code>partition-all</code> cuts this into segments (using <code>*batch-size*</code> as the, well, batch size), <code>pmap</code> maps the function <code>count-lines</code> over the result in parallel, returning a list of maps; finally, <code>merge-with +</code> combines all of the values for the same keys in the map by adding them. (Obviously the source code is much more understandable than my prose version.)</p>

<p>I agree there is a ton of Lisp code out there that's intimidating, but I don't see this as a good example. Let's invent a language with similar expressiveness, but more traditional syntax:</p>

<p><pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>apply</span><span style='color:#808030; '>(</span>mergeWith<span style='color:#808030; '>(</span>plus<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>
  <span style='color:#800000; font-weight:bold; '>pmap</span><span style='color:#808030; '>(</span>countLines<span style='color:#808030; '>,</span> 
    <span style='color:#800000; font-weight:bold; '>partitionAll</span><span style='color:#808030; '>(</span>BATCH_SIZE<span style='color:#808030; '>,</span>
     <span style='color:#800000; font-weight:bold; '>lineSeq</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>reader</span><span style='color:#808030; '>(</span>filename<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>;</span>
</pre></p>

<p>I can't see how this would be easier to read. It's not the syntax (at least not in this case) that might be a problem if you're not used to it, it's the style of using nested function invocations – which I believe is something you get used to really quickly if using any kind of language that supports functional idioms.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2009/12/clojurelisp_readability.html</link>
            <guid>http://www.innoq.com/blog/st/2009/12/clojurelisp_readability.html</guid>
            
            
            <pubDate>Wed, 02 Dec 2009 09:34:10 +0100</pubDate>
        </item>
        
        <item>
            <title>Blogging</title>
            <description><![CDATA[<p>I enjoy Twitter, but I feel I'm missing something. Blogging forced me to spend a little more time on a subject – not as much as an writing an article does, and certainly way less than a book requires, but definitely more than what's needed to come up with 140 characters, 120 of which often end up being copied from somebody else.</p>

<p>So I'll try to update this place a little more often, even though the Web is probably littered with blogs that end up having famous last meta-entries like this one …</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2009/11/blogging.html</link>
            <guid>http://www.innoq.com/blog/st/2009/11/blogging.html</guid>
            
            
            <pubDate>Sun, 29 Nov 2009 17:36:10 +0100</pubDate>
        </item>
        
        <item>
            <title>QCon SF 2009: Don Box &amp; Amanda Laucher, Codename &quot;M&quot;: Language, Data, and Modeling, Oh My!</title>
            <description><![CDATA[<p>These are my unedited notes from Don Box &amp; Amanda Laucher's talk about Codename "M": Language, Data, and Modeling, Oh My!</p>

<ul>
<li>[Don has promised not to tweet. That's a good start.]</li>
<li>Interesting similarities btw/ M and MPS</li>
<li>M is a language for data - one of the most interesting places of data is a sequence of Unicode code points</li>
<li>Great support for text processing perceived as critical</li>
<li>Example: extract some data from text - tweets</li>
<li>Intellipad - default environment for writing grammar files, this is where tool support shows up first, then in Visual Studio</li>
<li><p>M code for a language definition (a function from text to something else, declaratively specified):</p>

<pre><code>module QCon
{
    language Simple
    {
        syntax Main = empty;
    }
}
</code></pre></li>
<li><p>Main is the rule that is the entry point</p></li>
<li>Open file in three-pane (or rather, four-pane) mode</li>
<li>Show source file, grammar, show output - empty file yields Main []</li>
<li>Amanda makes a great assistant ;-)</li>
<li>Non-empty file produces errors</li>
<li>Change "empty" to "any" - file with a single character works, more than that produces errors; change to any+, validates again</li>
<li><p>Simple language for interpreting tweets:</p>

<pre><code>module QCon
{
    language Simple
    {
        syntax Main = Tweet;
        syntax Tweet = Content*;
        syntax Content
            = RawText
            | Handle
            | HashTag;
        token RawText = (any - ("#"|"@"))+
        token Handle = "@" Name;
        token HashTag = "#" Name;
        token Name = (any - ("@|"#"|" ""))+;
    }
}
</code></pre></li>
<li><p>regular expressions at the token layer, context-free grammar at the syntax level</p></li>
<li>Amanda: "Only crap languages make you define something before you have to use it"</li>
<li>Discussion betwen Josh, Amanda, Don about whether or not the grammar is correct</li>
<li>Good point about interactive grammar development using the three-pane editor</li>
<li>Pattern names used to display data in a structured way</li>
<li>Adding @Classification["Keyword"] syntax-colors the source</li>
<li>M is structurally typed</li>
<li>M consists of lists and records</li>
<li>Generating the right-hand side:</li>
<li>Intellipad crashes! [Boom!] :-)</li>
<li>The spec for M is licensed under the Microsoft OSP (which makes people as happy as they can be working with Microsoft)</li>
<li>Javascript-based implementation of parts of the language; subset of the three-pane mode</li>
<li>Toolchain is written in C#, parser written in M, more and more compilers written in M</li>
<li><p>Intellipad crashes! Again! [Boom!] :-)</p>

<pre><code>module QCon
{
    language Simple
    {
        syntax Main = v:Tweet =&gt; v;
        syntax Tweet = v:Content* =&gt; v;
        syntax Content
            = v:RawText =&gt; v
            | v:Handle =&gt; v
            | v:HashTag =&gt; v;
        token RawText = (any - ("#"|"@"))+
        token Handle = "@" v:Name =&gt; v;
        token HashTag = "#" v:Name =&gt; v;
        token Name = (any - ("@|"#"|" ""))+;
    }
}
</code></pre></li>
<li><p>bubbles up the actual content, result is just a list of the strings extracted</p>

<pre><code>module QCon
{
    language Simple
    {
        syntax Main = v:Tweet =&gt; v;
        syntax Tweet = v:Content* =&gt; v;
        syntax Content
            = v:RawText =&gt; v
            | v:Handle =&gt; v
            | v:HashTag =&gt; v;
        token RawText = v:(any - ("#"|"@"))+ =&gt; { Kind =&gt; "RawText", Text =&gt; v }
        token Handle = "@" v:Name =&gt; { Kind =&gt; "Handle", Name =&gt; v };
        token HashTag = "#" v:Name =&gt; { Kind =&gt; "HashTag", Topic =&gt; v };
        token Name = (any - ("@|"#"|" ""))+;
    }
}
</code></pre></li>
<li><p>Question from Josh: Isn't this mixing lexing and production rules? Don: Goal is to have no difference, but it can be pulled out</p></li>
<li>Next: Consuming stuff</li>
<li>Using TDD to Don's tweets</li>
<li>VS project includes language grammar defined earlier</li>
<li>Amanda: Can one debug a grammar? Don: Answered later</li>
<li>M runtime can be hosted inside a C# program</li>
<li>Recently stopped internally to use .NET 3.5/VS 2008, now exclusively on .NET 4 and VS 2010</li>
<li>Language defintion is included in the program binary </li>
<li><p>Showing off some </p>

<pre><code>var language = Language.load(/* MImage */ typeof(Program).Assembly, "QCon", "Simple"); // yields runtime that can parse a program
dynamic result = language.ParseString(input);
bool hasHashTag = false;
foreach (var content in result)
{
    hasHashTag = content.Kind == "HashTag";
    if (hasHashTag)
        break;
}
AssertEqual(true, hashHashTag);
</code></pre></li>
<li><p>Demo is actually working</p></li>
<li>Change AssertEqual to Assert.IsTrue to get around exception thrown</li>
<li>Question from Ian Robinson: Q. Can LINQ be used to walk the result? A. Not yet, as dyamic and LINQ don't mix yet</li>
<li>Not going to write any more C# types, has written all that are in him ;-)</li>
<li><p>"This will fail!"</p>

<pre><code>var language = Language.load(/* MImage */ typeof(Program).Assembly, "QCon", "Simple"); // yields runtime that can parse a program
dynamic result = language.ParseString(input);
var query = (from content in ((IEnumerable)result).OfType&lt;dynamic&gt;()
            where content.Kind == "HashTag"
            select content).Any();
Assert.IsTrue(query);
</code></pre></li>
<li><p>It failed indeed.</p></li>
<li>"This talk is not about integration of two features I don't work on"</li>
<li>M is optionally typed, structurally typed</li>
<li>optional typing: <code>syntax Bob = any* : Integer32 =&gt; 42;</code></li>
<li>only partially plumbed in the current version</li>
<li><p>Example for structural typing (not really working yet):</p>

<pre><code>module Ola 
{
    type HashTagRec = 
    { 
        Kind : Text where value == "HashTag";
        Topic : Text;
    }
}
</code></pre></li>
<li><p>Rudimentary grammar debugging: set breakpoints in input source text; 4th pane shows up, shows matching stack</p></li>
<li>Syntactical and semantical editing support</li>
<li>Semantics relies on hooks that are not there yet</li>
<li>M is built using an M Grammar</li>
<li>Language completion for M is built using C#</li>
<li>Ambiguators for GLR need to be written in C#</li>
<li>One of the metrics used to evaluate the language: XML. There is a grammar for XML, briefly demoed.</li>
<li>MPS guys have a different religion – Microsoft believes people have a text editor they love</li>
<li><code>&lt;?magnum PI?&gt;</code> :-)</li>
<li>Comment from Martin Fowler: Main difference to classic tools such as ANTLR is the dynamic - no code generation needed</li>
<li>Comment from Ola Bini: Didn't see the type-checking and debugging before – now he's impressed</li>
</ul>
]]></description>
            <link>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_don_box_amanda_la.html</link>
            <guid>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_don_box_amanda_la.html</guid>
            
            
            <pubDate>Fri, 20 Nov 2009 23:34:03 +0100</pubDate>
        </item>
        
        <item>
            <title>QCon SF 2009: Brian Guthrie, Internal DSLs in Groovy, Ruby, and Others</title>
            <description><![CDATA[<p>These are my unedited notes from Brian Guthrie's talk about Internal DSLs in Groovy, Ruby, and Others</p>

<ul>
<li>A DSL is a computer programming language of limited expressiveness focused on a particular domain</li>
<li>PHP originally started out as a DSL, but is no more</li>
<li>SQL is an excellent example of a DSL</li>
<li>Ant as an example of focus on a particular domain</li>
<li>2 flavors of DSLs internal and external</li>
<li>An internal DSL is a kind of API</li>
<li>Expressiveness matters more than the implementation details</li>
<li>methods in a DSL make little sense out of context</li>
<li>Example: fluid interface as DSL, <code>calendar.add("dentist").from(fourPM).to(fivePM).at("123 N Southwest Ave");</code></li>
<li>Example of something that hides intent in lots of ceremony</li>
<li>be declarative, be accepting</li>
<li>every API is a conversation - with yourself, your team members, your business</li>
<li>Patterns for internal DSLs</li>
<li>method chaining | type transmogrification</li>
<li>Explanation of fluid interface pattern using the Calendar example</li>
<li>Example: Mocha, Ruby mocking framework as another example</li>
<li>the finishing problem: what's the final thing that gets returned?</li>
<li>nested closures | semantic model</li>
<li>a lot of times, a DSL is an interface to a library, but there should be an underlying model</li>
<li><p>Awsymandias: DSL to describe Amazon EC2 environments</p>

<p>stack = define ... do |s|
 s.instance :db, :instance_type => "m1.large"
end
stack.launch</p></li>
<li><p>(classical model of using ruby class methods and blocks)</p></li>
<li>definition should != domain model</li>
<li>high-level DSL should be separate from the domain model [I very much agree; much of it is due to the tricks you have to do to get something that reads nicely]</li>
<li>keep domain model clean</li>
<li>literal extension | string polishing</li>
<li>monkey patching and converting something that's nearly code to actual code</li>
<li>Groovy example of a simple DSL, similar to what you'd do with Hpricot</li>
<li>digression: shows how to re-open classes in Ruby, using things like <code>5.seconds</code></li>
<li>shotgun approach to opening classes</li>
<li>Groovy's category support enables clean addition of methods to classes</li>
<li>[Didn't know Groovy has some kind of extension method support, pretty neat]</li>
<li>literal extension | method chaining</li>
<li>Example: jQuery uses Javascripts prototype model to add functions to objects as needed to support fluid method chains</li>
<li>method chaining andChaining andChaining</li>
<li>example: Ioke</li>
<li>DSL for Starbuck's weird combinations </li>
<li>ispec is the coolest spec framework ever</li>
<li>a DSL is an API, a language, a conversation</li>
<li>be declarative</li>
<li>know your audience</li>
<li>use fluent interfaces, message chains</li>
<li>nested function | closure</li>
<li>audience comment: Showing a complex API that's simplified misses the point, which is about having domain experts understand the language [I disagree, the domain expert in this example might be someone who understands the simplified code, but not the convoluted mess it's become]</li>
<li>Martin Fowler: both DSLs for programmers and non-programmers are useful</li>
<li>Q. Another useful pattern: natural language interpretation, Cucumber as an example</li>
<li>Q. Real world use? A. Often used in high-level functional test specs</li>
</ul>
]]></description>
            <link>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_brian_guthrie_int.html</link>
            <guid>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_brian_guthrie_int.html</guid>
            
            
            <pubDate>Fri, 20 Nov 2009 19:58:36 +0100</pubDate>
        </item>
        
        <item>
            <title>QCon SF 2009: Stu Charlton, From Agile Development to Agile Operations</title>
            <description><![CDATA[<p>These are my unedited notes from Stu Charlton's talk about From Agile Development to Agile Operations at QCon SF 2009</p>

<ul>
<li>Cloud computing changing the game between development and operations</li>
<li>Suggested design goals for cloud computing</li>
<li>Integrated approach to application design, development and operations</li>
<li>Tennis match going on between the dev and ops side</li>
<li>Performance, scale and availability of design and operational decisions</li>
<li>You usually can't just tell the platform to scale your app</li>
<li>The offerings of commercial companies are mostly the result of buying companies that cover either operations or development</li>
<li>How can agile practices be applied to operations? </li>
<li>(Nice quote "Mimicking the illusion of working software by building a lot of documents")</li>
<li>Development values what is built; operations values what does not happen</li>
<li>Automated build, test, integration - what's the test environment in operations?</li>
<li>Not really test, rather planning and rehearsal  </li>
<li>Autonomous teams – in operations, there's always a lot of legacy dependencies, need for situational awareness</li>
<li>Continuous integration - in operations, what's the source code?</li>
<li>Examples: Why can't two servers communicate? security, server configuration, network configuration, firewall …</li>
<li>Example: What do I need to scale out? Easy, simply start up more machines … no, not really: impacts on other systems, e.g. security systems, load balancers, monitoring, CMDB, service desk. Architectural issues: stateful or stateless nodes, repartitioning; limiting the scale out</li>
<li>Example: What is the authorative reality? What's the different between the current state and the one I want</li>
<li>In operations, transitional states matter a lot more than in development</li>
<li>What we have now: on demand provisioning of commodity infrastructure and constrained applications</li>
<li>What we still need to consider: configuration as data and as code; collaboration on design, development and operations</li>
<li>What funds a project is usually very different form what funds operations</li>
<li>IT complexity is overwhelming - not sure whether this is accidental or inherent complexity</li>
<li>Little tooling for collaboration in operations</li>
<li>Integrated view of operations and design: Different planes – management plane, cloud control plane, application plane</li>
<li>All of the vendors are working on building a platform for controlling cloud resources</li>
<li>Key question: what's the source code? </li>
<li>Bottom-up approach (based on scripts, recipes, runbooks)</li>
<li>Chef: DSL for describing infrastructure </li>
<li>Puppet used by Google to standardize all OS X desktops </li>
<li>Trying to use Maven in operations </li>
<li>Top-down (modeled viewpoints, enterprise architecture, configuration models)</li>
<li>UML profiles, MS uses Oslo to describe different viewpoint models</li>
<li>Configuration models: W3C SML - now it's been standardized, nobody's using it</li>
<li>Model-driven Collaborative Application Design </li>
<li>"All modeling is programming, all programming is debugging" (Neil Gunther)</li>
<li>Chef is very popular because it's easy; Puppet is declarative, which makes it hard to debug</li>
<li>Analogy: SQL query plan; tools could derive a plan from a declaratively specified model</li>
<li>Accounting barriers to Agile operations</li>
<li>Capex vs. Opex is only partially addressed in reality, as HW is only part of the cost</li>
<li>Promising approach: Time-driven activity-based costing; activity-based costing is an approach used to make consultants rich in the 80s, but in combination with time-driven seems useful</li>
<li>How to arrive at an integrated approach: </li>
<li>distributed, autonomous descriptions of the complete configuration</li>
<li>document-based description as the basis for collaboration</li>
<li>The way to enable collaboration of autonomous owners is to link configuration pieces via hyperlinks [he is a REST guy, after all]</li>
<li>Model-driven approach because something is needed that's both data and code</li>
<li>Problem with data: hard to debug</li>
<li>Problem with code: hard to see what's in it</li>
<li>Mentions Lisp as data is code/code is data example – it's been done before</li>
<li><p>Elastra approach: "Elastic Modeling Languages" (Open Source licensing): EMML, ECML, EDML - doesn't expect these to become standards, but part of the debate</p></li>
<li><p>Q. Applicable to private clouds? A. Very much so.</p></li>
<li>Q. There's a trend of expanding Continuous Integration to Continous Deployment. Does this apply? A. Modeling is not a conflict to an agile approach, small changes could be in production, no need to do things in a monolithic way. Both exist and need to co-exist. </li>
<li>Q. (rather a comment) one can start with a DSL, validate it, check dependencies etc. – bottom up is not a conflict A. A textual DSL is just a model.</li>
<li>Q. Would "structure" be a better term than model? A. That would only part of it. "Model" has many connotations people don't like, which is why people start using DSL </li>
<li>Q. Connection of OSS/Telco experience? A. One example is Erlang and Mnesia showing up as a technology in the Cloud space.</li>
<li>Q. Are there new technologies in the security space? A. Federated ID technologies getting some tractions, e.g. Azure using WS-Federation, SAML and OAuth are both growing. Directories still primary way.</li>
<li>Q. Is there a directory in the cloud? A. Concept of "virtual identity" instead, e.g. OpenID. SAML can be used with some Google apps, some Salesforce.com apps</li>
<li>Q. As an alternative to complex tooling, can co-locating/integrating developers and operations people help? A. Two approaches: Let's not do ops, let's just have developers do operations. Not good, usually a different value system. Second: Co-locate them and create autonomous teams. Good approach, larger Web shops do this - still a shared service team. Classic scaling problem: lots of interdependencies between teams. Tooling can help. Sometimes you even have to separate teams due to regulatory reasons.</li>
</ul>
]]></description>
            <link>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_stu_charlton_from.html</link>
            <guid>http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_stu_charlton_from.html</guid>
            
            
            <pubDate>Fri, 20 Nov 2009 02:31:07 +0100</pubDate>
        </item>
        
    </channel>
</rss>
