<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title type="html">Alexander Klimetschek's Blog</title>
    <subtitle type="html">On Software Design and Development</subtitle>
    <id>http://weblogs.goshaky.com/weblogs/alexkli/feed/entries/atom</id>
    
    <link rel="alternate" type="text/html" href="http://weblogs.goshaky.com/weblogs/alexkli/" />
    <updated>2009-08-21T12:43:23+00:00</updated>
    <generator uri="http://rollerweblogger.org" version="3.1 (20070110092556:dave)">Apache Roller (incubating)</generator>
            <link rel="self" href="http://feeds.feedburner.com/AlexanderKlimetscheksBlog" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/eclipse_unresolved_compilation_problems_and</id>
        <title type="html">Eclipse unresolved compilation problems vs. Maven</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/qZ2IVKjJYs8/eclipse_unresolved_compilation_problems_and" />
        <published>2009-08-19T16:39:34+00:00</published>
        <updated>2009-08-21T12:43:23+00:00</updated> 
        <category term="/General" label="General" />
        <category term="eclipse" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="maven" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;The &lt;a href="http://www.eclipse.org/jdt/core/index.php"&gt;Eclipse Java compiler&lt;/a&gt; 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 &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=256443"&gt;contain a statement throwing an exception&lt;/a&gt;, literally:&lt;/p&gt;&lt;pre&gt;public void myMethod() {&lt;br /&gt;    throw new Error(&amp;quot;Unresolved compilation problems: \n\t&lt;br /&gt;                     The method isA(Resource, String) is&lt;br /&gt;                     undefined for the type ResourceUtil&amp;quot;);&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;p&gt;The original code of the method gets removed and the class file is &lt;i&gt;valid&lt;/i&gt;, although the source is &lt;i&gt;not compilable&lt;/i&gt;! 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 &amp;quot;feature&amp;quot; is seen as a good thing by the Eclipse devs, it seems to be required for the incremental compilation style of Eclipse and &lt;a href="http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg17510.html"&gt;cannot be disabled&lt;/a&gt;&amp;nbsp;apart from completely disabling the Java builder for a project, which turns Eclipse into a not-so-good text editor.&lt;/p&gt;&lt;p&gt;Anyway, this leads to a really annoying problem in conjunction with our &lt;a href="http://maven.apache.org/"&gt;favorite Java build system&lt;/a&gt;: if the Maven build and Eclipse share the same output&amp;nbsp;directory (eg. &lt;font class="Apple-style-span" face="'courier new', courier, monospace"&gt;target/classes&lt;/font&gt;, which is the default if you use &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html"&gt;mvn eclipse:eclipse&lt;/a&gt;), 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&amp;nbsp;error. And you wonder &lt;a href="http://stackoverflow.com/questions/1124788/java-unresolved-compilation-problem"&gt;&amp;quot;how could a compilation error get unnoticed into a running system?&amp;quot;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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 &amp;quot;outputDirectory&amp;quot; parameter:&lt;/p&gt;&lt;pre&gt;mvn eclipse:eclipse -DoutputDirectory=target/eclipse-classes&lt;/pre&gt;&lt;p&gt;That should ensure you don't accidentally run across that problem again.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp;&amp;nbsp;As noted by the commenters, always using &lt;font class="Apple-style-span" face="'courier new', courier, monospace"&gt;mvn clean&lt;/font&gt; as part of your build process helps as well, although that slows down development a bit. For release builds you should always do a &lt;font class="Apple-style-span" face="'courier new', courier, monospace"&gt;clean&lt;/font&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qZ2IVKjJYs8:VNqfIHE13n8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qZ2IVKjJYs8:VNqfIHE13n8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=qZ2IVKjJYs8:VNqfIHE13n8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qZ2IVKjJYs8:VNqfIHE13n8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=qZ2IVKjJYs8:VNqfIHE13n8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qZ2IVKjJYs8:VNqfIHE13n8:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/qZ2IVKjJYs8" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/eclipse_unresolved_compilation_problems_and</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/icalendar_textmate_bundle</id>
        <title type="html">iCalendar Textmate bundle</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/nu_MyMCkJDQ/icalendar_textmate_bundle" />
        <published>2009-02-17T14:28:08+00:00</published>
        <updated>2009-02-17T14:28:08+00:00</updated> 
        <category term="/General" label="General" />
        <category term="icalendar" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="textmate" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;I extended the language definition in the &lt;a href="http://svn.textmate.org/trunk/Bundles/iCalendar.tmbundle/"&gt;iCalendar TextMate bundle&lt;/a&gt; a bit, so that it recognizes and highlights event properties (red in the screenshot) and UIDs (green) as well. I also turned off the numeric constant regexp, because it did simply did not work in all cases.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img hspace="0" vspace="0" border="0" align="baseline" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/icalendar-textmate-syntax-highlight.png" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Because I could not find any place to report back changes (the TextMate wiki mentions &lt;font face="courier new,courier,monospace" size="2"&gt;bundles at textmate.org&lt;/font&gt; for the textmate.org community-provided bundles, but I could not register for that list), here is the improved bundle&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/resource/iCalendar.zip.pdf"&gt;iCalendar.zip.pdf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Note that I could not upload a zip file to this blog, so after downloading please first rename the file to &lt;font face="courier new,courier,monospace" size="2"&gt;iCalendar.zip&lt;/font&gt;, unzip it and then double-click the extracted bundle package to install it in TextMate. &lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=nu_MyMCkJDQ:1leeiM9NGpU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=nu_MyMCkJDQ:1leeiM9NGpU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=nu_MyMCkJDQ:1leeiM9NGpU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=nu_MyMCkJDQ:1leeiM9NGpU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=nu_MyMCkJDQ:1leeiM9NGpU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=nu_MyMCkJDQ:1leeiM9NGpU:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/nu_MyMCkJDQ" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/icalendar_textmate_bundle</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/opensearch_plugin_for_apache_jira</id>
        <title type="html">OpenSearch plugin for Apache JIRA</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/EtsJJ4X8R_Q/opensearch_plugin_for_apache_jira" />
        <published>2008-04-30T14:13:57+00:00</published>
        <updated>2008-04-30T14:13:57+00:00</updated> 
        <category term="/General" label="General" />
        <category term="apache" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="firefox" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jira" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="opensearch" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="search" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;
If you are an &lt;a href="http://apache.org"&gt;Apache&lt;/a&gt; user or developer and find yourself searching through the &lt;a href="http://issues.apache.org/jira/"&gt;JIRA&lt;/a&gt; at the ASF very often, it is useful to have the search built-in right into your browser. The solution is to install an &lt;a href="http://en.wikipedia.org/wiki/OpenSearch"&gt;OpenSearch&lt;/a&gt; plugin that sends the right search query to Apache's JIRA. The following Javascript link will just do that:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;script&gt;
&lt;!--
function addOpenSearchEngine()
{
  if ((typeof window.external == "object") &amp;&amp; (typeof
  window.external.AddSearchProvider == "function"))
  {
    window.external.AddSearchProvider("http://weblogs.goshaky.com/weblogs/alexkli/resource/apache-jira.xml");
  }
  else
  {
    alert("A modern browser (such as Firefox 2 or IE 7) is needed to install an OpenSearch plugin");
  }
}

//--&gt;
&lt;/script&gt;

&lt;a href="javascript:addOpenSearchEngine()"&gt;Install OpenSearch plugin&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; For the curious, look at the &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/resource/apache-jira.xml"&gt;OpenSearch XML file&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You can now enter your favorite search terms. The search will be the same as the &amp;quot;Quick Search&amp;quot; in the upper right of the JIRA interface. Try for example &lt;a href="http://issues.apache.org/jira/secure/QuickSearch.jspa?searchString=mod_proxy"&gt;mod_proxy&lt;/a&gt;, &lt;a href="http://issues.apache.org/jira/secure/QuickSearch.jspa?searchString=jcr+persistence"&gt;&amp;quot;JCR persistence&amp;quot;&lt;/a&gt; (which will detect the project shortcut &amp;quot;JCR&amp;quot; and search only the respective Jackrabbit project) or &lt;a href="http://issues.apache.org/jira/secure/QuickSearch.jspa?searchString=jcr-123"&gt;JCR-123&lt;/a&gt; (it will detect issue identifiers and jump right to the issue).&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=EtsJJ4X8R_Q:fWC2BewiqIs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=EtsJJ4X8R_Q:fWC2BewiqIs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=EtsJJ4X8R_Q:fWC2BewiqIs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=EtsJJ4X8R_Q:fWC2BewiqIs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=EtsJJ4X8R_Q:fWC2BewiqIs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=EtsJJ4X8R_Q:fWC2BewiqIs:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/EtsJJ4X8R_Q" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/opensearch_plugin_for_apache_jira</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_20</id>
        <title type="html">links for 2008-04-20</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/N-eWFjIKIvI/links_for_2008_04_20" />
        <published>2008-04-20T23:32:45+00:00</published>
        <updated>2008-04-20T23:32:45+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.acmqueue.org/modules.php?name=Content&amp;pa=showpage&amp;pid=525"&gt;How OSGi Changed My Life&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Good introduction into OSGi, its concepts and its history&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/osgi"&gt;osgi&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/java"&gt;java&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/architecture"&gt;architecture&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/article"&gt;article&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/development"&gt;development&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=N-eWFjIKIvI:0SvZnZC9Grk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=N-eWFjIKIvI:0SvZnZC9Grk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=N-eWFjIKIvI:0SvZnZC9Grk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=N-eWFjIKIvI:0SvZnZC9Grk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=N-eWFjIKIvI:0SvZnZC9Grk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=N-eWFjIKIvI:0SvZnZC9Grk:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/N-eWFjIKIvI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_20</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/bash_history</id>
        <title type="html">Bash history</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/8tq3N4e-98g/bash_history" />
        <published>2008-04-17T10:11:40+00:00</published>
        <updated>2008-04-17T10:11:40+00:00</updated> 
        <category term="/General" label="General" />
        <category term="bash" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="commandline" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="unix" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;pre&gt;history|awk '{a[$2]++} END{for(i in a){printf &amp;quot;%5d\t%s \n&amp;quot;,a[i],i}}'|sort -rn|head&lt;/pre&gt;&lt;pre&gt;  118	svn &lt;br /&gt;   91	curl &lt;br /&gt;   63	find &lt;br /&gt;   42	ls &lt;br /&gt;   28	cd &lt;br /&gt;   20	mate &lt;br /&gt;   15	rm &lt;br /&gt;   10	diff &lt;br /&gt;    8	vim &lt;br /&gt;    7	tail &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Sorry, I had to follow the hype &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt; But this list changes every day anyway - the top command &amp;quot;svn&amp;quot; for example is there because I did a lot of &amp;quot;svn st&amp;quot; piping to &amp;quot;grep&amp;quot; before a large checkin.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8tq3N4e-98g:uAI4hGXG2_w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8tq3N4e-98g:uAI4hGXG2_w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8tq3N4e-98g:uAI4hGXG2_w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8tq3N4e-98g:uAI4hGXG2_w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8tq3N4e-98g:uAI4hGXG2_w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8tq3N4e-98g:uAI4hGXG2_w:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/8tq3N4e-98g" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/bash_history</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/svn_commit_replaced_directories</id>
        <title type="html">SVN: Commit replaced directories</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/zYf7e4xsEiE/svn_commit_replaced_directories" />
        <published>2008-04-16T10:24:30+00:00</published>
        <updated>2008-04-16T17:10:36+00:00</updated> 
        <category term="/General" label="General" />
        <category term="svn" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;Although there is the &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/mindquarry_desktop_client_now_with"&gt;Mindquarry Desktop Client&lt;/a&gt;, which stores the Subversion metadata (hence the .svn subdirectories) not inside the working directory, I still very much use the standard SVN command line client. Which sometimes brings up the following problem: if a tool &lt;b&gt;replaces an entire directory&lt;/b&gt; - examples are Apple Keynote or Eclipse re-compiling code and replacing the classes folder (yes, I know, you shouldn't do it, but sometimes you just &lt;i&gt;have to&lt;/i&gt; put it under version control...) - well, if it replaces the directory, the &lt;b&gt;&lt;font face="courier new,courier,monospace"&gt;.svn&lt;/font&gt; subfolder is lost&lt;/b&gt; and you get this ugly status message:&lt;/p&gt;&lt;pre&gt;~ &amp;nbsp; subfolder&lt;/pre&gt;
