<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title type="text" xml:lang="en">SKURO! -- Shading lights</title>
    
    <link type="text" href="http://skuro.tk" rel="alternate" />
    <updated>2012-05-14T15:28:23+02:00</updated>
    <id>http://skuro.tk</id>
    <author>
        <name>Carlo Sciolla</name>
    </author>
    <rights>Copyright (c) 2010-2011 Carlo Sciolla</rights>
    
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Skuro" /><feedburner:info uri="skuro" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
  <title>Legacy libraries for your maven build</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/SH0C52LJ6Uo/" />
  <updated>2012-05-14T00:00:00+02:00</updated>
  <id>http://skuro.tk/2012/05/14/legacy-libraries-for-your-maven-build/</id>
  
<content type="html">&lt;h1&gt;Legacy libraries&lt;/h1&gt;

&lt;p&gt;Dealing with legacy code is always tricky, and adapting your tooling to leverage them is sometimes plain hard. Especially when you're building your projects with Maven and your code happens to depend on some ancient library which appear to be unknown to the Internet™, you probably have to figure out how to tell Maven where to find that damn library. This is also the problem when dealing with e.g. proprietary third party libraries which don't ship with a POM, therefore they don't mavenly exist.&lt;/p&gt;

&lt;h1&gt;Local repositories FTW&lt;/h1&gt;

&lt;p&gt;There are a number of possible solutions to the above mentioned problem, which ideally involve a shared, remote artifact repository where to deploy the JAR file that causes you headaches. Recently, I found myself in the need of creating (yet another) Maven build around some &lt;a href="http://www.alfresco.com"&gt;Alfresco&lt;/a&gt;, to enable &lt;a href="http://skuro.tk/lambdalf/"&gt;Lambdalf&lt;/a&gt; to build its Clojure sources. The rocky road to Maven for Alfresco is still long, and as a result you find yourself dealing with some iffy libraries when coding against Alfresco. Some examples, just opening up the WAR files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;truezip.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mybaties-3.0.4-patched.jar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acegi-security-0.8.2_patched.jar&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;One solution I found that doesn't require setting up your publicly available &lt;a href="http://www.sonatype.org/nexus/"&gt;Nexus&lt;/a&gt; repository, nor using someone else's &lt;a href="http://www.jfrog.com/products.php"&gt;Artifactory&lt;/a&gt;, is to provide the problematic JARs in a maven repository as part of your sources. Suppose you have a mysterious &lt;code&gt;fluff.jar&lt;/code&gt; library you need to include in your classpath, here's how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;place the JAR file in &lt;code&gt;src/main/lib/fluff/fluff/unknown/fluff-unknown.jar&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;setup the dependency in your POM:&lt;/p&gt;

&lt;p&gt;  &lt;dependencies&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;fluff&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;fluff&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;unknown&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  &lt;/dependencies&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;still in your POM, enable the local repository:&lt;/p&gt;

&lt;p&gt;  &lt;repositories&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;repository&amp;gt;
  &amp;lt;id&amp;gt;legacy-artifacts&amp;lt;/id&amp;gt;
  &amp;lt;url&amp;gt;file://${project.basedir}/src/main/lib&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;  &lt;/repositories&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Voil&amp;aacute;. You just created a local, portable repository in your sources and instructed Maven to look there for artifacts.&lt;/p&gt;

&lt;h1&gt;License&lt;/h1&gt;

&lt;p&gt;A couple of golden rules for all the cowboy programmers out there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;always, always, &lt;strong&gt;always check if the license allows you to redistribute the libraries&lt;/strong&gt; you're going to include in your project&lt;/li&gt;
&lt;li&gt;never, never, &lt;strong&gt;never distribute a piece of software you're not entitled to give away&lt;/strong&gt; and &lt;strong&gt;attach the license of all third party libraries&lt;/strong&gt; along with your project&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That said, I'll leave you to your local Maven repositories. Happy building!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=SH0C52LJ6Uo:qxj-ncwnTGQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=SH0C52LJ6Uo:qxj-ncwnTGQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=SH0C52LJ6Uo:qxj-ncwnTGQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=SH0C52LJ6Uo:qxj-ncwnTGQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/SH0C52LJ6Uo" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2012/05/14/legacy-libraries-for-your-maven-build/</feedburner:origLink></entry>


<entry>
  <title>Debug your build with the plan maven plugin</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/G0_Gmaf_OPw/" />
  <updated>2012-05-08T00:00:00+02:00</updated>
  <id>http://skuro.tk/2012/05/08/debug-your-build-with-the-plan-maven-plugin/</id>
  
<content type="html">&lt;h1&gt;Contention over configuration&lt;/h1&gt;

&lt;p&gt;While &lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt; put it &lt;a href="http://www.thoughtworks.com/sites/www.thoughtworks.com/files/images/52/radar-march-2012-tools.jpg"&gt;on hold&lt;/a&gt;, there are still a number of occasions where a normal Java guy such as the truly yours have to face refactorings of ginormus Maven builds. In my company, for instance, I'm now in the situation where I need to speed up the build of one component whose project structure involves 27 POM files, with up to 4 levels of nesting. Needless to say, there are tens of plugin executions, plugins and all the possible Maven black magic you can think of. The default options for build introspection (help plugin, enable debug, etc.) left me helpless in the middle of a gargantuan build execution log file.&lt;/p&gt;

&lt;h1&gt;Plan plugin FTW&lt;/h1&gt;

&lt;p&gt;I ended up writing a small plugin to help me debugging the build by dumping the execution plan. I originally named it &lt;a href="http://plan-maven-plugin.skuro.tk"&gt;&lt;code&gt;plan-maven-plugin&lt;/code&gt;&lt;/a&gt;, and put all the sources on &lt;a href="https://github.com/skuro/plan-maven-plugin"&gt;github&lt;/a&gt;. As the plugin is already on &lt;a href="http://search.maven.org/#artifactdetails%7Ctk.skuro%7Cplan-maven-plugin%7C1.1%7Cmaven-plugin"&gt;Maven Central&lt;/a&gt;, you only need to place the following in your &lt;code&gt;settings.xml&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;pluginGroups&amp;gt;
  &amp;lt;pluginGroup&amp;gt;tk.skuro&amp;lt;/pluginGroup&amp;gt;
&amp;lt;/pluginGroups&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/dthume"&gt;David Thume&lt;/a&gt;, this is what it looks like now:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ mvn plan:plan -Dgoals=clean,javadoc:jar,sources:jar,package,gpg:sign
...
[INFO] --- plan-maven-plugin:1.1:plan (default-cli) @ plan-maven-plugin ---
[INFO] 
[INFO] Current lifecycle:
[INFO]     pre-clean
[INFO]     clean
[INFO]     post-clean
[INFO]     validate
[INFO]     initialize
[INFO]     generate-sources
[INFO]     process-sources
[INFO]     generate-resources
[INFO]     process-resources
[INFO]     compile
[INFO]     process-classes
[INFO]     generate-test-sources
[INFO]     process-test-sources
[INFO]     generate-test-resources
[INFO]     process-test-resources
[INFO]     test-compile
[INFO]     process-test-classes
[INFO]     test
[INFO]     prepare-package
[INFO]     package
[INFO]     pre-integration-test
[INFO]     integration-test
[INFO]     post-integration-test
[INFO]     verify
[INFO]     install
[INFO]     deploy
[INFO]     
[INFO] Execution plan:
[INFO]     [clean] org.apache.maven.plugins:maven-clean-plugin:clean (default-clean)
[INFO]     [-] org.apache.maven.plugins:maven-javadoc-plugin:jar (default-cli)
[INFO]     [-] org.apache.maven.plugins:maven-source-plugin:jar (default-cli)
[INFO]     [validate] org.apache.maven.plugins:maven-enforcer-plugin:enforce (enforce-maven)
[INFO]     [generate-resources] org.apache.maven.plugins:maven-plugin-plugin:descriptor (default-descriptor)
[INFO]     [process-resources] org.apache.maven.plugins:maven-resources-plugin:resources (default-resources)
[INFO]     [compile] org.apache.maven.plugins:maven-compiler-plugin:compile (default-compile)
[INFO]     [process-test-resources] org.apache.maven.plugins:maven-resources-plugin:testResources (default-testResources)
[INFO]     [test-compile] org.apache.maven.plugins:maven-compiler-plugin:testCompile (default-testCompile)
[INFO]     [test] org.apache.maven.plugins:maven-surefire-plugin:test (default-test)
[INFO]     [package] org.apache.maven.plugins:maven-jar-plugin:jar (default-jar)
[INFO]     [package] org.apache.maven.plugins:maven-plugin-plugin:addPluginArtifactMetadata (default-addPluginArtifactMetadata)
[INFO]     [-] org.apache.maven.plugins:maven-gpg-plugin:sign (default-cli)
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I still have a long way to go before I can bring my build to acceptable performance levels, but surely enough this will give me much more insights on what's possibly going wrong. Enjoy!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=G0_Gmaf_OPw:IzXrEz0F8kY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=G0_Gmaf_OPw:IzXrEz0F8kY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=G0_Gmaf_OPw:IzXrEz0F8kY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=G0_Gmaf_OPw:IzXrEz0F8kY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/G0_Gmaf_OPw" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2012/05/08/debug-your-build-with-the-plan-maven-plugin/</feedburner:origLink></entry>


<entry>
  <title>Spring surf Clojure and Alfresco H2 support now in Maven Central</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/5iFN9hfQCHk/" />
  <updated>2012-03-06T00:00:00+01:00</updated>
  <id>http://skuro.tk/2012/03/06/spring-surf-clojure-and-alfresco-h2-support-now-in-maven-central/</id>
  
