<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>PlanetDay</title>
  <updated>2010-03-14T02:00:14Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Lars Trieloff</name>
    <email>lars.trieloff@day.com</email>
  </author>
  <id>http://dev.day.com/planetday/atom.xml</id>
  <link href="http://dev.day.com/planetday/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://dev.day.com/planetday/" rel="alternate"/>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-3462962738980534944</id>
    <link href="http://michaelmarth.blogspot.com/feeds/3462962738980534944/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=3462962738980534944" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/3462962738980534944?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/3462962738980534944?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/YDwTTcAD0bY/cms-vendors-now-and-then.html" rel="alternate" type="text/html"/>
    <title>CMS vendors now and then</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">CMS analyst Janus Boye has just <a href="http://www.jboye.com/blogpost/vendors-kill-products-and-make-customers-pay/">published a post on CMS vendors that discontinue their products</a> (because they get bought out or similar)<div><blockquote>During the past 10 years, a number of software products used by online  professionals have been discontinued</blockquote></div><div>That sentence reminded me that I had given a talk almost 10 years ago (it was in 2001 exactly) that contained a slide on the CMS market at that time:</div><div><br/></div><div><br/><a href="http://4.bp.blogspot.com/_UDN4j-Aji_4/S5pv2Rc2ARI/AAAAAAAA-ZE/rHAxNCPDRVo/s1600-h/Dock.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5447789677446037778" src="http://4.bp.blogspot.com/_UDN4j-Aji_4/S5pv2Rc2ARI/AAAAAAAA-ZE/rHAxNCPDRVo/s400/Dock.jpg" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 300px;"/></a><br/></div><div>The circles denote vendors that were part of CMS market overview articles by popular German IT magazines in that year (I wanted to show how differently the market place could be perceived). A vendor placed in any of the circles had enough attention to be part of at least one evaluation. The vendors outside of the circles were not part of any of these overview articles, but somehow present in the market place - at least I knew their names back then.</div><div><br/></div><div>It is interesting to look at the landscape from that time. Of course there are a number of well-known vendors that got bought (Vignette, Obtree, Gauss), but the majority still seems to linger on - at least, a web site still exists, for example <a href="http://www.trenovis.de/index.cfm?contentid=39">iRacer</a>, <a href="http://www.schema.de/eds/">Schema Text</a>, or <a href="http://www.contens.de/de/pub/index.cfm">Contens</a>.</div><div><br/></div><div>On the other hand, one can ask how many vendors that were important enough to make it into a (German) market overview are still relevant in the market place today. I have used <a href="http://spreadsheets.google.com/pub?key=tFsgr9oK6C8D1cgbmERMvLA&amp;output=html">Janus Boye's spreadsheet of relevant European CMS vendors</a> as a benchmark and checked which vendor's of today's list were already in 2001's presentation: <a href="http://www.day.com/day/en.html">Day</a>, <a href="https://www.coremedia.com/en">Coremedia</a> and <a href="http://www.opentext.com/">Open Text</a> were "in the circles". <a href="http://www.sdltridion.com/">Tridion</a> was there, but outside of the circles. The rest of the vendors that Janus considers relevant today were not on my radar in 2001.</div><div><br/></div><div>The end of my presentation involved a couple of CMS-related predictions. Let's see how I did. I predicted:</div><div><ul><li>product borders between CMS, DMS and app servers will blur further - my take now: <i>wrong. I do not think that these border are more blurry than they were in 2001</i></li><li>more standards and standards-based software (Java, JSP/ASP, XML, XSL) - <i>true. The underlying technologies of CMSs are more homogeneous than they were at that time. Remember TCL?</i></li><li>But no true compatibility. <i>True. Nothing more to say.</i></li><li>Improved Personalization. Improved Multi-Channel support. <i>Both not really true, but rather fads of those days.</i></li><li>Improved DMS features and Office integration. <i>Don't ask me why I said that.</i></li><li>No quick market consolidation in sight. <i>Right on the money here.</i></li></ul>Mostly correct on general market considerations, mostly wrong on features.</div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-3462962738980534944?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-03-12T16:56:58Z</updated>
    <published>2010-03-12T16:11:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2010/03/cms-vendors-now-and-then.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=293</id>
    <link href="http://jukkaz.wordpress.com/2010/01/29/the-new-basic/" rel="alternate" type="text/html"/>
    <title>The new BASIC</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I’m seeing many posts that worry about computing devices like iPhones and the new iPad preventing people from having direct control over the hardware. Mark is telling us about a Ctrl+Reset and a BASIC prompt. Nowadays you get started with the following on an HTML page:
    &lt;script type="text/javascript"&gt;
    document.write("Hello, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=293&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>I’m seeing <a href="http://diveintomark.org/archives/2010/01/29/tinkerers-sunset" title="Mark Pilgrim: Tinkerer's Sunset">many</a> <a href="http://www.tbray.org/ongoing/When/201x/2010/01/27/iPad" title="Tim Bray: Nothing Creative">posts</a> that worry about computing devices like iPhones and the new iPad preventing people from having direct control over the hardware. Mark is telling us about a Ctrl+Reset and a BASIC prompt. Nowadays you get started with the following on an HTML page:</p>
<pre>    &lt;script type="text/javascript"&gt;
    document.write("Hello, World!");
    &lt;/script&gt;</pre>
<p>And you can do <em>anything</em>! Don’t tell me the days of tinkering are over.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/293/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/293/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/293/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/293/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/293/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/293/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/293/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/293/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/293/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/293/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=293&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2010-01-29T22:40:07Z</updated>
    <category term="Technology"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:09Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://michid.wordpress.com/?p=192</id>
    <link href="http://michid.wordpress.com/2010/01/29/scala-type-level-encoding-of-the-ski-calculus/" rel="alternate" type="text/html"/>
    <title>Scala type level encoding of the SKI calculus</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In one of my posts on type level meta programming in Scala the question of Turing completeness came up already. The question is whether Scala’s type system can be used to force the Scala compiler to carry out any calculation which a Turing machine is capable of. Various of my older posts show how Scala’s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=192&amp;subd=michid&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>In one of my <a href="http://michid.wordpress.com/2008/10/29/meta-programming-with-scala-conditional-compilation-and-loop-unrolling/">posts</a> on type level meta programming in Scala the question of <a href="http://en.wikipedia.org/wiki/Turing_complete">Turing completeness</a> came up already. The question is whether Scala’s type system can be used to force the Scala compiler to carry out any calculation which a Turing machine is capable of. Various of my older posts show how Scala’s type system can be used to encode <a href="http://michid.wordpress.com/2008/04/18/meta-programming-with-scala-part-i-addition/">addition</a> and <a href="http://michid.wordpress.com/2008/08/27/meta-programming-with-scala-part-iii-partial-function-application/">multiplication</a> on natural numbers and how to encode <a href="http://michid.wordpress.com/2008/10/29/meta-programming-with-scala-conditional-compilation-and-loop-unrolling/">conditions and bounded loops</a>. </p>
<p>Motivated by the blog post <a href="http://apocalisp.wordpress.com/2009/09/02/more-scala-typehackery/">More Scala Typehackery</a> which shows how to encode a version of the <a href="http://en.wikipedia.org/wiki/Lambda_calculus">Lambda calculus</a> which is limited to abstraction over a single variable in Scala’s type system I set out to further explore the topic. </p>
<p/><h5 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">The SKI combinator calculus</h5><br/>
Looking for a calculus which is relatively small, easily encoded in Scala’s type system and known to be Turing complete I came across the <a href="http://en.wikipedia.org/wiki/SKI_combinator_calculus">SKI combinator calculus</a>. The SKI combinators are defined as follows:<p/>
<p>  <img alt="Ix \rightarrow x " class="latex" src="http://l.wordpress.com/latex.php?latex=Ix+%5Crightarrow+x+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="Ix \rightarrow x "/>,<br/>
  <img alt="Kxy \rightarrow x " class="latex" src="http://l.wordpress.com/latex.php?latex=Kxy+%5Crightarrow+x+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="Kxy \rightarrow x "/>,<br/>
  <img alt="Sxyz \rightarrow xz(yz) " class="latex" src="http://l.wordpress.com/latex.php?latex=Sxyz+%5Crightarrow+xz%28yz%29+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="Sxyz \rightarrow xz(yz) "/>.</p>
<p>They can be used to encode arbitrary calculations. For example reversal of arguments. Let <img alt="R \equiv S(K(SI))K " class="latex" src="http://l.wordpress.com/latex.php?latex=R+%5Cequiv+S%28K%28SI%29%29K+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="R \equiv S(K(SI))K "/>. Then </p>
<p>  <img alt="R x y \equiv " class="latex" src="http://l.wordpress.com/latex.php?latex=R+x+y+%5Cequiv+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="R x y \equiv "/><br/>
  <img alt="S(K(SI))K x y \rightarrow " class="latex" src="http://l.wordpress.com/latex.php?latex=S%28K%28SI%29%29K+x+y+%5Crightarrow+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="S(K(SI))K x y \rightarrow "/><br/>
  <img alt="K(SI)x(Kx)y \rightarrow " class="latex" src="http://l.wordpress.com/latex.php?latex=K%28SI%29x%28Kx%29y+%5Crightarrow+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="K(SI)x(Kx)y \rightarrow "/><br/>
  <img alt="SI(Kx)y \rightarrow " class="latex" src="http://l.wordpress.com/latex.php?latex=SI%28Kx%29y+%5Crightarrow+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="SI(Kx)y \rightarrow "/><br/>
  <img alt="Iy(Kxy) \rightarrow " class="latex" src="http://l.wordpress.com/latex.php?latex=Iy%28Kxy%29+%5Crightarrow+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="Iy(Kxy) \rightarrow "/><br/>
  <img alt="Iyx \rightarrow yx " class="latex" src="http://l.wordpress.com/latex.php?latex=Iyx+%5Crightarrow+yx+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="Iyx \rightarrow yx "/>.</p>
<p>Self application is used to find <a href="http://en.wikipedia.org/wiki/Fixed_point_combinator">fixed points</a>. Let <img alt="\beta \equiv S(K\alpha)(SII) " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta+%5Cequiv+S%28K%5Calpha%29%28SII%29+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta \equiv S(K\alpha)(SII) "/> for some combinator <img alt="\alpha " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Calpha+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\alpha "/>. Then <img alt="\beta\beta \rightarrow \alpha(\beta \beta) " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta%5Cbeta+%5Crightarrow+%5Calpha%28%5Cbeta+%5Cbeta%29+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta\beta \rightarrow \alpha(\beta \beta) "/>. That is, <img alt="\beta\beta" class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta%5Cbeta&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta\beta"/> is a fixed point of <img alt="\alpha " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Calpha+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\alpha "/>. This can be used to achieve recursion. Let <img alt="R " class="latex" src="http://l.wordpress.com/latex.php?latex=R+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="R "/> be the reversal combinator from above. Further define </p>
<p>  <img alt="A_0 x \equiv c " class="latex" src="http://l.wordpress.com/latex.php?latex=A_0+x+%5Cequiv+c+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="A_0 x \equiv c "/> for some combinator <img alt="c " class="latex" src="http://l.wordpress.com/latex.php?latex=c+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="c "/> and<br/>
  <img alt="A_n x \equiv x A_{n-1} " class="latex" src="http://l.wordpress.com/latex.php?latex=A_n+x+%5Cequiv+x+A_%7Bn-1%7D+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="A_n x \equiv x A_{n-1} "/>.</p>
<p>That is, combinator <img alt="A_n" class="latex" src="http://l.wordpress.com/latex.php?latex=A_n&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="A_n"/> is the combinator obtained by applying its argument to the combinator <img alt="A_{n-1}" class="latex" src="http://l.wordpress.com/latex.php?latex=A_%7Bn-1%7D&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="A_{n-1}"/>. (There is a bit of cheating here: I should actually show that such combinators exist. However since the SKI calculus is Turing complete, I take this for granted.) Now let <img alt="\alpha " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Calpha+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\alpha "/> be <img alt="R" class="latex" src="http://l.wordpress.com/latex.php?latex=R&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="R"/> in <img alt="\beta " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta "/> from above (That is we have <img alt="\beta \equiv S(KR)(SII)" class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta+%5Cequiv+S%28KR%29%28SII%29&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta \equiv S(KR)(SII)"/> now). Then</p>
<p>  <img alt="\beta\beta A_0 \rightarrow c" class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta%5Cbeta+A_0+%5Crightarrow+c&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta\beta A_0 \rightarrow c"/> </p>
<p>and by induction</p>
<p>  <img alt="\beta\beta A_n \rightarrow \beta\beta A_{n-1} \rightarrow c" class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta%5Cbeta+A_n+%5Crightarrow+%5Cbeta%5Cbeta+A_%7Bn-1%7D+%5Crightarrow+c&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta\beta A_n \rightarrow \beta\beta A_{n-1} \rightarrow c"/>.</p>
<p/><h5 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Type level SKI in Scala</h5><br/>
Encoding the SKI combinator calculus in Scala’s type system seems not too difficult at first. It turns out however that some care has to be taken regarding the order of evaluation. To guarantee that for all terms which have a normal form, that normal form is actually found, a lazy evaluation order has to be employed. <p/>
<p>Here is a Scala type level encoding of the SKI calculus:</p>
<pre class="brush: java;">trait Term {
  type ap[x &lt;: Term] &lt;: Term
  type eval &lt;: Term
}

// The S combinator
trait S extends Term {
  type ap[x &lt;: Term] = S1[x]
  type eval = S
}
trait S1[x &lt;: Term] extends Term {
  type ap[y &lt;: Term] = S2[x, y]
  type eval = S1[x]
}
trait S2[x &lt;: Term, y &lt;: Term] extends Term {
  type ap[z &lt;: Term] = S3[x, y, z]
  type eval = S2[x, y]
}
trait S3[x &lt;: Term, y &lt;: Term, z &lt;: Term] extends Term {
  type ap[v &lt;: Term] = eval#ap[v]
  type eval = x#ap[z]#ap[y#ap[z]]#eval
}

// The K combinator
trait K extends Term {
  type ap[x &lt;: Term] = K1[x]
  type eval = K
}
trait K1[x &lt;: Term] extends Term {
  type ap[y &lt;: Term] = K2[x, y]
  type eval = K1[x]
}
trait K2[x &lt;: Term, y &lt;: Term] extends Term {
  type ap[z &lt;: Term] = eval#ap[z]
  type eval = x#eval
}

// The I combinator
trait I extends Term {
  type ap[x &lt;: Term] = I1[x]
  type eval = I
}
trait I1[x &lt;: Term] extends Term {
  type ap[y &lt;: Term] = eval#ap[y]
  type eval = x#eval
}
</pre>
<p>Further lets define some constants to act upon. These are used to test whether the calculus actually works.</p>
<pre class="brush: java;">trait c extends Term {
  type ap[x &lt;: Term] = c
  type eval = c
}
trait d extends Term {
  type ap[x &lt;: Term] = d
  type eval = d
}
trait e extends Term {
  type ap[x &lt;: Term] = e
  type eval = e
}
</pre>
<p>Eventually the following definition of <em>Equals</em> lets us check types for equality:</p>
<pre class="brush: java;">case class Equals[A &gt;: B &lt;:B , B]()

Equals[Int, Int]     // compiles fine
Equals[String, Int] // won't compile
</pre>
<p>Now lets see whether we can evaluate some combinators.</p>
<pre class="brush: java;">  // Ic -&gt; c
  Equals[I#ap[c]#eval, c]

  // Kcd -&gt; c
  Equals[K#ap[c]#ap[d]#eval, c]

  // KKcde -&gt; d
  Equals[K#ap[K]#ap[c]#ap[d]#ap[e]#eval, d]

  // SIIIc -&gt; Ic
  Equals[S#ap[I]#ap[I]#ap[I]#ap[c]#eval, c]

  // SKKc -&gt; Ic
  Equals[S#ap[K]#ap[K]#ap[c]#eval, c]

  // SIIKc -&gt; KKc
  Equals[S#ap[I]#ap[I]#ap[K]#ap[c]#eval, K#ap[K]#ap[c]#eval]

  // SIKKc -&gt; K(KK)c
  Equals[S#ap[I]#ap[K]#ap[K]#ap[c]#eval, K#ap[K#ap[K]]#ap[c]#eval]

  // SIKIc -&gt; KIc
  Equals[S#ap[I]#ap[K]#ap[I]#ap[c]#eval, K#ap[I]#ap[c]#eval]

  // SKIc -&gt; Ic
  Equals[S#ap[K]#ap[I]#ap[c]#eval, c]

  // R = S(K(SI))K  (reverse)
  type R = S#ap[K#ap[S#ap[I]]]#ap[K]
  Equals[R#ap[c]#ap[d]#eval, d#ap[c]#eval]
</pre>
<p>Finally lets check whether we can do recursion using the fixed point operator from above. First lets define <img alt="\beta " class="latex" src="http://l.wordpress.com/latex.php?latex=%5Cbeta+&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="\beta "/>.</p>
<pre class="brush: java;">  // b(a) = S(Ka)(SII)
  type b[a &lt;: Term] = S#ap[K#ap[a]]#ap[S#ap[I]#ap[I]]
</pre>
<p>Further lets define some of the <img alt="A_n" class="latex" src="http://l.wordpress.com/latex.php?latex=A_n&amp;bg=ffffff&amp;fg=000000&amp;s=0" title="A_n"/>s from above.</p>
<pre class="brush: java;">trait A0 extends Term {
  type ap[x &lt;: Term] = c
  type eval = A0
}
trait A1 extends Term {
  type ap[x &lt;: Term] = x#ap[A0]#eval
  type eval = A1
}
trait A2 extends Term {
  type ap[x &lt;: Term] = x#ap[A1]#eval
  type eval = A2
}
</pre>
<p>Now we can do iteration on the type level using a fixed point combinator:</p>
<pre class="brush: java;">  // Single iteration
  type NN1 = b[R]#ap[b[R]]#ap[A0]
  Equals[NN1#eval, c]

  // Double iteration
  type NN2 = b[R]#ap[b[R]]#ap[A1]
  Equals[NN2#eval, c]

  // Triple iteration
  type NN3 = b[R]#ap[b[R]]#ap[A2]
  Equals[NN3#eval, c]
</pre>
<p>Finally lets check whether we can do ‘unbounded’ iteration. </p>
<pre class="brush: java;">trait An extends Term {
  type ap[x &lt;: Term] = x#ap[An]#eval
  type eval = An
}
// Infinite iteration: Smashes scalac's stack
  type NNn = b[R]#ap[b[R]]#ap[An]
  Equals[NNn#eval, c]
</pre>
<p>Well, we can <img alt=";-)" class="wp-smiley" src="http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif"/> </p>
<pre>$ scalac SKI.scala
Exception in thread "main" java.lang.StackOverflowError
        at scala.tools.nsc.symtab.Types$SubstMap.apply(Types.scala:3165)
        at scala.tools.nsc.symtab.Types$SubstMap.apply(Types.scala:3136)
        at scala.tools.nsc.symtab.Types$TypeMap.mapOver(Types.scala:2735)
</pre>
Filed under: <a href="http://michid.wordpress.com/category/uncategorized/">Uncategorized</a> Tagged: <a href="http://michid.wordpress.com/tag/meta-programming/">Meta-Programming</a>, <a href="http://michid.wordpress.com/tag/scala/">Scala</a> <a href="http://feeds.wordpress.com/1.0/gocomments/michid.wordpress.com/192/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/michid.wordpress.com/192/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/michid.wordpress.com/192/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/michid.wordpress.com/192/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/michid.wordpress.com/192/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/michid.wordpress.com/192/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/michid.wordpress.com/192/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/michid.wordpress.com/192/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/michid.wordpress.com/192/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/michid.wordpress.com/192/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=192&amp;subd=michid&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2010-01-29T17:58:41Z</updated>
    <category term="Uncategorized"/>
    <category term="Meta-Programming"/>
    <category term="Scala"/>
    <author>
      <name>michid</name>
    </author>
    <source>
      <id>http://michid.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/8a44e33f0c0b6ba0377f3633082fb84d?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://michid.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://michid.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://michid.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Hacking Scala</subtitle>
      <title>Michid's Weblog</title>
      <updated>2010-01-29T18:30:10Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20100113.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20100113.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Standards Diagram for Content Management</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Following up on Jon Marks' <a href="http://dev.day.com/microsling/content/blogs/main/lotd20091126.html">post on standards relevant for content management</a> Justin Cormack has put together a "<a href="http://blog.technologyofcontent.com/2010/01/standards-diagram/">Standards Diagram for Content Management</a>" Prezi landscape. Nice work!
</p>



<br/>
<p>
The part "structuring" in Justin's presentation contains Docbook and DITA. <a href="http://dev.day.com/microsling/content/blogs/main/docbookdita.html">Theresa compared these two standards</a> a while ago:
</p>

<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"><a href="http://www.slideshare.net/?src=embed"><img alt="SlideShare" src="http://static.slideshare.net/swf/logo_embd.png"/></a> | <a href="http://www.slideshare.net/day/doc-book-vs-dita-teresa" title="View 'Doc Book Vs Dita Teresa' on SlideShare">View</a> | <a href="http://www.slideshare.net/upload">Upload your own</a></div></div>
    </summary>
    <updated>2010-01-13T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="jcr"/>
    <category term="cmis"/>
    <category term="webdav"/>
    <category term="standards"/>
    <category term="atom"/>
    <category term="wcm"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/dsconfig.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/dsconfig.html" rel="alternate" type="text/html"/>
    <title>Declarative Services: Configuration</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p> OSGi Declarative Services components are configured by properties defined by the component developer in the component descriptor and by configuration managed by system administrators using the OSGi Configuration Admin Service. The combined set of properties is traditionally made available to the component as a <tt>Dictionary</tt> calling the <tt>ComponentContext.getProperties()</tt> method. The component context is provided to the <tt>activate</tt> method called when the component is activated. </p>  <p> This makes configuration of components very simple, since the component itself does not have to care where configuration comes from and how it is maintained. In addition, a component always knows it is starting from scratch when the <tt>activate</tt> method is called. This is because a component instance is never reused and a component reconfiguration means the component is deactivated and activated with the new configuration.  </p>  <p> There are some drawbacks to this solution, though: </p>  <ul> <li>Reactivation of a component may be an expensive operation. Particularly if the component provides a service which is heavily used and relied upon, such as for example the <tt>SlingRepository</tt> service in Communiqu&amp;eactue 5.</li> <li>If a component is keeping internal state, e.g. gathering statistics, reactivation of the component will cause loss of this state.</li> </ul>  <p> This is where the new Declarative Services specification version 1.1 kicks in and improves much. First of all, configuration may be updated dynamically without reactivating the component. Second a component may declare itself as not needing configuration or even as requiring configuration thus only activating the component if configuration is actually available from the Configuration Admin service. </p>  <p> To use dynamic reconfiguration you have to declare a method to take this updated configuration in the <tt>modified</tt> attribute of the component element. When using the Apache Felix Maven SCR Plugin, use the <tt>modified</tt> attribute of the <tt>@scr.component</tt> tag:  </p><pre> @scr.component modified="modified" </pre>  <p> and define a method taking the configuration, for example:  </p><pre> private void modified(Map config) {<br/>     // apply the configurtion dynamically<br/> } </pre>  <p> Unless the configuration may cause the component's references to be modified the component configuration is now dynamically provided without reactivating the component. </p>  <p> The method defined in the <tt>modified</tt> attribute has the same requirements as the <tt>activate</tt> method: It may be have any access modifier (but should not be public) and it may take any combination of <tt>ComponentContext</tt>, <tt>BundleContext</tt>, and <tt>Map</tt> arguments. Of course for a <tt>modified</tt> the primary useful type <tt>Map</tt> as in the example above&lt;. </p><p>  If you know your component cannot be configured or if you absolutely need configuration of your component, you can declare this desire using the <tt>configuration-policy</tt> attribute of the <tt>component</tt> element (or the <tt>policy</tt> attribute of the <tt>@scr.component</tt> JavaDoc tag):  </p><dl> <dt><tt>optional</tt></dt> <dd>Configuration from the Configuration Admin Service is provided to the component if available. This is the default setting and is the same as in the previous Declarative Services specification.</dd> <dt><tt>require</tt></dt> <dd>Configuration from the Configuration Admin Service is required for the component to be activated. If the configuration is deleted, the component will be deactivated. This setting allows for a component to be controlled by the existence of configuration.</dd> <dt><tt>ignore</tt></dt> <dd>Configuration from the Configuration Admin Service is never retrieved on behalf of and provided to the component. If your component has no configurable properties, this setting makes sense.</dd> </dl>   <p> <b>Note: </b> To use the functionality described in this article, you have to use a Declarative Services 1.1 implementation such as Apache Felix SCR 1.2.0 or newer. </p></div>
    </summary>
    <updated>2010-01-13T00:00:01Z</updated>
    <category term="osgi"/>
    <category term="declarative services"/>
    <category term="component"/>
    <category term="scr"/>
    <category term="configuration"/>
    <category term="modified"/>
    <category term="configuration admin"/>
    <author>
      <name>Felix Meschberger</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/dsdelayedcomponent.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/dsdelayedcomponent.html" rel="alternate" type="text/html"/>
    <title>Declarative Services: Delayed Components</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p> The OSGi Declarative services specification defines three types of components: </p>  <ol> <li><b>Immediate Components</b> are immediately created when the providing bundle is started and may or may not provide services </li> <li><b>Delayed Components</b> provide services but are only created when used by a service consumer.</li> <li><b>Factory Components</b> are created on demand by calling the <tt>ComponentFactory.newInstance(Dictionary)</tt> method of the Component Factory service registered for the component.</li> </ol>  <p> This blog is about a special behaviour of delayed components which may seem unexpected in the first place: Delayed components are created (activated) on-demand (when they are first requested) and have to be deleted (deactivated) as soon as there is no user any longer (Chapter 112.5.4, Delayed Component, in the Compendium Spec; see also <a href="https://issues.apache.org/jira/browse/FELIX-1825">FELIX-1825</a>) </p>  <p> The intent of this behaviour is to reduce the system (or bundle) startup time in that delayed components are only instantiated when really used. In addition memory consumption may be reduced at times when the service is not used. The drawback is, that the service is activated and deactivated if there is a single consumer which uses the service for short periods of times only. An example of such an oft used service is an OSGi <tt>EventHandler</tt> service, which is got by the Event Admin service when ever an event must be delivered and released after the delivery. </p>  <p> <b>How does a Component become a delayed component ?</b> </p>  <p> By default a component providing a service is a delayed component unless the component is explicitly declared as an immediate component. If you are using the Apache Felix Maven SCR plugin, a component is (by default) delayed if the <tt>@scr.service</tt> tag is used. Thus the above activation and deactivation rules apply. To turn a service component into an immediate component, you have to set the immediate attribute to, as in : </p>  <pre> @scr.component immediate="true" </pre>  <p> <b>Shall I change all my components to be immediate components ?</b> </p>  <p> The short answer is: <i>It depends</i>. </p>  <p> Here are some general rules of thumb: </p>  <ul> <li>If your service can be expected to be immediately used and not released until system shutdown, defining the component as delayed does not make much sense. In this case, it is probably better to explicitly define the component as immediate. An example of such a component is a Servlet service in Sling, which is immediately used by the Sling Servlet Registry.</li> <li>If your service is in fact a service factory (using the <tt>servicefactory</tt> attribute, you cannot declare the component immediate, because service factory components are always delayed</li> <li>If your component is used a lot for short periods of time, you should probably define your service as an immediate component. An example of such a service is an OSGi <tt>EventHandler</tt> service.</li> <li>If you want to maintain state in your component and make that state available to clients by registering a service, the component should be defined as immediate. An example of such a service might be statistics provider, which gathers statistics and provides them through its service API.</li> <li>If your component is only seldom used it would be best to define it as a delayed component. An example of such a component in Communiqué 5 might be a workflow step service, which implements very specific behaviour.</li> </ul></div>
    </summary>
    <updated>2010-01-12T00:00:01Z</updated>
    <category term="osgi"/>
    <category term="declarative services"/>
    <category term="component"/>
    <category term="scr"/>
    <category term="delayed component"/>
    <author>
      <name>Felix Meschberger</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-5394883619738616643</id>
    <link href="http://michaelmarth.blogspot.com/feeds/5394883619738616643/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=5394883619738616643" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/5394883619738616643?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/5394883619738616643?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/R-LX9y6DLcI/mp3tagger-on-github.html" rel="alternate" type="text/html"/>
    <title>mp3tagger on GitHub</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">On the <a href="http://michaelmarth.blogspot.com/2009/11/python-script-to-set-genre-in-itunes.html">mp3 tagger post</a> I have received quite a bit of feedback and feature requests. Therefore, I thought it might be a good idea to do "social coding" and <a href="http://github.com/michaelmarth/mp3tagger">put the code on GitHub</a> where it can easily be forked (and the forks can be watched).<br/><br/>Other than that, the latest version of the tagger contains these improvements:<br/><ul><li>the Last.fm keys and secret are not stored in the code anymore, but entered on the first run and stored in ~/.mp3tagger.cfg</li><li>you can run the script in two additional modes: simulation and ask. In simulation mode no changes to mp3s will be saved, in ask mode you will be asked to save each change. Start the script with flags "-m simulation" or "-m ask", respectively.</li><li>It is now possible to specify a list of genre tags that will be considered (additionally to the mp3 default genre tags). The list needs to be stored in a config file at ~/.mp3tagger_genres.cfg (in the "generic" section of the file). The full format this file needs to have is shown below.</li><li>The last improvement is a tricky one: after tagging all my mp3s I ended up with hundreds of albums tagged with genre <span style="font-style: italic;">Electronic</span> or <span style="font-style: italic;">Indie</span>. I wanted to refine these genres into sub-genres. This again works by putting a list of possible sub-genres into ~/.mp3tagger_genres.cfg and running the tagger with flag "-r <span style="font-style: italic;">genre</span>", e.g. "-r Electronic". You would run this option when you find that you have too many albums of one genre and want to split them up.<br/></li></ul>So in summary my config file ~/.mp3tagger_genres.cfg looks like:<br/><br/><pre><br/>[generic]<br/>genres=Shoegaze,Dubstep,Grime,Dub,Drum And Bass<br/>[refinements]<br/>Electronic=Idm,Turntableism,Techno,Minimal,Dub,Big Beat,Ambient,Breakbeat,House,Lounge,Electroclash,Drum And Bass,Chillout<br/>Indie=Indie Rock,Indie Pop,Singer-Songwriter,Indie Pop,Shoegaze,Post-Rock,Americana,New Wave,Alt-Country<br/>Reggae=Dancehall,Dub,Ska<br/></pre><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-5394883619738616643?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2010-01-09T15:25:12Z</updated>
    <published>2010-01-09T14:50:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2010/01/mp3tagger-on-github.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/bundleidentification.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/bundleidentification.html" rel="alternate" type="text/html"/>
    <title>Identifications of OSGi Bundles</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p> Looking at the Bundle details in the Web Console you will notice a number of entries providing information about the bundles. In this article I will explain a bit more about the information regarding the identification of bundles. </p>  <p> Looking at the following screen dump you will notice a number of identifaction details of a bundle: </p> <p><a href="http://dev.day.com/microsling/content/blogs/main/bundleidentification/docroot/bundledetails.png">    <img src="http://dev.day.com/microsling/content/blogs/main/bundleidentification/docroot/bundledetails-thumb.png" style="float: none;"/> </a> </p> <ol> <li>The bundle identification number. This is a number uniquely identifying the bundle. This number assigned to the bundle at the installation time of the bundle and never changes. These numbers are also unique within the framework. Never will a bundle ever be assigned the same number, even if the currently installed bundle is uninstalled.</li>  <li>The bundle name. This is a descriptive name of the bundle which is ignored by the OSGi framework. This name is provided by the bundle developer as the contents of the <tt>Bundle-Name</tt> manifest header.</li>  <li>The bundle symbolic name. This is a symbolic name of the bundle, which is used by the OSGi framework together with the bundle version number to identify the bundle. That is, no two bundles with the same symbolic name and version may be installed in a single OSGi framework. But multiple bundles may be installed which have the same symbolic name but differ in their version number. This symbolic name is provided by the bundle developer as the contents of the <tt>Bundle-SymbolicName</tt> manifest header.</li>  <li>The bundle version. The version of the bundle is used to convey the development state of the bundle as a whole. Together with the bundle symbolic name the version number must be unique within an OSGi framework (see the description of the bundle symbolic name). Note that the OSGi framework places only synthatic restrictions on version numbers. This version is provided by the bundle developer as the contents of the <tt>Bundle-Version</tt> manifest header.</li>  <li>The bundle location. The bundle location is basically just a string. It is recommended that this string follows the syntax of an URL and it may even be used as an URL to update the bundle from: The <code>Bundle.update()</code> method uses the bundle location to try to access an updated bundle version. This is not used as such though in Communiqué 5 where the bundle location merely indicates where the bundle has initially been installed from. This value is provided by the administrator as the <tt>location</tt> parameter when installing the bundle through the <code>BundleContext.installBundle(String location)</code> or <code>BundleContext.installBundle(String location, InputStream input)</code> method. This value will not changed when the bundle is updated.</li>  <li>The last modification time. The last modification time is set by the framework when the bundle is modified. A bundle is modified when it is installed, updated or uninstalled. Starting and stopping the bundle does not change the last modification time. This information can be used to verify that a bundle update has really been executed by the OSGi framework.</li> </ol>  <p> As can be seen a number of identification details are set on installation time and never change afterwards and some details may change over time when a bundle is updated. </p>  <p> So here are the rules regarding these details: </p>  <ul> <li>The bundle identification number is assigned by the framework and is never reused.</li> <li>The bundle location is assigned from the <tt>location</tt> parameter when the bundle is installed and never changes during the existence of the bundle. No two bundles will ever be installed at the same time with the same bundle location. As such this location is also a unique identifier for bundles. But in contrast to the bundle identification number, the location may be "reused". That is, once a bundle with a given location has been uninstalled another bundle may be installed with the same location.</li> <li>The bundle symbolic name and version together also uniquely identify an installed bundle. These values are taken from the bundle manifest and therefore may change when a bundle is updated. But it is not allowed for multiple bundles to be installed with the same symbolic name and version at the same time.</li> </ul>  <p> So, whenever you update a bundle, either placing it into an <tt>install</tt> folder in the repository or through the Web Console, expect the bundle version and/or symbolic name to change. But both the bundle identification number and the bundle location will not be modified. The bundle last modification time will reflect the time at which the bundle has actually been updated by the framework. </p></div>
    </summary>
    <updated>2010-01-07T00:00:01Z</updated>
    <category term="osgi"/>
    <category term="bundle"/>
    <category term="location"/>
    <category term="id"/>
    <category term="symbolic name"/>
    <author>
      <name>Felix Meschberger</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/iksworkflowbenchmark.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/iksworkflowbenchmark.html" rel="alternate" type="text/html"/>
    <title>Custom CQ5 workflow step that integrates Twitter and Jabber</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://www.iks-project.eu"><img align="right" height="111" src="http://dev.day.com/microsling/content/blogs/main/iksworkflowbenchmark/docroot/iks-logo.jpg" width="214"/></a>
As part of the <a href="http://www.iks-project.eu/">IKS project</a> each CMS vendor completes a couple of <a href="http://wiki.iks-project.eu/index.php/Benchmarks">benchmarks</a> in order to establish a baseline against which future semantic improvements can be measured. For benchmark 3 "Workflow Service" Bertrand and I chose to implement the task "Create a multi-channel (email, SMS, instant messaging, Twitter,...) notification service for workflow transitions". We have created an automated <a href="http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/workflow/exec/JavaProcessExt.html">workflow step</a> that can be inserted into a custom workflow and either send an e-mail, send a direct message on <a href="http://www.twitter.com">Twitter</a> or send a chat message on <a href="http://www.google.com/talk/">GTalk</a>/<a href="http://xmpp.org/">Jabber</a>. The corresponding message's payload is the path to the content node in the workflow plus an optional custom text.
</p><p>
Below follows a description how this functionality was implemented in CQ5. The complete code is attached to this post as a CQ5 package. I will outline of some of the considerations and gotchas regarding this particular feature, but some issues apply to CQ5 development in general as well. The environment I used for development was <a href="http://dev.day.com/docs/en/crx/current/developing/development_tools/developing_with_crxde_lite.html">CRXDE Lite</a> (the web-based IDE available at <a href="http://localhost:4502/crxde">/crxde</a> of your CQ5 installation) and a beta version of the upcoming CQ5 release 5.3. It is probably helpful to install the package (see setup section below) and read the code alongside with this post.
</p>
<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">OSGi services</h6>
<p>
A good way to hook up external services like Twitter etc. is to create a custom OSGi service that exposes only the business functionality and hides the internal classes. Moreover, it is good practice to provide a Java interface and the separate the implementation of the service (allowing the replacement of the implementation without affecting relying parties). The services will show up in the Sling configuration console at <a href="http://localhost:4502/system/console/configMgr">/system/console/configMgr</a>. This allows the administrator to configure the service's private parameters at deployment time (in our case Twitter account credentials and Jabber user credentials). The config is consumed by the service like e.g.:
</p>

<div class="codesnippet scrollablecodesnippet">
<pre>/** @scr.property */
public static final String GTALK_USER = "gtalk.service.user"; 
/** @scr.property */
public static final String GTALK_PASSWORD = "gtalk.service.password";   

protected void activate(ComponentContext context) {
    Dictionary config = context.getProperties();
    user = (String) config.get(GTALK_USER);
    password = (String) config.get(GTALK_PASSWORD);
}</pre></div>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">3rd party libraries</h6>
<p>
In order to use Twitter and Jabber I utilized the open source libraries <a href="http://yusuke.homeip.net/twitter4j/en/index.html">Twitter4J</a> and <a href="http://today.java.net/pub/a/today/2006/10/05/instant-messaging-for-jabber-with-smack.html">Smack</a>, respectively. With CRXDE (Lite) it is very simple to include such 3rd party jars in a custom OSGi bundle: just drop them in the bundle's /libs folder. When building the bundle CRXDE will embed them. Compilation and deployment is done by executing "Build Bundle" (right-click on the .bnd file in the bundle root).
</p>
<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">A note on 3rd party jar's dependencies</h6>
<p>
It might well be that the bundle compiles and deploys, but does not start. Check the OSGi console at <a href="http://localhost:4502/system/console/bundles">/system/console/bundles</a> to find out if your bundle's state is "Active" (good) or just "Installed" (not good). The latter happens e.g. when the embedded jar has dependencies on other jars that are not embedded. In such a case check the bundle's details page in the Sling console to find out which dependencies are missing and either add them to /libs as well or take them out of the OSGi imports. That is achieved by editing the <a href="http://www.aqute.biz/Code/Bnd">.bnd file</a>'s import directive, e.g.
</p>
<div class="codesnippet scrollablecodesnippet">
<pre>Import-Package: !com.sun.syndication.*, !dalvik.system, *
</pre></div>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Workflow action</h6>
<p>
The last needed piece is a workflow step that can be added into a custom workflow. For that purpose one simply needs to create a class that implements the Interface <a href="http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/workflow/exec/JavaProcessExt.html">JavaProcessExt</a>. The method <a href="http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/workflow/exec/JavaProcessExt.html#execute%28com.day.cq.workflow.exec.WorkItem,%20com.day.cq.workflow.WorkflowSession,%20java.lang.String[]%29">execute</a> will receive the workflow's payload - from there is is trivial to obtain the services described above and pass them the content. CQ Workflow Actions can be customized for each particular workflow they are used in. I use this feature to customize the accounts to which a message shall be sent (the custom format is explained in the setup section below). The customization string is passed to the execute method as well: comma-separated values will arrive as a String[] array.
</p><p>

</p><h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Setting up the package</h6>
<p>
To get this up and running download the attached CQ5 package and install it throught the <a href="http://localhost:4502/etc/packages.html">package manager</a>. In the Sling console configure the the services <a href="http://localhost:4502/system/console/configMgr/com.day.cq.mailer.impl.MailerService">com.day.cq.mailer.impl.MailerService</a>, <a href="http://localhost:4502/system/console/configMgr/com.day.iks.service.impl.TwitterServiceImpl">com.day.iks.service.impl.TwitterServiceImpl</a> and <a href="http://localhost:4502/system/console/configMgr/com.day.iks.service.impl.GtalkServiceImpl">com.day.iks.service.impl.GtalkServiceImpl</a>. For Twitter and Gtalk you need to supply the credentials of the (technical) user that shall send the DMs or chat messages, respectively. In the case of e-mail you need to configure your mail server.
</p><p>
Next, create a custom workflow in the CQ5 workflow section and add the workflow action (name). The configuration options are:
</p><p>
</p><ul>
<li><p>for sending an e-mail: email,user@mydomain.com,some_message</p></li>
<li><p>for sending a direct message on Twitter: dm,twitter_user,some_message</p></li>
<li><p>for sending a chat message on Gtalk: gtalk,user@gmail.com,some_message</p></li>
</ul>
<p/><p>
The (optional) message will be appended with the content item's path.
</p><p>
Here is an example for GTalk:
</p><p>
<a href="http://dev.day.com/microsling/content/blogs/main/iksworkflowbenchmark/docroot/wf.jpg">
<img src="http://dev.day.com/microsling/content/blogs/main/iksworkflowbenchmark/docroot/wf-thumb.jpg"/>
</a>
</p><p>
In the cases of Twitter DM and GTalk make sure that the recipient has opted-in to receive messages from the technical user you have configured as a sender. 
</p></div>
    </summary>
    <updated>2009-12-28T00:00:01Z</updated>
    <category term="iks-project"/>
    <category term="cq5"/>
    <category term="tutorial"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/railsjcr2.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/railsjcr2.html" rel="alternate" type="text/html"/>
    <title>JCR and Rails revisited</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://www.thoughtworks.com/who-we-are/our-people/profiles/Wang,+Pengchao.html">Pengchao Wang of Thoughtworks</a> has published his approach to using JCR as a backend for a JRuby-based Rails app. Interestingly, Pengchao uses unstructured nodes (at least, that is what I gather from reading the code), so he can take full advantage of the schema-free side of JCR and freely add properties to JCR-persisted Ruby objects. The <a href="http://github.com/wpc/jcr-rails-demo">code is on GitHub</a>, have a look at <a href="http://github.com/wpc/jcr-rails-demo/blob/master/lib/jcr/record_base.rb">jcr-rails-demo/lib/jcr/record_base.rb</a> from which the models classes inherit. If Rails and JCR is of interest to you: also have a look at what Ngoc Dao wrote on how to <a href="http://dev.day.com/microsling/content/blogs/main/railsjcr.html#comment">use JCR in Rails applications</a>
</p>
<div id="__ss_2756151" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/x5studio/rails-jcr" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Rails + JCR">Rails + JCR</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/x5studio" style="text-decoration: underline;">shen liu</a>.</div></div></div>
    </summary>
    <updated>2009-12-21T00:00:01Z</updated>
    <category term="jcr"/>
    <category term="dynamic languages"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20091218.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20091218.html" rel="alternate" type="text/html"/>
    <title>[LOTD] The Skinny on JCR, CMIS and OSGi</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Remember <a href="http://jonontech.com/">Jon Mark</a>'s <a href="http://jonontech.com/2009/11/26/cmis-jcr-and-osgi-for-idiots/">overview picture of content technologies</a> I <a href="http://dev.day.com/microsling/content/blogs/main/lotd20091126.html">mentioned</a> the other day? Jon has just <a href="http://www.cmswire.com/cms/web-cms/wcm-field-notes-the-skinny-on-jcr-cmis-and-osgi-006279.php?utm_source=twitter&amp;utm_medium=twitterfeed&amp;utm_campaign=Social%20Media%20%28Twitter%29">published his first column on CMSWire</a> where he delivers a brilliant textual description of his diagram, spanning across JCR, CMIS and OSGi.
</p>
<p>
Jon rightfully points out that CMIS is of very limited value for managing web content and explains that further in the comments section. It is at best tricky to store in a CMIS repository an HTML document that contains references to other items in the same repository, i.e. you will struggle to use CSS, images or hyperlinks.
</p></div>
    </summary>
    <updated>2009-12-18T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="jcr"/>
    <category term="cmis"/>
    <category term="osgi"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/jdiffjcr1jcr2.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/jdiffjcr1jcr2.html" rel="alternate" type="text/html"/>
    <title>Differences between JCR 1 and JCR 2 on API level</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
My colleague <a href="http://dev.day.com/microsling/content/blogs/main.html?poster=Sebastian%20Hoogenberk">Sebastian Hoogenberk</a> has run <a href="http://www.jdiff.org/">JDiff</a> over the <a href="http://www.day.com/maven/jsr170/javadocs/jcr-1.0/">JCR 1</a> and <a href="http://www.day.com/maven/jsr170/javadocs/jcr-2.0/">JCR 2</a> Javadocs. <a href="http://www.day.com/maven/jdiff-jcr1-jcr2/changes.html">The results</a> are useful to get a clear overview over the changes on API level. Note that JDiff unfortunately seems to get confused with some methods and marks them both as "added" and "replaced".
</p></div>
    </summary>
    <updated>2009-12-17T00:00:01Z</updated>
    <category term="jcr"/>
    <category term="jsr-170"/>
    <category term="jsr-283"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1344</id>
    <link href="http://grep.codeconsult.ch/2009/12/07/open-innovation-in-software-means-open-source/" rel="alternate" type="text/html"/>
    <title>Open Innovation in Software means Open Source</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I’m giving a talk today at the Open Source, Open Development, Open Innovation workshop in Oxford:

Open source software is more than just a licence, it is also a software development methodology that allows companies to share resources and collaborate on non-core parts of their software/service offering. When managed well, open development enables a reduction in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1344&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>I’m giving a talk today at the <a href="http://www.oss-watch.ac.uk/events/2009-12-07_business/programme.xml">Open Source, Open Development, Open Innovation workshop</a> in Oxford:</p>
<blockquote><p>
Open source software is more than just a licence, it is also a software development methodology that allows companies to share resources and collaborate on non-core parts of their software/service offering. When managed well, open development enables a reduction in cost, and an increase in innovation as a result of the convergence of the best minds in the problem space. In this presentation Bertrand Delacretaz will describe how <a href="http://www.day.com">Day Software</a> has embraced open development by positioning itself as the leaders in both open standards and open source software. We will examine how Day’s active engagement with 25 open source projects and numerous standards groups has enabled the company to become a world leader in their market and in the open source projects they participate in.
</p></blockquote>
<p>The funny thing is that the above abstract was written by Ross Gardler while waiting for my own version of it – and it says exactly what I was trying to say, only better ;-)</p>
<p>The event is covered by a <a href="http://www.coveritlive.com/index2.php/option=com_altcaster/task=viewaltcast/altcast_code=a3264d23fa/height=550/width=470">live blog</a>, and you can ask questions there.</p>
<p/>
<p>To put it simply, my conclusion is that quick feedback from users and customers is key to open innovation – and open source. if done right, provides <em>lots</em> of feedback, fast.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1344/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1344/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1344/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1344/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1344/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1344/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1344/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1344/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1344/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1344/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1344&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-12-07T10:38:33Z</updated>
    <category term="Open Source"/>
    <category term="conferences"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=285</id>
    <link href="http://jukkaz.wordpress.com/2009/12/07/daily-shoot-week-3/" rel="alternate" type="text/html"/>
    <title>Daily Shoot, week 3</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Another week of @dailyshoot:
      
PS. Check out the updated dailyshoot.com web site.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=285&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Another week of <a href="http://twitter.com/dailyshoot">@dailyshoot</a>:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/jlz/4147320799/"><img alt="" class="alignnone" height="240" src="http://farm3.static.flickr.com/2602/4147320799_99dd07b1e5_m.jpg" style="vertical-align: middle;" title="Home Alone" width="160"/></a> <a href="http://jukkaz.wordpress.com/http://www.flickr.com/photos/jlz/4151305182/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2598/4151305182_9714bd8a99_m.jpg" style="vertical-align: middle;" title="My Door" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4153338693/"><img alt="" class="alignnone" height="240" src="http://farm3.static.flickr.com/2508/4153338693_5194ec93ec_m.jpg" style="vertical-align: middle;" title="Playing with Food" width="160"/></a> <a href="http://www.flickr.com/photos/jlz/4155752365/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2575/4155752365_a7d4467902_m.jpg" style="vertical-align: middle;" title="Velo" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4158486726/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2627/4158486726_5ebd746f1a_m.jpg" style="vertical-align: middle;" title="Walking in the Air" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4161185154/"><img alt="" class="alignnone" height="240" src="http://farm3.static.flickr.com/2485/4161185154_019562aa99_m.jpg" style="vertical-align: middle;" title="Big Wheel" width="160"/></a> <a href="http://www.flickr.com/photos/jlz/4164652474/"><img alt="" class="alignnone" height="160" src="http://farm5.static.flickr.com/4003/4164652474_3eaa68c975_m.jpg" style="vertical-align: middle;" title="Recycled" width="240"/></a></p>
<p>PS. Check out the updated <a href="http://dailyshoot.com/">dailyshoot.com</a> web site.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/285/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/285/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/285/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/285/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/285/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/285/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/285/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/285/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/285/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/285/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=285&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-12-07T09:17:04Z</updated>
    <category term="General"/>
    <category term="dailyshoot"/>
    <category term="photography"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:13Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/cq53preview.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/cq53preview.html" rel="alternate" type="text/html"/>
    <title>Top 10 Features in the Upcoming CQ 5.3 Release</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Here is a short presentation with my personal top ten features in our upcoming release. Of course, this would ideally be accompanied by short fast paced demos, so if you are interested in getting personalized demo or a video, please <a href="mailto:information@day.com">reach out to us</a>.
</p>

<div id="__ss_2626962" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/uncled/whats-new-in-cq-53-top-10-features" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="What's new in CQ 5.3? Top 10 features.">What's new in CQ 5.3? Top 10 features.</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/uncled" style="text-decoration: underline;">David Nuescheler</a>.</div></div></div>
    </summary>
    <updated>2009-12-02T00:00:01Z</updated>
    <category term="cq5"/>
    <category term="cms"/>
    <author>
      <name>David Nuescheler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=283</id>
    <link href="http://jukkaz.wordpress.com/2009/11/29/daily-shoot-week-2/" rel="alternate" type="text/html"/>
    <title>Daily Shoot, week 2</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">As I mentioned last week, I’ve been following @dailyshoot for a series of daily photo assignments. Here’s what I shot this week:
      
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=283&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>As I <a href="http://jukkaz.wordpress.com/2009/11/23/daily-shoot-week-1/">mentioned</a> last week, I’ve been following <a href="http://twitter.com/dailyshoot">@dailyshoot</a> for a series of daily photo assignments. Here’s what I shot this week:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/jlz/4127988621/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2643/4127988621_1ff9e7f58a_m.jpg" title="Rugged Terrain" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4131789816/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2526/4131789816_bbcb836d58_m.jpg" title="Droplets" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4133945303/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2501/4133945303_78bcf77558_m.jpg" title="The Final Frontier" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4137339865/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2789/4137339865_5774d6e308_m.jpg" title="Tools of Distance" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4138818696/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2579/4138818696_4caec3921c_m.jpg" title="Our Separate Ways" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4141391776/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2544/4141391776_99f809a30b_m.jpg" title="Learning to Dance" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4143462625/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2561/4143462625_f698920c52_m.jpg" title="The Green Field" width="240"/></a></p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/283/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/283/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/283/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/283/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/283/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/283/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/283/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/283/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/283/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/283/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=283&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-29T16:38:51Z</updated>
    <category term="General"/>
    <category term="dailyshoot"/>
    <category term="photography"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:09Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=276</id>
    <link href="http://jukkaz.wordpress.com/2009/11/28/sling-over-http/" rel="alternate" type="text/html"/>
    <title>Sling over HTTP</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A few days ago I posted about Jackrabbit, and now it’s time to follow up with Sling as a means of accessing a content repository over HTTP. Apache Sling is a web framework based on JCR content repositories like Jackrabbit and among other things it adds some pretty nice ways of accessing manipulating content over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=276&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>A few days ago I <a href="http://jukkaz.wordpress.com/2009/11/24/jackrabbit-over-http/">posted</a> about <a href="http://jackrabbit.apache.org/" title="Apache Jackrabbit">Jackrabbit</a>, and now it’s time to follow up with <a href="http://sling.apache.org/" title="Apache Sling">Sling</a> as a means of accessing a <a href="http://jukkaz.wordpress.com/2009/11/18/content-repository-over-http/" title="Content Repository over HTTP">content repository over HTTP</a>. Apache Sling is a web framework based on JCR content repositories like Jackrabbit and among other things it adds some pretty nice ways of accessing manipulating content over HTTP.</p>
<p>The easiest way to get started with Sling is to download the “Sling Standalone Application” from the <a href="http://sling.apache.org/site/downloads.cgi">Sling downloads page</a>. Unpack the distribution package and start the Sling application with “java -jar org.apache.sling.launchpad.app-5-incubator.jar”. Like Jackrabbit, Sling can by default be accessed at <a href="http://localhost:8080/">http://localhost:8080/</a>. There’s a <a href="http://sling.apache.org/site/discover-sling-in-15-minutes.html">15 minute tutorial</a> that you can check out to learn more about Sling.</p>
<p>Since Sling comes with an embedded Jackrabbit repository, it also supports much of the WebDAV functionality covered in my previous post. Instead of rehashing those points, this post takes a look at the additional HTTP content access features in Sling.</p>
<p><strong>CR1: Create a document</strong></p>
<p>Like with Jackrabbit, all documents in Sling have a path that is used to identify and locate the document. Sling solves the problem of having to come up with the document name by supporting a virtual “star resource” that’ll automatically generate a unique name for a new document. Thus instead of having to think of a URL like “http://localhost:8080/hello” in advance, the new document can be created by simply posting to the star resource at “http://localhost:8080/*”.</p>
<p>The <a href="http://sling.apache.org/site/manipulating-content-the-slingpostservlet-servletspost.html">Sling POST servlet</a> is a pretty versatile tool, and can be used to perform many content manipulation operations using normal HTTP POST requests and the application/x-www-form-urlencoded format used by normal HTML forms. With the POST servlet, the example document can be created like this:</p>
<pre style="margin: 20px;">$ curl --data 'title=Hello, World!' --data 'date=2009-11-17T12:00:00.000Z' \
       --data 'date@TypeHint=Date' --user admin:admin \

http://localhost:8080/*
</pre>
<p>The 201 Created response will contain a Location header that points to the newly created document. In this case the returned URL is “http://localhost:8080/hello_world_” based on some document title heuristics included in Sling. If you run the command again you’ll get a different URL since the Sling star resource will automatically avoid overwriting existing content.</p>
<p>Pros:</p>
<div>
<ul>
<li>A single standard POST request is enough</li>
<li>The HTML form format is used for the POST body</li>
<li>Automatically generated clean and readable document URL</li>
</ul>
</div>
<div>Cons:</div>
<div>
<ul>
<li>The star resource URL pattern is fixed and creates an unnecessarily tight binding between the client and the server</li>
</ul>
</div>
<p><strong>CR2: Read a document</strong></p>
<p>Sling contains multiple ways of accessing the document content in different renderings. In fact much of the power of Sling comes from the extensive support for rendering underlying content in various different and easily customizable ways.</p>
<p>Unfortunately at least the latest 5-incubator version of the Sling Application doesn’t support any reasonable default rendering at the previously returned document URL. The client needs to explicitly know to add a “.json” or “.xml” suffix to the document URL to get a JSON or XML rendering of the document.</p>
<pre style="margin: 30px;">$ curl http://localhost:8080/hello_world_.json
{
  "title":           "Hello, World!",
  "date":            "Tue Nov 17 2009 12:00:00 GMT+0100",
  "jcr:primaryType": "nt:unstructured"
}
$ curl http://localhost:8080/hello_world_.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;hello_world_ xmlns:fn="http://www.w3.org/2005/xpath-functions"
              xmlns:fn_old="http://www.w3.org/2004/10/xpath-functions"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:jcr="http://www.jcp.org/jcr/1.0"
              xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
              xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
              xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
              xmlns:rep="internal"
              xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
              jcr:primaryType="nt:unstructured"
              date="2009-11-17T12:00:00.000+01:00"
              title="Hello, World!"/&gt;
</pre>
<p>The JCR document view format is used for the XML rendering.</p>
<p>Pros:</p>
<ul>
<li>A single GET request is enough</li>
<li>Both the JSON and XML formats are easy to consume</li>
</ul>
<p>Cons:</p>
<ul>
<li>Simply GETting the document URL doesn’t return anything useful</li>
<li>The “.json” and “.xml” URL patterns create an unnecessary binding between the client and the server</li>
<li>Neither rendering contains property type information</li>
<li>The XML rendering contains unnecessary namespace declarations</li>
</ul>
<p><strong>CR3: Update a document</strong></p>
<p>The Sling POST servlet supports also document updates, so we can just POST the updated properties to the document URL:</p>
<pre style="margin: 30px;">$ curl --data 'history=Document date updated' \
       --data 'date=2009-11-18T12:00:00.000Z' \
       --data 'date@TypeHint=Date' --user admin:admin \

http://localhost:8080/hello_world_</pre>
<p>Pros:</p>
<ul>
<li>A single standard POST request is enough</li>
<li>The HTML form format is used for the POST body</li>
</ul>
<p>Cons:</p>
<ul>
<li>None.</li>
</ul>
<p><strong>CR4: Delete a document</strong></p>
<p>You can either use the special “:operation=delete” feature of the Sling POST servlet or a standard DELETE request to delete a document:</p>
<pre style="margin: 30px;">$ curl --data ':operation=delete' --user admin:admin \

http://localhost:8080/hello_world_

$ curl --request DELETE --user admin:admin \

http://localhost:8080/hello_world_</pre>
<p>Pros:</p>
<ul>
<li>A standard DELETE or POST request is all that’s needed</li>
</ul>
<p>Cons:</p>
<ul>
<li>None.</li>
</ul>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/276/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/276/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/276/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/276/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/276/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/276/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/276/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/276/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/276/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/276/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=276&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-28T21:18:06Z</updated>
    <category term="General"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.osoco.org/blog/?p=73</id>
    <link href="http://www.osoco.org/blog/?p=73" rel="alternate" type="text/html"/>
    <title>Increasing Interest in JCR and Apache Sling</title>
    <summary>I’m attending some tech conferences in the Java space for several years now; for the last years I’m trying to push JCR, Apache Jackrabbit, and Apache Sling at various occasions – mostly through several talks. It seems to me that there is a change/increase in interest for these topics.
While two years ago, people have not [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’m attending some tech conferences in the Java space for several years now; for the last years I’m trying to push JCR, Apache Jackrabbit, and Apache Sling at various occasions – mostly through several talks. It seems to me that there is a change/increase in interest for these topics.<br/>
While two years ago, people have not been really that interested in JCR and usually asked questions along the line of “why should i use this? I have a database, it works fine” etc., this has definitly changed now. There are more and more people interested in alternatives to a POD (plain old database). It seems to me that the pain with traditional dbs is now too much and they’re searching for nosql solutions. Don’t get me wrong, JCR is not the golden hammer for data storage – there are valid use cases for PODs, but there are also many use cases where an alternative like JCR is much better suited.<br/>
Today people ask questions like  “I looked at jcr, I have this problem, and I think I could do it this way. What do you think?” and of course variations on this theme.<br/>
I don’t think that this is motivated through the NOSQL hype, I ratherthink that this is a parallel movement which has the same origin. In addition, these people seems to know a lot about Apache Jackrabbit and usually ask deep going questions. As I’m not working on Jackrabbit itself – I’m a user of Jackrabbit – these questions usually give me a hard time <img alt=":)" class="wp-smiley" src="http://www.osoco.org/blog/wp-includes/images/smilies/icon_smile.gif"/><br/>
While I have a hard time with Jackrabbit questions, people seem often to have a hard time understanding the needs for Apache Sling. For one this might be cause they are still living in their POD driven world and know how to handle applications based on databases. Building applications on top of NOSQL solutions is a slightly different thing. When it comes to Apache Sling which is a web framework, it is immediately compared against web application frameworks with all the nice ui features, widget libraries and whatnot. And as Sling does not provide a UI library it is often immediately discarded.<br/>
But on the bright side as soon as people realize that they need something like JCR and now need a way to get all this content stored in the repository out to the users in a nice, elegant and flexible way, they also realize that Apache Sling helps a lot.<br/>
So my hope is that the adaption of JCR is increasing (and I think that is already the case) and that this drives the adoption of Apache Sling as well <img alt=":)" class="wp-smiley" src="http://www.osoco.org/blog/wp-includes/images/smilies/icon_smile.gif"/><br/>
And of course we are not day dreaming in Apache Sling – we will continue it’s development and add missing pieces or provide bridges etc.</p></div>
    </content>
    <updated>2009-11-26T15:07:46Z</updated>
    <category term="Allgemein"/>
    <author>
      <name>cziegeler</name>
    </author>
    <source>
      <id>http://www.osoco.org/blog</id>
      <link href="http://www.osoco.org/blog/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://www.osoco.org/blog" rel="alternate" type="text/html"/>
      <subtitle>Every Day is a Good Day</subtitle>
      <title>A Matter of Unimportance</title>
      <updated>2009-11-26T15:30:06Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20091126.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20091126.html" rel="alternate" type="text/html"/>
    <title>[LOTD] CMIS, JCR and OSGi for Idiots</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Drinking with <a href="http://dev.day.com/microsling/content/blogs/main.html?poster=David%20Nuescheler">David</a> has <a href="http://dev.day.com/microsling/content/blogs/main.xml">inspired Jon Marks</a> (aka <a href="http://twitter.com/McBoof/">@McBoof</a>) to draw a brilliant <a href="http://jonontech.com/2009/11/26/cmis-jcr-and-osgi-for-idiots/">drawing of the landscape of content technologies</a>. Beer :)
</p></div>
    </summary>
    <updated>2009-11-26T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="jcr"/>
    <category term="cmis"/>
    <category term="osgi"/>
    <category term="beer"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=260</id>
    <link href="http://jukkaz.wordpress.com/2009/11/24/jackrabbit-over-http/" rel="alternate" type="text/html"/>
    <title>Jackrabbit over HTTP</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last week I posted a simple set of operations that a “RESTful content repository” should support over HTTP. Here’s a quick look at how Apache Jackrabbit meets this challenge.
To get started I first downloaded the standalone jar file from the Jackrabbit downloads page, and started it with “java -jar jackrabbit-standalone-1.6.0.jar”. This is a quick and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=260&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Last week I <a href="http://jukkaz.wordpress.com/2009/11/18/content-repository-over-http/" title="Content Repository over HTTP">posted</a> a simple set of operations that a “RESTful content repository” should support over HTTP. Here’s a quick look at how <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> meets this challenge.</p>
<p>To get started I first downloaded the standalone jar file from the <a href="http://jackrabbit.apache.org/downloads.html">Jackrabbit downloads page</a>, and started it with “java -jar jackrabbit-standalone-1.6.0.jar”. This is a quick and easy way to get a Jackrabbit repository up and running. Just point your browser to <a href="http://localhost:8080/">http://localhost:8080/</a> to check that the repository is there.</p>
<p>Jackrabbit comes with a built-in advanced WebDAV feature that gives you pretty good control over your content. The root URL for the default workspace is <a href="http://localhost:8080/server/default/jcr:root/">http://localhost:8080/server/default/jcr:root/</a> and by default Jackrabbit grants full write access if you specify any username and password.</p>
<p>Note that Jackrabbit also has another, filesystem-oriented WebDAV feature that you can access at <a href="http://localhost:8080/repository/default/">http://localhost:8080/repository/default/</a>. This entry point is great for dealing with simple things like normal files and folders, but for more fine-grained content you’ll want to use the advanced WebDAV feature as outlined below.</p>
<p><strong>CR1: Create a document</strong></p>
<p>All documents (nodes) in Jackrabbit have a pathname just like files in a normal file system. Thus to create a new document, we first need to come up with a name and a location for it. Let’s call the example document “hello” and place it at the root of the default workspace, so we can later address it at the path “/hello”. The related WebDAV URL is http://localhost:8080/server/default/jcr:root/hello/.</p>
<p>You can use the MKCOL method to create a new node in Jackrabbit. An MKCOL request without a body will create a new empty node, but you can specify the initial contents of the node by including a snippet of JCR system view XML that describes your content. In our case we want to specify the “title” and “date” properties. Note that JCR does not support date-only properties, so we need to store the date value as a more accurate timestamp.</p>
<p>The full request looks like this:</p>
<pre style="margin: 20px;">$ curl --request MKCOL --data @- --user name:pass \
       http://localhost:8080/server/default/jcr:root/hello/ &lt;&lt;END
&lt;sv:node sv:name="hello" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"&gt;
  &lt;sv:property sv:name="message" sv:type="String"&gt;
    &lt;sv:value&gt;Hello, World!&lt;/sv:value&gt;
  &lt;/sv:property&gt;
  &lt;sv:property sv:name="date" sv:type="Date"&gt;
    &lt;sv:value&gt;2009-11-17T12:00:00.000Z&lt;/sv:value&gt;
  &lt;/sv:property&gt;
&lt;/sv:node&gt;
END</pre>
<p>The resulting document is available at the URL we already constructed above, i.e. http://localhost:8080/server/default/jcr:root/hello/.</p>
<p>Pros:</p>
<div>
<ul>
<li>A single standard WebDAV MKCOL request is enough</li>
<li>The standard JCR system view XML format is used for the MKCOL body</li>
<li>The XML format is easy to produce</li>
</ul>
</div>
<div>Cons:</div>
<div>
<ul>
<li>We need to decide the name and location of the document before it can be created</li>
<li>The name of the document is duplicated, once in the URL and once in the sv:name attribute</li>
<li>The date property must be specified down to the millisecond</li>
<li>While standardized, the MKCOL method is not as well known as PUT or POST</li>
<li>While standardized, the JCR system view format is not as well known as JSON, Atom or generic XML</li>
<li>The system view XML format is quite verbose</li>
</ul>
</div>
<p><strong>CR2: Read a document</strong></p>
<p>Now that the document is created, we can read it with a standard GET request:</p>
<pre style="margin: 30px;">$ curl --user name:pass http://localhost:8080/server/default/jcr:root/hello/
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;sv:node sv:name="hello"
         xmlns:fn="http://www.w3.org/2005/xpath-functions"
         xmlns:fn_old="http://www.w3.org/2004/10/xpath-functions"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:jcr="http://www.jcp.org/jcr/1.0"
         xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
         xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
         xmlns:rep="internal"
         xmlns:nt="http://www.jcp.org/jcr/nt/1.0"&gt;
  &lt;sv:property sv:name="jcr:primaryType" sv:type="Name"&gt;
    &lt;sv:value&gt;nt:unstructured&lt;/sv:value&gt;
  &lt;/sv:property&gt;
  &lt;sv:property sv:name="date" sv:type="Date"&gt;
    &lt;sv:value&gt;2009-11-17T12:00:00.000Z&lt;/sv:value&gt;
  &lt;/sv:property&gt;
  &lt;sv:property sv:name="message" sv:type="String"&gt;
    &lt;sv:value&gt;Hello, World!&lt;/sv:value&gt;
  &lt;/sv:property&gt;
&lt;/sv:node&gt;</pre>
<p>Note that the result includes the standard jcr:primaryType property that is always included in all JCR nodes. Also all namespaces registered in the repository are included even though strictly speaking they add little value to the response.</p>
<p>Pros:</p>
<ul>
<li>A single GET request is enough</li>
<li>The XML format is easy to consume</li>
</ul>
<p>Cons:</p>
<ul>
<li>The system view format is a bit verbose and generally not that well known</li>
</ul>
<p><strong>CR3: Update a document</strong></p>
<p>The WebDAV feature in Jackrabbit does not support setting multiple properties in a single request, so we need to use separate requests for each property change. The easiest way to update a property is to PUT the new value to the property URL. The only tricky part is that unless the node type explicitly says otherwise the new value is by default stored as a binary stream. You need to specify a custom jcr-value/… content type to override that default.</p>
<pre style="margin: 30px;">$ curl --request PUT --header "Content-Type: jcr-value/date" \
       --data "2009-11-18T12:00:00.000Z"  --user name:pass \

http://localhost:8080/server/default/jcr:root/hello/date

$ curl --request PUT --header "Content-Type: jcr-value/string" \
       --data "Document date updated"  --user name:pass \

http://localhost:8080/server/default/jcr:root/hello/history</pre>
<p>GETting the document after these changes will give you the updated property values.</p>
<p>Pros:</p>
<ul>
<li>Standard PUT requests are used</li>
<li>No XML or other wrapper format needed, just send the raw value as the request body</li>
</ul>
<p>Cons:</p>
<ul>
<li>More than one request needed</li>
<li>Need to use non-standard jcr-value/… media types for non-binary values</li>
</ul>
<p><strong>CR4: Delete a document</strong></p>
<p>Deleting a document is easy with the DELETE method:</p>
<pre style="margin: 30px;">$ curl --request DELETE --user name:pass \

http://localhost:8080/server/default/jcr:root/hello/</pre>
<p>That’s it. Trying to GET the document after it’s been deleted gives a 404 response, just as expected.</p>
<p>Pros:</p>
<ul>
<li>A standard DELETE request is all that’s needed</li>
</ul>
<p>Cons:</p>
<ul>
<li>None.</li>
</ul>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/260/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/260/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/260/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/260/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/260/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/260/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/260/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/260/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/260/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/260/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=260&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-24T01:25:34Z</updated>
    <category term="General"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:09Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/monitoring.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/monitoring.html" rel="alternate" type="text/html"/>
    <title>The perfect monitoring</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I often thought about how a perfect monitoring solution should like; then the following requirements come up:</p>  <p>1) consistent: When the monitoring indicates a problem, there really is a problem with the application. </p> <p>2) reliable: When there is a problem that hinders the users from properly working on the application, the monitoring will indicate this, before the support line is overwhelmed by calls reporting that your application has a problem. </p> <p>3) informative: When a monitoring indicates a problem, there should a recommendation how this problem can be fixed with minimal impact. This recommendation can be either documented offline (operation guidelines) or in the monitoring itself. </p> <p>4) proactive: a monitoring resource should detect problems before they happen. Sounds strange, but many problems (excessive use of memory) can be reported before they actually have a big impact. </p> <p>The requirement 2) is a hard one; essentially it requires that all problem situations are pre-known and the presence of such a problem situation can be indicated by the monitoring resource. In fact most situations are not known to anybody, until they happen and are fully analyzed and understood. </p> <p>1) can fulfilled very easily: never report a problem. From a purely academical view this requirement is fulfilled then, but actually it is not really usable. A more usable approach is to report only when it's 99,99% clear that no user can work anymore (e.g. on a CQ authoring system when a vital OSGI service isn't available any more). But the more subtile problems cannot be caught that way. </p> <p>3) requires a certain amount of experience with the application and the will to write good documentation, that is kept up to date. And 4) requires knowledge about typical problems and the signs of problems. </p> <p>All these requirements often need an extension to the application to provide an interface to the monitoring, where the monitoring can fetch the data from and decide what to do with it. But monitoring is the poor child of application development; it is neither a functional requirement nor a non-functional requirement with the importance of usability, performance or availability (aah, by the way: how should we measure that? No-one cares, as long you guarantee 99,9% ...), but only a requirement of the operations team - no-one spends time or money on it, until operations ask for it. "Ups, we already spent our budget on other things". Only a few operations teams have the management standing, that they can deny such applications to run on their machines then, in most cases they are just overruled by management. Then, the operations team usually comes up with some thoughts and tries to fill the gap themselves, but in most times that does not work very well. Especially requirement 2) is then often violated and 3) and 4) are not implemented at all. But operations can show some green bulbs in the monitoring system to the management. </p> <p>So, as a last requirement (which should be the very first requirement, though): </p> <p>5) there should be a proper monitoring at all. A monitoring that only watches for a running process cannot detect that this process already internally has deadlocked and isn't working anymore. </p> <p>Finally, when you need to implement a complex application, make sure that some of its internal state can be exposed to an external monitoring solution, which helps to operate your application. Treat this as a normal "must-have" feature with specification, implementation and test. You will make your operations team really happy. </p> <p>If you do not do that, your monitoring system are actually the users, when they complain about non-working functionality, which must be fixed by your operations team then. And that brings costs (service calls) and negative management attention. Nothing one wants to have.</p></div>
    </summary>
    <updated>2009-11-23T00:00:01Z</updated>
    <category term="operations"/>
    <category term="cq5"/>
    <author>
      <name>Joerg Hoh</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=254</id>
    <link href="http://jukkaz.wordpress.com/2009/11/23/daily-shoot-week-1/" rel="alternate" type="text/html"/>
    <title>Daily Shoot, week 1</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A week ago James Duncan Davidson and Mike Clark launched @dailyshoot, a Twitter feed that posts daily photo assignments. The idea is to encourage people who want to learn photography to practice it every day with the help of a simple assignment that fits a single tweet. I’m following Duncan’s blog, so I found out [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=254&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>A week ago <a href="http://duncandavidson.com/">James Duncan Davidson</a> and <a href="http://clarkware.com/about.html">Mike Clark</a> launched <a href="http://twitter.com/dailyshoot">@dailyshoot</a>, a Twitter feed that posts daily photo assignments. The idea is to encourage people who want to learn photography to practice it every day with the help of a simple assignment that fits a single tweet. I’m following Duncan’s blog, so I <a href="http://blog.duncandavidson.com/2009/11/the-daily-shoot.html" title="The Daily Shoot">found out</a> about Daily Shoot the day it was launched.</p>
<p>So far I’ve completed all the assignments and I’ve already learned quite a bit doing so. It’s very interesting to see how other people interpret the same assignments. I avoid looking at other responses before completing an assignment so that I don’t end up just copying someone else’s approach. Once I’m done I look at what other’s have done for some nice insight on what I could have done differently. The process is quite educational.</p>
<p>Here’s what I’ve shot this week:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/jlz/4110418300/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2804/4110418300_4368b4b7dd_m.jpg" title="The Red Desert" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4113281186/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2762/4113281186_b80c2b5c50_m.jpg" title="Martinsgasse" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4115683738/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2750/4115683738_6902197e9a_m.jpg" title="Into the Unknown" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4117124465/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2591/4117124465_f3250abbb6_m.jpg" title="Satrap" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4119973735/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2773/4119973735_af899a27e9_m.jpg" title="Four" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4122393762/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2622/4122393762_46642d7b60_m.jpg" title="Fier Franken f&#xFC;nfundachtzig" width="240"/></a> <a href="http://www.flickr.com/photos/jlz/4125156460/"><img alt="" class="alignnone" height="160" src="http://farm3.static.flickr.com/2755/4125156460_2976ac927d_m.jpg" title="Der Basler" width="240"/></a></p>
<p>You can click on the pictures for more background on each assignment and how I approached it. For more information on Daily Shoot, see the recently launched <a href="http://dailyshoot.com/">website</a>.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/254/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/254/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/254/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/254/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/254/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/254/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/254/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/254/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/254/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/254/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=254&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-22T23:12:58Z</updated>
    <category term="General"/>
    <category term="dailyshoot"/>
    <category term="photography"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:11Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/igniteslides.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/igniteslides.html" rel="alternate" type="text/html"/>
    <title>Ignite slides</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>RT <a href="http://twitter.com/joannekh/status/5878829373">@joannekh</a>:</p>

<div class="blockquote">
<p>
Day Ignite presentations now available at <a href="http://www.day.com/ignite">www.day.com/ignite</a>
</p>
</div>

<p>
(<a href="http://www.slideshare.net/Dayignite/presentations">dayignite on slideshare</a>)
</p></div>
    </summary>
    <updated>2009-11-21T00:00:01Z</updated>
    <category term="ignite"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-12T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/contentrepositories.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/contentrepositories.html" rel="alternate" type="text/html"/>
    <title>What is a content repository</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div style="border-bottom: 1px dotted rgb(153, 153, 153); padding: 2px;">
			<p>
				Joint post of <a href="http://bergie.iki.fi/about/">Henri Bergius</a> and <a href="http://michaelmarth.blogspot.com/">Michael Marth</a> cross-posted <a href="http://bergie.iki.fi/blog/what_is_a_content_repository/">here</a> and here.
			</p>
		</div>
		<p>
			Web Content Repositories are more than just plain old relational databases. In fact, the requirements that arise when managing web content have led to a class of content repository implementations that are comparable on a conceptual level. During the <a href="http://www.iks-project.eu/">IKS</a> community <a href="http://www.iks-project.eu/civicrm/event/info?reset=1&amp;id=3">workshop in Rome</a> we got together to compare JCR (the <a href="http://jackrabbit.apache.org/">Jackrabbit</a> implementation) and <a href="http://www.midgard-project.org/">Midgard</a>'s content repository. While in some cases the terminology might be different, many of the underlying ideas are identical. So we came up with a list of common traits and features of our content repositories. For comparison, there is also <a href="http://couchdb.apache.org/">Apache CouchDB</a>.
		</p>
		<p>
			So, why use a Content Repository for your application instead of the old familiar RDBMS? Repositories provide several advantages:
		</p>
		<ul>
			<li>
				<p>
					<em>Common rules for data access</em> mean that multiple applications can work with same content without breaking consistency of the data
				</p>
			</li>
			<li>
				<p>
					<em>Signals about changes</em> let applications know when another application using the repository modifies something, enabling collaborative data management between apps
				</p>
			</li>
			<li>
				<p>
					<em>Objects instead of SQL</em> mean that developers can deal with data using APIs more compatible with the rest of their desktop programming environment, and without having to fear issues like SQL injection
				</p>
			</li>
			<li>
				<p>
					<em>Data model is scriptable</em> when you use a content repository, meaning that users can easily write Python or PHP scripts to perform batch operations on their data without having to learn your storage format
				</p>
			</li>
			<li>
				<p>
					<em>Synchronization and sharing</em> features can be implemented on the content repository level meaning that you gain these features without having to worry about them
				</p>
			</li>
		</ul>
		<table border="0" cellpadding="0" cellspacing="0" class="tblGenFixed">
			<tbody><tr>
				<td class="s0">
					feature
				</td>
				<td class="s1">
					JCR / Jackrabbit
				</td>
				<td class="s2">
					Midgard
				</td>
				<td class="s3">
					CouchDB
				</td>
			</tr>
			<tr>
				<td class="s4">
					content type system
				</td>
				<td class="s5">
					In JCR structured or unstructured nodes are supported and can be mixed at will in a content tree.
				</td>
				<td class="s5">
					Content types are defined in MgdSchema types. All content must be stored to an MgdSchema type, but types can be extended on content instance level using the "parameter" triplets
				</td>
				<td class="s6">
					Type-free
				</td>
			</tr>
			<tr>
				<td class="s7">
					type hierarchy
				</td>
				<td class="s8">
					Structured node types support inheritence of types, additional cross-cutting aspects can be added with "mixins". Node types can define allowed node types for child nodes in the content hierarchy.
				</td>
				<td class="s8">
					MgdSchemas allow inheritance, and an extended type can be instantiated either using the extended type or the base type
				</td>
				<td class="s9">
					Type-free
				</td>
			</tr>
			<tr>
				<td class="s4">
					IDs
				</td>
				<td class="s5">
					Nodes with mixin "referenceable" have <strike>GUID</strike> a UUID. In practice the node path is often used to reference nodes.
				</td>
				<td class="s5">
					Every object has a GUID used for referencing. Objects located in trees that have a "name" property can also be referred to using the path
				</td>
				<td class="s6">
					All objects can be accessed via a UUID
				</td>
			</tr>
			<tr>
				<td class="s7">
					References
				</td>
				<td class="s8">
					Nodes can reference each other with hard link (special property type) or soft link (by referring to the node path)
				</td>
				<td class="s8">
					MgdSchema types can have properties linking to other objects of same or different type. A link of "parentfield" type places an MgdSchema type in a tree.
				</td>
				<td class="s9">
					No reference support built-in
				</td>
			</tr>
			<tr>
				<td class="s4">
					content hierarchy
				</td>
				<td class="s5">
					All content is hierarchical / in a tree
				</td>
				<td class="s5">
					Content can exist in tree, or independently of it depending on the MgdSchema type definition
				</td>
				<td class="s6">
					flat structure
				</td>
			</tr>
			<tr>
				<td class="s7">
					interesting property types
				</td>
				<td class="s8">
					Multi-valued (like an array), binary properties (e.g. for files), nodes have an implicit sort-order
				</td>
				<td class="s8">
					Binary properties stored using the Midgard Attachment system
				</td>
				<td class="s9">
					Support for binary properties
				</td>
			</tr>
			<tr>
				<td class="s4">
					transactions
				</td>
				<td class="s5">
					Multiple content modifications are written in transactions.
				</td>
				<td class="s5">
					Transactions can be used optionally.
				</td>
				<td class="s6"/>
			</tr>
			<tr>
				<td class="s7">
					events
				</td>
				<td class="s8">
					JCR Observers can register for content changes on different paths and/or for different node types and/or CRUD, receive notification of changes as serialized node
				</td>
				<td class="s8">
					All transactions cause both process-internal GObject signals, and interprocess DBus signals
				</td>
				<td class="s9">
					Support for one external event notification shell script
				</td>
			</tr>
			<tr>
				<td class="s4">
					workspaces
				</td>
				<td class="s5">
					Workspaces provide separate root trees.
				</td>
				<td class="s5">
					No workspaces support in Midgard 9.03, coming in next version
				</td>
				<td class="s6">
					Multiple databases within one CouchDB instance
				</td>
			</tr>
			<tr>
				<td class="s7">
					import and export
				</td>
				<td class="s8">
					nodes or parts of the repository (or the whole repo) can be imported or exported in XML. 2 formats: docview for human-frindly representation, sysview including all technical aspects
				</td>
				<td class="s8">
					Objects can be exported and imported in XML format. There are tools supporting replication via HTTP, tarballs, XMPP, and the CouchDB replication protocol
				</td>
				<td class="s9">
					JSON serialization is the standard way of accessing the repository. CouchDB replication protocol supports full synchronization between instances
				</td>
			</tr>
			<tr>
				<td class="s4">
					versioning
				</td>
				<td class="s5">
					Checkin/checkout model to create new versions of nodes, optionally versions complete sub-trees, supports branching of versions.
				</td>
				<td class="s5">
					No versioning
				</td>
				<td class="s6">
					All versions of content are stored and accessible separately, no branching
				</td>
			</tr>
			<tr>
				<td class="s7">
					locking
				</td>
				<td class="s8">
					Nodes can be locked and unlocked
				</td>
				<td class="s8">
					Objects can be locked and unlocked
				</td>
				<td class="s9"/>
			</tr>
			<tr>
				<td class="s4">
					object mapping
				</td>
				<td class="s5">
					Not in standard, but implemented in Jackrabbit. Rarely used in practice.
				</td>
				<td class="s5">
					Object mapping is the standard way of accessing the repository
				</td>
				<td class="s6">
					All content is accessed via JSON objects
				</td>
			</tr>
			<tr>
				<td class="s7">
					queries
				</td>
				<td class="s8">
					In JCR1 Sql or XPath, in JCR2 also QueryBuilder.
				</td>
				<td class="s8">
					Query Builder
				</td>
				<td class="s9">
					Javascript map/reduce
				</td>
			</tr>
			<tr>
				<td class="s4">
					access control
				</td>
				<td class="s5">
					Done on repository level, i.e. all access control is independent of application. In Jackrabbit: pluggable authentication/authorization handlers.
				</td>
				<td class="s5">
					No access control in Midgard repository, usually implemented on application level. Midgard proves a user authentication API
				</td>
				<td class="s6">
					No access control
				</td>
			</tr>
			<tr>
				<td class="s7">
					persistence
				</td>
				<td class="s8">
					In Jackrabbit different Persistence Managers can be plugged in (RDBMS, tar file, ...)
				</td>
				<td class="s8">
					libgda allows storage to different RDBMS like MySQL, SQLite and Postgres
				</td>
				<td class="s9">
					CouchDB has its own storage
				</td>
			</tr>
			<tr>
				<td class="s4">
					architecture
				</td>
				<td class="s5">
					Jackrabbit: library (jar), JEE resource, OSGi bundle or standalone server
				</td>
				<td class="s5">
					Library
				</td>
				<td class="s6">
					Erlang-based daemon
				</td>
			</tr>
			<tr>
				<td class="s7">
					APIs
				</td>
				<td class="s8">
					Standard: Java-based, PHP coming up. In Jackrabbit: also WebDAV and HTTP-based API
				</td>
				<td class="s8">
					C, Objective-C, PHP, Python
				</td>
				<td class="s9">
					HTTP+JSON
				</td>
			</tr>
			<tr>
				<td class="s4">
					full-text search
				</td>
				<td class="s5">
					Included in repository. In Jackrabbit: Lucene bundled
				</td>
				<td class="s5">
					No (SOLR used on application level)
				</td>
				<td class="s6">
					Plugin for using Lucene, not installed by default
				</td>
			</tr>
			<tr>
				<td class="s7">
					standard metadata
				</td>
				<td class="s8">
					All nodes have access rights, jcr:primaryType and jcr:mixinTypes properties. JCR 2.0 standardizes a set of optional metadata properties.
				</td>
				<td class="s8">
					All objects have a set of standard metadata including creator, revisor, timestamps etc
				</td>
				<td class="s9">
					No standard properties
				</td>
			</tr>
		</tbody></table>
		<p> </p></div>
    </summary>
    <updated>2009-11-19T00:00:01Z</updated>
    <category term="iks-project"/>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2010-01-07T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=251</id>
    <link href="http://jukkaz.wordpress.com/2009/11/18/content-repository-over-http/" rel="alternate" type="text/html"/>
    <title>Content Repository over HTTP</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Two weeks ago during the BarCamp at the ApacheCon US I chaired a short session titled “The RESTful Content Repository”. The idea of the session was to discuss the various ways that existing content repositories support RESTful access over HTTP and to perhaps find some common ground from which a generic content repository protocol could [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=251&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Two weeks ago during the <a href="http://us.apachecon.com/c/acus2009/schedule/barcamp">BarCamp</a> at the <a href="http://us.apachecon.com/c/acus2009/">ApacheCon US</a> I chaired a short session titled “The RESTful Content Repository”. The idea of the session was to discuss the various ways that existing content repositories support RESTful access over HTTP and to perhaps find some common ground from which a generic content repository protocol could be formulated.</p>
<p>The <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" title="Representational State Transfer">REST architectural style</a> was generally accepted as a useful set of constraints for the architecture of distributed content-based applications, but as an architectural style it doesn’t define what the bits on the wire should look like. This is what we set out to define with the <a href="http://tools.ietf.org/html/rfc2616" title="Hypertext Transfer Protocol -- HTTP/1.1">HTTP protocol</a> as a baseline. We didn’t get too far, but see below for some collected thoughts and a useful set of “test cases” that I hope to use to further investigate this idea.</p>
<p><strong>Existing solutions</strong></p>
<p>Many existing content repositories and related products already support one or more HTTP-based access patterns: <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> exposes two slightly different WebDAV-based access points. <a href="http://sling.apache.org/">Apache Sling</a> adds the <a href="http://sling.apache.org/site/manipulating-content-the-slingpostservlet-servletspost.html">SlingPostServlet</a> and default JSON and XML renderings of content. <a href="http://couchdb.apache.org/">Apache CouchDB</a> uses JSON over HTTP as the primary access protocol. <a href="http://lucene.apache.org/solr/">Apache Solr</a> uses XML over HTTP. <a href="http://www.midgard-project.org/">Midgard</a> doesn’t have a built-in HTTP binding for content, but makes it very easy to implement such bindings. This list just scratches the surface…</p>
<p>There are even existing generic protocols that match at least parts of what we wanted to achieve. <a href="http://tools.ietf.org/html/rfc2518">WebDAV</a> has been around for ten years already, but the way it extends HTTP with extra methods makes it harder to use with existing HTTP clients and libraries. The <a href="http://tools.ietf.org/html/rfc5023">AtomPub protocol</a> solves that issue, but being based on the <a href="http://tools.ietf.org/html/rfc4287">Atom format</a> and leaving much of the server behaviour undefined, AtomPub may not be the best solution for generic content repositories.</p>
<p><strong>Content repository operations over HTTP</strong></p>
<p>To better understand the needs and capabilities of existing solutions, we should come up with a simple set of content operations and find out if and how different systems support those operations over HTTP. The most basic such set of operations is CRUD, i.e. how to create, read, update, and delete a document, so let’s start with that. I’m giving each operation a key (CRn, as in “Content Repository operation N”) and a brief description of what’s expected. In later posts I hope to explore how these operations can be implemented with <a href="http://curl.haxx.se/">curl</a> or some other simple HTTP client accessing various kinds of content repositories. I’m also planning to extend the set of required operations to cover features like search, linking, versioning, transactions, etc.</p>
<p><strong>CR1: Create a document</strong></p>
<p>Documents with simple properties like strings and dates are basic building blocks of all content applications. How can I create a new document with the following properties?</p>
<ul>
<li>title = “Hello, World!” (string)</li>
<li>date = 2009-11-17 (date)</li>
</ul>
<p>At the end of this operation I should have a URL that I can use to access the created document.</p>
<p><strong>CR2: Read a document</strong></p>
<p>Given the URL of a document (see CR1), how do I read the properties of that document?</p>
<p>The retrieved property values should match the values given when the document was created.</p>
<p><strong>CR3: Update a document</strong></p>
<p>Given the URL of a document (see CR1), how do update the properties of that document? For example, I want to update the existing date property and add a new string property:</p>
<ul>
<li>date = 2009-11-18 (date)</li>
<li>history = “Document date updated” (string)</li>
</ul>
<p>When the document is read (see CR2) after this update, the retrieved information should contain the original title and the above updated date and history values.</p>
<p><strong>CR4: Delete a document</strong></p>
<p>Given the URL of a document (see CR1), how do I delete that document?</p>
<p>Once deleted, it should no longer be possible to read (see CR2) or update (see CR3) the document.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/251/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/251/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/251/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/251/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/251/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/251/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/251/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/251/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/251/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/251/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=251&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-18T01:45:11Z</updated>
    <category term="General"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:10Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ikscoverage.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ikscoverage.html" rel="alternate" type="text/html"/>
    <title>[LOTD] IKS in the press</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
French IT mag <a href="http://www.lemagit.fr/">LeMagIT</a> has published an article about the <a href="http://www.iks-project.eu/">IKS project</a> including quotations from <a href="http://grep.codeconsult.ch/">Bertrand Delacretaz</a>. Bertrand emphasizes the need for concrete results:
</p>
<div class="blockquote">
<p>
pour décoller, les technologies sémantiques ont besoin de cas d'utilisateur concrets
</p>
</div>
<p>
In the comments section Bertrand mentions his tag line for semantic technologies that I can very well relate to:
</p>
<div class="blockquote">
<p>
La sémantique "sous le capot" oui, la sémantique "dans la figure", non
</p>
</div>
<p>
This roughly translates as: "semantics under the hood yes, semantics in your face, no".
</p>
<p>
In <a href="http://www.computerworlduk.com/">Computerworld UK</a> open source blogger <a href="http://www.computerworlduk.com/community/blogs/index.cfm?blogid=14">Glyn Moody</a> has <a href="http://www.computerworlduk.com/community/blogs/index.cfm?entryid=2644&amp;blogid=14">described his first hands impressions from the IKS workshop in Rome</a>. He comes to a similar conclusion:
</p>
<div class="blockquote">
<p>
Paradoxically, semantic search will only ever really take off once it has receded so far into the fabric of computing that people aren't even aware it's there.
</p>
</div></div>
    </summary>
    <updated>2009-11-18T00:00:01Z</updated>
    <category term="iks-project"/>
    <category term="lotd"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-12-28T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1338</id>
    <link href="http://grep.codeconsult.ch/2009/11/17/what-makes-apache-tick/" rel="alternate" type="text/html"/>
    <title>What Makes Apache Tick?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Looking at the diversity of Apache Software Foundation communities, one can see a recipe for failure: people from different cultural backgrounds, different mother tongues, different employers, different timezones…all working together to create some of the best software on the planet? You must be kidding. 
How can this very loose collage of disparate people pump out [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1338&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p><img align="right" alt="apachecon_us_09_twleung.jpg" border="0" height="166" src="http://bdelacretaz.files.wordpress.com/2009/11/apachecon_us_09_twleung.jpg?w=250&amp;h=166" width="250"/>Looking at the diversity of <a href="http://apache.org">Apache Software Foundation</a> communities, one can see a recipe for failure: people from different cultural backgrounds, different mother tongues, different employers, different timezones…all working together to create some of the best software on the planet? You must be kidding. </p>
<p>How can this very loose collage of disparate people pump out dozens of high-quality releases every year, often working better than more structured corporate teams? This “mystery” has been on my mind for a while, and I have identified four drivers that influence the way we use collaboration tools that play a major part in our success. </p>
<p>The first driver is a <em>common vision</em> amongst project members. The Biblical saying, “Without a vision, my people perish” is quite valid for our projects. Both using a central development mailing list for each project, and spending time to collectively define our project’s charter, helps us foster this common vision amongst project members. Every member should have the same answer to the “what are our goals?” question, so it’s important to get them to talk in a central place, where they all get the same information, as opposed to undocumented, one-to-one discussions. </p>
<p>Secondly, providing <em>real-time status updates</em> to project members is key in helping them stay on track. At Apache, this is implemented by the many events generated by our collaboration tools: commit events to indicate code changes, issue tracker events to provide updates about the status of bugs and new features, success/failure events from continuous build systems, and standardized ways of  announcing releases so that other projects are informed. Project members subscribe freely to as few or as many event channels that they want to, so as to stay on top of things in near real-time, and without having to actively ask others about what happened. Status meetings? No need for those, as the information is flowing all the time. </p>
<p>The third success driver lies in enabling <em>real-time help requests</em>. In an immediate crisis of the “we need to deliver this by tomorrow” type, especially when working with a big team, you need to be able to ask for help without necessarily 1) knowing who specifically will help, and 2) bothering others with direct person-to-person requests, especially if they work in a different timezone. The key here is using issue trackers, where one web page stores key data and parts of the dialog that leads to resolving an issue. Posting an issue on the tracker, with sufficiently detailed instructions about how to reproduce the problem, along with attributes such as severity level, affected modules, etc., is the best way to expose a problem to the group quickly and with precision. Using an issue tracker also allows you to quickly and efficiently change priorities as well as re-assign issues and tasks – key elements that make all the difference in a crisis.</p>
<p>Finally, having <em>searchable archives</em> of this information allows new project members, or those returning after a period of absence, to learn what transpired and why things have been done in a certain way. Without self-service archives, new participants would have to talk to everybody to find out about the project’s history, past decisions, conventions, etc., which is neither efficient nor scalable. Most of our archives are automatically built as project activities progress: mailing lists are archived, source code control history is kept forever, and issue trackers write the full history of the project’s micro-decisions.</p>
<p>Combined with Apache’s principles of meritocracy and consensus-based decision making, these four collaboration drivers allow our project teams to work very efficiently, and, in many cases, even more so than structured teams that do not establish those central hubs of information exchange.</p>
<p>Does your project team foster a common vision and provide tools for real-time status updates, real-time help requests and self-service archives to its members? If yes, congratulations: you’re on a good track to becoming as effective as an Apache project!</p>
<p><em>Many thanks to Sally Khudairi for reviewing and copy editing.</em></p>
<div><em>ApacheCon US 2009 picture by<br/>
<a href="http://www.flickr.com/photos/twleung/" rel="cc:attributionurl">Ted Leung</a> / Creative Commons License (<a href="http://creativecommons.org/licenses/by-nc-sa/2.0/" rel="license">CC BY-NC-SA 2.0</a>).</em></div>
<p>See also my <a href="http://grep.codeconsult.ch/2009/04/01/open-source-collaboration-tools-are-good-for-you-relooked-and-live-tomorrow/">Open Source Tools are Good For You</a> presentation, which discusses the tools that Apache projects use to implement this.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1338/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1338/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1338/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1338/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1338/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1338/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1338/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1338/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1338/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1338/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1338&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-17T09:19:57Z</updated>
    <category term="Open Source"/>
    <category term="asf"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1330</id>
    <link href="http://grep.codeconsult.ch/2009/11/16/what-does-apache-provide-that-other-code-repositories-dont/" rel="alternate" type="text/html"/>
    <title>What does Apache provide that other code repositories don’t?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">People thinking about creating an open source project might rightly consider hosting on one of the various hosting services available: Google Code, SourceForge, kenai, bitbucket and github come to mind. Quick and easy, create a repository or request some resources and you’re in business.
Incubating a project at the Apache Software Foundation (ASF) takes a lot [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1330&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>People thinking about creating an open source project might rightly consider hosting on one of the various hosting services available: Google Code, SourceForge, kenai, bitbucket and github come to mind. Quick and easy, create a repository or request some resources and you’re in business.</p>
<p><a href="http://incubator.apache.org">Incubating</a> a project at the Apache Software Foundation (ASF) takes a lot more effort than just requesting a hosting space on one of those services, so why would you do that? One can perfectly host code on one of those services with an Apache License, so what’s the difference?</p>
<p>I think the big difference lies in the <em>governance model</em>, and in fact calling the ASF just a <em>code repository</em> is very wrong.  Let’s discuss some key elements of that.</p>
<p>The <a href="http://www.apache.org/foundation/voting.html">Apache voting process</a> has been tried and tested since 1999, or even earlier. This is one of the things that projects coming through the <a href="http://incubator.apache.org">incubator</a> have to learn, led by their <a href="http://incubator.apache.org/incubation/Roles_and_Responsibilities.html#Mentor">mentors</a>. Learning is usually very easy as people quickly see the benefits of those simple no-nonsense rules.</p>
<p>The ASF also provides a well-defined <a href="http://www.apache.org/foundation/how-it-works.html#structure">structure</a> for managing projects, and the foundation as a whole, in a fair and consensus-driven way. One could argue that structure gets in the way, and sometimes it does, but when things go wrong having a well-defined way of getting back on track helps tremendously. And this structure leaves a lot of freedom to the project’s management committee (PMC), there’s a lot of room for adapting a project’s way of working to its community and goals.</p>
<p>Creating an Apache project is certainly not required for all open source projects (and the foundation couldn’t scale to thousands of projects right now anyway), but for the critical infrastructure parts of one’s business (what’s sometimes called “open core”), having an established governance model makes all the difference.</p>
<p>The governance model is just one of the benefits that Apache projects get – there’s also the visibility, brand recognition, nice <a href="http://ci.apache.org/">build services</a>, and other <a href="https://issues.apache.org/">tools</a>, and, last but not least, the many friends that you make along the way! As everybody now knows, there are <a href="http://news.cnet.com/8301-13505_3-10396229-16.html">no jerks at Apache</a>!</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1330/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1330/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1330/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1330/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1330/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1330/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1330/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1330/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1330/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1330/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1330&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-16T16:46:19Z</updated>
    <category term="Open Source"/>
    <category term="asf"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-8516550838640378334</id>
    <link href="http://michaelmarth.blogspot.com/feeds/8516550838640378334/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=8516550838640378334" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/8516550838640378334?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/8516550838640378334?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/S8xroH0CGmw/running-itunes-genre-tagger-script-with.html" rel="alternate" type="text/html"/>
    <title>Running the iTunes genre tagger script with OS X Automator</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Due to <a href="http://michaelmarth.blogspot.com/2009/11/python-script-to-set-genre-in-itunes.html">public demand</a> here's a little recipe how to run <a href="http://michaelmarth.blogspot.com/2009/11/python-script-to-set-genre-in-itunes.html">last post's mp3 tagger</a> without using the command line on OS X:<br/><ul><li>Open Automator</li><li>Start a new "Application" project</li><li>Drag the "Run Shell Script" action into the right workflow panel, set the "pass input" drop-down to "as arguments" and edit the script to (see screenshot below):</li></ul>for f in "$@"<br/>do<br/>   /opt/local/bin/python /Users/michaelmarth/Development/Code/mp3tagger/tag_groupings.py -d "$f"<br/>done<br/><br/>(you will have to adapt the paths to your local setup)<br/><ul><li>Save the application and happily start dropping mp3 folders onto the application's icon.</li></ul><br/><a href="http://img.skitch.com/20091115-xp4nqy4fnhqg72xdhey19nqdwx.jpg"><img alt="" border="0" src="http://img.skitch.com/20091115-xp4nqy4fnhqg72xdhey19nqdwx.jpg" style="cursor: pointer; width: 736px; height: 245px;"/></a><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-8516550838640378334?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-11-15T14:37:08Z</updated>
    <published>2009-11-15T14:30:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/11/running-itunes-genre-tagger-script-with.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/wjax09.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/wjax09.html" rel="alternate" type="text/html"/>
    <title>Back from W-JAX 09</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
This year's <a href="http://it-republik.de/jaxenter/wjax09/">WJAX</a> in Munich has been (again) a great success. The conference area was crowded up to the maximum capacity of the hotel I guess. Around 150 talks, different special days covering topics like persistence, OSGi, Scala, and the never dying SOA. My two talks about <a href="http://entwickler.com/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=wjax09&amp;id=12314">JCR</a> and <a href="http://entwickler.com/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=wjax09&amp;id=11356">Apache Sling</a> have been well attended, some interesting questions came up and I could spread the interest in these cool technologies. Now looking forward to JAX 2010 :)
</p>


<div id="__ss_2473988" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/cziegeler/jcr-java-content-repositories" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="JCR - Java Content Repositories">JCR - Java Content Repositories</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/cziegeler" style="text-decoration: underline;">Carsten Ziegeler</a>.</div></div>


<div id="__ss_2484361" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/cziegeler/osgi-scripting-and-rest-building-webapps-with-apache-sling" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="OSGi, Scripting and REST, Building Webapps With Apache Sling">OSGi, Scripting and REST, Building Webapps With Apache Sling</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/cziegeler" style="text-decoration: underline;">Carsten Ziegeler</a>.</div></div></div>
    </summary>
    <updated>2009-11-13T00:00:01Z</updated>
    <category term="jcr"/>
    <category term="sling"/>
    <category term="rest"/>
    <author>
      <name>Carsten Ziegeler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-12-21T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view-update.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view-update.html" rel="alternate" type="text/html"/>
    <title>Update: The IKS semantic engine - a pragmatist's view</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Update to "<a href="http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view.html">The IKS semantic engine - a pragmatist's view</a>": here are the slides:</p>

<div id="__ss_2492648" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/bdelacretaz/title-the-iks-restful-semantic-engine-lets-get-started" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Title     The IKS RESTful semantic engine - let's get started!">Title          The IKS RESTful semantic engine - let's get
started!</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View
more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/bdelacretaz" style="text-decoration: underline;">bdelacretaz</a>.</div></div>

<p>
The presentation went well, and will hopefully lead to a sprint to actually implement something along these lines. The two demos that used UIMA at the <a href="http://www.iks-project.eu/civicrm/event/info">workshop</a> made me think that UIMA should be part of that picture, at least as a plugin for semantic lifting. And I did the presentation in less than 8 minutes out of the 10 that were allocated. Bonus points?</p></div>
    </summary>
    <updated>2009-11-13T00:00:01Z</updated>
    <category term="iks-project"/>
    <author>
      <name>Bertrand Delacretaz</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-12-18T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ikssearchbenchmark.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ikssearchbenchmark.html" rel="alternate" type="text/html"/>
    <title>IKS Search Benchmark</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>

	<a href="http://www.iks-project.eu">
	<img align="right" height="111" src="http://dev.day.com/microsling/content/blogs/main/ikssearchbenchmark/images/iks-logo.jpg" width="214"/>
	</a>

<a href="http://www.day.com/cq5">CQ5</a> search comes with some improvements over JCR's search capabilities, e.g. adapting result rankings to what users choose or faceted search. Within the <a href="http://www.iks-project.eu">IKS project</a> <a href="http://grep.codeconsult.ch">Bertrand</a> and I have experimented with another possibility: link-based ranking, i.e. adjusting search results based on the content of link tags. For example: if page A links to page B with the link text "lorem ipsum" then page B should get a higher ranking when a user searches for "lorem ipsum". This is essentially what Google does, but we wanted to apply it to internal links (within the same site) only.
</p>
<p>To give away the results right away: for many web sites the results will probably not improve dramatically, because there are not enough internal links. However, it might help for some projects so our implementation approach is described below in case you want to give it a try in your project.</p>
<p>
In order to extract links from a node we opted for parsing the complete rendered HTML presentation of a node rather than looking only at the Rich Text properties of one node. In that way we could also catch programmatically generated links from templates. So we ended up by setting up a little spider on the publish server that retrieves HTML representations of all pages. The spider is deployed as an OSGi bundle within the server so it gets the locations of all pages from an internal repository query. For each page the HTML is retrieved and parsed. The found links are stored as child nodes below the page that is linked to. In the example from above: if page A links to page B with the link text "lorem ipsum" then page B gets a child node with properties source=A and text="lorem ipsum". Implemented in that way we could basically use the Jackrabbit indexer without further changes.
</p>
<p>
We have also implemented a JCR Observer that catches changes to pages and fixes the corresponding links. Template updates are not caught, yet.
</p>
<p>
The sources are attached to this post. The Java program can be used as a standalone application or deployed as an OSGi bundle. The standalone program takes a couple of optional arguments for running a full upfront spidering, deleting all found link nodes etc. In case you want to give it a try please be aware:
</p>
<ul>
<li><p>The standalone program requires RMI to be enabled on the repository which is not the case by default (in the code port 1235 is used).</p></li>
<li><p>The searches must take into account the new properties of the link nodes. One possibility is to re-configure the Jackrabbit indexing,
which in CQ5 is done in the
crx-quickstart/server/runtime/0/_crx/WEB-INF/classes/indexing_config.xml
file, by adding:<br/>
</p><div class="codesnippet scrollablecodesnippet">
<pre>&lt;index-rule nodeType="nt:unstructured"
  condition="parent::backlinks/@jcr:primaryType=''{http://www.jcp.org/jcr/nt/1.0}unstructured"&gt;
  &lt;property boost="5.0"&gt;linkedText&lt;/property&gt;
&lt;/index-rule&gt;
</pre></div>
<p/></li>
</ul>
<p>The boost factor in this configuration can be adjusted to give links a proper weight relative to the other properties of a node<br/>
For reindexing delete these directories:<br/>
crx-quickstart/repository/repository/index<br/>
crx-quickstart/repository/workspaces/crx.default/index<br/>
crx-quickstart/repository/workspaces/crx.system/index
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Results</h6>

<p>
We tested the approach on the content of our corporate website (a rather small content corpus). Overall, the search results improved slightly, but not much (although we did not spend a lot of time on tweaking the boost factor). As stated above I believe that corporate websites in general will not benefit from link-based ranking very much as the majority of links in them are often reflecting the navigation (i.e. the hierarchical structure of the site) so they provide little additional information. Of course, on the other side there is no harm in using links for search relevance either.
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Alternative approach</h6>

<p>
Marcel Reutegger (the MAN when it comes to JCR searches) gave a lot of great input to our experiment (thanks a lot for this). He also hinted how an alternative implementation could look like: using an output filter, which can process HTML content as it's being generated. In CQ5 the validity of links is already checked that way, so storing them would naturally fit there. Also, he suggested storing the links not below the pages themselves, but in a separate part of the repository. In a background processing job these links could be aggregated and the most relevant key words would eventually be written into the page nodes.
</p></div>
    </summary>
    <updated>2009-11-12T00:00:01Z</updated>
    <category term="iks-project"/>
    <category term="cq5"/>
    <category term="tutorial"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-12-17T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ignitechicago.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ignitechicago.html" rel="alternate" type="text/html"/>
    <title>Ignite Chicago</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p> After the <a href="http://dev.day.com/microsling/content/blogs/main/ignitezurich.html">Ignite in Zurich</a>, there came <a href="http://day.com/summit/chicago.html">Ignite in Chicago</a>, where our American customers, prospects, partners, and Day staff met to share information, experiences, to network, and simply have a very good time. The event itself was slightly bigger than the event in Zurich, both in terms of number of participants and available room.  </p> <p> <img src="http://farm3.static.flickr.com/2711/4087044589_c16cb5e832_m_d.jpg"/> </p> <p> <img src="http://farm3.static.flickr.com/2712/4087798950_beb431fcac_m_d.jpg"/> </p> <p style="clear: both;">Ignite was hosted by Day customers, in more than one way: by the <a href="http://cityofchicago.org/">City of Chicago</a> itself, and by the grand <a href="http://www.icchicagohotel.com/">Intercontinental Hotel</a>, of the <a href="http://www.ihg.com">IHG Group</a>, on Chicago's famous shopping avenue, the <a href="http://www.themagnificentmile.com/">Magnificent Mile</a>.  </p> <p> <img src="http://farm3.static.flickr.com/2797/4087811316_1d5165e370_m_d.jpg"/> </p> <p> <img src="http://farm1.static.flickr.com/150/4087822518_69e9caff7f_m_d.jpg"/> </p> <p style="clear: both;"> Again, we had a lot of great presentations, panels, Q&amp;A sessions, as well as informal chats. And the Foreigner concert at the end was the icing on the cake. </p> <p> <img src="http://farm3.static.flickr.com/2536/4087055603_a5320ed814_m_d.jpg"/> </p> <p style="clear: both;"> Be sure to check out the conference <a href="http://search.twitter.com/search?q=%23dayignite">hashtag was #dayignite</a> and here are some Ignite pictures on Flickr, with lots of new coverage from Chicago: </p> <p>     </p>  <p> Looking forward to next year's Day Customer Summit! </p></div>
    </summary>
    <updated>2009-11-11T00:00:01Z</updated>
    <category term="cms"/>
    <category term="cq"/>
    <category term="ignite"/>
    <author>
      <name>Greg Klebus</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-12-02T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-6874149097478073929.post-5216160329595073684</id>
    <link href="http://blog.meschberger.ch/feeds/5216160329595073684/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=6874149097478073929&amp;postID=5216160329595073684" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/6874149097478073929/posts/default/5216160329595073684" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/6874149097478073929/posts/default/5216160329595073684" rel="self" type="application/atom+xml"/>
    <link href="http://blog.meschberger.ch/2009/10/on-version-numbers.html" rel="alternate" type="text/html"/>
    <title>On Version Numbers</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have been thinking about using version numbers lately while working on some API extension of the Sling Engine bundle. So here is what I think versions are all about and that we all should be very careful when changing code and assigning versions to it.<br/><br/>On a high level versions have various aspects:<br/><dl><br/><dt>Syntax</dt><br/><dd>There is no global agreement on the correct syntax of versions. I tend to like the OSGi syntax specification: The version has four parts separated by dots. The first three parts are numbers, called the major, minor and micro version. The fourth part is a plain (reduced character set) string which may be used to describe a particular version. Version numbers are compared as you would expect, except that the fourth part is employs case-sensitive string comparison comparing the actual Unicode codepoints of the characters.</dd><br/><dt>Semantic</dt><br/><dd>The semantics of a version define what it means to increment each place of a version. In the world of software development there is even less agreement on the semantics of version numbers than there is agreement on the syntax. The OSGi specification just defines suggested semantics.</dd><br/><dt>Expectations</dt><br/><dd>When seeing product version numbers people tend to have expectations towards the products. For example when Firefox went from 2.x to 3.0 we expected a major change. Likewise when Day upgraded the version number to 5 for the newest version of Communiqué the expectation is correct, that it is a major new version of the product. In fact we completely rewrote Communiqué for the 5.0 release.</dd><br/><dt>Version Items</dt><br/><dd>When it comes to apply version numbers to things there are quite a number of things in a single product, which may be numbered. Take for example Day Communiqué 5. There is a product - the thing you take out of the box and install on your server. Then there are OSGi bundles. Finally there are Java packages shared between the bundles and used by the application scripts.</dd><br/></dl><br/>So here are my definitions of the version number aspects layed out above.<br/><br/><b>Syntax</b><br/>IMHO the Syntax for version numbers as defined in the OSGi Core specification (Section 3.2.4, Version) is good enough and clear for most uses. The nice thing about this specification is that in Section 3.2.5, Version Ranges, a syntax is defined to define ranges of versions. Such ranges are of great use when depending on other items. Most importantly of course this would be list of imported Java packages.<br/><br/><b>Semantics</b><br/>As for the semantics the main problem comes from the fact, that not all versioned items understand version numbers in the same way. For example on a product level, c.f. Day Communiqué, the version number of a release is generally defined by marketing and/or product management.<br/><br/>I will not dive into how product numbers are to be defined. This is outside of my working knowledge and beyond may abilities ;-)<br/><br/>On the OSGi bundle level on the other hand and even more so on the Java package level (for OSGi package exports), the version number is more a call of the developer. Version numbers on this level are intended to convey to other developers something about the evolution of the bundle and/or package.<br/><br/>Let's start with exported Java packages. I tend to attribute the following semantics to the parts of a a version number:<br/><ul><br/><li>Increasing the major version number means the API has been modified in an incompatible way. Mostly this means public classes, interfaces, methods, fields have been removed or renamed. As a consequence code using and implementing the API will break and has to be modified.</li><br/><li>Increasing the minor version number means the API has just been enhanced in a way that is compatible for use. Increasing the minor version number, though, means that code implementing the API might have to be modified to comply with the added API like the definition of new methods.</li><br/><li>Increasing the micro version number means that there have been some bug fixes. Generally, a pure API consisting of just interfaces has little chance for bugs which do not ammount to minor or even major version number increase. If the exported packages of a bundle happen to contain concrete or abstract classes with implementation code, bugs cannot be excluded. As such it is conceivable that a the micro version number of an exported package might be increased.</li><br/><li>As for the qualifier part, as the fourth part of a version number is called by the OSGi specification, this meaning of this part is completely free. On a package export level, I would go as far as to say, it should not generally be used. The qualifier part may be interesting on an OSGi bundle level to create inter-release builds.</li><br/></ul><br/><br/><b>Expectations</b><br/>Peoples expections as it comes to version numbers is not ease to convey. Most people expect different things. But I think one thing is common to all: If there is a version number increase something must have changed.<br/><br/>So, I think to use developers it is important to understand, that we only increase the version number of an item if there is a change -- not sure whether a fixed spelling error in some Java comment is change enough. Again, your mileage may vary if you happen to be product manager for a product to be soled ....<br/><br/><b>Recommendations</b><br/>Based on how I understand the version number parts in terms of exported packages, here are my recommendations for package imports and bundle versions.<br/><ul><br/><li>If you implement the exported API of another bundle, import the API package using a version range of the form [x.y,x.y+1). This means accept any increment in the micro and qualifier parts. But as soon as the minor version number changes, consider this an incompatibility.</li><br/><li>If you use an exported API, import the API package using a version range of the form [x.y,x+1). This means accept any version starting with a minimum number upto the next breaking API chnage identified by a new major version number.</li><br/><li>Don't increase the version number of an API package if nothing in that package has changed at all.</li><br/><li>Bundles should be versions following versioning of exported packages. So if at least one of the exported packages has a major version number increase, the bundle's version should also have a major version number increase. Likewise for the minor number. The use of qualifiers is optional and sometimes helpful.</li><br/><li>Apart from being driven by versioning of exported packages, bundle versions may also be increased depending on the extent of changes in the bundle. For example in the case of a pure implementation bundle, greatly increasing the functionality might give rise to a major version number increase of the bundle.</li><br/><li>If you are using Maven to build your projects, always depend on the lowest version of a dependent module which has the API functionality you need.</li><br/></ul><br/><br/><b>Link</b><br/>The Eclipse site contains a very interesting and IMHO very reality proven text about versioning of products, bundles and packages: <a href="http://wiki.eclipse.org/index.php/Version_Numbering">Version Numbering</a><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/6874149097478073929-5216160329595073684?l=blog.meschberger.ch" width="1"/></div></div>
    </content>
    <updated>2009-11-09T15:21:46Z</updated>
    <published>2009-10-15T11:50:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Client"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="OSGi"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="Bundle"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="Package"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="Version"/>
    <author>
      <name>fmeschbe</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/14510099790398523034</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-6874149097478073929</id>
      <author>
        <name>fmeschbe</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/14510099790398523034</uri>
      </author>
      <link href="http://blog.meschberger.ch/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/6874149097478073929/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://blog.meschberger.ch/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <title>fmeschbe's blog</title>
      <updated>2009-12-21T18:06:50Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20091109.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20091109.html" rel="alternate" type="text/html"/>
    <title>[LOTD] How Day Software stumbled upon an open source business strategy</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Day's CMO Kevin Cochrane has been <a href="http://blogs.the451group.com/opensource/2009/11/09/how-day-software-stumbled-upon-an-open-source-business-strategy/">interviewed</a> by Matthew Aslet of the <a href="http://www.the451group.com/">451 group</a> about Day's open source strategy. I particularly liked:
</p>


<div class="blockquote"><p>
While many other vendors have chosen to retain control over their open source projects for commercial reasons, Day opted to relinquish control with the aim of ubiquity.
</p></div>

<p>Full interview <a href="http://blogs.the451group.com/opensource/2009/11/09/how-day-software-stumbled-upon-an-open-source-business-strategy/">here</a>.</p></div>
    </summary>
    <updated>2009-11-09T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="open"/>
    <category term="apache"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-26T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view.html" rel="alternate" type="text/html"/>
    <title>The IKS semantic engine - a pragmatist's view</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://www.iks-project.eu">
<img align="right" height="111" src="http://dev.day.com/microsling/content/blogs/main/iks-pragmatic-view/images/iks-logo.jpg" width="214"/>
</a>

As work on the <a href="http://www.iks-project.eu/">IKS project</a> progresses, my (extremely) pragmatic mind 
keeps going back to the <em>how can we make this simpler?</em> question.
  
</p>

<p>
One of the major goals of IKS is to create semantic extensions for content management systems, but what does 
that mean? The exact use cases are still vague, and in such a situation it is too easy to over-engineer 
things, <em>just in case</em>.
</p>

<p>
We have been talking about RESTful interfaces to IKS components for a while now, but what does this mean
exactly? How can we make a concrete step towards defining such interfaces? 
</p>
<p>I'm a big fan of small concrete 
steps that lead us towards pragmatic solutions, so let's try to take one such step. 
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Machine-level use cases</h6>

<p>
Let's start by defining a few simple use cases, at the "machine level": a content management system is the
client, and the IKS <em>semantic engine</em> the server. We have discussed this already within IKS, here's 
a synthetic summary:  

</p><dl>

<dt>Semantic lifting</dt>
<dd>
Let IKS extract semantic information from (multimedia) content: person and place names, structured 
links between content items, etc.
Optionally make this information editable/confirmable by the client system, as a human user
might have to refine the system's suggestions.
<br/>
<em>At the machine interface level, this requires registering content with the IKS semantic
engine, reading the resulting semantically lifted document, and optionally modifying it.</em>  
</dd>

<dt>Classification and auto-tagging</dt>
<dd>
Let IKS suggest categories and/or tags for pieces of multimedia content.
If an author validates the suggestions, inform IKS of what choices were made.
<br/>
<em>From the machine interface point of view, this is very similar to semantic lifting</em>. 
</dd>

<dt>Query building assistance</dt>
<dd>
Let IKS assist users in formulating search queries, interactively.
<br/>
<em>From the machine interface point of view, this is very similar to semantic lifting</em>.
</dd>

<dt>Similarities, correlation</dt>
<dd>
Let IKS find similarities between pieces of multimedia content. The axes on which
those similarities are found can vary: images, for example, can be graphically similar,
or similar in terms of the real world entities that they display.
<br/>
<em>At the machine interface level, this requires registering content with the IKS semantic
engine, and later running queries against this content.</em>  
</dd>

</dl>

<p/>

<p>
This simple list already hides significant complexity, yet those use cases should be understandable by
Joe Author. 
</p>
<p>
Enabling those four use cases could add a lot of value to existing and future content management
systems, depending on the quality of the semantic components. 
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">RESTful interface</h6>
<p>
Let's design a RESTful interface based on the machine interactions required to implement
the above use cases. 
</p>
<p>
Remember that, in what follows, <em>client</em> designates a content management system that wants
to use the IKS engine.
</p>

<strong xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" class="h7">Register content with IKS</strong>
<p>
To build knowledge about our content, IKS needs to be able to find it. In RESTful terms this means
providing IKS with an URL that points to said content, so we have:
</p>

<div class="blockquote"><p>
Rule #1: Content is registered with the IKS server by HTTP POST requests, containing lists of URLs
that point to (created or modified) content items. 
</p></div>
<div class="blockquote"><p>
Rule #2: IKS reads content by making HTTP GET requests to registered pieces of content. Those URLs
must return Content-Types that IKS understands. Some Content-Types are preferred and allow IKS to 
better understand the content. 
</p></div>
<p/>

<strong xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" class="h7">Semantic Lifting</strong>
<p>
Once content is registered, the client can request a semantic view of that content from IKS. That view
lists semantic entities that have been extracted from the content.
</p>
<p>
Depending on the IKS implementation, the semantic view can be editable. It is retrieved by a GET request that
contains the IKS identifier (provided by IKS when content is registered) of the content item, and modified 
using an HTTP PUT request.
</p>
<p>
The Content-Type and data formats use existing standards, as far as possible.
</p>
<p>
The semantic view includes IKS-specific metadata, for example to indicate that some parts of the semantic view
are still being computed.
</p>
<div class="blockquote"><p>
Rule #3: The semantic view of a content item is retrieved with a GET request, and if editable can be
modified by a PUT request of the modified version.
</p></div>

<strong xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" class="h7">Semantic queries</strong>
<p>
Semantic queries are implemented using GET methods on various query URLs, that define how the query
is interpreted. 
</p>
<p>
Results are returned with similar Content-Types and data formats as used for semantic lifting.
</p>
<div class="blockquote"><p>
Rule #4: Semantic queries are executed via GET requests, and return the identifiers (URLs) of the 
selected content items, optionally with some contextual info to display on query result pages. 
</p></div>

<strong xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" class="h7">IKS engine status</strong>
<p>
Semantic lifting and indexing operations might take some time, so it's useful for the client to have
information on the engine's status, in machine-readable form.
</p>
<div class="blockquote"><p>
Rule #5: The IKS server reserves part of its URL space for system
status information, and provides status information in a structured format. 
</p></div>

<strong xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" class="h7">Is that it?</strong>
<p>
I think that's it - these simple RESTful interactions should be sufficient to implement
our use cases. 
</p>
<p>
What's left is to define the Content-Types used, and for this we can most certainly use existing
formats, no need to reinvent any wheel here. 
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">RESTful IKS framework</h6>
<p>
The proof of the pudding is in the eating, and if we wait too long the pudding might lose its 
taste...so why not start buiding this right away?
</p>
<p>
Purists might (rightly) argue that the above is not a design, just a somewhat vague set of principles. 
Yet, combined with a prototype implementation, this might be a very good way of making a step
in the right direction, and of clarifying requirements and interfaces. 
</p>
<p>
My suggestion for the next steps is as follows:
</p><ol>
<li><p>Implement the above interface, using dummy semantic components.</p></li>
<li><p>Provide system interfaces to integrate actual semantic components (semantic lifting, classification,
auto-tagging, querying) as plugins.</p></li>
<li><p>Researchers can work on the semantic lifting components, and integrate them without requiring
significant changes on the client side.</p></li>
</ol>
<p/>
<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Conclusion</h6>
<p>
The best way to go forward with this is probably to create an open source project to collaborate on 
this RESTful IKS framework. 
</p>
<p>
Even if that framework is thrown away later as the IKS architecture progresses, if
would allow IKS consortium members to build a much better understanding
of what's actually needed to add "semantic value" to existing and future content management 
systems.    
</p></div>
    </summary>
    <updated>2009-11-09T00:00:01Z</updated>
    <category term="iks-project"/>
    <author>
      <name>Bertrand Delacretaz</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-21T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/apacheconus09slides.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/apacheconus09slides.html" rel="alternate" type="text/html"/>
    <title>Slides from the NoSQL Meetup and ApacheCon US 09</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://us.apachecon.com/c/acus2009/">ApacheCon US 09</a> in Oakland and the <a href="http://www.nosqloakland.org/">NoSQL meetup</a> are over. Find below the slides of the talks given by Day's engineers covering Apache projects <a href="http://sling.apache.org/site/index.html">Sling</a>, <a href="http://jackrabbit.apache.org/">Jackrabbit</a>,  <a href="http://lucene.apache.org/tika/">Tika</a> and <a href="http://poi.apache.org/">POI</a> as well as OSGi.</p>


<div id="__ss_2408369" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/bdelacretaz/jcr-in-10-minutes-2408369" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="JCR In 10 Minutes">Bertrand Delacretaz:  JCR In 10 Minutes</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/bdelacretaz" style="text-decoration: underline;">bdelacretaz</a>.</div></div>

<div id="__ss_2383686" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/bdelacretaz/life-in-open-source-communities-apachecon-us-2009" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Life in Open Source Communities, ApacheCon US 2009">Bertrand Delacretaz: Life in Open Source Communities</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/bdelacretaz" style="text-decoration: underline;">bdelacretaz</a>.</div></div>


<div id="__ss_2432056" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/cziegeler/jcr-in-action-apachecon-us-2009" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="JCR In Action (ApacheCon US 2009)">Carsten Ziegeler: JCR In Action</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/cziegeler" style="text-decoration: underline;">Carsten Ziegeler</a>.</div></div>


<div id="__ss_2442206" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/cziegeler/embrace-change-embrace-osgi" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Embrace Change - Embrace OSGi">Carsten Ziegeler: Embrace Change - Embrace OSGi</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/cziegeler" style="text-decoration: underline;">Carsten Ziegeler</a>.</div></div>


<div id="__ss_2433501" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/fmeschbe/rapid-jcr-applications-development-with-sling-2433501" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Rapid JCR Applications Development with Sling">Felix Meschberger: Rapid JCR Applications Development with Sling</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/fmeschbe" style="text-decoration: underline;">Felix Meschberger</a>.</div></div>


<div id="__ss_2440559" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/jukka/mime-magic-with-apache-tika-2440559" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Mime Magic With Apache Tika">Jukka Zitting: Mime Magic With Apache Tika</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/jukka" style="text-decoration: underline;">Jukka Zitting</a>.</div></div>


<div id="__ss_2427228" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/paolomoz/apache-poi-recipes" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Apache Poi Recipes">Paolo Mottadelli: Apache Poi Recipes</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/paolomoz" style="text-decoration: underline;">Paolo Mottadelli</a>.</div></div></div>
    </summary>
    <updated>2009-11-09T00:00:01Z</updated>
    <category term="apache"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-23T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/boye09.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/boye09.html" rel="alternate" type="text/html"/>
    <title>JBoye Presentation: WCM Trends for 2010</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Today I had the opportunity to speak at the <a href="http://www.jboye.com/conferences/aarhus09/">JBoye conference in Aarhus</a>. It was a pleasure as every year since the audience and speakers really constitutes a who-is-who of WCM visionaries and insiders. I am definitely looking forward to coming back next year.
</p>
<div id="__ss_2430936" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/uncled/jboye-presentation-wcm-trends-for-2010" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="JBoye Presentation: WCM Trends for 2010">JBoye Presentation: WCM Trends for 2010</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/uncled" style="text-decoration: underline;">David Nuescheler</a>.</div></div></div>
    </summary>
    <updated>2009-11-05T00:00:01Z</updated>
    <category term="cms"/>
    <category term="wcm"/>
    <category term="cq5"/>
    <author>
      <name>David Nuescheler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-19T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/tibtec.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/tibtec.html" rel="alternate" type="text/html"/>
    <title>Ask the community: TibTec</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>

</p>

<div style="border-bottom: 1px dotted rgb(153, 153, 153); padding: 2px;">
<p>
<em>
The Tuberculosis Project project is one of the Sling users registered on the <a href="http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=2852421">Sling user wiki page</a>. This is an interview with developer Audrey Colbrant who worked on the project.
</em>
</p>
</div>

<p>
<b>Audrey, can you please tell us a bit about the TibTec Tuberculosis Project? What are the project's aims and background?</b>

</p><p>
The TB project is developed by <a href="http://www.tibtec.org">Tibtec</a>, a nonprofit technology center based in Dharamsala (India) and directed by M. Phuntsok DORJEE. The aim of the project was to build a system to monitor the tuberculosis among tibetan communities in India, Nepal and Bhutan. Thanks to technology advances in mobile and web computing, it is now possible to design a recording and reporting web portal supporting the WHO DOTS protocol.
</p><p>
The project of monitoring the tuberculosis among tibetan communities in India was born 1 year ago thanks to four actors: the DoH (Department of Health, Tibetan Government in Exile), Tibetan Delek Hospital (Gangchen Kyishong - India), AISPO (Italian Association for Solidarity Of Persons), and the Johns Hopkins University (USA). TibTec is working on a system for the above four actors.
</p><p>
The main goal of the project is to build a simple, low-cost and versatile framework so that communities all over the world could benefit from it. The system could be easily customized for other works as well since it based on open source software.
</p><p>
If you want to take a look at the architecture, follow the <a href="http://tamia.inrialpes.fr:7402/apps/tb_monitoring/images/development/tb_project_architecture.jpg">guide</a>.
</p>

 
<p>
<b>So how did you end up using Sling? Did you compare Sling against some other frameworks?</b>
</p><p>
The implementation of the TB project was part of the master project in computer science of my university.
Jacques Lemordant, researcher in the WAM project at <a href="http://wam.inrialpes.fr">INRIA</a> was in contact with M. Dorjee, CEO of TibTec, since several years.
Together they have defined headlines of the project and chosen the more efficient technologies to be used.
</p>
 
<p>
Sling was chosen because we are very familiar with XML technologies (RELAX NG, XPATH, XSLT...) and hierarchical representation of data.
</p><p>
Another point was the fact that we wanted to access data from Android (Apache http client) and a full REST API was the simplest way to access a JCR and manipulate data represented as trees. XML being very well supported in Android, Sling is a perfect match with Android to design agile mobile web framework.
</p><p>
Sling is also part of a course in mobile and web technologies as the master level of the University Joseph Fourier of Grenoble.
</p><p>
 
</p><p>
<b>Now that you have completed an implementation project with Sling are there any lessons learned you would like to share with the community?</b>
</p><p>
The Sling approach is fairly new and I haven’t seen any other same kind of approach before. The concept is simple but it takes a little bit time to be used to the utilization. So never give up, solutions come slowly with perseverance.
</p>

<p>
<b>If you had one free wish from the Sling committers...</b>
</p><p>
Sling is a very interesting and powerful way to work with resources but difficult to handle for Sling beginners when you have a full and composite website to implement, mostly because of the lack of information on the internet.
</p><p>
The harder thing that gives me a lot of headaches was to find a good syntax to use that changes according to the technology you mix up.
</p><p>
So I think it could be helpful to have more tutorials on the syntax to use in each different case, what is better to do or not, and advice on choices to take in programming (for example I have met choices for protecting the access to the repository; choices about which kind of link is better to use:  reference or path, etc).
</p><p>
It could be also good to finalize all links of this <a href="http://dev.day.com/docs/en/crx/current/administering.html">useful webpage</a>
</p></div>
    </summary>
    <updated>2009-11-04T00:00:01Z</updated>
    <category term="ask the community"/>
    <category term="sling"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-18T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-7900704455924011778</id>
    <link href="http://michaelmarth.blogspot.com/feeds/7900704455924011778/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=7900704455924011778" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/7900704455924011778?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/7900704455924011778?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/_FWOtstoV_0/python-script-to-set-genre-in-itunes.html" rel="alternate" type="text/html"/>
    <title>Python script to set genre in iTunes with Last.fm tags</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Now that I have started to seriously use iTunes I figured it might be nice to have the genre tag set in a meaningful way. Since I have a reasonably large collection of mp3s doing that manually was out of question - I wrote me a Python script to do that. There seems to be a large demand for such a functionality (at least I found a lot of questions on how to automatically set the genre tag) so maybe someone else finds the script useful. It is pasted below.<br/><br/><span style="font-size: 180%;">General Strategy</span><br/><br/>The basic idea is to use Last.fm's tags for genre tagging. In iTunes the genre tag is IMO best used when it only contains one single genre, i.e. something like "Electronica", <span style="font-style: italic;">not</span> something like "Electronica / Dance". On the other hand dropping all but one tag would lose a lot of information, so I decided to use the groupings tag for additional information that is contained in the list of tags that an artist has on Last.fm. In the example above that would be something like "Electronica, Dance, 80s, German". In that way it is simple to use iTunes' Smart Playlist feature to create play lists of all, say, dance music. This approach is probably not suitable for classical music..<br/><br/>The ID3 field that is exposed in iTunes' UI as "grouping" is defined in the <a href="http://www.id3.org/id3v2.3.0">ID3v2 spec</a> as:<br/><dl><dt style="font-weight: bold;">TIT1</dt><dd>The 'Content group description' frame is used if the sound belongs to a larger category of sounds/music. For example, classical music is often sorted in different musical sections (e.g. "Piano Concerto", "Weather - Hurricane"). </dd></dl>So, the strategy I described above seems to be kind of in line with the spec. In general, it is a good idea to have a look at the <a href="http://www.id3.org/id3v2.3.0">ID3v2 spec</a> if you consider dabbling with mp3 tags.<br/><br/><span style="font-size: 180%;">Practical Considerations</span><br/><br/>If one would just take an artist's highest-rated Last.fm tag for the genre one would end up with pretty inconsistent genre tags (think "hip-hop", "hip hop", and "hiphop"). Therefore, I chose to use a fixed set of values for genre. In a previous version of ID3 the list of possible genres was fixed. While this is clearly a terrible idea to start with it came along handy in this case. I used his as a fixed list for genres.<br/><br/>The second practical consideration was which Last.fm tags to include. In Last.fm parlance each artist tag comes with a weight (values form 0 to 100). Selecting only the tags with weight larger than 50 worked out fine for me (usually I had 1-5 tags per artist).<br/><br/>A third thing you might want to be aware of: if you programmatically change tags in an mp3 iTunes will not pick up these changes automatically. A simple way of letting it know: select the "Get Info" command on these items. This will trigger a reload of the new tag values.<br/><br/><span style="font-size: 180%;">Script</span><br/><br/>To run the script you will need the Python libraries <a href="http://code.google.com/p/mutagen/">mutagen</a> and <a href="http://code.google.com/p/pylast/">pylast</a> installed. Run it with the option<br/>-d directory_with_mp3s<br/>The script will walk along this directory and modify all mp3s it finds. Also, you will need a <a href="http://www.last.fm/api/account">Last.fm API key</a> and set your API_KEY and API_SECRET accordingly in the script.<br/><br/><pre><br/>#!/usr/bin/env python<br/># encoding: utf-8<br/>"""<br/>tag_groupings.py<br/><br/>Created by Michael Marth on 2009-11-02.<br/>Copyright (c) 2009 marth.software.services. All rights reserved.<br/>"""<br/><br/>import sys<br/>import getopt<br/>import pylast<br/>import os.path<br/>from mutagen.id3 import TCON, ID3, TIT1<br/><br/>help_message = '''<br/>Adds ID3 tags to mp3 files for genre and groupings. Tag values are retrieved from Last.FM. Usage:<br/>-d mp3_directory<br/>'''<br/><br/>class Usage(Exception):<br/>   def __init__(self, msg):<br/>       self.msg = msg<br/><br/>all_genres = TCON.GENRES<br/>genre_cache = {}<br/>groupings_cache = {}<br/>API_KEY = "your key here"<br/>API_SECRET = "your secret here"<br/>network = pylast.get_lastfm_network(api_key = API_KEY, api_secret = API_SECRET)<br/><br/>def artist_to_genre(artist):<br/>   if genre_cache.has_key(artist):<br/>       return genre_cache[artist]<br/>   else:<br/>       tags = network.get_artist(artist).get_top_tags()      <br/>       for tag in tags:<br/>           if all_genres.__contains__(tag[0].name.title()):<br/>               genre_cache[artist] = tag[0].name.title()<br/>               print "%20s %s" % (artist,tag[0].name.title())<br/>               return tag[0].name.title()<br/><br/>def artist_to_groupings(artist):<br/>   if groupings_cache.has_key(artist):<br/>       return groupings_cache[artist]<br/>   else:<br/>       tags = network.get_artist(artist).get_top_tags()<br/>       relevant_tags = []<br/>       for tag in tags:<br/>           if int(tag[1]) &gt;= 50:<br/>               relevant_tags.append(tag[0].name.title())<br/>       groupings = ", ".join(relevant_tags)<br/>       groupings_cache[artist] = groupings<br/>       print "%20s %s" % (artist,groupings)<br/>       return groupings<br/><br/>def walk_mp3s():<br/>   for root, dirs, files in os.walk('.'):<br/>       for name in files:<br/>           if name.endswith(".mp3"):<br/>               audio = ID3(os.path.join(root, name))<br/>               artist = audio["TPE1"]<br/>               genre = artist_to_genre(artist[0])<br/>               grouping = artist_to_groupings(artist[0])<br/>               if genre != None:<br/>                   audio["TCON"] = TCON(encoding=3, text=genre)<br/>               if grouping != None:<br/>                   audio["TIT1"] = TIT1(encoding=3, text=grouping)<br/>               audio.save()<br/><br/>def main(argv=None):<br/>   if argv is None:<br/>       argv = sys.argv<br/>   try:<br/>       try:<br/>           opts, args = getopt.getopt(argv[1:], "ho:vd:", ["help", "output="])<br/>       except getopt.error, msg:<br/>           raise Usage(msg)<br/> <br/>       # option processing<br/>       for option, value in opts:<br/>           if option == "-v":<br/>               verbose = True<br/>           if option in ("-h", "--help"):<br/>               raise Usage(help_message)<br/>           if option in ("-o", "--output"):<br/>               output = value<br/>           if option in ("-d"):<br/>               try:<br/>                   os.chdir(value)<br/>               except Exception,e:<br/>                   print "error with directory " + value<br/>                   print e<br/>       walk_mp3s()      <br/> <br/>   except Usage, err:<br/>       print &gt;&gt; sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg)<br/>       print &gt;&gt; sys.stderr, "\t for help use --help"<br/>       return 2<br/><br/>if __name__ == "__main__":<br/>   sys.exit(main())<br/><br/></pre><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-7900704455924011778?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-11-03T21:22:58Z</updated>
    <published>2009-11-03T18:27:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/11/python-script-to-set-genre-in-itunes.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1326</id>
    <link href="http://grep.codeconsult.ch/2009/11/03/jcr-in-15-minutes/" rel="alternate" type="text/html"/>
    <title>JCR in 15 minutes</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">We had a great NoSQL meeting yesterday evening colocated with ApacheCon. Thanks Jukka for organizing! 
I was in track B for the second part, and found it very interesting to compare three different approaches to non-relational content storage: MarkLogic server, JCR and Pier Fumagalli’s Lucene+DAV technique.
I also quite liked Steve Yen’s “horseless carriage” way of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1326&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>We had a great <a href="http://www.nosqloakland.org/">NoSQL meeting</a> yesterday evening colocated with <a href="http://us.apachecon.com">ApacheCon</a>. Thanks Jukka for organizing! </p>
<p>I was in track B for the second part, and found it very interesting to compare three different approaches to non-relational content storage: MarkLogic server, JCR and Pier Fumagalli’s Lucene+DAV technique.</p>
<p>I also quite liked Steve Yen’s <a href="http://blog.northscale.com/northscale-blog/2009/11/attending-nosql-oakland-2009.html">“horseless carriage”</a> way of looking at NoSQL. Defining things by what they are, as opposed to what they are not, sounds like a good idea.</p>
<p>I gave a short talk about JCR, find the slides below. Of course, as usual, they’re not as good as when I’m here to talk about them ;-)</p>
<p/>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1326/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1326/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1326/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1326/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1326/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1326/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1326/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1326/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1326/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1326/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1326&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-11-03T18:02:23Z</updated>
    <category term="content"/>
    <category term="jcr"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:03Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-1092470555444988911</id>
    <link href="http://michaelmarth.blogspot.com/feeds/1092470555444988911/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=1092470555444988911" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/1092470555444988911?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/1092470555444988911?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/17AYE6ZZR0I/interviewed-by-internet-briefing-blog.html" rel="alternate" type="text/html"/>
    <title>Interviewed by Internet Briefing Blog</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Reto Hartinger of the <a href="http://www.internet-briefing.ch/">Internet Briefing group</a> has <a href="http://blog.internet-briefing.ch/2009/11/03/nosql/">interviewed me</a> about what I work on these days. The interview is in German.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-1092470555444988911?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-11-03T07:18:19Z</updated>
    <published>2009-11-03T07:15:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/11/interviewed-by-internet-briefing-blog.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/apacheconus09.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/apacheconus09.html" rel="alternate" type="text/html"/>
    <title>NoSQL Meetup and ApacheCon 09 in Oakland</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://us.apachecon.com/c/acus2009/">ApacheCon US 09</a> starts today in Oakland. A couple of Day's engineers will give talks, not just about the usual suspects <a href="http://sling.apache.org/site/index.html">Sling</a> and <a href="http://jackrabbit.apache.org/">Jackrabbit</a>, but also <a href="http://lucene.apache.org/tika/">Tika</a> and <a href="http://poi.apache.org/">POI</a> (details below).</p>

<p>Also, Jukka Zitting has helped organize a <a href="http://www.nosqloakland.org/">NoSQL meetup in Oakland</a> starting tonight where Bertrand Delacretaz will talk about JCR.</p>

<p>
<b><img src="http://dev.day.com/microsling/content/blogs/main/apacheconus09/docroot/bertrand.png" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>Bertrand Delacretaz:</b> <a href="http://us.apachecon.com/c/acus2009/sessions/293">Life in Open Source communities</a>: Open Source communities often seem to have their own unwritten rules of operation and communication, their own jargon and their own etiquette, which sometimes make them appear obscure and closed to outsiders. In this talk, we'll provide recommendations on how to get touch with, and how to join, Open Source communities. Based on ten years of experience in various Open Source projects, we will provide practical information on how to communicate effectively on mailing lists, how to formulate questions in an effective way, how to contribute in ways that add value to the project, and generally how to interact with Open Source communities in ways that are mutually beneficial. This talk will help Open Source beginners get closer to the communities that matter to them, and help more experienced community members understand how to welcome and guide newcomers.
</p>

<p>
<b><img src="http://dev.day.com/microsling/content/blogs/main/apacheconus09/docroot/carsten.png" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>Carsten Ziegeler:</b> <a href="http://us.apachecon.com/c/acus2009/sessions/283">JCR in Action - Content-based Applications with Jackrabbit</a>: The Java Content Repository API (JCR) is the ideal solution to store hierarchical structured content, and to develop content-oriented applications. This session provides a practical introduction to help you get started using JCR in your own application. To demonstrate the basic architecture of such applications, a sample content-based application will be developed during the session. Basic techniques will be explained, including navigation, searching, and observations, using the Apache Jackrabbit project.<br/><br/>

<a href="http://us.apachecon.com/c/acus2009/sessions/307">Embrace OSGi - A Developer's Quickstart</a>: In theory, the first choice for highly modular, dynamic, and extensible applications is OSGi technology. The theory sounds very tempting, but what about the real world? Starting with the basics of OSGi, this session is focused on practical examples, tools, and procedures for a rapid adoption of OSGi in your own projects. Learn how to avoid the typical traps and how to get the most out of OSGi
</p>


<p>
<b><img src="http://dev.day.com/microsling/content/blogs/main/apacheconus09/docroot/felix.png" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>Felix Meschberger:</b> <a href="http://us.apachecon.com/c/acus2009/sessions/284">Rapid JCR applications development with Sling</a>: Apache Sling is an OSGi-based, scriptable applications layer, using REST principles, that runs on top of a JCR content repository. In this talk, we'll see how Sling enables rapid development of JCR-based content applications, by leveraging the JSR 223 scripting framework. We'll also look at the rich set of OSGi components provided by Sling. We will create a simple application from scratch in a few minutes, and explain a more complex multimedia application that does a lot with just a few lines of code. This talk will help you get started with Sling and understand how the different components fit together.
</p>

<p>
<b><img src="http://dev.day.com/microsling/content/blogs/main/apacheconus09/docroot/jukka.png" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>Jukka Zitting:</b> <a href="http://us.apachecon.com/c/acus2009/sessions/334">MIME Magic with Apache Tika</a>: Apache Tika aims to make it easier to extract metadata and structured text content from all kinds of files. Tika is a subproject of Apache Lucene, and leverages libraries like Apache POI and Apache PDFBox to provide a powerful yet simple interface for parsing dozens of document formats. This makes Tika an ideal companion for Apache Lucene, or for any search engine that needs to be able to index metadata and content from many different types of files. This presentation introduces Apache Tika and shows how it's being used in projects like Apache Solr and Apache Jackrabbit. You will learn how to integrate Tika with your application and how to configure and extend Tika to best suit your needs. The presentation also summarizes the key characteristics of the more widely used file formats and metadata standards, and shows how Tika can help deal with that complexity. The audience is expected to have basic understanding of Java programming and MIME media types.
</p>


<p>
<b><img src="http://dev.day.com/microsling/content/blogs/main/apacheconus09/docroot/paolo.jpg" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>Paolo Mottadelli:</b> <a href="http://us.apachecon.com/c/acus2009/sessions/286">Apache POI recipes</a>: The Apache POI project provides Open Source Java APIs for the manipulation of Microsoft Office format files. It was developed to provide OLE2 Compound Document format support. POI support for the new format was necessitated by the proliferation of new Office Open XML (OOXML) documents, due to its standardization. As a result, a common challenge emerged for projects that leverage POI to read and write Excel, Word, and PowerPoint documents: supporting the new format while maintaining backward compatibility with the earlier one. This session provides an overview of how the new POI architecture makes that challenge easier, using the common interfaces package and their double implementation. Participants will also learn about the main new features provided by POI towards support of the new OOXML format. To demonstrate POI's features, this session will also drive through a collection of practical recipes to solve the tough problems of integrating Office documents in your enterprise applications.
</p></div>
    </summary>
    <updated>2009-11-02T00:00:01Z</updated>
    <category term="apache"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1321</id>
    <link href="http://grep.codeconsult.ch/2009/10/30/life-in-open-source-communities-live-at-apachecon/" rel="alternate" type="text/html"/>
    <title>Life in Open Source Communities, live at ApacheCon!</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have just finished my slides for next week at ApacheCon. Though the topic of how to “survive” in our open source communities has been on my mind for a while, this is a totally new presentation, which is both great (in the blank slate sense) and a lot of work.
Having recently read Presentation Zen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1321&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p><img align="right" alt="notmuch.jpg" border="0" height="188" src="http://bdelacretaz.files.wordpress.com/2009/10/notmuch.jpg?w=250&amp;h=188" width="250"/>I have just finished my slides for <a href="http://us.apachecon.com/c/acus2009/sessions/293">next week at ApacheCon</a>. Though the topic of how to “survive” in our open source communities has been on my mind for a while, this is a totally new presentation, which is both great (in the blank slate sense) and a lot of work.</p>
<p><img align="right" alt="cocoon-step.jpg" border="0" height="198" src="http://bdelacretaz.files.wordpress.com/2009/10/cocoon-step.jpg?w=250&amp;h=198" width="250"/>Having recently read <a href="http://www.presentationzen.com/">Presentation Zen</a> (<i>very</i> recommended if you do presentations and/or like beautiful books), I started adding full-screen pictures to the first few slides, and couldn’t stop! The presentation will then consist of me ad-libbing (or more precisely trying to <i>tell stories</i>) on a series of nice pictures grabbed from <a href="http://morguefile.com">morguefile.com</a> (don’t worry about <a href="http://morguefile.com/docs/What_is_a_morguefile">that name</a>).</p>
<p><img align="right" alt="allabout.jpg" border="0" height="187" src="http://bdelacretaz.files.wordpress.com/2009/10/allabout.jpg?w=250&amp;h=187" width="250"/>I’ll post the slides here later, for now they are super secret, so you’ll just get the teasers…images courtesy of morguefile.com (<em>update: slides added now</em>).</p>
<p>Hope to see you next week! In any case I have collected a number of useful links in my <a href="http://delicious.com/bdelacretaz/losc">delicious bookmarks</a>, I’ll point people to them in the presentation.</p>
<p/>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1321/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1321/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1321/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1321/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1321/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1321/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1321/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1321/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1321/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1321/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1321&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-10-30T10:18:26Z</updated>
    <category term="ApacheCon"/>
    <category term="Open Source"/>
    <category term="asf"/>
    <category term="conferences"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/bertrandtelly.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/bertrandtelly.html" rel="alternate" type="text/html"/>
    <title>Bertrand on the telly (brush up your French)</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Bertrand Delacretaz was interviewed <a href="http://dev.day.com/microsling/content/blogs/main/openworld.html">at the OpenWorld Forum in Paris</a> about the Apache Software Foundation. It is an ASF primer - apparently the ASF and its ways of working are relatively unknown in France.
</p>
<p>
 
</p></div>
    </summary>
    <updated>2009-10-28T00:00:01Z</updated>
    <category term="apache"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-12T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/authorcentric.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/authorcentric.html" rel="alternate" type="text/html"/>
    <title>Author-centric feature scoping and integration</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"> <br/>
<div class="blockquote">
<p>
Won't somebody please  think of the <strike>children</strike> authors?<br/>
(almost <a href="http://www.youtube.com/watch?v=Qh2sWSVRrmo">Helen Lovejoy</a>)
</p>
</div>

<p>
Have you seen the component for multi-variate testing (MVT, aka <a href="http://en.wikipedia.org/wiki/A/B_testing">A/B testing</a>) in the upcoming CQ5.3 release? I saw it demoed by <a href="http://dev.day.com/microsling/content/blogs/main.html?poster=David%20Nuescheler">David</a> at <a href="http://www.day.com/summit">Ignite</a> and was completely blown away: CMS users (authors) can simply drag a couple of alternative banners onto the component right from within their regular editing interface (the CMS will then show the different versions to different users and count the click-through rates so that eventually the best performing banner is determined).
</p><p>
The MVT feature reminded me of two other CQ5 features: personalisation and analytics. All three are truly and seamlessly integrated into the user interface of the authors and they all provide <em>less</em> functionality than full-blown standalone solutions. To give you a concrete example: for each page the editors see right in the site admin (i.e. in their daily user interface) how many views each page got in the last 30 days. Clearly, this is no match for the kinds of reports you get on, say, <a href="http://dev.day.com/microsling/content/blogs/www.google.com/analytics/">Google Analytics</a>, not even the same ballpark. Yet, I still think the authors get something that is valuable for them: they see it right away what is of interest to their audience.
</p>

<p>
<img src="http://dev.day.com/microsling/content/blogs/main/authorcentric/docroot/ana.png" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>
</p>

<p>
(there is <a href="http://www.day.com/day/en/registration/discover.html">screencast available that demonstrates personalisation features from an author's perspective</a>, registration needed)
</p><p>
When I compare this author-centric evaluation of functionality with my usual point of view as a system architect the business value of a feature for an author might be determined by: 
</p><p/><ul>
<li><p>ease of use rather than feature richness and</p></li>
<li><p>seamless integration into the UI</p></li>
</ul><p/><p>
This is probably true for most systems that have non-technical users, but I believe the effect is amplified in CMSs because many CMS users use the system only once in a while rather than regularly.
</p><p>
Of course, this author-centric view on features should not necessarily dictate the underlaying systems architecture especially when you look at a complete content management solution encompassing analytics, personalization etc. The architecture might still be full-stack or best-of-breed and I do not want to postulate one being better than the other. However, I believe that one way of knowing that you got the author's user experience <em>right</em> is when you cannot see the system architecture reflected in the UI anymore. Or to put it the other way round: the UI should not enable you to guess which box which feature is running on.(*)
</p><p>
Thanks to <a href="http://dev.day.com/microsling/content/blogs/main.html?poster=Lars%20Trieloff">Lars</a> for providing discussions and ideas on this post.
</p><p>
(*) This idea is adjacent to a pet subject of mine: the user interface for basic content management (CRUD stuff) should not enable you to guess the underlying content/data schema. Sadly, up to today not few CMSs UIs resemble ERP-style data entry masks.
</p></div>
    </summary>
    <updated>2009-10-28T00:00:01Z</updated>
    <category term="cms"/>
    <category term="cq5"/>
    <category term="ignite"/>
    <category term="ab testing"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-13T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1304</id>
    <link href="http://grep.codeconsult.ch/2009/10/27/how-well-does-the-french-speaking-world-know-the-apache-software-foundation/" rel="alternate" type="text/html"/>
    <title>How well does the french-speaking world know the Apache Software Foundation?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I was at OpenWorldForum in Paris a few weeks ago, together with fellow Apache members Sander Striker and Emmanuel Lécharny.
My first impressions (apart from the fact that Paris is always nice – I knew that already) were that the French tend to wear suits and say “vous” (polite form of “you”) instead of “tu” (the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1304&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p><a href="http://www.tivipro.tv/chaine_salons.php?id=1804472&amp;id_salon=374&amp;pageIndex=3"><img align="right" alt="emmanuel-tivipro.jpg" border="0" height="152" src="http://bdelacretaz.files.wordpress.com/2009/10/emmanuel-tivipro.jpg?w=200&amp;h=152" width="200"/></a></p>
<p>I was at <a href="http://openworldforum.org">OpenWorldForum</a> in Paris a few weeks ago, together with fellow <a href="http://apache.org">Apache</a> members Sander Striker and Emmanuel Lécharny.</p>
<p>My first impressions (apart from the fact that Paris is always nice – I knew that already) were that the French tend to wear suits and say “vous” (polite form of “you”) instead of “tu” (the familiar form) which I would tend to use in geeky circles. Cultural differences…</p>
<p>But more seriously, how well does the french-speaking world know the Apache Software Foundation? Not well, it seems to me. In most of our discussions people could associate the ASF with the <a href="http://httpd.apache.org">Apache HTTP Server</a> project, but not much more. 2′000 committers? 300 members? Really?</p>
<p><a href="http://www.tivipro.tv/chaine_salons.php?id=1804473&amp;id_salon=374&amp;pageIndex=1"><img align="right" alt="bertrand-tivipro.jpg" border="0" height="151" src="http://bdelacretaz.files.wordpress.com/2009/10/bertrand-tivipro.jpg?w=200&amp;h=151" width="200"/></a>To help improve this, I hope that the ASF can take a more active role in the conference next year, I’ll bring this up next week at <a href="http://us.apachecon.com/c/acus2009/">ApacheCon</a> with our conference people.</p>
<p>In the meantime french-speaking folks are welcome to learn a bit more about it thanks to TiViPRO’s interviews of <a href="http://www.tivipro.tv/chaine_salons.php?id=1804472&amp;id_salon=374&amp;pageIndex=3">Emmanuel</a> and <a href="http://www.tivipro.tv/chaine_salons.php?id=1804473&amp;id_salon=374&amp;pageIndex=1">myself</a>, shot during the conference.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1304/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1304/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1304/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1304/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1304/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1304/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1304/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1304/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1304/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1304/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1304&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-10-27T10:03:32Z</updated>
    <category term="asf"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:03Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=246</id>
    <link href="http://jukkaz.wordpress.com/2009/10/27/nosql-interests/" rel="alternate" type="text/html"/>
    <title>NoSQL interests</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">We’re organizing a NoSQL meetup in Oakland on Monday next week. In addition to helping set the meetup agenda, the “Topics you are interested in” question in the sign up form provides some interesting insight on the current interests of the NoSQL community. Here’s a quick breakdown of the key terms distilled from the 88 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=246&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p><a href="http://www.nosqloakland.org/"><img alt="NoSQL Oakland" class="alignright size-full wp-image-247" height="44" src="http://jukkaz.files.wordpress.com/2009/10/nosqloakland-small.png?w=203&amp;h=44" title="NoSQL Oakland" width="203"/></a>We’re organizing a <a href="http://www.nosqloakland.org/">NoSQL meetup in Oakland</a> on Monday next week. In addition to helping set the meetup agenda, the “Topics you are interested in” question in the <a href="http://spreadsheets.google.com/viewform?formkey=dENwRmlTMlhGZ3lfclJqYW9hVGlkTHc6MA">sign up form</a> provides some interesting insight on the current interests of the NoSQL community. Here’s a quick breakdown of the key terms distilled from the 88 signups we’ve received so far.</p>
<p>Note that the data is biased towards Apache projects due to the meetup being organized at <a href="http://us.apachecon.com/c/acus2009/">ApacheCon US 2009</a>.</p>
<h4 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Projects</h4>
<p>The following open source projects were mentioned. The list is in alphabetical order, as the data set is too small to make any reasonable ordering by popularity.</p>
<ul>
<li><a href="http://incubator.apache.org/cassandra/">Cassandra</a></li>
<li><a href="http://couchdb.apache.org/">CouchDB</a></li>
<li><a href="http://hadoop.apache.org/">Hadoop</a></li>
<li><a href="http://hadoop.apache.org/hbase/">HBase</a></li>
<li><a href="http://hadoop.apache.org/hdfs/">HDFS</a></li>
<li><a href="http://jackrabbit.apache.org/">Jackrabbit</a></li>
<li><a href="http://lucene.apache.org/">Lucene</a></li>
<li><a href="http://lucene.apache.org/mahout/"> Mahout</a></li>
<li><a href="http://www.danga.com/memcached/">memcached</a></li>
<li><a href="http://www.mongodb.org/">MongoDB</a></li>
<li><a href="http://code.google.com/p/redis/">Redis</a></li>
<li><a href="http://riak.basho.com/">Riak</a></li>
<li><a href="http://code.google.com/p/scalaris/">Scalaris</a></li>
<li><a href="http://sling.apache.org/">Sling</a></li>
<li><a href="http://1978th.net/tokyocabinet/">Tokyo Cabinet</a></li>
<li><a href="http://project-voldemort.com/">Voldemort</a></li>
</ul>
<h4 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Topics</h4>
<p>Many responses were about the “big data” aspect of the NoSQL movement. Some frequent keywords: distributed storage, large transactional data, consistency, failover, availability, reliability, stability, failure detection, failed node replacement, (petabyte) scalability, consistency levels, storage technology, performance, benchmarks, optimization, backup and recovery, map/reduce</p>
<p>Another common theme were the various database types and the NoSQL “development model”. Keywods: document stores, key/value stores, consistent hashing, graph databases, object databases, persistent queues, content modeling, migration from the relational model, social graphs, streaming, software as a service, offline applications, full text search, natural language processing</p>
<p>Beyond the above big themes, I found it interesting that the following technologies were specifically named: Erlang, Java, WebSimpleDB, WebDAV</p>
<p>In addition to specific topics, many people were asking for case studies or “lessons learned” -type presentations.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/246/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/246/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/246/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/246/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/246/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/246/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/246/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/246/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/246/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/246/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=246&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-10-27T10:01:12Z</updated>
    <category term="General"/>
    <category term="apachecon"/>
    <category term="meetup"/>
    <category term="nosql"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:13Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-5464712224369365710</id>
    <link href="http://michaelmarth.blogspot.com/feeds/5464712224369365710/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=5464712224369365710" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/5464712224369365710?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/5464712224369365710?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/e_11CArD4Ak/colayers-approach-to-collaboration.html" rel="alternate" type="text/html"/>
    <title>Colayer's approach to collaboration software</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Chances are you have not heard of <a href="http://colayer.com/">Colayer</a>, a Swiss-Indian company producing a SaaS-based collaboration software. I did a small project with the guys, that is how I got to know. When I first saw their product I immediately thought the guys are onto something good, so it is worthwhile to share a bit of their application concepts. They follow an approach I have not seen anywhere else.<br/><br/>On first look Colayer seems to be a mixture between wikis and forums: the logical data structure resembles a hierarchical web-based forum and the forum entries are editable and versioned like in a wiki. But there is more: presence and real-time. All users that are currently logged in are visible and one can have real-time chats within the context of the page one is in or see updates to the page in real-time (similar as in Google Docs). These chats are treated as atomic page elements (called <span style="font-style: italic;">sems </span>in Colayer parlance) just like the forum entries or other texts. Through this mechanism, all communication around one topic stays on one page and <span style="font-weight: bold;">in the same context</span>.<br/><br/>There are two more crucial elements: time and semantics. All sem's visibility is controlled by their age and their importance. As such, a simple chat is given less weight that a project decision and will fade out of view after some time. All new items from all pages (i.e. discussions or topics) are aggregated on a personal home page and shown within the context where they occurred.<br/><br/>Below is a screenshot of such different sems in one page. One page corresponds to one topic or forum or wiki page. You can see the hierarchical model and the different semantics (denoted by the colors).<br/><br/><a href="http://1.bp.blogspot.com/_UDN4j-Aji_4/St6yxCgUPwI/AAAAAAAA83g/eUNu84zFTxo/s1600-h/colayer-screen-ColayerScreen.jpg" title="200 -- OK"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5394945959192182530" src="http://1.bp.blogspot.com/_UDN4j-Aji_4/St6yxCgUPwI/AAAAAAAA83g/eUNu84zFTxo/s320/colayer-screen-ColayerScreen.jpg" style="cursor: pointer; width: 320px; height: 240px;"/></a><br/><br/>Here is an example screen shot that aggregates different recent sems on one page (essentially a context-aware display of new items including time and context in the same display). Note that this way of displaying new items manages to map importance, time and context into a two-dimensional page, which I find a very cool achievement.<br/><br/><a href="http://3.bp.blogspot.com/_UDN4j-Aji_4/St6y9SdtmNI/AAAAAAAA83o/eeVGo8KR0PI/s1600-h/colayer-screen-OverviewPage.jpg" title="200 -- OK"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5394946169634658514" src="http://3.bp.blogspot.com/_UDN4j-Aji_4/St6y9SdtmNI/AAAAAAAA83o/eeVGo8KR0PI/s320/colayer-screen-OverviewPage.jpg" style="cursor: pointer; width: 269px; height: 320px;"/></a><br/><br/>The funny thing about Colayer's product (especially when compared to Google Wave) is that one "gets it" when first looking at it. It solves a problem I am facing in my work on a daily basis: where to put or find crucial information - on an internal mailing list or on the wiki?<br/><br/>The Colayer application is delivered as a browser-based SaaS solution (mainly targeted towards company-internal collaboration). This limits potential usage scenarios outside of the firewall. It would be cool if Colayer found a way of opening up their application to other data sources or consumers. It would be worth it, the app rocks.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-5464712224369365710?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-10-24T14:23:21Z</updated>
    <published>2009-10-18T17:59:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/10/colayers-approach-to-collaboration.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ignitezurich.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ignitezurich.html" rel="alternate" type="text/html"/>
    <title>Ignite Zurich</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://www.day.com/summit">Ignite in Zurich</a> was a blast. Lots of good presentations (which I will hopefully be able to share later) and excellent discussions on content management. My favourite quote was from Newsweek's <a href="http://www.day.com/summit/zuerich/agenda.html">Meshach Jackson</a>. Their editors on the CMS selection process:
</p><div class="blockquote"><p>
If you don't select CQ we're all quitting.
</p></div><p/><p>
I also enjoyed what <a href="http://dev.day.com/microsling/content/blogs/main.html?poster=David%20Nuescheler">David Nuescheler</a> had to say about separation of content and layout. The standard CMS architecture thinking goes like this<br/>
a) we need to separate content and layout<br/>
b) therefore, the user interface for the authors cannot look anything like the rendered pages and we will make it look like a database entry mask
</p><p>
David demonstrated that a) simply does not lead to b). Or in his own words:
</p><div class="blockquote"><p>
Separating content and layout does not mean you have to confuse the authors
</p></div><p/><p>
To get a taste of the event: The conference <a href="http://search.twitter.com/search?q=%23dayignite">hashtag was #dayignite</a> and here are some Ignite pictures on Flickr:
</p><p>
   
</p>

<p>
So, in case you missed Ignite Zurich there is still Ignite Chicago coming up...
</p></div>
    </summary>
    <updated>2009-10-19T00:00:01Z</updated>
    <category term="cms"/>
    <category term="cq"/>
    <category term="ignite"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-11T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=239</id>
    <link href="http://jukkaz.wordpress.com/2009/10/16/putting-poi-on-a-diet/" rel="alternate" type="text/html"/>
    <title>Putting POI on a diet</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The Apache POI team is doing an amazing job at making Microsoft Office file formats more accessible to the open source Java world. One of the projects that benefits from their work is Apache Tika that uses POI to extract text content and metadata from all sorts of Office documents.

However, there’s one problem with POI [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=239&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>The <a href="http://poi.apache.org/">Apache POI</a> team is doing an amazing job at making <a href="http://office.microsoft.com/">Microsoft Office</a> file formats more accessible to the open source Java world. One of the projects that benefits from their work is <a href="http://lucene.apache.org/tika/">Apache Tika</a> that uses POI to extract text content and metadata from all sorts of Office documents.</p>
<p><a href="http://poi.apache.org/"><img alt="Apache POI" class="aligncenter size-full wp-image-240" height="126" src="http://jukkaz.files.wordpress.com/2009/10/poi.jpg?w=138&amp;h=126" title="Apache POI" width="138"/></a></p>
<p>However, there’s one problem with POI that I’d like to see fixed: It’s too big.</p>
<p>More specifically, the <a href="http://www.jarvana.com/jarvana/archive-details/org/apache/poi/ooxml-schemas/1.0/ooxml-schemas-1.0.jar">ooxml-schemas jar</a> used by POI for the pre-generated <a href="http://xmlbeans.apache.org/" title="Apache XMLBeans">XMLBeans</a> bindings for the <a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm" title="ECMA-376: Office Open XML File Formats">Office Open XML</a> schemas is taking up over 50% of the 25MB size of the current Tika application. The pie chart below illustrates the relative sizes of the different parser library dependencies of Tika:</p>
<p><img alt="Relative sizes of Tika parser dependencies" class="aligncenter size-full wp-image-241" height="200" src="http://jukkaz.files.wordpress.com/2009/10/tika-pie.png?w=500&amp;h=200" title="Relative sizes of Tika parser dependencies" width="500"/></p>
<p>Both PDF and the Microsoft Office formats are pretty big and complex, so one can expect the relevant parser libraries to be large. But the 14MB size of the ooxml-schemas jar seems excessive, especially since the standard OOXML schema package from which the ooxml-schemas jar is built is only 220KB in size.</p>
<p>Does anyone have good ideas on how to best trim down this OOXML dependency?</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/239/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/239/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/239/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/239/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/239/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/239/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/239/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/239/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/239/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/239/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=239&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-10-16T22:39:21Z</updated>
    <category term="General"/>
    <category term="apache"/>
    <category term="ooxml"/>
    <category term="poi"/>
    <category term="tika"/>
    <category term="xmlbeans"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:13Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/slinguserslist.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/slinguserslist.html" rel="alternate" type="text/html"/>
    <title>[ANN] Sling Users List now available</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://sling.apache.org">Apache Sling</a> keeps on growing up. Today's step: <a href="http://dev.day.com/discussion-groups/content/lists.go/ofqhoicj">Felix Meschberger announced</a> a users mailing list (before there was only one mailing list for developers and users).
The new list is also available in the <a href="http://dev.day.com/discussion-groups/content/lists.html">Discussion Groups section of dev.day.com</a>.
</p>

<p>
If you use Sling please consider adding your project to the Sling users 
<a href="http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=2852421">wiki page</a>.
</p></div>
    </summary>
    <updated>2009-10-07T00:00:01Z</updated>
    <category term="announcements"/>
    <category term="sling"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-09T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/restfuldaydream.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/restfuldaydream.html" rel="alternate" type="text/html"/>
    <title>Re: RESTful daydream #4</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://blog.technologyofcontent.com/justincormack/">Justin Cormack</a> has written a noteable blog post titled <a href="http://blog.technologyofcontent.com/2009/10/restful-daydream-4/">"RESTful daydream #4</a>" (pun intended?) about RESTful content repositories. I disagree with some of what Justin writes about JCR and <a href="http://sling.apache.org/">Sling</a>. However, I completely share his vision about REST's role in content management and I am with him regarding the overall theme of his post.
</p><p>
Essentially, Justin asks for a "web content repository":
</p>
<div class="blockquote">
<p>
The odd thing is that a web content repository alone surely lends itself to a simple REST architecture. Content is after all lots of small resources with relations. [...] It takes content, relates it to other content, and serves it back, with authentication and versioning. Everything else is in other system layers, transforming it and so on. Not simple, but well defined; lower level than JCR + Sling say.
</p></div><p>
Apache Sling provides a RESTful interface onto content, but being a web application framework it provides much more, especially scripting. So I can understand well why Justin dismisses Sling as being too powerful. However, I believe that Jackrabbit's native http layer is pretty much on the mark (Justin also dismisses it <a href="http://blog.technologyofcontent.com/2009/10/restful-daydream-4/#comment-1739">in the comments</a> as being not RESTful. I do not know why.). As far as I know the <a href="http://dev.day.com/microsling/content/blogs/main/jrnativehttp.html">Jackrabbit http remoting layer</a> is quite work-in-progress so one might argue about the details regarding its RESTfulness, but overall it fits what I understand to be a RESTful web content repository.
</p><p>
There is one aspect regarding a <em>web</em> content repository I would like to add to the discussion: I think it is crucial that the representations of resources and be consumed by browsers. HTML forms for writing and presenting resources in JSON should be part of the equation. Adding models or semantics on top of that <strike>will</strike> might do more harm than good.
</p><p>
Do we need a formal standard for web content repositories? From my perspective: not yet. At the moment we still need to learn more, i.e. more repository implementations and users that have built a CMS on top of a web content repository.</p></div>
    </summary>
    <updated>2009-10-07T00:00:01Z</updated>
    <category term="rest"/>
    <category term="cmis"/>
    <category term="jcr"/>
    <category term="sling"/>
    <category term="atom"/>
    <category term="jackrabbit"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-09T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-2729812611935132778</id>
    <link href="http://michaelmarth.blogspot.com/feeds/2729812611935132778/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=2729812611935132778" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/2729812611935132778?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/2729812611935132778?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/qZKGJdQ16Uc/found-out-about-flexeventupdatecomplete.html" rel="alternate" type="text/html"/>
    <title>Found out about FlexEvent.UPDATE_COMPLETE</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Here is a small bit about the asynchronous nature of the Flex layout mechanisms that I learned while slapping together a presales demo yesterday:<br/>
<br/>
When changing properties of <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html">UIComponents</a> listen for <a href="http://livedocs.adobe.com/flex/3/langref/mx/events/FlexEvent.html#UPDATE_COMPLETE">FlexEvent.UPDATE_COMPLETE</a> events. They get fired when the change is actually done. In my case I needed to get the textWidth of a <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/Label.html">Label</a> after changing the label text. Right after calling the setter of text the getter of textWidth will still return the old value.<br/>
<br/>
[Some <a href="http://jonathanbranam.net/flex3anatomy/event/updateComplete">background reading</a>]<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-2729812611935132778?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-10-01T08:45:03Z</updated>
    <published>2009-10-01T08:45:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/10/found-out-about-flexeventupdatecomplete.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20091001.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20091001.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Why JCR is good for Content Management?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
eXo's Peter Nedonosko discusses on his blog <a href="http://nedonosko.blogspot.com/2009/09/jcr-based-content-management.html">why JCR is good for content management</a>. I could not agree more with his conclusion: it is useful for cms developers.
</p>

<div class="blockquote"><p>
JCR standard is <em>useful</em> for CMS [...]</p>
</div></div>
    </summary>
    <updated>2009-10-01T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="jcr"/>
    <category term="cms"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-09T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-4217157000138135692</id>
    <link href="http://michaelmarth.blogspot.com/feeds/4217157000138135692/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=4217157000138135692" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/4217157000138135692?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/4217157000138135692?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/7eQdyEQ4FwE/talk-at-java-user-group.html" rel="alternate" type="text/html"/>
    <title>Talk at Java User Group</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Yesterday, I gave a <a href="http://www.jugs.ch/html/events/2009/rest.html">talk at the Java User Group Switzerland</a> (JUGS) titled "Agile RESTful Web Development". It was about the REST style in principle and hands-on RESTful development with Apache Sling. I enjoyed giving the talk and think that it was well received. Here's the slide deck:<br/><br/><div id="__ss_2094296" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/mmarth/agile-restful-web-development" style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; display: block; text-decoration: underline;" title="Agile RESTful Web Development">Agile RESTful Web Development</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/mmarth" style="text-decoration: underline;">mmarth</a>.</div></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-4217157000138135692?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-09-30T06:12:27Z</updated>
    <published>2009-09-30T06:07:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/09/talk-at-java-user-group.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/openworld.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/openworld.html" rel="alternate" type="text/html"/>
    <title>[ANN] Talking at openworldforum in Paris this Friday</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>



I'll be talking at <a href="http://openworldforum.org/">Open World
Forum</a> in Paris later this week, presenting a condensed version of
my <a href="http://www.slideshare.net/bdelacretaz/opensource-collaboration-tools-are-good-for-you-2009-edition">Open
Source Collaboration Tools are Good for You</a> talk, this Friday at
13:40 (and no, the topic is not "Coming Soon" as indicated on the <a href="http://openworldforum.org/programme/Floss%20Vision">program</a>
;-)
</p><p>
Later on Friday afternoon, I'll take part in a forum (in french) on <a href="http://openworldforum.org/program/les-forges-open-source-du-futur">the
future of open source forges</a>. I haven't seen the list of
participants yet, but the topic looks promising.
</p><p>
Sander Striker,  Executive Vice President of the <a href="http://apache.org">Apache Software Foundation</a>, will also be
there for a <a href="http://openworldforum.org/program">roundtable</a>
this Thursday after the 16:30 keynote.
</p><p>
And I'll be staying with fellow Apache member Emmanuel Lecharny -
meeting the locals is always nice, and Emmanuel's a city cyclist as
well, so we'll be able to trade city jungle tricks I guess.
</p><p>
The conference looks quite busy with lots of interesting
presentations, roundtables and workshops.
</p>
<p>
Looking forward to it, and make sure to say bonjour if you're around!
</p>
<p>
<img src="http://dev.day.com/microsling/content/blogs/main/openworld/docroot/owf.jpg" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>
</p></div>
    </summary>
    <updated>2009-09-29T00:00:01Z</updated>
    <category term="announcements"/>
    <category term="open"/>
    <category term="tools"/>
    <author>
      <name>Bertrand Delacretaz</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-05T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/cloudcamp.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/cloudcamp.html" rel="alternate" type="text/html"/>
    <title>Data First in Cloud Persistence</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>My colleague <a href="http://twitter.com/keepthebyte/status/4364686938">Cedric Huesler</a> gave a talk "Data First in Cloud Persistence" at yesterday's <a href="http://www.cloudcamp.com/?page_id=1135">CloudCamp in London</a>. Missed it? You'll have another chance next week at the <a href="http://www.cloudcamp-frankfurt.de/">Frankfurt CloudCamp</a>. Meanwhile, here's the slide deck (I <em>love</em> the second slide):
</p>
<div id="__ss_2064686" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/keepthebyte/data-first-in-cloud-persistance" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Data First in Cloud Persistance">Data First in Cloud Persistence</a></div>
<br/><br/></div>
    </summary>
    <updated>2009-09-25T00:00:01Z</updated>
    <category term="data first"/>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-04T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ignite092.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ignite092.html" rel="alternate" type="text/html"/>
    <title>3 weeks to go - next CQ5 at Customer Summit</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div>
<a href="http://www.day.com/summit">
<img src="http://dev.day.com/microsling/content/blogs/main/ignite092/docroot/ignite_logo2.jpg" style="float: left; margin-right: 100px; margin-left: 80px; margin-bottom: 20px;"/>
</a>
</div>
<p>
In 3 weeks from today we are going to kick-off our annual <a href="http://www.day.com/summit">Customer Summit</a> in Zurich (and two weeks later in Chicago). Going through the office in Basel feels like everybody is busy making sure the events are going to be awesome.
</p><p>
The engineering team is putting the final touch on what has been in the making for multiple years - yes - I'm talking about JCR 2.0. It is exciting to witness the implementation of the next generation content infrastructure API and see what it does for  the user facing content applications. The next version of our WCM, DAM and Social Collaboration platform CQ5 - to be unveiled at the Customer Summits - is taking full advantage of <a href="http://jcp.org/en/jsr/detail?id=283">JCR 2.0 (JSR-283)</a>. This for sure is great news for developers. They get an extended rock solid API to build content applications and integration services.
</p><p>
Another mission - with focus to reduce the distance between the author and the consumer (visitor) - resulted in a slew of new CQ5 features. We want content authors to have a better insight on how their content is consumed and provide feedback what worked and what not. With this, we are closing an important loop in providing targeted content to an apparently unknown audience.
</p><p>
If that is not enough, I'm sure you are interested to learn how the City of Chicago, Adobe, New York University (in Chicago), Telecom Italia, Boehringer Ingelheim and Investec (in Zurich) are using the Day products. That's only an excerpt of companies and partners that will participate - we are finalizing the agenda this week and will make it available starting next week.
</p><p>
For all of you already signed-up for the Summit - we are looking forward to share with you the latest awesomeness in Zurich or Chicago. If you haven't - <a href="http://www.day.com/summit">it's not too late</a>.
</p></div>
    </summary>
    <updated>2009-09-24T00:00:01Z</updated>
    <category term="jsr283"/>
    <category term="announcements"/>
    <category term="cq5"/>
    <author>
      <name>Cedric Huesler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-11-02T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=235</id>
    <link href="http://jukkaz.wordpress.com/2009/09/23/some-graphics-work-for-a-change/" rel="alternate" type="text/html"/>
    <title>Some graphics work for a change</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I’ve recently spent some effort in improving the look of the Apache Jackrabbit website. I’m no designer, so the results aren’t that great, but it’s been a nice break from the regular project work. And I got to brush up my Photoshop and Gimp skills.
One part of the effort was creating an icon for the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=235&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>I’ve recently spent <a href="https://issues.apache.org/jira/browse/JCRSITE-20" title="JCRSITE-20: Site readability improvements">some</a> <a href="http://twitter.com/jukkaz/status/3243226733" title="fancy download button">effort</a> in improving the look of the <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> website. I’m no designer, so the results aren’t that great, but it’s been a nice break from the regular project work. And I got to brush up my <a href="http://www.adobe.com/products/photoshop/photoshop/" title="Adobe Photoshop">Photoshop</a> and <a href="http://www.gimp.org/" title="The GNU Image Manipulation Program">Gimp</a> skills.</p>
<p>One part of the effort was <a href="https://issues.apache.org/jira/browse/JCRSITE-24" title="JCRSITE-24: Jackrabbit favicon">creating an icon</a> for the site. Previously the site used the feather icon used as the default on all Apache project sites, but I wanted a Jackrabbit-specific icon that helps me to quickly identify and access Jackrabbit pages among the numerous tabs I usually have open in my browser. The work is a good example of incremental improvements in action:</p>
<p><img alt="Jackrabbit icon steps" class="aligncenter size-full wp-image-236" height="218" src="http://jukkaz.files.wordpress.com/2009/09/jackrabbit-icon-work.png?w=372&amp;h=218" title="Jackrabbit icon steps" width="372"/></p>
<p>I started with a copy of the Jackrabbit logo with nice alpha-layered transparent background. It looked great until I noticed that some browsers lost the smooth alpha layer and instead resulted in a rather badly aliased icon seen above.</p>
<p>The straightforward solution was to add a white background as can be seen in step 2. That worked already pretty well in all browsers.</p>
<p>After a few days of watching the icon I found it a bit too blocky to my taste, so I tried to restore some of the nice transparency effect by rounding the corners a bit. I’m pretty happy with the result.</p>
<p>Of course, if you have design talent and think you can do better, go for it!</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/235/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/235/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/235/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/235/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/235/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/235/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/235/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/235/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/235/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/235/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=235&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-09-23T17:11:59Z</updated>
    <category term="Jackrabbit"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-29T23:00:13Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=231</id>
    <link href="http://jukkaz.wordpress.com/2009/09/19/release-time/" rel="alternate" type="text/html"/>
    <title>Release time</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">There’s lots of upcoming release activity at the Apache projects I’m more or less involved with:

The incubating Apache PDFBox project is just about to release the eagerly anticipated 0.8.0 release. I’m expecting to see the release announcement on Tuesday next week. PDFBox is a Java library for working with PDF documents.
Another incubating project, Apache UIMA, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=231&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>There’s lots of upcoming release activity at the Apache projects I’m more or less involved with:</p>
<ul>
<li><a href="http://incubator.apache.org/pdfbox/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/5981/logo_med.png" title="Apache PDFBox" width="64"/></a>The incubating <a href="http://incubator.apache.org/pdfbox/">Apache PDFBox</a> project is just about to release the <a href="http://jukkaz.wordpress.com/2009/01/23/apache-pdfbox-status-update/" title="Apache PDFBox status update">eagerly anticipated</a> 0.8.0 release. I’m expecting to see the release announcement on Tuesday next week. PDFBox is a Java library for working with PDF documents.</li>
<li><a href="http://incubator.apache.org/uima/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/23695/uima-icon_med.png" title="Apache UIMA" width="64"/></a>Another incubating project, <a href="http://incubator.apache.org/uima/">Apache UIMA</a>, is <a href="http://markmail.org/message/p3463oyvgohknxev" title="Marshall Schor: Making good progress to 2.3.0 release, next checkpoint at close of next week">working towards</a> the 2.3.0 release. I’m looking forward to seeing both UIMA and PDFBox graduating from the <a href="http://incubator.apache.org/">Apache Incubator</a> shortly after the respective releases. UIMA is a framework and a set of components for analyzing large volumes of unstructured information.</li>
<li><a href="http://sling.apache.org/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/8717/sling_med.png" title="Apache Sling" width="64"/></a>The <a href="http://sling.apache.org/">Apache Sling</a> project is a component-based project like <a href="http://felix.apache.org/">Apache Felix</a>, so there is no clear project-wide release cycle.  Instead Sling is about to start releasing new versions of most of the components changed since the all-inclusive incubator releases. Sling is a JCR-based web framework.</li>
<li><a href="http://lucene.apache.org/tika/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/8697/tikaNoText_med.png" title="Apache Tika" width="64"/></a><a href="http://lucene.apache.org/tika/">Apache Tika</a> uses PDFBox for extracting text content from PDF documents. I’m hoping to see a Tika 0.5 release soon with the latest PDFBox dependency and the <a href="https://issues.apache.org/jira/browse/TIKA-275" title="TIKA-275: Parse context">design improvements</a> I’ve been working on. Tika is a toolkit for extracting text and metadata from all kinds of documents.</li>
<li><a href="http://lucene.apache.org/solr/"><img alt="" class="alignright" height="35" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/13297/solr_FC_med.jpg" title="Apache Solr" width="64"/></a><a href="http://lucene.apache.org/solr/">Apache Solr</a> is about to enter <a href="http://markmail.org/message/6mb442fxjtq3dt6m" title="Yonik Seeley: solr 1.4 release schedule">code freeze</a> in preparation for the 1.4 release that will include the “<a href="http://wiki.apache.org/solr/ExtractingRequestHandler" title="ExtractingRequestHandler">Solar Cell</a>” feature based on Tika. Solr is a search server based on Lucene.</li>
<li>The <a href="http://commons.apache.org/io/">Commons IO</a> project has been upgraded to use Java 5 features and I’m starting to <a href="http://markmail.org/message/poqipa3yisit53wt" title="Jukka Zitting: [io] Towards the 2.0 release">push it</a> towards a 2.0 release. Commons IO is a library of Java IO utilities.</li>
<li><a href="http://lucene.apache.org/java/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/23787/lucene_med.png" title="Lucene Java" width="64"/></a><a href="http://lucene.apache.org/java/">Lucene Java</a> is <a href="http://markmail.org/message/5vez3yxwhznxaylv" title="Yonik Seeley: Re: Lucene 2.9 RC4 now available for testing">gearing up</a> for the 2.9 release, and will soon <a href="http://markmail.org/message/3v7aj5yhizggoikm" title="DM Smith: Lucene 3.0 and Java 5 (was Re: Finishing Lucene 2.9)">follow up</a> with the 3.0 release. The<a href="https://issues.apache.org/jira/browse/LUCENE-1470" title="LUCENE-1470: Add TrieRangeFilter to contrib"> trie range</a> feature is an especially welcome addition for many use cases. Lucene is a feature-rich high performance search engine.</li>
<li><a href="http://jackrabbit.apache.org/"><img alt="" class="alignright" height="64" src="https://s3.amazonaws.com/bits.ohloh.net/attachments/2233/jlogo64_med.png" title="Apache Jackrabbit" width="64"/></a>And last but not least, <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> is <a href="http://markmail.org/message/ced7d6kgdnos6atw" title="Jukka Zitting: Re: Jackrabbit 2.0 release plan">getting ready</a> to release the 2.0 version based on the <a href="http://jcp.org/en/jsr/results?id=4979" title="JSR 283 Final Approval Ballot">recently approved</a> JCR 2.0 standard. Jackrabbit is a feature-complete JCR content repository implementation.</li>
</ul>
<p>I’m hoping to see most of these releases happening in time for the <a href="http://us.apachecon.com/c/acus2009/">ApacheCon US 2009</a> conference in early November.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/231/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/231/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/231/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/231/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/231/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/231/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/231/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/231/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/231/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/231/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=231&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-09-19T11:02:43Z</updated>
    <category term="ASF"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://jukkaz.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2010-01-14T17:00:14Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/jsr283fab2.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/jsr283fab2.html" rel="alternate" type="text/html"/>
    <title>JSR-283 builds on JSR-170</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div>
	And of course, JSR-283 builds on the work done in JSR-170:
</div>
<div>
	<p>
		 
	</p>
	<table width="440">
		<tbody><tr>
			<td class="num">
				734
			</td>
			<td class="text">
				<span class="unit">issues</span>
			</td>
		</tr>
		<tr>
			<td class="num170">
				 662
			</td>
			<td class="text">
				issues in JSR 170. 
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				1456
			</td>
			<td class="text">
				<span class="unit">days</span>
			</td>
		</tr>
		<tr>
			<td class="num170">
				 1213
			</td>
			<td class="text">
				days from start to finish of JSR 170.
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				72
			</td>
			<td class="text">
				<span class="unit">individual members</span> of the expert group
			</td>
		</tr>
		<tr>
			<td class="num170">
				 1/2
			</td>
			<td class="text">
				as many members in the 170 expert group.
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				43
			</td>
			<td class="text">
				<span class="unit">organizations</span> represented
			</td>
		</tr>
		<tr>
			<td class="num170">
				 1/2
			</td>
			<td class="text">
				as many organizations represented.
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				277
			</td>
			<td class="text">
				<span class="unit">pages of spec</span>
			</td>
		</tr>
		<tr>
			<td class="num170">
				 297
			</td>
			<td class="text">
				pages in 170. Yet 283 contains so much more! :-)
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				87
			</td>
			<td class="text">
				<span class="unit">interfaces and classes</span>
			</td>
		</tr>
		<tr>
			<td class="num170">
				 59
			</td>
			<td class="text">
				interfaces and classes in 170.
			</td><td>
		</td></tr>
		<tr>
			<td class="num">
				522
			</td>
			<td class="text">
				<span class="unit">fields and methods</span>
			</td>
		</tr>
		<tr>
			<td class="num170">
				 334
			</td>
			<td class="text">
				fields and methods in 170.
			</td><td>
	</td></tr></tbody></table>
</div>
<br/><br/></div>
    </summary>
    <updated>2009-09-18T00:00:01Z</updated>
    <category term="jsr283"/>
    <category term="jcr"/>
    <category term="standards"/>
    <category term="jackrabbit"/>
    <author>
      <name>Peeter Piegaze</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-28T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-2476553882635765085</id>
    <link href="http://michaelmarth.blogspot.com/feeds/2476553882635765085/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=2476553882635765085" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/2476553882635765085?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/2476553882635765085?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/39TgASnqLjc/ruby-script-for-generating-google.html" rel="alternate" type="text/html"/>
    <title>Ruby script for generating Google sitemaps</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I just wrote a small Ruby script to generate a <a href="https://www.google.com/webmasters/tools/sitemap-list?hl=de&amp;siteUrl=http%3A%2F%2Fdev.day.com%2F">Google sitemap</a> out of file directory. I thought that it might come handy as a quick start for someone, so here is the code (requires the builder gem)<br/><br/>require 'builder'<br/>htmlfiles = Dir.glob("*.html")<br/>x = Builder::XmlMarkup.new(:target =&gt; $stdout, :indent =&gt; 1)<br/>x.instruct!<br/>x.urlset( "xmlns" =&gt; "http://www.sitemaps.org/schemas/sitemap/0.9" ) {<br/>for file in htmlfiles do<br/>  x.url{x.loc "http://www.example.com/#{file}"; x.lastmod "2009-09-17"; x.changefreq "monthly"; x.priority "0.8"}<br/>end<br/>}<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-2476553882635765085?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-09-17T13:05:15Z</updated>
    <published>2009-09-17T12:43:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/09/ruby-script-for-generating-google.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/jsr283fab.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/jsr283fab.html" rel="alternate" type="text/html"/>
    <title>JSR-283 passes its final Test</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div><p> </p>
<table width="440">
<tbody><tr><td class="num">734</td><td class="text"><span class="unit">issues</span></td></tr>
<tr><td class="num">1456</td><td class="text"><span class="unit">days</span></td></tr>
<tr><td class="num">72</td><td class="text"><span class="unit">individual members</span> of the expert group</td></tr>
<tr><td class="num">43</td><td class="text"><span class="unit">organizations</span> represented</td></tr>
<tr><td class="num">3</td><td class="text"><span class="unit">ballots</span> of the executive committee of the JCP</td></tr>
<tr><td class="num">41</td><td class="text"><span class="unit">yes</span> votes</td></tr>
<tr><td class="num">0</td><td class="text"><span class="unit">abstentions</span></td></tr>
<tr><td class="num">0</td><td class="text"><span class="unit">no</span> votes</td></tr>
<tr><td class="num">5</td><td class="text"><span class="unit">face-to-face meetings</span></td></tr>
<tr><td class="num">76</td><td class="text"><span class="unit">telephone conferences</span></td></tr>
<tr><td class="num">277</td><td class="text"><span class="unit">pages of spec</span></td></tr>
<tr><td class="num">87</td><td class="text"><span class="unit">interfaces and classes</span></td></tr>
<tr><td class="num">522</td><td class="text"><span class="unit">fields and methods</span></td></tr>
<tr><td class="num">1895</td><td class="text"><span class="unit">testcases</span> in the official TCK</td></tr>
<tr><td class="num">100%</td><td class="text"><span class="unit">signature</span> coverage of the TCK</td></tr> 
<tr><td class="num" style="border-top: black 1px solid; border-bottom: black 3px solid;"><a href="http://jcp.org/en/jsr/detail?id=283">2.0</a></td><td class="text" style="border-top: black 1px solid; border-bottom: black 3px solid;"><span class="unit"><a href="http://jcp.org/en/jsr/detail?id=283">Content Repository for Java Technology API</a></span></td></tr>
</tbody></table>
</div>
<br/><br/></div>
    </summary>
    <updated>2009-09-14T00:00:01Z</updated>
    <category term="jsr283"/>
    <category term="jcr"/>
    <category term="standards"/>
    <category term="jackrabbit"/>
    <author>
      <name>David Nuescheler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-19T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/eweek.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/eweek.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Apache Projects: last 10 years, next 10 years</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.eweek.com/c/a/Application-Development/11-Apache-Technologies-that-Have-Changed-Computing-in-the-Last-10-Years-469693/">eWeek  has looked back 10 years</a> of Apache Software Foundation (see also <a href="http://dev.day.com/microsling/content/blogs/main/apachebirthday.html">this interview</a>). They have identified 11 Apache projects that they think have changed computing in the last 10 years (an awesome lineup!) as well as 10 technologies that will change computing in the next 10 years. Amongst the latter: <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> and <a href="http://sling.apache.org/site/index.html">Sling</a>.</p></div>
    </summary>
    <updated>2009-09-03T00:00:01Z</updated>
    <category term="link of the day"/>
    <category term="apache"/>
    <category term="sling"/>
    <category term="jackrabbit"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-19T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/openjcr.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/openjcr.html" rel="alternate" type="text/html"/>
    <title>OpenJCR</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>A new effort has been started over at <a href="http://www.java.net/">java.net</a> to implement</p>

<div class="blockquote">
<p>
an open source community project building a free and comprehensive next generation content repository defined by the Java Content Repository API specification (JSR-170 and JSR-283)
</p>
</div>

<p>The project is called <a href="https://openjcr.dev.java.net/servlets/ProjectHome">OpenJCR</a>. Its aims are</p>

<div class="blockquote">
<p>
OpenJCR is designed to address large deployments, to provide high performance, to be highly extensible, secure, and easy to deploy in a server or embedded environment.
</p>
</div>

<p>Not much to see so far, but then the project seems to be really young. In any case, it is good to see another JCR open source implementation project popping up.</p></div>
    </summary>
    <updated>2009-09-01T00:00:01Z</updated>
    <category term="open"/>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-07T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/simpcore.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/simpcore.html" rel="alternate" type="text/html"/>
    <title>SimPCoRe: PHP-based content repository</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Via <a href="http://twitter.com/georgwaechter/status/3653795739">@georgwaechter</a> I have come across <a href="http://www.simpcore.org/">SimPCoRe</a> which is a content repository for PHP. Judging from the description and <a href="http://groups.google.com/group/simpcore/browse_thread/thread/46638ffb5edfe182">this discussion</a> SimPCoRe does not fully  implement JSR-170, but only a smaller feature set. It does, however, seem to implement the basic ideas and concepts of a (Java) content repository.
</p><p>
It is great to see the ideas and concepts of the "content repository" spreading - be it standards-based or an adaption/evolution or a minimal feature set. Anything that helps with the implementation of better content management systems is a good trend (see also <a href="http://dev.day.com/microsling/content/blogs/main/cambrian.html">this previous post</a>). Especially, given the large amount of PHP-based CMSs I am happy to see more PHP developers working on content repository implementations (others are <a href="https://fosswiki.liip.ch/display/jackalope/Home">Jackalope</a> and <a href="http://flow3.typo3.org/">Flow3</a>).
</p></div>
    </summary>
    <updated>2009-08-31T00:00:01Z</updated>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-01T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/jrnativehttp.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/jrnativehttp.html" rel="alternate" type="text/html"/>
    <title>Jackrabbit 1.6 comes with native http access layer</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://jackrabbit.apache.org/">Jackrabbit 1.6</a> has been <a href="http://jackrabbit.apache.org/downloads.html">released</a> a couple of days ago and it comes with a very cool, but somewhat hidden feature: it is now possible to use the Content Repository through http. There is direct read/write access to the repository even from the browser.
</p><p>
Of course, through <a href="http://sling.apache.org/site/index.html">Sling</a> this was <a href="http://sling.apache.org/site/discover-sling-in-15-minutes.html">possible</a> before, but now http-based access is native to the Content Repository itself. However, having Jackrabbit-native http access makes it much easier to use JCR from whichever framework or language you happen to use to write applications. In that sense, I tend to think of this as a game changing feature for Jackrabbit and JCR.
</p><p>
Unfortunately, the name of this access capability is not something one would expect like "RESTful this" or "Web that", but "JCR Remoting". Anyway, to check it out run the Jackrabbit 1.6 standalone server and find the description and some examples at http://localhost:8080/webdav-jcr.jsp
</p><p>
Nodes can be read through a GET request for /path/to/node.json , whole trees can be read in one request through a request to /path/to/node.treedepth.json (which is the format known from Sling). Adding, deleting or moving nodes is possible by sending POSTs in a specific format defined in the tutorials at http://localhost:8080/remoting/write.jsp
</p><p>
When I read the JCR Remoting documentation I got very confused by two concepts: WebDAV extensions and the JCR Remoting Client. Here is what I found out:
</p><p>
The intention of JCR Remoting is to make available the complete JCR functionality. At the moment, not all of that is implemented in the protocol. For this reason WebDAV is used as a fallback (for now). This makes sense, because WebDAV is http-based as well. 
</p><p>
The JCR Remoting Client is a set of Java classes that implement the JCR Remoting protocol and provide clients with a Java-based JCR session. Essentially, this is an alternative to an RMI-based connection to a Java Content Repository. It might be of interest to you if you intend to use Java to connect to the repository, but you can safely ignore it if you do not intend to do so.
</p></div>
    </summary>
    <updated>2009-08-31T00:00:01Z</updated>
    <category term="jackrabbit"/>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-10-07T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/commercialopensource.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/commercialopensource.html" rel="alternate" type="text/html"/>
    <title>David Nuescheler on Commercial Open Source Software</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img src="http://dev.day.com/microsling/content/blogs/main/commercialopensource/docroot/roberto.jpg" style="float: left; margin-right: 20px; margin-bottom: 10px;"/>

Italian open source blogger <a href="http://robertogaloppini.net/about/">Roberto Galoppini</a> has recently joined in the discussion about open source business models that got started by <a href="http://blogs.nuxeo.com/ebarroca/2009/08/commercial-open-source-or-just-a-free-demo.html">Eric Barroca</a> and <a href="http://dirkriehle.com/wp-content/uploads/2009/08/Commercial-Open-Source-v2.pdf">Dirk Riehle</a>. For <a href="http://robertogaloppini.net/2009/08/21/all-open-source-software-is-commercial/">his post</a> Roberto interviewed Day's CTO David Nuescheler and published parts of it. Please find the complete interview below.
</p>

<p><b>On standard participation costs</b></p>
<p><img src="http://dev.day.com/microsling/content/blogs/main/commercialopensource/docroot/david.jpg" style="float: right; margin-left: 20px; margin-bottom: 10px;"/>

It definitely depends on the level of participation in a particular standardization process. Simple participation in an expert group or a technical committee can require only a small effort such as a couple of hours of work per month or week. An active participant in a standardization can easily rack up numerous hours per week ranging up to a couple of FTEs.  When we talk about leading a specification effort, like we did in JSR-170 or JSR-283, there are a number of subject matter experts more or less constantly involved.
</p><p>
The burden on editor or specification lead also varies by standardization body.  With some standardization bodies there is no requirement to produce a testkit to certify or measure compliance of an implementation with a standard.
</p><p>
However, for example in the JCP the specification lead must provide a testkit (TCK) and even a reference implementation the passes 100% of the testkit to prove that the entire specification does not just look good on paper but is completely implementable.  Providing a testkit and a reference implementation certainly makes it much harder to complete a standard but it of course also makes the final result a much more solid specification.
</p><p>
In our specific case we did not really see the standards participation as a cost but much more as a part of a our leading edge research and development efforts that we would incur anyway. The choice that we have is whether to do that research behind closed doors and receive our first input from our customer base once the product is shipped or if we want to discuss these topics with the brightest minds in the industry by leading such a standardization.  We very much view the expert group in a specification as our extended R&amp;D-team that we can leverage for architecture discussions that matter to the entire industry.
</p>

<p><b>On symbiotic costs (aka competition costs within Apache projects)</b></p>

<p>    
We generally feel that through developing most of our infrastructure code in public there are various benefits for us as a commercial vendor.
</p><p>
To ensure that we gained maximum benefit we chose to collaborate with the Apace Software Foundation.  In particular because it is renowned for its clean cut meritocracy and true-spirited open source, from its very liberal licensing to the diversity-oriented community and foundation processes.
</p><p>
Traditionally I think that people view community participation in terms of contributing code patches or feature donations.  In our experience the most valuable contributions from the community comes in completely unexpected forms.  These include the use of a very public active mailing list as a sounding board and self-help archive, issues reporting, the fact that the community is building the software around-the-clock, having a very agile test harness of the latest features and changes in the form of the community and ultimately the prospect of being able to then hire the brightest minds in the industry having seen their great community work on “our technology”.
</p><p>
Most importantly though I think that learning to develop in the “Apache Way” has greatly improved our internal communication skills and has greatly enhanced the overall quality of our products.
</p><p>
We feel that only on rare occasions do we compete against “our” Apache open source projects and we have definitely been able to keep our open source projects very competitive within the open source world.
</p>

<p><b>On code production tracking costs</b></p>

<p>The production of code that ends up in our products happens in various ways already. I would argue that every software vendor leverages open source and closed source libraries. Some vendors may rely more on open source libraries than others.
</p><p>
At Day we believe in producing a lot of our code ourselves. If we find ourselves in a position where we need to develop commodity code that is generally applicable and reusable we try to open source as much as possible.
</p><p>
This results in our active participation in a lot open source projects (see e.g. <a href="http://dev.day.com/microsling/content/blogs/main/opensourceatday.html">here</a>)
</p><p>
Keeping your code open of course also allows to use public, 3rd party tracking tools and statistics about open source projects and allows to compare with peers (e.g. on <a href="http://www.ohloh.net/p/jackrabbit/analyses/latest">Ohloh</a>)
</p></div>
    </summary>
    <updated>2009-08-31T00:00:01Z</updated>
    <category term="open"/>
    <category term="day"/>
    <category term="jcr"/>
    <category term="standards"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-29T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://michid.wordpress.com/?p=163</id>
    <link href="http://michid.wordpress.com/2009/08/30/implementing-java-interfaces-and-generics/" rel="alternate" type="text/html"/>
    <title>Implementing Java Interfaces and Generics</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In an earlier post I asked for an implementation of the following Java interface in Scala:

public interface Iterator2 extends java.util.Iterator {}

The solution was to use a combination of self types and existential types. However, some comments made me aware of Ticket #1737 where a more general form of the problem is discussed. Given the following [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=163&amp;subd=michid&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>In an earlier <a href="http://michid.wordpress.com/2009/06/19/puzzle-implement-this/">post</a> I asked for an implementation of the following Java interface in Scala:</p>
<pre class="brush: java;">public interface Iterator2 extends java.util.Iterator {}
</pre>
<p>The <a href="http://michid.wordpress.com/2009/06/24/puzzle-implement-this-solution/">solution</a> was to use a combination of self types and existential types. However, some comments made me aware of <a href="http://lampsvn.epfl.ch/trac/scala/ticket/1737">Ticket #1737</a> where a more general form of the problem is discussed. Given the following Java code:</p>
<pre class="brush: java;">public interface A&lt;T&gt; {
    void run(T t);
    T get();
}

public abstract class B implements A {}
</pre>
<p>How could <em>B</em> be implemented in Scala? My previous approach is not sufficient here since for implementing the <em>run()</em> method, one needs to be able to refer to the existential type in <em>run()</em>’s parameter list: </p>
<pre class="brush: java;">class C extends B {
  this: A[_] =&gt;

  def run(t:???) {} // What should go here for t's type?
  def get = "hello world"
}
</pre>
<p>So what we need is a way to name the existential type used in the self type (that is the type parameter to <em>A</em>) such that we can refer to it in the parameter list of the <em>run()</em> method. Here is my shot:</p>
<pre class="brush: java;">class D {
  type Q = X forSome { type X; }
}

class C extends B {
  this: A[D#Q] =&gt;

  def run(t:D#Q ) {}
  def get: D#Q = "hello world"
}
</pre>
<p>Unfortunately this results in a compilation error with Scala 2.7.5</p>
<pre>error: class C needs to be abstract, since method run in trait A of type (T)Unit is not defined
</pre>
<p>and in a <em>AssertionError</em> for Scala  2.8.0.r18604-b20090830020201</p>
<pre>Exception in thread "main" java.lang.AssertionError: assertion failed: michid.iterator.A[T]
at scala.Predef$.assert(Predef.scala:107)
at scala.tools.nsc.symtab.Types$TypeRef.transform(Types.scala:1417)
at scala.tools.nsc.symtab.Types$TypeRef$$anonfun$baseTypeSeq$3.apply(Types.scala:1588)
...
</pre>
<p>I created <a href="http://lampsvn.epfl.ch/trac/scala/ticket/2091">Ticket #2091</a> for these problems. </p>
Posted in Uncategorized Tagged: Scala <a href="http://feeds.wordpress.com/1.0/gocomments/michid.wordpress.com/163/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/michid.wordpress.com/163/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/michid.wordpress.com/163/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/michid.wordpress.com/163/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/michid.wordpress.com/163/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/michid.wordpress.com/163/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/michid.wordpress.com/163/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/michid.wordpress.com/163/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/michid.wordpress.com/163/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/michid.wordpress.com/163/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=163&amp;subd=michid&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-08-30T19:20:42Z</updated>
    <category term="Uncategorized"/>
    <category term="Scala"/>
    <author>
      <name>michid</name>
    </author>
    <source>
      <id>http://michid.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/8a44e33f0c0b6ba0377f3633082fb84d?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://michid.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://michid.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://michid.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Hacking Scala</subtitle>
      <title>Michid's Weblog</title>
      <updated>2010-01-29T18:30:10Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/slingusers.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/slingusers.html" rel="alternate" type="text/html"/>
    <title>Are you using Sling?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Are you using <a href="http://sling.apache.org/site/index.html">Apache Sling</a> for internal projects or commercial software or anything else? Let the world know and add yourself to the <a href="http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=2852421">wiki page</a> of Sling users that got <a href="http://dev.day.com/discussion-groups/content/lists/sling-dev/2009-08/2009-08-26_Who_is_using_Sling__Ian_Boston.html">just started by Sling committer Ian Boston</a> (the <a href="http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=2852421">wiki page</a> also contains an interesting summary on Sling's impact on the code base of the <a href="http://www.sakaiproject.org/">Sakai project</a>).</p></div>
    </summary>
    <updated>2009-08-27T00:00:01Z</updated>
    <category term="sling"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-25T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/eclipse_unresolved_compilation_problems_and</id>
    <link href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/qZ2IVKjJYs8/eclipse_unresolved_compilation_problems_and" rel="alternate" type="text/html"/>
    <title>Eclipse unresolved compilation problems vs. Maven</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The <a href="http://www.eclipse.org/jdt/core/index.php">Eclipse Java compiler</a> is built so that it almost always creates a valid class file - even if there are problems like unresolved imports. In that case the problematic method will <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=256443">contain a statement throwing an exception</a>, literally:</p><pre>public void myMethod() {<br/>    throw new Error("Unresolved compilation problems: \n\t<br/>                     The method isA(Resource, String) is<br/>                     undefined for the type ResourceUtil");<br/>} </pre><p>The original code of the method gets removed and the class file is <i>valid</i>, although the source is <i>not compilable</i>! This is really weird stuff when you see that error on a running system first and scratch your head how such an exception gets into the system. At least it gets (surprisingly) clearer when you look at the decompiled class file. This "feature" is seen as a good thing by the Eclipse devs, it seems to be required for the incremental compilation style of Eclipse and <a href="http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg17510.html">cannot be disabled</a> apart from completely disabling the Java builder for a project, which turns Eclipse into a not-so-good text editor.</p><p>Anyway, this leads to a really annoying problem in conjunction with our <a href="http://maven.apache.org/">favorite Java build system</a>: if the Maven build and Eclipse share the same output directory (eg. <font class="Apple-style-span" face="'courier new', courier, monospace">target/classes</font>, which is the default if you use <a href="http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html">mvn eclipse:eclipse</a>), a Maven build that creates a jar from those classes will pick them up without noticing that there is a compilation problem. Because the class file is up-to-date compared to its source file, Maven won't recompile it and simply puts it into your jar. Then it gets deployed, executed and your system throws that nasty error. And you wonder <a href="http://stackoverflow.com/questions/1124788/java-unresolved-compilation-problem">"how could a compilation error get unnoticed into a running system?"</a></p><p>The only solution I found is to avoid sharing of the output directory for classes between Maven and Eclipse. To do that with the maven eclipse plugin, use the "outputDirectory" parameter:</p><pre>mvn eclipse:eclipse -DoutputDirectory=target/eclipse-classes</pre><p>That should ensure you don't accidentally run across that problem again.</p><p><b>Update:</b>  As noted by the commenters, always using <font class="Apple-style-span" face="'courier new', courier, monospace">mvn clean</font> as part of your build process helps as well, although that slows down development a bit. For release builds you should always do a <font class="Apple-style-span" face="'courier new', courier, monospace">clean</font>.</p><img height="1" src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/qZ2IVKjJYs8" width="1"/></div>
    </content>
    <updated>2009-08-21T12:43:23Z</updated>
    <published>2009-08-19T16:39:34Z</published>
    <category label="General" term="/General"/>
    <category scheme="http://rollerweblogger.org/ns/tags/" term="eclipse"/>
    <category scheme="http://rollerweblogger.org/ns/tags/" term="java"/>
    <category scheme="http://rollerweblogger.org/ns/tags/" term="maven"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/alexkli/entry/eclipse_unresolved_compilation_problems_and</feedburner:origlink>
    <author>
      <name>Alexander Klimetschek</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/alexkli/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/alexkli/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/AlexanderKlimetscheksBlog" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>On Software Design and Development</subtitle>
      <title>Alexander Klimetschek's Blog</title>
      <updated>2009-08-21T12:43:23Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=225</id>
    <link href="http://jukkaz.wordpress.com/2009/08/11/apache-jackrabbit-1-6-0-released/" rel="alternate" type="text/html"/>
    <title>Apache Jackrabbit 1.6.0 released</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The Apache Jackrabbit project has just released Jackrabbit version 1.6.0. This release will most likely be the latest JCR 1.0 -based Jackrabbit 1.x minor release before the upcoming Jackrabbit 2.0 and the upgrade to JCR version 2.0. The purpose goal of this release is to push out as many of the recent Jackrabbit trunk improvements [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=225&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>The <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> project has just released Jackrabbit version 1.6.0. This release will most likely be the latest JCR 1.0 -based Jackrabbit 1.x minor release before the upcoming Jackrabbit 2.0 and the upgrade to JCR version 2.0. The purpose goal of this release is to push out as many of the recent Jackrabbit trunk improvements as possible so that the number of new things in Jackrabbit 2.0 remains manageable.</p>
<p style="text-align: center;"><a href="http://jackrabbit.apache.org/downloads.html"><img alt="Download Apache Jackrabbit 1.6.0" class="size-full wp-image-226" height="95" src="http://jukkaz.files.wordpress.com/2009/08/jackrabbit-download-1-6-0.png?w=368&amp;h=95" title="Download Apache Jackrabbit 1.6.0" width="368"/></a></p>
<p>The most notable changes and new features in this release are:</p>
<ul>
<li>The RepositoryCopier tool makes it easy to backup and migrate repositories (<a href="https://issues.apache.org/jira/browse/JCR-442">JCR-442</a>). There is also improved support for selectively copying content and version histories between repositories (<a href="https://issues.apache.org/jira/browse/JCR-1972">JCR-1972</a>).</li>
<li>A new WebDAV-based JCR remoting layer has been added to complement the existing JCR-RMI layer <a href="https://issues.apache.org/jira/browse/JCR-1877">(JCR-1877</a>, <a href="https://issues.apache.org/jira/browse/JCR-1958">JCR-1958</a>).</li>
<li>Query performance has been further optimized (<a href="https://issues.apache.org/jira/browse/JCR-1820">JCR-1820</a>, <a href="https://issues.apache.org/jira/browse/JCR-1855">JCR-1855</a> and <a href="https://issues.apache.org/jira/browse/JCR-2025">JCR-2025</a>).</li>
<li>Added support for Ingres and MaxDB/SapDB databases (<a href="https://issues.apache.org/jira/browse/JCR-1960">JCR-1960</a>, <a href="https://issues.apache.org/jira/browse/JCR-1527">JCR-1527</a>).</li>
<li>Session.refresh() can now be used to synchronize a cluster node with changes from the other nodes in the cluster (<a href="https://issues.apache.org/jira/browse/JCR-1753">JCR-1753</a>).</li>
<li>Unreferenced version histories are now automatically removed once all the contained versions have been removed (<a href="https://issues.apache.org/jira/browse/JCR-134">JCR-134</a>).</li>
<li>Standalone components like the JCR-RMI layer and the OCM framework have been moved to a separate <a href="http://jackrabbit.apache.org/commons/">JCR Commons</a> subproject of Jackrabbit, and are not included in this release. Updates to those components will be distributed as separate releases.</li>
<li>Development preview: There are even more <a href="http://jcp.org/en/jsr/summary?id=283">JSR 283</a> features in Jackrabbit 1.6 than were included in the 1.5 version. These new features are accessible through special “jsr283″ interfaces in the Jackrabbit API. Note that none of these features are ready for production use, and will be replaced with final JCR 2.0 versions in Jackrabbit 2.0.</li>
</ul>
<p>This release is the result of contributions from <a href="https://issues.apache.org/jira/secure/ConfigureReport.jspa?versionId=12313459&amp;issueStatus=all&amp;selectedProjectId=10591&amp;reportKey=com.sourcelabs.jira.plugin.report.contributions:contributionreport&amp;Next=Next" title="Jira contribution report for Jackrabbit 1.6.0">quite a few people</a>. Thanks to everyone involved, this is open source in action!</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/225/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/225/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/225/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/225/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/225/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/225/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/225/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/225/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/225/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/225/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=225&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-08-11T15:11:03Z</updated>
    <category term="JCR"/>
    <category term="Jackrabbit"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2009-12-07T09:00:12Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7079180.post-6639715079321962074</id>
    <link href="http://www.blogger.com/feeds/7079180/6639715079321962074/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=7079180&amp;postID=6639715079321962074" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7079180/posts/default/6639715079321962074" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7079180/posts/default/6639715079321962074" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/keepthebyte/~3/MOSKrG2aRgg/shared-library-with-iphoto-and.html" rel="alternate" type="text/html"/>
    <title>Shared Library with iPhoto and Lightroom</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I recently started using <a href="http://www.adobe.com/products/photoshoplightroom/">Adobe Photoshop Lightroom 2</a> for advanced RAW photo editing while using <a href="http://www.apple.com/ilife/iphoto/">Apple iPhoto 09</a> for quick edits and as main library to keep everything organized.<br/><br/>By default, Lightroom can't access to original photos managed by iPhoto, because they are within a bundle. I found a nice way to workaround this limitation and allow iPhoto and Lightroom work of the same library.<br/><br/>Short Description: Create a symbolic link (symlink) in Pictures to the iPhoto Library "Originals" folder.<br/><br/>Step-by-step:<br/><br/>1. Install <a href="http://seiryu.home.comcast.net/~seiryu/symboliclinker.html">SymbolicLinker</a> from Nick Zitzmann<br/>2. Use the Finder and go to <span style="font-style: italic;">/Pictures/iPhoto Library</span><br/>3. on the file - use context menu action "<span style="font-style: italic;">Show Package Contents</span>"<br/>4. Go to "Originals" folder and use the "<span style="font-style: italic;">Make Symbolic Link</span>" action in More<br/>5. Move the Symbolic Link into <span style="font-style: italic;">/Pictures</span> (and rename if you like)<br/>6. Start Lightroom and use the "<span style="font-style: italic;">Import Photos from Disk...</span>"<br/>7. Navigate to the Symbolic Link<br/>8. Use "<span style="font-style: italic;">Add photos to catalog without moving</span>" for file handling drop-down (should be default)<br/><br/>Credits: <a href="http://broadcast.oreilly.com/2009/03/moving-your-images-from-iphoto.html">Moving Your Images From iPhoto to Lightroom</a> from Gene McCullagh. He is using an "Alias" and recommends to copy the files - but that duplicates all photos.<div class="blogger-post-footer"><img height="1" src="https://blogger.googleusercontent.com/tracker/7079180-6639715079321962074?l=www.keepthebyte.ch%2Fblog.html" width="1"/></div></div>
    </content>
    <updated>2009-08-10T16:58:43Z</updated>
    <published>2009-08-08T16:01:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.keepthebyte.ch/2009/08/shared-library-with-iphoto-and.html</feedburner:origlink>
    <author>
      <name>Cedric</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/06595774870767575842</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7079180</id>
      <author>
        <name>Cedric</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/06595774870767575842</uri>
      </author>
      <link href="http://www.keepthebyte.ch/blog.html" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7079180/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <link href="http://www.keepthebyte.ch/atom.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/keepthebyte" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Ideas move faster in real-time.</subtitle>
      <title>Keep the byte.</title>
      <updated>2009-08-17T12:22:26Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_30</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/HxnhaRPhh8o/links_for_2009_07_30" rel="alternate" type="text/html"/>
    <title>links for 2009-07-30</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://namedfork.net/bootxchanger/">BootXChanger</a></div>
                <div class="delicious-extended">change boot image for macs</div>
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/graphics">graphics</a> <a href="http://delicious.com/alex.saar/boot">boot</a> <a href="http://delicious.com/alex.saar/image">image</a> <a href="http://delicious.com/alex.saar/mac">mac</a> <a href="http://delicious.com/alex.saar/freeware">freeware</a> <a href="http://delicious.com/alex.saar/software">software</a> <a href="http://delicious.com/alex.saar/hacks">hacks</a> <a href="http://delicious.com/alex.saar/tools">tools</a> <a href="http://delicious.com/alex.saar/osx">osx</a> <a href="http://delicious.com/alex.saar/apple">apple</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-31T01:07:17Z</updated>
    <published>2009-07-31T01:07:17Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_30</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/ignite09.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/ignite09.html" rel="alternate" type="text/html"/>
    <title>Day Customer Summit - Registration open</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div><a href="http://www.day.com/summit"><img src="http://dev.day.com/microsling/content/blogs/main/ignite09/docroot/ignite_logo2.jpg" style="float: left; margin-right: 100px; margin-left: 80px; margin-bottom: 20px;"/></a>
</div>
<p>
Same procedure as every year... not exactly! This year's Customer Summit - happening in October 2009 - will be held in two location. For the folks in Europe and Asia we meet in Zurich and for our friends in US and Canada we meet in beautiful Chicago.
</p><p>
Further, we combined the business and technical gathering - the two-day conference agenda is packed with keynotes in the morning and split business and technical sessions in the afternoon.
</p><p>
We also use the opportunity of the Customer Summit to present the latest product advancements and announce new releases.
</p><p>
This year's product highlights:
</p><p>
</p><ul>
<li><p>In-depth presentation of version 5.3 of the CQ5 platform (that includes WCM, DAM and Social Collaboration)</p></li>
<li><p>Unveiling of CRX 2.0: the JCR 2.0 (JSR-283) content repository</p></li>
<li><p>Presentation of the 2010 roadmap</p></li>
<li><p>and one more thing</p></li>
</ul>
<p/><p>
Do you like to share your CQ5 story? We have reserved speaking slots for partners, developers and customers to share their experience. Check out the <a href="http://www.day.com/summit/zuerich/speakers.html">Call for Speakers</a> page to learn more.
</p><p>
The Customer Summit is a great opportunity to meet the community, exchange ideas and network with implementation partners and Day employees. We look forward to see you in Zurich and Chicago.
</p><p>
Visit the <a href="http://www.day.com/summit">Summit Site for detailed agenda and registration</a>.
</p></div>
    </summary>
    <updated>2009-07-30T00:00:01Z</updated>
    <category term="announcements"/>
    <author>
      <name>Cedric Huesler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-24T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_28</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/2KOGy5nA3B0/links_for_2009_07_28" rel="alternate" type="text/html"/>
    <title>links for 2009-07-28</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://developer-evangelism.com/index.php">Developer Evangelism - home of the Developer Evangelist Handbook</a></div>
                
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/webdev">webdev</a> <a href="http://delicious.com/alex.saar/handbook">handbook</a> <a href="http://delicious.com/alex.saar/ebook">ebook</a> <a href="http://delicious.com/alex.saar/development">development</a> <a href="http://delicious.com/alex.saar/tutorial">tutorial</a> <a href="http://delicious.com/alex.saar/evangelism">evangelism</a> <a href="http://delicious.com/alex.saar/developer">developer</a> <a href="http://delicious.com/alex.saar/communication">communication</a> <a href="http://delicious.com/alex.saar/evangelist">evangelist</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-29T01:06:50Z</updated>
    <published>2009-07-29T01:06:50Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_28</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20090729.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20090729.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Polyglott Persistence</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
A couple of days ago, I <a href="http://dev.day.com/microsling/content/blogs/main/cambrian.html">wrote about the NoSQL movement and my conviction that data storage models will soon be better fitted to the data at hand</a> (rather than have any data shoehorned into a relational model). It turns out that Scott Leberknight has come up with a nice buzz word for this phenomenon: "Polyglot Persistence". Quote from <a href="http://www.nofluffjuststuff.com/conference/austin/2009/07/session?id=14357">a presentation abstract</a> of his:
</p>
<div class="blockquote"><p>
Polyglot persistence is all about considering your persistence requirements and selecting a persistence mechanism that best mets those requirements, as opposed to selecting an RDBMS as the default choice.
</p></div><p>
InfoQ has <a href="http://www.infoq.com/news/2009/07/leberknight-polyglot-persistence">more information on his talk</a>. From the article:
</p><div class="blockquote"><p>
The types of data managed in the applications is very different as well. It can be either Structured (relational data), Semi-Structured (for example, documents in a medical records system) or Unstructured (audio/video stream).
</p></div><p>
(SCNR: if you have <em>all</em> of the above you might want to look at <a href="http://www.google.com/search?q=content+repository">content repositories</a>).
</p><p>
Related to this: For an introduction to <a href="http://en.wikipedia.org/wiki/ACID">ACID</a> vs <a href="http://www.johndcook.com/blog/2009/07/06/brewer-cap-theorem-base/">BASE</a> you might also enjoy the talk "<a href="http://blip.tv/file/1949416/">Drop ACID and think about data</a>" from PyCon.
</p></div>
    </summary>
    <updated>2009-07-29T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="data first"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-18T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20090728.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20090728.html" rel="alternate" type="text/html"/>
    <title>[LOTD] eXo JCR implementation</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Congratulations to the eXo folks for their <a href="http://blog.exoplatform.org/2009/07/27/exo-jcr-1112-released/">latest release of the eXo JCR implementation</a>. Apart from the standardized <a href="http://jcp.org/en/jsr/detail?id=170">JSR-170</a> features they provide an <a href="http://wiki.exoplatform.com/xwiki/bin/view/JCR/JCR+Extensions">Extensions API</a> that looks interesting. Extensions can be used to trigger actions when the content changes. That sounds like JCR Observations, but the extensions get called when the changes happen in the session, whereas observations only fire for persisted content. Therefore, this allows for "before update"-like functionality. Nice!
</p></div>
    </summary>
    <updated>2009-07-28T00:00:01Z</updated>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-14T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_25</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/ygsja5R1tiU/links_for_2009_07_25" rel="alternate" type="text/html"/>
    <title>links for 2009-07-25</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://www.panic.com/~wade/picker/">Developer Color Picker for Mac</a></div>
                
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/utility">utility</a> <a href="http://delicious.com/alex.saar/development">development</a> <a href="http://delicious.com/alex.saar/cocoa">cocoa</a> <a href="http://delicious.com/alex.saar/colorpicker">colorpicker</a> <a href="http://delicious.com/alex.saar/mac">mac</a> <a href="http://delicious.com/alex.saar/software">software</a> <a href="http://delicious.com/alex.saar/tools">tools</a> <a href="http://delicious.com/alex.saar/tool">tool</a> <a href="http://delicious.com/alex.saar/osx">osx</a> <a href="http://delicious.com/alex.saar/color">color</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-26T01:11:14Z</updated>
    <published>2009-07-26T01:11:14Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_25</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/cq521ga.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/cq521ga.html" rel="alternate" type="text/html"/>
    <title>Version 5.2.1 available - thanks to customers and partners for phenomenal adoption and feedback on CQ5</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
I'd like to thank the dozens of customer for joining us immediately after the release of CQ5's version 5.2 and with whom we've been able to work with. It has been and is a fantastic collaboration that spans across all continents. Readers of this blog know the brands we have communicated in the past and more are to be announced. Our customers have provided us with excellent feedback, good challenges and excellent collaboration that helped us to increase CQ5's already high level of fun-of-use, stability, scalability, and performance. Fun-of-use, not just for the authors and content editors, but also for our developers and system administrators, in line with our 4 target groups for whom we strive to deliver excellence.
</p>

<img src="http://dev.day.com/microsling/content/blogs/main/cq521ga/docroot/target_audience.png"/>

<p>
Version 5.2.1 is now available for download. It is a maintenance and convenience release. The most important improvements according to your feedback have been rolled up into it. As such version 5.2.1 delivers on of the pillars of our product strategy: "tight customer and partner focus".
</p>

<p>
We continue working on the other two aspects of our product strategy: technology &amp; product leadership and standards &amp; open source leadership for the content industry with our planned CQ 5.3 release as well as JCR 2.0 (JSR-283).
</p>
<p>
For more on those two, please join us at the "Ingnite 2009" customer summits Europe and US. The sign-up page will be up very soon.
</p></div>
    </summary>
    <updated>2009-07-23T00:00:01Z</updated>
    <category term="cq5"/>
    <author>
      <name>Jean-Michel Pittet</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-03T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20090721.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20090721.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Sling for Pythonistas</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
Yesterday, a <a href="http://www.python.org/">Python</a> framework for <a href="http://code.google.com/appengine/">GAE</a> development called <a href="http://code.google.com/p/pyxer/">Pyxer</a> <a href="http://pypi.python.org/pypi/pyxer/0.7.2">got updated</a> to version 0.7.2. I mention this because in a well-hidden corner of Pyxer is a Python wrapper for <a href="http://sling.apache.org/site/index.html">Sling</a> development: check out <a href="http://code.google.com/p/pyxer/source/browse/src/pyxer/sling/sling.py">/src/pyxer/sling/sling.py</a>. This class encapsulates the Sling HTTP API in a Python class (at least some of the API, but it gives you a start).
</p>
<p>
If you want to give it a spin be aware that the Pyxer class puts the default Sling port to 7777, instead of 8888.
</p></div>
    </summary>
    <updated>2009-07-21T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="sling"/>
    <category term="dynamic languages"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-09-01T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20090720.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20090720.html" rel="alternate" type="text/html"/>
    <title>[LOTD] State of the JSR-283 implementation in Jackrabbit</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Jukka Zitting, committer in the Apache Jackrabbit project, has <a href="http://jukkaz.wordpress.com/2009/07/18/jcr-2-0-implementation-progress/">published a post</a> on the status of the <a href="http://jcp.org/en/jsr/summary?id=283">JSR-283</a> implementation in Jackrabbit. For a quick summary of JSR-283 see spec lead David Nuescheler's <a href="http://dev.day.com/microsling/content/blogs/main/jsr283proposedfinaldraft.html">recent post</a>.</p></div>
    </summary>
    <updated>2009-07-20T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="jsr-283"/>
    <category term="jackrabbit"/>
    <category term="jcr"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-08-31T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://jukkaz.wordpress.com/?p=216</id>
    <link href="http://jukkaz.wordpress.com/2009/07/18/jcr-2-0-implementation-progress/" rel="alternate" type="text/html"/>
    <title>JCR 2.0 implementation progress</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The JCR 2.0 API specified by JSR 283 has been in Proposed Final Draft (PFD) stage since March, and Apache Jackrabbit developers have been busy implementing all the specified new features and adding compliance test cases for them.

Both the Reference Implementation (RI) and the Technology Compatibility Kit (TCK) of JSR 283 will be based on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=216&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>The JCR 2.0 API specified by <a href="http://jcp.org/en/jsr/summary?id=283" title="JSR 283: Content Repository for JavaTM Technology API Version 2.0">JSR 283</a> has been in Proposed Final Draft (PFD) stage since March, and <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> developers have been busy implementing all the specified new features and adding compliance test cases for them.</p>
<p><a href="http://jackrabbit.apache.org/"><img alt="Apache Jackrabbit" class="aligncenter size-full wp-image-128" height="100" src="http://jukkaz.files.wordpress.com/2009/01/jackrabbit-logo.gif?w=336&amp;h=100" title="Apache Jackrabbit" width="336"/></a></p>
<p>Both the Reference Implementation (RI) and the Technology Compatibility Kit (TCK) of JSR 283 will be based on Jackrabbit code, and we expect the final version of the specification to be released shortly after Jackrabbit trunk becomes feature-complete and the API coverage of the TCK reaches 100%. The following two graphs illustrate our progress on both these fronts.</p>
<p>First a track of all the JCR 2.0 implementation tasks we’ve filed under the <a href="https://issues.apache.org/jira/browse/JCR-1104" title="JSR 283 support">JCR-1104</a> collection issue. The amount of work per each sub-task is not uniform, so this graph only shows the general trend and does not suggest any specific completion date.</p>
<p><img alt="jcr-20-implementation" class="aligncenter size-full wp-image-222" height="291" src="http://jukkaz.files.wordpress.com/2009/07/jcr-20-implementation1.png?w=500&amp;h=291" title="jcr-20-implementation" width="500"/></p>
<p>The second graph tracks the TCK API coverage. We started with the JCR 1.0 TCK, so the first 300-400 method signatures were already covered with few changes to existing test code. Based on Julian’s API coverage reports in <a href="https://issues.apache.org/jira/browse/JCR-2085" title="test case (TCK) maintenance for JCR 2.0">JSR-2085</a>, this graph tracks progress in covering the 100+ new method signatures introduced in JCR 2.0. Again, the graph is meant to show just a general trend and should not be used to extrapolate future progress.</p>
<p><img alt="JCR 2.0 TCK API coverage" class="aligncenter size-full wp-image-218" height="291" src="http://jukkaz.files.wordpress.com/2009/07/jcr-api-coverage.png?w=500&amp;h=291" title="JCR 2.0 TCK API coverage" width="500"/></p>
<p>Wan’t to see JCR 2.0 in action? The latest Jackrabbit 2.0 alpha releases are <a href="http://jackrabbit.apache.org/downloads.html">available for download</a>!</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/jukkaz.wordpress.com/216/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jukkaz.wordpress.com/216/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/jukkaz.wordpress.com/216/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jukkaz.wordpress.com/216/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/jukkaz.wordpress.com/216/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jukkaz.wordpress.com/216/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/jukkaz.wordpress.com/216/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jukkaz.wordpress.com/216/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/jukkaz.wordpress.com/216/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jukkaz.wordpress.com/216/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jukkaz.wordpress.com&amp;blog=52630&amp;post=216&amp;subd=jukkaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-07-18T17:38:30Z</updated>
    <category term="JCR"/>
    <category term="Jackrabbit"/>
    <author>
      <name>Jukka Zitting</name>
    </author>
    <source>
      <id>http://jukkaz.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/61b91d1104160eee551653d13013e4cc?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://jukkaz.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://jukkaz.wordpress.com" rel="alternate" type="text/html"/>
      <subtitle>Software craftmanship</subtitle>
      <title>Jukka Zitting</title>
      <updated>2009-11-29T14:30:09Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_17</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/NjhJO2iYaqM/links_for_2009_07_17" rel="alternate" type="text/html"/>
    <title>links for 2009-07-17</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://www.chocomoko.com/">Chocomoko - lastfm player for mac</a></div>
                <div class="delicious-extended">lastfm player for mac</div>
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/lastfm">lastfm</a> <a href="http://delicious.com/alex.saar/streaming">streaming</a> <a href="http://delicious.com/alex.saar/music">music</a> <a href="http://delicious.com/alex.saar/player">player</a> <a href="http://delicious.com/alex.saar/mac">mac</a> <a href="http://delicious.com/alex.saar/software">software</a> <a href="http://delicious.com/alex.saar/last.fm">last.fm</a> <a href="http://delicious.com/alex.saar/osx">osx</a> <a href="http://delicious.com/alex.saar/apple">apple</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-18T00:12:32Z</updated>
    <published>2009-07-18T00:12:32Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_17</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1286</id>
    <link href="http://grep.codeconsult.ch/2009/07/17/iks-project-months-4-to-6/" rel="alternate" type="text/html"/>
    <title>IKS project, months 4 to 6: a community is born!</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">For me the major IKS project event this quarter is without a doubt the Workshop in Salzburg at the end of May that I blogged about before.
Talk is cheap and implementation is another story – we now have to implement the ideas discussed there, in my case mostly the search engine and user stories. We’ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1286&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p><a href="http://www.iks-project.eu/"><br/>
<img align="right" src="http://bdelacretaz.files.wordpress.com/2009/03/iks-logo.jpg?w=232" width="232"/><br/>
</a>For me the major <a href="http://grep.codeconsult.ch/feed/">IKS project</a> event this quarter is without a doubt the <a href="http://grep.codeconsult.ch/2009/05/29/back-from-a-great-iks-project-meeting/">Workshop in Salzburg at the end of May</a> that I blogged about before.</p>
<p>Talk is cheap and implementation is another story – we now have to implement the ideas discussed there, in my case mostly the <a href="http://wiki.iks-project.eu/index.php/Semantic-search">search engine</a> and <a href="http://wiki.iks-project.eu/index.php/User-stories">user stories</a>. We’ve got started on those, but most of the work is still ahead of us.</p>
<p>We have also received the first <a href="http://wiki.iks-project.eu/index.php/Semantic-search-benchmark">benchmark requirements</a>, where we’ll have to evaluate <a href="http://www.day.com/cq5">our product’s</a> semantic search abilities, and create some prototype extensions that allow us to better cover this area.</p>
<p>With so many CMS luminaries at the Salzburg workshop, we have started to create an IKS community – at least when it comes to agreeing on what IKS should be, and that’s great already. Now’s the time to move to the next level and actually start creating useful software for and with this community. </p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1286/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1286/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1286/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1286/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1286/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1286/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1286/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1286/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1286/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1286/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1286&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-07-17T15:53:12Z</updated>
    <category term="iks-project"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-184992191049189785</id>
    <link href="http://michaelmarth.blogspot.com/feeds/184992191049189785/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=184992191049189785" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/184992191049189785?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/184992191049189785?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/3uRjKSihuzQ/nosql-long-time-relationship-comes-to.html" rel="alternate" type="text/html"/>
    <title>NoSQL: A long-time relation(ship) comes to an end</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><blockquote/>(cross-posting from <a href="http://dev.day.com/microsling/content/blogs/main/cambrian.html">here</a>)<br/><br/>OK, I admit it, declaring that "<a href="http://www.rgoarchitects.com/nblog/2007/08/21/TheRDBMSIsDead.aspx">the RDBMS is dead</a>" is a meme that has been going around the software industry for a while. Remember object-oriented data bases that were supposed to replace the relational ones? Well, guess who is still here. However, despite the RDBMS's amazing survival skills I would like to propose a related prediction:<br/><br/>I believe that the year 2009 will go down in history as the year when the "<em>relational model default</em>" ended. The term "relational model default" was coined by me to describe a peculiar thing that goes on in application development: start talking to your average application developer about some arbitrary business requirement and chances are that simultaneously he mentally constructs a relational model to fit those requirements.<br/><p>That relational approach to modeling your problem may or may not be suitable. The real problem is that all too often this default does not get challenged. As a consequence, whatever the fitting data model might be, it gets shoehorned into tables and relations.<br/></p><p>This default "thinking" has not yet changed for the masses, but I believe that it has changed for the early adopters (which means that invariably it will change for the masses in some years).<br/></p><p>I see the default to change from:<br/></p><blockquote>"I need to store some data i.e. I need a relational database"</blockquote>to:<br/><blockquote>"I need to store something, let me see the data to decide how to store it."</blockquote>The most concrete and visible manifestation of the rising interest in non-relational data store is the "NoSQL" movement. NoSQL denotes a group of people interested in exploring and comparing alternatives to the traditional relational data storages like MySQL or Postgres. The inaugural get-together has been covered in <a href="http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_database_movement_gains_steam_">Computerworld</a>, see also <a href="http://blog.oskarsson.nu/2009/06/nosql-debrief.html">Johan Oskarsson's post</a> and there is, of course, a <a href="http://twitter.com/#search?q=%23nosql">Hashtag</a>.<br/><p>Other than the NoSQL group I have a second data point to offer: there is a <a href="http://en.wikipedia.org/wiki/Cambrian_explosion">Cambrian Explosion</a> happening in terms of projects exploring non-relational data stores. During the Cambrian Explosion a major diversification of organisms took place. Similarly a plethora of new  projects that explore alternatives to relational models continue to gain interest. Here is an incomplete list:<br/></p><p><br/><a href="http://www.franz.com/agraph/allegrograph/">AllegroGraph</a>, <a href="http://aws.amazon.com/simpledb/">Amazon's SimpleDB</a>, <a href="http://incubator.apache.org/cassandra/">Cassandra</a>, <a href="http://couchdb.apache.org/">CouchDB</a>, <a href="http://github.com/cliffmoon/dynomite/tree/master">Dynomite</a>, <a href="http://code.google.com/appengine/docs/python/datastore/">Google's App Engine datastore</a>, <a href="http://hadoop.apache.org/hbase/">HBase</a>, <a href="http://hypertable.org/">Hypertable</a>, <a href="http://kai.wiki.sourceforge.net/">Kai</a>, <a href="http://memcachedb.org/">MemcacheDB</a>, <a href="http://www.mongodb.org/">Mongo DB</a>, <a href="http://neo4j.org/">Neo4J</a>,<a href="http://www.openrdf.org/"> OpenRDF</a>, <a href="http://project-voldemort.com/">Project Voldemort</a>, <a href="http://code.google.com/p/redis/">Redis</a>, <a href="http://github.com/tuulos/ringo/tree/master">Ringo</a>, <a href="http://code.google.com/p/scalaris/">Scalaris </a>, <a href="http://code.google.com/p/thrudb/">ThruDB</a>, <a href="http://tokyocabinet.sourceforge.net/">Tokyo Cabinet</a> (and <a href="http://tokyocabinet.sourceforge.net/tyrantdoc/">Tokyo Tyrant</a> and <a href="http://opensource.plurk.com/LightCloud/">LightCloud</a>)<br/></p><p>Last, but certainly not least, there are <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> and <a href="http://sling.apache.org/site/index.html">Apache Sling</a>.<br/></p><p>From my perspective there are three main areas of innovation in this Cambrian Explosion of data stores:<br/></p><p><b>1. Models</b><br/><br/>In the relational model you break down your data into tables and relations. This model implies that the data is somewhat tabular. However, in some cases the data simply is not tabular.<br/></p><p>Consider web content, which is  hierarchical and mixes fine-granular data with binary files (this model is implemented in Jackrabbit). Other (not mutually exclusive) alternative models are document-oriented, key-value pairs, or Graphs/RDF.<br/></p><p>One very important aspect of many alternative models is that they are schemaless. That means that they accommodate for <a href="http://www.betaversion.org/%7Estefano/linotype/news/93/">Data First</a> approaches where it is not required to define the data structure before one can actually store any data. This enables agile approaches to software development in the short term as well as more flexibility in the long term evolution of business requirements.<br/></p><p>Without defining a data structure first it is not possible to store anything at all in an RDBMS. This fact is probably one of the root causes of the relational default thinking. An RDBMS-based developer simply cannot develop anything without thinking about table structure.<br/></p><p><br/><b>2. Scalability</b><br/><br/>A second area of innovation is scalability. This can be split down into two sections: One is scalability achieved by distributing the data store across separate machines, the approach pioneered by Google. Opposed to classical clustering of RDBMSs the order of magnitude of machines that are considered is hundreds rather than ten. Obviously, different trade-offs regarding consistency and availability of individual cluster nodes must be taken when architecting for such a high number of cluster nodes. <a href="http://en.wikipedia.org/wiki/Eventual_consistency">Eventual consistency</a> is one of the interesting concepts invented in this space.<br/></p><p><br/>While the commoditization of server hardware triggered this first approach to scalability, a second area is related to the rise of multi-core processors. For a number of years CPUs have not gotten faster, but rather the number of cores has increased. There is no explicit contradiction in running a classical RDBMS on a multi-core machine and even having the RDBMS take advantage of them. However, it seems to me that the SQL language is a poor fit for queries in a multi-core environment when compared with alternatives such as <a href="http://en.wikipedia.org/wiki/Map_reduce">Map/Reduce</a> which are parallel by design.<br/></p><p><br/><b>3. Web</b><br/><br/>The third area of innovation revolves around the fact that the web is the dominant paradigm for computing in our time. This is also acknowledged by the two considerations discussed above. However, a third one is that HTTP is used for accessing the data. Other types of connectivity that were typically implemented as JDBC or ODBC drivers are not needed/used anymore. In many cases the data store exposes its resources in a RESTful API. An obvious benefit is the ubiquitous availability of clients including the browser itself. The classical RDBMS approach involving a dedicated driver looks like a client-server architecture mindset in comparison (<a href="http://dev.day.com/microsling/content/blogs/main/yourdataisyourserver.html">I wrote about this 1.5 years ago</a>).<br/></p><p>At this point let me re-iterate that RDBMSs are here to stay, just like mainframes never went away. Moreover, a couple of the innovation areas cited above are not that new at all, especially, when it comes to non-relational data models (for example, I recently dug into the foundations of the Lotus Notes document store and came out very impressed). However, it is only now that the relational model default will disappear.<br/></p><br/><span style="font-size: 130%;">What about content management systems?</span><br/><br/>Considering the content management system industry as a whole I am extremely happy about this shift away from RDBMSs. Especially the model aspect is crucial: RDBMSs embody a fundamentally wrong model for content. There are varying opinions in the industry about what "content" really is, but one thing is more or less universally accepted: it is (at least partially) <em>unstructured</em>. Well, RDBMSs are designed for <em>structured</em> data. Duh.<br/><p>So why are there one gazillion LAMP-based CMSs? I blame the relational model default. But as this default vanishes we will see more and more CMSs that are not based on an RDBMS (see the Jackrabbit wiki for <a href="http://wiki.apache.org/jackrabbit/JcrLinks">a list of JCR-based ones</a>, as well as the recent PHP-based JCR implementations <a href="https://fosswiki.liip.ch/display/jackalope/Home">Jackalope</a> or for <a href="http://forge.typo3.org/projects/show/package-typo3cr">Typo3</a> or the <a href="http://bergie.iki.fi/blog/midgard_and_jcr-a_look_at_two_content_repositories/">Midgard content repository</a>).<br/></p><p>Don't laugh, but I truly envision a better (CMS) world once more CMSs are built upon proper tools and not forced into a relational model anymore. It will be a better world for developers and consequently for the CMS users.<br/></p><span style="font-size: 130%;">What about Day?</span><br/><br/>REST and content repositories were invented and evangelized by Day's Chief Scientist Roy and Day's CTO David years ago already. So it is no surprise that Day's content management systems are in an excellent shape with respect to these considerations. <a href="http://www.day.com/day/en/products.html">CQ5</a> is built upon Apache Jackrabbit, i.e. a data store that implements a content-centric model, and Apache Sling, a web framework designed to be RESTful right from the start.<br/><p>When it comes to scaling: a week ago we <a href="http://twitter.com/SarahBurnett/status/2529615139">gave a live demonstration</a> on how to install and cluster CQ5 on Amazon's EC2 service. But, expect even more exciting news in this area.<br/></p><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-184992191049189785?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-07-16T14:21:58Z</updated>
    <published>2009-07-16T14:13:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/07/nosql-long-time-relationship-comes-to.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/cambrian.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/cambrian.html" rel="alternate" type="text/html"/>
    <title>NoSQL: A long-time relation(ship) comes to an end</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
OK, I admit it, declaring that "<a href="http://www.rgoarchitects.com/nblog/2007/08/21/TheRDBMSIsDead.aspx">the RDBMS is dead</a>" is a meme that has been going around the software industry for a while. Remember object-oriented data bases that were supposed to replace the relational ones? Well, guess who is still here. However, despite the RDBMS's amazing survival skills I would like to propose a related prediction:
</p><p>
I believe that the year 2009 will go down in history as the year when the "<em>relational model default</em>" ended. The term "relational model default" was coined by me to describe a peculiar thing that goes on in application development: start talking to your average application developer about some arbitrary business requirement and chances are that simultaneously he mentally constructs a relational model to fit those requirements.
</p><p>
That relational approach to modeling your problem may or may not be suitable. The real problem is that all too often this default does not get challenged. As a consequence, whatever the fitting data model might be, it gets shoehorned into tables and relations.
</p><p>
This default "thinking" has not yet changed for the masses, but I believe that it has changed for the early adopters (which means that invariably it will change for the masses in some years).
</p><p>
I see the default to change from:
</p>
<div class="blockquote">
<p>
"I need to store some data i.e. I need a relational database"
</p>
</div>
<p>
to:
</p>
<div class="blockquote">
<p>
"I need to store something, let me see the data to decide how to store it."
</p>
</div>
<p>
The most concrete and visible manifestation of the rising interest in non-relational data store is the "NoSQL" movement. NoSQL denotes a group of people interested in exploring and comparing alternatives to the traditional relational data storages like MySQL or Postgres. The inaugural get-together has been covered in <a href="http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_database_movement_gains_steam_">Computerworld</a>, see also <a href="http://blog.oskarsson.nu/2009/06/nosql-debrief.html">Johan Oskarsson's post</a> and there is, of course, a <a href="http://twitter.com/#search?q=%23nosql">Hashtag</a>.
</p><p>
Other than the NoSQL group I have a second data point to offer: there is a <a href="http://en.wikipedia.org/wiki/Cambrian_explosion">Cambrian Explosion</a> happening in terms of projects exploring non-relational data stores. During the Cambrian Explosion a major diversification of organisms took place. Similarly a plethora of new  projects that explore alternatives to relational models continue to gain interest. Here is an incomplete list:
</p><p>
<a href="http://www.franz.com/agraph/allegrograph/">AllegroGraph</a>, 
<a href="http://aws.amazon.com/simpledb/">Amazon's SimpleDB</a>, 
<a href="http://incubator.apache.org/cassandra/">Cassandra</a>, 
<a href="http://couchdb.apache.org/">CouchDB</a>, 
<a href="http://github.com/cliffmoon/dynomite/tree/master">Dynomite</a>, 
<a href="http://code.google.com/appengine/docs/python/datastore/">Google's App Engine datastore</a>, 
<a href="http://hadoop.apache.org/hbase/">HBase</a>, 
<a href="http://hypertable.org/">Hypertable</a>, 
<a href="http://kai.wiki.sourceforge.net/">Kai</a>, 
<a href="http://memcachedb.org/">MemcacheDB</a>, 
<a href="http://www.mongodb.org/">Mongo DB</a>, 
<a href="http://neo4j.org/">Neo4J</a>, 
<a href="http://www.openrdf.org/">OpenRDF</a>, 
<a href="http://project-voldemort.com/">Project Voldemort</a>, 
<a href="http://code.google.com/p/redis/">Redis</a>, 
<a href="http://github.com/tuulos/ringo/tree/master">Ringo</a>, 
<a href="http://code.google.com/p/scalaris/">Scalaris </a>, 
<a href="http://code.google.com/p/thrudb/">ThruDB</a>, 
<a href="http://tokyocabinet.sourceforge.net/">Tokyo Cabinet</a> (and <a href="http://tokyocabinet.sourceforge.net/tyrantdoc/">Tokyo Tyrant</a> and <a href="http://opensource.plurk.com/LightCloud/">LightCloud</a>)
</p><p>
Last, but certainly not least, there are <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> and <a href="http://sling.apache.org/site/index.html">Apache Sling</a>.
</p><p>
From my perspective there are three main areas of innovation in this Cambrian Explosion of data stores:
</p><p>
<b>1. Models</b><br/>
In the relational model you break down your data into tables and relations. This model implies that the data is somewhat tabular. However, in some cases the data simply is not tabular.
</p><p>
Consider web content, which is  hierarchical and mixes fine-granular data with binary files (this model is implemented in Jackrabbit). Other (not mutually exclusive) alternative models are document-oriented, key-value pairs, or Graphs/RDF.
</p><p>
One very important aspect of many alternative models is that they are schemaless. That means that they accommodate for <a href="http://www.betaversion.org/~stefano/linotype/news/93/">Data First</a> approaches where it is not required to define the data structure before one can actually store any data. This enables agile approaches to software development in the short term as well as more flexibility in the long term evolution of business requirements.
</p><p>
Without defining a data structure first it is not possible to store anything at all in an RDBMS. This fact is probably one of the root causes of the relational default thinking. An RDBMS-based developer simply cannot develop anything without thinking about table structure.
</p><p>
<b>2. Scalability</b><br/>
A second area of innovation is scalability. This can be split down into two sections: One is scalability achieved by distributing the data store across separate machines, the approach pioneered by Google. Opposed to classical clustering of RDBMSs the order of magnitude of machines that are considered is hundreds rather than ten. Obviously, different trade-offs regarding consistency and availability of individual cluster nodes must be taken when architecting for such a high number of cluster nodes. <a href="http://en.wikipedia.org/wiki/Eventual_consistency">Eventual consistency</a> is one of the interesting concepts invented in this space.
</p><p>
While the commoditization of server hardware triggered this first approach to scalability, a second area is related to the rise of multi-core processors. For a number of years CPUs have not gotten faster, but rather the number of cores has increased. There is no explicit contradiction in running a classical RDBMS on a multi-core machine and even having the RDBMS take advantage of them. However, it seems to me that the SQL language is a poor fit for queries in a multi-core environment when compared with alternatives such as <a href="http://en.wikipedia.org/wiki/Map_reduce">Map/Reduce</a> which are parallel by design.
</p><p>
<b>3. Web</b><br/>
The third area of innovation revolves around the fact that the web is the dominant paradigm for computing in our time. This is also acknowledged by the two considerations discussed above. However, a third one is that HTTP is used for accessing the data. Other types of connectivity that were typically implemented as JDBC or ODBC drivers are not needed/used anymore. In many cases the data store exposes its resources in a RESTful API. An obvious benefit is the ubiquitous availability of clients including the browser itself. The classical RDBMS approach involving a dedicated driver looks like a client-server architecture mindset in comparison (<a href="http://dev.day.com/microsling/content/blogs/main/yourdataisyourserver.html">I wrote about this 1.5 years ago</a>).
</p><p>
At this point let me re-iterate that RDBMSs are here to stay, just like mainframes never went away. Moreover, a couple of the innovation areas cited above are not that new at all, especially, when it comes to non-relational data models (for example, I recently dug into the foundations of the Lotus Notes document store and came out very impressed). However, it is only now that the relational model default will disappear.
</p>
<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">What about content management systems?</h6>

<p>
Considering the content management system industry as a whole I am extremely happy about this shift away from RDBMSs. Especially the model aspect is crucial: RDBMSs embody a fundamentally wrong model for content. There are varying opinions in the industry about what "content" really is, but one thing is more or less universally accepted: it is (at least partially) <em>unstructured</em>. Well, RDBMSs are designed for <em>structured</em> data. Duh.
</p><p>
So why are there one gazillion LAMP-based CMSs? I blame the relational model default. But as this default vanishes we will see more and more CMSs that are not based on an RDBMS (see the Jackrabbit wiki for <a href="http://wiki.apache.org/jackrabbit/JcrLinks">a list of JCR-based ones</a>, as well as the recent PHP-based JCR implementations <a href="https://fosswiki.liip.ch/display/jackalope/Home">Jackalope</a> or for <a href="http://forge.typo3.org/projects/show/package-typo3cr">Typo3</a> or the <a href="http://bergie.iki.fi/blog/midgard_and_jcr-a_look_at_two_content_repositories/">Midgard content repository</a>).
</p><p>
Don't laugh, but I truly envision a better (CMS) world once more CMSs are built upon proper tools and not forced into a relational model anymore. It will be a better world for developers and consequently for the CMS users.
</p>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">What about Day?</h6>

<p>
REST and content repositories were invented and evangelized by Day's Chief Scientist Roy and Day's CTO David years ago already. So it is no surprise that Day's content management systems are in an excellent shape with respect to these considerations. <a href="http://www.day.com/day/en/products.html">CQ5</a> is built upon Apache Jackrabbit, i.e. a data store that implements a content-centric model, and Apache Sling, a web framework designed to be RESTful right from the start.
</p><p>
When it comes to scaling: a week ago we <a href="http://twitter.com/SarahBurnett/status/2529615139">gave a live demonstration</a> on how to install and cluster CQ5 on Amazon's EC2 service. But, expect even more exciting news in this area.
</p></div>
    </summary>
    <updated>2009-07-16T00:00:01Z</updated>
    <category term="data first"/>
    <category term="wcm"/>
    <category term="ecm"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-08-31T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/royjoinsasfboard.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/royjoinsasfboard.html" rel="alternate" type="text/html"/>
    <title>Roy Fielding elected into ASF Board of Directors</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p> Day's Chief Scientist <a href="http://www.day.com/day/en/company/management.html">Roy Fielding</a> has been elected as one of the new members of the Apache Software Foundation's <a href="http://apache.org/foundation/board/">a new Board of Directors</a>. Congratulations! Roy had been member of the Board before, see <a href="http://shane.curcuru.name/">Shane Cucuru</a>'s nice <a href="http://communityovercode.com/faq/asf-board/">timeline of the Board members</a>.</p>
<p>
On the occasion of the ASF's 10th birthday <a href="http://dev.day.com/microsling/content/blogs/main/apachebirthday.html">we published an interview with Roy and Bertrand Delacretaz</a> (who served on the <a href="http://dev.day.com/microsling/content/blogs/main/apacheboard.html">Board during the last term</a>) about the foundation's past and future.
</p></div>
    </summary>
    <updated>2009-07-13T00:00:01Z</updated>
    <category term="apache"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-08-31T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_10</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/gLaweCvKdmI/links_for_2009_07_10" rel="alternate" type="text/html"/>
    <title>links for 2009-07-10</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://mac.appstorm.net/how-to/applescript/the-ultimate-beginners-guide-to-applescript/">The Ultimate Beginner’s Guide To AppleScript «  AppStorm</a></div>
                
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/programming">programming</a> <a href="http://delicious.com/alex.saar/applescript">applescript</a> <a href="http://delicious.com/alex.saar/mac">mac</a> <a href="http://delicious.com/alex.saar/tutorial">tutorial</a> <a href="http://delicious.com/alex.saar/tutorials">tutorials</a> <a href="http://delicious.com/alex.saar/howto">howto</a> <a href="http://delicious.com/alex.saar/scripting">scripting</a> <a href="http://delicious.com/alex.saar/reference">reference</a> <a href="http://delicious.com/alex.saar/osx">osx</a> <a href="http://delicious.com/alex.saar/apple">apple</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-11T00:15:08Z</updated>
    <published>2009-07-11T00:15:08Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_10</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://bdelacretaz.wordpress.com/?p=1280</id>
    <link href="http://grep.codeconsult.ch/2009/07/09/the-board-is-dead-long-live-the-board/" rel="alternate" type="text/html"/>
    <title>The Board is dead, long live the Board!</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Well, not exactly dead, but today the Apache Software Foundation elected a new board of directors:

2009 board: Shane Curcuru, Doug Cutting, Justin Erenkrantz, Roy T. Fielding, Jim Jagielski, Geir Magnusson, Jr., Brian McCallister, Brett Porter, Greg Stein

Congrats to all! There were a lot of excellent candidates this time, and the new board looks like a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1280&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Well, not exactly dead, but today the <a href="http://apache.org">Apache Software Foundation</a> elected a new <a href="http://apache.org/foundation/board/">board of directors</a>:</p>
<blockquote><p>
2009 board: Shane Curcuru, Doug Cutting, Justin Erenkrantz, Roy T. Fielding, Jim Jagielski, Geir Magnusson, Jr., Brian McCallister, Brett Porter, Greg Stein
</p></blockquote>
<p>Congrats to all! There were a lot of excellent candidates this time, and the new board looks like a nice mix of great people. Looking forward to what this year brings.</p>
<p>And thanks to the outgoing board – being part of it has been a rich learning experience for me. Hard work at times, but it’s great to have more insight about how the foundation works and to be able to help.</p>
<p>I’ll list the names of the 2008 board here, so that I can find them in 50 years when we talk about the good times:</p>
<blockquote><p>
2008 board: Justin Erenkrantz, J Aaron Farr, Jim Jagielski (chairman), Geir Magnusson Jr, William Rowe Jr, Sam Ruby, Henning Schmiedehausen, Greg Stein, Bertrand Delacretaz
</p></blockquote>
<p>Shane Curcuru has created a nice <a href="http://communityovercode.com/faq/asf-board/">timeline</a> of all board members from the beginning to 2008.</p>
  <a href="http://feeds.wordpress.com/1.0/gocomments/bdelacretaz.wordpress.com/1280/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bdelacretaz.wordpress.com/1280/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/bdelacretaz.wordpress.com/1280/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bdelacretaz.wordpress.com/1280/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/bdelacretaz.wordpress.com/1280/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bdelacretaz.wordpress.com/1280/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/bdelacretaz.wordpress.com/1280/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bdelacretaz.wordpress.com/1280/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/bdelacretaz.wordpress.com/1280/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bdelacretaz.wordpress.com/1280/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grep.codeconsult.ch&amp;blog=2844102&amp;post=1280&amp;subd=bdelacretaz&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-07-09T16:42:52Z</updated>
    <category term="asf"/>
    <author>
      <name>bdelacretaz</name>
    </author>
    <source>
      <id>http://grep.codeconsult.ch</id>
      <logo>http://www.gravatar.com/blavatar/e6e901bd190e100a6787d0252d1f244f?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://grep.codeconsult.ch/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://grep.codeconsult.ch" rel="alternate" type="text/html"/>
      <link href="http://grep.codeconsult.ch/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>cat /dev/brain | egrep -i 'tech|thoughts|noise'</subtitle>
      <title>bertrand's brain grep</title>
      <updated>2010-01-14T15:30:04Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_08</id>
    <link href="http://feedproxy.google.com/~r/WalkingTheWay/~3/NVy1i9Fkrak/links_for_2009_07_08" rel="alternate" type="text/html"/>
    <title>links for 2009-07-08</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="delicious"><li>
                <div class="delicious-link"><a href="http://www.flexibits.com/">Flexibits | Cameras</a></div>
                <div class="delicious-extended">manage multiple cameras</div>
                <div class="delicious-tags">(tags: <a href="http://delicious.com/alex.saar/iphoto">iphoto</a> <a href="http://delicious.com/alex.saar/camera">camera</a> <a href="http://delicious.com/alex.saar/iphone">iphone</a> <a href="http://delicious.com/alex.saar/management">management</a> <a href="http://delicious.com/alex.saar/cameras">cameras</a> <a href="http://delicious.com/alex.saar/mac">mac</a> <a href="http://delicious.com/alex.saar/photography">photography</a> <a href="http://delicious.com/alex.saar/software">software</a> <a href="http://delicious.com/alex.saar/free">free</a>)</div>
            </li></ul></div>
    </content>
    <updated>2009-07-09T00:37:44Z</updated>
    <published>2009-07-09T00:37:44Z</published>
    <category label="General" term="/General"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://weblogs.goshaky.com/weblogs/saar/entry/links_for_2009_07_08</feedburner:origlink>
    <author>
      <name>Alexander Saar</name>
    </author>
    <source>
      <id>http://weblogs.goshaky.com/weblogs/saar/feed/entries/atom</id>
      <link href="http://weblogs.goshaky.com/weblogs/saar/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/WalkingTheWay" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Hello, my name is Alexander Saar. I'm a software engineer &amp; software project manager, a sports freak and a photographer. I use this blog to publish interesting stuff about me and the experiences I made in my daily life and work.</subtitle>
      <title>walking the way - startup, business &amp; life</title>
      <updated>2009-07-31T01:07:17Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/synesketch.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/synesketch.html" rel="alternate" type="text/html"/>
    <title>Happy coders visualized</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
My colleague <a href="http://twitter.com/trieloff">Lars Trieloff</a> has gone through a fun excercise: he used <a href="http://www.natpryce.com/bzr/project-painter/">Nat Pryce's software Project Painter</a> and <a href="http://www.synesketch.krcadinac.com/wiki/index.php?title=Main_Page">Synesketch</a> to visualize how happy the developers of our software are. Project Painter analyzes the emotions expressed in comments of the software and generates an image from that. The results: they are happy and in the case of Sling a bit surprised as well (see the <a href="http://www.synesketch.krcadinac.com/wiki/index.php?title=Demonstration#Synemania">Synesketch wiki for how to interpret the images</a>).
</p>
<p>
<b>Apache Felix</b>
</p>
<p>
<img src="http://dev.day.com/microsling/content/blogs/main/synesketch/docroot/felix.png"/>
</p>
<p>
<b>Apache Jackrabbit</b>
</p>

<p>
<img src="http://dev.day.com/microsling/content/blogs/main/synesketch/docroot/jackrabbit.png"/>
</p>
<p>
<b>Apache Sling</b>
</p>
<p>
<img src="http://dev.day.com/microsling/content/blogs/main/synesketch/docroot/sling.png"/>
</p>

<p>
<b>CQ5</b>
</p>
<p>
<img src="http://dev.day.com/microsling/content/blogs/main/synesketch/docroot/cq5.png"/>
</p></div>
    </summary>
    <updated>2009-07-08T00:00:01Z</updated>
    <category term="fun"/>
    <category term="idle"/>
    <category term="cq5"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-08-27T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/sonar.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/sonar.html" rel="alternate" type="text/html"/>
    <title>Reviewing code quality of Apache Sling using Sonar</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div style="border-bottom: 1px dotted rgb(153, 153, 153); padding: 2px;"><p><em>This is a cross-post of <a href="http://sonar.codehaus.org/reviewing-the-apache-sling-code-quality-using-sonar/">Freddy's analysis at the Sonar site</a>. We use <a href="http://sonar.codehaus.org/">Sonar</a> internally at Day to track and improve the quality of all our software. Also check out <a href="http://nemo.sonarsource.org/projects">Nemo</a> which is Sonar's platform for analysing various other FOSS projects.</em></p></div>

<br/>
<p>
A few weeks ago Michael Marth, who runs <a href="http://dev.day.com/">dev.day.com</a> (Day’s developer portal), asked us if we could put together our impressions on the code quality of <a href="http://sling.apache.org/site/index.html">Apache Sling</a> using Sonar. We thought it would be valuable to share the result of this exercise with the community.
</p>
<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Apache Sling in a few words</h6>
<p>
“Apache Sling is an innovative web framework that is intended to bring back the fun to web development. It uses all those nice cool and new technologies that make up a state-of-the-art framework. This is Apache Sling in five bullets:
</p>

<ul>
<li><p> REST based web framework</p></li>
<li><p>Content-driven, using a JCR content repository</p></li>
<li><p>Powered by OSGi</p></li>
<li><p>Scripting inside, multiple languages</p></li>
<li><p>Apache Open Source project</p></li>
</ul>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Some size indications of the project</h6>

<ul>
<li><p>40 Maven modules</p></li>
<li><p>70,707 lines of code</p></li>
<li><p>731 Java classes</p></li>
<li><p>and 23,043 lines of Javadoc</p></li>
</ul>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">The strengths in terms of quality</h6>

<ul>
<li><p>A project that you get and compile with no difficulty by running two
commands:<br/>
           1. svn checkout <a href="https://svn.apache.org/repos/asf/sling/trunk/">https://svn.apache.org/repos/asf/sling/trunk/</a><br/> 
           2. mvn clean install<br/>
      This sounds like an evidence but is not always the case :-)</p></li>
<li><p>Amongst 130,172 physical lines, only 0.9% are involved in a duplication</p></li>
<li><p>46.4% of public API are commented with a Javadoc block</p></li>
</ul>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">The weaknesses</h6>

<ul>
<li><p>Only 9% of the source code is covered by 338 unit tests</p></li>
<li><p>Average cyclomatic complexity by method (excluding getters and setters)
is greater than 3 (3.2).<br/>
      That is kind of a warning saying “your methods are taking too much responsibilities and should be re-factored”. This warning is confirmed by others metrics : 394 methods have a complexity greater than 7 and 86 methods have more than 50 statements. What is true at method level gets also partially confirmed at class level as 60 classes have a Fan Out Complexity greater than 20 (The number of other classes referenced by a class)</p></li>
</ul>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Bad programming practices that should be improved</h6>

<ul>
<li><p>198 times, method parameters are reassigned in the core of the method</p></li>
<li><p>68 times, local variables are defined and hide class fields</p></li>
<li><p>28 times, NullPointerException are thrown when an IllegalParameterException would be more suitable</p></li>
</ul>

<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Potential bugs that should be quickly analyzed</h6>

<ul>
<li><p>Correctness - An apparent infinite recursive loop : there is an apparent infinite recursive loop in org.apache.sling.scripting.jsp.jasper.runtime. <a href="http://nemo.sonarsource.org/drilldown/rules/107290?rule_id=341&amp;viewer_plugin_key=org.sonar.plugins.core.violationssourceviewer.GwtViolationsSourceViewer&amp;viewer_resource_key=org.apache.sling:org.apache.sling.scripting.jsp:org.apache.sling.scripting.jsp.jasper.runtime.JspContextWrapper">JspContextWrapper</a>.include(String, boolean)</p></li>
<li><p>Multithreaded correctness - Unsynchronized get method, synchronized set method : org.apache.sling.scripting.jsp.jasper.compiler. <a href="http://nemo.sonarsource.org/drilldown/rules/107290?rule_id=450&amp;viewer_plugin_key=org.sonar.plugins.core.violationssourceviewer.GwtViolationsSourceViewer&amp;viewer_resource_key=org.apache.sling:org.apache.sling.scripting.jsp:org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext">JspRuntimeContext</a>.getJspReloadCount() is unsynchronized, org.apache.sling.scripting.jsp.jasper.compiler. JspRuntimeContext.setJspReloadCount(int) is synchronized</p></li>
<li><p>Multithreaded correctness - Method calls Thread.sleep() with a lock held : org.apache.sling.event.impl. <a href="http://nemo.sonarsource.org/drilldown/rules/107290?rule_id=655&amp;viewer_plugin_key=org.sonar.plugins.core.violationssourceviewer.GwtViolationsSourceViewer&amp;viewer_resource_key=org.apache.sling:org.apache.sling.event:org.apache.sling.event.impl.JobEventHandler">JobEventHandler</a>.runJobQueue(String, JobBlockingQueue) calls Thread.sleep() with a lock held</p></li>
<li><p>Malicious code vulnerability - Field is a mutable array : org.apache.sling.jcr.webdav.impl.servlets. <a href="http://nemo.sonarsource.org/drilldown/rules/107290?rule_id=463&amp;viewer_plugin_key=org.sonar.plugins.core.violationssourceviewer.GwtViolationsSourceViewer&amp;viewer_resource_key=org.apache.sling:org.apache.sling.jcr.webdav:org.apache.sling.jcr.webdav.impl.servlets.SlingWebDavServlet">SlingWebDavServlet</a>.COLLECTION_TYPES_DEFAULT is a mutable array</p></li>
</ul>

 <p>
This analysis was done with the intention of giving a synthetic overview of the current state of the project. Where should you start from if tomorrow you wake up with a single idea in mind : “Improving quality of the Apache Sling project !” ?
</p>

<ul>
<li><p>With respectively a cyclomatic complexity of 428, 385 and 343, classes Generator, Parser and XMLEndoginDetector should be first refactored. With no surprise, the Generator.java file has the greatest number of duplicated lines (154) and rules violations (109)</p></li>
<li><p>With its 43 cyclomatic complexity and no unit tests, the method ModifyAceServlet.handleOperation(..) is what we call “a <a href="http://www.crap4j.org/">crappy</a> method” :-)</p></li>
</ul>

<p>
More information on the code quality of the project is available on <a href="http://nemo.sonarsource.org/project/index/org.apache.sling:sling-builder">Nemo</a>. 
</p></div>
    </summary>
    <updated>2009-07-01T00:00:01Z</updated>
    <category term="sling"/>
    <category term="quality"/>
    <author>
      <name>Freddy Mallet</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-07-30T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/lotd20090630.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/lotd20090630.html" rel="alternate" type="text/html"/>
    <title>[LOTD] Content Structure in a CMS</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
<a href="http://www.contenthere.net/2009/06/great-presentation-on-content-modeling.html">Via Seth Gottlieb</a> I have found this really good <a href="http://www.gadgetopia.com/post/6853">presentation on content modelling</a> for content management systems by <a href="http://deanebarker.net/blog/">Deane Barker</a>:
</p>
<img border="0" height="0" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNDYzNTM2OTA3MzQmcHQ9MTI*NjM1MzcwMjg1OSZwPTEwMTkxJmQ9c3NfZW1iZWQmZz*yJnQ9Jm89MTU5MzE3YTlhMDVkNDAxNjliMDUzY2Q5NjM1Mzc1ZWQmb2Y9MA==.gif" style="width: 0px; height: 0px;" width="0"/><div id="__ss_1609592" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/gadgetopia/just-put-that-in-the-zip-code-field?type=powerpoint" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="&quot;Just Put That In The Zip Code Field...&quot;">"Just Put That In The Zip Code Field..."</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/gadgetopia" style="text-decoration: underline;">gadgetopia</a>.</div></div>
<p>
Cleve Gibbon's recent well-written <a href="http://www.clevegibbon.com/contentmanagement/content-modelling/">series on content modelling</a> is closely related to Deane's presentation. Make sure to have a look if you are interested in that area.
</p><p>

I really like Deane's presentation, at least when I look at it from the paradigm that proper content management needs a-priori content modelling. Lately, I have come to question this idea, but that shall be the topic of a different post.
</p></div>
    </summary>
    <updated>2009-06-30T00:00:01Z</updated>
    <category term="lotd"/>
    <category term="contentmodels"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-07-29T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-31254910.post-1891373238561952907</id>
    <link href="http://michaelmarth.blogspot.com/feeds/1891373238561952907/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="https://www.blogger.com/comment.g?blogID=31254910&amp;postID=1891373238561952907" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/1891373238561952907?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/31254910/posts/default/1891373238561952907?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/CoffeeGems/~3/r9s_OX1GbR4/jazoon-09-slides.html" rel="alternate" type="text/html"/>
    <title>Jazoon 09 slides</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The slides shown in <a href="http://michaelmarth.blogspot.com/2009/06/jazoon-talk-on-scalable-agile-web.html">my Jazoon talk</a> are now online:<br/><br/><div id="__ss_1653454" style="width: 425px; text-align: left;"><a href="http://www.slideshare.net/mmarth/jazoon-2009?type=powerpoint" style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; display: block; text-decoration: underline;" title="Jazoon 2009">Jazoon 2009</a><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/mmarth" style="text-decoration: underline;">mmarth</a>.</div></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/31254910-1891373238561952907?l=michaelmarth.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2009-06-29T10:16:33Z</updated>
    <published>2009-06-29T10:14:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://michaelmarth.blogspot.com/2009/06/jazoon-09-slides.html</feedburner:origlink>
    <author>
      <name>Michael Marth</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/03925861261744910154</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-31254910</id>
      <author>
        <name>Michael Marth</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/03925861261744910154</uri>
      </author>
      <link href="http://michaelmarth.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://michaelmarth.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/31254910/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/CoffeeGems" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>About software development</subtitle>
      <title>Coffee &amp; Gems</title>
      <updated>2010-03-12T16:56:58Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/jazoon09slides.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/jazoon09slides.html" rel="alternate" type="text/html"/>
    <title>Jazoon 09 Slides</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
In case you missed the <a href="http://dev.day.com/microsling/content/blogs/main/jazoon09ann.html">Day talks</a> at <a href="http://jazoon.com/">Jazoon</a> conference please find the slides below:
</p>



<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Thomas Mueller: Testing Zen</h6>

<div id="__ss_1653542" style="width: 425px; text-align: left;"><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/day" style="text-decoration: underline;">day</a>.</div></div><br/><br/>


<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">Thomas Mueller: Java Persistence Frameworks</h6>


<div id="__ss_1653539" style="width: 425px; text-align: left;"><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">documents</a> from <a href="http://www.slideshare.net/day" style="text-decoration: underline;">day</a>.</div></div><br/><br/>






<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">
Michael Marth and Michael Dürig: Scalable Agile Web Development: REST meets JCR meets OSGI</h6>

<div id="__ss_1653454" style="width: 425px; text-align: left;"><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/mmarth" style="text-decoration: underline;">mmarth</a>.</div></div><br/><br/>



<h6 xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">
Michael Dürig and Michael Marth: Building RESTful Web Applications with Scala for Sling</h6>

<div id="__ss_1653585" style="width: 425px; text-align: left;"><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a href="http://www.slideshare.net/" style="text-decoration: underline;">presentations</a> from <a href="http://www.slideshare.net/day" style="text-decoration: underline;">day</a>.</div></div><br/><br/></div>
    </summary>
    <updated>2009-06-29T00:00:01Z</updated>
    <category term="sling"/>
    <category term="jcr"/>
    <category term="testing"/>
    <author>
      <name>Michael Marth</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-07-23T00:00:01Z</updated>
    </source>
  </entry>

  <entry>
    <id>http://dev.day.com/microsling/content/blogs/main/cloudann.html</id>
    <link href="http://dev.day.com/microsling/content/blogs/main/cloudann.html" rel="alternate" type="text/html"/>
    <title>[ANN] Upcoming Cloud-Computing Events (July 7 and 9)</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The introduction of the simplified clustering in CRX 1.4.1 (back in January 2009) kick-started the efforts to make CRX and CQ5 easily deployable into the Amazon cloud computing infrastructure.
</p><p>
A lot happend since then - most importantly - we got in touch with customers that have exactly the challenges we were looking to solve with cloud-based deployments. One of them being the ability to scale infrastructure for peak usage, without the cost of running all servers all the time. Of course, to set a good example, we run our own sites - such as <a href="http://www.day.com" target="_blank">www.day.com</a> - on EC2.
</p><p>
Next week, we would like to give you an update of what we did so far and share the plans for the future.
</p><p>
On July 7th (Tuesday) we have a half day seminar in London. Sarah Burnett from Butler Group and myself will discuss the advantages and use cases to make best use of cloud computing infrastructure. This is a great event to get yourself familiar with the cloud computing topic and learn how you can apply that to your content management initiatives. Join the free seminar in London. <a href="http://www.day.com/content/day/en/registration/seminars/cq5cloud-london.html" target="_blank"><b>Sign-up here</b></a>.
</p><p>
On July 9th (Thursday) I'm going to broadcast my speech and discussions from London via a Webinar using WebEx. <a href="http://www.day.com/content/day/en/registration/webinars/cq5-cloud-jul0909.html" target="_blank"><b>Feel free to sign-up to get the details to join the Webinar</b></a>.
</p><p>
Personally, I believe the most exciting part of the cloud computing era are the new ways to solve challenges accepting the fact that almost unlimited computing resources are at your disposal (at a fairly decent price).
</p></div>
    </summary>
    <updated>2009-06-29T00:00:01Z</updated>
    <category term="announcements"/>
    <category term="cloud"/>
    <category term="cq5"/>
    <author>
      <name>Cedric Huesler</name>
      <email>dev@day.com</email>
    </author>
    <source>
      <id>http://dev.day.com/microsling/content/blogs/main.html</id>
      <link href="http://dev.day.com/microsling/content/blogs/main.xml" rel="self" type="application/atom+xml"/>
      <link href="http://dev.day.com/microsling/content/blogs/main.html" rel="alternate" type="text/html"/>
      <subtitle>(content goes here) blog</subtitle>
      <title>(content goes here) blog</title>
      <updated>2009-07-28T00:00:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://michid.wordpress.com/?p=156</id>
    <link href="http://michid.wordpress.com/2009/06/26/scala-for-sling-jazzon-09/" rel="alternate" type="text/html"/>
    <title>Scala for Sling @ Jazzon 09</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Yesterday I gave a presentation at Jazoon 09 about using Scala for scripting RESTful web applications with Apache Sling. 
In the session I showed how to take advantage of Scala to create RESTful web applications with Apache Sling. I demonstrated how to uses its DSL capability and support for XML literals to create type safe [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=156&amp;subd=michid&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Yesterday I gave a <a href="http://jazoon.com/en/conference/presentationdetails.html?type=sid&amp;detail=10080">presentation</a> at <a href="http://jazoon.com/">Jazoon 09</a> about using <a href="http://www.scala-lang.org">Scala</a> for scripting <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">RESTful</a> web applications with <a href="http://incubator.apache.org/sling/">Apache Sling</a>. </p>
<p>In the session I showed how to take advantage of Scala to create RESTful web applications with Apache Sling. I demonstrated how to uses its DSL capability and support for XML literals to create type safe web site templates. In contrast to conventional web site template mechanisms (e.g. JSP), this does not rely on a  pre-processor but rather uses pure Scala code. </p>
<p>There are <a href="http://people.apache.org/~mduerig/scala4sling/scala4sling.pdf">Session slides</a> and <a href="http://people.apache.org/~mduerig/scala4sling/scala4sling-demo.zip">support material</a> available <a href="http://people.apache.org/~mduerig/scala4sling/">here</a>. The support material contains a fully workable demo application. A Scala scripting bundle for Sling is also included. </p>
Posted in Uncategorized Tagged: JCR, Scala, Sling <a href="http://feeds.wordpress.com/1.0/gocomments/michid.wordpress.com/156/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/michid.wordpress.com/156/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/michid.wordpress.com/156/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/michid.wordpress.com/156/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/michid.wordpress.com/156/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/michid.wordpress.com/156/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/michid.wordpress.com/156/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/michid.wordpress.com/156/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/michid.wordpress.com/156/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/michid.wordpress.com/156/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=156&amp;subd=michid&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-06-26T13:38:06Z</updated>
    <category term="Uncategorized"/>
    <category term="JCR"/>
    <category term="Scala"/>
    <category term="Sling"/>
    <author>
      <name>michid</name>
    </author>
    <source>
      <id>http://michid.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/8a44e33f0c0b6ba0377f3633082fb84d?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://michid.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://michid.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://michid.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Hacking Scala</subtitle>
      <title>Michid's Weblog</title>
      <updated>2010-01-29T18:30:11Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://michid.wordpress.com/?p=151</id>
    <link href="http://michid.wordpress.com/2009/06/24/puzzle-implement-this-solution/" rel="alternate" type="text/html"/>
    <title>Puzzle: implement this (solution)</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Well, I wasn’t aware of Ticket #1737 when I was trying to find a solution to the problem from my previous post. Thanks to Jorge Ortiz for pointing this out. However, I reviewed my approach to solving this and didn’t find sever limitations. Maybe someone else does…
When I initially stumbled on this, I remembered that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=151&amp;subd=michid&amp;ref=&amp;feed=1"/></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="snap_preview"><br/><p>Well, I wasn’t aware of <a href="http://lampsvn.epfl.ch/trac/scala/ticket/1737">Ticket #1737</a> when I was trying to find a solution to the problem from my <a href="http://michid.wordpress.com/2009/06/19/puzzle-implement-this/">previous post</a>. Thanks to <a href="http://michid.wordpress.com/2009/06/19/puzzle-implement-this/#comment-283">Jorge Ortiz</a> for pointing this out. However, I reviewed my approach to solving this and didn’t find sever limitations. Maybe someone else does…</p>
<p>When I initially stumbled on this, I remembered that existential types where introduced into Scala for coping with Java’s raw types. But there is an additional twist here, we need to tell the compiler that our <em>MyIterator</em> implementation actually ‘is an instance of a raw type’. So combining existential types with self types led me to the following solution:</p>
<pre class="brush: java;">class MyIterator extends Iterator2 {
  this: java.util.Iterator[_] =&gt;
  def hasNext = true
  def remove = throw new Error
  def next = "infinity"
}
</pre>
<p>We can now safely use instances of <em>MyIterator</em>. </p>
<pre class="brush: java;">  def test1(it: MyIterator) = {
    println(it.next)
  }

  def test2(it: java.util.Iterator[_]) = {
    println(it.next)
  }

  val it = new MyIterator
  val v: String = it.next
  println(v)

  test1(it)
  test2(it)
</pre>
<p>The approach using existential types in combination with self types makes sure that values returned from the <em>next</em> method always are typed correctly.</p>
Posted in Uncategorized Tagged: Puzzle, Scala <a href="http://feeds.wordpress.com/1.0/gocomments/michid.wordpress.com/151/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/michid.wordpress.com/151/"/></a> <a href="http://feeds.wordpress.com/1.0/godelicious/michid.wordpress.com/151/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/michid.wordpress.com/151/"/></a> <a href="http://feeds.wordpress.com/1.0/gostumble/michid.wordpress.com/151/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/michid.wordpress.com/151/"/></a> <a href="http://feeds.wordpress.com/1.0/godigg/michid.wordpress.com/151/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/michid.wordpress.com/151/"/></a> <a href="http://feeds.wordpress.com/1.0/goreddit/michid.wordpress.com/151/" rel="nofollow"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/michid.wordpress.com/151/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=michid.wordpress.com&amp;blog=2538862&amp;post=151&amp;subd=michid&amp;ref=&amp;feed=1"/></div></div>
    </content>
    <updated>2009-06-24T20:51:35Z</updated>
    <category term="Uncategorized"/>
    <category term="Puzzle"/>
    <category term="Scala"/>
    <author>
      <name>michid</name>
    </author>
    <source>
      <id>http://michid.wordpress.com</id>
      <logo>http://www.gravatar.com/blavatar/8a44e33f0c0b6ba0377f3633082fb84d?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</logo>
      <link href="http://michid.wordpress.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://michid.wordpress.com" rel="alternate" type="text/html"/>
      <link href="http://michid.wordpress.com/osd.xml" rel="search" type="application/opensearchdescription+xml"/>
      <subtitle>Hacking Scala</subtitle>
      <title>Michid's Weblog</title>
      <updated>2010-01-29T18:30:11Z</updated>
    </source>
  </entry>
</feed>
