<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>blog entries (Logilab.org) RSS Feed</title>
    <description />
    <link>http://www.logilab.org/view?rql=Any%20X%20WHERE%20X%20creation_date%20D%2C%20X%20is%20BlogEntry%20ORDERBY%20D%20DESC%20LIMIT%2015</link>
<thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://feeds.feedburner.com/logilaborg?format=skin</thespringbox:skin><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/logilaborg" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9579</guid>
  <title>EuroPython 2009</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/viYkOez-KvY/9579</link>
  <description>&lt;img align="right" alt="http://www.logilab.org/image/9580?vid=download" class="align-right" src="http://www.logilab.org/image/9580?vid=download" /&gt;
&lt;p&gt;Once again Logilab sponsored the &lt;a class="reference" href="http://www.europython.eu/"&gt;EuroPython&lt;/a&gt; conference. We would like to thank
the organization team (especially John Pinner and Laura Creighton) for their
hard work. The Conservatoire is a very central location in Birmingham and
walking around the city center and along the canals was nice. The website was
helpful when preparing the trip and made it easy to find places where to eat and
stay. The conference program was full of talks about interesting topics.&lt;/p&gt;
&lt;p&gt;I presented &lt;a class="reference" href="http://www.cubicweb.org/"&gt;CubicWeb&lt;/a&gt; and spent a large part of my talk explaining what is the
semantic web and what features we need in the tools we will use to be part of
that web of data. I insisted on the fact that CubicWeb is made of &lt;a class="reference" href="http://www.cubicweb.org/doc/en/intro/concepts/"&gt;two parts&lt;/a&gt;,
the web engine and the data repository, and that the repository can be used
without the web engine. I demonstrated this with a TurboGears application that
used the CubicWeb repository as its persistence layer. RQL in TurboGears! See &lt;a class="reference" href="http://www.logilab.fr/publications/europython2009-cubicweb"&gt;my
slides&lt;/a&gt; and Reinout Van Rees' &lt;a class="reference" href="http://reinout.vanrees.org/weblog/2009/07/01/ep-cubicweb.html"&gt;write-up&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Christian Tismer took over the development of &lt;a class="reference" href="http://psyco.sourceforge.net/"&gt;Psyco&lt;/a&gt; a few months ago. He said he
recently removed some bugs that were show stoppers, including one that was
generating way too many recompilations. His new version looks very
promising. Performance improved, long numbers are supported, 64bit support may
become possible, generators work... and Stackless is about to be rebuilt on top of
Psyco! Psyco 2.0 should be out today.&lt;/p&gt;
&lt;p&gt;I had a nice chat with Cosmin Basca about the Semantic Web. He suggested using
Mako as a templating language for CubicWeb. Cosmin is doing his PhD at DERI and
develops &lt;a class="reference" href="http://code.google.com/p/surfrdf/wiki/dbpediaLiveExample"&gt;SurfRDF&lt;/a&gt; which is an Object-RDF mapper that wraps a SPARQL endpoint to
provide &amp;quot;discoverable&amp;quot; objects. See his &lt;a class="reference" href="http://wiki.europython.eu/TalkMaterials?action=AttachFile&amp;amp;do=get&amp;amp;target=SuRF+%E2%80%93+Tapping+into+the+Web+of+Data+EUROPYTHON09.pdf"&gt;slides&lt;/a&gt; and Reinout Van Rees' &lt;a class="reference" href="http://reinout.vanrees.org/weblog/2009/07/01/ep-web-of-data.html"&gt;summary&lt;/a&gt;
of his talk.&lt;/p&gt;
&lt;p&gt;I saw a lightning talk about the &lt;a class="reference" href="http://www.nagare.org/"&gt;Nagare&lt;/a&gt; framework which refuses to use
templating languages, for the same reason we do not use them in CubicWeb. Is
their &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;h.something&lt;/span&gt;&lt;/tt&gt; the right way of doing things? The &lt;a class="reference" href="http://www.nagare.org/trac/blog/html-structuration-inheritance-aggregation"&gt;example&lt;/a&gt; reminds me of the
C++ concatenation operator. I am not really convinced with the continuation idea
since I have been for years a happy user of the reactor model that's implemented
in frameworks liked Twisted. Read the &lt;a class="reference" href="http://www.nagare.org/trac/blog"&gt;blog&lt;/a&gt; and &lt;a class="reference" href="http://www.nagare.org/trac/wiki"&gt;documentation&lt;/a&gt; for more
information.&lt;/p&gt;
&lt;p&gt;I had a chat with Jasper Op de Coul about Infrae's &lt;a class="reference" href="http://wiki.europython.eu/TalkMaterials?action=AttachFile&amp;amp;do=get&amp;amp;target=MOAI+Server"&gt;OAI Server&lt;/a&gt; and the work he
did to manage RDF data in Subversion and a relational database before publishing
it within a web app based on &lt;a class="reference" href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;. We commented code that handles books and
library catalogs. Part of my CubicWeb demo was about books in DBpedia and
&lt;a class="reference" href="http://www.cubicweb.org/project/cubicweb-book"&gt;cubicweb-book&lt;/a&gt;. He gave me a nice link to the &lt;a class="reference" href="http://xisbn.worldcat.org/xisbnadmin/doc/api.htm"&gt;WorldCat API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Souheil Chelfouh showed me his work on &lt;a class="reference" href="http://tracker.trollfot.org/wiki/Dolmen"&gt;Dolmen&lt;/a&gt; and Menhir. For several design
problems and framework architecture issues, we compared the solutions offered by
the &lt;a class="reference" href="http://docs.zope.org/zopetoolkit/"&gt;Zope Toolkit&lt;/a&gt; library with the ones found by CubicWeb. I will have to read
more about &lt;a class="reference" href="http://pypi.python.org/pypi/martian"&gt;Martian&lt;/a&gt; and &lt;a class="reference" href="http://grok.zope.org/"&gt;Grok&lt;/a&gt; to make sure I understand the details of that
component architecture.&lt;/p&gt;
&lt;p&gt;I had a chat with Martijn Faassen about packaging Python modules. A one sentence
summary would be that the Python community should agree on a meta-data format
that describes packages and their dependencies, then let everyone use the tool
he likes most to manage the installation and removal of software on his system.
I hope the work done during the last PyConUS and led by Tarek Ziadé arrived at the
same conclusion. By the way, Martijn is the lead developer of Grok and Martian.&lt;/p&gt;
&lt;p&gt;Godefroid Chapelle and I talked a lot about Zope Toolkit (ZTK) and CubicWeb. We
compared the way the two frameworks deal with pluggable components. ZTK has
adapters and a registry. CubicWeb does not use adapters as ZTK does, but has a
&lt;a class="reference" href="http://www.cubicweb.org/doc/en/intro/tutorial/create-cube#defineviews"&gt;view selection mechanism&lt;/a&gt; that required a registry with more features than the
one used in ZTK. The ZTK registry only has to match a tuple (Interface, Class)
when looking for an adapter, whereas CubicWeb's registry has to find the views
that can be applied to a result set by checking various properties:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;interfaces: all items of first column implement the Calendar Interface,&lt;/li&gt;
&lt;li&gt;dimensions: more than one line, more than two columns,&lt;/li&gt;
&lt;li&gt;types: items of first column are numbers or dates,&lt;/li&gt;
&lt;li&gt;form: form contains key XYZ that has a value lower than 10,&lt;/li&gt;
&lt;li&gt;session: user is authenticated,&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As for Grok and Martian, I will have to look into the details to make sure
nothing evil is hinding there. I should also find time to compare &lt;a class="reference" href="http://pypi.python.org/pypi/zope.schema"&gt;zope.schema&lt;/a&gt;
and &lt;a class="reference" href="http://www.logilab.org/project/yams"&gt;yams&lt;/a&gt; and write about it on this blog.&lt;/p&gt;
&lt;p&gt;And if you want more information about the conference:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;photos tagged europython in &lt;a class="reference" href="http://www.flickr.com/groups/europython/"&gt;flickr&lt;/a&gt; and &lt;a class="reference" href="http://www.europython.eu/gallery/europython-2009/"&gt;gallery&lt;/a&gt; on the website&lt;/li&gt;
&lt;li&gt;&lt;a class="reference" href="http://wiki.europython.eu/After"&gt;blogs&lt;/a&gt; reporting on europython&lt;/li&gt;
&lt;li&gt;&lt;a class="reference" href="http://wiki.europython.eu/RecordedTalks"&gt;recorded&lt;/a&gt; talks and &lt;a class="reference" href="http://wiki.europython.eu/TalkMaterials"&gt;presentation&lt;/a&gt; materials&lt;/li&gt;
&lt;/ul&gt;
</description>
  <dc:date>2009-07-07T12:28-01:00</dc:date>
  <dc:creator>Nicolas Chauvat</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9579</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9374</guid>
  <title>Semantic web technology conference 2009</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/o67WJnJ0SmI/9374</link>
  <description>&lt;div&gt;&lt;img align="left" src="http://image.bio-medicine.org/img/Fifth-Annual-SemTech-Conference-Highlights-How-Semantics-Power-Chemistry--Pharmaceutical--Healthcare--and-Other-Life-Science-Solutions.gif"/&gt;&lt;a href="http://semtech2009.com/"&gt;The semantic web technology conference&lt;/a&gt; is taking place every year in San Jose, California. It is meant to be the world's symposium on the business of semantic technologies. Essentially here we discuss about semantic search, how to improve access to the data and how we make sense of structured, but mainly unstructured content.&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