<content type="html">&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; I had to change the groupId of both
  &lt;a href="https://github.com/skuro/alfresco-h2-support"&gt;h2-support&lt;/a&gt; and
  &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure"&gt;spring-webscripts-addon-clojure&lt;/a&gt;. Good
  news is, they're now available on Maven Central!&lt;/p&gt;

&lt;h2&gt;Build management dilemma&lt;/h2&gt;

&lt;p&gt;Part of &lt;a href="http://www.backbase.com"&gt;my company&lt;/a&gt; offering is an Alfresco
based CMS, which we build the
&lt;a href="code.google.com/p/maven-alfresco-archetypes/"&gt;maven way&lt;/a&gt;. While this
is already a nicely integrated build with the rest of the other
products, I currently find it annoying to require a database to be
installed wherever the project is built (ubiquitous MySQL installed
locally on my laptop, on the CI server, etc.). As I'm maintaining an
H2 &lt;a href="https://github.com/skuro/alfresco-h2-support"&gt;compatibility module&lt;/a&gt;
for Alfresco it's natural for me to integrate and use it.&lt;/p&gt;

&lt;p&gt;There was only one thing blocking this process, and that's the maven
repository where such artifact were deployed.&lt;/p&gt;

&lt;h2&gt;Deploy on Central&lt;/h2&gt;

&lt;p&gt;As much as I love &lt;a href="http://clojars.org"&gt;Clojars&lt;/a&gt;, it still requires to be manually configured
when dealing with a pure Maven build. Since it's not quite an option to add
an artifacts repository for something as small as &lt;code&gt;h2-support&lt;/code&gt;, I
decided to just follow the guidelines for Maven Central sync on
&lt;a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide"&gt;OSS Sonatype&lt;/a&gt; and
rename the group ID to resabmle my personal web domain. This means I
did dirty, dirty things that bought me an entire eternity in hell,
such as retagging both
&lt;a href="https://github.com/skuro/alfresco-h2-support/tree/v1.1"&gt;v1.1&lt;/a&gt; and
&lt;a href="https://github.com/skuro/alfresco-h2-support/tree/v1.2"&gt;v1.2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, as the only change in the POM is "non functional" such as
description, developers and such, it's not going to hurt much I
believe.&lt;/p&gt;

&lt;p&gt;This move is reflected also in the currently unreleased
&lt;code&gt;spring-webscripts-addon-clojure&lt;/code&gt;, so if you'll be using it or
you need &lt;code&gt;h2-support&lt;/code&gt; remember to use the &lt;code&gt;tk.skuro.*&lt;/code&gt; group IDs, and
you won't need to add a &lt;code&gt;&amp;lt;repository&amp;gt;&lt;/code&gt; to your POM ever again.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a href="http://www.sonatype.com"&gt;Sonatype&lt;/a&gt; for the awesome service!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=5iFN9hfQCHk:lno8hOQKQMM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=5iFN9hfQCHk:lno8hOQKQMM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=5iFN9hfQCHk:lno8hOQKQMM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=5iFN9hfQCHk:lno8hOQKQMM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/5iFN9hfQCHk" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2012/03/06/spring-surf-clojure-and-alfresco-h2-support-now-in-maven-central/</feedburner:origLink></entry>


<entry>
  <title>H2 support updated for Alfresco 4.x</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/sOYiLbUZzyk/" />
  <updated>2011-12-14T00:00:00+01:00</updated>
  <id>http://skuro.tk/2011/12/14/h2-support-for-alfresco-4x/</id>
  
<content type="html">&lt;h2&gt;H2 Support reloaded&lt;/h2&gt;

&lt;p&gt;Some time ago I &lt;a href="/2011/08/03/h2-embedded-db-and-alfresco-3-4/"&gt;announced&lt;/a&gt; a &lt;a href="https://github.com/skuro/alfresco-h2-support"&gt;module&lt;/a&gt; to enhance &lt;a href="http://www.alfresco.com"&gt;Alfresco&lt;/a&gt; in order to support H2 as its persistent data storage. While it was successfully tested against Alfresco v3.4 and v3.5, &lt;a href="http://www.mindthegab.com"&gt;@mindthegab&lt;/a&gt; pointed me out that Alfresco v4.x wasn't even starting when using the H2 module.&lt;/p&gt;

&lt;p&gt;A quick look at the PostgreSQL scripts and configuration of Alfresco 4 revealed that they were indeed radically changed in the new release, so that an update was necessary.&lt;/p&gt;

&lt;h2&gt;Matching versions&lt;/h2&gt;

&lt;p&gt;Since 3.4+ and 4.x version series have quite different configuration, you need to use a different version of the h2 module depending on the Alfresco version you're running, namely:&lt;/p&gt;

&lt;table&gt;
    &lt;tr&gt;
      &lt;th&gt;H2 module&lt;/th&gt;&lt;th&gt;Alfresco versions supported&lt;/th&gt;
    &lt;/tr&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;3.4+&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;4.x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;The artifacts for both versions are available on &lt;a href="http://clojars.org"&gt;clojars&lt;/a&gt;, please refer to the official documentation for the usage guide.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=sOYiLbUZzyk:KBDLN1Xbm3g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=sOYiLbUZzyk:KBDLN1Xbm3g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=sOYiLbUZzyk:KBDLN1Xbm3g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=sOYiLbUZzyk:KBDLN1Xbm3g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/sOYiLbUZzyk" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/12/14/h2-support-for-alfresco-4x/</feedburner:origLink></entry>


<entry>
  <title>Jekyll, Github and Emacs</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/WGBPgJPXAgw/" />
  <updated>2011-11-27T00:00:00+01:00</updated>
  <id>http://skuro.tk/2011/11/27/jekyll-github-and-emacs/</id>
  
<content type="html">&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; I moved from Wordpress to &lt;a href="github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt;, you can now find the sources for this blog on &lt;a href="https://github.com/skuro/skuro.github.com"&gt;Github&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It has been a great adventure to host my blog on a private machine for &lt;a href="http://skuro.tk/2009/10/20/home-sweet-home/"&gt;more than two years&lt;/a&gt;. Setting up everything, in a pure DIY fashion, has been instructive and a funny journey. Unfortunately, there were a number of reasons why a privately hosted &lt;a href="http://wordpress.org"&gt;Wordpress&lt;/a&gt; instance was not optimal anymore.&lt;/p&gt;

&lt;p&gt;I also gave the whole blog a new look, shamelessly copying much of &lt;a href="http://zachholman.com"&gt;Zach Holman&lt;/a&gt; design, I think it greatly improves readibility. Feedback welcome!&lt;/p&gt;

&lt;h2&gt;Going down&lt;/h2&gt;

&lt;p&gt;It first happened at the beginning of this year that &lt;a href="http://skuro.tk/2011/01/24/performance-boost-in-clojure-1-3"&gt;one of my posts&lt;/a&gt; attracted a good deal of attention. While it wasn't really that big thing, 2k requests/hour were enough to drain every bit of available memory my VPS had to offer, thus repeatedly killing my whole &lt;a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle"&gt;LAMP&lt;/a&gt;) system down. It has to be noted that I'm no PHP nor Wordpress expert, and I was also so sloppy to let every single &lt;a href="http://httpd.apache.org/"&gt;apache&lt;/a&gt; process (-&gt; request) suck up to a round 20MB. No wander my machine went down, and while I was able to finally handle 1k request/hour order of magnitude &lt;a href="http://skuro.tk/2011/09/04/clojure-makes-it-the-alfresco-devcon-2011-emea-london"&gt;several&lt;/a&gt; &lt;a href="http://skuro.tk/2011/09/27/october-amsterdam-clojure-with-uncle-bob"&gt;times&lt;/a&gt; &lt;a href="http://skuro.tk/2011/11/10/slides-from-alfresco-the-clojure-way"&gt;later&lt;/a&gt; on, it was everytime on the edge of the catastrophe. It was clear to me that my Wordpress blog was to be replaced.&lt;/p&gt;

&lt;p&gt;Note: I'm not saying LAMP + Wordpress is not a good option for a personal blog, it just wasn't an attractive option for me to get into the details of how to make it robust enough in my case.&lt;/p&gt;

&lt;h2&gt;Static content&lt;/h2&gt;

&lt;p&gt;PHP allows for highly dynamic content via server side rendering. Cool, but does a blog &lt;em&gt;really&lt;/em&gt; need such power? The reality is that most of the pages served by a blog are the same almost all the time.Apart from when you create a new post, there's hardly any difference in a page in its whole lifetime. All the &lt;a href="http://news.ycombinator.com/item?id=896744"&gt;features&lt;/a&gt; you might get out of a blog engine such as Wordpress are in my case of no real use.&lt;/p&gt;

&lt;p&gt;Static content was appealing from a number of reasons: lightweight, plain HTML and resources (JS, CSS). The whole site fits in my mental picture quite easily. I needed only a thin layer that would allow me to use a more convenient interface to the presentation layer than HTML.&lt;/p&gt;

&lt;h2&gt;Github Pages and Jekyll&lt;/h2&gt;

&lt;p&gt;I did some initial experiments with a fully custom &lt;a href="http://clojure.org"&gt;Clojure&lt;/a&gt; blog engine, where I explored various combinations of &lt;a href="https://github.com/weavejester/compojure/wiki"&gt;Compojure&lt;/a&gt;, &lt;a href="http://webnoir.org/"&gt;Noir&lt;/a&gt;, &lt;a href="https://github.com/weavejester/hiccup"&gt;Hiccup&lt;/a&gt;, &lt;a href="https://github.com/cgrand/enlive"&gt;Enlive&lt;/a&gt;, etc. While it was a nice exercise, it was really more of a technical exercise which wasn't getting me nowhere, as I kept running in circles while picking up new technologies every other day. &lt;a href="http://pages.github.com/"&gt;Github Pages&lt;/a&gt; was there, tempting me all along the way: I already loved &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; and &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;, and delegating the whole infrastructure to Github was eventually tackling the very core of my original issues with hosting my own blog. It was when I found a great &lt;a href="http://vitobotta.com/how-to-migrate-from-wordpress-to-jekyll/"&gt;migration guide&lt;/a&gt; that I couldn't deny anymore Github hosted &lt;a href="github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt; was the best option I had.&lt;/p&gt;

