<?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">
  <title type="text">Planète GTLL</title>
  <id>http://www.gt-logiciel-libre.org/rss</id>
  <updated>2012-06-13T15:14:21Z</updated>
  <link href="http://www.gt-logiciel-libre.org/" />
  
  <subtitle type="text">Échos de l'écosystème du libre en Ile-de-France</subtitle>
  <generator>Werkzeug</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/gt-logiciel-libre" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="gt-logiciel-libre" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Compatible One] CompatibleOne 2nd Hands On Session in Paris</title>
    <id>http://www.compatibleone.org/bin/view/Events/CompatibleOne+2nd+Hands+On+Session+in+Paris?language=en</id>
    <updated>2012-06-13T15:14:21Z</updated>
    <published>2012-06-13T15:14:21Z</published>
    <link href="http://www.compatibleone.org/bin/view/Events/CompatibleOne+2nd+Hands+On+Session+in+Paris?language=en" />
    <author>
      <name>olivier lizounat</name>
    </author>
    <content type="text/html">&lt;p&gt;Significant progress have been made since January'session. It is time now for a new "Hands On" session. &lt;span style="font-size: 12px; font-style: normal; line-height: 16px;"&gt;This session will be the opportunity to answer all the questions you may have concerning usage of CompatibleOne. You will be able to to manipulate CompatibleOne platform with the help and support of the developers themselves. And naturally these sessions will be interactive and will take place&lt;/span&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Compatible One] CompatibleOne at the Green IT &amp; Cloud Aristote seminar</title>
    <id>http://www.compatibleone.org/bin/view/Events/CompatibleOne+at+the+Green+IT+%26+Cloud+Aristote+seminar?language=en</id>
    <updated>2012-06-05T10:33:23Z</updated>
    <published>2012-06-05T10:33:23Z</published>
    <link href="http://www.compatibleone.org/bin/view/Events/CompatibleOne+at+the+Green+IT+%26+Cloud+Aristote+seminar?language=en" />
    <author>
      <name>Alexandre Lefebvre</name>
    </author>
    <content type="text/html">&lt;p&gt;Maxime Morel et Julien Carpentier (INRIA - ENS Lyon) will present the CompatibleOne approach to energy efficiency of Cloud infrastructures at the Green IT &amp; Cloud Aristote seminar.&lt;br /&gt;The detailed program of the seminar can be found at &lt;span class="wikiexternallink"&gt;&lt;a class="wikimodel-freestanding" href="http://www.association-aristote.fr/doku.php/public/seminaires/seminaire-2012-06-05"&gt;&lt;span class="wikigeneratedlinkcontent"&gt;http://www.association-aristote.fr/doku.php/public/seminaires/seminaire-2012-06-05&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Compatible One] CompatibleOne presentation at the OW2 Berlin Day</title>
    <id>http://www.compatibleone.org/bin/view/Events/CompatibleOne+presentation+at+the+OW2+Berlin+Day?language=en</id>
    <updated>2012-05-29T10:35:25Z</updated>
    <published>2012-05-29T10:35:25Z</published>
    <link href="http://www.compatibleone.org/bin/view/Events/CompatibleOne+presentation+at+the+OW2+Berlin+Day?language=en" />
    <author>
      <name>Alexandre Lefebvre</name>
    </author>
    <content type="text/html">&lt;p&gt;Cedric Thomas will present "CompatibleOne: the Open Source Cloud Broker: architecture overview” at the OW2 Berlin Day.&lt;br /&gt;More details at &lt;span class="wikiexternallink"&gt;&lt;a class="wikimodel-freestanding" href="http://www.ow2.org/Events/OW2_Berlin_Day_2012"&gt;&lt;span class="wikigeneratedlinkcontent"&gt;http://www.ow2.org/Events/OW2_Berlin_Day_2012&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Nuxeo Blogs] [dev] [Q&amp;A Friday] How binaries are physically in the file system</title>
    <id>http://dev.blogs.nuxeo.com/?p=4499</id>
    <updated>2012-05-25T14:46:48Z</updated>
    <published>2012-05-25T14:46:48Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/05/qa-friday-binaries-stored-nuxeo.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="text/html">&lt;div class="wp-caption alignright" id="attachment_4385" style="width: 167px;"&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/02/question.png"&gt;&lt;img alt="How binaries are stored in Nuxeo" class="size-full wp-image-4385" height="123" src="http://dev.blogs.nuxeo.com/files/2012/02/question.png" width="157" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;How are binaries stored in Nuxeo?&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Today we have a question from &lt;a href="http://answers.nuxeo.com/users/287/systemz" title="systemz on Nuxeo Answers"&gt;systemz&lt;/a&gt; who asks&lt;a href="http://answers.nuxeo.com/questions/2761/thumbnail-paths" title="Thumbnail paths"&gt; where Nuxeo binaries are physically stored in the file system&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The class that takes care of binary storage is the &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/BinaryManager.html" title="BinaryManager JavaDoc"&gt;&lt;em&gt;BinaryManager&lt;/em&gt;&lt;/a&gt;. There are several implementations (&lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/net/BinaryManagerClient.html" title="class in org.nuxeo.ecm.core.storage.sql.net"&gt;BinaryManagerClient&lt;/a&gt;, &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.html" title="class in org.nuxeo.ecm.core.storage.sql"&gt;DefaultBinaryManager&lt;/a&gt;, &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/SQLBinaryManager.html" title="class in org.nuxeo.ecm.core.storage.sql"&gt;SQLBinaryManager&lt;/a&gt;, &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/XORBinaryManager.html" title="class in org.nuxeo.ecm.core.storage.sql"&gt;XORBinaryManager&lt;/a&gt;). There is also one for Amazon S3 &lt;a href="https://connect.nuxeo.com/nuxeo/site/marketplace/package/amazon-s3-online-storage" title="Amazon S3 Online Storage"&gt;on our Marketplace&lt;/a&gt;. It offers the option of storing binaries in an &lt;a href="http://aws.amazon.com/s3/" title="Amazon Simple Storage Service (Amazon S3)"&gt;Amazon S3 bucket&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The default implementation is &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.html" title="DefaultBinaryManager JavaDoc"&gt;&lt;em&gt;DefaultBinaryManager&lt;/em&gt;&lt;/a&gt;. Its goal is to compute the digest of the binary and store it on the server&amp;#8217;s file system accordingly. Let&amp;#8217;s say, for instance, that our file has the following digest: a75badefeb96972667306ac8f696143b&lt;/p&gt;
