<?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>2010-03-16T07:25:38Z</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>Blogging from Emacs</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/03/blogging_from_emacs.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3013</id>

    <published>2010-03-16T09:18:33Z</published>
    <updated>2010-03-16T07:25:38Z</updated>

    <summary>Playing around with Emacs weblogger.el and new Twitter feeds</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>heise.de Developer Podcast: Einstieg in REST</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/02/heisede_developer_podcast_eins.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3008</id>

    <published>2010-02-12T12:07:38Z</published>
    <updated>2010-02-12T12:07:56Z</updated>

    <summary>heise.de has released a new episode of our German SoftwareArchitekTOUR podcast, the first of a two-part conversation I did with Markus Völter on REST....</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>iPad Thoughts</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/ipad_thoughts.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3007</id>

    <published>2010-01-31T19:23:06Z</published>
    <updated>2010-01-31T19:24:31Z</updated>

    <summary>There have been some (some? rather a few million) interesting posts regarding Apple&apos;s iPad. One worth reading in its entirety is Aristotle Pagaltzis&apos;s, from which I quote: But how would the fundamental experience of the device suffer if Apple shipped...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>WS-REST 2010</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/wsrest_2010.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3006</id>

    <published>2010-01-07T14:31:15Z</published>
    <updated>2010-01-07T14:31:16Z</updated>

    <summary>Call for Papers for WS-REST 2010, Paper Submission Deadline: February 8, 2010 Call for Papers 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...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>Are We Doing it Wrong?</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/are_we_doing_it_wrong.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3004</id>

    <published>2010-01-06T11:08:32Z</published>
    <updated>2010-01-06T11:08:51Z</updated>

    <summary>Tim Bray has a very interesting post on enterprise development – check out the comments. I&amp;#8217;ve said something like this there too, but like to elaborate a bit: I strongly believe that building your own software is an essential ingredient...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>Actor Thinking</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/actor_thinking.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3005</id>

    <published>2010-01-05T22:42:48Z</published>
    <updated>2010-01-07T07:05:43Z</updated>

    <summary>Kresten Krab Thorup: For many years, I have been searching for what I call the &quot;holy grail of concurrent programming.&quot; I have been looking for a set of abstractions as powerful as classes and objects which describes activities and their...</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.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>
]]>
        

    </content>
</entry>

<entry>
    <title>innoQ at [OOP 2010]</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/innoq_at_oop_2010.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3003</id>

    <published>2010-01-05T13:47:40Z</published>
    <updated>2010-01-05T13:48:50Z</updated>

    <summary>January 26-28 we&apos;ll be at OOP in Munich again. I&apos;ll do a talk on &quot;REST with Java&quot;, and we (innoQ) will have a booth in the exhibition area, too (more about some of the stuff we&apos;ll talk about later). Send...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>(German) DSL Unconference</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2010/01/german_dsl_unconference.html" />
    <id>tag:www.innoq.com,2010:/blog/st//3.3002</id>

    <published>2010-01-04T16:13:07Z</published>
    <updated>2010-01-04T16:13:55Z</updated>

    <summary>Wie Markus Völter schon ganz richtig schreibt: 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,...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>Clojure/Lisp Readability</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/12/clojurelisp_readability.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.3001</id>

    <published>2009-12-02T08:34:10Z</published>
    <updated>2009-12-02T08:35:48Z</updated>

    <summary>Tim Bray has put up an excellent set of theses on Clojure. I can agree with most of them, but wonder about the idea that &quot;Lisp is a handicap&quot;. I understand where Tim comes from, and I fully admit that...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>Blogging</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/blogging.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.3000</id>

    <published>2009-11-29T16:36:10Z</published>
    <updated>2009-11-29T16:40:29Z</updated>

    <summary>I enjoy Twitter, but I feel I&apos;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...</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 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>
]]>
        

    </content>
</entry>

