<?xml version="1.0" encoding="ISO-8859-1" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://ivy.fr/blog/index.php/">
  <title>Ma petite entreprise</title>
  <description><![CDATA[Architecture logicielle, langages de domaines, interface graphique et VoIP]]></description>
  <link>http://ivy.fr/blog/index.php/</link>
  <dc:language>fr</dc:language>
  <dc:creator></dc:creator>
  <dc:rights></dc:rights>
  <dc:date>2010-04-15T16:11:56+00:00</dc:date>
  <admin:generatorAgent rdf:resource="http://www.dotclear.net/" />
  
  <sy:updatePeriod>daily</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>
  <sy:updateBase>2010-04-15T16:11:56+00:00</sy:updateBase>
  
  <items>
  <rdf:Seq>
    <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2010/04/15/109-developing-a-multi-touch-surface-interface" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2010/02/22/108-switching-to-zsh" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2010/01/01/107-quick-note-on-python-vs-jython-performance" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/12/21/106-supervisord-to-manage-your-daemons" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/09/28/105-pamela-haml-like-processor-in-python" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/09/28/104-montreal-python-9-short-talk" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/09/22/103-message-buses-agents-and-web-applications" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/05/28/102-retro-exposing-data-through-web-services" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/05/25/100-presenting-retro-at-montreal-python-7" />
  <rdf:li rdf:resource="http://ivy.fr/blog/index.php/2009/04/21/98-trouble-migrating-the-blog" />
  </rdf:Seq>
  </items>
</channel>

<item rdf:about="http://ivy.fr/blog/index.php/2010/04/15/109-developing-a-multi-touch-surface-interface">
  <title>Developing a multi-touch surface interface</title>
  <link>http://ivy.fr/blog/index.php/2010/04/15/109-developing-a-multi-touch-surface-interface</link>
  <dc:date>2010-04-15T16:11:56+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>Interface</dc:subject>
  <description>I just demo'ed a port of Revealicious to a 2 x 42" multi-touch surface built by Christophe Viau at ETS Montréal. It was a lot of fun, and a lot of work too !