&lt;p&gt;Its location will be &lt;em&gt;nuxeo.data.dir/binaries/data/a7/5b/a75badefeb96972667306ac8f696143b&lt;/em&gt; where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nuxeo.data.dir is the folder corresponding to the nuxeo.data.dir property from &lt;em&gt;nuxeo.conf&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;binaries is the path defined in the binaryManager contribution&lt;/li&gt;
&lt;li&gt;data is the hierarchy with the actual binaries in subdirectories&lt;/li&gt;
&lt;li&gt;a7 is a folder named after the two first characters of the digest&lt;/li&gt;
&lt;li&gt;5b is a folder named after the third and fourth characters of the digest&lt;/li&gt;
&lt;li&gt;a75badefeb96972667306ac8f696143b is the file named after the digest&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can configure the depth of the folders and the key algorithm used to compute the digest. The default algorithm is &lt;em&gt;md5&lt;/em&gt; and the default depth is 2.&lt;/p&gt;
&lt;p&gt;To change the implementation of your &lt;em&gt;BinaryManager&lt;/em&gt;, as usual you need to contribute to an extension point:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension target=&amp;quot;org.nuxeo.ecm.core.repository.RepositoryService&amp;quot;
    point=&amp;quot;repository&amp;quot;&amp;gt;
    ...
    &amp;lt;repository name=&amp;quot;default&amp;quot; factory=&amp;quot;...&amp;quot;&amp;gt;
      &amp;lt;repository name=&amp;quot;default&amp;quot;&amp;gt;
        &amp;lt;binaryManager class=&amp;quot;org.nuxeo.ecm.core.storage.sql.S3BinaryManager&amp;quot;
         path=&amp;quot;binaries&amp;quot;/&amp;gt;
        ...
      &amp;lt;/repository&amp;gt;
    &amp;lt;/repository&amp;gt;
    ...
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;If you want more details about this I suggest you read the &lt;a href="http://doc.nuxeo.com/x/HABu" title="Amazon S3 Online Storage Documentation"&gt;installation documentation&lt;/a&gt; for the Amazon S3 Online Storage.&lt;/p&gt;
&lt;p&gt;So, as you can see, it&amp;#8217;s really hard to identify binaries without using the Nuxeo API. I would discourage anyone from doing that. But in case you &lt;strong&gt;have to&lt;/strong&gt;, here are a couple of suggestions on how to retrieve the digest computed by the binary store.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t mistake this with the Blob digest metadata. This digest is different from the one computed by the binary store. It&amp;#8217;s used by the unicity check API.&lt;/p&gt;
&lt;p&gt;To retrieve this digest, you have to use the &lt;em&gt;&lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/Binary.html" title="Binary JavaDoc"&gt;Binary&lt;/a&gt;&lt;/em&gt; object, available only through an &lt;em&gt;&lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/storage/sql/coremodel/SQLBlob.html" title="SQLBlob JavaDoc"&gt;SQLBlob&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Again, this is a real pain, and I really encourage you to use the usual Nuxeo API :-)&lt;/p&gt;
&lt;p&gt;Thanks for reading, see ya&amp;#8217; on Monday!&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Adacore] The syntax tree is now dynamic</title>
    <id>http://www.adacore.com/developers/development-log/NF-110-L521-023-spark#When:00:00:00Z</id>
    <updated>2012-05-25T00:00:00Z</updated>
    <published>2012-05-25T00:00:00Z</published>
    <link href="http://www.adacore.com/developers/development-log/NF-110-L521-023-spark" />
    <author>
      <name />
    </author>
    <content type="text/html">The syntax tree has been made dynamic allowing analysis of programs