&lt;p&gt;Which means subversion knows about it (the current folder contains an entry like &amp;quot;directory: subfolder&amp;quot;), but the directory itself is not a working directory (no .svn folder present in subfolder). &lt;b&gt;That status is called &lt;font face="courier new,courier,monospace"&gt;&amp;quot;~ replaced&amp;quot;&lt;/font&gt;&lt;/b&gt;; unfortunately the description in the &lt;a href="http://svnbook.red-bean.com/en/1.0/re26.html"&gt;SVN manual&lt;/a&gt; is incomplete: &lt;i&gt;&amp;quot;Item is versioned as a directory, but has been replaced by a file, or vice versa.&amp;quot;&lt;/i&gt; It should better read: &lt;i&gt;&amp;quot;Item is versioned as a directory, but has been replaced by a file with the same name, or vice versa. It could also indicate that it is versioned as a directory, but has been replaced by a directory of the same name without the important .svn folder inside.&amp;quot;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;It's normally a three step process on a standard &lt;b&gt;UNIX command line&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;mv subfolder subfolder-temp&lt;br /&gt;svn up subfolder&lt;br /&gt;cp -R subfolder-temp/* subfolder&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Note that &lt;font face="courier new,courier,monospace"&gt;subfolder-temp&lt;/font&gt; is just a temporary name which must not exist yet. The &lt;b&gt;important step is the copy with -R and *&lt;/b&gt;, which under UNIX means to copy the tree below &lt;font face="courier new,courier,monospace"&gt;subfolder-temp&lt;/font&gt; into the existing tree under &lt;font face="courier new,courier,monospace"&gt;subfolder&lt;/font&gt;. This is technically a simple &lt;i&gt;forward merge&lt;/i&gt;. And here is the tricky part: it works for added and modified files, but&lt;b&gt; not for deleted files&lt;/b&gt;. You will have to manually delete them. To find out which files are actually deleted, you can &lt;b&gt;use the diff command&lt;/b&gt; in recursive and brief mode:&lt;/p&gt;&lt;pre&gt;diff -rq subfolder subfolder-temp&lt;/pre&gt;&lt;p&gt;For each file it says &amp;quot;Only in subfolder/: foobar&amp;quot;, you can &lt;b&gt;delete it&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;svn del subfolder/foobar&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;To make sure everything is correct now, &lt;b&gt;check the status&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;svn st subfolder&lt;/pre&gt;&lt;p&gt;You should probably also run your (test) code on this &amp;quot;rebuilt&amp;quot; directory or check the files with whatever program is using them. If everything is ok, you can &lt;b&gt;commit it and throw away the temporary copy&lt;/b&gt;:&lt;/p&gt;&lt;pre&gt;svn ci subfolder&lt;br /&gt;rm -rf subfolder-temp&lt;/pre&gt;&lt;p&gt;Quite a long workaround, but somewhat systematic. It's probably possible to write a script that does it, but when I think about it, I would probably never trust the script to not accidentally throw away the local changes ;-).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Martin Probst has such a &lt;a href="http://www.martin-probst.com/blog/2008/02/11/shell-script-to-restore-svn-directories-in-mac-os-x-bundles"&gt;script (called svnrecover)&lt;/a&gt;, but it works in a different fashion.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=zYf7e4xsEiE:JPaB2ee5aWM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=zYf7e4xsEiE:JPaB2ee5aWM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=zYf7e4xsEiE:JPaB2ee5aWM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=zYf7e4xsEiE:JPaB2ee5aWM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=zYf7e4xsEiE:JPaB2ee5aWM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=zYf7e4xsEiE:JPaB2ee5aWM:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/zYf7e4xsEiE" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/svn_commit_replaced_directories</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_11</id>
        <title type="html">links for 2008-04-11</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/5CcEeQOr6rA/links_for_2008_04_11" />
        <published>2008-04-11T23:42:47+00:00</published>
        <updated>2008-04-11T23:42:47+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://andrewchen.typepad.com/andrew_chens_blog/2008/04/your-ad-support.html"&gt;Your ad-supported Web 2.0 site is actually a B2B enterprise in disguise&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Thesis: Web 2.0 sites based on a pure ad-supported business model are actually B2B enterprise companies: because you actually sell to your (typically enterprise) ad-placing customers. Which means - shocking surprise - that you need a bunch of traditional&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/business"&gt;business&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/entrepreneurship"&gt;entrepreneurship&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/Internet"&gt;Internet&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/startup"&gt;startup&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web2.0"&gt;web2.0&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/advertising"&gt;advertising&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/businessmodel"&gt;businessmodel&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/sales"&gt;sales&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=5CcEeQOr6rA:eb8uw-7hYuk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=5CcEeQOr6rA:eb8uw-7hYuk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=5CcEeQOr6rA:eb8uw-7hYuk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=5CcEeQOr6rA:eb8uw-7hYuk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=5CcEeQOr6rA:eb8uw-7hYuk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=5CcEeQOr6rA:eb8uw-7hYuk:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/5CcEeQOr6rA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_11</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_03</id>
        <title type="html">links for 2008-04-03</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/Y0Y9r3Frswo/links_for_2008_04_03" />
        <published>2008-04-03T23:41:41+00:00</published>
        <updated>2008-04-03T23:41:41+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://lolcode.com/home"&gt;Programming language based on lolcats speak&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/language"&gt;language&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/funny"&gt;funny&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/lolcats"&gt;lolcats&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.priorsmart.com/"&gt;Patent search - meta search engine for all international patent offices&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/patent"&gt;patent&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/search"&gt;search&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/research"&gt;research&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=Y0Y9r3Frswo:Q0cVNg5vmc4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=Y0Y9r3Frswo:Q0cVNg5vmc4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=Y0Y9r3Frswo:Q0cVNg5vmc4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=Y0Y9r3Frswo:Q0cVNg5vmc4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=Y0Y9r3Frswo:Q0cVNg5vmc4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=Y0Y9r3Frswo:Q0cVNg5vmc4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/Y0Y9r3Frswo" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_03</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_02</id>
        <title type="html">links for 2008-04-02</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/LeDoRa_IYoc/links_for_2008_04_02" />
        <published>2008-04-02T23:38:48+00:00</published>
        <updated>2008-04-02T23:38:48+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://cdsmith.twu.net/types.html"&gt;What to Know Before Debating Type Systems&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/language"&gt;language&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/types"&gt;types&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/typing"&gt;typing&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/theory"&gt;theory&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/dynamic"&gt;dynamic&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://perl.plover.com/yak/typing/notes.html"&gt;Strong Typing in ML&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/language"&gt;language&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/strong"&gt;strong&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/typing"&gt;typing&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/types"&gt;types&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/ml"&gt;ml&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/perl"&gt;perl&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=LeDoRa_IYoc:NYRnqTkPvUQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=LeDoRa_IYoc:NYRnqTkPvUQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=LeDoRa_IYoc:NYRnqTkPvUQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=LeDoRa_IYoc:NYRnqTkPvUQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=LeDoRa_IYoc:NYRnqTkPvUQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=LeDoRa_IYoc:NYRnqTkPvUQ:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/LeDoRa_IYoc" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_04_02</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_03_20</id>
        <title type="html">links for 2008-03-20</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/gl106mvQWZA/links_for_2008_03_20" />
        <published>2008-03-20T23:29:41+00:00</published>
        <updated>2008-03-20T23:29:41+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://bitworking.org/news/201/RESTify-DayTrader"&gt;Complex REST modelling example&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Shows how to get reliability with the non-idempotent POST - by using a PUT on a temporary resource.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/rest"&gt;rest&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/Design"&gt;Design&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/http"&gt;http&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web"&gt;web&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/webservices"&gt;webservices&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/modeling"&gt;modeling&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/tutorial"&gt;tutorial&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gl106mvQWZA:QoiYJZS-zdo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gl106mvQWZA:QoiYJZS-zdo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=gl106mvQWZA:QoiYJZS-zdo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gl106mvQWZA:QoiYJZS-zdo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=gl106mvQWZA:QoiYJZS-zdo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gl106mvQWZA:QoiYJZS-zdo:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/gl106mvQWZA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_03_20</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/moving_itunes_library_to_another</id>
        <title type="html">Moving iTunes library to another drive</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/jwhkbRKxQZ8/moving_itunes_library_to_another" />
        <published>2008-03-14T16:12:34+00:00</published>
        <updated>2008-03-14T16:15:26+00:00</updated> 
        <category term="/General" label="General" />
        <category term="itunes" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="macosx" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;I bought a shiny new &lt;a href="http://www.westerndigital.com/en/products/Products.asp?DriveID=387"&gt;portable hard drive&lt;/a&gt; with 320 GB to replace my &lt;a href="http://www.lacie.com/products/product.htm?pid=10943"&gt;other external hard drive&lt;/a&gt; that has 500 GB, but needs external power and comes with a power adapter that is almost larger than the drive itself. Very unpractical when you travel.&lt;/p&gt;&lt;p&gt;Since my main working machine, a company MacBook Pro, has &amp;quot;only&amp;quot; 120 GB, which are only 110 GB when formatted and has about 80 GB free with OS and basic programs installed (currently I have about 40 GB left on the drive; from my experience, this is path down towards no space left, even if it might be a slow path), I simply cannot store a 40+ GB library on the notebook's internal drive. So now I had to copy my iTunes library from one to the other drive. This took me some time, so here are the necessary steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Connect both drives to the computer&lt;/li&gt;&lt;li&gt;Turn off iTunes (to avoid new podcasts changing the library)&lt;/li&gt;&lt;li&gt;Copy the iTunes library folder from the old drive to the new (I simply have a folder &lt;font face="courier new,courier,monospace"&gt;iTunes/&lt;/font&gt; in the root of the drive)&lt;/li&gt;&lt;li&gt;Have a cup of coffee &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;&lt;/li&gt;&lt;li&gt;Disconnect the old drive&lt;/li&gt;&lt;li&gt;Start iTunes&lt;/li&gt;&lt;li&gt;Go to Settings -&amp;gt; Advanced and change the location of the library to the new drive&lt;/li&gt;&lt;li&gt;iTunes will now update the media library (a small cup of coffee now)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After that, iTunes might ask you for reorganization: as the library is copied as is, you don't have to do this, so it's safe to skip this&lt;/li&gt;&lt;li&gt;Now everything should be on the new drive. To check that, open the info dialog for a song and look at the file name (at the bottom of the first tab)&lt;/li&gt;&lt;/ol&gt;If you have the old drive open while changing the location in iTunes, he will do the scan and co, but afterwards still uses the files from the old library.&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=jwhkbRKxQZ8:15g_j5IM5WQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=jwhkbRKxQZ8:15g_j5IM5WQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=jwhkbRKxQZ8:15g_j5IM5WQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=jwhkbRKxQZ8:15g_j5IM5WQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=jwhkbRKxQZ8:15g_j5IM5WQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=jwhkbRKxQZ8:15g_j5IM5WQ:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/jwhkbRKxQZ8" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/moving_itunes_library_to_another</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/java_api_exceptions_argh</id>
        <title type="html">Java API Exceptions - Argh!</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/7zZCAIyTYFA/java_api_exceptions_argh" />
        <published>2008-03-07T10:27:29+00:00</published>
        <updated>2008-03-07T10:27:29+00:00</updated> 
        <category term="/General" label="General" />
        <category term="exception" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;Just stumbled again over one of the many stupid things in the Java API: if a socket connection cannot be established, you will get this exception:&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier,monospace"&gt;java.net.ConnectException: Connection refused&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Well, I see that it doesn't work, because nothing is happening. And I could guess the connection refused from a java.net.ConnectException. But what is the &lt;b&gt;address and port&lt;/b&gt; that could not be reached??? This is some deep-down library call in a larger webapplication, so I have no clue what ip and port he is trying.&lt;/p&gt;&lt;p&gt; Why is it so difficult to provide an informative error message? This is running on the 5th edition of Java, 10 years in the wild... Sun is definitely bad on the developer usability part. Really.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7zZCAIyTYFA:tc_3VzZYBg4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7zZCAIyTYFA:tc_3VzZYBg4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=7zZCAIyTYFA:tc_3VzZYBg4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7zZCAIyTYFA:tc_3VzZYBg4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=7zZCAIyTYFA:tc_3VzZYBg4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7zZCAIyTYFA:tc_3VzZYBg4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/7zZCAIyTYFA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/java_api_exceptions_argh</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part1</id>
        <title type="html">Exception Handling Best Practices Part 3</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/7mt6MWIKjag/exception_handling_best_practices_part1" />
        <published>2008-03-03T17:42:46+00:00</published>
        <updated>2008-03-03T17:42:46+00:00</updated> 
        <category term="/General" label="General" />
        <category term="exception" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="programming" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;This is the final part of my talk on exceptions (see &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_best_practices"&gt;Part 1&lt;/a&gt; and &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part"&gt;Part 2&lt;/a&gt;). It's just an extension to the first part.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Anti-Patterns&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;On java.net there is a nice list of &lt;a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html"&gt;exception anti-patterns&lt;/a&gt; that shows you how not to work with exceptions.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Don't throw exceptions in a common handleError() methods&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Debugging a framework is no fun if all the &lt;font face="courier new,courier,monospace"&gt;throw new Exception()&lt;/font&gt; statements are put into a common helper method, that is typically called &lt;font face="courier new,courier,monospace"&gt;handleError()&lt;/font&gt; or maybe even &lt;font face="courier new,courier,monospace"&gt;throwException()&lt;/font&gt;. The problem is that the top line numbers in the stack trace don't help very much - you have to go down the stacktrace to find the actual location responsible for throwing this exception. Often there are multiple steps in handleError, filling up the stack trace for no advantage.&lt;br /&gt;&lt;br /&gt;Simply use your Exception's constructor for common exception-creation code.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Put semantically relevant information into your contingency Exception classes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you properly separate &lt;a href="http://dev2dev.bea.com/pub/a/2006/11/effective-exceptions.html"&gt;contingency and faults&lt;/a&gt;, the client code will have to handle contingency exceptions for its normal control flow logic. Therefore it is often helpful to include members in the exception class that depict the problem, eg. the id of the object that could not be found or maybe a standardized error code. This gives the client code more freedom where and how to react on such exceptions, ie. it doesn't have to carry the parameters used to invoke the api methods that might throw the exception around until the problem is actually handled (eg. again the id as an example). The basic exception class only has a message which is targeted solely on human developers (and some for end-users, but that's a different story).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7mt6MWIKjag:SAV1MMUyrPw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7mt6MWIKjag:SAV1MMUyrPw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=7mt6MWIKjag:SAV1MMUyrPw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7mt6MWIKjag:SAV1MMUyrPw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=7mt6MWIKjag:SAV1MMUyrPw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=7mt6MWIKjag:SAV1MMUyrPw:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/7mt6MWIKjag" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part1</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part</id>
        <title type="html">Exception Handling Best Practices Part 2: Control flow in data oriented APIs</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/gX78naVJCs0/exception_handling_best_practices_part" />
        <published>2008-03-03T17:29:19+00:00</published>
        <updated>2008-03-03T17:29:19+00:00</updated> 
        <category term="/General" label="General" />
        <category term="exception" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="programming" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;A few weeks ago, I posted an entry about my &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_best_practices"&gt;best practices regarding exceptions&lt;/a&gt;. Here finally comes part 2, which is more specific and talks about what I call &amp;quot;data-oriented APIs&amp;quot;.&lt;/p&gt;&lt;p&gt;A data-oriented API typically lets you retrieve data objects via ids or strings (&lt;font face="courier new,courier,monospace"&gt;Thing thing = api.getThing(&amp;quot;foobar&amp;quot;)&lt;/font&gt;). One of the questions you have to answer when modeling the API is what to do when the object cannot be found. There are two basic answers: either return &lt;font face="courier new,courier,monospace"&gt;null&lt;/font&gt; or throw an exception. This has an impact on how the control flow will look for the client code:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Pure exception style&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;Thing thing = null;&lt;br /&gt;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; thing = api.getThing(&amp;quot;foobar&amp;quot;);&lt;br /&gt;} catch(NoSuchThingException e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object initData = createInitData();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; thing = api.createThing(initData);&lt;br /&gt;}&lt;/pre&gt;Advantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;exception could easily be passed through multiple layers of code&lt;/li&gt;&lt;/ul&gt;Disadvantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;code looks ugly, especially when other exceptions come into play&lt;/li&gt;&lt;li&gt;not finding the object is part of the normal data-handling logic, hence it is not an &amp;quot;exception&amp;quot; (see also &lt;a href="http://dev2dev.bea.com/pub/a/2006/11/effective-exceptions.html"&gt;Faults vs. Contingencies&lt;/a&gt; referenced in part 1)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Pre-check existence of object&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;try {&lt;br /&gt;    Thing thing;&lt;br /&gt;    if (api.hasThing(&amp;quot;foobar&amp;quot;)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     thing = api.getThing(&amp;quot;foobar&amp;quot;);&lt;br /&gt;    } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     Object initData = createInitData();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     thing = api.createThing(initData);&lt;br /&gt;    }&lt;br /&gt;} catch (NoSuchThingException e) {&lt;br /&gt;    // not supposed to happen&lt;br /&gt;    log.error(&amp;quot;unexpected exception while retrieving 'foobar'&amp;quot;, e);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Note that getThing() still throws an exception because it cannot know that the client properly calls hasThing() before.&lt;br /&gt;&lt;br /&gt;Advantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;nice and readable code structure (inside try-catch)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;hasThing() method probably needed for other places anyway&lt;/li&gt;&lt;/ul&gt;Disadvantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the exception still clutters the code&lt;/li&gt;&lt;li&gt;if the client is coded properly like above, the exception is never thrown, but must be catched nevertheless&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Return null&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;Thing thing = api.getThing(&amp;quot;foobar&amp;quot;);&lt;br /&gt;if (thing != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object initData = createInitData();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; thing = api.createThing(initData);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;Advantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;nice and readable code structure - &lt;i&gt;without any&lt;/i&gt; distracting try-catch&lt;/li&gt;&lt;li&gt;variable can be assigned where it gets defined (&lt;font face="courier new,courier,monospace"&gt;Thing thing = api.getThing()&lt;/font&gt;)&lt;/li&gt;&lt;li&gt;null value can be returned from the method below and passed around in client code, a full replacement for the pass-through exception variant mentioned above&lt;/li&gt;&lt;/ul&gt;Disadvantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;none ;-)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;The last variant is the one I think is best for keeping your code clean and readable. The basic principle here is that we leave exceptions to handle real faults, but handle contingencies, ie. the missing object, with normal code structures instead. Null or NIL is handled properly in modern languages with memory-management, so this is a valid, if not one of the best use-cases for it.&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gX78naVJCs0:oCODlP46L_Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gX78naVJCs0:oCODlP46L_Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=gX78naVJCs0:oCODlP46L_Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gX78naVJCs0:oCODlP46L_Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=gX78naVJCs0:oCODlP46L_Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=gX78naVJCs0:oCODlP46L_Y:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/gX78naVJCs0" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/mofuse_creates_an_automatic_mobile</id>
        <title type="html">MoFuse creates an automatic mobile view of any website</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/_vYv6Fv98AI/mofuse_creates_an_automatic_mobile" />
        <published>2008-02-27T22:04:20+00:00</published>
        <updated>2008-03-03T16:58:06+00:00</updated> 
        <category term="/General" label="General" />
        <category term="mobile" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mofuse" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="website" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;