&lt;h2&gt;Emacs, of course&lt;/h2&gt;

&lt;p&gt;Migrating to Jekyll took just a couple of days, I even wrote my first Ruby &lt;a href="https://github.com/skuro/skuro.github.com/blob/sources/_plugins/categories.rb"&gt;code&lt;/a&gt; ever. Everything looked pretty promising, but I needed an extra step: there was no point in having a plain text interface if I couldn't use the &lt;a href="http://www.gnu.org/s/emacs/"&gt;Almighty Emacs&amp;trade;&lt;/a&gt; editor as the main interface to my blog. Sure thing, I wasn't the first to think so, and I promptly found an &lt;a href="http://metajack.im/2009/01/02/manage-jekyll-from-emacs/"&gt;initial implementation&lt;/a&gt; I could use to start walking the Emacs way.&lt;/p&gt;

&lt;p&gt;Needless to say, I'm writing this very post from Emacs. And it feels good.&lt;/p&gt;

&lt;h2&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;With this first post I just started feeling the good parts of my new setup. There are huge areas of improvements here and there, but hey, for just a 4 days job I can't be more happy!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=WGBPgJPXAgw:fgw94BRmDPY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=WGBPgJPXAgw:fgw94BRmDPY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=WGBPgJPXAgw:fgw94BRmDPY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=WGBPgJPXAgw:fgw94BRmDPY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/WGBPgJPXAgw" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/11/27/jekyll-github-and-emacs/</feedburner:origLink></entry>


<entry>
  <title>Maven 3 Cookbook reviewed</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/Gn4vMvdjB3E/" />
  <updated>2011-11-15T00:00:00+01:00</updated>
  <id>http://skuro.tk/2011/11/15/maven-3-cookbook-reviewed/</id>
  
<content type="html">&lt;p&gt;Better late than ever, here you can find my review on the Packt
Publishing &lt;a href="http://www.google.nl/url?sa=t&amp;amp;rct=j&amp;amp;q=packt&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.packtpub.com%2F&amp;amp;ei=2VbCTq6qHsjs-gbEzZD_DQ&amp;amp;usg=AFQjCNE3QDtLQQneLEduZpKvWcyN8Bp3kg&amp;amp;sig2=AHMqZnDXQwCV5prbVMayGQ"&gt;Apache Maven 3 Cookbook&lt;/a&gt; written by &lt;a href="http://srirangan.net/"&gt;Srirangan&lt;/a&gt;. Let's see what it has to offer.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;The basics&lt;/h2&gt;

&lt;p&gt;The author aims to talk to Maven, and possibly &lt;span title="Application Lifecycle Management"&gt;ALM&lt;/span&gt;, illiterates. This means the first step is to allow the reader to bootstrap his build infrastructure. This is one of the main Maven features, and the first chapters are easily leaping from nothing to a QA and TDD enabled build system. The book exploits Maven magic all the way there, and goes really fast to the target, no time for digressions on how, why or how does it compare with other build systems.&lt;/p&gt;

&lt;h2&gt;The ALM&lt;/h2&gt;

&lt;p&gt;Chapter 3 it's a bit off topic, even though it's probably for the greater good: it broadens the attention to ALM as a whole, all on open source products such as Hudson/Jenkins, SCM and a bit of agile. The topic is so huge that one single chapter cannot afford to cover it extensively, nor effectively: take it as an introduction to software lifecycle management, and dig somewhere else if you want more (and you definitely want). Chapter 4 indulges a bit more in QA and non functional build features, such as documentation and reporting. After all, the real mission of Maven &lt;strong&gt;is&lt;/strong&gt; ALM.&lt;/p&gt;

&lt;h2&gt;The Meat&lt;/h2&gt;

&lt;p&gt;Chapters 5 to 9 form the really juicy part of the book. I'm not going to rewrite the &lt;a href="http://www.packtpub.com/toc/apache-maven-3-cookbook-table-contents"&gt;TOC&lt;/a&gt; here, but it's definitely a rich set of handy recipes that can either directly target common needs or provide inspirational snippets that will effectively help you writing your POM. Good marks for the attention to languages other than Java (but bad marks for forgetting &lt;a href="https://github.com/talios/clojure-maven-plugin"&gt;Clojure&lt;/a&gt;!).&lt;/p&gt;

&lt;p&gt;These chapters offer much more value than the previous, as they're better aiming at developer needs. Still, focus could have been more towards existing Maven users, leaving the newbies to better learning paths.&lt;/p&gt;

&lt;h2&gt;Overall impression&lt;/h2&gt;

&lt;blockquote&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; If you are already a Maven literate, it's a book you probably want to have close to your keyboard. Just forget about the first three or four chapters.
&lt;/blockquote&gt;


&lt;p&gt;The book is an authentic source of good base recipes, that you would keep on your desk for quick reference of specific build tasks you need to implement (and your Google foo is weak). All the recipes are provided with a little description of what happens under the hood, so that you may use such knowledge to build upon them your more complex procedures. The whole focus on the book is on getting things done, with
lesser attention to fully understanding Maven: after all, a recipes book cannot replace a cooking course. As a result, its tutorial style of presenting recipes completely overlooks fundamental concepts such as plugins, executions and goals, with seldom sloppy terminology ("archetype:generate" is a goal, not a command). While it can be good to always have this book on your desk, if you're a Maven newbie it's highly recommended to look somewhere else to build up your knowledge.&lt;/p&gt;

&lt;h2&gt;Full disclosure&lt;/h2&gt;

&lt;p&gt;I was asked by Packt to provide this online review, for which I've been handed over a digital preview of the book.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=Gn4vMvdjB3E:rrCAy3fT28s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=Gn4vMvdjB3E:rrCAy3fT28s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=Gn4vMvdjB3E:rrCAy3fT28s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=Gn4vMvdjB3E:rrCAy3fT28s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/Gn4vMvdjB3E" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/11/15/maven-3-cookbook-reviewed/</feedburner:origLink></entry>


<entry>
  <title>Slides from Alfresco the Clojure way</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/lb1gN8FJmZo/" />
  <updated>2011-11-10T00:00:00+01:00</updated>
  <id>http://skuro.tk/2011/11/10/slides-from-alfresco-the-clojure-way/</id>
  
<content type="html">&lt;p&gt;I just gave a talk at the Alfresco DevCon 2011 in London, and I published the slides at slideshare:&lt;/p&gt;

&lt;div style="width:425px; padding-left: 10%" id="__ss_10104981"&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10104981" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;There's also an &lt;a href="http://slidesha.re/uqUqOW"&gt;extended version&lt;/a&gt; of the presentation that I originally wrote, which ended up being too big for the time slot I had.&lt;/p&gt;

&lt;p&gt;Hope you either enjoyed the talk or the slides, next steps are getting to &lt;a href="https://github.com/skuro"&gt;GitHub&lt;/a&gt; and fork &lt;a href="https://github.com/skuro/lambdalf"&gt;lambdalf&lt;/a&gt; and &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure"&gt;clojure webscripts&lt;/a&gt; away!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=lb1gN8FJmZo:FP2j2XYx4II:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=lb1gN8FJmZo:FP2j2XYx4II:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=lb1gN8FJmZo:FP2j2XYx4II:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=lb1gN8FJmZo:FP2j2XYx4II:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/lb1gN8FJmZo" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/11/10/slides-from-alfresco-the-clojure-way/</feedburner:origLink></entry>


<entry>
  <title>October Amsterdam Clojure with Uncle Bob</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/R2VIWVkZlMo/" />
  <updated>2011-09-27T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/09/27/october-amsterdam-clojure-with-uncle-bob/</id>
  
<content type="html">&lt;p&gt;I'm very excited to announce that we have finalized the details, and
Wednesday, October 12th we're going to have a great &lt;a href="http://bit.ly/ams-clj"&gt;Amsterdam Clojure meetup&lt;/a&gt;", with great talks and an awesome guest speaker: &lt;a href="http://twitter.com/#!/unclebobmartin"&gt;"Uncle" Bob Martin&lt;/a&gt; from &lt;a href="http://www.objectmentor.com/"&gt;Object Mentor&lt;/a&gt; and of &lt;a href="http://www.cleancoders.com/"&gt;Clean Coders&lt;/a&gt; fame.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href="http://www.sourcesense.com"&gt;Sourcesense&lt;/a&gt;, which is once again backing up and ultimately allowing this event to happen in an awesome location such as the &lt;a href="http://www.dezwijger.nl/"&gt;Pakhuis de Zwijger&lt;/a&gt;, I look forward to meet a number of Clojure enthusiast, newcomers or tired Java developers looking for something new.&lt;/p&gt;

&lt;p&gt;We have limited seating possibilities, so make sure to register at the &lt;a href="http://www.meetup.com/The-Amsterdam-Clojure-Meetup-Group/events/33351892/"&gt;meetup official page&lt;/a&gt; to ensure there will be a spot for you!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://bit.ly/ams-clj"&gt;&lt;img src="http://download.skuro.tk/flyer.jpg" alt="&amp;quot;Click to register&amp;quot;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=R2VIWVkZlMo:hak5Pr0DJM8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=R2VIWVkZlMo:hak5Pr0DJM8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=R2VIWVkZlMo:hak5Pr0DJM8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=R2VIWVkZlMo:hak5Pr0DJM8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/R2VIWVkZlMo" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/09/27/october-amsterdam-clojure-with-uncle-bob/</feedburner:origLink></entry>