containing more than 3,200,000 productions.</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[OpenWide] ALM et Open Source – Petit Déjeuner le 19 juin 2012</title>
    <id>http://www.improve-technologies.com/blog/?p=264</id>
    <updated>2012-05-24T15:23:07Z</updated>
    <published>2012-05-24T15:23:07Z</published>
    <link href="http://www.improve-technologies.com/blog/2012/05/24/alm-et-open-source-petit-dejeuner-le-19-juin-2012/" />
    <author>
      <name>David DUQUENNE</name>
    </author>
    <content type="text/html">&lt;p&gt;&lt;a href="http://www.improve-foundations.com/inscription/?utm_source=inscription&amp;amp;utm_medium=blog&amp;amp;utm_campaign=IFY"&gt;&lt;img alt="" class="alignleft size-full wp-image-277" height="66" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/05/if_inscription.jpg" title="Inscription gratuite" width="147" /&gt;&lt;/a&gt;&lt;strong&gt;Inscrivez-vous gratuitement au petit déjeuner &lt;br /&gt;le mardi 19 juin 2012 de 8h30 à 11h chez &lt;br /&gt;Open Wide Technologies &lt;br /&gt;23-27 rue Daviel &amp;#8211; 75013 Paris.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Malgré un environnement de développement Java devenu plus mature, déployer une &lt;strong&gt;chaîne d&amp;#8217;intégration continue&lt;/strong&gt;, organiser une &lt;strong&gt;gestion des tests unitaires&lt;/strong&gt;, sécuriser le &lt;strong&gt;suivi des versions&lt;/strong&gt; ou assurer une &lt;strong&gt;mesure continue de la qualité&lt;/strong&gt; restent des opérations complexes.&lt;/p&gt;
&lt;p&gt;Plus largement, les solutions d&amp;#8217;ALM (Application Lifecycle Management) ont pour vocation de proposer un processus continu de gestion du cycle de vie d&amp;#8217;une application en terme de gouvernance, de réalisation et de maintenance.&lt;/p&gt;
&lt;p&gt;Les solutions qui proposent d&amp;#8217;outiller ce processus sont souvent complexes et coûteuses à mettre en œuvre. Au cours de ce petit déjeuner, nous vous présenterons la forge de développement Improve Factory, une solution d&amp;#8217;ALM simple, légère et économique reposant sur des solutions open source.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;/p&gt;
&lt;table bgcolor="#EFEFEF" border="1" cellpadding="5" cellspacing="0" width="50%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;span style="color: #000000; font-family: Arial; font-size: small;"&gt;&lt;br /&gt;
&lt;strong&gt;AGENDA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;08h30&lt;/strong&gt; : Accueil petit déjeuner&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;09h00&lt;/strong&gt; : Qui sommes-nous ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;09h15&lt;/strong&gt; : Introduction à l&amp;#8217;ALM&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;09h45&lt;/strong&gt; : Présentation &lt;strong&gt;Improve Factory&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10h15&lt;/strong&gt; : Démonstration de la plateforme&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10h45&lt;/strong&gt; : Questions / Réponses&lt;/p&gt;
&lt;p&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Adresse : &lt;strong&gt;Open Wide Technologies &amp;#8211; 23-27 rue Daviel &amp;#8211; 75013 &amp;#8211; Paris&lt;/strong&gt;&lt;br /&gt;
Contact : &lt;strong&gt;technologies@openwide.fr &amp;#8211; 01.42.68.28.14&lt;/strong&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Zenika] MongoDB Day Paris le 14 juin</title>
    <id>urn:md5:f6a2ab0334ccad16f541937dd006766e</id>
    <updated>2012-05-24T07:45:00Z</updated>
    <published>2012-05-24T07:45:00Z</published>
    <link href="http://blog.zenika.com/index.php?post/2012/05/23/MongoDB-Day-Paris-le-14-juin" />
    <author>
      <name>Arnaud Cogoluègnes</name>
    </author>
    <content type="text/html">&lt;p&gt;&lt;a href="http://www.10gen.com/"&gt;10gen&lt;/a&gt; - l'entreprise derrière MongoDB - organise le &lt;a href="http://www.10gen.com/events/mongodb-paris"&gt;MongoDB Day Paris le 14 juin&lt;/a&gt;. &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; est une base de données orientée document et certainement un des produits NoSQL les plus populaires.&lt;/p&gt;    &lt;p&gt;Le MongoDB Day Paris c'est :