Go to &lt;a href="http://alexkli.mofuse.mobi"&gt;http://alexkli.mofuse.mobi&lt;/a&gt; to see a nice mobile version of this blog, which looks great on the iPhone. It's a free service by &lt;a href="http://www.mofuse.com/"&gt;MoFuse&lt;/a&gt; and works for any website.&lt;strike&gt; Looks like they cleverly extract headers and main text parts of the site and split them up in a list on the main page (eg. representing the blog entry list) and separate sub-pages for each header/text section found on the page&lt;/strike&gt;. &lt;b&gt;Update:&lt;/b&gt; It simply renders the RSS feed found on the page. Well done.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;img vspace="0" hspace="0" border="0" align="center" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/mofuse-small.png" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_vYv6Fv98AI:bhiXpksfIlg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_vYv6Fv98AI:bhiXpksfIlg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=_vYv6Fv98AI:bhiXpksfIlg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_vYv6Fv98AI:bhiXpksfIlg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=_vYv6Fv98AI:bhiXpksfIlg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_vYv6Fv98AI:bhiXpksfIlg:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/_vYv6Fv98AI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/mofuse_creates_an_automatic_mobile</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/displaying_an_entries_title_in</id>
        <title type="html">Displaying entry titles in the HTML title with Apache Roller 3.1</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/lHGCLvtFMfA/displaying_an_entries_title_in" />
        <published>2008-02-27T15:35:50+00:00</published>
        <updated>2008-02-27T15:38:41+00:00</updated> 
        <category term="/General" label="General" />
        <category term="entry" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="roller" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="title" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;Since the upgrade to Apache Roller 3.1 my blog was missing nice HTML titles, ie. on the entry pages linked by permalinks you only saw the blog's title, but not the title of the entry. So I fixed it by setting &amp;lt;title&amp;gt; to this:&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier,monospace"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model.weblog.name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if ($model.weblogEntry)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $model.weblogEntry.title&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/title&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Looks easy when you see it, but unfortunately the &lt;a href="http://64.233.183.104/search?q=cache:8HGhKJxcfrEJ:www.apache.org/dist/roller/roller-3/v3.1.0/docs/roller-template-guide.pdf+apache+roller+show+title&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=3"&gt;roller template documentation&lt;/a&gt; is more a reference and does not help with such common cases. So I took &lt;a href="http://weblogs.goshaky.com/weblogs/lars/entry/the_secret_of_optimzing_your"&gt;Lars' variant&lt;/a&gt;, which did not work with 3.1 any more and fumbled around until it worked.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=lHGCLvtFMfA:dcUuIzhsiZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=lHGCLvtFMfA:dcUuIzhsiZ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=lHGCLvtFMfA:dcUuIzhsiZ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=lHGCLvtFMfA:dcUuIzhsiZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=lHGCLvtFMfA:dcUuIzhsiZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=lHGCLvtFMfA:dcUuIzhsiZ0:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/lHGCLvtFMfA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/displaying_an_entries_title_in</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/maven_help_plugin_finally_there</id>
        <title type="html">Maven Help Plugin - Finally there is some CLI help!</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/UDYSLU0qdzQ/maven_help_plugin_finally_there" />
        <published>2008-02-27T13:59:32+00:00</published>
        <updated>2008-02-27T14:02:10+00:00</updated> 
        <category term="/General" label="General" />
        <category term="console" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="help" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="maven" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="right" src="http://maven.apache.org/images/maven-logo-2.gif" /&gt;One of the main problems with maven is that it doesn't offer a lot of help. As a first-time user, you have no idea what to type after &amp;quot;mvn &amp;quot; on your command line. Due to the flexible plugin system, there is no such &amp;quot;mvn --help&amp;quot; as one is used to from proper Unix command line applications. Apart from the &lt;a href="http://maven.apache.org/plugins/index.html"&gt;official list of plugins&lt;/a&gt;, there is no list of &lt;i&gt;all&lt;/i&gt; plugins available to you, including your special repositories. And if you don't understand the specifics of the plugin system and how the structure of the &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/"&gt;plugin's websites&lt;/a&gt; are (Goals, Goal details with parameters, Usage with examples), you'll have no idea what parameters are available.&lt;/p&gt;&lt;p&gt;But today I stumbled upon the maven help plugin which can list the goals and parameters for a specific plugin for you. It's quite simple apart from the cryptic way to pass parameters (-Dsomething=). It extracts goals, parameters and their descriptions dynamically, because they are stored in the plugins in a formal way. Use the goal &amp;quot;describe&amp;quot; as in these common examples:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;List all available goals for a certain plugin (eg. eclipse:*):&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier,monospace"&gt;mvn help:describe -Dplugin=eclipse -Dmedium=true&lt;/font&gt;&lt;/p&gt;&lt;p&gt; Now list all parameters for the goal &amp;quot;eclipse&amp;quot; (which is called &amp;quot;mojo&amp;quot; in maven's user-friendly implemenation speak &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;):&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier,monospace"&gt;mvn help:describe -Dplugin=eclipse -Dmojo=eclipse -Dfull=true&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The -Dfull=true (aka display detailed information, including parameters) and -Dmedium=true (aka display a list of goals instead of a useless summary of the overall plugin) are a sign that the maven developers are concentrating on other things than usability. But hey, let's not forget that once you have your maven 2 setup, it's a cool thing that makes the software configuration management a lot more professional. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;On the plugin's website there is &lt;a href="http://maven.apache.org/plugins/maven-help-plugin/describe-mojo.html"&gt;detailed information on help:describe&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UDYSLU0qdzQ:k3_gwWe0VSE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UDYSLU0qdzQ:k3_gwWe0VSE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=UDYSLU0qdzQ:k3_gwWe0VSE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UDYSLU0qdzQ:k3_gwWe0VSE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=UDYSLU0qdzQ:k3_gwWe0VSE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UDYSLU0qdzQ:k3_gwWe0VSE:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/UDYSLU0qdzQ" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/maven_help_plugin_finally_there</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/changes_in_culture_media_advertising</id>
        <title type="html">Social networks: Changes in culture, media, advertising and privacy</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/UxsETxcdSdw/changes_in_culture_media_advertising" />
        <published>2008-02-27T13:28:16+00:00</published>
        <updated>2008-02-28T09:08:51+00:00</updated> 
        <category term="/General" label="General" />
        <category term="culture" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="media" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="network" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="privacy" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="social" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;Over at &lt;a href="http://www.deutsche-startups.de"&gt;deutsche-startups.de&lt;/a&gt; is a very interesting guest &lt;a href="http://www.deutsche-startups.de/2008/02/27/gastbeitrag-von-prof-hendrik-speck-mehr-profildaten-verfuegbar-als-zustasi-zeiten/"&gt;article about the effects of modern social networks&lt;/a&gt; such as Facebook, Xing, LinkedIn, StudiVZ and others, written by &lt;a href="http://www.hendrikspeck.com/"&gt;Prof. Dr. Hendrick Speck&lt;/a&gt;. It's in german, but maybe you'll get something from &lt;a href="http://www.google.com/translate?u=http%3A%2F%2Fwww.deutsche-startups.de%2F2008%2F02%2F27%2Fgastbeitrag-von-prof-hendrik-speck-mehr-profildaten-verfuegbar-als-zustasi-zeiten%2F&amp;amp;langpair=de|en&amp;amp;hl=en&amp;amp;ie=UTF8"&gt;Google's translation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The title provokes by saying that today's social networks contain more personal data than what organizations like the &lt;a href="http://en.wikipedia.org/wiki/Stasi"&gt;Stasi&lt;/a&gt; could collect. But he also summarizes the current changes quite precisely: he says that the younger generations completely change their media consumption (ie. away from TV and newspapers, towards online communities and video sites). This means that they loose the connection to the traditional learning and knowledge distribution channels (ever heard about younger people not reading any more?). But it also means that the traditional advertising business model is becoming obsolete: ads on websites can be easily blocked by tools. This also leads to a degradation of newspapers and publisher's in general. He says that even Google is saying that the social networking stuff is not running well regarding ad revenues.&lt;/p&gt;&lt;p&gt;The lost privacy in social networks is in his opinion not mainly the thinking of a new generation but an explicit motivation of the portal providers that don't warn people about privacy issues appropriately and have a tendency towards everything-public default settings. And because young people are targeted, they aren't fully aware of the privacy problem because they don't have enough life experience (or know about the Stasi for example).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The second part of the article will be published tomorrow.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; &lt;a href="http://www.deutsche-startups.de/2008/02/28/gastbeitrag-von-prof-hendrik-speck-teil-2-die-schwierigkeiten-liegen-beim-nutzer/"&gt;Here is the second part&lt;/a&gt; of the article.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UxsETxcdSdw:1QVcbYHU3K4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UxsETxcdSdw:1QVcbYHU3K4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=UxsETxcdSdw:1QVcbYHU3K4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UxsETxcdSdw:1QVcbYHU3K4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=UxsETxcdSdw:1QVcbYHU3K4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=UxsETxcdSdw:1QVcbYHU3K4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/UxsETxcdSdw" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/changes_in_culture_media_advertising</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/formal_web_application_description</id>
        <title type="html">Formal web application description</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/e5YxkWkxj_I/formal_web_application_description" />
        <published>2008-02-25T12:12:46+00:00</published>
        <updated>2008-02-25T12:12:46+00:00</updated> 
        <category term="/General" label="General" />
        <category term="javascript" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="wadl" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="web" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="webapp" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;img width="200" align="right" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/servicemanual-small.png" /&gt;
&lt;p&gt;Peter Svensson &lt;a href="http://unclescript.blogspot.com/2008/02/future-of-web-applications.html"&gt;asks&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;
&lt;cite&gt;
Think if there was a specification so that a client (in JavaScript,
yes) could discover the capabilities of the framework it connects to
without having to know exactly which framework it is.&lt;br /&gt;&lt;br /&gt;Say that
you have a specific resource in each framework, which when called
return a file (perhaps NOT XML for once? &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/smile.gif" class="smiley" alt=":)" title=":)" /&gt; which describes the
following;&lt;br /&gt;&lt;br /&gt;1. Type of user authentication support + resource (To be able to make generic login widgets)&lt;br /&gt;2. List of named, read-only data sources, organized by type&lt;br /&gt;3. List of named, read-write data sources, organized by type&lt;br /&gt;4. List of named, RPC endpoints, organized by type&lt;br /&gt;&lt;br /&gt;Maybe
this standard exists already, or something like it exists, that can be
reused for this purpose. If so, please comment or mail me, because I've
been searching standards organization and the like the whole weekend.&lt;/cite&gt;&lt;/p&gt;&lt;p&gt;The answer could be &lt;a href="https://wadl.dev.java.net/"&gt;WADL&lt;/a&gt;, the Web Application Description Language. It is somewhat like &lt;a href="http://www.w3.org/TR/wsdl"&gt;WSDL&lt;/a&gt;, but more RESTful, less SOAPy and not so ugly. &lt;a href="http://bitworking.org/projects/pastebin/main.cgi/bin/7"&gt;Here is an example WADL file&lt;/a&gt;. And here is the &lt;a href="https://wadl.dev.java.net/wadl20061109.pdf"&gt;current spec (PDF)&lt;/a&gt;. WADL seems to provide 2, 3 and 4 of Peter's requirements. Authentication is not covered by the format, as far as I can see. And it is XML &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mark Nottingham has &lt;a href="http://www.mnot.net/blog/2008/01/21/wadl_watching"&gt;a good article&lt;/a&gt; about the feasability of WADL. One of his main points is that such description languages should not be used to generate static code. WSDL tools are known for that, you always generate your local client stub which is then fixed. Thus the service connection has to be known at development time, which really kills the principle of dynamic services. The description format just makes the creation of the local client easier for the developer, but otherwise it's not different from good documentation targeted at a human developer, because the client will be tied to that one service in a specific version. But SOA wants to be dynamic! The Web with REST is about general interfaces, so you can connect with everyone without rewriting your browser for each new website. The problem is that WADL tends to go in this direction, because the project at dev.java.net where the spec is hosted also provides tools that generate static Java client stubs. Peter's idea for such a language is obviously dynamic, because he wants to write a generic client that can connect to different web server frameworks.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://bitworking.org/news/193/Do-we-need-WADL"&gt;Others think&lt;/a&gt; that WADL itself is not well done, especially regarding the missing use of mime-types.&lt;/p&gt;&lt;p&gt;To sum it up, WADL is a step in the right direction, but still flawed and does not fulfill the requirements of a dynamic description language. And thus it seems to omit important things like authentication, because you only have to think about that if you really want to automate the whole thing.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=e5YxkWkxj_I:sM0cciau3GQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=e5YxkWkxj_I:sM0cciau3GQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=e5YxkWkxj_I:sM0cciau3GQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=e5YxkWkxj_I:sM0cciau3GQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=e5YxkWkxj_I:sM0cciau3GQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=e5YxkWkxj_I:sM0cciau3GQ:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/e5YxkWkxj_I" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/formal_web_application_description</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/uri_templates_webforms_2_0</id>
        <title type="html">URI Templates, WebForms 2.0 and JSR-311</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/s8BJdFegbqM/uri_templates_webforms_2_0" />
        <published>2008-02-20T15:41:24+00:00</published>
        <updated>2008-02-20T15:41:24+00:00</updated> 
        <category term="/General" label="General" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="rest" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="uri-templates" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="web" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">Today I once again came across the &lt;a href="http://bitworking.org/projects/URI-Templates/"&gt;IETF URI templates draft&lt;/a&gt; and was pointed towards &lt;a href="http://weblogs.java.net/blog/mhadley/archive/2007/02/jsr_311_java_ap.html"&gt;JSR-311&lt;/a&gt; (&lt;a href="http://tech.groups.yahoo.com/group/rest-discuss/message/7858"&gt;&lt;strike&gt;Java API for RESTful Web Services&lt;/strike&gt; JAX-RS&lt;/a&gt;). These two should definitely integrate.&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=s8BJdFegbqM:2M-glxHdKD4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=s8BJdFegbqM:2M-glxHdKD4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=s8BJdFegbqM:2M-glxHdKD4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=s8BJdFegbqM:2M-glxHdKD4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=s8BJdFegbqM:2M-glxHdKD4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=s8BJdFegbqM:2M-glxHdKD4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/s8BJdFegbqM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/uri_templates_webforms_2_0</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/releasing_enterprise_software</id>
        <title type="html">Releasing enterprise software</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/31kwU88cQNo/releasing_enterprise_software" />
        <published>2008-02-15T20:38:04+00:00</published>
        <updated>2008-02-15T20:38:04+00:00</updated> 
        <category term="/General" label="General" />
        <category term="enterprise" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="release" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="software" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">In a &lt;a href="http://www.michaelnygard.com/blog/2008/02/software_failure_takes_down_bl.html"&gt;post reacting to RIM's outage&lt;/a&gt;, Michael Nygard describes how to do software updates on production servers in a better way. I am currently reading his book &lt;a href="http://www.pragprog.com/titles/mnee"&gt;Release It!&lt;/a&gt;, which is a &lt;strike&gt;great&lt;/strike&gt; must read for anyone developing enterprise software.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=31kwU88cQNo:21nZ8ZG4MAs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=31kwU88cQNo:21nZ8ZG4MAs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=31kwU88cQNo:21nZ8ZG4MAs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=31kwU88cQNo:21nZ8ZG4MAs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=31kwU88cQNo:21nZ8ZG4MAs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=31kwU88cQNo:21nZ8ZG4MAs:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/31kwU88cQNo" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/releasing_enterprise_software</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_31</id>
        <title type="html">links for 2008-01-31</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/PNfYPoud0Kw/links_for_2008_01_31" />
        <published>2008-01-31T23:26:52+00:00</published>
        <updated>2008-01-31T23:26:52+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.techcrunch.com/2008/01/31/meebo-turns-chat-rooms-into-a-web-service/"&gt;Meebo Turns Chat Rooms Into A Web Service&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Meebo now allows you to embed chatroom widgets on your website through a new API for Meebo Rooms&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/api"&gt;api&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/chat"&gt;chat&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web2.0"&gt;web2.0&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/collaboration"&gt;collaboration&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=PNfYPoud0Kw:KjraU4mzJEk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=PNfYPoud0Kw:KjraU4mzJEk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=PNfYPoud0Kw:KjraU4mzJEk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=PNfYPoud0Kw:KjraU4mzJEk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=PNfYPoud0Kw:KjraU4mzJEk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=PNfYPoud0Kw:KjraU4mzJEk:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/PNfYPoud0Kw" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_31</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_29</id>
        <title type="html">links for 2008-01-29</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/E3WZ5MNXkXA/links_for_2008_01_29" />
        <published>2008-01-29T23:31:34+00:00</published>
        <updated>2008-01-29T23:31:34+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.infoq.com/articles/mark-baker-hypermedia?order=1"&gt;InfoQ: Hypermedia in RESTful applications&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Describes on aspect of the uniform interface that RESTful applications have: the use of URIs as hypermedia links.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/rest"&gt;rest&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/webservices"&gt;webservices&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/protocol"&gt;protocol&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/http"&gt;http&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/article"&gt;article&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/uri"&gt;uri&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=E3WZ5MNXkXA:nsTgHRuwGRs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=E3WZ5MNXkXA:nsTgHRuwGRs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=E3WZ5MNXkXA:nsTgHRuwGRs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=E3WZ5MNXkXA:nsTgHRuwGRs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=E3WZ5MNXkXA:nsTgHRuwGRs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=E3WZ5MNXkXA:nsTgHRuwGRs:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/E3WZ5MNXkXA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_29</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_28</id>
        <title type="html">links for 2008-01-28</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/BunMGtAB8LE/links_for_2008_01_28" />
        <published>2008-01-28T23:36:07+00:00</published>
        <updated>2008-01-28T23:36:07+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.techcrunch.com/2008/01/28/huddle-uses-new-apps-and-facebook-to-take-on-basecamp/"&gt;Huddle uses new apps and Facebook to take on Basecamp&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Collaboration on Facebook&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/facebook"&gt;facebook&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/collaboration"&gt;collaboration&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web2.0"&gt;web2.0&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/startup"&gt;startup&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/office"&gt;office&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/interesting"&gt;interesting&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://gizmodo.com/349509/lego-brick-timeline-50-years-of-building-frenzy-and-curiosities"&gt;LEGO Brick Timeline: 50 Years of Building Frenzy and Curiosities&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;The LEGO brick celebrates its 50th anniversary! Yeah!&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/lego"&gt;lego&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/toys"&gt;toys&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/birthday"&gt;birthday&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/fun"&gt;fun&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/History"&gt;History&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=BunMGtAB8LE:IkY7JeLHh4w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=BunMGtAB8LE:IkY7JeLHh4w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=BunMGtAB8LE:IkY7JeLHh4w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=BunMGtAB8LE:IkY7JeLHh4w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=BunMGtAB8LE:IkY7JeLHh4w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=BunMGtAB8LE:IkY7JeLHh4w:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/BunMGtAB8LE" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_28</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_26</id>
        <title type="html">links for 2008-01-26</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/_ihB4sQvmHQ/links_for_2008_01_26" />
        <published>2008-01-26T23:30:04+00:00</published>
        <updated>2008-01-26T23:30:04+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.youtube.com/watch?v=Jd3-eiid-Uw&amp;eurl=http://www.google.com/reader/view/"&gt;YouTube - Head Tracking for Desktop VR Displays using the WiiRemote&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Very cool usage of the Wii Remote for 3D-Eye tracking and creating a 3D view on your normal flat-screen TV or monitor.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/cool"&gt;cool&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/remote"&gt;remote&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/video"&gt;video&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/wii"&gt;wii&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/3D"&gt;3D&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/virtual_reality"&gt;virtual_reality&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/tracking"&gt;tracking&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_ihB4sQvmHQ:-CrrGnDt9rE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_ihB4sQvmHQ:-CrrGnDt9rE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=_ihB4sQvmHQ:-CrrGnDt9rE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_ihB4sQvmHQ:-CrrGnDt9rE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=_ihB4sQvmHQ:-CrrGnDt9rE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=_ihB4sQvmHQ:-CrrGnDt9rE:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/_ihB4sQvmHQ" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_26</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/getting_payed_for_a_job</id>
        <title type="html">Getting payed for a job interview?</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/ZZdJDW5grUM/getting_payed_for_a_job" />
        <published>2008-01-23T13:51:12+00:00</published>
        <updated>2008-01-23T13:52:01+00:00</updated> 
        <category term="/General" label="General" />
        <category term="interview" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jobs" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="recruitement" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="startup" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="web2.0" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;A new internet startup, &lt;a href="http://notchup.com/"&gt;NotchUp&lt;/a&gt;, makes companies pay for interviewing you. Suppose you are working in a company at a good position, it's probably hard for other companies to get in touch with you. But if you are paid $500 to $1000, you will think the offer is serious. See the story &lt;a href="http://www.techcrunch.com/2008/01/22/stealth-job-site-notchup-makes-companies-pay-to-interview-you/"&gt;here at TechCrunch&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I wonder if such a model has a chance in Germany, where most people probably can't ever imagine to be called for an interview and to not search for a job. I think this is one of those changes to the society that come with the informational age, where well-educated people are doing the thinking work and the rest is done by machines and highly-technologized processes. This only leads to one answer for me, and I think it's still not solved in Germany: better education for everyone!&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZZdJDW5grUM:VjenB4k_0Ns:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZZdJDW5grUM:VjenB4k_0Ns:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ZZdJDW5grUM:VjenB4k_0Ns:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZZdJDW5grUM:VjenB4k_0Ns:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ZZdJDW5grUM:VjenB4k_0Ns:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZZdJDW5grUM:VjenB4k_0Ns:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/ZZdJDW5grUM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/getting_payed_for_a_job</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/macheist_ending_soon_pixelmator_vectordesigner</id>
        <title type="html">MacHeist ending soon! Pixelmator + VectorDesigner and more for only $49!</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/1NQvQ39PLcc/macheist_ending_soon_pixelmator_vectordesigner" />
        <published>2008-01-23T13:27:36+00:00</published>
        <updated>2008-01-23T13:28:21+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="macheist" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&amp;nbsp;&lt;a href="https://www.macheist.com/buy/invite/91971"&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/macheist-2007.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now that MacHeist is really filled up with nice applications (even more than on the picture above: VectorDesigner, Pixelmator, Snapz Pro X, CSSEdit, TaskPaper, AppZapper, SpeedDownload, Awaken, iStopMotion, Cha-Ching, CoverSutra, 1password and the games Wingnuts 2 and Tiki Magic Mini Golf) there is only 15 hours left to get this great bundle for just $49 at &lt;a href="https://www.macheist.com/buy/invite/91971"&gt;MacHeist.com&lt;/a&gt;! A quite large part of the revenues go to charities (currently close to $400k!).
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1NQvQ39PLcc:G-7JxRfXi1Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1NQvQ39PLcc:G-7JxRfXi1Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=1NQvQ39PLcc:G-7JxRfXi1Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1NQvQ39PLcc:G-7JxRfXi1Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=1NQvQ39PLcc:G-7JxRfXi1Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1NQvQ39PLcc:G-7JxRfXi1Y:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/1NQvQ39PLcc" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/macheist_ending_soon_pixelmator_vectordesigner</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_21</id>
        <title type="html">links for 2008-01-21</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/C1Lulhl2Hf0/links_for_2008_01_21" />
        <published>2008-01-21T23:30:42+00:00</published>
        <updated>2008-01-21T23:30:42+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.assembla.com/wiki/show/aiRtQeWSGr26d-aaeP0Qfc"&gt;Unofficial JDA (Javascript Dataflow Architecture) Wiki| Space Home |Assembla&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;JDA is a library for Javascript that helps building modular browser clients. It includes some strict messaging.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/ajax"&gt;ajax&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/code"&gt;code&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/development"&gt;development&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/javascript"&gt;javascript&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/jda"&gt;jda&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=C1Lulhl2Hf0:IyCj6Xgf7ck:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=C1Lulhl2Hf0:IyCj6Xgf7ck:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=C1Lulhl2Hf0:IyCj6Xgf7ck:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=C1Lulhl2Hf0:IyCj6Xgf7ck:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=C1Lulhl2Hf0:IyCj6Xgf7ck:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=C1Lulhl2Hf0:IyCj6Xgf7ck:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/C1Lulhl2Hf0" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_21</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/deploying_for_the_enterprise_hosting</id>
        <title type="html">Rails fighting Java in the web application space? (or: Software Deployment - Web2.0-style Hosting vs. Enterprise Installation)</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/NpgxvxqVE4A/deploying_for_the_enterprise_hosting" />
        <published>2008-01-20T23:41:58+00:00</published>
        <updated>2008-01-20T23:48:09+00:00</updated> 
        <category term="/JCR" label="JCR" />
        <category term="deployment" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="enterprise" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="hosting" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="installation" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="java" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="osgi" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="rails" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="ruby" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="sling" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="web2.0" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/rails-vs-java+osgi.png" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; is popular for its simple way of &lt;strike&gt;scaffolding&lt;/strike&gt; building web applications, especially for Web 2.0 sites (although &lt;a href="http://www.facebook.com"&gt;one of the top ones&lt;/a&gt; is still written in that kiddie language PHP, despite the fact that it has to offer an interface for &lt;a href="http://developers.facebook.com/"&gt;applications written by others&lt;/a&gt; &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;). Now as &amp;quot;Development-as-a-service&amp;quot; becomes a new internet business segment (see &lt;a href="http://www.joyent.com/"&gt;Joyent&lt;/a&gt;, &lt;a href="http://www.coghead.com/"&gt;Coghead&lt;/a&gt;, &lt;a href="http://aws.amazon.com"&gt;Amazon&lt;/a&gt;, &lt;a href="http://www.force.com"&gt;Salesforce&lt;/a&gt; and others), there is also a service that will host your Rails-based apps called &lt;a href="http://www.engineyard.com/"&gt;Engine Yard&lt;/a&gt;, that just got &lt;a href="http://www.techcrunch.com/2008/01/11/benchmark-bets-on-ruby-on-rails-with-35-million-investment-in-engine-yard/"&gt;decent VC funding&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Is this tendency going to be the real killer for Java in its last area of defense, namely enterprise server applications? Well, I don't think so and I will tell you why.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;