<entry>
    <title>QCon SF 2009: Don Box &amp; Amanda Laucher, Codename &quot;M&quot;: Language, Data, and Modeling, Oh My!</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_don_box_amanda_la.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2999</id>

    <published>2009-11-20T22:34:03Z</published>
    <updated>2009-11-20T22:34:37Z</updated>

    <summary><![CDATA[These are my unedited notes from Don Box &amp; Amanda Laucher's talk about Codename "M": Language, Data, and Modeling, Oh My! [Don has promised not to tweet. That's a good start.] Interesting similarities btw/ M and MPS M is a...]]></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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>QCon SF 2009: Brian Guthrie, Internal DSLs in Groovy, Ruby, and Others</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_brian_guthrie_int.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2998</id>

    <published>2009-11-20T18:58:36Z</published>
    <updated>2009-11-20T19:02:27Z</updated>

    <summary>These are my unedited notes from Brian Guthrie&apos;s talk about Internal DSLs in Groovy, Ruby, and Others A DSL is a computer programming language of limited expressiveness focused on a particular domain PHP originally started out as a DSL, but...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>QCon SF 2009: Stu Charlton, From Agile Development to Agile Operations</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_stu_charlton_from.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2997</id>

    <published>2009-11-20T01:31:07Z</published>
    <updated>2009-11-20T01:32:11Z</updated>

    <summary>These are my unedited notes from Stu Charlton&apos;s talk about From Agile Development to Agile Operations at QCon SF 2009 Cloud computing changing the game between development and operations Suggested design goals for cloud computing Integrated approach to application design,...</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>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>
]]>
        

    </content>
</entry>

<entry>
    <title>QCon SF 2009: Adam Wiggins, Architecting for the Cloud: Horizontal Scalability via Transient, Shardable, Share-Nothing Resources</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_adam_wiggins_arch.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2996</id>

    <published>2009-11-20T00:30:25Z</published>
    <updated>2009-11-20T00:30:26Z</updated>

    <summary>These are my unedited notes from Adam Wiggins&apos;s talk about Architecting for the Cloud: Horizontal Scalability via Transient, Shardable, Share-Nothing Resources at QCon SF 2009 Heroku is a platform to transparently run existing Ruby and Ruby on Rails applications in...</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>These are my unedited notes from Adam Wiggins's talk about Architecting for the Cloud: Horizontal Scalability via Transient, Shardable, Share-Nothing Resources at QCon SF 2009</p>