Une conférence avec 250 participants
Plus de 20 sessions animées par des ingénieurs 10gen et des utilisateurs de MongoDB en production.
Des sessions Ask the Expert, une nouveauté cette année, où vous pourrez passer du temps en tête à tête avec un ingénieur 10gen. Réservation indispensable !
Des ateliers de formation... &lt;em&gt;&lt;a href="http://blog.zenika.com/index.php?post/2012/05/23/MongoDB-Day-Paris-le-14-juin"&gt;Lire&lt;/em&gt; MongoDB Day Paris le 14 juin&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Adacore] GPS: display symbol names in memory view</title>
    <id>http://www.adacore.com/developers/development-log/NF-52-JB23-037-gps#When:00:00:00Z</id>
    <updated>2012-05-24T00:00:00Z</updated>
    <published>2012-05-24T00:00:00Z</published>
    <link href="http://www.adacore.com/developers/development-log/NF-52-JB23-037-gps" />
    <author>
      <name />
    </author>
    <content type="text/html">Memory view is extended to display symbol information.</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Zenika] Spring Batch and MongoDB: cursor-based item reader</title>
    <id>urn:md5:7b421b7379061b4d854868371f42b613</id>
    <updated>2012-05-23T07:18:00Z</updated>
    <published>2012-05-23T07:18:00Z</published>
    <link href="http://blog.zenika.com/index.php?post/2012/05/23/Spring-Batch-and-MongoDB-cursor-based-item-reader" />
    <author>
      <name>Arnaud Cogoluègnes</name>
    </author>
    <content type="text/html">&lt;p&gt;&lt;a href="http://static.springsource.org/spring-batch/"&gt;Spring Batch&lt;/a&gt; is a popular open source batch framework. It integrates with lots of RDBM technologies like JDBC, Hibernate or JPA, but doesn't have official support for NoSQL datastores yet. This post shows how to integrate Spring Batch and &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; to read large datasets from this document-oriented datastore.&lt;/p&gt;    &lt;p&gt;What for?