<entry>
  <title>Reviewing Maven 3 Cookbook from Packt Publishing</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/YO5bOtCecmg/" />
  <updated>2011-09-06T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/09/06/reviewing-maven-3-cookbook-from-packt-publishing/</id>
  
<content type="html">&lt;p&gt;Packt Publishing recently proposed me to review their new &lt;a href="http://www.packtpub.com/apache-maven-3-0-cookbook/book"&gt;book&lt;/a&gt; &lt;em&gt;Maven 3 Cookbook&lt;/em&gt; written by &lt;a href="http://srirangan.net/"&gt;Srirangan&lt;/a&gt;. I just received a copy of the book, I'll start reading it immediately and provide my review in a future blog post here.&lt;/p&gt;

&lt;p&gt;In the meanwhile, here's the book &lt;a href="http://www.packtpub.com/apache-maven-3-0-cookbook/book"&gt;home page&lt;/a&gt; where to find the detailed &lt;a href="http://www.packtpub.com/toc/apache-maven-3-cookbook-table-contents"&gt;table of contents&lt;/a&gt; and a sample chapter.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=YO5bOtCecmg:S3GfsnCsuv0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=YO5bOtCecmg:S3GfsnCsuv0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=YO5bOtCecmg:S3GfsnCsuv0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=YO5bOtCecmg:S3GfsnCsuv0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/YO5bOtCecmg" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/09/06/reviewing-maven-3-cookbook-from-packt-publishing/</feedburner:origLink></entry>


<entry>
  <title>Clojure makes it to the Alfresco DevCon2011</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/ym4MhNqfpvo/" />
  <updated>2011-09-04T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/09/04/clojure-makes-it-the-alfresco-devcon-2011-emea-london/</id>
  
<content type="html">&lt;p&gt;If you're a bit into Alfresco, you surerly know what the &lt;a href="http://www.amiando.com/alfresco-devcon-london-2011.html"&gt;DevCon&lt;/a&gt; is.&lt;/p&gt;

&lt;p&gt;To use the same words from &lt;a href="http://blogs.alfresco.com/wp/devcon/2011/08/04/save-the-date-alfresco-devcon-san-diego-london/"&gt;Jeff Potts&lt;/a&gt;:
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;/p&gt;

&lt;blockquote&gt;the premier event for digging into the details of the Alfresco platform and collaborating with others who are doing the same&lt;/blockquote&gt;


&lt;p&gt;Now, as soon as I received the &lt;a href="http://ecmarchitect.com/archives/2011/08/09/1449"&gt;CallForPapers&lt;/a&gt; I immediately (and impulsively!) submitted a talk named &lt;em&gt;Alfresco, the Clojure way&lt;/em&gt; in the Customizing Alfresco track, where I wanted to introduce to enthusiastic Alfresco developers how to do their job using a fantastic &lt;a href="http://clojure.org"&gt;programming language&lt;/a&gt;. It was just last week that I was notified that yes, my talk made it to the conference schedule! Clojure goes to London!&lt;/p&gt;

&lt;p&gt;It will be great chance for Clojure to prove itself a great tool, and to get some more exposure to software professionals around Europe and beyond. Now that things got serious, I really need to put my presentation together, and that's where you can provide some help.&lt;/p&gt;

&lt;p&gt;I still don't know the time slot the presentation will be given, but surely enough I'll publish online the full version of it as soon as I'll be back from London. The following is the initial list of topics I'd like to cover, but I'm eager to know from you what you would like to add to it.&lt;/p&gt;

&lt;h2&gt;High level topics&lt;/h2&gt;

&lt;ul&gt;
    &lt;li&gt;crash-course on &lt;a href="http://clojure.org/reader"&gt;Clojure syntax&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;extremely fast digression on some core language features and &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional programming&lt;/a&gt; topics&lt;/li&gt;
    &lt;li&gt;introduction to &lt;a href="https://github.com/skuro/lambdalf"&gt;lambdalf&lt;/a&gt;, a Clojure adapter to the Alfresco &lt;a href="http://wiki.alfresco.com/wiki/Java_Foundation_API"&gt;Foundation API&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;introduction to the &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure"&gt;Clojure addon&lt;/a&gt; for the Spring Web Script framework&lt;/li&gt;
    &lt;li&gt;show and tell: start Alfresco, start a &lt;a href="https://github.com/technomancy/swank-clojure"&gt;swank&lt;/a&gt; server and do live coding against the repository&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;OPTIONAL:&lt;/em&gt; showcase a Clojure-based &lt;a href="https://github.com/skuro/lambdalf-samples"&gt;sample&lt;/a&gt; Alfresco application&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Again, I don't know how much time I'll be given, so I can't even guarantee I'll have time for all the above topics to get a proper introduction, but since I also might have still enough time to cover other topics, what would you like to see in there?&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=ym4MhNqfpvo:jRXqHqlFf54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=ym4MhNqfpvo:jRXqHqlFf54:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=ym4MhNqfpvo:jRXqHqlFf54:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=ym4MhNqfpvo:jRXqHqlFf54:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/ym4MhNqfpvo" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/09/04/clojure-makes-it-the-alfresco-devcon-2011-emea-london/</feedburner:origLink></entry>


<entry>
  <title>H2 embedded DB and Alfresco 3.4</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/p88tvpqjFNk/" />
  <updated>2011-08-03T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/08/03/h2-embedded-db-and-alfresco-3-4/</id>
  
<content type="html">&lt;p&gt;One of the most useful thing an embedded DB can do for you is to provide a clean environment in your automated tests to use as a clean slate where to repeatedly and reliably test your code. It's been a while since Alfresco &lt;a href="http://issues.alfresco.com/jira/browse/ALFCOM-3691"&gt;broke compatibility&lt;/a&gt; with some embedded DB we used to run our tests (&lt;a href="http://hsqldb.org/"&gt;HSQLDB&lt;/a&gt; above all others).&lt;/p&gt;

&lt;p&gt;I recently regained interest into cutting out any useless dependency on MySQL or PostgreSQL on the test server to run my Alfresco tests, and H2 looked sexy. I found &lt;a href="http://www.codinginahurry.com/2010/11/27/running-alfresco-33-with-embedded-database-h2-in-postgresql-compability-mode/"&gt;here&lt;/a&gt; and &lt;a href="https://issues.alfresco.com/jira/browse/ALF-3537"&gt;there&lt;/a&gt; some promising work by other people, but none worked for me out of the box. I then started from scratch using PostgreSQL DB scripts and voila! Now I have back my Alfresco running against an embeddable DB! You can see &amp;amp; fork &lt;a href="http://bit.ly/nIJuLY"&gt;the results&lt;/a&gt; of my job if you like. It's supposed to help you with a Maven Alfresco project, but you can probably benefit from it even if you're using some other build tools.&lt;/p&gt;

&lt;p&gt;As soon as you have all those files in your classpath, be sure you edit your &lt;em&gt;alfresco-global.properties&lt;/em&gt; like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;db.driver=org.h2.Driver
db.url=jdbc:h2:alf_data/h2_data/alfresco
db.username=alfresco
db.password=alfresco
hibernate.dialect=org.hibernate.dialect.H2Dialect
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Make sure you're using an hibernate version &amp;gt;= 3.1 as per H2 &lt;a href="http://www.h2database.com/html/tutorial.html#using_hibernate"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=p88tvpqjFNk:s6JfKq2XcZk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=p88tvpqjFNk:s6JfKq2XcZk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=p88tvpqjFNk:s6JfKq2XcZk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=p88tvpqjFNk:s6JfKq2XcZk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/p88tvpqjFNk" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/08/03/h2-embedded-db-and-alfresco-3-4/</feedburner:origLink></entry>


<entry>
  <title>Verifying my Technorati claim</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/xHqNE7qkrLI/" />
  <updated>2011-05-11T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/05/11/verifying-my-technorati-claim/</id>
  
<content type="html">&lt;p&gt;You can safely ignore this entry, as it's only to comply to &lt;a href="http://technorati.com/"&gt;technorati&lt;/a&gt; request to add a random code in a blog post to validate it.&lt;/p&gt;

&lt;p&gt;I placed the code in this page, can you spot it?&lt;/p&gt;

&lt;p&gt;&lt;span style="color: #ffffff;"&gt; UVBRKNJTRFH7&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;br/&gt;
&amp;nbsp;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=xHqNE7qkrLI:_KgVKPCMzpw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=xHqNE7qkrLI:_KgVKPCMzpw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=xHqNE7qkrLI:_KgVKPCMzpw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=xHqNE7qkrLI:_KgVKPCMzpw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/xHqNE7qkrLI" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/05/11/verifying-my-technorati-claim/</feedburner:origLink></entry>


<entry>
  <title>More Clojure for Spring Surf</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/rrwLoDjtsVc/" />
  <updated>2011-05-10T00:00:00+02:00</updated>
  <id>http://skuro.tk/2011/05/10/more-clojure-for-spring-surf/</id>
  