<ul>
<li>Heroku is a platform to transparently run existing Ruby and Ruby on Rails applications in the cloud</li>
<li>Heroku has over 40,000 applications, not bad for a startup with 50 guys</li>
<li>Automatically scaling applications without code changes "scale my app" slider</li>
<li>A lot of it due to enabling factors - virtualization as a service</li>
<li>Moore's law at an end – buying a larger box is no longer a good answer</li>
<li>Scaling out instead scaling up</li>
<li>First ingredient: Shardable resources</li>
<li>Resource examples: Database, Caching, HTTP Router, Message Bus</li>
<li>Making these resources horizontally scalable means making the app scalable without changing it</li>
<li>memcached – the father of all modern shardable resources</li>
<li>Hashtable in the sky</li>
<li>memcached built by the LiveJournal guys - one of the first big Web properties</li>
<li>Facebook runs 800 memcached servers supplying 28 TB of memory - all of these appear as one resource to the application</li>
<li>Why is it easy to scale out memcached so widely while one can't do that with MySQL?</li>
<li>Principles: Transient, Shardable, Share-nothing</li>
<li>Transient: any node in the memcached cluster can be lost</li>
<li>Shardable: Client lookup by "hashring": load distributed by clients</li>
<li>Share nothing: Nodes are unware of each other</li>
<li>Is memcached cheating? after all it doesn't really have any state</li>
<li>No - the same approach can be applied to any type of resource</li>
<li>CouchDB: document database with eventual consistency </li>
<li>Multiversion concurrency control instead of locking - comparable to a distributed source control system</li>
<li>CouchDB is a transient, shardable, share-nothing DB</li>
<li>http://books.couchdb.org/relax/ - free copy of the book draft available, recommended as a description of the new kind of architecture</li>
<li>Next example: Hadoop. Flightcaster, Heroku customer, does massive processing using Hadoop</li>
<li>Redis - basically memcached with persistence; shards with hashring; lists and sets; extremely fast and lightweight</li>
<li>Varnish - like Squid, but horizontally scalable; combine with ngx_http_upstream_consistent_hash for hashring-style access</li>
<li>Each varnish node only holds parts of the cached data; hashring approach ensures correct server is hit</li>
<li>RabbitMQ, basically thrown in because he likes it so much - cross-language messaging bus</li>
<li>Erlang is used quite a bit at Heroku: Erlang is share-nothing - high concurrency, no mutable variables (in other words: your variables don't vary), lightweight processes</li>
<li>Erlang used for information exchange and routers - Principles such as shared-nothing, transient, shardable built in to the language</li>
<li><p>Horizontal scalability promises to shatter the ceiling of scalability - but only if we architect resources to be shardable, transient, share-nothing</p></li>
<li><p>Q. Cassandra? A. Hasn't looked into it, but seems to be well-aligned with these ideas.</p></li>
<li>Q. Experience in scaling SQL databases? A. Do this the same everybody else does, but there's a lot of pain because it doesn't fit the cloud. Desaster recovery is one of the major challenges with a SQL DB, much harder than with the new DB models</li>
<li>Q. How easy is it to backup CouchDB to another data center? A. It's so easy that it's almost laughable, CouchDB simply uses HTTP. Latest version of Ubuntu ships with CouchDB to replicate address book and other data between machines [See, just like Lotus Notes ;-)] </li>
<li>Q. Details about "slider for scaling"? A. Very quick way to control the number of processes for Web requests and workers; frees you from having to decide whether to put more processes on the existing boxes or add new ones.</li>
<li>Q. Any downsides to a document database? A. SQL databases are great at ad-hoc queries, not something document DBs are very good at. SQL is a functional programming language [ed. Only as long as you only talk about SELECT …]</li>
</ul>
]]>
        

    </content>
</entry>

<entry>
    <title>QCon SF 2009: Michael Nygard, Software Architecture for Cloud Applications</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/11/qcon_sf_2009_michael_nygard_so.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2995</id>

    <published>2009-11-19T22:51:39Z</published>
    <updated>2009-11-19T22:51:41Z</updated>

    <summary>These are my unedited notes from Michael Nygard&apos;s talk about Software Architecture for Cloud Applications at QCon SF 2009. Anything as vaguely defined as Cloud Computing requires some up-front definition at the beginning of each talk There are risks in...</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>These are my unedited notes from Michael Nygard's talk about Software Architecture for Cloud Applications at QCon SF 2009.</p>