MongoDB is often used to store large sets of data like logs. When it comes to analyze such data, MongoDB provides simple aggregation operators or even MapReduce, but these technics are somewhat limited. There's even a new project to integrate MongoDB with Hadoop, but, hey, apart from web-scale applications, who wants to set up a Hadoop... &lt;em&gt;&lt;a href="http://blog.zenika.com/index.php?post/2012/05/23/Spring-Batch-and-MongoDB-cursor-based-item-reader"&gt;Lire&lt;/em&gt; Spring Batch and MongoDB: cursor-based item reader&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Compatible One] CompatibleOne OSCi Workshop March 2012</title>
    <id>http://www.compatibleone.org/bin/view/Project-Presentations/CompatibleOne+OSCi+Workshop+March+2012?language=en</id>
    <updated>2012-05-22T16:57:53Z</updated>
    <published>2012-05-22T16:57:53Z</published>
    <link href="http://www.compatibleone.org/bin/view/Project-Presentations/CompatibleOne+OSCi+Workshop+March+2012?language=en" />
    <author>
      <name>Jean-Pierre Laisne</name>
    </author>
    <content type="text/html">&lt;div class="slidesharemacrocontainer"&gt;&lt;div class="slidesharemacrothumbnail"&gt;&lt;a class="lightwindow" href="http://www.slideshare.net/slideshow/embed_code/13031737"&gt;&lt;img src="http://cdn.slidesharecdn.com/compatibleoneosciworkshop03292012-120522115511-phpapp02-thumbnail?1337705815" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="slidesharemacrolegend"&gt;CompatibleOne OSCi Workshop&lt;/div&gt;&lt;/div&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[Smile] Smile, partenaire Platinum du Liferay Symposium 2012</title>
    <id>http://www.smile.fr/rss/feed/116226d474cf8e9f1c9883efc8205eaa</id>
    <updated>2012-05-22T08:39:27Z</updated>
    <published>2012-05-22T08:39:27Z</published>
    <link href="http://www.smile.fr/Actualites/Nos-actualites/Liferay-Symposium-2012" />
    <author>
      <name>com@smile.fr (Leslie Martin)</name>
    </author>
    <content type="text/html">&lt;p&gt;Le second symposium de Liferay en France se tiendra le mercredi 23 mai 2012, à Paris aux&amp;nbsp;Salons Du Pré Catelan – Lenôtre.&lt;/p&gt;</content>
  </entry>
  <entry xml:base="http://www.gt-logiciel-libre.org/rss">
    <title type="text">[CubicWeb] Thoughts on CubicWeb 4.0</title>
    <id>http://www.cubicweb.org/blogentry/2356431</id>
    <updated>2012-05-21T16:04:00Z</updated>
    <published>2012-05-21T16:04:00Z</published>
    <link href="http://feedproxy.google.com/~r/cubicweborg/~3/TcdinjESViY/2356431" />
    <author>
      <name>Sylvain Thenault</name>
    </author>
    <content type="text/html">&lt;p&gt;This is a fairly technical post talking about the structural changes I would like to see in CubicWeb's near future. Let's call that CubicWeb 4.0! It also drafts ideas on how to go from here to there. Draft, really. But that will eventually turn into a nice roadmap hopefully.&lt;/p&gt;
