<?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:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk8CQnk5fyp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591</id><updated>2011-12-16T20:47:43.727+01:00</updated><category term="proxy" /><category term="javascript" /><category term="java" /><category term="documentation" /><category term="list" /><category term="authentication" /><category term="html5" /><category term="maven" /><category term="api" /><category term="autocomplete" /><category term="graphviz" /><category term="sitebricks" /><category term="chart" /><category term="freemarker" /><category term="libraries" /><category term="httpclient" /><category term="regex" /><category term="jquery" /><category term="guice" /><category term="ntlm" /><category term="plugin" /><category term="jquery ui" /><category term="upload" /><category term="canvas" /><category term="ntlmaps" /><category term="file" /><category term="google" /><title>_TC</title><subtitle type="html">Code &amp;amp; More</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.thomasclarisse.com/" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>11</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/thomasclarisse/rss" /><feedburner:info uri="thomasclarisse/rss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk8CQnk4fCp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-8238541763007550661</id><published>2011-12-16T20:47:00.001+01:00</published><updated>2011-12-16T20:47:43.734+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:47:43.734+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ntlmaps" /><category scheme="http://www.blogger.com/atom/ns#" term="ntlm" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="proxy" /><title>How to use Maven behing a proxy with authentication</title><content type="html">&lt;br /&gt;
Maven doesn't work with NTLM authentication. It means that you can try to use the settings.xml file as long as you want, you'll not go threw your proxy.&lt;br /&gt;
&lt;br /&gt;
There is a simple fix to use Maven behind a NTLM authentication proxy : install a relay proxy that will take care of authentication on your machine.&lt;br /&gt;
&lt;br /&gt;
First, download &lt;a href="http://sourceforge.net/projects/ntlmaps/"&gt;NTLMAPS &lt;/a&gt;from Sourceforge.&lt;br /&gt;
You need &lt;a href="http://www.python.org/download/"&gt;Python&lt;/a&gt;&amp;nbsp;to run it.&lt;br /&gt;
&lt;br /&gt;
Configure NTLMAPS startup batch :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;@echo off
"PATH_TO_PYTHON/python.exe" "PATH_TO_NTLMAPS/main.py"
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
In NTLMAPS configuration file server.cfg, set values as below :&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dans la section [GENERAL] :&lt;br /&gt;
&lt;pre class="prettyprint"&gt;LISTEN_PORT:5865 #leave default port or set an authorised port
PARENT_PROXY:ADRESS_PROXY =&amp;gt; #proxy adress
PARENT_PROXY_PORT:PORT_PROXY =&amp;gt; #proxy port
&lt;/pre&gt;
&lt;br /&gt;
Dans la section [NTLM_AUTH] :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;NT_DOMAIN:DOMAIN_NT #your domain
USER:USER_NT  #your user
PASSWORD:PASSWORD_NT #your password
&lt;/pre&gt;
&lt;br /&gt;
Start NTLMAPS with runserver.bat.
&lt;br /&gt;
Finally configure Maven to use the relay proxy. In your settings.xml :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd"&amp;gt;


...

&amp;lt;proxies&amp;gt;
&amp;lt;proxy&amp;gt;
&amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;
&amp;lt;protocol&amp;gt;http&amp;lt;/protocol&amp;gt; =&amp;gt; your protocol
&amp;lt;host&amp;gt;localhost&amp;lt;/host&amp;gt;
&amp;lt;port&amp;gt;5865&amp;lt;/port&amp;gt; =&amp;gt; port in server.cfg
&amp;lt;/proxy&amp;gt;
&amp;lt;/proxies&amp;gt;


...
&amp;lt;/settings&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
And enjoy.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-8238541763007550661?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/DodLDikyQWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/8238541763007550661/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/12/how-to-use-maven-behing-proxy-with.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/8238541763007550661?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/8238541763007550661?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/DodLDikyQWk/how-to-use-maven-behing-proxy-with.html" title="How to use Maven behing a proxy with authentication" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/12/how-to-use-maven-behing-proxy-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYNSHs_eCp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-3898728062633271374</id><published>2011-12-16T20:24:00.001+01:00</published><updated>2011-12-16T20:36:39.540+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:36:39.540+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="documentation" /><category scheme="http://www.blogger.com/atom/ns#" term="sitebricks" /><title>Documentation update for Sitebricks</title><content type="html">If you don't know Sitebricks for you Java web application, you should visit &lt;a href="http://sitebricks.org"&gt;sitebricks.org&lt;/a&gt; and give it a try.