Some exhibitors were more NLP oriented, concepts extraction (such as &lt;a href="http://www.semanticv.com/"&gt;SemanticV&lt;/a&gt;), others were more focused on providing a scalable storage (essentially RDF storage). Most of the solutions includes a data aggregator/unifier in order to combine multi-sources data into a single storage from which ontologies could be defined. &amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
Then on top of that is the enhanced search engine. They concentrate on internal data within the enterprise and not that much about using the Web as a resource. For those who built a web application on top of the data, they choosed &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt; as their framework (&lt;a href="http://www.metatomix.com/"&gt;Metatomix&lt;/a&gt;).&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;From all the exhibitors, the ones that kept my attention were &lt;a href="http://www.cambridgesemantics.com/products/anzo_on_the_web"&gt;The Anzo suite&lt;/a&gt; (&lt;a href="http://www.openanzo.org/"&gt;open source project&lt;/a&gt;), &lt;a href="http://ordi.sourceforge.net/"&gt;ORDI&lt;/a&gt; and &lt;a href="http://www.franz.com/agraph/allegrograph/"&gt;Allegrograph RDF store&lt;/a&gt;.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;Developped by Cambridge Semantics, in Java, Anzo suite, especially, Anzo on the web and Anzo collaboration server, is the closest tools to CubicWeb, providing a multi source data server and an AJAX/HTML interface to develop semantic web applications, customize views of the data using a templating language. It is available in open source.&amp;#13;&amp;#13;&amp;#13;
The feature that I think was interesting is an assistant to load data into their application that then helps the users define the data model based on that data. The internal representation of the content is totally transparent to the user, types are inferred by the application, as well as relations.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;&lt;img src="http://www.w3.org/RDF/icons/rdf_w3c_icon.96.gif" alt="RDF Resource Description Framework Icon" align="right"/&gt;I did not get a demo of ORDI, but it was just mentionned to me as an open source equivalent to CubicWeb, which I am not too sure about after looking at their web site. It does data integration into RDF.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;Allegrograph RDF store is a potential candidate for another source type in CubicWeb . It is already supported by Jena and Sesame framework. &amp;#13;&amp;#13;&amp;#13;&amp;#13;
They developped a Python client API to attract pythonist in the Java world. &lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;They all agreed on one thing : the use of SPARQL should be the standard query language. I quickly heard about Knowledge Interface Format (KIF) which seems to be an interesting representation of knowledge used for multi-lingual applications. If there was one buzz word to recall from the conference, I would choose ontology :)&lt;/div&gt;</description>
  <dc:date>2009-06-22T10:15-01:00</dc:date>
  <dc:creator>Sandrine Ribeau</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9374</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9371</guid>
  <title>IPMI plugin for Munin python code published</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/9dxfHA5A8ko/9371</link>
  <description>&lt;img align="right" alt="http://www.logilab.org/image/9368?vid=download" class="align-right" src="http://www.logilab.org/image/9368?vid=download" /&gt;