<content type="html">&lt;p&gt;After some time from my &lt;a href="http://www.skuro.tk/2010/05/23/spring-surf-meets-clojure"&gt;initial announcement&lt;/a&gt;, I've started again working on my &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure"&gt;Clojure addon for Spring Surf&lt;/a&gt;. While it's still a rudimentary piece of glue code, it's now getting better and better, so much that I decided it's good enough now to release an alpha version on &lt;a href="http://clojars.org/it.sk.spring.surf.clojure/spring-webscripts-addon-clojure"&gt;clojars&lt;/a&gt;. Here's what this library currently provides:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;a &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure/blob/master/src/main/java/org/springframework/extensions/webscripts/processor/ClojureScriptProcessor.java"&gt;ScriptProcessor&lt;/a&gt; that allows webscript controllers to be written in Clojure&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure/blob/master/src/main/clojure/spring/surf/webscript.clj"&gt;a &lt;em&gt;WebScript&lt;/em&gt; protocol and some utility functions&lt;/a&gt; to ease development of your own web scripts&lt;/li&gt;
    &lt;li&gt;enough &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure/tree/master/src/main/resources/org/springframework/extensions/clj/webscripts"&gt;spring configuration&lt;/a&gt; to enable this addon just by importing the provided contextes&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The approach is indeed easy and hopefully straightforward: the idea is to have your WebScript clojure controllers return an instance of a concrete implementation of the WebScript protocol, which will implement the &lt;em&gt;run&lt;/em&gt; method the way you like.&lt;/p&gt;

&lt;p&gt;Here's the sample code from a &lt;a href="https://gist.github.com/965008"&gt;gist&lt;/a&gt; you might want to have a look at to better understand how to use this library:&lt;/p&gt;

&lt;script src="https://gist.github.com/965008.js?file=sample.get.clj"&gt;&lt;/script&gt;


&lt;p&gt;You can also find other samples in the project &lt;a href="https://github.com/skuro/spring-webscripts-addon-clojure/tree/master/src/test/resources/webscripts/test"&gt;tests&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next episode will be about &lt;a href="https://github.com/skuro/lambdalf"&gt;&lt;em&gt;lambdalf&lt;/em&gt;&lt;/a&gt;, an Alfresco AMP I've been initially developing to prove the Clojure surf addon works fine, but that is now growing to be a full blown project by itself: a Clojure API for Alfresco!&lt;/p&gt;

&lt;p&gt;Stay tuned. &lt;span style="color: #ffffff;"&gt;UVBRKNJTRFH7&lt;/span&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=rrwLoDjtsVc:vQ--xIEyodg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=rrwLoDjtsVc:vQ--xIEyodg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=rrwLoDjtsVc:vQ--xIEyodg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=rrwLoDjtsVc:vQ--xIEyodg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/rrwLoDjtsVc" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/05/10/more-clojure-for-spring-surf/</feedburner:origLink></entry>


<entry>
  <title>Performance boost in Clojure 1.3 (alpha4)</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/jzKsczBHkko/" />
  <updated>2011-01-24T00:00:00+01:00</updated>
  <id>http://skuro.tk/2011/01/24/performance-boost-in-clojure-1-3/</id>
  
<content type="html">&lt;p&gt;As release 1.3 of Clojure is &lt;a href="http://www.assembla.com/spaces/clojure/milestones/238781-release-next"&gt;on its way&lt;/a&gt;, I decided to give the currently available alpha4 a try and see some of the good stuff it brings. First thing first, I wanted to experiment myself with the performance gain that the extended support for native types would bring. I ran into an old &lt;a title="old post, but inspirational" href="http://hughw.blogspot.com/2009/01/clojure-vs-javafx-script-only-5x-slower.html"&gt;post&lt;/a&gt; from which I got the inspiration for the specific test to run: the &lt;a title="Takeuchi function on Wikipedia" href="http://en.wikipedia.org/wiki/Tak_(function)"&gt;Takeuchi function&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-340" title="Full disclosure: I own a Triumph Street Triple and I love Clojure" src="/img/post/clj-triple.jpg" alt="Full disclosure: I own a Triumph Street Triple and I love Clojure" width="375" height="322" /&gt;&lt;/p&gt;

&lt;p&gt;The Java implementation for Tak provided me with a bottom line for performance comparison:&lt;/p&gt;

&lt;script src="https://gist.github.com/788834.js?file=Tak.java"&gt;&lt;/script&gt;


&lt;p&gt; Then I used the Clojure version provided in the original blog post run to test against Clojure 1.2: &lt;script src="https://gist.github.com/788834.js?file=tak2.clj"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Finally, I leveraged the new syntax for the &lt;a href="http://dev.clojure.org/display/doc/Enhanced+Primitive+Support"&gt;enhanced primitives support&lt;/a&gt; to test against Clojure 1.3 (thanks to &lt;a href="http://twitter.com/neotyk"&gt;neotyk&lt;/a&gt; to point that out to me):&lt;/p&gt;

&lt;script src="https://gist.github.com/788834.js?file=tak.clj"&gt;&lt;/script&gt;


&lt;p&gt;As you can see, timing is tracked from the application code, as various accessory overhead like JVM and Clojure runtime bootstrap are not in the scope of this post.&lt;/p&gt;

&lt;p&gt;As this benchmark is "just for fun", I won't pretent I did an extensive benchmark, or that I engineered a bullet proof benchmark strategy and the like. I just ran the above code some tens of times and here follows the average running time for the three versions:&lt;/p&gt;

&lt;p&gt;&lt;span style="color: #ff0000;"&gt;NOTE: an updated benchmark is provided down below&lt;/span&gt;
&lt;span style="color: #ff0000;"&gt;NOTE2: to have a more fair performance comparison, &lt;a href="#reloaded"&gt;keep reading&lt;/a&gt;&lt;/span&gt;
&lt;img class="aligncenter size-full wp-image-344" title="Benchmark results" src="http://www.skuro.tk/wp-content/uploads/2011/01/clj-bench-graph.png" alt="Average running time in ms" width="467" height="292" /&gt;&lt;/p&gt;

&lt;p&gt;The results tells of a &lt;strong&gt;~4.5x&lt;/strong&gt; speed gain, &lt;del datetime="2011-01-26T09:59:07+00:00"&gt;getting close to match plain Java code performance&lt;/del&gt;.&lt;/p&gt;

&lt;p&gt;Now, even if such a benchmark won't be any news to the Clojure community, it's still &lt;strong&gt;absolutely awesome&lt;/strong&gt; to see such a performance gain in the next release of this beautiful Lispy language :-)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;following the advice by &lt;strong&gt;Jürgen Hötzel&lt;/strong&gt; in his comment, I slightly modified my Clojure sources to change &lt;span style="font-family: monospace;"&gt;&lt;a href="http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/-"&gt;clojure.core/-&lt;/a&gt;&lt;/span&gt; with &lt;span style="font-family: monospace;"&gt;&lt;a href="http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/unchecked-subtract"&gt;clojure.core/unchecked-subtract&lt;/a&gt;&lt;/span&gt; and re-run the test. Here's the final results, which are way better for Clojure, especially for version 1.2:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-350" title="clj-bench-graph-unchecked" src="http://www.skuro.tk/wp-content/uploads/2011/01/clj-bench-graph-unchecked.png" alt="" width="493" height="302" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; the following graph shows the impact of the direct use of the &lt;span style="font-family: monospace;"&gt;recur&lt;/span&gt; special form tested against plain recursive invocation of Tak, as per requested in some comments
&lt;img class="aligncenter size-full wp-image-353" title="clj-bench-graph-norecur" src="http://www.skuro.tk/wp-content/uploads/2011/01/clj-bench-graph-norecur.png" alt="" width="476" height="267" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 3:&lt;a name="reloaded"&gt;&lt;/a&gt;&lt;/strong&gt; even if this all started as a quick&amp;amp;dirty, amatorial benchmark, it attracted quite some &lt;a href="http://news.ycombinator.com/item?id=2134950"&gt;attentions&lt;/a&gt;, demanding more fair and precise benchmarks, especially on the Java vs Clojure comparison. As in the Java version of Tak I used Integers and not primitive types, there is an unfair burden Java had to carry along the computation. The following is the result of a re-run of the test for Java (using primitive &lt;span style="font-family: monospace;"&gt;long&lt;/span&gt;) and Clojure 1.3:
&lt;img class="aligncenter size-full wp-image-356" title="clj-bench-reloaded" src="http://www.skuro.tk/wp-content/uploads/2011/01/clj-bench-reloaded.png" alt="" width="463" height="272" /&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=jzKsczBHkko:7iwwEEEPHWk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=jzKsczBHkko:7iwwEEEPHWk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=jzKsczBHkko:7iwwEEEPHWk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=jzKsczBHkko:7iwwEEEPHWk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/jzKsczBHkko" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2011/01/24/performance-boost-in-clojure-1-3/</feedburner:origLink></entry>


<entry>
  <title>SproutCore encoding gotchas</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/OCklrNiRkSw/" />
  <updated>2010-09-30T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/09/30/sproutcore-encoding-gotchas/</id>
  
<content type="html">&lt;p&gt;These days I'm trying out &lt;a title="Sproutcore homepage" href="http://www.sproutcore.com/"&gt;SproutCore&lt;/a&gt;, an MVC framework written in Javascript that aims to help developing rich client web applications. I'm not going to entertain you with any juicy technical spotlight, as they'll hopefully find their way in these pages later on with plenty of details. At the moment I'd like to share a little problem I got stuck with that had a non trivial solution&lt;del datetime="2010-09-28T20:03:47+00:00"&gt;,  at least for the noob I am&lt;/del&gt;.&lt;/p&gt;

&lt;p&gt;First thing you have to know is that SproutCore ships with both a rich &lt;a title="SproutCore source code" href="http://github.com/sproutcore/sproutcore"&gt;Javascript library&lt;/a&gt; and a set of building tools written in ruby, which go under the code name of &lt;a title="Abbot source code" href="http://github.com/sproutcore/abbot"&gt;abbot&lt;/a&gt;. New projects kickstart, &lt;a title="sc-gen" href="http://wiki.sproutcore.com/Abbot+Spec+sc-gen"&gt;scaffolding&lt;/a&gt;, &lt;a title="sc-docs" href="http://blog.sproutcore.com/post/150789672/now-available-sproutcore-1-0-reference-docs"&gt;automatic documentation&lt;/a&gt; are among the features that abbot provides you with, along with the ability to &lt;a title="sc-server" href="http://wiki.sproutcore.com/BuildTools-Reference+sc-server"&gt;run you application&lt;/a&gt; on a local web server during development. Sounds cool, isn't it? And I didn't even mention it's integrated &lt;a title="unit tests" href="http://wiki.sproutcore.com/UnitTesting-Introduction"&gt;unit testing&lt;/a&gt; facility!&lt;/p&gt;

