<?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:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUUMSH48eyp7ImA9WxFbEE0.&quot;"><id>tag:blogger.com,1999:blog-5858414</id><updated>2010-07-01T20:01:29.073+02:00</updated><title>blog.xam.de</title><subtitle type="html">Max Völkel on Personal Knowledge Management, Wikis, Semantic Web, and personal ideas.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.xam.de/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.xam.de/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MaxVlkel" /><feedburner:info uri="maxvlkel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D04MSXo7eCp7ImA9WxFUF0g.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-4788665666949985542</id><published>2010-06-28T22:13:00.000+02:00</published><updated>2010-06-28T22:13:08.400+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T22:13:08.400+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="backup" /><title>Java copies files 80 times fast than commercial backup software</title><content type="html">I cannot believe what I saw today. I bought a brand new hard drive, a 500 GB 2.5" USB hard disk. It's&amp;nbsp; a Western Digital My Passport Essential. It was about 15 Euros more expensive than a another 500 GB 2.5" USB drive from Western Digital - so it must be the software. I thought: Okay, let's try this backup software, I really need one.&lt;br /&gt;
So I installed everything and ran my first backup. After almost half an hour I took a look at the result. I was shocked. At this speed, the full backup would take days! I startet a self-written Java program called &lt;i&gt;syncr&lt;/i&gt; with the sole purpose to copy files fast.&lt;b&gt; Syncr was over 80 times faster&lt;/b&gt;. Of course, the comparison is not entirely fair. The software from Western Digital, called &lt;i&gt;WD SmartWare 1.2.0.8, Copyright 2009 by Western Digital&lt;/i&gt;, can do much more than my hand-written syncr. The table below lists all differences. Nevertheless, 80 times is really a lot.&lt;br /&gt;
&lt;br /&gt;
Syncr uses very few ticks to achieve this speed:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;It does not copy redundant information - However, the speedup was measured by those files that &lt;i&gt;were&lt;/i&gt; copied &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;It skips redundant folders with these names Temp", "RECYCLER", "System Volume Information", "Google Desktop" &lt;/li&gt;
&lt;li&gt;It always skips files named "hiberfil.sys", "pagefile.sys", "Thumbs.db", "autorun.inf", "UsrClass.dat", "UsrClass.dat.LOG", "ntuser.dat.LOG","ntuser.dat", "parent.lock"&lt;/li&gt;
&lt;li&gt;It does not copy files that are already present at the target drive with the same name and change date&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;It writes some kind of directories directly into a zip file in the target drive - this is &lt;b&gt;much faster &lt;/b&gt;than copying first and zipping later and even faster than not zipping. Many small files cost a lot of file system operations. By default, only Eclipse projects and Eclipse workspaces are zipped.Overall, not many files are zipped.&lt;/li&gt;
&lt;li&gt;It uses Java NIO, which is faster than the old Java.io.&lt;/li&gt;
&lt;/ul&gt;All in all I cannot explain the slow speed of WD SmartWare nor the fast speed of Syncr. As a side remark: Syncr is also faster than the Windows Explorer (which is why Syncr has been written initially). &lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;Quick facts about Syncr:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Files: 1&lt;/li&gt;
&lt;li&gt;Lines of code: Less than 600, including comments&lt;/li&gt;
&lt;li&gt;License: BSD &lt;/li&gt;
&lt;li&gt;Dependencies: slf4j for logging&lt;/li&gt;
&lt;li&gt;Source code: &lt;a href="http://code.google.com/p/syncr/source/browse/trunk/de.xam.syncr/src/main/java/de/xam/syncr/Syncr.java"&gt;http://code.google.com/p/syncr/source/browse/trunk/de.xam.syncr/src/main/java/de/xam/syncr/Syncr.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Because of all this, I released Syncr into the wild today. Enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1"&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th style="font-family: Verdana,sans-serif;"&gt;Feature&lt;/th&gt; &lt;th style="font-family: Verdana,sans-serif;"&gt;WD SmartWare&lt;/th&gt; &lt;th style="font-family: Verdana,sans-serif;"&gt;Syncr&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Business model&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Commercial&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Open source (BSD)&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Front-end&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;graphical&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Java source code, run from Eclipse&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Installer&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Windows, Mac&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;None&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Languages&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;28&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;English only&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Usability&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;very easy&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;easy for Java developers of any level, impossible for non-developers&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Design&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Aesthetic visualisation of current hard drive content&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Accurate log messages&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Backup storage format&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Special folder system that contains the original files plus additional  .dcm files&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Original folder structure with original files. Some folders are automatically stores as .zip archives.&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Product URL&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://www.wdc.com/en/products/wdsmartware/"&gt;http://www.wdc.com/en/products/wdsmartware/&lt;/a&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://code.google.com/p/syncr/"&gt;http://code.google.com/p/syncr/&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Versioning (can get back an older version of a file)&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Yes&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;No&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Incremental backup&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Yes&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Yes&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Constant incremental background backup&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;Yes&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;No&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;&lt;th style="font-family: Verdana,sans-serif;"&gt;Experimental results&lt;/th&gt;&lt;th style="font-family: Verdana,sans-serif;"&gt;Experimental results&lt;/th&gt;&lt;th style="font-family: Verdana,sans-serif;"&gt;Experimental results&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;CPU usage&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;20-40%&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;20-40%&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Files created to backup 100 files&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;ca. 200&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;100 or just one zip file&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Memory usage&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;164 MB&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;10-400 MB&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Files copied after first 25 minutes&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;4200 files&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;5152 files &lt;br /&gt;
(1 resulting zip file counting as 1 file)&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Data &lt;/b&gt;&lt;b&gt;copied after first 25 minutes&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;136 MB&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;11 GB&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Estimated time for a full backup (of my 88 GB)&lt;/b&gt;&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;11 days, 5.6 hours&lt;/td&gt; &lt;td style="font-family: Verdana,sans-serif;"&gt;3.4 hours&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-4788665666949985542?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ps_M_BVSkkVqTERoxQjRt5YvEWQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ps_M_BVSkkVqTERoxQjRt5YvEWQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ps_M_BVSkkVqTERoxQjRt5YvEWQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ps_M_BVSkkVqTERoxQjRt5YvEWQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/OlXiFcgczZ0" height="1" width="1"/&gt;</content><link rel="related" href="http://code.google.com/p/syncr/" title="Java copies files 80 times fast than commercial backup software" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/4788665666949985542/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=4788665666949985542" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4788665666949985542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4788665666949985542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/OlXiFcgczZ0/java-copies-files-80-times-fast-than.html" title="Java copies files 80 times fast than commercial backup software" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.xam.de/2010/06/java-copies-files-80-times-fast-than.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CQH8-fip7ImA9WxFVGE0.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-6951867037032749972</id><published>2010-06-17T22:17:00.000+02:00</published><updated>2010-06-17T22:17:41.156+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-17T22:17:41.156+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><title>Unifying Slf4j, gwt-log, GWT, AppEngine, Part II</title><content type="html">After some attempts to GWTify the existing slf4j-api it runs out, the approach of using linking API and implementation will not work in GWT, because it relies on reflection.&lt;br /&gt;
&lt;br /&gt;
Hence, we use a primitive solution without any magic. The API provides the class LoggerFactory and a log implementation is required to register itself via a static method. &lt;br /&gt;
&lt;br /&gt;
Finally I managed to write a first working code base for this. A &lt;a href="http://code.google.com/p/xydra/wiki/XydraLog"&gt;description about how to use it can be found here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-6951867037032749972?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mrYjKvSknH1xd-ACywwO2Tgh_rs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mrYjKvSknH1xd-ACywwO2Tgh_rs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mrYjKvSknH1xd-ACywwO2Tgh_rs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mrYjKvSknH1xd-ACywwO2Tgh_rs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/IbFNRthxyic" height="1" width="1"/&gt;</content><link rel="related" href="http://code.google.com/p/xydra/wiki/XydraLog" title="Unifying Slf4j, gwt-log, GWT, AppEngine, Part II" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/6951867037032749972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=6951867037032749972" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6951867037032749972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6951867037032749972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/IbFNRthxyic/unifying-slf4j-gwt-log-gwt-appengine_17.html" title="Unifying Slf4j, gwt-log, GWT, AppEngine, Part II" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/06/unifying-slf4j-gwt-log-gwt-appengine_17.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04MSXYyeCp7ImA9WxFVF0s.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-8293745687642966842</id><published>2010-06-17T11:13:00.000+02:00</published><updated>2010-06-17T11:13:08.890+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-17T11:13:08.890+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><title>Unifying Slf4j, gwt-log, GWT, AppEngine, Part I</title><content type="html">I like the API of SLF4J very much and used in all my code so far.&lt;br /&gt;
&lt;br /&gt;
Can I re-use the same API for code that runs via GWT in the browser?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Experiment:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Check out source code from &lt;a href="http://github.com/ceki/slf4j"&gt;http://github.com/ceki/slf4j&lt;/a&gt; from trunk on 2010-06-17&lt;/li&gt;
&lt;li&gt;Add GWT dependencies in Maven, add get-maven plugin in POM&lt;/li&gt;
&lt;li&gt;Create a dummy entry point and a get.xml file&lt;/li&gt;
&lt;li&gt;Run mvn gwt:compile&lt;/li&gt;
&lt;/ul&gt;Result:&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&lt;br /&gt;
[INFO] Compiling module org.slf4j.GWTTest&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp; Validating newly compiled units&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 28: The import java.net cannot be resolved&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 207: The method getClassLoader() is undefined for the type Class&lt;loggerfactory&gt;&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 217: URL cannot be resolved to a type&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 217: URL cannot be resolved to a type&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/helpers/MessageFormatter.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 27: The import java.text cannot be resolved&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/MDC.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 74: No source code is available for type java.lang.NoClassDefFoundError; did you forget to inherit a required module?&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/MarkerFactory.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 53: No source code is available for type java.lang.NoClassDefFoundError; did you forget to inherit a required module?&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/helpers/BasicMDCAdapter.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 47: No source code is available for type java.lang.InheritableThreadLocal&lt;t&gt;; did you forget to inherit a required module?&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Errors in 'file:/O:/2010/slf4j-api/src/main/java/org/slf4j/helpers/NamedLoggerBase.java'&lt;br /&gt;
[INFO]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ERROR] Line 40: No source code is available for type java.io.ObjectStreamException; did you forget to inherit a required module?&lt;/t&gt;&lt;/loggerfactory&gt;&lt;/span&gt;&lt;br /&gt;
These errors show that SLF4j is not GWT-ready by itself. Now there are two options:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create a drop-in replacement that implements some parts differently&lt;/li&gt;
&lt;li&gt;Create a new SLF4j-like API which IS GWT-ready&lt;/li&gt;
&lt;/ul&gt;The second option is probably less work, but the first option would be easier to use.I'll keep you updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-8293745687642966842?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aE_y1E67Q_kFZ8G2-jqkjmlCckI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aE_y1E67Q_kFZ8G2-jqkjmlCckI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aE_y1E67Q_kFZ8G2-jqkjmlCckI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aE_y1E67Q_kFZ8G2-jqkjmlCckI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/U5CiUM3PHbc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/8293745687642966842/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=8293745687642966842" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8293745687642966842?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8293745687642966842?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/U5CiUM3PHbc/unifying-slf4j-gwt-log-gwt-appengine.html" title="Unifying Slf4j, gwt-log, GWT, AppEngine, Part I" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/06/unifying-slf4j-gwt-log-gwt-appengine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDQ3g-eyp7ImA9WxFXEU0.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-544618126150248459</id><published>2010-05-17T15:36:00.000+02:00</published><updated>2010-05-17T15:36:12.653+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-17T15:36:12.653+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="call for paper" /><category scheme="http://www.blogger.com/atom/ns#" term="pkm" /><title>2nd workshop on Personal Knowledge Management</title><content type="html">Call for papers: 2nd workshop on Personal Knowledge Management at Mensch und Computer 2010, September 12, Duisburg, Germany.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;June 13, 2010 (Sun.) Deadline for paper submission&lt;/li&gt;
&lt;li&gt;July 4, 2010 (Sun.) &amp;nbsp; &amp;nbsp;Notification to authors&lt;/li&gt;
&lt;li&gt;July 14, 2010 (Wed.) &amp;nbsp;Camera-ready copy due&lt;/li&gt;
&lt;li&gt;September 12, 2010 &amp;nbsp;Workshop &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-544618126150248459?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6pKPUJ7mJtew7nHsUXE3_wJryjo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pKPUJ7mJtew7nHsUXE3_wJryjo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6pKPUJ7mJtew7nHsUXE3_wJryjo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pKPUJ7mJtew7nHsUXE3_wJryjo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/_c6YdCdihFY" height="1" width="1"/&gt;</content><link rel="related" href="http://2010.personalknowledge.org/" title="2nd workshop on Personal Knowledge Management" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/544618126150248459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=544618126150248459" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/544618126150248459?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/544618126150248459?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/_c6YdCdihFY/2nd-workshop-on-personal-knowledge.html" title="2nd workshop on Personal Knowledge Management" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/05/2nd-workshop-on-personal-knowledge.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CR3YyfSp7ImA9WxFXEkU.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-4256747518790784379</id><published>2010-05-13T21:03:00.004+02:00</published><updated>2010-05-19T17:11:06.895+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T17:11:06.895+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="optimisation" /><category scheme="http://www.blogger.com/atom/ns#" term="gae/j" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Runtime optimisation on AppEngine for Java (GAE/J)</title><content type="html">1. Install AppStats from &lt;a href="http://code.google.com/appengine/docs/java/tools/appstats.html"&gt;http://code.google.com/appengine/docs/java/tools/appstats.html&lt;/a&gt;&lt;br /&gt;
Its basically a servlet provided by Google that intercepts GAE inner workings and logs it to your applications data store. It comes with a servlet that is able to display the data in nice ways. Leave all settings as described.&lt;br /&gt;
&lt;br /&gt;
2. Log into the appstats servlet and keep the browser open&lt;br /&gt;
&lt;br /&gt;
3. Open the Firebug network tab&lt;br /&gt;
&lt;br /&gt;
4. Make a request to your appengine application&lt;br /&gt;
&lt;br /&gt;
5.In the response headers: You see messages about the cost and CPU usage. The cost is for 1000 requests, the usage numbers are for this request. Sample:&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class=" " style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;tbody aria-label="Antwort-Header" class="netInfoResponseHeadersBody " role="list"&gt;
&lt;tr class=" " role="listitem"&gt;&lt;td class="netInfoParamName " role="presentation" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;X-AppEngine-Estimated-CPM-US-Dollars: $0.003959&lt;br /&gt;
X-AppEngine-Resource-Usage: ms=172 cpu_ms=156 api_cpu_ms=40&lt;/td&gt;&lt;td aria-label="X-AppEngine-Estimated-CPM-US-Dollars" class="netInfoParamValue " role="list"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=" " role="listitem"&gt;&lt;td class="netInfoParamName " role="presentation"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td aria-label="X-AppEngine-Resource-Usage" class="netInfoParamValue " role="list"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Google &lt;a href="http://code.google.com/appengine/docs/java/runtime.html#Responses"&gt;explains&lt;/a&gt;:&lt;br /&gt;
&lt;em&gt;If you access your site while signed in using an administrator  account, App Engine includes per-request statistics in the response  headers. The header &lt;code&gt;X-AppEngine-Estimated-CPM-US-Dollars&lt;/code&gt;  represents an estimate of what 1,000 requests similar to this request  would cost in US dollars.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
6. Go into the Appstats and click to see your last request. You get a timeline diagram and each point you called the data store. Click on these points to see the stack trace that called them.&lt;br /&gt;
&lt;br /&gt;
7. Use Firebug to determine the page loading time from a users point of view.&lt;br /&gt;
&lt;br /&gt;
Our appengine application remains for ca. 20 seconds active before the next request causes another cold start (clearly distinguishable by page loading times; time measures with stop watch by hand). A cold start every 20 seconds is in the worst case 4320 cold starts per day. Given a cold start cost of $ 0,00377529 for 12 seconds startup time, we end up with ca. $ 49 per month. All other request hit certainly a warm JVM and are hence much cheaper.&lt;br /&gt;
&lt;br /&gt;
There is also a little &lt;a href="http://radomirml.com/2010/04/06/track-appengine-estimated-cost-with-firefox-add-on"&gt;Firefox plugin to display the costs in the Firefox error console&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-4256747518790784379?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sZAFfkNomresT4A-x7usseJo9xI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sZAFfkNomresT4A-x7usseJo9xI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sZAFfkNomresT4A-x7usseJo9xI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sZAFfkNomresT4A-x7usseJo9xI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/F6MkuHnx-KY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/4256747518790784379/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=4256747518790784379" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4256747518790784379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4256747518790784379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/F6MkuHnx-KY/runtime-optimisation-on-appengine-for.html" title="Runtime optimisation on AppEngine for Java (GAE/J)" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/05/runtime-optimisation-on-appengine-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEGQH04eCp7ImA9WxBaFkw.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-1831995442743950833</id><published>2010-03-21T12:31:00.003+01:00</published><updated>2010-03-26T14:37:01.330+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-26T14:37:01.330+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="startup" /><category scheme="http://www.blogger.com/atom/ns#" term="semfs" /><category scheme="http://www.blogger.com/atom/ns#" term="oem" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>Open Letter to Alfresco [update 2]</title><content type="html">&lt;b&gt;Original Post (see updates at the end):&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Dear Alfresco,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; I am trying to &lt;b&gt;buy &lt;/b&gt;something from you. I downloaded the source code from your site, an I am pleased with what I see. In order to embed JLAN in my product, I need to know the &lt;b&gt;price&amp;nbsp; &lt;/b&gt;of your product. I want to embed your JLAN prodcut [1]. On the product site you write:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Alfresco offers either an end user and developer license that allows companies to use Alfresco JLAN for  internal deployments, or an OEM license that allows you to add Alfresco JLAN features and  functionality to your products.&amp;nbsp; For more information please contact &lt;a href="mailto:jlan@alfresco.com"&gt;jlan@alfresco.com&lt;/a&gt;. &lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Ok, so I wrote an email to that address, asking for a quote. No response.&lt;br /&gt;
I also asked the same question at the German sales email contact as listed at [2], twice. Additionally, I called the German hotline number, twice, but only got an answering machine at normal business hours. Also no reaction from the US sales email, twice.&lt;br /&gt;
&lt;br /&gt;
After these seven (!) attempts to just get a price quote from you, I feel lost.&lt;br /&gt;
But customer service can get even worse!&lt;br /&gt;
Now I get emails like these:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Besuchen Sie Alfresco auf der CeBIT&lt;/li&gt;
&lt;li&gt;Doing More with your Alfresco Trial. 30-Day Full Enterprise Download Trial.&lt;/li&gt;
&lt;li&gt;Webinar: Alfresco-SAP-Anbindung in der Praxis, 18 März 2010 um 16:00&lt;/li&gt;
&lt;li&gt;Upcoming Webinars: Alfresco Share Customization and SAP Integration&lt;/li&gt;
&lt;/ul&gt;Apparently you have neither an idea what language I speak, nor a clue what I want from you. I &lt;b&gt;do not care about SAP integration&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
Why do you spam your potential customers &lt;b&gt;instead of selling your software?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
[1] &lt;a href="http://www.alfresco.com/products/aifs/"&gt;http://www.alfresco.com/products/aifs/&lt;/a&gt;&lt;br /&gt;
[2] &lt;a href="http://www.alfresco.com/about/contact/"&gt;http://www.alfresco.com/about/contact/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Max Völkel&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update 1: &lt;/b&gt;&lt;br /&gt;
On 22.03.2010 at 10 am, I got an Email from  Alfresco with various contact details. Whatever caused their hickup, the  Web 2.0 seems to have worked better than their internal structure, this  time. Maybe more and more future communication will turn in Web 2.0  social network communication?&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot  predict my future sales numbers and had to learn that OEM business works  not as I expected it. I expected a simple price table for 1-10  licenses, 11-100, 101-1000 and another per-license-price for more than  1000. This is not the case. Alfresco wants to calculate my business  case, determine how much of the value is contributed by their software  and then come up with a quote. This makes sense for them to obtain a  fair price for their software. On the other hand, for smaller players  like me, this means I have no way to &lt;i&gt;start &lt;/i&gt;using Alfresco  software.&lt;br /&gt;
&lt;br /&gt;
As all the code is open source anyway, all  they would need to do is set up a contract valid for, let's say, up to  10.000 licenses and let me pay by credit card for the number of licenses  used at the end of each quarter.&lt;br /&gt;
&lt;br /&gt;
Right now I could  secretly take the source code, use it, and get sued (rightly so!). In  the future, I could pay for a number of licenses, and if I would not  have paid enough, get sued in the same way. So there is almost no  overhead for them to earn more money. They can just set up self-service  web-shop for licenses and continue to sue people without proper  licenses.&lt;br /&gt;
&lt;br /&gt;
Does anybody knows of another CIFS/Samba  server written in Java that can be embedded for a reasonable license fee  even for a small or unknown number of licenses? &lt;br /&gt;
&lt;br /&gt;
At  the end of the week, Alfresco will tell me more details about licensing  options with them, I'll keep you updated.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update 2:&lt;/b&gt;&lt;br /&gt;
Today, 26.03.2010, we received our final verdict from Alfresco: &lt;b&gt;We are too small to talk too.&lt;/b&gt; Of course, they did not use these words. But they are definitely not interested in negotiating a deal with unknown results, most likely because their negotiation process is too costly. Their product is really nice, they have a SMB/CIFS+WebDav-server in Java called JLAN and fits our current APIs really well. But since its either GPL (killing all our potential business models) or a minimum deal of ca. 10.000 Euros, we'll now need to go ahead an continue to implement our own WebDAV server. So SemFS will not have CIFS support in the near future, but we will open-source (BSD license) our WebDAV server. We looked at Slide (project is dead), JackRabbits WebDAV (really complicated OO-architecture with way too many interfaces), and other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-1831995442743950833?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jbw1LX8KSH2_3fUD-jjdyTlHKc8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jbw1LX8KSH2_3fUD-jjdyTlHKc8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jbw1LX8KSH2_3fUD-jjdyTlHKc8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jbw1LX8KSH2_3fUD-jjdyTlHKc8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/3OY3LhBO_q4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/1831995442743950833/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=1831995442743950833" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/1831995442743950833?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/1831995442743950833?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/3OY3LhBO_q4/open-letter-to-alfresco.html" title="Open Letter to Alfresco [update 2]" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/03/open-letter-to-alfresco.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08EQn0-eip7ImA9WxBUFk0.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-3038747878517534357</id><published>2010-03-03T10:50:00.001+01:00</published><updated>2010-03-03T10:50:03.352+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-03T10:50:03.352+01:00</app:edited><title>Logging in the Google AppEngine for Java (GAE/J) with slf4j, log4j  and jul - and using Maven</title><content type="html">Logging is an invaluable tool for debugging web applications, especially if you can&amp;#39;t run them in debug mode. Developping an application on Google AppEngine allows you to do these steps prior to uploading it to the real server&lt;br&gt; &lt;ul&gt;&lt;li&gt;Run local JUnit tests (alhough that has its own &lt;a href="http://stackoverflow.com/questions/2351293/google-appengine-local-junit-tests-jersey-framework-embedded-jetty"&gt;problems if you use Jersey framework and an embedded Jetty&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Run the application or the JUnit tests in debug mode (e.g. use &lt;span style="font-family: courier new,monospace;"&gt;mvn gae:debug&lt;/span&gt; and a remote debug session in Eclipse)&lt;br&gt;&lt;/li&gt;&lt;li&gt;Use logging&lt;/li&gt;&lt;/ul&gt;On the real appengine, you cannot run JUnit tests (at least I don&amp;#39;t know how. Maybe you can somehow.) and you cannot run a remote debug session. Therefore you &lt;i&gt;need logging&lt;/i&gt;. It&amp;#39;s your only way to debug things that are different on the real appengine compared to the local test stub environment. And there are differences.&lt;br&gt; &lt;br&gt;AppEngine uses java.utils.logging (also often called j.u.l. or just jul). As the &lt;a href="http://fredsa.allen-sauer.com/2009/04/getting-gwt-log-to-just-work-on-google.html"&gt;blog from Fred Sauer&lt;/a&gt; (the man behin gwt-log) &lt;a href="http://4.bp.blogspot.com/_p7YKf0jZLqQ/Sd-brCgWYDI/AAAAAAAAJjY/KSAR2bBLoVU/s1600-h/gwt-log+RemoteLogger+on+App+Engine.png"&gt;shows&lt;/a&gt;, the AppEngine web console nicely displays the differen log levels:&lt;br&gt; &lt;ul&gt;&lt;li&gt;DEBUG&lt;/li&gt;&lt;li&gt;INFO&lt;/li&gt;&lt;li&gt;WARN&lt;/li&gt;&lt;li&gt;ERROR&lt;/li&gt;&lt;li&gt;CRITICAL&lt;/li&gt;&lt;/ul&gt;AppEngine uses jul for logging, although ironically &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html"&gt; jul defines different log-levels&lt;/a&gt;, namelly: &lt;br&gt; &lt;ul&gt;&lt;li&gt;FINEST  (lowest value)  &lt;/li&gt;&lt;li&gt;FINER&lt;/li&gt;&lt;li&gt;FINE&lt;br&gt;&lt;/li&gt;&lt;li&gt;CONFIG&lt;br&gt;&lt;/li&gt;&lt;li&gt;INFO  &lt;/li&gt;&lt;li&gt;WARNING&lt;/li&gt;&lt;li&gt;SEVERE (highest value) &lt;/li&gt;&lt;/ul&gt;The mapping to the GAE levels is not completely clear to me yet. &lt;br&gt;To add more confusion to the mix, most code projects that I start today use &lt;a href="http://www.slf4j.org/"&gt;slf4j&lt;/a&gt;, the Simple Logging Facade for Java. Slf4j allows to delegate to another logging framework and involves almost zero runtime overhead. Underneath I usually use &lt;a href="http://logging.apache.org/log4j/1.2/index.html"&gt;log4j&lt;/a&gt;, an old, mature logging framework.&lt;br&gt; &lt;br&gt;&lt;b&gt;Clickable hyperlinks in log output&lt;/b&gt;&lt;br&gt;Log4j has nice things such as a &lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html"&gt;PatternFormatter&lt;/a&gt;. If you use &amp;quot;(%F:%L)&amp;quot; in your pattern, you get &amp;quot;(Customer.java:33)&amp;quot;, which your Eclipse console parses and turns it into a clickable link to the java file &amp;quot;Customer.java&amp;quot; in line 33. That is a very quick way from an unexpected log message to you fixing it: One click! &lt;br&gt; Be aware that line numbers in source code are rather expensive to generate, you should therefore not use this pattern in a production environment. However, you can simply use another confguration file, how nice.&lt;br&gt;There are other reasons for using framework such as log4j instead of just jul.&lt;br&gt; &lt;br&gt;&lt;b&gt;Situation&lt;/b&gt;&lt;br&gt;In my project I have this (not uncommon) situation:&lt;br&gt;&lt;ul&gt;&lt;li&gt;GAE uses jul&lt;/li&gt;&lt;li&gt;Jersey uses jul&lt;/li&gt;&lt;li&gt;Other bundled libraries and my code use slf4j&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Goals&lt;/b&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Clickable hyperlinks for local testing&lt;/li&gt; &lt;li&gt;Nice mapping from log levels to GAE icons&lt;/li&gt;&lt;li&gt;Same dependencies for local testing and production deployment&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Failed Attempts&lt;br&gt;&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Use slf4j-jdk14 to route all log output to jul. This works and nicely uses the five different categories on the AppEngine, but at the cost of getting a default ugly pattern. Jul has no PatternFormatter.&lt;/li&gt;&lt;li&gt;Write a &lt;a href="http://www.devx.com/tips/Tip/41156"&gt;custom formatter for jul&lt;/a&gt;.  This does not work, because a custom formatter can only be set to a known handler, such as the ConsoleHandler form jul. Unfortunately, the ConsoleHandler does not exist on AppEngine. Attemtps to get the existing handlers by creating a log and listing its handlers or parents failed: Its all emtpy on appengine.&lt;/li&gt; &lt;/ul&gt;&lt;b&gt;Chosen Solution&lt;/b&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Use log4j with PatternFormatter&lt;/li&gt;&lt;li&gt;Log4j put log messages to Sysatem.out which in turn are rendered by AppEngine as INFO level.&lt;/li&gt;&lt;li&gt;Jersey and AppEngine still use all five levels and an ugly pattern.&lt;/li&gt; &lt;/ul&gt;&lt;font size="4"&gt;&lt;b&gt;Configuration&lt;/b&gt;&lt;/font&gt;&lt;br&gt;This is the main piece of this long post, because it didn&amp;#39;t get it right first.&lt;br&gt;&lt;br&gt;In  &lt;span style="font-family: courier new,monospace;"&gt;\src\main\webapp\WEB-INF\appengine-web.xml &lt;/span&gt;  you need to have&lt;br&gt; &lt;span style="font-family: courier new,monospace;"&gt;&lt;br&gt;    &amp;lt;!-- Configure java.util.logging --&amp;gt;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    &amp;lt;system-properties&amp;gt;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        &amp;lt;property name=&amp;quot;java.util.logging.config.file&amp;quot; value=&amp;quot;WEB-INF/java-util-logging.properties&amp;quot;/&amp;gt;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    &amp;lt;/system-properties&amp;gt;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br&gt;to tell GAE where jul is configured. &lt;br&gt;In  &lt;span style="font-family: courier new,monospace;"&gt;\src\main\webapp\WEB-INF\java-util-logging.properties&lt;/span&gt;  you need&lt;br&gt; &lt;span style="font-family: courier new,monospace;"&gt;&lt;br&gt;.level = ALL&lt;/span&gt;&lt;br&gt;&lt;br&gt;or another of the&lt;i&gt; jul level names, &lt;/i&gt;as you like (i.e. &lt;i&gt;&amp;#39;TRACE&amp;#39; does not work&lt;/i&gt;).&lt;br&gt;&lt;br&gt;In &lt;span style="font-family: courier new,monospace;"&gt;\src\main\resources\log4j.properties&lt;/span&gt;  (if you put the file as usual in &lt;span style="font-family: courier new,monospace;"&gt;\src\test\resources\log4j.properties&lt;/span&gt;, it won&amp;#39;t be deployed to the production server and hence you will have no logging there). In this file you will have&lt;br&gt; &lt;span style="font-family: courier new,monospace;"&gt;&lt;br&gt;log4j.rootLogger=ALL, console&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br&gt;or a lower log level such as DEBUG, INFO or WARN.&lt;br&gt;And you can customize your output like:&lt;br&gt; &lt;span style="font-family: courier new,monospace;"&gt;&lt;br&gt;log4j.appender.console=org.apache.log4j.ConsoleAppender&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;log4j.appender.console.layout=org.apache.log4j.PatternLayout&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;log4j.appender.console.layout.ConversionPattern=%-5p: %m  at %C.(%F:%L) on %d{ISO8601}%n&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br&gt;You may not use FileAppenders, as GAE does not allow to write files.&lt;br&gt; That&amp;#39;s it. here is an &lt;b&gt;overview how log messages will flow&lt;/b&gt;:&lt;br&gt;&lt;ul&gt;&lt;li&gt;GAE &lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;generates its own log messages and sends them to jul&lt;/li&gt;&lt;li&gt;GAE checks if this level should be displayed (java-util-logging.properties), if yes:&lt;/li&gt; &lt;li&gt;message appears at correct level with ugly pattern in GAE log&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Jersey &lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;generates log messages and sends them to jul&lt;/li&gt;&lt;li&gt;GAE checks if this level should be displayed (java-util-logging.properties), if yes:&lt;/li&gt; &lt;li&gt;message appears at correct level with ugly pattern in GAE log&lt;br&gt; &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Other libraries and your code &lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;sends log messages to slf4j&lt;/li&gt;&lt;li&gt;slf4j sends them to log4j&lt;/li&gt;&lt;li&gt;log4j checks if this package &amp;amp; level should log (log4.properties), if yes:&lt;/li&gt;&lt;li&gt;log message is formatted nicely&lt;/li&gt; &lt;li&gt;and sends to System.out which is interpreted as a jul-messages at INFO level in GAE&lt;br&gt;&lt;/li&gt;&lt;li&gt;GAE checks if INFO level should be displayed (java-util-logging.properties), if yes:&lt;/li&gt;&lt;li&gt;messages shown with nice pattern at INFO level in GAE log, real level represented as text. E.g. a complete log message then looks like this: &lt;br&gt; 03-02 02:05PM 23.948&lt;br&gt;[myappname/1.340252283834355681].&amp;lt;stdout&amp;gt;: DEBUG: this is debug  at org.example.app.Logtest.(Logtest.java:13) on 2010-03-02 22:05:23,947&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;So in the end you have 3 barriers for a log message until you see it:&lt;br&gt; &lt;ul&gt;&lt;li&gt;Log4j&lt;/li&gt;&lt;li&gt;GAE&amp;#39;s jul&lt;/li&gt;&lt;li&gt;The drop-down box in AppEngine manager app (&lt;i&gt;&lt;b&gt;Show only requests&lt;/b&gt;&lt;/i&gt; will show &lt;i&gt;everyhing including requests with no errors&lt;/i&gt;).&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;I hope this helps other people struggling with logging an maybe somebody has an even nicer solution.&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-3038747878517534357?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_edfhb48EbA7loOORXslqENACPE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_edfhb48EbA7loOORXslqENACPE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_edfhb48EbA7loOORXslqENACPE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_edfhb48EbA7loOORXslqENACPE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/ajhRD49XsmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/3038747878517534357/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=3038747878517534357" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/3038747878517534357?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/3038747878517534357?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/ajhRD49XsmY/logging-in-google-appengine-for-java.html" title="Logging in the Google AppEngine for Java (GAE/J) with slf4j, log4j  and jul - and using Maven" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.xam.de/2010/03/logging-in-google-appengine-for-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MFR3c4eyp7ImA9WxBUEk0.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-6914349308226318420</id><published>2010-02-26T17:23:00.002+01:00</published><updated>2010-02-26T17:23:36.933+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-26T17:23:36.933+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="semwiki" /><category scheme="http://www.blogger.com/atom/ns#" term="semantic web" /><title>Fifth Workshop on Semantic Wikis – Linking Data and People [SemWiki2010]</title><content type="html">Paper Submission: &lt;del&gt;26th February 2010&lt;/del&gt; &lt;b&gt;Extended:&lt;/b&gt; 7th March 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-6914349308226318420?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V2d7FanC5nyOJkK9EUZATwRfx4A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V2d7FanC5nyOJkK9EUZATwRfx4A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V2d7FanC5nyOJkK9EUZATwRfx4A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V2d7FanC5nyOJkK9EUZATwRfx4A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/5f4ntLLFBBw" height="1" width="1"/&gt;</content><link rel="related" href="http://wiki.kiwi-project.eu/confluence/display/SEMWIKI10/SemWiki2010;jsessionid=AE2B98990747B081B8FE7B64FC459717" title="Fifth Workshop on Semantic Wikis – Linking Data and People [SemWiki2010]" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/6914349308226318420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=6914349308226318420" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6914349308226318420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6914349308226318420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/5f4ntLLFBBw/fifth-workshop-on-semantic-wikis.html" title="Fifth Workshop on Semantic Wikis – Linking Data and People [SemWiki2010]" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/fifth-workshop-on-semantic-wikis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGQH06eip7ImA9WxBVFUQ.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-2501519420374442326</id><published>2010-02-17T17:30:00.003+01:00</published><updated>2010-02-19T16:45:21.312+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T16:45:21.312+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="gae/j" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Google AppEngine Java - The Essential Links</title><content type="html">I keep searching for the same websites over and over again. This is my collection &lt;b&gt;essential &lt;/b&gt;links for Google AppEngine for Java. Using maven and low-level data-access only. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Provided by Google &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/"&gt;http://code.google.com/p/googleappengine/&lt;/a&gt;&amp;nbsp; - on googlecode&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://code.google.com/p/googleappengine/downloads/list"&gt;Early access downloads&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/appengine/docs/java/javadoc/index.html?com/google/appengine/api/datastore/Entity.html"&gt;Entity JavaDocs&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;http://code.google.com/appengine - product homepage &lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/intl/de/appengine"&gt;http://code.google.com/intl/de/appengine&lt;/a&gt; - product homepage, too&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Low-level data access&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/intl/de/appengine/articles/storage_breakdown.html"&gt;How Entities and Indexes are Stored&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/intl/de/appengine/docs/java/datastore/overview.html"&gt;Datastore Java API Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/appengine/docs/java/datastore/dataclasses.html#Core_Value_Types"&gt;Datastore value types&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/google-appengine-java"&gt;GAE/J Google Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Provided by third parties &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;The &lt;a href="http://code.google.com/p/maven-gae-plugin/"&gt;maven-gae-plugin&lt;/a&gt; - it works great. Use version 0.5.3 or higher.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.stringbuffer.com/2009/04/available-classes-in-google-app-enginej.html"&gt;GAE/J more complete class whitelist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Getting started with maven-gae-plugin and GAE/J 1.3.1:&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;1) Installing&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Download early access, e.g. to C:\&lt;/li&gt;
&lt;li&gt;Go to the download directory and type in a command prompt (as a single line):&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mvn install:install-file -DgroupId=com.google.appengine -DartifactId=appengine-java-sdk -Dversion=1.3.1 -Dpackaging=zip -Dfile=appengine-java-sdk-1.3.1.zip &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Use a local pom like the one linked &lt;a href="http://code.google.com/p/maven-gae-plugin/issues/detail?id=31#c23"&gt;here&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Go to your projects root dir and call "mvn gae:unpack"&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;2) Using&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Just execute the maven goals listed at the &lt;a href="http://code.google.com/p/maven-gae-plugin/"&gt;maven-gae-plugin&lt;/a&gt; page&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;e.g., mvn gae:run&amp;nbsp;&amp;nbsp; runs the local appengine. It runs now, but I still have issues to find my local servlets...&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-2501519420374442326?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6YFldjv1UqjTSG27BCb7B9yXfqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6YFldjv1UqjTSG27BCb7B9yXfqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6YFldjv1UqjTSG27BCb7B9yXfqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6YFldjv1UqjTSG27BCb7B9yXfqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/u75W9Jekj_Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/2501519420374442326/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=2501519420374442326" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2501519420374442326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2501519420374442326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/u75W9Jekj_Q/google-appengine-java-essential-links.html" title="Google AppEngine Java - The Essential Links" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/google-appengine-java-essential-links.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMQX0_fSp7ImA9WxBVFE8.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-5423680800726527448</id><published>2010-02-17T16:41:00.000+01:00</published><updated>2010-02-17T16:41:20.345+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T16:41:20.345+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>iPhone gegen Kratzer schützen</title><content type="html">Es gibt viele Display-Schutzfolien und iPhone-Hüllen. Die meisten iPhone-Hüllen sind unnötig klobig. Eine relativ gute Lösung ist die Folie von "&lt;a href="http://www.zagg.com/invisibleshield/apple-iphone-3g-cases-screen-protectors-covers-skins-shields.php"&gt;invisibleSHIELD&lt;/a&gt;" die man in Deutschland am günstigsten, schnellsten und bequemsten über Amazon bekommt: &lt;a href="http://www.amazon.de/gp/product/B002EIOD4U?ie=UTF8&amp;amp;tag=xamde01-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=B002EIOD4U"&gt;invisibleSHIELD Apple iPhone 3G / 3Gs (Full Body)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.de/e/ir?t=xamde01-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=B002EIOD4U" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;
&lt;br /&gt;
Die Folie schützt dabei das Display gegen Kratzer, klebt aber auch auf der Rückseite und macht so insgesamt das iPhone griffiger und kratzgeschützt.&lt;br /&gt;
&lt;br /&gt;
Das Auftragen der Folie ist allerdings eine ganz schöne Friemelei. Vorher unbedingt Hände und Telefon 100% fettfrei machen, das ist am wichtigsten. Dauer eine knappe Stunde, bis alles so klebt wie es soll. Aber danach hält es auch richtig gut.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-5423680800726527448?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O4D-9NnE7_ZkT5mn-nFpgOagG8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O4D-9NnE7_ZkT5mn-nFpgOagG8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O4D-9NnE7_ZkT5mn-nFpgOagG8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O4D-9NnE7_ZkT5mn-nFpgOagG8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/dTO3SjYrOg4" height="1" width="1"/&gt;</content><link rel="related" href="http://www.amazon.de/gp/product/B002EIOD4U?ie=UTF8&amp;tag=xamde01-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B002EIOD4U" title="iPhone gegen Kratzer schützen" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/5423680800726527448/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=5423680800726527448" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5423680800726527448?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5423680800726527448?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/dTO3SjYrOg4/iphone-gegen-kratzer-schutzen.html" title="iPhone gegen Kratzer schützen" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/iphone-gegen-kratzer-schutzen.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIDRHczfCp7ImA9WxBVE0s.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-7825575340457003562</id><published>2010-02-17T00:39:00.000+01:00</published><updated>2010-02-17T00:39:35.984+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T00:39:35.984+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ski" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="sport" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>Fernskiwanderweg Schonach-Belchen (100km) in 3 Tagen</title><content type="html">Letztes Wochenende sind wir drei Tage im Schwarzwald unterwegs gewesen. Jeden Tag habne wir zwei Etappen gemacht. Da sich Mittags auch das iPhone stets laden durfte, konnte ich den Track komplett aufzeichnen. Das Ergebnis ist zu sehen auf&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.everytrail.com/view_trip.php?trip_id=501421"&gt;EveryTrail&lt;/a&gt; (mit Höhenprofil und Google Earth .kml download)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hikr.org/tour/post20878.html"&gt;Hik&lt;/a&gt; (mit Fotos)&lt;/li&gt;
&lt;li&gt;und hier ist die &lt;a href="http://www.fernskiwanderweg.de/fernskiwanderweg/"&gt;offizielle Karte&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;Alles in allem eine wunderbare Tour, man braucht drei Tage lang nur den orangenen Schildern zu folgen, sehr angenehm und perfekt gespurt. Also los, solange es noch genug Schnee gibt...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-7825575340457003562?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V4ETlcWqFRRX5-jEFZdf4v6zR3E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V4ETlcWqFRRX5-jEFZdf4v6zR3E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V4ETlcWqFRRX5-jEFZdf4v6zR3E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V4ETlcWqFRRX5-jEFZdf4v6zR3E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/XGCHLXj_epk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/7825575340457003562/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=7825575340457003562" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7825575340457003562?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7825575340457003562?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/XGCHLXj_epk/fernskiwanderweg-schonach-belchen-100km.html" title="Fernskiwanderweg Schonach-Belchen (100km) in 3 Tagen" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/fernskiwanderweg-schonach-belchen-100km.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8GSXozeyp7ImA9WxBVE0g.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-7441561863863880915</id><published>2010-02-16T22:47:00.000+01:00</published><updated>2010-02-16T22:47:08.483+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T22:47:08.483+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="semfs" /><title>SemFS making progress</title><content type="html">Today I refactored &lt;a href="http://semfs.semweb4j.org/"&gt;SemFS (our semantic file system)&lt;/a&gt; heavily. Now at least the VirtualFileSystem API is beautifully &lt;a href="http://mavenrepo.fzi.de/semweb4j.org/site/semfs/apidocs/index.html"&gt;documented&lt;/a&gt; with nice clickable dependency graphs and stuff. WebDAV server implementations are really nasty.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The one in &lt;a href="http://jakarta.apache.org/slide/"&gt;Jakarta slide&lt;/a&gt; is weird and discontinued.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://jackrabbit.apache.org/jackrabbit-webdav-library.html"&gt;implementation from JackRabbit&lt;/a&gt; is full of funky factories, providers and workspaces.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://www.alfresco.com/products/aifs/"&gt;server in Alfresco&lt;/a&gt; is LGPL and &lt;i&gt;huge&lt;/i&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do you know another decent WebDAV server in Java where we can hook our own semantics underneath? &lt;/li&gt;
&lt;/ul&gt;For WebDAV clients, there is the nice &lt;a href="http://code.google.com/p/sardine/"&gt;sardine &lt;/a&gt;project which has everything you want (besides a pom - inside joke).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-7441561863863880915?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L9_DODocyUNEL8L5RiQLX5QEsl4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L9_DODocyUNEL8L5RiQLX5QEsl4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L9_DODocyUNEL8L5RiQLX5QEsl4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L9_DODocyUNEL8L5RiQLX5QEsl4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/ZME4DBYsWAw" height="1" width="1"/&gt;</content><link rel="related" href="http://semfs.semweb4j.org" title="SemFS making progress" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/7441561863863880915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=7441561863863880915" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7441561863863880915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7441561863863880915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/ZME4DBYsWAw/semfs-making-progress.html" title="SemFS making progress" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/semfs-making-progress.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UNQX44eip7ImA9WxBVE0w.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-2769276662198140432</id><published>2010-02-16T12:21:00.000+01:00</published><updated>2010-02-16T12:21:30.032+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T12:21:30.032+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="podcast" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>SoftwareArchitekTOUR (Podcast)</title><content type="html">Eine schöne deutsche Einführung zu REST gibt es in &lt;a href="http://www.heise.de/developer/artikel/Episode-17-Einstieg-in-REST-921652.html"&gt;Folge 17&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-2769276662198140432?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o7O2rkFuikwIo8QpxwmzMziS6bw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7O2rkFuikwIo8QpxwmzMziS6bw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o7O2rkFuikwIo8QpxwmzMziS6bw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7O2rkFuikwIo8QpxwmzMziS6bw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/KRdACi8fqzY" height="1" width="1"/&gt;</content><link rel="related" href="http://www.heise.de/developer/podcast/" title="SoftwareArchitekTOUR (Podcast)" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/2769276662198140432/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=2769276662198140432" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2769276662198140432?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2769276662198140432?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/KRdACi8fqzY/softwarearchitektour-podcast.html" title="SoftwareArchitekTOUR (Podcast)" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/02/softwarearchitektour-podcast.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08BSX49fyp7ImA9WxBXGEg.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-4418399022893653690</id><published>2010-01-30T14:57:00.000+01:00</published><updated>2010-01-30T14:57:38.067+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-30T14:57:38.067+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="wiki" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>iPhone Wiki Usability</title><content type="html">This week I started to experiment with the Trunk Notes wiki for iPhone. The wiki engine on the iPhone is impressive, it has many features that makes a power user happy. I really like the clever use of the application badge, which can show the number of wiki pages tagged with a certain tag, e.g. with 'ToDo".&lt;br /&gt;
&lt;br /&gt;
As mentioned in my last post, I want sync. I looked at Trunk Notes export format, and it looks nice. It uses clean UTF-8 encoding, and a simple syntax. The basic syntax is:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Header: Data&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Header: Date&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wiki text ...&lt;/div&gt;&lt;br /&gt;
So the headers look just like HTTP headers, separated by colon and terminated by new lines.&lt;br /&gt;
However, I am not entriely sure how the engine know where the real content starts, i.e., what happens if I start a page with:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Today: Big goals ahead&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Tomorrow: The world :-)&lt;/div&gt;&lt;br /&gt;
Next I looked into ways of creating an online wiki with Markdown syntax. Finally I stumbled over this sentence on the &lt;a href="http://daringfireball.net/projects/markdown/"&gt;markdown page&lt;/a&gt;: "&lt;i&gt;The overriding design goal for Markdown’s formatting syntax is to make it as readable as possible.&lt;/i&gt;" That is certainly a nice design goal and markdown syntax reads &lt;i&gt;really &lt;/i&gt;nice in a text editor, &lt;b&gt;but &lt;/b&gt;I don't want to have to type this on my iPhone.&lt;br /&gt;
&lt;br /&gt;
So, what would be a good wiki syntax for the iPhone? Having researched &lt;a href="http://semanticweb.org/wiki/WikiPipes"&gt;many wiki syntaxes and written many converters&lt;/a&gt;, I have settled for STIF. &lt;a href="http://semanticweb.org/wiki/Structured_Text_Interchange_Format"&gt;STIF is a subset of HTML that contains only the essential elements&lt;/a&gt;. No wiki syntax needs to support more, but most wiki syntax should at least support STIF. That is my opinion after having looked into many wiki syntax.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Ok, so here are the next two steps that should be taken for an iPhone wiki syntax:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Analyse the iPhone text entry capabilities&lt;/li&gt;
&lt;li&gt;Map them to STIF&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size: large;"&gt;iPhone Text Entry Analysis&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Reachable with 1 click: &lt;b&gt;A-Z&lt;/b&gt; (at the begin of a sentence), &lt;b&gt;a-z&lt;/b&gt; within a word. Equally easy: " " (space).&lt;/li&gt;
&lt;li&gt;With 2 clicks: 0-9, "-", "/", ":", ";", "(", ")", "€", "&amp;amp;", "@" '"', ".", ",", "?", "!", "'"&lt;/li&gt;
&lt;li&gt;With 3 clicks:&amp;nbsp; "[]{}#%^*+=_\|~&amp;lt;&amp;gt;$",(pound sign), (yen sign), (bullet), ".,?!'"&lt;/li&gt;
&lt;/ul&gt;Best characters to mix with letters &lt;i&gt;and &lt;/i&gt;numbers are obviusly ".,?!'", as they are reachable in both cases with 1 or 2 clicks.&lt;br /&gt;
&lt;br /&gt;
The fastest way would be to create a wiki syntax from letters only, e.g., write&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;XXX my headline&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;here we list fruits&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;o Apple&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;o Banana&lt;/div&gt;&lt;br /&gt;
to mean&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;h1&gt;my headline&lt;/h1&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;here we list fruits&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;li&gt;Apple&lt;/li&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;li&gt;Banana&lt;/li&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;
However, we see already that using "XXX" (or "Xxx", or "xxx") might (a) conflict with other syntax and (b) already requires to tap three times. Obviously we need to find out what the most frequently used formatting instructions are. For me, they are in order of appearance:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Bulleted lists (also nested ones)&lt;/li&gt;
&lt;li&gt;WikiLinks -- are perfectly handled by the iPhone keyboard&lt;/li&gt;
&lt;li&gt;http:// links (usually created by copy and paste)&lt;/li&gt;
&lt;li&gt;Strong (to find stuff easier in long wiki pages)&lt;/li&gt;
&lt;li&gt;Headlines (one or two types suffice for me)&lt;/li&gt;
&lt;/ul&gt;Let me know your preferences from the &lt;a href="http://semanticweb.org/wiki/Structured_Text_Interchange_Format#Specification"&gt;STIF specification&lt;/a&gt; before I will actually create an iPhone wiki syntax and try to convince the Trunke Notes developer to implement it as an option ;-)&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-4418399022893653690?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tPXG3_C03QO7aEkRcKxlCXtNgdI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tPXG3_C03QO7aEkRcKxlCXtNgdI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tPXG3_C03QO7aEkRcKxlCXtNgdI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tPXG3_C03QO7aEkRcKxlCXtNgdI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/C4JicSgO_6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/4418399022893653690/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=4418399022893653690" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4418399022893653690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/4418399022893653690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/C4JicSgO_6Y/iphone-wiki-usability.html" title="iPhone Wiki Usability" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.xam.de/2010/01/iphone-wiki-usability.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQERnw7cCp7ImA9WxBXFEg.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-901337796023267477</id><published>2010-01-25T15:23:00.001+01:00</published><updated>2010-01-25T23:08:27.208+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T23:08:27.208+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pkm" /><category scheme="http://www.blogger.com/atom/ns#" term="wiki" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>Personal Wiki on iPhone</title><content type="html">Since I am a new iPhone user and have used a personal wiki for years now, I want an easy way to take my wiki pages with me. &lt;br /&gt;
&lt;br /&gt;
So, here are my requirements:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;See wiki pages on iPhone&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Rendered as HTML&lt;/li&gt;
&lt;li&gt;Links should be clickable&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;iPhone app should synchronize automatically via 3G (UMTS/EDGE) and WiFi from a central location&lt;/li&gt;
&lt;li&gt;Central location should be updated automatically with content from my desktop wiki&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Bonus: Pages editable on iPhone&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;With an easy-to-remember syntax (maybe JSPWiki syntax)&lt;/li&gt;
&lt;li&gt;Changes should synchronize back to central location&lt;/li&gt;
&lt;li&gt;Central location should synchronize back to my desktop wiki&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;Next, we do some research. Google for "iphone wiki" brings way too many false hits for wikis about the iPhone or for Wikipedia clients. So we search for "personal wiki iphone" and find the following apps:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MyWiki &lt;/b&gt;(&lt;a href="http://mywikiapp.com/" target="_blank"&gt;http://mywikiapp.com/&lt;/a&gt;) 1.1 [&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=CRTR9nYyxbI&amp;amp;offerid=146261&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=1826&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fde%252Fapp%252Fmywiki%252Fid334272273%253Fmt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"&gt;AppStore link&lt;/a&gt;]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Editor seems to support bold, italic, paragrpahs and bullet points, but no headlines.&lt;/li&gt;
&lt;li&gt;"Export your articles, including links and images to a good looking HTML mini site that can be viewed in your favorite web browser"&lt;/li&gt;
&lt;li&gt;No import mentioned.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary: No way to get my exixsting wiki content into it.&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Trunk Notes&lt;/b&gt; (&lt;a href="http://www.appsonthemove.com/trunk/" target="_blank"&gt;http://www.appsonthemove.com/&lt;wbr&gt;&lt;/wbr&gt;trunk/&lt;/a&gt;) [&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=CRTR9nYyxbI&amp;amp;offerid=146261&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=1826&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fde%252Fapp%252Ftrunk-notes%252Fid302880785%253Fmt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"&gt;AppStore link&lt;/a&gt;]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://daringfireball.net/projects/markdown/syntax" target="_blank"&gt;MarkDown&lt;/a&gt; syntax.&lt;/li&gt;
&lt;li&gt;Links to other pages, images stored in app, URLs.&lt;/li&gt;
&lt;li&gt;Via WiFi sharing: Backup your wiki as a zip file - &lt;i&gt;does not include images in backups&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Via WiFi sharing: Upload a zip of text files&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary: Easy automatic sync missing, but I'll give it a try.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;PicoWiki &lt;/b&gt;(&lt;a href="http://www.picowiki.com/%29" target="_blank"&gt;http://www.picowiki.com/)&lt;/a&gt; [no app, iPhone optimized web page only]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Free, painless account creation&lt;/li&gt;
&lt;li&gt;Easy way to export all pages as a zip file, just download it.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;But no way to import them.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Syntax seems to be &lt;a href="http://daringfireball.net/projects/markdown/syntax" target="_blank"&gt;MarkDown&lt;/a&gt; (a quite nice one).&lt;/li&gt;
&lt;li&gt;DonationWare: You pay a fair price.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary: As there is no way to work offline with my iPhone on the wiki pages, I stopped reviewing this.&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;WikiTouch &lt;/b&gt;(&lt;a href="http://wikitouch.com/" target="_blank"&gt;http://wikitouch.com&lt;/a&gt;) [&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=CRTR9nYyxbI&amp;amp;offerid=146261&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=1826&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fde%252Fapp%252Fwikitouch%252Fid342058885%253Fmt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"&gt;AppStore link&lt;/a&gt;]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sync with their own hosted wiki&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Nice integration with existing apps (mail, foto, audio note)&lt;/li&gt;
&lt;li&gt;Unknown wiki syntax&lt;/li&gt;
&lt;li&gt;Slightly ugly user expeirence (blocky font, lime green background)&lt;/li&gt;
&lt;li&gt;Exports as nice RSS 2.0 XML &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Summary: It might work. I will try it.&lt;/b&gt;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Cannot log in to web page. Ugly authorisation form asks for username and password. Does not work.&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;&lt;b&gt;&lt;a href="http://m.integral.virishi.net/knowlege_go_put_your_wiki_your_iphone" target="_blank"&gt;Do it yourself&lt;/a&gt;&lt;/b&gt;&amp;nbsp; [no, this is not an app]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;A blog post that explains how to store a dump of HTML pages, showing your wiki content, on your iPhone.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary: No way to edit pages.&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Evernote &lt;/b&gt;(&lt;a href="http://evernote.com/" target="_blank"&gt;http://evernote.com&lt;/a&gt;)&amp;nbsp; [&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=CRTR9nYyxbI&amp;amp;offerid=146261&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=1826&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fde%252Fapp%252Fevernote%252Fid281796108%253Fmt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"&gt;AppStore link&lt;/a&gt;]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In this list just for completeness. Evernote cannot handle links between notes. Nor does it handle wiki syntax. It is not a wiki.&lt;/li&gt;
&lt;li&gt;Evernote is a notebook with formatted text, fotos, audio notes.&lt;/li&gt;
&lt;li&gt;Syncs easly between devices (PC, Mac, iPhone, online, other phones, ...)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary: No wiki links. No deal.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;So, that leaves me with Trunk Notes and WikiTouch. I'll post a comment here once I got more experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-901337796023267477?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t498DC74rR1RsaFDnnj2fEA77Vw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t498DC74rR1RsaFDnnj2fEA77Vw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t498DC74rR1RsaFDnnj2fEA77Vw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t498DC74rR1RsaFDnnj2fEA77Vw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/bQY6_TMMKes" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/901337796023267477/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=901337796023267477" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/901337796023267477?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/901337796023267477?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/bQY6_TMMKes/personal-wiki-on-iphone.html" title="Personal Wiki on iPhone" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.xam.de/2010/01/personal-wiki-on-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQBQnk7eyp7ImA9WxBXE0g.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-5925393145066968943</id><published>2010-01-24T18:15:00.000+01:00</published><updated>2010-01-24T18:15:53.703+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-24T18:15:53.703+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>Risiko-Spiel: Verteidigen mit einem oder zwei Würfeln?</title><content type="html">&amp;nbsp;Gestern haben wir Risiko gespielt. Heute habe ich stochastisch durchgerechnet, bei welchen Angriffswürfeln man lieber mit einem Wüfel und wann lieber mit zwei Wüfeln verteidigt.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Bei Angriff mit (1,1) ... (4,3) ist die beste Verteidigung mit 2 Würfeln.&lt;/li&gt;
&lt;li&gt;Bei Angriff mit (4,4) ist die beste Verteidigung mit 1 Würfel.&lt;/li&gt;
&lt;li&gt;Bei Angriff mit (5,1) ... (5,3) ist die beste Verteidigung mit 2 Würfeln.&lt;/li&gt;
&lt;li&gt;Bei Angriff mit (5,4) ... (5,5) ist die beste Verteidigung mit 1 Würfel.&lt;/li&gt;
&lt;li&gt;Bei Angriff mit (6,1) ... (6,2) ist die beste Verteidigung mit 2 Würfeln.&lt;/li&gt;
&lt;li&gt;Bei Angriff mit (6,3) ... (6,6) ist die beste Verteidigung mit 1 Würfel. &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Related Work:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.johannes-reinhard.de/media/download/Risiko.pdf"&gt;Stochastische Analyse des Risikospiels&lt;/a&gt; von &lt;a href="http://www.johannes-reinhard.de/download.html"&gt;Johannes Reinhard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-5925393145066968943?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HX5-HoY8v115Mel3fcySykARNXI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HX5-HoY8v115Mel3fcySykARNXI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HX5-HoY8v115Mel3fcySykARNXI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HX5-HoY8v115Mel3fcySykARNXI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/P1D3EPi2d8s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/5925393145066968943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=5925393145066968943" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5925393145066968943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5925393145066968943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/P1D3EPi2d8s/risiko-spiel-verteidigen-mit-einem-oder.html" title="Risiko-Spiel: Verteidigen mit einem oder zwei Würfeln?" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.xam.de/2010/01/risiko-spiel-verteidigen-mit-einem-oder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBQH8-fyp7ImA9WxBQFEQ.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-952039981823166623</id><published>2010-01-14T19:24:00.000+01:00</published><updated>2010-01-14T19:24:11.157+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-14T19:24:11.157+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>iPhone and Music</title><content type="html">So, for a few days I now own an iPhone. The first experience have not been very smooth. The sync in iTunes is sooooo slow, that I believe I can never ever get the space full.&lt;br /&gt;
Luckily, the latest MediaMonkey 3.2 (which is far better than iTunes anyway) syncs with the iPhone 3GS. Puuh. And for whatever reasons it is about 10-20 times faster. Really, that fast. I just transferred 7 GB of music within about 5 minutes. Maybe 7 minutes. Now I can use music. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-952039981823166623?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nNE1Xuq_vrhPh---WppOvrW9Pr0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nNE1Xuq_vrhPh---WppOvrW9Pr0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nNE1Xuq_vrhPh---WppOvrW9Pr0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nNE1Xuq_vrhPh---WppOvrW9Pr0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/f13ZE47At0s" height="1" width="1"/&gt;</content><link rel="related" href="http://www.mediamonkey.com" title="iPhone and Music" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/952039981823166623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=952039981823166623" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/952039981823166623?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/952039981823166623?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/f13ZE47At0s/iphone-and-music.html" title="iPhone and Music" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/01/iphone-and-music.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIAQHo8cCp7ImA9WxBRFU8.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-8264295545595732139</id><published>2010-01-03T15:05:00.000+01:00</published><updated>2010-01-03T15:05:41.478+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-03T15:05:41.478+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cds" /><title>The Vision Behind CDS</title><content type="html">PKM and knowledge work in general will move away from the tight coupling of "one formalism to one tool" and instead move to generic formalisms that can be edited in a number of tools. Such generic formalisms allow new scientific or personal insights as well as providing cheaper ways for storing, retrieving and transforming knowledge.&lt;br /&gt;
&lt;br /&gt;
In an ideal future world, a broad number of PKM tools (or simply tools used for PKM tasks) can export their data as CDS models and import from CDS models. A tool that does not understand the semantics of some Relations simply falls back to process it as the next super-Relation that it can handle. As an example, the CDS model exported by a tagging-aware application might use the Relation [has tag] to export the assignment from a file to a tag. The importing application might not understand [has tag] but [has annotation]. So it renders the tag assignments as annotations (e. g., as call-outs in a mind-map). The user can edit the tag names here. Later, the knowledge model can be re-opened in the first application with correctly renamed tags, which still used the [has tag] Relation. Of course, newly added tags would become merely annotations as the creating should not create Statements with Relations which’s consequences it cannot understand. Documents, presentations and outlines can be generated from personal knowledge models.&lt;br /&gt;
&lt;br /&gt;
In a next cultural step, documents are no longer exchanged. Instead, knowledge models are published and interlinked in a fine-granular manner to other people’s work. Academia moves away from documents and focuses more on distributed, formal argumentation. Schools start to teach modelling with the same rigour as reading, writing and math. The global population shifts their cognitive limits, sees new solutions to old problems or better arguments for old solutions to old problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-8264295545595732139?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l-7ndA-RugFmedHA9ICeRtAoweA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-7ndA-RugFmedHA9ICeRtAoweA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l-7ndA-RugFmedHA9ICeRtAoweA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-7ndA-RugFmedHA9ICeRtAoweA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/jKum83KNr54" height="1" width="1"/&gt;</content><link rel="related" href="http://cds.xam.de" title="The Vision Behind CDS" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/8264295545595732139/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=8264295545595732139" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8264295545595732139?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8264295545595732139?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/jKum83KNr54/vision-behind-cds.html" title="The Vision Behind CDS" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2010/01/vision-behind-cds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFQn49fCp7ImA9WxBSFUQ.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-8429859006388046734</id><published>2009-12-23T19:21:00.000+01:00</published><updated>2009-12-23T19:21:53.064+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-23T19:21:53.064+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="calpano" /><title>Wie können wir dem individuellen Wissensarbeiter helfen, mit seinem Wissen und seiner Zeit besser umzugehen?</title><content type="html">Auch im Unternehmen werden wesentliche Teile der Wissenserzeugung, Wissensverarbeitung und Wissensnutzung von einzelnen Wissensarbeitern geleistet. Das Team bietet dabei einen Rahmen für Austausch und Verteilung von Aufgaben – letzlich muss sich aber jeder selbst organisieren und sein persönliches Wissens managen. Auch die &lt;a href="http://www.calpano.de/"&gt;Selbstorganisation von Aufgaben, Prioritäten und Zielen&lt;/a&gt; trägt einen entscheidenden Teil zum Unternehmenserfolg bei. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Forschungsthemen&lt;br /&gt;
&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Persönliches Wissensmanagement und Selbstorganisation&lt;/li&gt;
&lt;li&gt;Semantic Desktop&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Visuelle Wissensorganisation&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Affective Computing&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Intelligentes Zeitmanagement &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-8429859006388046734?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-rmhy6vLXspX16YCW1A6EfkNLRU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-rmhy6vLXspX16YCW1A6EfkNLRU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-rmhy6vLXspX16YCW1A6EfkNLRU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-rmhy6vLXspX16YCW1A6EfkNLRU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/ezYDK-WL1A8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/8429859006388046734/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=8429859006388046734" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8429859006388046734?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/8429859006388046734?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/ezYDK-WL1A8/wie-konnen-wir-dem-individuellen.html" title="Wie können wir dem individuellen Wissensarbeiter helfen, mit seinem Wissen und seiner Zeit besser umzugehen?" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/12/wie-konnen-wir-dem-individuellen.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UNRXY9eip7ImA9WxBXFEg.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-7577444374455272919</id><published>2009-12-09T01:00:00.001+01:00</published><updated>2010-01-25T23:41:34.862+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T23:41:34.862+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><title>"JavaSpoon" - releasing some code snippets</title><content type="html">Whilecleaning up my hard drive, much Java code is finally getting deleted. Some snippets I keep and put them online, so that others can re-use it or just learn from it. I re-use code sample from the web very often, so giving back might help others, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-7577444374455272919?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OB_q-vy7A3829rONXoUHkLS_B70/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OB_q-vy7A3829rONXoUHkLS_B70/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OB_q-vy7A3829rONXoUHkLS_B70/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OB_q-vy7A3829rONXoUHkLS_B70/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/nXbpJ5S0rtE" height="1" width="1"/&gt;</content><link rel="related" href="https://code.google.com/p/javaspoon/w/list" title="&quot;JavaSpoon&quot; - releasing some code snippets" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/7577444374455272919/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=7577444374455272919" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7577444374455272919?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/7577444374455272919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/nXbpJ5S0rtE/javaspoon-releasing-some-code-snippets.html" title="&quot;JavaSpoon&quot; - releasing some code snippets" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/12/javaspoon-releasing-some-code-snippets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcGQHo_eSp7ImA9WxBTEk8.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-6379548974744517058</id><published>2009-12-07T22:07:00.000+01:00</published><updated>2009-12-07T22:07:01.441+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T22:07:01.441+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><title>Complexity kills</title><content type="html">&lt;blockquote&gt;&lt;em&gt;"Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges, and it causes end-user and administrator frustration." -- Ray Ozzie, via &lt;a href="http://www.heise.de/newsticker/meldung/Als-PLATO-aus-der-Hoehle-trat-20-Jahre-Lotus-Notes-878321.html"&gt;heise newsticker&lt;/a&gt;&lt;br /&gt;
&lt;/em&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-6379548974744517058?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BzIl5zKgdnvD5kh5N3ivZGJ5A2w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BzIl5zKgdnvD5kh5N3ivZGJ5A2w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BzIl5zKgdnvD5kh5N3ivZGJ5A2w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BzIl5zKgdnvD5kh5N3ivZGJ5A2w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/_goaJmzF7lY" height="1" width="1"/&gt;</content><link rel="related" href="http://www.heise.de/newsticker/meldung/Als-PLATO-aus-der-Hoehle-trat-20-Jahre-Lotus-Notes-878321.html" title="Complexity kills" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/6379548974744517058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=6379548974744517058" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6379548974744517058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/6379548974744517058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/_goaJmzF7lY/complexity-kills.html" title="Complexity kills" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/12/complexity-kills.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUAQHY5eyp7ImA9WxNbE0s.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-5451000469928599407</id><published>2009-11-16T11:42:00.000+01:00</published><updated>2009-11-16T11:44:01.823+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-16T11:44:01.823+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="phd" /><category scheme="http://www.blogger.com/atom/ns#" term="motivation" /><title>Great Problems</title><content type="html">Our world is constantly changing and the rate of change has constantly increased.&lt;br /&gt;Today, changes are in large part caused by the humans themselves, due to the growth of their global population and the ability to use technology to change matter, i. e., in agriculture, energy production, goods production, and transportation. Part of the ability to steer the forces of nature and humans in controlled ways can be attributed to the invention of management:&lt;br /&gt;&lt;blockquote&gt;"The most important contribution of management in the 20th century was to increase manual worker productivity fifty-fold (Drucker 1999)." &lt;/blockquote&gt;The fast rate of change in the environment and in human societies causes great Great Problems wealth, but also great problems, e. g., social problems, economic problems and ecological problems (Vester 2000). As an example, very few people had foreseen or understood the financial crisis in 2008. Many bankers said in interviews, that nobody could understand the complex relationships of markets and financial products any longer. Humans must tackle the pressing ecological and economical problems.&lt;br /&gt;&lt;br /&gt;Bush (1945, p. 108) summarised the motivation for this thesis nicely:&lt;blockquote&gt; "Presumably man's spirit should be elevated if he can better review his shady past and analyze more completely and objectively his present problems. He has built a civilization so complex that he needs to mechanize his records more fully if he is to push his experiment to its logical conclusion and not merely become bogged down part way there by overtaxing his limited memory.". &lt;/blockquote&gt;Drucker (1999) puts it more optimistic and foresees: &lt;blockquote&gt;"The most important contribution of management in the 21st century will be to increase knowledge worker productivity -- hopefully by the same percentage. [...] The methods, however, are totally different from those that increased the productivity of manual workers."&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;What could be methods to increase the productivity of knowledge workers? &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-5451000469928599407?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wuw8R0b3cswC-zgUoq-Qf4cZ6l0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wuw8R0b3cswC-zgUoq-Qf4cZ6l0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wuw8R0b3cswC-zgUoq-Qf4cZ6l0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wuw8R0b3cswC-zgUoq-Qf4cZ6l0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/gemO_9mmy_I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/5451000469928599407/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=5451000469928599407" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5451000469928599407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5451000469928599407?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/gemO_9mmy_I/great-problems.html" title="Great Problems" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/11/great-problems.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AFRns6eip7ImA9WxNUGUo.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-2220828348048043981</id><published>2009-11-11T21:31:00.003+01:00</published><updated>2009-11-11T21:35:17.512+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-11T21:35:17.512+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dev" /><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="idea" /><title>Every click counts</title><content type="html">A shot post on usability. Something that must be said. In user interfaces, &lt;span style="font-weight: bold;"&gt;every click counts&lt;/span&gt;.&lt;br /&gt;That means, whenever I ever clicked on anything, the application must try everything to apply the semantics of this click forever.&lt;br /&gt;The application must exploit and persist every decision a user has made -- until she expresses the contrary.&lt;br /&gt;There should never be the need to run the same sequence of user interface commands again and again.&lt;br /&gt;&lt;br /&gt;Practically, if I do spell-checking, the UI could remember my choice and apply the same spell-checking again, when I re-run spell-checking. Or even better: Highlight my choice so that I can press just enter. Or ask me, if this choice should be applied forever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-2220828348048043981?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rg00syJJxM6lLzdOYOAjuKRf-Io/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rg00syJJxM6lLzdOYOAjuKRf-Io/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rg00syJJxM6lLzdOYOAjuKRf-Io/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rg00syJJxM6lLzdOYOAjuKRf-Io/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/LOgYv4Va9NQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/2220828348048043981/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=2220828348048043981" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2220828348048043981?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/2220828348048043981?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/LOgYv4Va9NQ/every-click-counts.html" title="Every click counts" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.xam.de/2009/11/every-click-counts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EAQXc_fyp7ImA9WxNVF0g.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-537571332204675227</id><published>2009-10-28T18:39:00.002+01:00</published><updated>2009-10-28T18:40:40.947+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T18:40:40.947+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pkm" /><title>Loss of relevance for personal notes</title><content type="html">From summer 2008 to Autumn 2009, 55 people have been interviewed with an online questionnaire the following questions (among others):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A) In one week, how many personal items do you write down?&lt;/li&gt;&lt;li&gt;B) Of these personal notes, how many are still relevant (in percent) &lt;ul&gt;&lt;li&gt;... after one day?&lt;/li&gt;&lt;li&gt;... after one week?&lt;/li&gt;&lt;li&gt;... after one month?&lt;/li&gt;&lt;li&gt;... after one year?&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The average values for (B) are 71,55%, 51,73%, 36,09%, 20,55% with rather high standard deviations (0,223, 0,265, 0,278, 0,243).&lt;br /&gt;However, when computing the loss of relevance from one time point to another one we get:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Loss of relevance on first day: 28,45% (0,223)&lt;/li&gt;&lt;li&gt;In the next six days: 19,82% (0,161)&lt;/li&gt;&lt;li&gt;In the next three weeks: 15,64% (0,139)&lt;/li&gt;&lt;li&gt;In the next 11 months: 15,55% (0,146)&lt;/li&gt;&lt;/ul&gt;with somewhat nicer standard deviations (in parentheses). Interpolating this we get the fraction of relevant knowledge after &lt;span style="font-style: italic;"&gt;n&lt;/span&gt; days as depicted in this chart:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vlq_h3spDco/SuiB2qc9HYI/AAAAAAAAD94/tR9gX8SifsQ/s1600-h/Microsoft+Excel+-+PKM+Interview+-+loss+of+relevance.xls+28.10.2009+182935.jpg"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_vlq_h3spDco/SuiB2qc9HYI/AAAAAAAAD94/tR9gX8SifsQ/s400/Microsoft+Excel+-+PKM+Interview+-+loss+of+relevance.xls+28.10.2009+182935.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Assuming one creates 10 new personal notes every day, then the personal notes collection contains after 100 days 1000 notes of which 389 (38,9%) are relevant. After 500 days, 1368 of 5000 notes (27%) are relevant.&lt;div style="clear: both; text-align: center;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-537571332204675227?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9rmr1IqvFdyGh9seOxet9s-4V0s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9rmr1IqvFdyGh9seOxet9s-4V0s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9rmr1IqvFdyGh9seOxet9s-4V0s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9rmr1IqvFdyGh9seOxet9s-4V0s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/qXRGzfvXu5s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/537571332204675227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=537571332204675227" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/537571332204675227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/537571332204675227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/qXRGzfvXu5s/from-summer-2008-to-autumn-2009-55.html" title="Loss of relevance for personal notes" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_vlq_h3spDco/SuiB2qc9HYI/AAAAAAAAD94/tR9gX8SifsQ/s72-c/Microsoft+Excel+-+PKM+Interview+-+loss+of+relevance.xls+28.10.2009+182935.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/10/from-summer-2008-to-autumn-2009-55.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AFQXw7fip7ImA9WxNQF0U.&quot;"><id>tag:blogger.com,1999:blog-5858414.post-5515007252221678968</id><published>2009-09-24T12:53:00.001+02:00</published><updated>2009-09-24T12:55:10.206+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-24T12:55:10.206+02:00</app:edited><title>From Documents to Knowledge Models</title><content type="html">Aha, mal wieder ein &lt;a href="http://www.faz.net/s/Rub4C34FD0B1A7E46B88B0653D6358499FF/Doc%7EE878D7F152F224C9FA602A0DAC5BCDB0E%7EATpl%7EEcommon%7EScontent.html"&gt;Beitrag&lt;/a&gt; in Richtung &lt;a href="http://www.aifb.uni-karlsruhe.de/Publikationen/showPublikation_english?publ_id=1465"&gt;"From Documents to Knowledge Models&lt;/a&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5858414-5515007252221678968?l=blog.xam.de' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SfBrpEBquLxpnKniud-obPDXQ5o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SfBrpEBquLxpnKniud-obPDXQ5o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SfBrpEBquLxpnKniud-obPDXQ5o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SfBrpEBquLxpnKniud-obPDXQ5o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MaxVlkel/~4/4psdaEFJXFU" height="1" width="1"/&gt;</content><link rel="related" href="http://www.faz.net/s/Rub4C34FD0B1A7E46B88B0653D6358499FF/Doc~E878D7F152F224C9FA602A0DAC5BCDB0E~ATpl~Ecommon~Scontent.html" title="From Documents to Knowledge Models" /><link rel="replies" type="application/atom+xml" href="http://blog.xam.de/feeds/5515007252221678968/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5858414&amp;postID=5515007252221678968" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5515007252221678968?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5858414/posts/default/5515007252221678968?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MaxVlkel/~3/4psdaEFJXFU/from-documents-to-knowledge-models.html" title="From Documents to Knowledge Models" /><author><name>Max Völkel</name><uri>http://www.blogger.com/profile/04168131948263827812</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01010621033055910663" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.xam.de/2009/09/from-documents-to-knowledge-models.html</feedburner:origLink></entry></feed>