&lt;p&gt;As you might have noticed we quite like &lt;a class="reference" href="http://munin.projects.linpro.no/"&gt;munin&lt;/a&gt;. We use it quite a bit to monitor how our servers and services are doing. One of the things we like about munin is obviously that the plugins can be written in &lt;a class="reference" href="http://www.python.org"&gt;python&lt;/a&gt; (and perl, bash  and ruby).&lt;/p&gt;
&lt;p&gt;On a few recent servers we started playing with &lt;a class="reference" href="http://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface"&gt;IPMI&lt;/a&gt; to sensor the temperature, watts, fan's rpms etc. So we went out looking for a munin plugin for that. We found Peter Palfrader's ruby plugins. There was one small glitch though, we came across a simple bug : the &amp;quot;ipmitool -I open sensor&amp;quot; can be real long to execute on certain machines, so configuring the plugin was a bit painful and running it too. Changing the ruby code was a bit tricky since we don't really know ruby... so we did a quick rewrite of the plugin in python... with a few optimizations.&lt;/p&gt;
&lt;p&gt;It's not really complete but works for us, and might be useful to you, so we're publishing the hg repo. You can get the &lt;a class="reference" href="http://hg.logilab.org/munin_ipmi_plugins/archive/f2e7c91f5ea7.tar.gz"&gt;tgz&lt;/a&gt; or browse the &lt;a class="reference" href="http://hg.logilab.org/munin_ipmi_plugins/file/f2e7c91f5ea7"&gt;source&lt;/a&gt;.&lt;/p&gt;
</description>
  <dc:date>2009-06-17T20:17-01:00</dc:date>
  <dc:creator>Arthur Lutz</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9371</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9322</guid>
  <title>Google I/O 2009</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/obj3oPlSE0U/9322</link>
  <description>&lt;img align="right" src="http://code.google.com/intl/fr/apis/wave/images/wavelogo.png"/&gt;&lt;div&gt;The big event of the conference was the annoucement of &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt;, a new online communication and collaboration tool, built on the Google Web Toolkit (GWT).&amp;#13;&amp;#13;&amp;#13;&amp;#13;