I've released a bunch of basic documentation to the website. My small contribution to this great project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-3898728062633271374?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/xS1-aNrn438" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/3898728062633271374/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/12/documentation-update-for-sitebricks.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/3898728062633271374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/3898728062633271374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/xS1-aNrn438/documentation-update-for-sitebricks.html" title="Documentation update for Sitebricks" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/12/documentation-update-for-sitebricks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcARHc6fCp7ImA9WhRQF08.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-9213309554353019185</id><published>2011-12-12T20:59:00.000+01:00</published><updated>2011-12-12T21:00:45.914+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T21:00:45.914+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="regex" /><title>Online Java Regex tester</title><content type="html">As I was lazy to build a small program to test a regular expression, I've found this website. More than useful !&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.regexplanet.com/simple/index.html#.TuZdEbrrlhI.blogger"&gt;RegEx: online regular expression testing&lt;/a&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/8895599483610084591-9213309554353019185?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/cxpsaBd4cww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/9213309554353019185/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/12/online-java-regex-tester.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/9213309554353019185?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/9213309554353019185?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/cxpsaBd4cww/online-java-regex-tester.html" title="Online Java Regex tester" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/12/online-java-regex-tester.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcER349fyp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-4167079190101933932</id><published>2011-12-09T23:38:00.001+01:00</published><updated>2011-12-16T20:33:26.067+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:33:26.067+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="httpclient" /><category scheme="http://www.blogger.com/atom/ns#" term="proxy" /><title>How to use Apache HttpClient with JVM proxy settings ?</title><content type="html">I usualy try to stay close to sitebricks core functionnality. When I faced the issue of accessing a distant website threw a post request, I tried to use sitebricks &lt;a href="http://sitebricks.org/#webclient"&gt;webclient &lt;/a&gt;as described on official website :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current version is not ready to use as it doesn't support proxy (or at least I didn't find how to make in work) and also HTTPS request.&lt;br /&gt;
After a few search on google, I started to use Apache &lt;a href="http://hc.apache.org/httpcomponents-client-ga/"&gt;HttpClient&lt;/a&gt;, part of &lt;a href="http://hc.apache.org/index.html"&gt;HttpComponents&lt;/a&gt;.&lt;br /&gt;
I notice that this implementation is not taking care of proxy settings in the JVM. I did that function to use them anyway.
&lt;br /&gt;
Please notice that my final goal was to use a HTTPS distant website.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;private DefaultHttpClient initHttpClient() {
  
  DefaultHttpClient client = new DefaultHttpClient();
  
  String proxyHost = System.getProperty("https.proxyHost");
  if(proxyHost == null) {
   proxyHost = System.getProperty("http.proxyHost");
  }
  
  if(proxyHost != null) {
   
   String proxyUser = System.getProperty("https.proxyUser");
   if(proxyUser == null) {
    proxyUser = System.getProperty("http.proxyUser");
   }
   
   String proxyPassword = System.getProperty("https.proxyPassword");
   if(proxyPassword == null) {
    proxyPassword = System.getProperty("http.proxyPassword");
   }
   
   if(proxyUser != null &amp;amp;&amp;amp; proxyPassword != null) {
    client.getCredentialsProvider().setCredentials(
                     new AuthScope("localhost", 8080), 
                     new UsernamePasswordCredentials(proxyUser, proxyPassword));
   }
   
   String proxyPort = System.getProperty("https.proxyPort");
   if(proxyPort == null) {
    proxyPort = System.getProperty("http.proxyPort");
   }
   if(proxyPort == null) {
    proxyPort = "80";
   }
   
   HttpHost proxy = new HttpHost(proxyHost, Integer.parseInt(proxyPort));
            
            client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
  }
  
  return client;
&lt;/pre&gt;
&lt;br/&gt;
Finaly really easy to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-4167079190101933932?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/R5oD4uP3wkk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/4167079190101933932/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/12/how-to-use-apache-httpclient-with-jvm.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/4167079190101933932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/4167079190101933932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/R5oD4uP3wkk/how-to-use-apache-httpclient-with-jvm.html" title="How to use Apache HttpClient with JVM proxy settings ?" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/12/how-to-use-apache-httpclient-with-jvm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4MRHwyeSp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-9174280841182681811</id><published>2011-11-28T19:35:00.001+01:00</published><updated>2011-12-16T20:33:05.291+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:33:05.291+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="graphviz" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="chart" /><title>Do you know GraphViz support from Google Chart API ?</title><content type="html">Google Chart API as a beta support for &lt;a href="http://code.google.com/intl/fr-FR/apis/chart/image/docs/gallery/graphviz.html"&gt;GraphViz &lt;/a&gt;that is not well known.&lt;br /&gt;
&lt;br /&gt;
More or less all GraphViz &lt;a href="http://www.graphviz.org/"&gt;options &lt;/a&gt;are supported. The only limitation I've seen is special fonts (only the default one is supported) and number of nodes/edges (200/400).&lt;br /&gt;
&lt;br /&gt;
Google provide a &lt;a href="http://code.google.com/intl/fr-FR/apis/chart/image/docs/json_format.html"&gt;web UI&lt;/a&gt; to generate an image map to turn your static graph into a fully linked nodes graph. In fact the algorithm is really simple. Here is an example with jQuery :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;var fullUrl = 'URL_TO_BUILD_GRAPHVIZ_CHART';

// get it in Json format
$.get(fullUrl+'&amp;amp;chof=json', function(data) {
    // create a Map element
    var mapElement = $('&amp;lt;map&amp;gt;').attr('name','graph_map');
    var chart = data.chartshape;
    for (var i = 0; i &amp;lt; chart.length; i++) {
   &amp;nbsp;    // do nothing with edges
  &amp;nbsp;     if(chart[i].name.indexOf('unlabel') == -1) {
   &amp;nbsp;    var areaElement = $('&amp;lt;area&amp;gt;').attr('name',chart[i].name)
   &amp;nbsp;        .attr('shape',chart[i].type)
   &amp;nbsp;&amp;nbsp;       .attr('coords',chart[i].coords.join(","))
   &amp;nbsp;&amp;nbsp;       .attr('href','YOUR_LINK')
   &amp;nbsp; &amp;nbsp;      .attr('title',chart[i].name);
   &amp;nbsp;&amp;nbsp;       mapElement.append(areaElement);
  &amp;nbsp;     }
    }
    $('#google-chart').after(mapElement);
    $('#google-chart').attr('usemap','#graph_map');
}, 'json');&lt;/pre&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/8895599483610084591-9174280841182681811?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/b8rrqBoS81g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/9174280841182681811/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/do-you-know-graphviz-support-from.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/9174280841182681811?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/9174280841182681811?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/b8rrqBoS81g/do-you-know-graphviz-support-from.html" title="Do you know GraphViz support from Google Chart API ?" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/do-you-know-graphviz-support-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCQnY8eip7ImA9WhRSF00.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-1735055424918641850</id><published>2011-11-19T13:51:00.001+01:00</published><updated>2011-11-19T13:52:43.872+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T13:52:43.872+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="canvas" /><title>Canvas/jQuery graph library</title><content type="html">A very light and easy to use graph library to use with jQuery and a HTML5 canvas element.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://arborjs.org/"&gt;http://arborjs.org/&lt;/a&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/8895599483610084591-1735055424918641850?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/mENwb0diMhE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/1735055424918641850/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/canvasjquery-graph-library.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1735055424918641850?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1735055424918641850?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/mENwb0diMhE/canvasjquery-graph-library.html" title="Canvas/jQuery graph library" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/canvasjquery-graph-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CRHY8eip7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-8213467588562407529</id><published>2011-11-09T17:42:00.003+01:00</published><updated>2011-12-16T20:32:45.872+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:32:45.872+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="autocomplete" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery ui" /><title>jQuery UI Autocomplete Widget with a POST request</title><content type="html">The jQuery UI autocomplete plugin missed a 'method':'post' options to work with the remote page 'source' option.

Hopefully, there is a trick to go threw :

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;$('#searchInput').autocomplete({
 source: function(request, response) {
  $.post( "/dosomething", { searchInput: request.term }, function( data ) {
   response(data)
  }
  , 'json'); 
 },
 minLength: 2,
 cache: false,
 select: function( event, ui ) {
  window.location.href = 'a_page';
 }
});
&lt;/pre&gt;
The trick is to provide a function as the source option. This function will perform to Post request to server a get a JSON response : &lt;b&gt;&lt;i&gt;[{'id':'1', 'label':'label1', 'value':'value1'}, {...}, ...].&lt;/i&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-8213467588562407529?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/7wHF1FexMtY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/8213467588562407529/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/jquery-ui-autocomplete-widget-with-post.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/8213467588562407529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/8213467588562407529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/7wHF1FexMtY/jquery-ui-autocomplete-widget-with-post.html" title="jQuery UI Autocomplete Widget with a POST request" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/jquery-ui-autocomplete-widget-with-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4ARnoyfSp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-2487795812524962724</id><published>2011-11-09T17:42:00.001+01:00</published><updated>2011-12-16T20:32:27.495+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:32:27.495+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="guice" /><category scheme="http://www.blogger.com/atom/ns#" term="file" /><category scheme="http://www.blogger.com/atom/ns#" term="sitebricks" /><category scheme="http://www.blogger.com/atom/ns#" term="upload" /><title>How to upload a file using SiteBricks ?</title><content type="html">It is supposed to work that way :

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;@Post
public Reply&amp;lt;?&amp;gt; upload(Request req) {
 try {
  File tmp = File.createTempFile("upload", ".csv");
  OutputStream out = new FileOutputStream(tmp);
  req.readTo(out);
  out.close();
    
  // do something with tmp
   
 }
 catch (IOException e) {
  e.printStackTrace();
 }
 
 return Reply.saying().ok();
}
&lt;/pre&gt;
But in fact the tmp File will not only contain the sent file but also all the request details (User Agent, others parameters, ...).

As I needed a way to have the sent file and only it, I did it with a more regular Servlet Way.

First add the commons-fileupload to your path.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;commons-fileupload&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;commons-fileupload&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;1.2.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
Then Inject the HttpServletRequest in your @Show or @Service class.

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;@Inject
private HttpServletRequest request;
&lt;/pre&gt;
Finaly, use the commons-fileupload methods to get your file :

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;

try {
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 if(isMultipart) {
  ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
  List items = upload.parseRequest(request);
  for(Object obj : items) {
   if(obj instanceof FileItem) {
    FileItem item = (FileItem)obj;
    if(item.getFieldName().equals("my-file-field-name")) {
     // do something with item.getInputStream()
    }
   }

  }
 }
}
catch(FileUploadException e) {
 e.printStackTrace();
}
catch (IOException e) {
 e.printStackTrace();
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-2487795812524962724?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/tS7MKXqrufo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/2487795812524962724/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/how-to-upload-file-using-sitebricks.html#comment-form" title="2 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/2487795812524962724?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/2487795812524962724?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/tS7MKXqrufo/how-to-upload-file-using-sitebricks.html" title="How to upload a file using SiteBricks ?" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/how-to-upload-file-using-sitebricks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4FQHc7eyp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-1788667693276215351</id><published>2011-11-09T17:41:00.001+01:00</published><updated>2011-12-16T20:31:51.903+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:31:51.903+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="libraries" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery ui" /><title>Load jQuery UI theme from Google</title><content type="html">The &lt;a href="http://code.google.com/intl/fr-FR/apis/loader/"&gt;Google Libraries API&lt;/a&gt; allows you to load jQuery and jQuery UI.

What is not documented is that you can also load jQuery UI theme with a simple &amp;lt;link&amp;gt; tag.

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;head&amp;gt;&amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/redmond/jquery-ui.css" rel="Stylesheet" type="text/css"&amp;gt;&amp;lt;/link&amp;gt;
...
&amp;lt;/head&amp;gt;
&lt;/pre&gt;
That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-1788667693276215351?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/V1s_uiCdKmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/1788667693276215351/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/load-jquery-ui-theme-from-google.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1788667693276215351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1788667693276215351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/V1s_uiCdKmY/load-jquery-ui-theme-from-google.html" title="Load jQuery UI theme from Google" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/load-jquery-ui-theme-from-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8MQ30zcCp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-1364051207653278605</id><published>2011-11-06T22:29:00.001+01:00</published><updated>2011-12-16T20:31:22.388+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:31:22.388+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="list" /><title>Build a hierarchical list with jQuery</title><content type="html">Here is a little plugin jQuery I made to auto format hierarchical list.&lt;br /&gt;
&lt;br /&gt;
The plugin code :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;(function( $ ) {
  $.fn.hierarchical = function(options) {
   
   var settings = {
       'openImage' : 'none',
       'closeImage' : 'none',
       'imageWidth' : '0'
     };
   
   if(options) { 
    $.extend( settings, options );
   }
   
   indent(this, 0, settings.openImage, settings.closeImage, settings.imageWidth);
   return this;
  };
})( jQuery );


function indent(list, indentation, openImage, closeImage, imageWidth) {
 $(list).children('li').each(function() {
  if($(this).children('div').size() == 1) {
   
   $(this).children('div')
     .css('margin-left', indentation + 'px')
     .css('padding-left', imageWidth + 'px')
     .css('background', 'url(' + closeImage + ') no-repeat top left')
     .css('cursor','pointer')
     .click(function() {
      if($(this).parent().children('ul').css('display')=='none') {
       $(this).parent().children('ul').css('display', 'block');
       $(this).css('background', 'url(' + openImage + ') no-repeat top left')
      }
      else {
       $(this).parent().children('ul').css('display', 'none');
       $(this).css('background', 'url(' + closeImage + ') no-repeat top left')
      }
     });
   
   $(this).children('ul')
     .css('display', 'none')
     .css('margin-left',(indentation + 16) + 'px');
   
   indent($(this).children('ul'), (indentation + 5), openImage, closeImage, 16);
   
  }
  else {
   $(this).css('margin-left', indentation + 'px');
  }
 });
}
&lt;/pre&gt;
The list architecture should follow the architecture below. Each&lt;i&gt; li&lt;/i&gt; element should have a title inside a &lt;i&gt;div&lt;/i&gt; element and a content inside a &lt;i&gt;ul&lt;/i&gt; element.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;ul class="hierarchical-list"&amp;gt;
   &amp;lt;li&amp;gt;
      &amp;lt;div&amp;gt;First Element Title&amp;lt;/div&amp;gt;
      &amp;lt;ul&amp;gt;
         &amp;lt;li&amp;gt;
            &amp;lt;div&amp;gt;Second Level Element Title&amp;lt;/div&amp;gt;
            &amp;lt;ul&amp;gt;
               &amp;lt;li&amp;gt;
                  &amp;lt;div&amp;gt;Third Element Title&amp;lt;/div&amp;gt;
                  &amp;lt;ul&amp;gt;
                      &amp;lt;li&amp;gt;Simple element.&amp;lt;/li&amp;gt;
                  &amp;lt;/ul&amp;gt;
               &amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;
         &amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;
   &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Last thing to do is to call the plugin on your list :

&lt;br /&gt;
&lt;pre class="prettyprint"&gt;$(document).ready(function() {
   $('.hierarchical-list').hierarchical({
    'openImage' : images/open.png',
        'closeImage' : images/close.png',
        'imageWidth' : '16'
   });
  });

&lt;/pre&gt;
And that's it. jQuery is really a write less do more lib.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-1364051207653278605?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/5zQ14WVEd64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/1364051207653278605/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/build-hierarchical-list-with-jquery.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1364051207653278605?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1364051207653278605?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/5zQ14WVEd64/build-hierarchical-list-with-jquery.html" title="Build a hierarchical list with jQuery" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/build-hierarchical-list-with-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAAQXk6eSp7ImA9WhRXEEs.&quot;"><id>tag:blogger.com,1999:blog-8895599483610084591.post-1384829749684683639</id><published>2011-11-03T16:52:00.002+01:00</published><updated>2011-12-16T20:29:00.711+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:29:00.711+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="guice" /><category scheme="http://www.blogger.com/atom/ns#" term="freemarker" /><category scheme="http://www.blogger.com/atom/ns#" term="sitebricks" /><title>Use Sitebricks with Freemarker</title><content type="html">Few months ago, I've started to use Guice and Sitebricks for my web applications instead of the Spring MVC architecture I was working with for years. And I have to say I'm now a Guice addict.&amp;nbsp;Sitebricks is a really great framework but there is one thing I don't get use to it : the default MVEL based templating engine. I've switch to Freemarker and here is how I did it.&lt;br /&gt;
&lt;br /&gt;
If you want to switch to Sitebricks, you should also know that there is a lack of documentation but the user group is really active.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Here is &amp;nbsp;the Renderable interface I've designed :&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class="prettyprint"&gt;public interface Renderable {

 public Map&amp;lt;String, Object&amp;gt; getModel();
 public String getTemplate();
 
}&lt;/pre&gt;
&lt;br /&gt;
Each Renderable object can be process by the TemplateEngine :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
public class TemplateEngine {

 private Configuration configuration;
 
 public TemplateEngine() {
  this.configuration = new Configuration();
  this.configuration.setClassForTemplateLoading(this.getClass(), "/");
  this.configuration.setObjectWrapper(new DefaultObjectWrapper()); 
 }
 
 public String render(Renderable renderable) {
  try {
   Template template = configuration.getTemplate(renderable.getTemplate());
   Writer out = new StringWriter();
   template.setEncoding("UTF-8");
   template.process(renderable.getModel(), out);
         out.flush();
         return out.toString();
  }
  catch (IOException e) {
   e.printStackTrace();
  }
  catch (TemplateException e) {
   e.printStackTrace();
  }
  return "Templating Error";
 }
 
}&lt;/pre&gt;
&lt;br /&gt;
The trick is to transform all your Sitebricks pages annotated with @Show into a service annotated with @Service. Each service will implement the Renderable interface and the method getTemplate() should return the value previously given as parameter to @Show.&lt;br /&gt;
Then use the Reply API to send your template back to the browser.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;Reply.with(templateEngine.render(this)).type("text/html; charset=utf-8");&lt;/pre&gt;
&lt;br /&gt;
For example :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
@Service
public class TestService implements Renderable {

 @Get
 public Reply&amp;lt;String&amp;gt; get() {
  // do something
  return Reply.with(templateEngine.render(this)).type("text/html; charset=utf-8");
 }

 @Override
 public Map&amp;lt;String, Object&amp;gt; getModel() {
  Map&amp;lt;String, Object&amp;gt; model = initModel();
  model.put("test", "test");
  return model;
 }

 @Override
 public String getTemplate() {
  return "test.ftl";
 }

}
&lt;/pre&gt;
&lt;br /&gt;

And here you are. Freemarker is now your templating engine in Sitebricks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8895599483610084591-1384829749684683639?l=www.thomasclarisse.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasclarisse/rss/~4/ypDOnPUAyxU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thomasclarisse.com/feeds/1384829749684683639/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.thomasclarisse.com/2011/11/nouveau-message.html#comment-form" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1384829749684683639?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8895599483610084591/posts/default/1384829749684683639?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomasclarisse/rss/~3/ypDOnPUAyxU/nouveau-message.html" title="Use Sitebricks with Freemarker" /><author><name>Thomas Clarisse</name><uri>https://profiles.google.com/105052888961027738437</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-lCVsGlMjmq4/AAAAAAAAAAI/AAAAAAABs-w/xBcsbPybNPM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thomasclarisse.com/2011/11/nouveau-message.html</feedburner:origLink></entry></feed>