I wrote the port in OpenGL and Scala, using TUIO as the interaction communication protocol. Here are some technical notes on the...</description>
  <content:encoded><![CDATA[ <p>I just demo'ed a port of <a href="http://ivy.fr/revealicious">Revealicious</a> to a 2 x 42" multi-touch surface built by <a href="http://visualisationscientifique.blogspot.com/">Christophe Viau</a> at <a href="http://etsmtl.ca">ETS Montréal</a>. It was a lot of fun, and a lot of work too&nbsp;!</p>


<p>I wrote the port in OpenGL and Scala, using <a href="http://www.tuio.org/">TUIO</a> as the interaction communication protocol. Here are some technical notes on the implementation:</p>

<ul>
<li><strong>Implementing interactions is hard</strong>: bye bye hover/click/drag, you have to deal with multiple cursors, gestures, time(out) and unreliable event sources.</li>
<li><strong>You need muscle</strong>: interfaces are not supposed to hog your CPU, yet the users expect fluid interactions and transitions. Using a fast language and library helps a lot, but you still need to optimise so that you don't eat CPU when the UI is idle (this can be tricky !)</li>
<li><strong>Tweening will make you happy</strong>: as multi-touch, and especially surface interfaces usually require animations and even sometimes 3D, you'll get much better results if you use <a href="http://fr.wikipedia.org/wiki/Tweening">tweening</a> (like exponential ease out). This small change will make you interface shine at a small cost&nbsp;!</li>
<li><strong>OpenGL libraries are not designed for UI</strong>: almost every single OpenGL library is about games or creating real 3D environments. When you do an interface in 3D, you need a <a href="http://en.wikipedia.org/wiki/Scene_graph">scene graph</a>, but you also really need good picking/selection/events functions. You also need something simple, and an ability to deal with text. While there is tons of OpenGL libraries, I've found none of them to meet these requirements (and I've looked in Python and Java libraries)</li>
</ul>

<p>Overall, my experience with Scala for this was really great: the performance is there, using immutable data structures is reassuring when you know you have at least 3 concurrent threads in your app (AWT events, TUIO events and OpenGL loop), and the memory footprint is not that bad (you need to constrain the heap consumption). On a language level, the DSL-ability of Scala makes it really convenient to write event handlers, even thought the type systems is sometimes more a burden than a boon. Being able to re-use existing Java libraries is also a big plus.</p>


<p>If you're interested in some design-related notes on this topic, here is <a href="http://ffunction.posterous.com/notes-on-creating-a-multi-touch-interface">the design notes on creating a multi-touch interface</a> on <a href="http://ffctn.com">FFunction</a>'s <a href="http://ffunction.posterous.com/">blog</a>.</p>

<pre></pre>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2010/02/22/108-switching-to-zsh">
  <title>Switching to zsh</title>
  <link>http://ivy.fr/blog/index.php/2010/02/22/108-switching-to-zsh</link>
  <dc:date>2010-02-22T10:58:34+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>So last Friday, updating my Ubuntu 9.10 resulted in my inability to log in -- apparently something broke tcsh, which has been my shell of choice for some time now. It's an awkward situation to be unable to login to your computer, but (thank God) I had a "demo" account which allowed me to get things...</description>
  <content:encoded><![CDATA[ <p>So last Friday, updating my Ubuntu 9.10 resulted in my inability to log in -- apparently something broke tcsh, which has been my shell of choice for some time now. It's an awkward situation to be unable to login to your computer, but (thank God) I had a "demo" account which allowed me to get things right. I wonder what would have happened if tcsh broken on one of my servers... I remember being unable to find a way to start an ssh session without starting the user's default shell... ouch&nbsp;!</p>


<p>Anyway, I've been contemplating the idea of switching to zsh for some time, and I found it was the right time to do the transition. So far, so good&nbsp;! Here are the things I really loved in zsh:</p>

<ul>
<li><strong>Proper right prompt support</strong>: tcsh was the only shell to support a proper right prompt -- when I mean proper, I mean it works even when you resize the terminal or when what you write on the command line reaches the right prompt. It's a small detail, but this kept me hooked to tcsh :)</li>
<li><strong>Amazing completion</strong>: I was always jealous of bash to allow completion of <code>$VAR</code> even within expressions (like <code>/some/path/$VAR</code>). Zsh does this and much, much more. Try typing "<code>man &lt;something&gt;</code>" and it will tell you if there is a man page or not</li>
<li><strong>Good programmability</strong>: tcsh does not support functions, which pleased my sense of simplicity, but which starts to be painful when you want to do advanced prompt configuration (like tell if you're in a screen session or within a git repository). I know bash does this too, but zsh just seems better :)</li>
<li><strong>Good community support and documentation</strong>: it's not too difficult to find good zsh configuration examples, and the community is very responsive, which makes the transition much easier&nbsp;!</li>
</ul>

<p>I've also tried the <a href="http://fishshell.org/index.php" hreflang="fr">FISH shell</a>, but its relative slowness and worse, lack of vi bindings made me prefer zsh. It's interesting to try though, if you don't despeartly need a right prompt and vi bindings ;)</p>




<pre></pre>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2010/01/01/107-quick-note-on-python-vs-jython-performance">
  <title>Quick note on python vs jython performance</title>
  <link>http://ivy.fr/blog/index.php/2010/01/01/107-quick-note-on-python-vs-jython-performance</link>
  <dc:date>2010-01-01T11:13:17+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>Langages</dc:subject>
  <description>A friend of mine is working on a project where his Python app has to work on Jython (Python on the JVM). As he had the bad surprise of seeing a noticable performance decrease, I wanted to check this for myself.


I know the JVM is not very good for dynamic languages (yet), but I wanted to test this...</description>
  <content:encoded><![CDATA[ <p>A friend of mine is working on a project where his Python app has to work on <a href="htttp://www.jython.org">Jython</a> (Python on the JVM). As he had the bad surprise of seeing a noticable performance decrease, I wanted to check this for myself.</p>


<p>I know the JVM is not very good for dynamic languages (yet), but I wanted to test this with a real application. So I took a collection of <a href="http://github.com/sebastien/pamela">Pamela</a> files from a real project I finished a couple of months ago, and made Pamela parse the whole files 100 times (Pamela is a markup to HTML processor, similar to HAML).</p>


<p>The numbers are not very suprising, and a bit disappointing for the JVM as a runtime for dynamic languages:</p>

<ul>
<li>On CPython, Pamela processed 60 KB/s, and the test run for 30.27s</li>
<li>On Jython 2.5r0, Pamela processed 30.25 kb/s, and the test run for 63.03s</li>
</ul>

<p>The tests do not take into account the VM startup, and all the data is pre-loaded to memory. If you compare this very simple benchmark to results of <a href="http://antoniocangiano.com/2007/02/19/ruby-implementations-shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs-cardinal/">Ruby vs JRuby</a> it seems like having a 50% performance hit is not so bad when switching from native to JVM runtime.</p>


<p>I did another comparison, which is to start a simple <a href="http://github.com/sebastien/retro">Retro</a> web service and run Apache Benchmark (<code>ab -n1000</code>) on it. The result are not really better:</p>

<ul>
<li>On CPython, Retro serves 426.52 req/s</li>
<li>On Jython, Retro serves 53.79 req/s (and if you set concurrency to <code>-C100</code> you'll likely get a connection reset by peer...)</li>
</ul>

<p>My bet is that if you use the JDK library (<code>java.util.collections</code>, <code>java.io</code>, etc) you'll likely get better performance -- but the utility of Jython seems to be either running existing Python libraries on the JVM or using Python as a "glueing language" for your native JVM objects. In this latter case, you might as well look into other scripting languages available for the JVM like JavaScript or Lisp&nbsp;!</p>


<p>Anyway, things are likely to change when dynamic method dispatch gets implemented in Java 7&nbsp;!</p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/12/21/106-supervisord-to-manage-your-daemons">
  <title>Supervisord to manage your daemons</title>
  <link>http://ivy.fr/blog/index.php/2009/12/21/106-supervisord-to-manage-your-daemons</link>
  <dc:date>2009-12-21T18:55:34+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>I recently had to ship an application which was primarily made of a couple of standalone Retro-based web servers, all mounted on a Pound HTTP proxy. Pound is much better than Apache for proxying, first because it's faster, easier to configure, but also because Apache will often block and give 503 -...</description>
  <content:encoded><![CDATA[ <p>I recently had to ship an application which was primarily made of a couple of standalone <a href="http://www.github.com/sebastien/retro">Retro</a>-based web servers, all mounted on a <a href="http://www.apsis.ch/pound/">Pound</a> HTTP proxy. Pound is much better than Apache for proxying, first because it's faster, easier to configure, but also because Apache will often block and give <code>503 - Service Not Available</code> when you back-end web-service crashes while serving a request. Pound goes away with that nicely, and has the added bonus of periodically checking the health of your back-end web servers.</p>


<p>More recently, I've been working on a project using the fashionable 'redis' and 'mongodb' databases. In both cases, I was faced with the problem of automatically starting and monitoring non-forking processes, which did not come with any <code>/etc/init.d/</code> management script.</p>


<p>I've tried Monit, but really spent two days trying to get it  to automatically start and monitor processes that I was "daemonizing" with <a href="http://www.clapper.org/software/daemonize/">the daemonize command</a>. The main issue I had was that Monit would not restart the daemon if the pid was still present, and was apparently unable to check if the pid actually matched a running process -- so it was just assuming that the daemon was running if there was a pid file. It's maybe me using Monit wrongly, but I gave up after two frustrating days.</p>


<p>I then found <a href="http://supervisord.org/">supervisord</a> which despite a lack of buzz, is actually a pretty decent solution for this particular problem: it expects your command to be non-forking, and will manage all the daemonizing and monitoring aspects itself. The documentation is not so great, but writing a rule to automatically start and monitor a service is as simple as this:</p>


<pre><a href="[program:services-redis">[program:services-redis</a>]
priority=10
directory=/opt/services/redis
command=/opt/services/redis/redis-server /opt/services/redis/redis.conf
user=root
redirect_stderr=true</pre>


<p>if you want to try it, here is how to install it:</p>


<pre>sudo aptitude install python python-setuptools
sudo easy_install supervisord</pre>


<p>then <code>vi /etc/supervisord.conf</code></p>


<pre><a href="[supervisord">[supervisord</a>]
logfile=/var/log/supervisord
loglevel=info
pidfile=/var/run/supervisord.pid</pre>


<pre><a href="[rpcinterface:supervisor">[rpcinterface:supervisor</a>]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface</pre>


<pre><a href="[supervisorctl">[supervisorctl</a>]
http://localhost:9001</pre>


<pre><a href="[inet_http_server">[inet_http_server</a>]
port=9001</pre>


<p>and just append whatever service configuration you'd like. Here's what you'd do for Apache:</p>


<pre><a href="[program:apache2">[program:apache2</a>]
command=/usr/sbin/apache2 -c "ErrorLog /dev/stdout" -DFOREGROUND
redirect_stderr=true</pre>


<p>Again, note that <code>supervisord</code> asks your programs to not fork (ie. run in foreground), and will do the daemonization for you. As such, it's a good replacement to <code>init.d</code> as well as Monit, and because it offers command-line, Web, XML-RPC and Python interop, it makes it a very good candidate for managing your services across a various range of server nodes.</p>


<p>The only thing I'd like to have is to be able to retrieve is per-process metrics, such as cpu, memory, number of threads -- but these are already available in the <code>/proc</code> filesystem on Linux.</p>


<p>So to sum this up, if you have to make sure a set of programs are always running, and if you want a simple way to configure which of these programs have to run, <a href="http://supervisord.org/">supervisord</a> is your friend&nbsp;!</p>


<p>PS: If you want to automatically start supervisor, here <a href="http://stackoverflow.com/questions/1943134/how-to-automatically-start-supervisord-on-linux-ubuntu-closed">how to set it up with init.d on Ubuntu 9.10</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/09/28/105-pamela-haml-like-processor-in-python">
  <title>Pamela: HAML-like processor in Python</title>
  <link>http://ivy.fr/blog/index.php/2009/09/28/105-pamela-haml-like-processor-in-python</link>
  <dc:date>2009-09-28T10:07:44+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>I realized I did not share the slides of my Montréal Python 8 Pamela presentation. Pamela is language/tool that allows developers and designers to write HTML easier by providing a CSS-savvy, Python-inspired syntax to HTML.

Pamela comes with the following features:


Indentation is used to...</description>
  <content:encoded><![CDATA[ <p>I realized I did not share the slides of my Montréal Python 8 Pamela presentation. Pamela is language/tool that allows developers and designers to write HTML easier by providing a CSS-savvy, Python-inspired syntax to HTML.</p>

<p>Pamela comes with the following features:</p>

<ul>
<li>Indentation is used to express structure</li>
<li>Shorthands for CSS classes and ids</li>
<li>Syntax that looks very much like HTML, except simpler</li>
<li>Command-line program to convert your .paml files to HTML</li>
<li>Optional embedded web server to test your Pamela files </li>
</ul>

<p>Pamela is the perfect companion to <a href="http://sandbox.pocoo.org/clevercss/">CleverCSS</a>, so if you're interested, have a look at the following presentation:</p>

<div style="width:531px;text-align:left" id="__ss_2081679"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/spierre/pamela-brining-back-the-pleasure-of-handwritten-html-montral-python-8" title="Pamela - Brining back the pleasure of hand-written HTML - Montréal Python 8">Pamela - Brining back the pleasure of hand-written HTML - Montréal Python 8</a><object style="margin:0px" width="531" height="443"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=montrealpython-pamela-20090708-090928085754-phpapp01&stripped_title=pamela-brining-back-the-pleasure-of-handwritten-html-montral-python-8" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=montrealpython-pamela-20090708-090928085754-phpapp01&stripped_title=pamela-brining-back-the-pleasure-of-handwritten-html-montral-python-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="531" height="443"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/spierre">spierre</a>.</div></div>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/09/28/104-montreal-python-9-short-talk">
  <title>Montréal Python 9 short talk</title>
  <link>http://ivy.fr/blog/index.php/2009/09/28/104-montreal-python-9-short-talk</link>
  <dc:date>2009-09-28T09:53:56+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>After presenting Retro and Pamela, I will be giving a short talk on Sink (not yet released) at Montréal Python 9 (September 30th at UQAM).


Sink is a simple but handy tool that allows you to compare and take snapshots of multiple directories, going a little bit further that what you could do with...</description>
  <content:encoded><![CDATA[ <p>After presenting <a href="http://github.com/sebastien/retro">Retro</a> and <a href="http://github.com/sebastien/pamela">Pamela</a>, I will be giving a short talk on Sink (not yet released) at <a href="http://montrealpython.com/2009/09/02/montreal-python-9-2009-09-30-at-uqam/">Montréal Python 9</a> (September 30th at <a href="http://www.uqam.ca/campus/pavillons/pk.htm">UQAM</a>).</p>


<p>Sink is a simple but handy tool that allows you to compare and take snapshots of multiple directories, going a little bit further that what you could do with "diff -r". I will be presenting how to use sink to&nbsp;:</p>

<ul>
<li>see what has changed on your filesystem after a ./configure &amp;&amp; make &amp;&amp; sudo make install</li>
<li>do a post-install and post-configuration backup on a new box</li>
<li>merge two or more directories</li>
</ul>

<p>Sink is written in Python and has been used for years now, so I think it's high time that I present it to the Montreal Pythonistas&nbsp;! See you Wednesday at Montréal Python 9 :)</p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/09/22/103-message-buses-agents-and-web-applications">
  <title>Message buses, agents and web applications</title>
  <link>http://ivy.fr/blog/index.php/2009/09/22/103-message-buses-agents-and-web-applications</link>
  <dc:date>2009-09-22T11:39:11+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>I've been quite busy working on dataviz-related project, but also web-related projects which are making it to production, and on that topic I has some thoughts I'd like to share :)


Something like 8 years ago I was still studying at the engineering school, working on the theory and practice of...</description>
  <content:encoded><![CDATA[ <p>I've been quite busy working on dataviz-related project, but also web-related projects which are making it to production, and on that topic I has some thoughts I'd like to share :)</p>


<p>Something like 8 years ago I was still studying at the engineering school, working on the theory and practice of agent systems. Agents were a much-hyped term at that time, but they appeared to me as an evolution of OOP towards more scalable and more maintainable architectures.</p>


<p>The essence of agents (or actors, to a lesser degree) is autonomy (concurrency) and communication (message-passing) -- concepts which people having played with any serious massively concurrent, distributed platform (like Erlang) will be familiar with. In practice, agents are really just "objects with an inbox" with the ability to have access to an execution thread to schedule tasks.</p>


<p>What makes agents more interesting though is that using them will impact the way you architecture your application. Instead of having a monolithic application that process everything "vertically", you have an application composed of "horizontal" services delivered by agents.</p>


<p>To put this in context, you might have a Web application that uses XMPP, SMTP and database services which are available in the application environment -- the XMPP, SMTP and database services might be offered by one (or more) agents. You then don't need to have a heavyweight Web application importing a sh**load of dependencies, but simply benefit from the high-level by using a simple communication protocol.</p>


<p>There is nothing new here, the concepts were already there in CORBA 15 years ago, but with today's focus on "cloud computing" the agent paradigm seems to me as more interesting than ever -- because we now have a context to put it to good use. People using GNOME may know of D-BUS, which provides a similar architecture to enable easy "exchange of sevices" between applications.</p>


<p>So even in the modest web applications I'm working on, I already see the advantages of using an agent-based approach to designing the apps. However, I also feel some pain due to the lack of a consistent "agent platform" -- I make do with assembling selected components to form a "poor's man agent platform".</p>


<p>Here are the pieces you'd need to make your own:</p>

<ul>
<li>a message bus: something that allows inter-process (and ideally over-network) communication of messages. It's up to you to choose your message format, (I've personnaly chosen JSON with a standard type for messages) and your communication channel (<a href="www.spread.org/">spread</a> or <a href="http://xph.us/software/beanstalkd/">beanstalkd</a> work quite well). I'm thinking about using D-BUS as well, as it (apparently) has a good support for managing your services.</li>
</ul>
<ul>
<li>processes, threads or coroutines: agents need a way to poll their inbox and schedule arbitrary bits of code (either in reaction to messages, or in a proactive way). Implementing services with agents means that you'll use other lower-level services, and that communication will be made over the message bus. As a consequence you need to have an efficient way of parallelizing and scheduling the polling of inbox, polling of response status and execution of scheduled code. Nowadays having an event-based reactor and a simple promises/futures API is what seems to be works best -- but it's still difficult because of so-so language support. The alternative is to limit the use of the message bus and ensure that a request never fails... which requires a leap of faith ;)</li>
</ul>
<ul>
<li>administrative tools: because we're talking about a platform, you need things to ensure that your services are running, monitor the load, log problems, etc. Ideally, this could be build on the agent platform itself, by implementing watchdog services so that the necessary "bootstrapping tools" would be kept to a minimum. So far, I make do with crontabs, daemons and probably monit.</li>
</ul>

<p>Anyway, I'm quite happy to see that the agent paradigm finds relevant application in the domain of web applications, even if there is still some work to be done until we can get a usable platform -- but it seems like most of the pieces are here&nbsp;!</p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/05/28/102-retro-exposing-data-through-web-services">
  <title>Retro - Exposing data through web services</title>
  <link>http://ivy.fr/blog/index.php/2009/05/28/102-retro-exposing-data-through-web-services</link>
  <dc:date>2009-05-28T12:33:02+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>I just gave a short talk on Retro at Montréal Python 7 and was happy to hear that the presentation was clear and showed the interest of using Retro to quickly implement data-oriented Web Services.

While we're hearing a lot of buzz on the "Web 3.0" and all the linked-data thing, I think we...</description>
  <content:encoded><![CDATA[ <p>I just gave a short talk on <a href="http://github.com/sebastien/retro" class="external" target="_blank">Retro</a> at <a href="http://montrealpython.org/?p=52" class="external" target="_blank">Montr&eacute;al Python 7</a> and was happy to hear that the presentation was clear and showed the interest of using Retro to quickly implement data-oriented Web Services.</p>

<p>While we're hearing a lot of buzz on the "Web 3.0" and all the <a href="http://www.w3.org/2009/Talks/0204-ted-tbl/" class="external" target="_blank">linked-data thing</a>, I think we still need to have more simple RESTful <a href="http://data.gov" class="external" target="_blank">exposition of data</a>, so here's something to help:</p>

<div style="width:531;text-align:left" id="__ss_1501800"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/spierre/retro-web-services-made-easy?type=powerpoint" title="Retro - Web Services Made Easy">Retro - Web Services Made Easy</a><object style="margin:0px" width="531" height="443"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=montrealpython-retro-20090527-090528111836-phpapp02&stripped_title=retro-web-services-made-easy" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=montrealpython-retro-20090527-090528111836-phpapp02&stripped_title=retro-web-services-made-easy" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="531" height="443"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">Microsoft Word documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/spierre">spierre</a>.</div></div>

<p>This presentation should help you get started with Retro, and you can also <a href="http://github.com/sebastien/retro/tarball/master" class="external" target="_blank">grab the code from Github</a> or clone the repository to get started:</p><pre>git clone git://github.com/sebastien/retro.git</pre><p>There is much more to discover about Retro, so I'll let you have a look and play with it !</p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/05/25/100-presenting-retro-at-montreal-python-7">
  <title>Presenting Retro at Montréal Python 7</title>
  <link>http://ivy.fr/blog/index.php/2009/05/25/100-presenting-retro-at-montreal-python-7</link>
  <dc:date>2009-05-25T10:29:27+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>As you may know, one of my "new year resolutions" is to do more presentations of the different open-source projects I've been working on. I'll be presenting "Retro" (used to be called Railways, but I switched because the name was so 2000 ;) at Montréal Python 7 this Wednesday at La Banque.


Retro...</description>
  <content:encoded><![CDATA[ <p>As you may know, one of my "new year resolutions" is to do more presentations of the different open-source projects I've been working on. I'll be presenting "<strong>Retro</strong>" (used to be called Railways, but I switched because the name was so 2000 ;) at <a href="http://montrealpython.org/?p=52">Montréal Python 7</a> this Wednesday at <a href="http://labanque.ca/">La Banque</a>.</p>


<p>Retro is a lightweight declarative web toolkit that I've been using for many web-projects, and that I think is worth sharing&nbsp;!
I'll do a <em>flash presentation</em> (~5min) presenting how it can be used to quickly create web services and why it puts you in a good mindset to design web APIs.</p>


<p>Presenting technologies is always an interesting challenge, especially when there are many similar projects (in this case, there are dozens of web frameworks/toolkits/libs) -- I'll do my best to communicate clearly what are the design decisions that motivated Retro's creation and why it can be better fit for specific applications.</p>


<p>You can check out retro on my <a href="http://github.com/sebastien/retro/tree/master">GitHub page</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ivy.fr/blog/index.php/2009/04/21/98-trouble-migrating-the-blog">
  <title>Trouble migrating the blog</title>
  <link>http://ivy.fr/blog/index.php/2009/04/21/98-trouble-migrating-the-blog</link>
  <dc:date>2009-04-21T10:01:26+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Sébastien Pierre</dc:creator>
  <dc:subject>General</dc:subject>
  <description>Some of you may have noticed that some articles disappeared during the last week... that's because I migrated to a new server (hosted at iWeb.ca) and put the wrong database backup online. So I'm sorry for the inconvenience, but nothing was lost... pfeeeew !...</description>
  <content:encoded><![CDATA[ <p>Some of you may have noticed that some articles disappeared during the last week... that's because I migrated to a new server (hosted at iWeb.ca) and put the wrong database backup online. So I'm sorry for the inconvenience, but nothing was lost... pfeeeew&nbsp;!</p>]]></content:encoded>
</item>

</rdf:RDF>