Central application hosting&lt;/i&gt;, as naturally done by larger websites where software developer = business itself (eg. eBay and the whole Web 2.0 crew today), is a lot easier when compared to normal software products that have to be installed. It's because there is only a single deployment to rule them all - you don't have to manage your hundreds of customers all running on different versions of your product and maybe each of them with special bugfixes. Instead there is only one single version of your software out in production and you control the install process yourself - no errors that can be introduced by the customer. He only has to remember the URL of your site (and should not be surprised when he sees a totally different application on Monday morning after you did that great update during the weekend).&lt;/p&gt;&lt;p&gt;But it's a fact that there is still a lot of software that needs to be installed, because the customer wants it in-house. The market for SaaS (software as a service) solutions is growing (eg. &lt;a href="https://www.google.com/a/"&gt;Google Apps for your domain&lt;/a&gt;), but it is hard to get larger customers to run their core business processes outside the company. And as Ruby on Rails maybe great when hosted, it is less good when it has to be installed. Scripting languages generally lack support when it comes to&amp;nbsp; deployment solutions that include &lt;i&gt;automated build systems, packaging, concise versioning of those packages and dependency management&lt;/i&gt;. With scripts you easily hack them to add just another small feature here and there or quickly fix a bug, but in the end it you have no control over your different product versions.&lt;br /&gt;&lt;br /&gt;Java has some track-record in this space since it already has some history in the enterprise. The first step towards a controlled &lt;i&gt;software product lifecycle management&lt;/i&gt; (this is
what you want when you have those hundred customers on different
versions of your product crying for the latest bugfix) was introduced by Sun itself when it allowed class files to be stored and loaded from JAR archives. It standardized the way to deploy an entire library or application. The second (and small) step was the &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; build system by somewhat standardizing Java build systems. But each ant script was different and it only simplified the process of creating a jar (or war or ear). Then came &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt;, which introduced a common packaging system and versioning of those packages. It even provides central repositories for open source libraries.&lt;br /&gt;&lt;br /&gt;But even maven is not perfect. Apart from the typical problems people have with maven (like never-leave-the-recommended-default-convention-or-you-will-cry-in-tears) it only solves the packaging problem on the developer's side, but not on the installer's side, ie. on the actual running software. This is the classical DLL-hell problem under Windows: there is no control over what code gets actually used if you have two different versions of the same library in the various lib locations. The only indicators are weird exceptions. And how do I provide an easy upgrade path when I want to install a simple bugfix? Reinstallation? On a production system where you have to start a second system for maintaining service during the downtime first? Nope, that could be better.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And this is where &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; comes into play - in hopefully the final step, number 4. It adds just a bit of meta-information to your maven packages to create so-called bundles and (here comes the trick) provides a full runtime framework that introduces its own super-duper classloading. This offers full control over what versions of bundles are currently running on your system, it allows for deployment of new bundles and new versions during runtime with zero-downtime. It can magically give new objects the classes of the updated bundle, and older objects will keep the old ones until they are no longer needed. This works great in a request-based environment, aka in all servlet containers. If you wonder why Eclipse, one of the first larger projects to implement OSGi, does not use that feature to install plugins at runtime, without restarting the big beast, you are with me - they must have done something wrong when adopting the basic OSGi principles.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OSGi could also make the old dream of &lt;i&gt;component programming&lt;/i&gt; come true: it has a standardized interface for making bundles provide and consume services to and from other bundles. Which also is needed as OSGi has a strict dependency management: you have to export the Java packages others can use - and these packages can be versioned. All this makes it possible that the framework can tell you whether the installation of a new bundle will satisfy all requirements or not - &lt;i&gt;before&lt;/i&gt; it is loaded and code is run. A management console shows you all your bundles, including their versions, their exported and imported packages, their components and so on - in the actual running application, not only in a descriptive POM file that states how it should be.&lt;/p&gt;&lt;p&gt;And if you now think that OSGi has to be a heavy framework that makes everything slower, I can tell you that the opposite is the case: one of the target areas of the specification are embedded software platforms, so OSGi is super-lightweight and has a very, very fast startup time.&lt;br /&gt; &lt;/p&gt;&lt;p&gt;It's great that &lt;a href="http://incubator.apache.org/sling/site/index.html"&gt;Apache Sling&lt;/a&gt; uses &lt;a href="http://felix.apache.org/site/index.html"&gt;Apache Felix&lt;/a&gt; as OSGi framework, which in conjunction with &lt;a href="http://jackrabbit.apache.org/"&gt;JCR&lt;/a&gt; as the driver for a RESTful web application framework, also makes it a highly enterprise-ready piece of software.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NpgxvxqVE4A:wKxjIwbMCn4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NpgxvxqVE4A:wKxjIwbMCn4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=NpgxvxqVE4A:wKxjIwbMCn4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NpgxvxqVE4A:wKxjIwbMCn4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=NpgxvxqVE4A:wKxjIwbMCn4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NpgxvxqVE4A:wKxjIwbMCn4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/NpgxvxqVE4A" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/deploying_for_the_enterprise_hosting</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_20</id>
        <title type="html">links for 2008-01-20</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/znKIJqfafw0/links_for_2008_01_20" />
        <published>2008-01-20T23:27:34+00:00</published>
        <updated>2008-01-20T23:27:34+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://gigaom.com/2008/01/20/social-networks-from-the-80s-to-the-00s/"&gt;Social Networks, from the 80s to the 00s - GigaOM&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Nice roundup of social networks in the internet from the 80s until today.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/network"&gt;network&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web2.0"&gt;web2.0&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/trends"&gt;trends&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/social"&gt;social&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/History"&gt;History&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/socialnetworking"&gt;socialnetworking&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/Internet"&gt;Internet&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=znKIJqfafw0:wxCVqj-Nz7M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=znKIJqfafw0:wxCVqj-Nz7M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=znKIJqfafw0:wxCVqj-Nz7M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=znKIJqfafw0:wxCVqj-Nz7M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=znKIJqfafw0:wxCVqj-Nz7M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=znKIJqfafw0:wxCVqj-Nz7M:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/znKIJqfafw0" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_20</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/leopard_spaces_vs_two_monitor</id>
        <title type="html">Leopard Spaces vs. two-monitor setup</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/q19jLDiCows/leopard_spaces_vs_two_monitor" />
        <published>2008-01-16T23:38:14+00:00</published>
        <updated>2008-01-16T23:39:54+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="monitor" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="spaces" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/spaces-vs-monitors.png" /&gt;&lt;/p&gt;&lt;p&gt;I am a great fan of &lt;a href="http://www.apple.com/macosx/features/spaces.html"&gt;Spaces&lt;/a&gt;, the new virtual desktop system in Mac OS X, introduced with Leopard. It allows me to have more screen real estate on my MacBook Pro when I don't have the possibility to connect to a second monitor.&lt;/p&gt;&lt;p&gt;Now in my office or at home I do have a second monitor and Spaces works intuitively there as well: each space contains both monitors then, as you can see above in the right part of the image. Having a separate space management for each monitor would be too complicated, so this is just right.&lt;/p&gt;&lt;p&gt;But here is my problem: when I connect or disconnect the second monitor, ie. I am switching between single and multi-monitor setup, I have to reconfigure spaces each time. Because my application placement with a single monitor (eg. one for my Eclipse IDE, one for the browser(s), one for mail/calendering, one for iChat and Skype) is different from two monitors, where I want to take advantage of looking at my IDE and the browser at the same time. With a single monitor I use 6 spaces, whereas with 2 monitors 4 are more than enough. But I hate to reposition my 10+ applications two times a day.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A solution could be the concept of spaces profiles: each monitor setup could have its own profile, ie. the number of spaces columns and rows as well as the application-on-a-certain-space settings. Mac OS X already recognizes the different monitors you connect to it and remembers the exact arrangement. So what about profiles, Apple?&lt;br /&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=q19jLDiCows:IAA8QUbAGL8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=q19jLDiCows:IAA8QUbAGL8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=q19jLDiCows:IAA8QUbAGL8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=q19jLDiCows:IAA8QUbAGL8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=q19jLDiCows:IAA8QUbAGL8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=q19jLDiCows:IAA8QUbAGL8:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/q19jLDiCows" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/leopard_spaces_vs_two_monitor</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/media_center_at_home_appletv</id>
        <title type="html">Media center at home: AppleTV vs. MacMini</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/DZlKfM_Cyr4/media_center_at_home_appletv" />
        <published>2008-01-16T13:32:18+00:00</published>
        <updated>2008-01-16T23:40:35+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="appletv" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="hd" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="itunes" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="macmini" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="tv" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/appletv-hd-rentals.png" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I am thinking about setting up a state-of-the-art media center at my home. It should have a full HD flat screen TV monitor, receive classic and HDTV TV streams, ability to record from TV in full quality with time-shifting, play DVDs, display photos and maybe browse the web. And the latest trend is to have online movie rentals - no longer going to the next DVD rental store and paying lots of money for bringing it back two days later. That's a lot of requirements &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;&lt;/p&gt;&lt;p&gt; No, actually it's easy to do that on your PC or Mac today, but getting that in your living room is kind of difficult, because you need an easy-to-use software in front of the TV (it always has to be quick and you don't wanna hassle with keyboard and mouse a lot) and a small, quiet system. Now there are quite a few answers: &lt;a href="http://de.lge.com/products/model/detail/lcdtv_42lf75.jhtml"&gt;nice LCD TVs&lt;/a&gt;, &lt;a href="http://elgato.com/elgato/int/mainmenu/products/software/EyeTV/EyeTV3.en.html"&gt;EyeTV&lt;/a&gt;, &lt;a href="http://elgato.com/elgato/int/mainmenu/products/tuner.en.html"&gt;Elgato's USB TV Tuners&lt;/a&gt;, &lt;a href="http://www.apple.com/appletv/"&gt;AppleTV&lt;/a&gt; or &lt;a href="http://www.apple.com/macmini/"&gt;MacMini&lt;/a&gt; and &lt;a href="http://www.apple.com/appletv/rentals.html"&gt;iTunes Movie Rentals (also in HD)&lt;/a&gt; (hopefully soon in Germany).&lt;/p&gt;&lt;p&gt;The problem now is that &lt;a href="http://www.engadget.com/2008/01/15/more-details-on-apples-itunes-movie-hd-rentals/"&gt;HD movie rentals only work on the new AppleTV&lt;/a&gt;, but not on normal iTunes, hence the MacMini is out of scope for that. But it offers the &lt;a href="http://www.123macmini.com/forums/viewforum.php?f=64"&gt;best flexibility for a media center&lt;/a&gt; and allows to run EyeTV. Well, maybe by the time iTunes movie rentals are available in Germany, it's possible to get HD on the MacMini.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=DZlKfM_Cyr4:z-OcBUUh_Qs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=DZlKfM_Cyr4:z-OcBUUh_Qs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=DZlKfM_Cyr4:z-OcBUUh_Qs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=DZlKfM_Cyr4:z-OcBUUh_Qs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=DZlKfM_Cyr4:z-OcBUUh_Qs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=DZlKfM_Cyr4:z-OcBUUh_Qs:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/DZlKfM_Cyr4" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/media_center_at_home_appletv</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/apache_jackrabbit_1_4_out</id>
        <title type="html">Apache Jackrabbit 1.4 out now</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/1sXkWi2StLo/apache_jackrabbit_1_4_out" />
        <published>2008-01-16T12:35:39+00:00</published>
        <updated>2008-01-16T12:35:39+00:00</updated> 
        <category term="/JCR" label="JCR" />
        <category term="apache" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jackrabbit" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jcr" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href="http://jackrabbit.apache.org"&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://jackrabbit.apache.org/images/logos/jackrabbitlogo.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://jackrabbit.apache.org/downloads.cgi#Apache%20Jackrabbit%201.4"&gt;Apache Jackrabbit 1.4&lt;/a&gt; has been released! Congrats to the &lt;a href="http://jackrabbit.apache.org/team-list.html"&gt;team&lt;/a&gt;! Jackrabbit is a fully Java Content Repository (JCR) compliant implementation, something that could replace your database (at least inside the application code) by a cool hierarchical storage with lots of &lt;a href="http://javasymposium.techtarget.com/resources/Presentations/Vegas%2006/D%20Nuescheler%20Content%20app.zip"&gt;features that a relational database doesn't have&lt;/a&gt; (note: pdf in a zip). And it's open source!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The most notable new features to me are the &lt;a href="http://jackrabbit.apache.org/doc/components/ocm.html"&gt;OCM (Java Object-to-JCR mapping)&lt;/a&gt;, the &lt;a href="http://jackrabbit.apache.org/doc/components/spi.html"&gt;SPI interface&lt;/a&gt; (a layer below the JCR API for simpler implementation of your own backend or for remoting purposes) and the new &lt;a href="http://wiki.apache.org/jackrabbit/DataStore"&gt;DataStore&lt;/a&gt; facility for improving storage of that big binary data.&lt;/p&gt;&lt;p&gt;More information can be found on &lt;a href="http://jukkaz.wordpress.com/2008/01/16/apache-jackrabbit-14-is-available/"&gt;Jukka's post&lt;/a&gt; (he is the release manager) and in the &lt;a href="http://mirror.switch.ch/mirror/apache/dist/jackrabbit/RELEASE-NOTES-1.4.txt"&gt;release notes&lt;/a&gt;.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1sXkWi2StLo:Jbe0Qhc54bc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1sXkWi2StLo:Jbe0Qhc54bc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=1sXkWi2StLo:Jbe0Qhc54bc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1sXkWi2StLo:Jbe0Qhc54bc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=1sXkWi2StLo:Jbe0Qhc54bc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=1sXkWi2StLo:Jbe0Qhc54bc:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/1sXkWi2StLo" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/apache_jackrabbit_1_4_out</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/apple_keynote_macbook_air_itunes</id>
        <title type="html">Apple Keynote: MacBook Air, iTunes Movie Rentals, iPhone 1.1.3</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/ecHeXVyaA6E/apple_keynote_macbook_air_itunes" />
        <published>2008-01-15T19:12:29+00:00</published>
        <updated>2008-01-16T23:40:54+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="iphone" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="macworld" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/macbook_air.jpg" /&gt;&lt;/p&gt;&lt;p&gt;The keynote is over and the most notably announcement is the &lt;a href="http://www.apple.com/macbookair/"&gt;MacBook Air&lt;/a&gt;, &amp;quot;the worlds thinnest notebook&amp;quot;. It has the option to include a 64 GB Solid-State Disk, but then it costs at least 2700 Euro ($2800), whereas the minimum config is at 1699 Euro ($1799).&lt;/p&gt;&lt;p&gt;Apart from that, there will be iTunes Movie Rentals in HD ($4.99 for HD, $3.99 for new titles and $2.99 for older ones). And an iPhone 1.1.3 firmware that mainly contains the features already leaked a few days ago. The software update already has the iTunes 7.6 update, I just grabbed it.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ecHeXVyaA6E:fa0pGXwGhEQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ecHeXVyaA6E:fa0pGXwGhEQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ecHeXVyaA6E:fa0pGXwGhEQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ecHeXVyaA6E:fa0pGXwGhEQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ecHeXVyaA6E:fa0pGXwGhEQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ecHeXVyaA6E:fa0pGXwGhEQ:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/ecHeXVyaA6E" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/apple_keynote_macbook_air_itunes</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_11</id>
        <title type="html">links for 2008-01-11</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/fWQEooLvZi8/links_for_2008_01_11" />
        <published>2008-01-11T23:31:24+00:00</published>
        <updated>2008-01-11T23:31:24+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://dev.day.com/planetday/"&gt;PlanetDay&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;A blog aggregating the weblogs written by employees of Day software.&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/blog"&gt;blog&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/jcr"&gt;jcr&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/day"&gt;day&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/planet"&gt;planet&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=fWQEooLvZi8:B0evSpiBhHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=fWQEooLvZi8:B0evSpiBhHI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=fWQEooLvZi8:B0evSpiBhHI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=fWQEooLvZi8:B0evSpiBhHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=fWQEooLvZi8:B0evSpiBhHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=fWQEooLvZi8:B0evSpiBhHI:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/fWQEooLvZi8" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_11</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/mindquarry_activity_timeline</id>
        <title type="html">Mindquarry activity timeline</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/NQC-m5fbO0U/mindquarry_activity_timeline" />
        <published>2008-01-11T11:07:28+00:00</published>
        <updated>2008-01-11T11:09:18+00:00</updated> 
        <category term="/General" label="General" />
        <category term="marketing" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mindquarry" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="opensource" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/resource/marketing-mq-timeline.png"&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/marketing-mq-timeline-small.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;As I noted &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_04"&gt;previously&lt;/a&gt;, &lt;a href="http://sandro.groganz.com/"&gt;Sandro Groganz&lt;/a&gt; is now offering &lt;a href="http://sandro.groganz.com/weblog/2008/01/02/starting-open-source-marketing-consultancy/"&gt;OpenSource marketing consulting&lt;/a&gt;, a very rare but desperately needed qualification - at least for all the OpenSource companies out there.&lt;/p&gt;&lt;p&gt;This reminded me of his excellent work at &lt;a href="http://www.mindquarry.com/"&gt;Mindquarry&lt;/a&gt;, part of which is illustrated above: it's the Mindquarry files timeline for our marketing team back then. You can clearly see when we started to use the system internally (July 2007) and when the work &lt;a href="http://www.mindquarry.com/community/newsletter/archive/issue-9-mindquarrys-commercial-offerings-end"&gt;had come to an end&lt;/a&gt;.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NQC-m5fbO0U:7AsPI99sEc0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NQC-m5fbO0U:7AsPI99sEc0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=NQC-m5fbO0U:7AsPI99sEc0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NQC-m5fbO0U:7AsPI99sEc0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=NQC-m5fbO0U:7AsPI99sEc0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=NQC-m5fbO0U:7AsPI99sEc0:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/NQC-m5fbO0U" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/mindquarry_activity_timeline</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/macheist_bundle_get_11_mac</id>
        <title type="html">MacHeist bundle: Get 11 mac apps for $49</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/c87v4en3c3k/macheist_bundle_get_11_mac" />
        <published>2008-01-11T10:58:17+00:00</published>
        <updated>2008-01-21T14:34:33+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href="https://www.macheist.com/buy/invite/91971"&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/macheist-2007.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I want Pixelmator, so if you are a Mac user, &lt;a href="https://www.macheist.com/buy/invite/91971"&gt;buy the MacHeist too&lt;/a&gt; to have all bundles activated! The deadline is January 23rd and a part of the revenues are donated to charities!&lt;br /&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=c87v4en3c3k:GUuyqXZQ8mY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=c87v4en3c3k:GUuyqXZQ8mY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=c87v4en3c3k:GUuyqXZQ8mY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=c87v4en3c3k:GUuyqXZQ8mY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=c87v4en3c3k:GUuyqXZQ8mY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=c87v4en3c3k:GUuyqXZQ8mY:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/c87v4en3c3k" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/macheist_bundle_get_11_mac</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/mindquarry_desktop_client_now_with</id>
        <title type="html">Mindquarry Desktop Client now with support for exisiting SVN repositories</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/IgFbwco3Tf4/mindquarry_desktop_client_now_with" />
        <published>2008-01-11T09:38:08+00:00</published>
        <updated>2008-01-11T09:38:08+00:00</updated> 
        <category term="/General" label="General" />
        <category term="client" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mindquarry" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="svn" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="synchronize" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="5" hspace="5" border="0" align="right" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/Mindquarry-DesktopClientAppIcon.png" /&gt;Over the holidays I improved the &lt;a href="http://www.mindquarry.com/docs/user/files.html"&gt;Mindquarry desktop client&lt;/a&gt; to be able to synchronize not only with &lt;a href="http://www.mindquarry.com/"&gt;Mindquarry&lt;/a&gt; servers, but also with existing plain &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; repositories. I created a new &lt;a href="http://releases.mindquarry.org/mindquarry-desktop-client-1.2-beta-PlainSVN-macosx.dmg"&gt;application bundle for Mac OS X (based on 1.2-beta)&lt;/a&gt;, for other systems it has to be built from svn.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The code is in the &lt;a href="http://www.mindquarry.org/repos/mindquarry-desktop-tools/trunk/"&gt;trunk&lt;/a&gt; and more details can be found in &lt;a href="http://test.openthesaurus.de/browse/MDT-104"&gt;Jira&lt;/a&gt;. The next steps will be to fix the outstanding &lt;a href="http://test.openthesaurus.de/secure/IssueNavigator.jspa?reset=true&amp;amp;&amp;amp;pid=10001&amp;amp;resolution=-1&amp;amp;fixfor=10009&amp;amp;priority=1&amp;amp;sorter/field=priority&amp;amp;sorter/order=DESC"&gt;synchronization bugs&lt;/a&gt; which relate to manual deletion of folders.&lt;/p&gt;&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/mindquarry-client-plain-svn.png" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=IgFbwco3Tf4:B647_PO8_xk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=IgFbwco3Tf4:B647_PO8_xk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=IgFbwco3Tf4:B647_PO8_xk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=IgFbwco3Tf4:B647_PO8_xk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=IgFbwco3Tf4:B647_PO8_xk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=IgFbwco3Tf4:B647_PO8_xk:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/IgFbwco3Tf4" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/mindquarry_desktop_client_now_with</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_09</id>
        <title type="html">links for 2008-01-09</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/8-TR2-fP-og/links_for_2008_01_09" />
        <published>2008-01-09T23:33:45+00:00</published>
        <updated>2008-01-09T23:33:45+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://snarfed.org/space/amazon+simpledb+thoughts"&gt;Amazon SimpleDB thoughts - snarfed.org&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/amazon"&gt;amazon&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/simpledb"&gt;simpledb&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/database"&gt;database&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/webservices"&gt;webservices&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web2.0"&gt;web2.0&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.jcr-explorer.org/index.html"&gt;JCR Web-Explorer - JCR-Explorer&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/jcr"&gt;jcr&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/browser"&gt;browser&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/tool"&gt;tool&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/explorer"&gt;explorer&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/opensource"&gt;opensource&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.deutsche-startups.de/2008/01/08/kurzmitteilungen-ecato-adition-mindquarry-utopia-qiro-djtunes-sevengamescom-plaxo/"&gt;Kurzmitteilungen: Ecato, Adition, Mindquarry, Utopia, Qiro, DJTunes, SevenGames.com, Plaxo :: deutsche-startups.de&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/mindquarry"&gt;mindquarry&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/german"&gt;german&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/entrepreneurship"&gt;entrepreneurship&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/news"&gt;news&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/hpv"&gt;hpv&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-TR2-fP-og:-JUkNVeYGPY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-TR2-fP-og:-JUkNVeYGPY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8-TR2-fP-og:-JUkNVeYGPY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-TR2-fP-og:-JUkNVeYGPY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8-TR2-fP-og:-JUkNVeYGPY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-TR2-fP-og:-JUkNVeYGPY:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/8-TR2-fP-og" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_09</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/importing_multiple_same_named_maven</id>
        <title type="html">Importing multiple same-named maven projects into one Eclipse workspace</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/POqtXfa8ZVE/importing_multiple_same_named_maven" />
        <published>2008-01-08T11:07:14+00:00</published>
        <updated>2008-01-08T11:07:14+00:00</updated> 
        <category term="/General" label="General" />
        <category term="eclipse" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="maven" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="right" src="http://maven.apache.org/images/maven-logo-2.gif" /&gt;When using &lt;a href="http://maven.apache.org/"&gt;Maven 2&lt;/a&gt; for building Java projects and &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; for writing the code, a standard tool is the &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/"&gt;maven eclipse plugin&lt;/a&gt; (Note: not the &lt;a href="http://m2eclipse.codehaus.org/"&gt;eclipse maven plugin&lt;/a&gt; &lt;img src="http://weblogs.goshaky.com/weblogs/images/smileys/wink.gif" class="smiley" alt=";-)" title=";-)" /&gt;, which is a plugin for Eclipse, although it can be useful too). It creates Eclipse projects from your Maven modules, which can then be imported into Eclipse as existing projects:&lt;/p&gt;&lt;pre&gt;mvn eclipse:eclipse&lt;/pre&gt;&lt;p&gt;(BTW: it's often useful to add &lt;font size="2" face="courier new,courier,monospace"&gt;-DdownloadSources=true&lt;/font&gt; which will download and set source and API attachements for the referenced libraries in Eclipse).&lt;/p&gt;&lt;p&gt;Now I often develop on both trunk and branch of a project at the same time, eg. for a merge. For this it is practical to have both code bases inside Eclipse, grouped by working sets, eg. &amp;quot;mylib trunk&amp;quot; and &amp;quot;mylib branch 1.3&amp;quot;. Now the problem is that Eclipse does not allow you to import two projects with the same name into a single workspace, but exactly this happens when you run &lt;font size="2" face="courier new,courier,monospace"&gt;mvn eclipse:eclipse&lt;/font&gt; in both the trunk and branch of your project. Until now I had no solution to this, but today I came across this property for the maven eclipse plugin: &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html#projectNameTemplate"&gt;projectNameTemplate&lt;/a&gt;. It allows you to change the Eclipse project name that is generated, which is by default only the artifactId, that is normally the same across different branches. Now I ran this for my 1.3 branch:&lt;/p&gt;&lt;pre&gt;mvn -Declipse.projectNameTemplate=[artifactId]-1.3 eclipse:eclipse&lt;/pre&gt;&lt;p&gt;This creates projects named like &amp;quot;mylib-1.3&amp;quot; and no longer collides with the &amp;quot;mylib&amp;quot; project from the trunk. Besides &lt;font size="2" face="courier new,courier,monospace"&gt;[artifactId]&lt;/font&gt;, you can also use &lt;font size="2" face="courier new,courier,monospace"&gt;[groupId]&lt;/font&gt; and &lt;font size="2" face="courier new,courier,monospace"&gt;[version]&lt;/font&gt; as placeholders.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=POqtXfa8ZVE:SzMoyW7nu6M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=POqtXfa8ZVE:SzMoyW7nu6M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=POqtXfa8ZVE:SzMoyW7nu6M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=POqtXfa8ZVE:SzMoyW7nu6M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=POqtXfa8ZVE:SzMoyW7nu6M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=POqtXfa8ZVE:SzMoyW7nu6M:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/POqtXfa8ZVE" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/importing_multiple_same_named_maven</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/using_jackrabbit_spi_to_implement</id>
        <title type="html">Using Jackrabbit SPI to implement a JCR with an Amazon SimpleDB/S3 backend?</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/8-Q1RpE4Arc/using_jackrabbit_spi_to_implement" />
        <published>2008-01-08T09:34:57+00:00</published>
        <updated>2008-01-08T11:41:04+00:00</updated> 
        <category term="/JCR" label="JCR" />
        <category term="amazon" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jackrabbit" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jcr" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="s3" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="simpledb" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="spi" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href="http://jackrabbit.apache.org/doc/components/spi.html"&gt;&lt;img width="400" vspace="0" hspace="0" border="0" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/jackrabbit-spi-overview.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;
