<?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>Sun, 22 Aug 2010 18:43:19 +0100</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>The Ultimate Clojure Workshop - In Frankfurt!</title>
            <description><![CDATA[<p>It's no secret that I've become I big fan of <a href="http://clojure.org/">Clojure</a> in the last year or so. I've done three talks, collaborated on a series of print articles (<a href="http://www.sigs-datacom.de/fileadmin/user_upload/zeitschriften/js/2010/02/neppert_tilkov_JS_02_10.pdf">part 1</a>, <a href="http://www.sigs-datacom.de/fileadmin/user_upload/zeitschriften/js/2010/03/neppert_tilkov_JS_03_10.pdf">2</a> and <a href="http://www.sigs-datacom.de/fileadmin/user_upload/zeitschriften/js/2010/04/neppert_tilkov_JS_04_10.pdf">3</a>) and <a href="http://www.heise.de/developer/artikel/Clojure-Ein-pragmatisches-Lisp-fuer-die-JVM-1030144.html">an online article</a> to promote it as much as I can, and I think I made up with enthusiasm for my lack of practical experience. But I'm definitely not experienced enough with the language to do a multi-day workshop that would stand up to some tough questions. On the contrary, in fact I'd <em>love</em> to attend an advanced workshop done by some really smart folks who have more than introductory-level knowledge.</p>

<p>So I got in touch with two of the most respected Clojure folks in Europe, <a href="http://clj-me.cgrand.net/">Christophe Grand</a> and <a href="http://www.bestinclass.dk/blog.html">Lau B. Jensen</a>, and asked them whether they'd be interested in doing one of their conj-labs trainings in Germany. And they agreed in exchange for my promise to help them a little with regards to marketing it around here. Which I've gladly agreed to do :-)</p>

<p>So, mark the date: From 26 to 28 October, Frankfurt will be the place to learn about one of the coolest programming languages on the planet. What are you waiting for? <a href="http://www.conj-labs.eu/">Find out more</a>, <a href="http://www.conj-labs.eu/registration.html">register now</a>, and please help spread the word.</p>

<p>(Next up: A bunch of good reasons in German to use to help convincing your boss, if you happen to have one – stay tuned.)</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/08/the_ultimate_clojure_workshop.html</link>
            <guid>http://www.innoq.com/blog/st/2010/08/the_ultimate_clojure_workshop.html</guid>
            
            
            <pubDate>Sun, 22 Aug 2010 18:43:19 +0100</pubDate>
        </item>
        
        <item>
            <title>Pragmatic SOA Beyond Buzzwords and Flamewars</title>
            <description><![CDATA[<p>InfoQ has put up <a href="http://www.infoq.com/presentations/Pragmatic-SOA">a video of my QCon London presentation</a>. Too bad the animations in the slides aren't included -- spoils some of the fun. </p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/08/pragmatic_soa_beyond_buzzwords.html</link>
            <guid>http://www.innoq.com/blog/st/2010/08/pragmatic_soa_beyond_buzzwords.html</guid>
            
            
            <pubDate>Tue, 17 Aug 2010 22:58:07 +0100</pubDate>
        </item>
        
        <item>
            <title>REST Litmus Test for Web Frameworks</title>
            <description><![CDATA[<p>I recently thought about what to expect in a web framework that claims to have "REST support", and came up with a list of questions that one should ask to see whether such a claim is justified:</p>

<ul>
<li>Does the framework respect that an HTTP message does not only consist of a URI? I.e., is dispatch done at least based on the HTTP verb, the URI, the Content-type and Accept headers?</li>
<li>Can I easily use the same business logic while returning different content types in the response? </li>
<li>Is there support for checking for conditional requests?</li>
<li>Are ETags calculated automatically if none are set by the backend logic?</li>
<li>Can I (as a framework user) easily read all HTTP request headers?</li>
<li>Can I easily set all HTTP response headers?</li>
<li>Can I use custom HTTP verbs?</li>
<li>Is it obvious and easy how to return correct status codes with responses, and does the framework use them correctly (if it does so at all)?</li>
</ul>

<p><em>Update:</em> Two aspects added due to feedback by <a href="http://mogsie.com/me/">Erik Mogensen</a> and <a href="http://www.amundsen.com/blog/archives/1066">Mike Amundsen</a>:</p>

<ul>
<li>Is there an easy way to produce links that "point back" resources identified by whatever means the framework exposes (such as some form of routing)?</li>
<li>Are resources identified and requests dispatched to code by the full URI, or is there an artificial distinction between the path and query parameters?</li>
</ul>

<p>Along the same lines, here are some questions where a "Yes" indicates that a framework doesn't do things the way they're supposed to be done:</p>

<ul>
<li>Are GET, POST and other requests to the same URI dispatched to the same business logic by default?</li>
<li>Am I required to use "extensions" (e.g. ".xml", ".json") to get different representations of the same resource? (Supporting this optionally is OK.)</li>
<li>Are there method names in the URI?</li>
</ul>

<p>Finally, I wonder whether there's any justification for a web framework to support "REST services" as an addition instead of the default, but I'm reluctant to put this into the second list.</p>

<p>Suggestions for extending the list are welcome.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/07/rest_litmus_test_for_web_frame.html</link>
            <guid>http://www.innoq.com/blog/st/2010/07/rest_litmus_test_for_web_frame.html</guid>
            
            
            <pubDate>Sun, 04 Jul 2010 21:10:40 +0100</pubDate>
        </item>
        
        <item>
            <title>(German) Podcast on NoSQL </title>
            <description><![CDATA[<p>Together with <a href="http://www.paperplanes.de/">Mathias Meyer</a> and <a href="http://voelterblog.blogspot.com/">Markus Völter</a> I recently recorded a <a href="http://www.heise.de/developer/podcast/">SoftwareArchitekTOUR</a> podcast on NoSQL data stores; heise.de has <a href="http://www.heise.de/developer/artikel/Episode-22-NoSQL-Alternative-zu-relationalen-Datenbanken-1027769.html">put it online now</a>. It was great to have Mathias on the show, not only did he clearly know three times more about the topic than Markus and I combined, he also added a nice additional dialect to our portfolio …</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/06/german_podcast_on_nosql.html</link>
            <guid>http://www.innoq.com/blog/st/2010/06/german_podcast_on_nosql.html</guid>
            
            
            <pubDate>Sat, 26 Jun 2010 17:34:32 +0100</pubDate>
        </item>
        
        <item>
            <title>InfoQ Interview</title>
            <description><![CDATA[<p>At QCon London, Sadek Dobri interviewed me on REST – this was a nice chance for me to voice my current thinking about most, if not all things RESTful. InfoQ has put <a href="http://www.infoq.com/interviews/tilkov-rest-web-services">the video up online</a>.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/05/infoq_interview.html</link>
            <guid>http://www.innoq.com/blog/st/2010/05/infoq_interview.html</guid>
            
            
            <pubDate>Mon, 31 May 2010 15:28:10 +0100</pubDate>
        </item>
        
        <item>
            <title>Clojure Intro Slides</title>
            <description><![CDATA[<p>I've uploaded <a href="http://www.innoq.com/blog/st/presentations/2010/2010-05-20-ClojureConcurrency--JUGD.pdf">the slides</a> from today's Clojure talk. As usual, comments are welcome.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/05/clojure_intro_slides_1.html</link>
            <guid>http://www.innoq.com/blog/st/2010/05/clojure_intro_slides_1.html</guid>
            
            
            <pubDate>Thu, 20 May 2010 23:14:14 +0100</pubDate>
        </item>
        
        <item>
            <title>Clojure Performance Guarantees</title>
            <description><![CDATA[<p>Jarkko Oranen a.k.a. Chousuke posted an excellent table summarizing the performance characteristics of functions operating on different Clojure data structures:</p>

<p><style type="text/css">
table.perf {
    border-width: 1px;
    border-spacing: ;
    border-style: outset;
    border-color: gray;
    border-collapse: collapse;
}
table.perf th {
    border-width: 1px;
    padding: 5px;
    border-style: dotted;
    -moz-border-radius: ;
}
table.perf td {
    border-width: 1px;
    padding: 5px;
    border-style: dotted;
    border-color: gray;
}</p>

<p></style></p>

<table class="perf">
  <tr><th</th><th>hash-map</th><th>sorted-map</th><th>hash-set</th><th>sorted-set</th><th>vector</th><th>queue</th><th>list</th><th>lazy seq</th></tr>
  <tr><td>conj</td><td>near-constant</td><td>logarithmic</td><td>near-constant</td><td>logarithmic</td><td>constant (tail)</td><td>constant (tail)</td><td>constant (head)</td><td>constant (head)</td></tr>
  <tr><td>assoc</td><td>near-constant</td><td>logarithmic</td><td>-</td><td>-</td><td>near-constant</td><td>-</td><td>-</td><td>-</td></tr>
  <tr><td>dissoc</td><td>near-constant</td><td>logarithmic</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
  <tr><td>disj</td><td>-</td><td>-</td><td>near-constant</td><td>logarithmic</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
  <tr><td>nth</td><td>-</td><td>-</td><td>-</td><td>-</td><td>near-constant</td><td>linear</td><td>linear</td><td>linear</td></tr>
  <tr><td>get</td><td>near-constant</td><td>logarithmic</td><td>near-constant</td><td>logarithmic</td><td>near-constant</td><td>-</td><td>-</td><td>-</td></tr>
  <tr><td>pop</td><td>-</td><td>-</td><td>-</td><td>-</td><td>constant (tail)</td><td>constant (head)</td><td>constant (head)</td><td>constant (head)</td></tr>
  <tr><td>peek</td><td>-</td><td>-</td><td>-</td><td>-</td><td>constant (tail)</td><td>constant (head)</td><td>constant (head)</td><td>constant (head)</td></tr>
  <tr><td>count</td><td>constant</td><td>constant</td><td>constant</td><td>constant</td><td>constant</td><td>constant</td><td>constant</td><td>linear</td></tr>
</table>

<p>He also provided an explanation of the terminology used; I've expanded it a little for the big-O-challenged (such as me):</p>

<ul>
<li><em>constant</em> means O(1) complexity, in other words, the time required for the operation is constant and independent of the number of elements contained in the collection. If you think of s simple linked list, you can imagine that adding something to its front always involves the same number of steps, regardless of the number of elements. This is the fastest you can hope for.</li>
<li><em>linear</em> is the slowest that can happen (in the Clojure libs, that is): This is O(n) complexity, meaning that the time required for applying this function on a list with 1000 elements will take a 100 times as long as applying it to a list of 10. In other words: this is slow.</li>
<li><em>logarithmic</em> means that the time required requires log n hops, which is pretty fast (e.g. doing this operation on a list of 1,000,000 items takes 6 times as long as doing it on a list with 10)</li>
<li><em>near-constant</em> performance characteristics refer to the places where the underlying tree structure for most (all?) of Clojure's collections shows its benefits: The number of hops required (as Rich puts it) is log32 n. (Update: I've erased the naïve explanation I had here, will follow up with a better one soon.)</li>
<li>Some operations are, of course <em>not supported</em> on some structures.</li>
</ul>

<p>On a related note, the Clojure IRC channel is simply great.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/04/clojure_performance_guarantees.html</link>
            <guid>http://www.innoq.com/blog/st/2010/04/clojure_performance_guarantees.html</guid>
            
            
            <pubDate>Wed, 28 Apr 2010 16:39:50 +0100</pubDate>
        </item>
        
        <item>
            <title>The Hassle of Legal Purchasing</title>
            <description><![CDATA[<p><a href="http://dilbert.com/blog/entry/the_geek_tingle/">Scott Adams</a> phrases the only reason I occasionally download stuff illegally:</p>

<blockquote>Dilbert was probably in second place for the most stolen item of the past 20 years, at least by businesses. (Money was in first place.) And who could blame anyone for using Dilbert without permission? I would have done the same thing. Humans have some sort of hardwired sense of rightness, and stealing something that's too much of a hassle to purchase legally feels okay to most people. I feel exactly the same way.</blockquote>

<p>I object to the use of the word "stealing", but he's right anyway.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/04/the_hassle_of_legal_purchasing.html</link>
            <guid>http://www.innoq.com/blog/st/2010/04/the_hassle_of_legal_purchasing.html</guid>
            
            
            <pubDate>Thu, 22 Apr 2010 22:37:27 +0100</pubDate>
        </item>
        
        <item>
            <title>The Future of Software Development</title>
            <description><![CDATA[<p><a href="http://www.michaelnygard.com/blog/2010/04/the_future_of_software_develop.html">Michael Nygard</a>:</p>

<blockquote>
I fear that Java will have to be abandoned to the "Enterprise Development" world. It will be relegated to the hands of cut-rate business coders bashing out their gray business applications for $30 / hour. We've passed the tipping point on this one. We used to joke that Java would be the next COBOL, but that doesn't seem as funny now that it's true. Java will continue to exist. Millions of lines of it will be written each year. It won't be the driver of innovation, though. As individual programmers, I'd recommend that you learn another language immediately and differentiate yourself from the hordes of low-skill, low-rent outsource coders that will service the mainstream Java consumer.
</blockquote>

<p>I don't see things quite as drastic as this, but I totally agree that knowing Java as your only language is no longer enough. (Be sure to check out <a href="http://www.michaelnygard.com/blog/2010/04/the_future_of_software_develop.html">the whole piece</a>, full of interesting predictions).</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/04/the_future_of_software_develop.html</link>
            <guid>http://www.innoq.com/blog/st/2010/04/the_future_of_software_develop.html</guid>
            
            
            <pubDate>Wed, 21 Apr 2010 08:25:52 +0100</pubDate>
        </item>
        
        <item>
            <title>UDDI R.I.P.</title>
            <description><![CDATA[<p>It does no longer come as a surprise to anyone when I criticize the SOAP/WSDL/WS-* variant of Web services, but in the last couple of weeks I've been in a few discussions where one particular piece of technology came up for discussion: UDDI, Universal Description, Dicovery and Integration, an official OASIS standard, <a href="http://www.oasis-open.org/specs/index.php#uddiv3.0.2">at version 3.0.2</a> since February 2005. In the course of these discussions, I still saw a few eyebrows raised when I explained what I consider to be the obvious:</p>

<p>UDDI is dead. As in, you know, <a href="http://www.youtube.com/user/MontyPython?blend=2&amp;ob=1#p/u/33/npjOSLCR2hE">not pinin', passed on, is no more, ceased to be, expired and gone to meet 'is maker</a>.</p>

<p>It started out as a global directory; visions of global e-commerce driven by dynamically emerging business relations, where a small producer of some fancy local specialty becomes listed on a large retailers Web site simply by publishing its services to the global yellow pages, which are operated for the greater good of the world by some of the most important e-commerce companies (IBM, Microsoft, SAP and Ariba, IIRC).</p>

<p>Yeah, right.</p>

<p>In what can only be termed an absolutely stunning example of '<a href="http://en.wikipedia.org/wiki/Spin_(public_relations)">spin</a>', the operators of this global directory, which only ever contained hello world examples and other crap left there by people playing around with it before quickly finding better ways to spend their time, shut it down after it had failed too hard to ignore this fact, and then <a href="http://uddi.microsoft.com/about/FAQshutdown.htm">declared it a success</a>! It was only an experiment to prove how well UDDI works, which was of course always intended for company-internal use only.</p>

<p>So maybe this is the role for UDDI -- support SOA governance within an organization, offering a standardized way to catalog one's metadata, including ways categorize it in multiple dimensions, using a simply, yet extensible data model that is universally accepted, leading to excellent interoperability between vendors ...?</p>

<p>No.</p>

<p>Never mind that UDDI is the most horrible spec ever written - <a href="http://www.oasis-open.org/committees/uddi-spec/doc/spec/v3/uddi-v3.0.2-20041019.htm">420 pages stuffed with entirely useless new terminology</a>, describing what should be a very, very simple CRUD API in as complex a way as possible. Never mind that one could have done the same thing using a simple REST API, and Paul Prescod showed how to do that in 2002 (sadly I'm unable to dig up a link). Ignore the fact that as soon as you use UDDI for something useful, you have to customize it in a non-interoperable way, making the standards argument mute. </p>

<p>More importantly, there is no vendor left who cares about it. The standard isn't being extended, there is no working group, there are no new initiatives, and even if you are a strong believer in SOA governance and associated tools, you'll find out that most of them no longer use UDDI (except as a checkbox feature).</p>

<p>The very simple fact is: You don't have to be a RESTafarian to come to the conclusion that UDDI is, indeed, dead.</p>
]]></description>
            <link>http://www.innoq.com/blog/st/2010/03/uddi_rip.html</link>
            <guid>http://www.innoq.com/blog/st/2010/03/uddi_rip.html</guid>
            
            
            <pubDate>Thu, 25 Mar 2010 21:13:30 +0100</pubDate>
        </item>
        
        <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>
        
    </channel>
</rss>