&lt;div class="section" id="the-great-simplification"&gt;
&lt;h3&gt;&lt;a&gt;The great simplification&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Some parts of cubicweb are sometimes too hairy for different reasons (some good,
most bad). This participates in the difficulty to get started quickly. The goal of cubicweb 4.0 should be to make things simpler :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Fix some bad old design.&lt;/li&gt;
&lt;li&gt;Stop reinventing the wheel and use widely used libraries in the Python Web
World. This extends to benefitting from state of the art libraries to build nice
and flexible UI such as Bootstrap, on top of the JQuery foundations (which could
become as prominent as the Python standard library in CubicWeb, the development team should get
ready for it).&lt;/li&gt;
&lt;li&gt;If there is a best way to do something, just do it and refrain from providing configurability and options.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-road-to-bootstrap"&gt;
&lt;h3&gt;&lt;a&gt;On the road to Bootstrap&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First, a few simple things could be done to simplify the UI code:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;drop xhtml support: always return text/html content type, stop bothering
with this stillborn stuff and use html5&lt;/li&gt;
&lt;li&gt;move away everything that should not be in the framework: calendar?, embedding,
igeocodable, isioc, massmailing, owl?, rdf?, timeline, timetable?, treeview?,
vcard, wdoc?, xbel, xmlrss?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then we should probably move the default UI into some cubes (i.e. the content of
cw.web.views and cw.web.data). Besides making the move to Bootstrap easier, this
should also have the benefit of making clearer that this is the default way to
build an (automatic) UI in CubicWeb, but one may use other, more usual,
strategies (such as using a template language).&lt;/p&gt;
&lt;p&gt;At a first glance, we should start with the following core cubes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;corelayout&lt;/cite&gt;, the default interface layout and generic components. Modules to
backport there: application (not an appobject yet), basetemplates, error,
boxes, basecomponents, facets, ibreadcrumbs, navigation, undohistory.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;coreviews&lt;/cite&gt;, the default generic views and forms. Modules to backport there:
actions, ajaxedit, baseviews, autoform, dotgraphview, editcontroller,
editforms, editviews, forms, formrenderers, primary, json, pyviews, tableview,
reledit, tabs.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;corebackoffice&lt;/cite&gt;, the concrete views for the default back-office that let you
handle users, sources, debugging, etc. through the web. Modules to backport
here: cwuser, debug, bookmark, cwproperties, cwsources, emailaddress,
management, schema, startup, workflow.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;coreservices&lt;/cite&gt;, the various services, not directly related to display of
something. Modules to backport here: ajaxcontroller, apacherewrite,
authentication, basecontrollers, csvexport, idownloadable, magicsearch,
sessions, sparql, sessions, staticcontrollers, urlpublishing, urlrewrite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a first draft that will need some adjustements. Some of the listed
modules should be split (e.g. actions, boxes,) and their content moved to
different core cubes. Also some modules in &lt;cite&gt;cubicweb.web&lt;/cite&gt; packages may be moved
to the relevant cube.&lt;/p&gt;
&lt;p&gt;Each cube should provide an interface so that one could replace it with another
one. For instance, move from the default &lt;cite&gt;coreviews&lt;/cite&gt; and &lt;cite&gt;corelayout&lt;/cite&gt; cube to
bootstrap based ones. This should allow a nice migration path from the current UI
to a Bootstrap based UI. Bootstrap should probably be introduced bottom-up: start
using it for tables, lists, etc. then go up until the layout defined in the main
template. The Orbui experience should greatly help us by pointing at hot spots
that will have to be tackled, as well as by providing a nice code base from which
we should start.&lt;/p&gt;
&lt;p&gt;Regarding current implementation, we should take care that Contextual components
are a powerful way to build &amp;quot;pluggable&amp;quot; UI, but we should probably add an
intermediate layer that would make more obvious / explicit:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;what the available components are&lt;/li&gt;
&lt;li&gt;what the available slots are&lt;/li&gt;
&lt;li&gt;which component should go in which slot when possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also at some point, we should take care to separate view's logic from HTML
generation: our experience with client works shows that a common need is to use
the logic but produce a different HTML. Though we should wait for more use of
Bootstrap and related HTML simplification to see if the CSS power doesn't
somewhat fulfill that need.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-road-to-wsgi-and-related"&gt;
&lt;h3&gt;&lt;a&gt;On the road to WSGI and related&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For the record regarding WSGI:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference" href="http://mongrel2.org/"&gt;http://mongrel2.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference" href="http://projects.unbit.it/uwsgi/"&gt;http://projects.unbit.it/uwsgi/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference" href="http://wiki.nginx.org/NgxWSGIModule"&gt;http://wiki.nginx.org/NgxWSGIModule&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At some point, the whole &lt;cite&gt;cw.etwist&lt;/cite&gt; package should be dropped in favor of &lt;cite&gt;cw.wsgi&lt;/cite&gt;.&lt;/p&gt;
&lt;div class="section" id="werkzeug"&gt;
&lt;h4&gt;&lt;a&gt;Werkzeug&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a class="reference" href="http://werkzeug.pocoo.org/"&gt;http://werkzeug.pocoo.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Werkzeug framework sounds like a good candidate to use as a library that
would replace/simplify the request, httpcache, session, authentication (maybe
more) modules as well as the wsgi package. It sounds like the right candidate for
the following reasons:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;it's a non-intrusive WSGI library, not a web framework,&lt;/li&gt;
&lt;li&gt;it's used by fairly popular frameworks (openerp, flask),&lt;/li&gt;
&lt;li&gt;I'm +1 on A. Ronacher idea of a common request implementation for python web
frameworks, let's experiment and promote this idea.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="route-url-handling"&gt;
&lt;h4&gt;&lt;a&gt;Route (URL handling)&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Investigate URL routing modules as a replacement for urlpublishing, urlrewrite and
apacherewrite.&lt;/p&gt;
&lt;p&gt;Candidates are :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;werkzeug.routing&lt;/cite&gt;, which has noticable pros: celebrated by A. Martelli,
provided by an already-in-wishlist library, URL routing &lt;em&gt;AND&lt;/em&gt; generation.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;routes&lt;/cite&gt; (&lt;a class="reference" href="http://routes.readthedocs.org/en/latest/"&gt;http://routes.readthedocs.org/en/latest/&lt;/a&gt;), pros: used by pylons,
features conditional matching based on domain, cookies, HTTP method... and
sub-domain support.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;selector&lt;/cite&gt; (&lt;a class="reference" href="http://lukearno.com/projects/selector/"&gt;http://lukearno.com/projects/selector/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I've to say I'm somewhat impatient to find some time to give a try to
&lt;cite&gt;werkzeug.routing&lt;/cite&gt;. IMO, used well, that may introduce a structural change that
would make things much easier to understand and configure properly.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-road-to-proper-tasks-management"&gt;
&lt;h3&gt;&lt;a&gt;On the road to proper tasks management&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The current looping task / repo thread mecanism is used for various sort of
things and has several problems:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;tasks don't behave similarly in a multi-instances configuration (some should
be executed in a single instance, some in a subset); the tasks system has been
originally written in a single instance context; as of today this is (sometimes)
handled using configuration options (that will have to be properly set in each
instance configuration file);&lt;/li&gt;
&lt;li&gt;tasks is a repository only api but we also need web-side tasks;&lt;/li&gt;
&lt;li&gt;there is probably some abuse of the system that may lead to unnecessary
resources usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Analyzing a sample &lt;a class="reference" href="http://www.logilab.org/"&gt;http://www.logilab.org/&lt;/a&gt; instance, below are the running looping
task by categories. Tasks that have to run on each web instance:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;clean_sessions&lt;/cite&gt;, automatically closes unused repository sessions. Notice
&lt;cite&gt;cw.etwist.server&lt;/cite&gt; also records a twisted task to clean web sessions. Some
changes are to come here following the coming session refactoring (that will
become more and more necessary to move on several points listed here).&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;regular_preview_dir_cleanup&lt;/cite&gt; (&lt;cite&gt;preview&lt;/cite&gt; cube), cleanup files in the
preview filesystem directory. Could be executed by a (some of the) web
instance(s) provided that the preview directory is shared.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tasks that should run on a single instance:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;update_feeds&lt;/cite&gt;, update copy based sources (e.g. datafeed, ldapfeed). Controlled
by 'synchronize' source configuration (persistent source attribute that may be
overridden by instance using &lt;cite&gt;CWSourceHostConfig&lt;/cite&gt; entities)&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;expire_dataimports&lt;/cite&gt;, delete &lt;cite&gt;CWDataImport&lt;/cite&gt; entities older than an amount of
time specified in the 'logs-lifetime' configuration option. &lt;strong&gt;Not controlled
yet&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;cleanup_auth_cookies&lt;/cite&gt; (&lt;em&gt;rememberme&lt;/em&gt; cube), delete &lt;cite&gt;CWAuthCookie&lt;/cite&gt; entities
whose life-time is exhausted. &lt;strong&gt;Not controlled yet&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;cleaning_revocation_key&lt;/cite&gt; (&lt;em&gt;forgotpwd&lt;/em&gt; cube), delete &lt;cite&gt;Fpasswd&lt;/cite&gt; entities with
past &lt;cite&gt;revocation_date&lt;/cite&gt;. &lt;strong&gt;Not controlled yet&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;cleanup_plans&lt;/cite&gt; (&lt;em&gt;narval&lt;/em&gt; cube), delete &lt;cite&gt;Plan&lt;/cite&gt; entities instance older than an
amount of time specified in the configuration. If 'plan-cleanup-delay' is set
to an empty value, the task isn't started.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;refresh_local_repo_caches&lt;/cite&gt; (&lt;em&gt;vcsfile&lt;/em&gt; cube), pull or clone vcs repositories
cache if the &lt;cite&gt;Repository&lt;/cite&gt; entity ask to import_revision_content (hence web
instance should have up to date cache to display files content) or if
'repository-import' configuration option is set to 'yes'; import vcs repository
content as entities if 'repository-import' configuration option and it is
coming from the system source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some deeper thinking is needed here so we can improve things. That includes
thinking about:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;the inter-instances messages bus based on zmq and introduced in 3.15,&lt;/li&gt;
&lt;li&gt;the Celery project (&lt;a class="reference" href="http://celeryproject.org/"&gt;http://celeryproject.org/&lt;/a&gt;), an asynchronous task queue,
widely used and written in Python,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remember the more cw independent the tasks are, the better it is. Though we still want an
'all-integrated' approach, e.g. not relying on external configuration of Unix
specific tools such as CRON. Also we should see if a hard-dependency on Celery or
a similar tool could be avoided, and if not if it should be considered as a
problem (for devops).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-road-to-an-easier-configuration"&gt;
&lt;h3&gt;&lt;a&gt;On the road to an easier configuration&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First, we should drop the different behaviour according to presence of a '.hg' in
cubicweb's directory. It currently changes the location where cubicweb external
resources (js, css, images, gettext catalogs) are searched for. Speaking of
implementation:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;shared_dir&lt;/cite&gt; returns the &lt;cite&gt;cubicweb.web&lt;/cite&gt; package path instead of the path to the
&lt;cite&gt;shared&lt;/cite&gt; cube,&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;i18n_lib_dir&lt;/cite&gt; returns the &lt;cite&gt;cubicweb/i18n&lt;/cite&gt; directory path instead of the path to the
&lt;cite&gt;shared/i18n&lt;/cite&gt; cube,&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;migration_scripts_dir&lt;/cite&gt; returns the &lt;cite&gt;cubicweb/misc/migration&lt;/cite&gt; directory path
instead of &lt;cite&gt;share/cubicweb/migration&lt;/cite&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moving web related objects as proposed in the Bootstrap section would resolve the
problem for the content &lt;cite&gt;web/data&lt;/cite&gt; and most of &lt;cite&gt;i18n&lt;/cite&gt; (though some messages
will remain and additional efforts will be needed here). By going further this
way, we may also clean up some schema code by moving &lt;cite&gt;cubicweb/schemas&lt;/cite&gt; and
&lt;cite&gt;cubicweb/misc/migration&lt;/cite&gt; to a cube (though only a small benefit is to be expected
here).&lt;/p&gt;
&lt;p&gt;We should also have fewer environment variables... Let's see what we have today:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;CW_INSTANCES_DIR, where to look for instances configuration&lt;/li&gt;
&lt;li&gt;CW_INSTANCES_DATA_DIR, where to look for instances persistent data files&lt;/li&gt;
&lt;li&gt;CW_RUNTIME_DIR, where to look for instances run-time data files&lt;/li&gt;
&lt;li&gt;CW_MODE, set to 'system' or 'user' will predefine above environment variables differently&lt;/li&gt;
&lt;li&gt;CW_CUBES_PATH, additional directories where to look for cubes&lt;/li&gt;
&lt;li&gt;CW_CUBES_DIR, location of the system 'cubes' directory&lt;/li&gt;
&lt;li&gt;CW_INSTALL_PREFIX, installation prefix, from which we can compute path to 'etc', 'var', 'share', etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would propose the following changes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;CW_INSTANCES_DIR is turned into CW_INSTANCES_PATH, and defaults to
~/etc/cubicweb.d if it exists and /etc/cubicweb.d (on Unix platforms) otherwise;&lt;/li&gt;
&lt;li&gt;CW_INSTANCES_DATA_DIR and CW_RUNTIME_DIR are replaced by configuration file
options, with smart values generated at instance creation time;&lt;/li&gt;
&lt;li&gt;the above change should make CW_MODE useless;&lt;/li&gt;
&lt;li&gt;CW_CUBES_DIR is to be dropped, CW_CUBES_PATH should be enough;&lt;/li&gt;
&lt;li&gt;regarding CW_INSTALL_PREFIX, I'm lacking experience with non-hg-or-debian
installations and don't know if this can be avoided or not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Last but not least (for the moment), the 'web' / 'repo' / 'all-in-one'
configurations, and the fact that the associated configuration file changes
stinks. Ideas to stop doing this:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;one configuration file per instance, with all options provided by installed
parts of the framework used by the application.&lt;/li&gt;
&lt;li&gt;activate 'services' (or not): web server, repository, zmq server, pyro
server. Default services to be started are stored in the configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is probably more that can be done here (less configuration options?), but
that would already be a great step forward.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-road-to"&gt;
&lt;h3&gt;&lt;a&gt;On the road to...&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The following projects should be investigated to see if we could benefit from them:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Paste (&lt;a class="reference" href="http://pythonpaste.org/"&gt;http://pythonpaste.org/&lt;/a&gt;, Configuration and all)&lt;/li&gt;
&lt;li&gt;Beaker (&lt;a class="reference" href="http://beaker.readthedocs.org/en/latest/index.html"&gt;http://beaker.readthedocs.org/en/latest/index.html&lt;/a&gt;, More on Session / cache handling than what will be found in Werkzeug?)&lt;/li&gt;
&lt;li&gt;Pyramid's debug toolbar
(&lt;a class="reference" href="http://docs.pylonsproject.org/projects/pyramid_debugtoolbar/en/latest/"&gt;http://docs.pylonsproject.org/projects/pyramid_debugtoolbar/en/latest/&lt;/a&gt;). See
also &lt;a class="reference" href="http://firelogger.binaryage.com/#python"&gt;http://firelogger.binaryage.com/#python&lt;/a&gt;. Notice Werkzeug come with an
integrated js console as well.&lt;/li&gt;
&lt;li&gt;zc.buildout (Deployment)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="discussion"&gt;
&lt;h3&gt;&lt;a&gt;Discussion&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Remember the following goals: migration of legacy code should go smoothly. In a perfect world every application should be able to run with CubicWeb 4.0 until the backwards compatibility code is removed (and CubicWeb 4.0 will probably be released as 4.0 at that time).&lt;/p&gt;
&lt;p&gt;Please provide feedbacks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;do you think choices proposed above are good/bad choices? Why?&lt;/li&gt;
&lt;li&gt;do you know some additional libraries that should be investigated?&lt;/li&gt;
&lt;li&gt;do you have other changes in mind that could/should be done in cw 4.0?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content>
  </entry>
</feed>