As I am currently digging into &lt;a href="http://jackrabbit.apache.org/"&gt;Jackrabbit&lt;/a&gt;'s internal architecture (and trying to create some diagrams explaining it) and talking with people about it, I came across the new &lt;a href="http://jackrabbit.apache.org/doc/components/spi.html"&gt;Jackrabbit/JCR SPI implementation&lt;/a&gt; again. It is supposed to make implementing a JCR easier, as it lies in between the complex &lt;a href="http://www.day.com/maven/jsr170/javadocs/jcr-1.0/"&gt;JCR API &lt;/a&gt;and the relatively simple (with no room for optimizations) Jackrabbit &lt;a href="http://wiki.apache.org/jackrabbit/PersistenceManagerFAQ"&gt;Persistence Manager interface&lt;/a&gt;. This is probably the best way to implement a &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/amazon_simpledb_vs_jcr"&gt;JCR backed by Amazon SimpleDB or Amazon S3&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Understanding-more-update:&lt;/b&gt; The &lt;a href="http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/"&gt;Jackrabbit SPI interface&lt;/a&gt; cuts Jackrabbit's (or any JCR implementation's) implementation at the border of the transient and the persistent part (also see &lt;a href="http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/package.html?view=markup"&gt;this description&lt;/a&gt; in the Javadocs and the image below). The transient part is everything that is stored in memory inside a JCR session before a save() is made - after that it has to be handled to the persistent part that needs to store the nodes and properties persistently, eg. in a database. This way the persistent part is the same for a single workspace and all it's attached sessions.&lt;/p&gt;&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/jackrabbit-spi.jpg" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-Q1RpE4Arc:YDrn5u7oHWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-Q1RpE4Arc:YDrn5u7oHWg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8-Q1RpE4Arc:YDrn5u7oHWg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-Q1RpE4Arc:YDrn5u7oHWg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=8-Q1RpE4Arc:YDrn5u7oHWg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=8-Q1RpE4Arc:YDrn5u7oHWg:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/8-Q1RpE4Arc" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/using_jackrabbit_spi_to_implement</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_041</id>
        <title type="html">links for 2008-01-04</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/l5VMqvTCF0A/links_for_2008_01_041" />
        <published>2008-01-04T23:31:57+00:00</published>
        <updated>2008-01-04T23:31:57+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="https://jna.dev.java.net/"&gt;jna: Java Native Access (JNA): Pure Java access to native libraries&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Much more useful than JNI&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/java"&gt;java&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/jni"&gt;jni&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/library"&gt;library&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/native"&gt;native&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/development"&gt;development&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://javasymposium.techtarget.com/resources/presentations.html"&gt;TheServerSide.com Java Symposium - The Premier Java Conference for Developers and Architects&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Interesting presentations around Java&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/java"&gt;java&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/development"&gt;development&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/slides"&gt;slides&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/presentation"&gt;presentation&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/conference"&gt;conference&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=l5VMqvTCF0A:Mbfaw4W6OI4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=l5VMqvTCF0A:Mbfaw4W6OI4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=l5VMqvTCF0A:Mbfaw4W6OI4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=l5VMqvTCF0A:Mbfaw4W6OI4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=l5VMqvTCF0A:Mbfaw4W6OI4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=l5VMqvTCF0A:Mbfaw4W6OI4:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/l5VMqvTCF0A" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_041</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/write_once_run_everywhere_2</id>
        <title type="html">Write once, run everywhere 2.0</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/pYqMmj-37Wg/write_once_run_everywhere_2" />
        <published>2008-01-04T18:41:10+00:00</published>
        <updated>2008-01-04T18:41:10+00:00</updated> 
        <category term="/JCR" label="JCR" />
        <content type="html">&lt;p&gt;&lt;a href="http://intertwingly.net/blog/2008/01/04/WORA"&gt;Sam Ruby&lt;/a&gt;:&lt;i&gt; As the decade comes to a close, it is interesting to see the promise of
“Write Once, Run Anywhere” move from “write in Java, run anywhere there
is a JVM” to “write in Python or Ruby, run anywhere there is C, a JVM,
or .Net”.&amp;nbsp; While the latter VMs provide additional runtime libraries,
the pressure to run high profile frameworks like Django and Rails
ensure that there is a rather large set of common libraries implemented
compatibly across the various implementations.&lt;/i&gt;
&lt;/p&gt;&lt;p&gt;&lt;img vspace="0" hspace="0" border="0" align="right" src="http://incubator.apache.org/sling/site/media.data/logo.png" /&gt;Good point, another reason why scripting languages got quite popular in the last few years. That's why &lt;a href="http://incubator.apache.org/sling/site/index.html"&gt;Sling&lt;/a&gt;, the flexible RESTful web application framework, written in Java, using OSGi and based on JCR as data and script storage supports all scripting languages available through the &lt;a href="https://scripting.dev.java.net/"&gt;Java Scripting Framework&lt;/a&gt; (and that includes Javascript, Ruby, Python, etc.).&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pYqMmj-37Wg:kUc1r1FAPoc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pYqMmj-37Wg:kUc1r1FAPoc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=pYqMmj-37Wg:kUc1r1FAPoc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pYqMmj-37Wg:kUc1r1FAPoc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=pYqMmj-37Wg:kUc1r1FAPoc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pYqMmj-37Wg:kUc1r1FAPoc:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/pYqMmj-37Wg" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/write_once_run_everywhere_2</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_04</id>
        <title type="html">links for 2008-01-04 (manually)</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/B5c5pwle9sM/links_for_2008_01_04" />
        <published>2008-01-04T18:32:38+00:00</published>
        <updated>2008-01-04T18:32:38+00:00</updated> 
        <category term="/General" label="General" />
        <category term="delicious" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;Unfortunately my &lt;a href="http://weblogs.goshaky.com/weblogs/lars/entry/posting_from_del_icio_us"&gt;automatic delicious link posting&lt;/a&gt; only works sometimes. So here are my links from yesterday, when it failed again with a weird message (&lt;i&gt;metaWeblog.newPost fault was: java.lang.Exception: java.lang.ClassCastException&lt;/i&gt;):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sandro.groganz.com/weblog/2008/01/02/starting-open-source-marketing-consultancy/"&gt;Starting Open Source Marketing Consultancy (by Sandro Groganz)&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;My former colleague at Mindquarry, who did an excellent job as VP of
marketing, is now available for anyone needing help in open source
marketing.&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" href="http://www.techcrunch.com/2008/01/01/zed-shaw-puts-the-smack-down-on-the-rails-community/"&gt;Zed Shaw Puts The Smack Down On The Rails Community&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quote: &amp;quot;With Rails I get scrawny cock suckers with carpal tunnel syndrome talking to me like they’re gonna eat my young. Their feeble PHP infected minds can’t grasp advanced shit like objects or closures. When you combine stupid businesses with stupid...&amp;quot;&lt;!--&lt;--&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" href="http://cultofmac.com/?p=1591"&gt;Cult of Mac » Blog Archive » 2007: The Return of Golden Convergence&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nice high-level description on Apple's current strategy and
business-model with the iPhone as the ultra-flexible hardware platform
that can be turned into everything just by software.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=B5c5pwle9sM:BDPxoU9B6ow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=B5c5pwle9sM:BDPxoU9B6ow:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=B5c5pwle9sM:BDPxoU9B6ow:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=B5c5pwle9sM:BDPxoU9B6ow:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=B5c5pwle9sM:BDPxoU9B6ow:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=B5c5pwle9sM:BDPxoU9B6ow:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/B5c5pwle9sM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_04</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/macworld_keynote_soon</id>
        <title type="html">Macworld Expo 2008 Keynote coming soon!</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/qEILxoFyFVc/macworld_keynote_soon" />
        <published>2008-01-04T18:22:07+00:00</published>
        <updated>2008-01-16T23:41:29+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="keynote" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="macworld" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;For everyone anxiously waiting for Steve's &lt;a href="http://www.macworldexpo.com/conference_program/keynote"&gt;upcoming keynote&lt;/a&gt;, just go and &lt;a href="http://bureauofcommunication.com/contest/"&gt;make some predictions&lt;/a&gt;. Here are mine:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img vspace="0" hspace="0" border="0" align="bottom" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/macworld2008-predictions.png" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qEILxoFyFVc:OM5OYHZwc00:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qEILxoFyFVc:OM5OYHZwc00:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=qEILxoFyFVc:OM5OYHZwc00:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qEILxoFyFVc:OM5OYHZwc00:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=qEILxoFyFVc:OM5OYHZwc00:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=qEILxoFyFVc:OM5OYHZwc00:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/qEILxoFyFVc" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/macworld_keynote_soon</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/insights_about_the_macosx_kernel</id>
        <title type="html">Insights about the MacOSX Kernel</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/pVolpaKf9qw/insights_about_the_macosx_kernel" />
        <published>2008-01-04T18:10:10+00:00</published>
        <updated>2008-01-16T23:41:44+00:00</updated> 
        <category term="/Apple" label="Apple" />
        <category term="apple" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="kernel" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="mac" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;img vspace="0" hspace="0" border="0" align="right" src="http://weblogs.goshaky.com/weblogs/alexkli/resource/history-macosx-next.png" /&gt;
On the &lt;a href="http://events.ccc.de/congress/2007/Main_Page"&gt;24th Chaos Communication Congress&lt;/a&gt; there was an &lt;a href="http://events.ccc.de/congress/2007/Fahrplan/events/2303.en.html"&gt;insightful presentation&lt;/a&gt; for everyone interested in MacOSX's internals. I suggest to read through the corresponding paper, which is better than just the slides with no audio channel: &lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/resource/986_inside_the_mac_osx_kernel.pdf"&gt;Inside the MacOSX Kernel (pdf, mirrored)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Some interesting things:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;the kernel is called XNU (XNU is not Unix)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;although it's based on Mach (classical microkernel), XNU is not a microkernel (BSD unix stuff runs in kernel mode)&lt;/li&gt;&lt;li&gt;the kernel is not based on FreeBSD, but mostly on 4.4BSD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;although it runs now on 64bit machines (eg. Intel's Core 2 Duo chips), only the user mode code can be 64bit - the kernel is still 32bit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;it allows subclassing of drivers (aka &lt;font size="2" face="courier new,courier,monospace"&gt;ToshibaCDRomDriver extends CDRomDriver&lt;/font&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;since Leopard MacOSX is fully POSIX-conformant and the only *nix around that does not contain any AT&amp;amp;T code&lt;/li&gt;&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pVolpaKf9qw:LLzdMRYutNk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pVolpaKf9qw:LLzdMRYutNk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=pVolpaKf9qw:LLzdMRYutNk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pVolpaKf9qw:LLzdMRYutNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=pVolpaKf9qw:LLzdMRYutNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=pVolpaKf9qw:LLzdMRYutNk:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/pVolpaKf9qw" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/insights_about_the_macosx_kernel</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_02</id>
        <title type="html">links for 2008-01-02</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/dY50V2jBqYI/links_for_2008_01_02" />
        <published>2008-01-02T23:38:30+00:00</published>
        <updated>2008-01-02T23:38:30+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.codepress.org/"&gt;CodePress - Real Time Syntax Highlighting Editor written in JavaScript&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/javascript"&gt;javascript&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/editor"&gt;editor&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/development"&gt;development&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/code"&gt;code&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/syntax-highlighting"&gt;syntax-highlighting&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=dY50V2jBqYI:RiRsPJdB9uI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=dY50V2jBqYI:RiRsPJdB9uI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=dY50V2jBqYI:RiRsPJdB9uI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=dY50V2jBqYI:RiRsPJdB9uI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=dY50V2jBqYI:RiRsPJdB9uI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=dY50V2jBqYI:RiRsPJdB9uI:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/dY50V2jBqYI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2008_01_02</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2007_12_21</id>
        <title type="html">links for 2007-12-21</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/WNu6H5GrukI/links_for_2007_12_21" />
        <published>2007-12-21T23:40:18+00:00</published>
        <updated>2007-12-21T23:40:18+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jcr/"&gt;Introducing the Java Content Repository API&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Good introduction to JCR from Titus Barik at IBM developerworks&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/jcr"&gt;jcr&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/api"&gt;api&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/java"&gt;java&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/jackrabbit"&gt;jackrabbit&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/tutorial"&gt;tutorial&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/ibm"&gt;ibm&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/cms"&gt;cms&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/article"&gt;article&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/jsr170"&gt;jsr170&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html"&gt;java.net: Exception-Handling Antipatterns&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/exception"&gt;exception&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/java"&gt;java&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/programming"&gt;programming&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/best-practice"&gt;best-practice&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/tips"&gt;tips&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=WNu6H5GrukI:DXP-HLPTbdw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=WNu6H5GrukI:DXP-HLPTbdw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=WNu6H5GrukI:DXP-HLPTbdw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=WNu6H5GrukI:DXP-HLPTbdw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=WNu6H5GrukI:DXP-HLPTbdw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=WNu6H5GrukI:DXP-HLPTbdw:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/WNu6H5GrukI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2007_12_21</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/amazon_simpledb_vs_jcr</id>
        <title type="html">Amazon SimpleDB vs. JCR</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/HGa4sFBm8F8/amazon_simpledb_vs_jcr" />
        <published>2007-12-21T11:54:32+00:00</published>
        <updated>2007-12-21T11:55:23+00:00</updated> 
        <category term="/JCR" label="JCR" />
        <category term="amazon" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="database" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="jcr" scheme="http://rollerweblogger.org/ns/tags/" />
        <category term="simpledb" scheme="http://rollerweblogger.org/ns/tags/" />
        <content type="html">&lt;p&gt;The release of &lt;a href="http://www.amazon.com/gp/browse.html?node=342335011"&gt;Amazon's SimpleDB&lt;/a&gt; is another interesting step away from traditional relational databases towards &lt;a href="http://www.betaversion.org/~stefano/linotype/news/93/"&gt;data first - structure&lt;/a&gt; later storages, for example&amp;nbsp;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jcr/"&gt;content repositories&lt;/a&gt; in &lt;a href="http://jackrabbit.apache.org/"&gt;various&lt;/a&gt; &lt;a href="http://www.day.com/site/en/index/products/content-centric_infrastructure/content_repository.html"&gt;flavors&lt;/a&gt;. Michael Marth &lt;a href="http://dev.day.com/microsling/content/blogs/main/datafirst.html"&gt;puts it all together&lt;/a&gt; and I would add &lt;a href="http://bpt.hpi.uni-potsdam.de/pub/Public/HagenOverdick/xenodot_introduction.pdf"&gt;Xenodot&lt;/a&gt; [pdf] from &lt;a href="http://restingbird.info/"&gt;resting bird&lt;/a&gt; to the list, although it's not released yet.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;One thing I miss in SimpleDB is the lack of a tree structure, ie. there is only one big set of items that are unconnected. This has the adavantage of making the implementation easily scalable as each item can be stored on a different machine and the rest is done by the search index. You could use URIs with paths as your item names to create a virtual tree structure (I don't know if long item names are feasible), but there is no way to easily explore your data and structure it with parent-child relationships explicitly.&lt;/p&gt;&lt;p&gt;The idea of creating a JCR-interface on top of SimpleDB is nice, but I wonder if a &lt;a href="http://wiki.apache.org/jackrabbit/PersistenceManagerFAQ"&gt;persistence manager&lt;/a&gt; for Jackrabbit would be enough. But a persistence manager could also use &lt;a href="http://aws.amazon.com/s3"&gt;Amazon S3&lt;/a&gt; directly.&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=HGa4sFBm8F8:2RAXkNbkvpM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=HGa4sFBm8F8:2RAXkNbkvpM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=HGa4sFBm8F8:2RAXkNbkvpM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=HGa4sFBm8F8:2RAXkNbkvpM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=HGa4sFBm8F8:2RAXkNbkvpM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=HGa4sFBm8F8:2RAXkNbkvpM:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/HGa4sFBm8F8" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/amazon_simpledb_vs_jcr</feedburner:origLink></entry>
    <entry>
        <id>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2007_12_20</id>
        <title type="html">links for 2007-12-20</title>
        <author><name>Alexander Klimetschek</name></author>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlexanderKlimetscheksBlog/~3/ZJLjHIUctSE/links_for_2007_12_20" />
        <published>2007-12-20T23:30:25+00:00</published>
        <updated>2007-12-20T23:30:25+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;ul class="delicious"&gt;
	&lt;li&gt;
		&lt;div class="delicious-link"&gt;&lt;a href="http://www.twine.com/"&gt;Twine&lt;/a&gt;&lt;/div&gt;
		&lt;div class="delicious-extended"&gt;Semantic bookmarking, looks like a much better delicious + wiki. Welcome to Web3.0&lt;/div&gt;
		&lt;div class="delicious-tags"&gt;(tags: &lt;a href="http://del.icio.us/klimetschek/semanticweb"&gt;semanticweb&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/collaboration"&gt;collaboration&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/Social"&gt;Social&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/web20"&gt;web20&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/startup"&gt;startup&lt;/a&gt; &lt;a href="http://del.icio.us/klimetschek/trends"&gt;trends&lt;/a&gt;)&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZJLjHIUctSE:Gxga15Z4XA0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZJLjHIUctSE:Gxga15Z4XA0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ZJLjHIUctSE:Gxga15Z4XA0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZJLjHIUctSE:Gxga15Z4XA0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?i=ZJLjHIUctSE:Gxga15Z4XA0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?a=ZJLjHIUctSE:Gxga15Z4XA0:Ie3g0ULNdPs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AlexanderKlimetscheksBlog?d=Ie3g0ULNdPs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlexanderKlimetscheksBlog/~4/ZJLjHIUctSE" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://weblogs.goshaky.com/weblogs/alexkli/entry/links_for_2007_12_20</feedburner:origLink></entry>
</feed>