&lt;p&gt;I immediately tried to give it a shot, and ran through &lt;a title="Todos tutorial" href="http://wiki.sproutcore.com/Todos%C2%A0Intro"&gt;one of the tutorials&lt;/a&gt; to write down my first HelloWorld. The first pieces got into place, and after the first quick round I left my hello world project in such a state that I already decided to build a simple but complete application right away. How arrogant.&lt;/p&gt;

&lt;p&gt;The second day something Bad™ happened, I cannot really tell what, but &lt;a title="#fail" href="http://gist.github.com/597780"&gt;everything&lt;/a&gt; started &lt;a title="#fail" href="https://gist.github.com/f2a107a3a0a2cd49e4e5"&gt;to fall apart&lt;/a&gt;: no one tool in the abbot suite worked properly, I was no more able to get any further and I started a painful journey of which I only remember installing and changing between zillions of ruby versions, crying and considering to give up with IT and to start my own religion to make a living.&lt;/p&gt;

&lt;p&gt;But then I simply resorted to the #sproutcore IRC channel and I got the tip that saved the day (thanks &lt;a title="my saviour" href="http://www.flashesofpanic.com/"&gt;pjmorse&lt;/a&gt;!):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export LC_CTYPE=UTF-8&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;"Boom baby!" I said, everything got back to normality. I can save my holy plans for a rainy day. It seems that encoding is an &lt;a title="#fail" href="http://www.taylorluk.com/2009/08/ruby-19-encoding-gotcha-retreat-to-ascii-8bit"&gt;endless&lt;/a&gt;&lt;a title="#fail" href="http://gnuu.org/2009/11/02/ruby-1-9-encoding-issues-again/"&gt; source&lt;/a&gt; of &lt;a title="#fail" href="http://stackoverflow.com/questions/3597255/why-does-my-sproutcore-development-server-drop-connections-with-invalid-byte-seq"&gt;issues&lt;/a&gt; in the ruby world, so that probably if you have any ruby knowledge whatsoever this all rant might just seem pointless and the solution trivial.&lt;/p&gt;

&lt;p&gt;Next episode on SproutCore (if everything goes well): a sample SproutCore + Clojure application. See you there!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=OCklrNiRkSw:vbEQeXjWC54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=OCklrNiRkSw:vbEQeXjWC54:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=OCklrNiRkSw:vbEQeXjWC54:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=OCklrNiRkSw:vbEQeXjWC54:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/OCklrNiRkSw" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/09/30/sproutcore-encoding-gotchas/</feedburner:origLink></entry>


<entry>
  <title>Crampi alla lingua</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/wjLwGEcVJT8/" />
  <updated>2010-09-29T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/09/29/crampi-alla-lingua-italiano-inglese/</id>
  
<content type="html">&lt;p&gt;Per la prima volta mi trovo a scrivere in Italiano in questo blog. Contando che vorrei affrontare l'argomento della guerra, se cos&amp;igrave; la si pu&amp;ograve; chiamare, tra l'Italiano e l'Inglese, mi sembra anche appropriato.&lt;/p&gt;

&lt;p&gt;Tutto parte da un interessante &lt;a href="http://federicogobbo.wordpress.com/2010/09/16/goodbye-italian-hello-italglish/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+FedericoGobboBlogo+(Federico+Gobbo+Blog(o))"&gt;blog post&lt;/a&gt; che cerca di mettere in luce le insidie di una politica aggressiva di apprendimento dell'Inglese, a scapito di un sempre pi&amp;ugrave; bistrattato Italiano: &lt;a href="http://lepolitichelinguistiche.cafebabel.com/it/post/2008/04/10/TV-pubblica-e-sottotitoli"&gt;l'eliminazione del doppiaggio dalle TV di stato&lt;/a&gt; e &lt;a href="http://lepolitichelinguistiche.cafebabel.com/it/post/2010/09/11/L-anglificazione-della-scuola-italiana"&gt;balzi in avanti maoisti nell'inglese a scuola&lt;/a&gt;. Vengono affrontati argomenti che mi stanno a cuore tanto da giustificare un intero post e non un semplice commento a margine.&lt;/p&gt;

&lt;p&gt;Vediamo un po'.&lt;/p&gt;

&lt;blockquote&gt;Il motto "vietato doppiare!" in uso in paesi come l'Olanda [...] ha procurato un arretramento dell'olandese e dello svedese in tutti gli ambiti, non solo quelli formali, al punto che uno straniero pu&amp;ograve; vivere l&amp;igrave; senza mai imparare una parola di olandese&lt;/blockquote&gt;


&lt;p&gt;Da emigrato proprio in Olanda, confermo l'avanzamento dell'inglese in questa nazione, tanto da spingere a dichiarazioni pubbliche alcune cariche dello stato (ahim&amp;eacute;, ho perso il link, vi dovrete fidare)&lt;strong&gt; per limitare allo stretto necessario campagne pubblicitarie in inglese, in nome della conservazione della lingua&lt;/strong&gt;. Badate bene, &amp;egrave; un Paese dove&lt;strong&gt; un anziano di estrema periferia pu&amp;ograve; essere in grado di comunicare nella lingua d'Albione&lt;/strong&gt;. Una situazione che, nella pi&amp;ugrave; rosea delle previsioni, l'Italia riuscir&amp;agrave; a raggiungere tra mezzo secolo.&lt;/p&gt;

&lt;p&gt;Epper&amp;ograve; devo anche dire che al momento il Nederlandese non vive nessun tipo di relegazione, anche e soprattutto sul posto di lavoro, dove chi non vive di IT come il sottoscritto pu&amp;ograve; avere discrete difficolt&amp;agrave; a trovare un impiego.&lt;/p&gt;

&lt;p&gt;Ma andiamo avanti.&lt;/p&gt;

&lt;blockquote&gt;se [si] prova a parlare nella loro lingua, loro gli rispondono in inglese. Se a un turista occasionale questa situazione pu&amp;ograve; indubbiamente essere utile, per un residente pu&amp;ograve; creare un apartheid linguistico, al punto tale che uno straniero non riuscir&amp;agrave; mai ad integrarsi veramente nel tessuto sociale del luogo&lt;/blockquote&gt;


&lt;p&gt;Di nuovo, concordo pienamente. La quasi totalit&amp;agrave; della mia rete di amicizie in Olanda &amp;eacute; fatta di italiani ed immigrati di varie nazioni. "Apartheid" &amp;eacute; di origine Olandese, e ben si presta ad esprimere il concetto di come l'uomo sia tendenzialmente impermeabile ad avvicinamenti alla sfera privata da parte di chi non parla la sua lingua. &amp;eacute; un dato di fatto a cui mi sono ormai rassegnato.&lt;/p&gt;

&lt;p&gt;La soluzione &amp;egrave; una ed una soltanto: &lt;strong&gt;emigrare in un altro paese comporta anche la necessit&amp;agrave; di impararne la lingua&lt;/strong&gt;. E l'Olanda &amp;egrave; anche molto ben disposta ad insegnare la propria lingua e cultura agli immigrati, con &lt;a href="http://www.iamsterdam.com/en/living/official-matters/municipal-integration"&gt;corsi&lt;/a&gt; offerti a costi ridicoli. Di fatto, la maggior parte degli immigrati in Olanda ricade in fasce di reddito medio basse, con altrettanto bassi livelli di scolarizzazione, e con &lt;strong&gt;una penetrazione del Nederlandese molto forte&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Siamo ormai in chiusura.&lt;/p&gt;

&lt;blockquote&gt;Andr&amp;agrave; a finire che faremo una cosa all'italiana, [...] parleremo un orrido spaghetti English pensando di essere molto bravi finch&amp;eacute; non ci scontreremo contro la dura realt&amp;agrave; [...]. Ma in quel momento, sar&amp;agrave; troppo tardi per svegliarsi.&lt;/blockquote&gt;


&lt;p&gt;Essendo il discorso imperniato in particolare sul doppiaggio dei film, non mi trovo assolutamente d'accordo con le conclusioni. Ho sempre sostenuto che il doppiaggio dei prodotti televisivi o cinematografici in italiano sia un'enorme deficit nel nostro apprendimento dell'inglese, basti guardare Portogallo e Spagna: in Portogallo, dove il doppiaggio non avviene, si parla mediamente un buon inglese, e basta passare il confine di pochi centimetri per approdare in una Spagna completamente estranea al concetto stesso di inglese.&lt;/p&gt;

&lt;p&gt;Sono assolutamente d'accordo nel sostenere che la cultura e la lingua italiane debbano avere il primato, debbano essere sostenute e che navighino attualmente in cattive acque, ma &lt;strong&gt;questa situazione &amp;eacute; gi&amp;agrave; davanti ai nostri occhi anche senza la presenza dell'inglese in TV&lt;/strong&gt;. Ai giorni nostri l'inglese &amp;eacute; uno strumento fondamentale, che l'italiano medio non riesce ad acquisire in maniera tale da poterlo sfruttare a proprio vantaggio. Tutt'al pi&amp;ugrave; pu&amp;ograve; sperare di dare le indicazioni ad un turista approdato in terra italica.&lt;/p&gt;