Another big thing the GWT, lots of application built with it, a delightful tool for Java developers.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;It was interesting to see that Google App Engine (GAE) will shortly provide an API to do offline processing, with objects called Task Queue. &amp;#13;&amp;#13;&amp;#13;&amp;#13;
Task queue are web hooks, tasks are pushed to the server, queued and they are pushed until the task is executed (which overpass the annoying well-known time out issue with Google App Engine). &amp;#13;&amp;#13;&amp;#13;&amp;#13;
It was introduced as asynchronous, enabling low latency, reliable and scalable (where are the buzz words?).&amp;#13;&amp;#13;&amp;#13;&amp;#13;
Of course, this news has been a huge relief for most of the developers in the public as that was a big missing part from GAE.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;An nice presentation from the founders of FrontSeat.org about their current project &lt;a href="http://www.walkscore.com"&gt;Walk score&lt;/a&gt;. They introduced themselves as civic software developers, writing software in a civic manner.&amp;#13;&amp;#13;
They explained how they use GAE, and why they had to use Amazon EC2 to compensate GAE gaps. The gaps they listed here were the ranking non-ability of GAE, the too long reponse time for such computation they do, the fact that no cron jobs can be done (the arrival of Task Queue might change their opinion).&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;img src="http://code.google.com/intl/fr/events/io/images/io2009.png" align="left"/&gt;&lt;div&gt;All the sessions have been recorded and are available &lt;a href="http://code.google.com/events/io/sessions.html"&gt;here&lt;/a&gt;.&lt;/div&gt;&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&amp;#13;&amp;#13;&amp;#13;&amp;#13;
&lt;div&gt;And yes, as all the participants of this conference, I went back home with an Android phone :)&lt;/div&gt;</description>
  <dc:date>2009-06-10T10:05-01:00</dc:date>
  <dc:creator>Sandrine Ribeau</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9322</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9297</guid>
  <title>hgview 1.0.0 released!</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/xIx3wVIeerc/9297</link>
  <description>&lt;p&gt;I am pleased to introduce you to the latest kid of the Logilab team: &lt;a class="reference" href="http://www.logilab.org/project/hgview/1.1.0"&gt;hgview 1.0.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="http://www.logilab.org/project/hgview"&gt;hgview&lt;/a&gt; is a very helpful tool for daily work using the excellent DVCS &lt;a class="reference" href="http://www.selenic.com/mercurial"&gt;Mercurial&lt;/a&gt; (which we heavily use at Logilab). It allows to easily and visually navigate your hg repository revision graphlog. It is written in &lt;a class="reference" href="http://www.python.org"&gt;Python&lt;/a&gt; and &lt;a class="reference" href="http://www.riverbankcomputing.co.uk/software/pyqt/intro"&gt;pyqt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This version is an almost complete rewrite of &lt;a class="reference" href="http://www.logilab.org/project/hgview/0.11.2"&gt;hgview 0.x&lt;/a&gt; which had two GUI backends, &lt;a class="reference" href="http://www.gtk.org"&gt;gtk&lt;/a&gt; and &lt;a class="reference" href="http://www.qtsoftware.com/products/"&gt;qt4&lt;/a&gt;. This 1.0 release drops the gtk backend (we may consider reintroducing it, we haven't decided yet... by the way, patches are always welcome). Some may not like this choice, but the immediate benefit of using &lt;a class="reference" href="http://www.qtsoftware.com/products/"&gt;qt4&lt;/a&gt; is that hgview works like a charm on MacOS X systems.&lt;/p&gt;
&lt;img align="right" alt="http://www.logilab.org/image/9269?vid=download" class="align-right" src="http://www.logilab.org/image/9269?vid=download" style="width: 450px;" /&gt;
&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: there was a bug in hgview 1.0.0 on Ubuntu hardy. It's now fixed, and I've uploaded a 1.0.1 version deb package for hardy.&lt;/p&gt;
&lt;div class="section" id="features"&gt;
&lt;h3&gt;&lt;a&gt;Features&lt;/a&gt;&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;4 different viewers:&lt;ul&gt;
&lt;li&gt;repository navigator that displays the graphlog efficiently (works well with 10,000 changesets),&lt;/li&gt;
&lt;li&gt;filelog navigator that displays the filelog of a file (follows files through renames),&lt;/li&gt;
&lt;li&gt;filelog diff navigator that displays the filelog in diff mode to easily track changes between two revisions of a file,&lt;/li&gt;
&lt;li&gt;manifest viewer that navigates in the files hierarchy as it was at a given revision.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Each viewer offers:&lt;ul&gt;
&lt;li&gt;easy keyboard navigation:&lt;ul&gt;
&lt;li&gt;up/down to change revision,&lt;/li&gt;
&lt;li&gt;left/right to change file (for the repo navigator only),&lt;/li&gt;
&lt;li&gt;return to display the diff viewer of the selected file,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;search quickbar (Ctrl+F or /): search in graphlog (search as you type in the currently displayed file or diff, plus a cancellable background search in the revision tree),&lt;/li&gt;
&lt;li&gt;goto quickbar (Ctrl+G): go to the given revision (accepts id or tag, with completion for tags),&lt;/li&gt;
&lt;li&gt;navigation history: alt+left/alt+right to navigate backward/forward in the history,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;can be used alone or as a hg extension,&lt;/li&gt;
&lt;li&gt;can be configured using standard hg rc files (system, user or per repository),&lt;/li&gt;
&lt;li&gt;possibility to declare users (with multiple mail addresses) and assign them a given color to make a given user look the same in all your repositories,&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="download-and-installation"&gt;
&lt;h3&gt;&lt;a&gt;Download and installation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The source code is available as a &lt;a class="reference" href="http://ftp.logilab.org/pub/hgview/hgview-1.0.0.tar.gz"&gt;tarball&lt;/a&gt;, or using our &lt;a class="reference" href="http://www.logilab.org/cgi-bin/hgwebdir.cgi/"&gt;public hg repository&lt;/a&gt; of course.&lt;/p&gt;
&lt;p&gt;To use it from the sources, you just have to add a line in your &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.hgrc&lt;/span&gt;&lt;/tt&gt; file, in the &lt;cite&gt;[extensions]&lt;/cite&gt; section:&lt;/p&gt;
&lt;blockquote&gt;
hgext.hgview=/path/to/hgview/hgext/hgview.py&lt;/blockquote&gt;
&lt;p&gt;&lt;a class="reference" href="http://www.debian.org"&gt;Debian&lt;/a&gt; and &lt;a class="reference" href="http://www.ubuntu.com"&gt;Ubuntu&lt;/a&gt; users can also easily install hgview (and Logilab other free software tools) using our &lt;a class="reference" href="http://www.logilab.org/card/LogilabDebianRepository"&gt;deb package repositories&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
  <dc:date>2009-06-08T09:53-01:00</dc:date>
  <dc:creator>David Douard</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9297</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9294</guid>
  <title>The Web is reaching version 3</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/X4O5HFUk2pY/9294</link>
  <description>&lt;img align="right" alt="http://www.logilab.org/image/9295?vid=download" class="align-right" src="http://www.logilab.org/image/9295?vid=download" /&gt;
&lt;p&gt;I presented CubicWeb at several conferences recently and I used the following as an introduction.&lt;/p&gt;
&lt;p&gt;Web version numbers:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;version 0 = the internet links computers&lt;/li&gt;
&lt;li&gt;version 1 = the web links documents&lt;/li&gt;
&lt;li&gt;version 2 = web applications&lt;/li&gt;
&lt;li&gt;version 3 = the semantic web links data [we are here!]&lt;/li&gt;
&lt;li&gt;version 4 = more personnalization and fix problems with privacy and security&lt;/li&gt;
&lt;li&gt;... reach into physical world, bits of AI, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In his blog at MIT, Tim Berners-Lee calls version 0 the &lt;em&gt;International Information Infrastructure&lt;/em&gt;, version 1 the &lt;em&gt;World Wide Web&lt;/em&gt; and version 3 the &lt;em&gt;Giant Global Graph&lt;/em&gt;. Read the details about the &lt;a class="reference" href="http://dig.csail.mit.edu/breadcrumbs/node/215"&gt;Giant Global Graph&lt;/a&gt; on his blog.&lt;/p&gt;
</description>
  <dc:date>2009-06-05T20:32-01:00</dc:date>
  <dc:creator>Nicolas Chauvat</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9294</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9209</guid>
  <title>Nous allons à PyConFr 2009</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/pavEfIaZcmY/9209</link>
  <description>&lt;p&gt;Le 30 et 31 mai prochain (samedi et dimanche prochain) nous allons être présents à &lt;a class="reference" href="http://www.pycon.fr/"&gt;PyConFr&lt;/a&gt; édition 2009, nous sommes &lt;a class="reference" href="http://www.pycon.fr/partenaires.html"&gt;partenaire&lt;/a&gt; de l'évènement et allons y parler de &lt;a class="reference" href="http://www.cubicweb.org"&gt;CubicWeb&lt;/a&gt;. Pour être plus précis, Nicolas Chauvat y présentera &lt;a class="reference" href="http://pycon.fr/sessions/seances/cubicweb_pour_publier_dbpedia_et_openlibrary"&gt;&amp;quot;CubicWeb pour publier DBpedia et OpenLibrary&amp;quot;&lt;/a&gt;. Il avait déjà évoqué ces sujets sur ce site : &lt;a class="reference" href="http://www.logilab.org/blogentry/9138"&gt;Fetching book descriptions and covers&lt;/a&gt; et  &lt;a class="reference" href="http://www.logilab.org/blogentry/6679"&gt;DBpedia 3.2 released&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si vous comptez y aller, n'hésitez pas à venir nous dire bonjour.&lt;/p&gt;
&lt;div align="center" class="align-center"&gt;&lt;img alt="http://pycon.fr/images/logo_pyconfr_small.png" class="align-center" src="http://pycon.fr/images/logo_pyconfr_small.png" /&gt;&lt;/div&gt;
</description>
  <dc:date>2009-06-05T19:57-01:00</dc:date>
  <dc:creator>Arthur Lutz</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9209</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9152</guid>
  <title>Almost reached 1000 tickets</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/nct5PaugpYM/9152</link>
  <description>&lt;p&gt;Logilab.org has almost reached a thousand tickets on the Logilab's open source projects. To be exact there are 940 tickets right now. What kind of tickets are they ?&lt;/p&gt;
&lt;p&gt;Here is a quick graph of the state of the tickets in our tracker :&lt;/p&gt;
&lt;div align="center" class="align-center"&gt;&lt;img alt="http://chart.apis.google.com/chart?cht=p&amp;amp;chs=400x200&amp;amp;chd=e:Dc..Iw9EXV&amp;amp;chtt=Logilab.org+tickets+by+state&amp;amp;chl=deprecated%20:%2020|open%20:%20373|rejected%20:%2051|resolved%20:%20358|validated%20:%20136" class="align-center" src="http://chart.apis.google.com/chart?cht=p&amp;amp;chs=400x200&amp;amp;chd=e:Dc..Iw9EXV&amp;amp;chtt=Logilab.org+tickets+by+state&amp;amp;chl=deprecated%20:%2020|open%20:%20373|rejected%20:%2051|resolved%20:%20358|validated%20:%20136" /&gt;&lt;/div&gt;
&lt;p&gt;Graphing is neat. Maybe soon we'll get this kind of feature automatically in the &lt;a class="reference" href="http://www.cubicweb.org"&gt;CubicWeb&lt;/a&gt; &lt;a class="reference" href="http://www.cubicweb.org/project/cubicweb-forge"&gt;forge&lt;/a&gt;, see &lt;a class="reference" href="http://www.cubicweb.org/ticket/343038"&gt;this ticket&lt;/a&gt;.&lt;/p&gt;
</description>
  <dc:date>2009-05-25T11:02-01:00</dc:date>
  <dc:creator>Arthur Lutz</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9152</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9145</guid>
  <title>Reading SPE files</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/LXWrqHfMiq0/9145</link>
  <description>&lt;img align="right" alt="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/CCD.jpg/300px-CCD.jpg" class="align-right" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/CCD.jpg/300px-CCD.jpg" style="height: 100px;" /&gt;
&lt;p&gt;If you would like to read SPE files from &lt;a class="reference" href="http://en.wikipedia.org/wiki/CCD_camera"&gt;charge-coupled device (CCD) cameras&lt;/a&gt;, I have contributed a recipe to the SciPy cookbook, see &lt;a class="reference" href="http://scipy.org/Cookbook/Reading_SPE_files"&gt;Reading SPE files&lt;/a&gt;.&lt;/p&gt;
</description>
  <dc:date>2009-05-11T16:23-01:00</dc:date>
  <dc:creator>Andre Espaze</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9145</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9138</guid>
  <title>Fetching book descriptions and covers</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/8dXfwGMfuLU/9138</link>
  <description>&lt;img align="right" alt="http://www.logilab.org/image/9139?vid=download" class="align-right" src="http://www.logilab.org/image/9139?vid=download" /&gt;
&lt;p&gt;We recently added the &lt;a class="reference" href="http://www.cubicweb.org/project/cubicweb-book"&gt;book cube&lt;/a&gt; to our intranet in order for books available in our library to show up in the search results. Entering a couple books using the default HTML form, even with the help of copy/paste from &lt;a class="reference" href="http://books.google.com/"&gt;Google Book&lt;/a&gt; or &lt;a class="reference" href="http://www.amazon.com"&gt;Amazon&lt;/a&gt;, is boring enough to make one seek out other options.&lt;/p&gt;
&lt;p&gt;As a Python and Debian user, I put the &lt;a class="reference" href="http://packages.debian.org/source/sid/python-gdata"&gt;python-gdata&lt;/a&gt; package on my list of options, but quickly realized that the version in Debian is not current and that the books service is not yet accessible with the python gdata client. Both problems could be easily overcome since I could update Debian's version from 1.1.1 to the latest 1.3.1 and patch it with the &lt;a class="reference" href="http://code.google.com/p/gdata-python-client/issues/detail?id=238"&gt;book search support&lt;/a&gt; that will be included in the next release, but I went on exploring other options.&lt;/p&gt;
&lt;p&gt;Amazon is the first answer that comes to mind when speaking of books on the net and &lt;a class="reference" href="http://pyaws.sourceforge.net/"&gt;pyAWS&lt;/a&gt; looks like a nice wrapper around the Amazon Web Service. The quickstart example on the home page does almost exactly what I was looking for. Trying to find a Debian package of pyAWS, I only came accross &lt;a class="reference" href="http://code.google.com/p/boto/"&gt;boto&lt;/a&gt; which appears to be general purpose.&lt;/p&gt;
&lt;p&gt;Registering with Amazon and Google to get a key and use their web services is doable, but one wonders why something as common as books and public libraries would have to be accessed through private companies. It turns out Wikipedia knows of &lt;em&gt;many&lt;/em&gt; book &lt;a class="reference" href="http://en.wikipedia.org/wiki/Special:BookSources/"&gt;catalogs&lt;/a&gt; on the net, but I was looking for a site publishing data as RDF or part of the &lt;a class="reference" href="http://linkeddata.org"&gt;Linked Open Data&lt;/a&gt; initiative. I ended up with almost exactly what I needed.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference" href="http://openlibrary.org/"&gt;Open Library&lt;/a&gt; features millions of books and covers, publicly accessible as JSON using its &lt;a class="reference" href="http://openlibrary.org/dev/docs"&gt;API&lt;/a&gt;. There is even a dump of the database. End of search, be happy.&lt;/p&gt;
&lt;p&gt;Next step is to use this service to enhance the cubicweb-book cube by allowing a user to add a new book to its collection by simply entering a &lt;a class="reference" href="http://en.wikipedia.org/wiki/Isbn"&gt;ISBN&lt;/a&gt;. All data about the book can be fetched from the OpenLibrary, including the cover and information about the author. You can expect such a new version soon... and we will probably get a new demo of &lt;a class="reference" href="http://www.cubicweb.org/"&gt;CubicWeb&lt;/a&gt; online in the process, since all that data available as a &lt;a class="reference" href="http://openlibrary.org/dev/docs/jsondump"&gt;dump&lt;/a&gt; is screaming for reuse as others have already found out by making it &lt;a class="reference" href="http://mondeca.wordpress.com/2009/01/05/openlibrary-api-rdf-wrapper-on-google-app-engine/"&gt;available as RDF&lt;/a&gt; on AppEngine!&lt;/p&gt;
</description>
  <dc:date>2009-07-02T12:43-01:00</dc:date>
  <dc:creator>Nicolas Chauvat</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9138</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/9097</guid>
  <title>iclassmethod decorator to define both a class and an instance method in one go</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/3yWbpUOUNKc/9097</link>
  <description>&lt;p&gt;You'll find in the &lt;cite&gt;logilab.common.decorators&lt;/cite&gt; module the &lt;cite&gt;iclassmethod&lt;/cite&gt; decorator which may be pretty handy in some cases as it allows methods to be both called as class methods or as instance methods. In the first case the first argument will be the class and the second case it will be the instance.&lt;/p&gt;
&lt;p&gt;Example extracted (and adapted for simplicity) from &lt;a class="reference" href="http://www.cubicweb.org"&gt;CubicWeb&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;logilab.common.decorators&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;iclassmethod&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;_fields_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_fields_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nd"&gt;@iclassmethod&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;field_by_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls_or_self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;return field with the given name and role&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls_or_self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
          &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cls_or_self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_fields_&lt;/span&gt;
      &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cls_or_self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;
      &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
              &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt;
      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;FieldNotFound: &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Example session:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;logilab.common&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;attrdict&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attrdict&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;something&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;field_by_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;something&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;something&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;field_by_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;something&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Traceback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;field_by_name&lt;/span&gt;
&lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FieldNotFound&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So we get a field_by_name method which will act differently (actually use different input data) when called as instance method or as class method.&lt;/p&gt;
&lt;p&gt;Also notice the &lt;cite&gt;attrdict&lt;/cite&gt; trick that can also be achieved with the Python 2.6 named tuple.&lt;/p&gt;
</description>
  <dc:date>2009-05-11T16:06-01:00</dc:date>
  <dc:creator>Sylvain Thenault</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/9097</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/8862</guid>
  <title>12 ans de l'April: bilan et objectifs</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/VsEhqlKY6Zo/8862</link>
  <description>&lt;img align="right" alt="http://www.april.org/themes/zen/zen_april/images/logo.png" class="align-right" src="http://www.april.org/themes/zen/zen_april/images/logo.png" /&gt;
&lt;p&gt;L'April fête cette année ses douze ans. L'association de promotion et de défense du logiciel libre approche maintenant les 5000 membres, toutes catégories confondues: personnes physiques, entreprises commerciales, collectivités, associations. Elle vient de publier son &lt;a class="reference" href="http://www.april.org/fr/lapril-publie-son-rapport-moral-2008"&gt;rapport moral 2008&lt;/a&gt;  et sa &lt;a class="reference" href="http://www.april.org/fr/feuille-de-route-2009-2014"&gt;feuille de route 2014&lt;/a&gt; qui fixe des objectis pour les cinq années à venir. On notera en particulier la lutte contre les quatre dangers que sont les brevets sur les algorithmes, les dispositifs de contrôle d'usage, la vente liée et l'informatique déloyale. Consultez le site de l'&lt;a class="reference" href="http://www.april.org/"&gt;April&lt;/a&gt; pour en savoir plus sur ses actions et n'hésitez pas à &lt;a class="reference" href="http://www.april.org/adherer"&gt;adhérer&lt;/a&gt; ou à &lt;a class="reference" href="http://www.april.org/fr/benevolat-valorise"&gt;donner quelques heures&lt;/a&gt; de votre temps.&lt;/p&gt;
</description>
  <dc:date>2009-04-06T11:45-01:00</dc:date>
  <dc:creator>Nicolas Chauvat</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/8862</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/8860</guid>
  <title>Emacs and mercurial trick</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/7tQHLPZc7qg/8860</link>
  <description>&lt;img align="left" alt="http://www.logilab.org/image/8863?vid=download" class="align-left" src="http://www.logilab.org/image/8863?vid=download" /&gt;
&lt;p&gt;While using emacs I always find the need to use grep on a terminal to search for things within
a specific project. This is not ideal, even within an embedded emacs shell.&lt;/p&gt;
&lt;p&gt;Since I recently discovered the emacs command &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;grep-find&lt;/span&gt;&lt;/tt&gt;  I decided to make it work nicely
with mercurial projects, and here's the result:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;defun&lt;/span&gt; &lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;sSearch project for: &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
   &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;files=(`hg manifest`);grep -nH -e &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt; ${files[@]/#/`hg root`/}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quote&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;f4&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quote&lt;/span&gt; &lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</description>
  <dc:date>2009-06-17T20:20-01:00</dc:date>
  <dc:creator>Ludovic Aubry</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/8860</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/8815</guid>
  <title>Venez nous rendre visite à Solution Linux 2009</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/TTSEwjKo2L0/8815</link>
  <description>&lt;img align="left" alt="http://www.solutionslinux.fr/images/index_07.jpg" class="align-left" src="http://www.solutionslinux.fr/images/index_07.jpg" /&gt;
&lt;p&gt;Nous sommes dès ce matin, pendant 3 jours, présents au salon &lt;a class="reference" href="http://www.solutionslinux.fr/"&gt;Solutions Linux 2009&lt;/a&gt; au stand du pôle de compétition &lt;a class="reference" href="http://www.systematic-paris-region.org/"&gt;System&amp;#64;tic&lt;/a&gt; dont nous faisons parti. C'est le stand B4/B8, assez prêt de l'entrée sur la gauche (&lt;a class="reference" href="http://www.solutionslinux.fr/exposant_fiche.php?id=804&amp;amp;pg=2_4"&gt;détails&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Nous allons présenter &lt;a class="reference" href="http://www.cubicweb.org"&gt;CubicWeb&lt;/a&gt; à plusieurs reprises sur le stand, ainsi que lors des conférences sur le Web2 ce mardi 31 mars de 14h à 17h30 :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Adrien présentera &amp;quot;Simile Widgets, des composants de haut niveau pour IHM web&amp;quot;&lt;/li&gt;
&lt;li&gt;Sylvain présentera &amp;quot;Cubic 3.0 - une plateforme pour les applications web sémantique&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pour plus de détails consultez le &lt;a class="reference" href="http://www.confsolutionslinuxparis.com/programme/"&gt;programme&lt;/a&gt;.&lt;/p&gt;
</description>
  <dc:date>2009-04-03T13:30-01:00</dc:date>
  <dc:creator>Arthur Lutz</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/8815</feedburner:origLink></item>
<item>
<guid isPermaLink="false">http://www.logilab.org/blogentry/8813</guid>
  <title>Pylint at BayPIGgies</title>
  <link>http://feedproxy.google.com/~r/logilaborg/~3/TMBthnk-_nI/8813</link>
  <description>&lt;img align="right" alt="http://farm4.static.flickr.com/3232/3140527012_23d9d97f69_m_d.jpg" class="align-right" src="http://farm4.static.flickr.com/3232/3140527012_23d9d97f69_m_d.jpg" /&gt;
&lt;p&gt;I am pleased to announce that Pylint was presented during a Tools night meeting organized by &lt;a class="reference" href="http://baypiggies.net/new/plone"&gt;BayPIGgies&lt;/a&gt; on thursday march 26th.
This meeting has been recorded and you can enjoy the &lt;a class="reference" href="http://glenjarvis.com/static/media/videos/2009_03_27/02_pylint.mov"&gt;video&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One point was missing from the presentation and I'll take the opportunity now to mention it. &lt;a class="reference" href="http://flymake.sourceforge.net/"&gt;Flymake&lt;/a&gt;, an on-the-fly syntax checker for GNU Emacs which has been discussed, does work in combination with Pylint (please see &lt;a class="reference" href="http://www.emacswiki.org/emacs/PythonMode#toc6"&gt;EmacsWiki&lt;/a&gt; for more informations).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;photo by&lt;/em&gt; &lt;a class="reference" href="http://www.flickr.com/photos/tensafefrogs/"&gt;ten safe frogs&lt;/a&gt; &lt;em&gt;under&lt;/em&gt; &lt;a class="reference" href="http://creativecommons.org/licenses/by/2.0/"&gt;creative commons&lt;/a&gt;&lt;/p&gt;
</description>
  <dc:date>2009-03-31T09:35-01:00</dc:date>
  <dc:creator>Sandrine Ribeau</dc:creator>
<feedburner:origLink>http://www.logilab.org/blogentry/8813</feedburner:origLink></item>
  </channel>
</rss>