<ul>
<li>Anything as vaguely defined as Cloud Computing requires some up-front definition at the beginning of each talk</li>
<li>There are risks in moving to cloud computing, despite what the cheerleaders will tell you</li>
<li>Definition of Cloud, Grid, Utility – grid as parallelized, distributed, heterogenous services, utlity as a pay-per-use model; IaaS, PaaS, SaaS</li>
<li>Grid computing - most visible example SETI@home; getting hold of a large number of systems: moving data to the computation</li>
<li>Another example LHC: After filtering, each collision creates 15 TB of data</li>
<li>If CERN processed the data themselves, it would be a choice between heating the town or running the datacenter</li>
<li>More than 100,000 CPUs, 10 PB of image data each year</li>
<li>Software platform abstracts away the hardware differences - using GLOBUS</li>
<li>Grid Computing is really about these very large-scale problems</li>
<li>Utility Computing: Not Cloud Computing, not IaaS - just a billing method</li>
<li>Financial flexbility, not a lot of engineering</li>
<li>Good example: holiday volumes at a retailer - overspending 10 out of 12 months</li>
<li>Focus of the talk: IaaS/Cloud Computing</li>
<li>4 trends: virtualization, commoditization of hardware, horizontally scalable architecture - created the problem of rapid provisioning</li>
<li>Virtualization vendors tend to underplay the difference to Cloud computing</li>
<li>Differences: 4 key questions: Who allocates resources? Who deploys virtual machines? How quickly can new resources be allocated? Is provisioning under human or programmatic control? With virtualization, the answer is administrators, administrators, depends on the approval process, human; in the cloud, it's users, Users, minutes, programmatic</li>
<li>Cloud is generic computing platform, zero lead time, hardware appears homogeneous; specialized hardware is abstracted away and turned into declarative aspects</li>
<li>Cloud computing is like corn farming in Iowa … tiny margin, large fixed costs, scale is essential; small providers won't be around long</li>
<li>Doesn't get why remoteness is supposed to be a key aspect of Cloud Computing - e.g. Private Clouds are just fine</li>
<li>Easiest way to prepare your app for CC: Don't do anything</li>
<li>Advantages to Gain Scalability, Bundling, Ephemerality, Risks to Mitigate: Availability, Geography, Ephemerality</li>
<li>Amazon EC2 examples; Quirks: "Clean boot" is really clean, local storage not persistent, IP addresses assigned randomly</li>
<li>Advantage: Bundling, i.e. installing stuff on a pre-configured image, then bundling and storing the new image in S3</li>
<li>Can be part of the build process - turn out fully bootable machine images</li>
<li>Half of all failures arise within 24h after deployment of a change</li>
<li>The plus side of ephemerality: Do testing, after successful UAT, switch production IP to new system - keep old one running to be able to switch back quickly</li>
<li>No more deployments to production servers </li>
<li>Schema version conflicts: Old and new version may talk to the same DB</li>
<li>Multiple way to address handling of concurrent versions - advice: Don't accept downtime</li>
<li>Scalability patterns: the master/worker pattern</li>
<li>Work is enqueued, master looks at average completion time and creates more workers as needed</li>
<li>Examples: New York Times, Animoto (hoping for new examples soon)</li>
<li>Getting a few hundred servers to user over a weekend …</li>
<li>Explanation of Map/Reduce, Hadoop, HDFS - blend between Cloud and Grid</li>
<li>Amazon Elastic Map Reduce abstracts away from topology issues of using pre-configured Hadoop images</li>
<li>Horizontal, read-only replication as a scalability approach - works with most traffic </li>
<li>DB and Web Server can run on the same machine if it's just a read-only copy</li>
<li>Problem: Load balancer requires configuration, needs to know which nodes are available - changes often requires reboot</li>
<li>"Autoscaled load balanced group" addresses this - new nodes are automatically added to the pool of machines load is distributed to</li>
<li>If Oprah mentions you on Twitter, you're still dead</li>
<li>Natural affinity between Cloud Computing and Oopen Source</li>
<li>What about NoSQL? Makes a lot of sense, but relational DBs work, too</li>
<li>Scaling with caching servers such as memcached, GigaSpaces, Oracle Coherence, Terracotta</li>
<li>Every time you use virtualization, I/O througput suffers</li>
<li>SLA of Amazon EC2 is defined in terms of the entire zone</li>
<li>Guaranteed EBS availability is higher than that of a single disk, but still the risk needs to be mitigated</li>
<li>Snapshotting to S3 is one level of mitigating; transferring the snapshot to another availability zone addresses is further</li>
<li>Load balancing group across availability zones</li>
<li>Right now running a number of servers on the departmental secretary's credit card; after all, computing resources are just office supplies</li>
<li>Perception of risk of using the Cloud - real security professionals talk about the degree of risk, not about absolutes</li>
<li>What's missing is data about threats, their frequency, and their impact</li>
<li>Wouldn't it be horrible if … "WIBHI" reaction doesn't help</li>
<li>Cloud Security Alliance works on standards regarding this</li>
<li>Real risks: Control plane threats, patent shutdowns, lack of risk management info</li>
<li>Security facilities to apply: transport level encryption, e.g. SSL; storage level encryption; access control (security groups in AWS); control plane/multi-tenancy: outside of your control</li>
<li>Cloud Computing offers significant cost and time-to-market advantages</li>
<li>From Q&amp;A: Main advantage of IaaS as opposed to PaaS: Adoption is much easier</li>
</ul>
]]>
        

    </content>
</entry>

</feed>