&lt;p&gt;Io mi sento di ribaltare il punto di vista: non si pu&amp;ograve; far si che un colpevole disinteresse per la lingua italiana vada a scapito degli interventi che possono migliorare l'apprendimento dell'inglese.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=wjLwGEcVJT8:SQj_QvJWYig:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=wjLwGEcVJT8:SQj_QvJWYig:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=wjLwGEcVJT8:SQj_QvJWYig:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=wjLwGEcVJT8:SQj_QvJWYig:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/wjLwGEcVJT8" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/09/29/crampi-alla-lingua-italiano-inglese/</feedburner:origLink></entry>


<entry>
  <title>Spring Surf meets Clojure</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/-GYfd95nyLk/" />
  <updated>2010-05-23T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/05/23/spring-surf-meets-clojure/</id>
  
<content type="html">&lt;p&gt;For those who missed it, some time ago the &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; guys &lt;a href="http://www.alfresco.com/media/releases/2009/12/spring_surf/"&gt;donated&lt;/a&gt; their &lt;a href="http://wiki.alfresco.com/wiki/Surf_Platform"&gt;Surf Platform&lt;/a&gt; to &lt;a href="http://www.springsource.com/"&gt;SpringSource&lt;/a&gt;, giving birth to the now-called &lt;a href="http://www.springsource.org/extensions/se-surf"&gt;SpringSurf&lt;/a&gt;, which is thereby described as:&lt;/p&gt;

&lt;blockquote&gt;a view composition framework for Spring MVC that plugs into your existing Spring applications. It provides a scriptable and content-centric approach to building web applications.&lt;/blockquote&gt;


&lt;p&gt;I'm not going to introduce you how to use this yet-another MVC framework, but Michael Uzquiano provided an &lt;a href="http://blogs.alfresco.com/wp/uzi/2009/11/03/using-surf-in-your-spring-apps/"&gt;awesome blogpost&lt;/a&gt;, in case you were interested into learning more about it.&lt;/p&gt;

&lt;p&gt;Part of the job of this Spring Surf framework is to provide an easy to use web scripting framework, REST like, that enables you to easily put together a View and, optionally, a Controller to implement a web API, provide them in the classpath together with a small XML descriptor, and your REST API is deployed right away. In the SpringSurf parlance, this is called called WebScript. Again, technical insights about the framework are better explained &lt;a href="http://blogs.alfresco.com/wp/webcasts/2010/01/introducing-spring-surf-and-spring-web-scripts/"&gt;elsewhere&lt;/a&gt;, so no repetitions here. What I think is cool about Spring Surf, and I'm here with you to discuss, is it's multi-language focus: web script Controllers can be written in Javascript, PHP or Groovy right out of the box, allowing you to choose whichever language you prefer. Moreover, if you just peek at Spring Surf &lt;a href="https://anonsvn.springframework.org/svn/se-surf/tags/release-1.0.0.M3/spring-webscripts-addons/"&gt;source code&lt;/a&gt;, plugging in support for new languages doesn't look so hard, so I decided to challenge myself and write support for Clojure backed webscripts. You can find the result of my efforts on &lt;a href="http://github.com/skuro/spring-webscripts-addon-clojure"&gt;github&lt;/a&gt;, with a sample webscript that proves the concept.&lt;/p&gt;

&lt;p&gt;Following the webscript framework praxis, a &lt;em&gt;model&lt;/em&gt; map object is passed around that acts as a container for whichever result your computation will produce, that will at the end handed over to a view rendition engine, &lt;a href="http://freemarker.sourceforge.net/"&gt;Freemarker&lt;/a&gt; in our case, to build the resulting document. Webscripts are intended to support a number of different output formats, from JSON to XML to plain text, so being generic here is not an option.&lt;/p&gt;

&lt;p&gt;Anyway, the first thing you usually do is to populate the &lt;em&gt;model&lt;/em&gt; map with a number of objects that will be needed by the rendering engine to build the response. To support this use case, this first implementation of the Clojure backend for Spring Surf webscripts expects your Clojure "script" to yield a map, in Clojure sense. This map will be then forwarded to a Freemarker template and used to build a webpage or whatever the user asked for, i.e. this controller:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(ns web.script.test)

{:foo "bar"}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and this freemarker template:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;foo: ${foo}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;will provide "foo: bar" back to the client.&lt;/p&gt;

&lt;p&gt;This is just an experiment at the moment, and far from being production-quality stuff. Still, it has been instructing to build a  Java-to-Clojure integration, and nonetheless it might come in handy when I'll be trying to put more Clojure in my working life.&lt;/p&gt;

&lt;p&gt;(bye)&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-GYfd95nyLk:5DThH9OHric:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-GYfd95nyLk:5DThH9OHric:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=-GYfd95nyLk:5DThH9OHric:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-GYfd95nyLk:5DThH9OHric:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/-GYfd95nyLk" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/05/23/spring-surf-meets-clojure/</feedburner:origLink></entry>


<entry>
  <title>Handling Microsoft Windows NTP sync</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/GFHjukI67mc/" />
  <updated>2010-04-23T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/04/23/handling-microsoft-windows-ntp-sync/</id>
  
<content type="html">&lt;p&gt;This post should raise some eyebrows around, as I'm advocating Linux since ages and I'm not at all into Microsoft stuff for the 99.99% of my time. This story comes out of that (usually negligible) 0.01%.&lt;/p&gt;

&lt;h2&gt;Why bother with NTP on MS Windows?&lt;/h2&gt;

&lt;p&gt;The Alfresco implementation I'm working on has to integrate with a fully MS-powered environment, with a Domain Controller pulling the strings of network entities such as users and hosts. As the customer has strict security requirements, no remote access can be granted to their intranet, and since their offices are a bit far away from mine, we decided to replicate their environment locally, providing the minimum set of components such as&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;a domain controller (WinServer 2k8)&lt;/li&gt;
    &lt;li&gt;a domain host (WinXP Pro SP2)&lt;/li&gt;
    &lt;li&gt;the Alfresco server (RHELv5.4)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I was able to build up the whole replicated environment, with a relative limited effort, using virtual machines to host all the different operating system on my laptop. I was so happy that everything worked almost at the first shot that I almost died when it all went wrong after the first reboot of the VMs: I couldn't log anymore on the WinXP box!&lt;/p&gt;

&lt;p&gt;It turned out that all clocks drifted away, making Kerberos auth checks fail because of replication attacks protection. Looked like it was time to strengthen my Win-fu and configure NTP in a proper way. This is what I learned.&lt;/p&gt;

&lt;h2&gt;WinServer2k8 and clock management&lt;/h2&gt;

&lt;p&gt;If there's one thing I enjoyed out of all the time spent on these tasks, the prize goes definitely to w32tm: I had to deal with Windows, and there were no windows involved! As usual, whenever I'm typing into a command line, I feel at home. I'm actually writing this whole blog post to take note of the tricks I learned around w32tm and NTP clock sync. Here we go:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Configure NTP servers&lt;/strong&gt;
&lt;blockquote&gt;&lt;pre&gt;w32tm /config /manualpeerlist:&lt;a href="http://europe.pool.ntp.org" target="_blank"&gt;europe.pool.ntp.org&lt;/a&gt; \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /syncfromflags:manual /reliable:no /update&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Query NTP servers&lt;/strong&gt;
&lt;blockquote&gt;&lt;pre&gt;w32tm /stripchart /computer:&lt;a href="http://europe.pool.ntp.org" target="_blank"&gt;europe.pool.ntp.org&lt;/a&gt; \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /samples:5 /dataonly&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Resync clock&lt;/strong&gt;
&lt;blockquote&gt;&lt;pre&gt;w32tm /resync /rediscover&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Allow resync in case of huge drifts&lt;/strong&gt;
If your clock drifted too far away Windows will refuse to sync. In order to disable such check you have to import the following changes (write them in a reg-keys.reg file and double click it):
&lt;blockquote&gt;&lt;pre&gt;Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"MaxNegPhaseCorrection"=dword:ffffffff
"MaxPosPhaseCorrection"=dword:ffffffff&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That's it for now. I hope this will come in handy to somebody else, since I'll try to avoid any more contact with the Microsoft stacks as long as possible, since without grep, find, awk, sed, vim I feel as uncomfortable as &lt;a href="http://farm4.static.flickr.com/3290/2615393415_0d9e8eb97d.jpg"&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=GFHjukI67mc:lcunL_o6PVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=GFHjukI67mc:lcunL_o6PVA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=GFHjukI67mc:lcunL_o6PVA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=GFHjukI67mc:lcunL_o6PVA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/GFHjukI67mc" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/04/23/handling-microsoft-windows-ntp-sync/</feedburner:origLink></entry>


<entry>
  <title>Tales from an Icelandic volcano victim</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/-4YNPuhZijg/" />
  <updated>2010-04-21T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/04/21/tales-from-an-icelandic-volcano-victim/</id>
  
<content type="html">&lt;p&gt;Last weekend &lt;a href="http://en.wikipedia.org/wiki/Eyjafjallaj%C3%B6kull"&gt;Eyjafjallaj&amp;ouml;kull&lt;/a&gt; decided my long-planned trip to visit my dear family in Italy had to be exhausting. On Friday, April 16th at 2pm my flight to Milan, scheduled to leave Amsterdam &lt;a href="http://www.schiphol.nl/"&gt;Schiphol&lt;/a&gt; at 8pm, was eventually cancelled. It had to be the first step of a longer journey, which was planned to be as follows:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Amsterdam -&amp;gt; Milan&lt;/strong&gt; - Friday, 16th April @8pm&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Milan -&amp;gt; Cagliari&lt;/strong&gt; - Saturday, 17th April @10am&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cagliari -&amp;gt; Milan&lt;/strong&gt; - Monday, 19th April @12.30pm&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Milan -&amp;gt; Asterdam&lt;/strong&gt; - Monday, 19th April @6pm&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;When it was clear that I was not going to leave Amsterdam by plane, I did the only thing you wouldn't take seriously, if you were me: I rented &lt;a href="http://www.zercustoms.com/news/images/MomoDesign-Lancia-Ypsilon-Sport-b.jpg"&gt;a car&lt;/a&gt; to try and catch the flight leaving Milan the next day. This is the story of this long, long journey.&lt;/p&gt;

&lt;h2&gt;Amsterdam -&amp;gt; Milan: &lt;span style="color: red;"&gt;CANCELLED&lt;/span&gt;&lt;/h2&gt;


&lt;p&gt;I didn't take note of the steps along the way down to Milan, so I will just write down a short story here.&lt;/p&gt;

&lt;p&gt;We left Amsterdam by car at around 6pm. "We" means just me and my girlfriend, who wasn't 100% sure I had a great idea renting the car. But she supported me all the way long, she even drove for ~300km between Frankfurt and Stuttgart, while I was sleeping next to her. She had to stop around midnight, when we both fell asleep for 2h.&lt;/p&gt;

&lt;p&gt;Coffee, sugar, then I got back at the driver seat and drove with no intermediate stops, if not for fueling, down to Milan.&lt;/p&gt;

&lt;p&gt;We were stopped at the customs between Switzerland and Italy (6am), where three cops checked our pockets, our luggages and even our car trying to find some criminal stuff. Needless to say, they didn't find anything, but we lost 30 precious minutes.&lt;/p&gt;

&lt;p&gt;Fortunately, the traffic jam that usually takes you ages to get through when you're near Milan at rush hours was yet to ramp up, so that we made it on time at Milan airport (7.45am). We left the car at the parking area, grabbed a coffee and waited to take off.&lt;/p&gt;

&lt;h2&gt;Milan -&amp;gt; Cagliari: &lt;span style="color: green;"&gt; AIRBORNE &lt;/span&gt;&lt;/h2&gt;


&lt;p&gt;This is the most boring part of this diary: everything went really good, no delays, no nothing. We arrived, we enjoyed our time and my beloved &lt;a href="http://en.wikipedia.org/wiki/Sardinia"&gt;Sardinia&lt;/a&gt; (and a &lt;a href="http://www.misfits.com/"&gt;Misfits&lt;/a&gt; concert, by the way). As time went by, it was clear that some more troubles were about to come.&lt;/p&gt;

&lt;p&gt;We didn't care until Sunday night, when they announced that Milan airport was definitely closed.&lt;/p&gt;

&lt;h2&gt;Cagliari -&amp;gt; Milan: &lt;span style="color: red;"&gt; CANCELLED &lt;/span&gt;&lt;/h2&gt;


&lt;p&gt;This hit us badly: we didn't even considered the idea that that ash could get past the Alps, and now we were stuck in an island, even though a beautiful one. We decided to go the traditional way: we bought tickets to get back to Italy &lt;a href="http://www.mobylines.com/"&gt;by boat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This time we teamed up with &lt;a href="http://developer4work.blogspot.com/"&gt;my brother&lt;/a&gt;, &lt;a href="http://paperina81.deviantart.com/"&gt;his girlfriend&lt;/a&gt; and their awesome, 4 months old son. They had to come back to &lt;a href="http://en.wikipedia.org/wiki/Pisa"&gt;Pisa&lt;/a&gt;, so that we could share the first part of our trip together.&lt;/p&gt;

&lt;p&gt;We left &lt;a href="http://en.wikipedia.org/wiki/Iglesias"&gt;Iglesias&lt;/a&gt;, my birth place, at 11am, and after some hours and two stops (feeding, then fueling) we arrived at Olbia at 2.30pm. Having studied in Pisa for 7 years, the whole boat experience became quite familiar and boring long time ago. But those 9 hours passed by quite fast,  as we enjoyed our time together with the little newborn totally starring the show.&lt;/p&gt;

&lt;p&gt;We eventually arrived at &lt;a href="http://en.wikipedia.org/wiki/Livorno"&gt;Livorno&lt;/a&gt; at 11pm, where my girlfriend's father was awaiting us to give us a lift to Milan. Take note: 60 years old man, driving all night long for a total of 700km just to start working the next day without any rest in between. I hope I'll have the same energy when I'll be aged the same.&lt;/p&gt;

&lt;h2&gt;Milan -&amp;gt; Amsterdam: &lt;span style="color: red;"&gt; CANCELLED &lt;/span&gt;&lt;/h2&gt;


&lt;p&gt;We got at Milan airport at 2.30am, where we found a surreal, totally empty place that was nonetheless bright, colorful and with all the monitors repeating the same word "cancelled" to death with nobody except us staring at them, as if their only purpose was  to remind us why we were actually there.&lt;/p&gt;

&lt;p&gt;Bathroom, coffee, take back the car from the parking lot and back on track: our former driver headed back to the south, we followed the &lt;a href="http://en.wikipedia.org/wiki/Pole_star"&gt;Pole Star&lt;/a&gt; (3am).&lt;/p&gt;

&lt;p&gt;They didn't care to stop us again at customs, so we went straight to &lt;a href="http://en.wikipedia.org/wiki/Basel"&gt;Basel&lt;/a&gt;, around where we took our now traditional 2h nap at around 6am.&lt;/p&gt;

&lt;p&gt;Coffee, sugar, my girlfriend took the driver seat. I slept for the usual 300km and then drove all the way to Amsterdam.&lt;/p&gt;

&lt;h2&gt;The end&lt;/h2&gt;


&lt;p&gt;We arrived at home around 4.30pm. We were both completely exhausted, done, finished. Yet something more was left to do: empty the car, fuel it, take it back to the airport where the rental agency is, and then, finally, back at home, with enough energies left to get on and crush on the bed. 12h of sleep later, the whole story started to look like a long, distant, strange dream.&lt;/p&gt;

&lt;p&gt;It has been devastating, and I don't think I'm going to did it again. Still, the only regret I have is that I didn't take pictures, as my camera was packed within my luggage. I now look at the map above, which pin points all the steps along our way back here, and think "did it". And I cannot hide a smile.&lt;/p&gt;

&lt;p&gt;&lt;img src="/img/post/hourly-map.png" alt="Our journey, hour by hour" /&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-4YNPuhZijg:pw7Oj0aALdk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-4YNPuhZijg:pw7Oj0aALdk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=-4YNPuhZijg:pw7Oj0aALdk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=-4YNPuhZijg:pw7Oj0aALdk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/-4YNPuhZijg" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/04/21/tales-from-an-icelandic-volcano-victim/</feedburner:origLink></entry>


<entry>
  <title>Amsterdam Clojurians meeting #4 - Dojo style</title>
  <link href="http://feedproxy.google.com/~r/Skuro/~3/mc2Pqo_gjQ0/" />
  <updated>2010-04-14T00:00:00+02:00</updated>
  <id>http://skuro.tk/2010/04/14/amsterdam-clojurians-meeting-4-dojo-style/</id>
  
<content type="html">&lt;p&gt;Today the fourth meeting of the Amsterdam Clojure user group was held at the now usual &lt;a href="http://www.sourcesense.com"&gt;Sourcesense&lt;/a&gt; offices venue in Amsterdam.&lt;/p&gt;

&lt;p&gt;It has been probably the most successful one until now: thanks to some newcomers we had the most participated event ever with 10 nerdy, awesome geeks sitting together to discuss about nerdy, awesome stuff with lots of parenthesis.&lt;/p&gt;

&lt;p&gt;As previously proposed by &lt;a href="http://lifeisagraph.net/"&gt;Jeff Rose&lt;/a&gt;, we started thinking about improvements we could provide to the standard Clojure REPL, deciding for colorful messages for the &lt;strong&gt;doc&lt;/strong&gt; function. &lt;a href="http://sam.aaron.name/"&gt;Sam Aaron&lt;/a&gt; proposed then to follow a dojo-like approach, with a single laptop connected to a projector where everybody has the chance to step in and do some coding while everybody else discuss possible approaches and alternatives.&lt;/p&gt;

&lt;p&gt;The resulting code from this session is available on &lt;a href="http://github.com/ams-clj/clansi"&gt;github&lt;/a&gt;. It does just a simple thing, it provides a way to override the default &lt;strong&gt;doc&lt;/strong&gt; behavior in order to make use of our custom, colorful implementation of &lt;strong&gt;print-doc&lt;/strong&gt;. And even if it doesn't look like rocket science, I can guarantee that being there and looking at how we came up with that, from some impressive vim-fu showed by &lt;a href="http://blog.rubyenrails.nl/"&gt;Michiel de Mare&lt;/a&gt; to the clever and clean code provided by &lt;a href="http://blog.remvee.net/"&gt;Remco van 't Veer&lt;/a&gt;, was indeed a lot of fun!&lt;/p&gt;

&lt;p&gt;If all this sounds interesting to you, go and checkout the group &lt;a href="http://groups.google.com/group/amsterdam-clojurians"&gt;mailing list&lt;/a&gt; or just show up at the next meeting, second Wednesday of each month at the &lt;a href="http://www.sourcesense.nl/contact/"&gt;Sourcesense office&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=mc2Pqo_gjQ0:mRy82p2z6xQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=mc2Pqo_gjQ0:mRy82p2z6xQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?i=mc2Pqo_gjQ0:mRy82p2z6xQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Skuro?a=mc2Pqo_gjQ0:mRy82p2z6xQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Skuro?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Skuro/~4/mc2Pqo_gjQ0" height="1" width="1"/&gt;</content><feedburner:origLink>http://skuro.tk/2010/04/14/amsterdam-clojurians-meeting-4-dojo-style/</feedburner:origLink></entry>



</feed>

