<?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>Stephane Wirtel (@matrixise)</title><link href="http://wirtel.be/" rel="alternate" /><id>http://wirtel.be/</id><updated>2013-02-19T00:00:00+01:00</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/wirtel" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="wirtel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><title>To the Python Community, Thank you for the FOSDEM !</title><link href="http://wirtel.be/posts/en/2013/02/19/python-community-thankyou/" rel="alternate" /><updated>2013-02-19T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-02-19:posts/en/2013/02/19/python-community-thankyou/</id><summary type="html">&lt;div class="section" id="python-fosdem"&gt;
&lt;h2&gt;Python &amp;#64;&amp;nbsp;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/h2&gt;
&lt;div class="section" id="how-everything-started"&gt;
&lt;h3&gt;How everything&amp;nbsp;started&lt;/h3&gt;
&lt;p&gt;In September, I was at &lt;a class="reference external" href="http://pycon.fr/2012"&gt;PyConFR 2012&lt;/a&gt; with &lt;a class="reference external" href="http://twitter.com/gmludo"&gt;Ludovic Gasc&lt;/a&gt; and &lt;a class="reference external" href="http://twitter.com/kangol"&gt;Christophe Simonis&lt;/a&gt;
and we discussed about an hypothetical event in&amp;nbsp;Belgium.&lt;/p&gt;
&lt;p&gt;I said, and why not at &lt;a class="reference external" href="http://fosdem.org/2013"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt; 2013&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;At beginning, Ludovic was thinking of a small joke but in fact it&amp;nbsp;wasn&amp;#8217;t.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="first-point"&gt;
&lt;h3&gt;First&amp;nbsp;point&lt;/h3&gt;
&lt;p&gt;I began to make contact with some members of the &lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; team, the &lt;a class="reference external" href="http://afpy.org"&gt;AFPy&lt;/a&gt;, and
send some emails to the right&amp;nbsp;contacts.&lt;/p&gt;
&lt;p&gt;But this adventure was not easy to&amp;nbsp;create.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Contact the &lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; team and ask a devroom and wait for the&amp;nbsp;result&lt;/li&gt;
&lt;li&gt;Contact a lot of potential&amp;nbsp;speakers&lt;/li&gt;
&lt;li&gt;Create the &lt;a class="reference external" href="http://github.com/matrixise/python-fosdem.org"&gt;website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create the&amp;nbsp;committee&lt;/li&gt;
&lt;li&gt;Select the&amp;nbsp;talks&lt;/li&gt;
&lt;li&gt;Publish the&amp;nbsp;schedule&lt;/li&gt;
&lt;li&gt;Wait for the &lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt;&amp;nbsp;;-)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And I just announced this event on &lt;a class="reference external" href="http://news.ycombinator.org"&gt;Hacker News&lt;/a&gt;
This experience was really&amp;nbsp;rewarding.&lt;/p&gt;
&lt;p&gt;And now, it&amp;#8217;s a great&amp;nbsp;adventure&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="to-the-python-community-thank-you"&gt;
&lt;h3&gt;To the Python Community, Thank You&amp;nbsp;!&lt;/h3&gt;
&lt;p&gt;I would like to tell thank you to everybody&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;With your presence, this event has been a real great&amp;nbsp;success.&lt;/p&gt;
&lt;p&gt;I was very impressed and honored to meet&amp;nbsp;you&lt;/p&gt;
&lt;p&gt;Thank you so much&amp;nbsp;!&lt;/p&gt;
&lt;div class="section" id="id1"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/ameurant"&gt;Alain&amp;nbsp;Meurant&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;You and Affinitic are a great sponsor with your involvements in the Python
community. I was so happy to see your support at this event with your
sponsorship. I worked with him at Aragne at the beginning of Python in
Belgium (in the early&amp;nbsp;2000s).&lt;/p&gt;
&lt;p&gt;Thank you for your&amp;nbsp;help.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id2"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/ametaireau"&gt;Alexis&amp;nbsp;Métaireau&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I met you at the &lt;a class="reference external" href="http://pycon.fr/2012"&gt;PyConFR 2012&lt;/a&gt; at Paris and you are a good guy. I discussed
with you about Werkzeug, Pelican and&amp;nbsp;Cornice.&lt;/p&gt;
&lt;p&gt;For this event, you proposed a talk about the good practices for a dummy in
Python. During your talk, the room was full&amp;nbsp;;-)&lt;/p&gt;
&lt;p&gt;Thank&amp;nbsp;you,&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id3"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/andreacrotti"&gt;Andrea&amp;nbsp;Crotti&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Thank you for your talk about the &amp;#8220;&lt;span class="caps"&gt;TDD&lt;/span&gt; from scratch&amp;#8221;. This talk is still
important and useful that apply to everyone (beginners or experts) because
you show the basis of a good product / component. And sometimes, we forget
those important&amp;nbsp;details.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id4"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/benoitc"&gt;Benoit&amp;nbsp;Chesneau&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This is the first time wherein I can discuss with you about gunicorn and
gaffer. The last time was at the pyconfr 2010, you showed the development of
gunicorn and I was impressed by the project and your technical&amp;nbsp;skill.&lt;/p&gt;
&lt;p&gt;Now, we discuss via irc or twitter and I appreciate our&amp;nbsp;discussion.&lt;/p&gt;
&lt;p&gt;Thank&amp;nbsp;you,&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id5"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://blog.briancurtin.com/"&gt;Brian&amp;nbsp;Curtin&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I don&amp;#8217;t know you but thank you for &lt;a class="reference external" href="http://pycon.blogspot.fr/2012/12/cfp-for-python-room-at-fosdem-2013.html"&gt;your post on the PyCon blog&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id6"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/kryskool"&gt;Christophe&amp;nbsp;Chauvet&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;In the first place, you wanted to be in the PostgreSQL devroom, but after the first
talk you stayed in the Python&amp;nbsp;devroom.&lt;/p&gt;
&lt;p&gt;Thank you for your help in the&amp;nbsp;devroom.&lt;/p&gt;
&lt;p&gt;Hope to see you at a next OpenERP&amp;nbsp;event.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id7"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/kangol"&gt;Christophe&amp;nbsp;Simonis&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;My friend for 8 years, he was with Ludovic and me at &lt;a class="reference external" href="http://pycon.fr/2012"&gt;PyConFR 2012&lt;/a&gt;.
He helped me for the &amp;#8220;&lt;a class="reference external" href="http://python-fosdem.org"&gt;Python &amp;#64; &lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt;&amp;#8221; &lt;a class="reference external" href="http://github.com/matrixise/python-fosdem.org"&gt;website&lt;/a&gt;.
From start to finish you were with me for this event. Thank you so&amp;nbsp;much.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id8"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/evernichon"&gt;Eric&amp;nbsp;Vernichon&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Hi&amp;nbsp;dude,&lt;/p&gt;
&lt;p&gt;Thank you for your support, I really appreciate to see you at this event.
Hope to see you at a next OpenERP&amp;nbsp;event.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id9"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/gawel_"&gt;Gael&amp;nbsp;Pasgrimaud&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The financial officer of the &amp;#8220;Association Francophone Python&amp;#8221;.
He managed the sponsoring from the &lt;a class="reference external" href="http://www.python.org/psf/"&gt;Python Software Foundation&lt;/a&gt;
and &lt;a class="reference external" href="http://affinitic.be"&gt;Affinitic.be&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id10"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/jonas_g"&gt;Jonas&amp;nbsp;Geiregat&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Before this week-end, I had just discussed via email, irc or twitter but not
face to face. I really appreciate his work for this&amp;nbsp;edition.&lt;/p&gt;
&lt;p&gt;Thank&amp;nbsp;you.&lt;/p&gt;
&lt;p&gt;For the next edition, would you be interested to organize with us&amp;nbsp;?&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id11"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/kehoste"&gt;Kenneth&amp;nbsp;Hoste&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Your talk on EasyBuild was very interesting.
We will see us at a future &lt;a class="reference external" href="http://afpy.ro"&gt;AFPy.ro&lt;/a&gt; in&amp;nbsp;Belgium.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id12"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/kennethreitz"&gt;Kenneth&amp;nbsp;Reitz&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Thank you dude, you have received my email about this hypothetical event,
and you said me &amp;#8220;Yes, I will go to&amp;nbsp;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Imagine this developer, he works for &lt;a class="reference external" href="http://www.heroku.com"&gt;Heroku&lt;/a&gt; in
California and he tells me, &amp;#8220;yes I come&amp;#8221;, it&amp;#8217;s wonderful, awesome&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Thank you so much but I have one regret :( I didn&amp;#8217;t tell you face to face !
Hope to see you in a future event and thank you&amp;nbsp;again.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id13"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/ploum"&gt;Lionel&amp;nbsp;Dricot&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Hi Ploum, Mister ploum, I like to read your articles on &lt;a class="reference external" href="http://ploum.net/"&gt;your blog&lt;/a&gt;
and now your G+ account&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;You were the first speaker to present your talk and I think that it wasn&amp;#8217;t easy
for you. I have really appreciated your presence at this &lt;a class="reference external" href="http://python-fosdem.org"&gt;Python &amp;#64; &lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ludovic-gasc"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/gmludo"&gt;Ludovic&amp;nbsp;Gasc&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Until the week-end of the &lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt;, this guy does not know whether can help
me for the event because his wife was&amp;nbsp;pregnant.&lt;/p&gt;
&lt;p&gt;I think you have a great gift my friend, a great success for the
&lt;a class="reference external" href="http://python-fosdem.org"&gt;Python &amp;#64; &lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; 2013 and you are daddy&amp;nbsp;;-)&lt;/p&gt;
&lt;p&gt;Welcome in the Daddy&amp;nbsp;club.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="marc-andre-lemburg-psf"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://www.lemburg.com/files/mal/"&gt;Marc-André Lemburg&lt;/a&gt; (&lt;a class="reference external" href="http://www.python.org/psf/"&gt;&lt;span class="caps"&gt;PSF&lt;/span&gt;&lt;/a&gt;)&lt;/h4&gt;
&lt;p&gt;Thank you, I didn&amp;#8217;t know you before this event, we discuss about a financial
help from the Python Software Foundation. Sincerely, thank&amp;nbsp;you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id14"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://affinitic.be"&gt;Michel&amp;nbsp;Cervello&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Thank you for your talk on&amp;nbsp;Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id15"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/nvaroqua"&gt;Nelle&amp;nbsp;Varoquaux&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Thank you Nelle, you has been awesome, you saved my life ;-) You know
why, because there was a missing speaker, and you gave an unprepared&amp;nbsp;talk.&lt;/p&gt;
&lt;p&gt;Really, Respect&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;That was really nice to have a woman in the speakers&amp;#8217;&amp;nbsp;group.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ryan-faulkner"&gt;
&lt;h4&gt;Ryan&amp;nbsp;Faulkner&lt;/h4&gt;
&lt;p&gt;Thank you for your talk, I didn&amp;#8217;t discuss with you but I appreciate your&amp;nbsp;talk.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id16"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/Seyz_"&gt;Sandro&amp;nbsp;Munda&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;It was the first talk for this young dev, your talk was really interesting
and now you have a small community to help you for the development of your
talk. Great, continue&amp;nbsp;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id17"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/saghul"&gt;Saul Ibarra&amp;nbsp;Corretgé&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This guy knows his subject, there is no secret for him about the gevent,
pyuv. I didn&amp;#8217;t discuss with you but I had a lot of questions about pyuv.
Hope to see you at the next&amp;nbsp;edition.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tarek-ziade"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/tarek_ziade"&gt;Tarek&amp;nbsp;Ziadé&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Tarek, who not know this python dev ?
You have proposed to give a t-shirt to the speakers, this idea was original
and appreciated by the&amp;nbsp;speakers.&lt;/p&gt;
&lt;p&gt;You were a member of the committee, thank you for your help and&amp;nbsp;advice.&lt;/p&gt;
&lt;p&gt;Thank you for the wine bottle, I will taste it with my family in few&amp;nbsp;months.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id18"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/tcarrez"&gt;Thierry&amp;nbsp;Carrez&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;You have been surprised to receive a t-shirt and a package of belgian
chocolate. Thank you for your talk about OpenStack and the jobs in this&amp;nbsp;section.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id19"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/victor_stinner"&gt;Victor&amp;nbsp;Stinner&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Your talk on the &lt;span class="caps"&gt;AST&lt;/span&gt; was really awesome, You did not know if you could come
because you hurt your&amp;nbsp;back.&lt;/p&gt;
&lt;p&gt;Thank you so much for your talk&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Hope to see you at the next &lt;a class="reference external" href="http://pycon.fr"&gt;PyCon &lt;span class="caps"&gt;FR&lt;/span&gt;&lt;/a&gt;&amp;nbsp;;-)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="id20"&gt;
&lt;h4&gt;&lt;a class="reference external" href="http://twitter.com/nvie"&gt;Vincent&amp;nbsp;Driessen&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I used his code with &lt;a class="reference external" href="http://python-rq.org/"&gt;Python-&lt;span class="caps"&gt;RQ&lt;/span&gt;&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/nvie/rq-dashboard"&gt;&lt;span class="caps"&gt;RQ&lt;/span&gt;-Dashboard&lt;/a&gt;, I have read his blog post
about &lt;a class="reference external" href="http://nvie.com/posts/a-successful-git-branching-model/"&gt;the git workflow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;He was honored to be contacted by us and meet a lot of famous members
of the Python&amp;nbsp;Community.&lt;/p&gt;
&lt;p&gt;Thank you and I have a dinner for you ;-) I didn&amp;#8217;t&amp;nbsp;forget.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ralf-hildebrandt-sjoerd-mullender"&gt;
&lt;h4&gt;Ralf Hildebrandt, Sjoerd&amp;nbsp;Mullender&lt;/h4&gt;
&lt;p&gt;Thank your for the mailing lists (&lt;a class="reference external" href="mailto:fosdem&amp;#64;python.org"&gt;fosdem&amp;#64;python.org&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="juan-batiz-benet"&gt;
&lt;h4&gt;Juan&amp;nbsp;Batiz-Benet&lt;/h4&gt;
&lt;p&gt;No news, I hope that everything goes well for him, but thank you for your&amp;nbsp;talk.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="till-von-ahnen"&gt;
&lt;h4&gt;Till von&amp;nbsp;Ahnen&lt;/h4&gt;
&lt;p&gt;I was really sad for him because he had a car accident, I&amp;#8217;m really sorry for
you&amp;nbsp;:(&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="and-for-the-next-edition"&gt;
&lt;h3&gt;And for the next edition&amp;nbsp;?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;A larger room&amp;nbsp;;-)&lt;/li&gt;
&lt;li&gt;A stand for the &lt;a class="reference external" href="http://python.org"&gt;Python Language&lt;/a&gt; and the &lt;a class="reference external" href="http://www.python.org/psf/"&gt;&lt;span class="caps"&gt;PSF&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A lot of goodies (t-shirts, mug, flyers, stickers, cuddly toy,&amp;nbsp;&amp;#8230;)&lt;/li&gt;
&lt;li&gt;A dinner with Python&amp;nbsp;Community.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="fosdem" /></entry><entry><title>Download Ubuntu and create USB stick with your Mac</title><link href="http://wirtel.be/posts/en/2013/02/13/download_ubuntu_and_create_usb_stick_apple/" rel="alternate" /><updated>2013-02-13T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-02-13:posts/en/2013/02/13/download_ubuntu_and_create_usb_stick_apple/</id><summary type="html">&lt;div class="section" id="download-ubuntu-and-create-usb-stick-with-your-mac"&gt;
&lt;h2&gt;Download Ubuntu and create &lt;span class="caps"&gt;USB&lt;/span&gt; stick with your&amp;nbsp;Mac&lt;/h2&gt;
&lt;p&gt;Today I have to re-install my laptop because there is a bug in the grub&amp;nbsp;boot-loader.&lt;/p&gt;
&lt;p&gt;I tried the grub-rescue command and this one was really useful to list the file
systems,&amp;nbsp;etc&amp;#8230;&lt;/p&gt;
&lt;p&gt;But I didn&amp;#8217;t have time to find the documentation on internet, so, first
solution, re-install&amp;nbsp;Ubuntu.&lt;/p&gt;
&lt;p&gt;Here is the original link for this documentation: &lt;a class="reference external" href="http://www.ubuntu.com/download/help/create-a-usb-stick-on-mac-osx"&gt;http://www.ubuntu.com/download/help/create-a-usb-stick-on-mac-osx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In a&amp;nbsp;terminal&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Download the Ubuntu&amp;nbsp;&lt;span class="caps"&gt;ISO&lt;/span&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
wget ftp://ftp.belnet.be/pub/ubuntu.com/releases/12.10/ubuntu-12.10-desktop-amd64.iso
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Convert the iso file to img using the convert option of&amp;nbsp;hdiutil:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
hdiutil convert -format UDRW -o ~/path/to/target.img ~/path/to/ubuntu.iso
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Run diskutil list to get the current list of&amp;nbsp;devices:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
diskutil list
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Insert your flash media and run diskutil list agin and determine the device
node assigned to your flash media (e.g.&amp;nbsp;/dev/disk2).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Unmount the disk (in my case, the flash media was mapped on&amp;nbsp;/dev/disk2)&lt;/p&gt;
&lt;pre class="literal-block"&gt;
diskutil unmountDisk /dev/disk2
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Copy the .img file to the flash&amp;nbsp;media:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
sudo dd if=/path/to/target.img of=/dev/rdisk2 bs=1m
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Eject the flash&amp;nbsp;media:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
diskutil eject /dev/disk2
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Restart and boot with your &lt;span class="caps"&gt;USB&lt;/span&gt;&amp;nbsp;stick.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Of course, these instructions will work fine with an other&amp;nbsp;distribibution.&lt;/p&gt;
&lt;/div&gt;
</summary><category term="tips" /><category term="osx" /><category term="ubuntu" /><category term="usb" /></entry><entry><title>Test your SMTP connection within your projects</title><link href="http://wirtel.be/posts/en/2013/01/21/dsmtpd-0.2/" rel="alternate" /><updated>2013-01-21T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-01-21:posts/en/2013/01/21/dsmtpd-0.2/</id><summary type="html">&lt;div class="section" id="dsmtpd-a-smtp-server-for-debugging"&gt;
&lt;h2&gt;dsmtpd - a &lt;span class="caps"&gt;SMTP&lt;/span&gt; server for&amp;nbsp;debugging&lt;/h2&gt;
&lt;p&gt;Sometimes I have to use a smtp server to check my outgoing emails but I don&amp;#8217;t
want to pollute the internet with some useless&amp;nbsp;emails.&lt;/p&gt;
&lt;p&gt;So in this case, I just developped this small tools for me but you will may be
interested by this project. I called dsmtpd for debugger smtp server (the last
&amp;#8216;d&amp;#8217; comes from the smtpd python&amp;nbsp;lib)&lt;/p&gt;
&lt;div class="section" id="installation"&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;This package is on pypi, so you can use pip to install&amp;nbsp;it:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
pip install dsmtpd
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="use-it"&gt;
&lt;h3&gt;Use&amp;nbsp;it&lt;/h3&gt;
&lt;p&gt;To use it, it&amp;#8217;s very&amp;nbsp;simple:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dsmtpd
&lt;/pre&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;2013-01-13 14:00:07,346 INFO: Starting SMTP server at 127.0.0.1:1025
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By default the server will run on the port 1025 and on the loopback interface.
It&amp;#8217;s pretty&amp;nbsp;easy.&lt;/p&gt;
&lt;p&gt;Indeed, there is a small&amp;nbsp;help:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dsmtpd --help
&lt;/pre&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;dsmtpd: A small SMTP server for the smart developer

Usage:
    dsmtpd [-i &amp;lt;iface&amp;gt;] [-p &amp;lt;port&amp;gt;] [-d &amp;lt;directory&amp;gt;]

Options:
    -p &amp;lt;port&amp;gt;      Specify the port for the SMTP server [default: 1025]
    -i &amp;lt;iface&amp;gt;     Specify the interface [default: 127.0.0.1]
    -d &amp;lt;directory&amp;gt; Specify the directory to save the incoming emails
    -h --help
    --version
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="section" id="change-the-port"&gt;
&lt;h4&gt;Change the&amp;nbsp;port&lt;/h4&gt;
&lt;p&gt;If you want to change the default port, you can do it with the &amp;#8216;-p&amp;#8217;&amp;nbsp;option:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
sudo dsmtpd -p 25
&lt;/pre&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;2013-01-13 14:00:07,346 INFO: Starting SMTP server at 127.0.0.1:25
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="change-the-interface"&gt;
&lt;h4&gt;Change the&amp;nbsp;interface&lt;/h4&gt;
&lt;p&gt;By default, dsmtpd listens to the loopback but you can change that with the &amp;#8216;-i&amp;#8217;&amp;nbsp;option:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dsmtpd -i YOUR_IP
&lt;/pre&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;2013-01-13 14:00:07,346 INFO: Starting SMTP server at YOUR_IP:1025

2013-01-13 14:00:19,634 INFO: 127.0.0.1:55549: stephane@wirtel.be -&amp;gt; stephane@wirtel.be [test Sun, 13 Jan 2013 14:00:19 +0100]
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="you-can-store-the-incoming-emails"&gt;
&lt;h4&gt;You can store the incoming&amp;nbsp;emails&lt;/h4&gt;
&lt;p&gt;There is a cool feature with dsmtpd, all the emails can be caught by the mail server with the &amp;#8216;-d&amp;#8217;&amp;nbsp;parameter:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
dsmtpd -d store_directory
&lt;/pre&gt;
&lt;p&gt;This store directory is a maildir directory, so you will be able to use the mutt software to see the emails.
It&amp;#8217;s really useful if you want to see all the emails with the description of the&amp;nbsp;headers.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
mutt -f store_directory
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="contributions"&gt;
&lt;h3&gt;Contributions&lt;/h3&gt;
&lt;p&gt;The project is hosted on &lt;a class="reference external" href="http://github.com/matrixise/dsmtpd"&gt;github&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="tools" /></entry><entry><title>I’am really sorry for the declined talks !</title><link href="http://wirtel.be/posts/en/2013/01/16/declined_talks_for_python_fosdem_2013/" rel="alternate" /><updated>2013-01-16T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-01-16:posts/en/2013/01/16/declined_talks_for_python_fosdem_2013/</id><summary type="html">&lt;div class="section" id="dear-samuele-reghenzi"&gt;
&lt;h2&gt;Dear &lt;a class="reference external" href="http://sammyrulez.blogspot.it"&gt;Samuele&amp;nbsp;Reghenzi&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would like to apologize to you and to the others submitters of which the talk
has been&amp;nbsp;declined.&lt;/p&gt;
&lt;p&gt;I agree with you, an email would be welcome&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;I am aware than my organization for this event is not perfect because it&amp;#8217;s my
first event as main organizer. I&amp;#8217;m really sorry for this&amp;nbsp;inconvenience.&lt;/p&gt;
&lt;p&gt;Indeed, I had written an &lt;a class="reference external" href="https://github.com/matrixise/python-fosdem.org/blob/master/pythonfosdem/templates/emails/talk_declined.txt"&gt;email&lt;/a&gt;
in the case of the talk was declined but I just forgot to send it&amp;nbsp;:(&lt;/p&gt;
&lt;p&gt;Between the development of the website, the organization of this event, my
family, my job and many other things, I have just forgot to send you this&amp;nbsp;email.&lt;/p&gt;
&lt;p&gt;I am really really&amp;nbsp;sorry.&lt;/p&gt;
&lt;p&gt;Please, Could you accept my apologize&amp;nbsp;?&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;: Moreover, I would like to tell you thanks. I learned one thing today because
of you, I need to improve my organization for the next edition to avoid this
kind of&amp;nbsp;inconvenience.&lt;/p&gt;
&lt;p&gt;Thank you so&amp;nbsp;much,&lt;/p&gt;
&lt;p&gt;Best&amp;nbsp;regards,&lt;/p&gt;
&lt;p&gt;Stéphane Wirtel&amp;nbsp;(&amp;#64;matrixise)&lt;/p&gt;
&lt;/div&gt;
</summary><category term="fosdem" /></entry><entry><title>Astuce Windows Iterator</title><link href="http://wirtel.be/posts/fr/2013/01/14/python-window-iterator/" rel="alternate" /><updated>2013-01-14T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-01-14:posts/fr/2013/01/14/python-window-iterator/</id><summary type="html">&lt;p&gt;Voici le lien original: &lt;a class="reference external" href="http://sametmax.com/implementer-une-fenetre-glissante-en-python-avec-un-deque/"&gt;http://sametmax.com/implementer-une-fenetre-glissante-en-python-avec-un-deque/&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="window-iterator"&gt;
&lt;h2&gt;Window&amp;nbsp;Iterator&lt;/h2&gt;
&lt;p&gt;Une astuce que j&amp;#8217;ai pû voir sur le site de &lt;a class="reference external" href="http://sametmax.com"&gt;sam&amp;amp;max&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;islice&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;

&lt;span class="n"&gt;DEFAULT_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;window&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_SIZE&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;iterable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;islice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;iterm&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;d&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;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;))):&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="tips" /></entry><entry><title>New Year’s Python Meme 2012</title><link href="http://wirtel.be/posts/en/2013/01/09/new-year-python-meme-2012/" rel="alternate" /><updated>2013-01-09T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2013-01-09:posts/en/2013/01/09/new-year-python-meme-2012/</id><summary type="html">&lt;div class="section" id="new-years-python-meme-2012"&gt;
&lt;h2&gt;New Years&amp;#8217; Python Meme&amp;nbsp;2012&lt;/h2&gt;
&lt;div class="section" id="whats-the-coolest-python-application-framework-or-libraries-you-have-discovered-in-2012"&gt;
&lt;h3&gt;1. What’s the coolest Python application, framework or libraries you have discovered in 2012&amp;nbsp;?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;VirtualEnv (virtualenvwrapper), this tool is really awesome, you can create a
new environment for your test and your development. really useful if you want
to contribute to a python project. just python setup develop and let&amp;#8217;s&amp;nbsp;go.&lt;/li&gt;
&lt;li&gt;Requests (by &lt;a class="reference external" href="http://kennethreitz.com"&gt;Kenneth Reitz&lt;/a&gt;) is a real advantage when you develop a http
client because urllib is really&amp;nbsp;bullshit.&lt;/li&gt;
&lt;li&gt;Python-&lt;span class="caps"&gt;RQ&lt;/span&gt; (by &lt;a class="reference external" href="http://nvie.com"&gt;Vincent Driessen&lt;/a&gt;), we can create a PubSub with Redis and it&amp;#8217;s&amp;nbsp;easy.&lt;/li&gt;
&lt;li&gt;Gunicorn (by &lt;a class="reference external" href="http://twitter.com/benoitc"&gt;Benoit Chesneau&lt;/a&gt;), a very good &lt;span class="caps"&gt;WSGI&lt;/span&gt; server, I use it for my own
project, this wsgi server can be included in your own project via the python&amp;nbsp;api.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to monitor your processes you can use these&amp;nbsp;tools.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Circus (by &lt;a class="reference external" href="http://ziade.org"&gt;Tarek Ziade&lt;/a&gt; and the &lt;a class="reference external" href="http://mozilla.org"&gt;Mozilla Foundation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Gaffer (by &lt;a class="reference external" href="http://twitter.com/benoitc"&gt;Benoit Chesneau&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="what-new-programming-technique-did-you-learn-in-2012"&gt;
&lt;h3&gt;2. What new programming technique did you learn in 2012&amp;nbsp;?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;I learned the asynchronous programming with gevent and python-rq, these
libraries are really&amp;nbsp;awesome.&lt;/li&gt;
&lt;li&gt;before december 2012, I didn&amp;#8217;t use Github excepted to fetch the sources of
several&amp;nbsp;projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="which-open-source-project-did-you-contribute-to-the-most-in-2012-what-did-you-do"&gt;
&lt;h3&gt;3. Which open source project did you contribute to the most in 2012 ? What did you do&amp;nbsp;?&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="http://openerp.com"&gt;OpenERP&lt;/a&gt;  I am a core dev for 5 years.  Python via &lt;a class="reference external" href="http://python-fosdem.org"&gt;PythonFOSDEM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I organize with some friends a python devroom at &lt;a class="reference external" href="http://fosdem.org/2013"&gt;&lt;span class="caps"&gt;FOSDEM2013&lt;/span&gt;&lt;/a&gt;. It&amp;#8217;s really
great for the Python community, we want to improve the visibility of&amp;nbsp;Python.&lt;/p&gt;
&lt;p&gt;If you want to contribute, the repository is on &lt;a class="reference external" href="http://github.com/matrixise/python-fosdem.org"&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="which-python-blog-or-website-did-you-read-the-most-in-2012"&gt;
&lt;h3&gt;4. Which Python blog or website did you read the most in 2012&amp;nbsp;?&lt;/h3&gt;
&lt;p&gt;The python section of &lt;a class="reference external" href="http://reddit.com"&gt;Reddit&lt;/a&gt; and &lt;a class="reference external" href="http://news.ycombinator.com"&gt;HackerNews&lt;/a&gt; and sometimes you can find a
lot of great articles on &lt;a class="reference external" href="http://news.humancoders.com/"&gt;HumanCoders&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="what-are-the-three-top-things-you-want-to-learn-in-2013"&gt;
&lt;h3&gt;5. What are the three top things you want to learn in 2013&amp;nbsp;?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://github.com/matrixise/gateway"&gt;Gateway&lt;/a&gt; , based on python-rq, this library is a tool to exchange the data
from one source to one destination via the concept of&amp;nbsp;Workers.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://github.com/matrixise/printus"&gt;PrintUs&lt;/a&gt; , this is a prototype, but this is a printing server based on&amp;nbsp;pyzmq.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://llvm.org"&gt;&lt;span class="caps"&gt;LLVM&lt;/span&gt;&lt;/a&gt; I implemented a small interpreter for a minimalist lisp language and I
would like to compile it with&amp;nbsp;&lt;span class="caps"&gt;LLVM&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;The foundation of the python network&amp;nbsp;programming.&lt;/li&gt;
&lt;li&gt;Erlang&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;Scala&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="what-is-the-top-software-application-or-library-you-wish-someone-would-write-in-2013"&gt;
&lt;h3&gt;6. What is the top software, application or library you wish someone would write in 2013&amp;nbsp;?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;A &lt;span class="caps"&gt;CMS&lt;/span&gt; based on Python and&amp;nbsp;Flask&lt;/li&gt;
&lt;li&gt;a wiki based on git and python (flask) and with the reStructuredText&amp;nbsp;support&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="want-to-do-your-own-list-here-s-how"&gt;
&lt;h3&gt;Want to do your own list? Here&amp;#8217;s&amp;nbsp;how:&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;copy-paste the questions and answer to them in your&amp;nbsp;blog&lt;/li&gt;
&lt;li&gt;tweet it with the &lt;a class="reference external" href="https://twitter.com/search/realtime?q=%232012pythonmeme"&gt;#2012pythonmeme&lt;/a&gt;&amp;nbsp;hashtag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /></entry><entry><title>Appel officiel pour les présentations Python pour le FOSDEM 2013</title><link href="http://wirtel.be/posts/fr/2012/11/20/appel-officiel-pour-les-presentations-python-pour-le-fosdem-2013/" rel="alternate" /><updated>2012-11-20T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-11-20:posts/fr/2012/11/20/appel-officiel-pour-les-presentations-python-pour-le-fosdem-2013/</id><summary type="html">&lt;p&gt;Cette année, Python sera représenté par sa communauté. Si vous désirez
discuter avec des utilisateurs/développeurs Python, c’est là qu’il
faudra être en février&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Comme chaque année, le &lt;a class="reference external" href="http://fosdem.org/2013/"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; prendra place
durant le &lt;strong&gt;premier week-end de février&lt;/strong&gt; à &lt;strong&gt;Bruxelles&lt;/strong&gt;&amp;nbsp;(Belgique).&lt;/p&gt;
&lt;p&gt;Nous disposerons d’une salle de &lt;strong&gt;80 sièges&lt;/strong&gt; dans le bâtiment K. Cette
salle sera ouverte tout le &lt;strong&gt;dimanche 3 février&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Si vous désirez obtenir une session dans la salle Python, s’il vous
plaît, allez sur le site du &lt;a class="reference external" href="http://python-fosdem.org"&gt;python-fosdem&lt;/a&gt;
pour remplir un&amp;nbsp;formulaire&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’appel est ouvert jusqu’au 21 décembre 2012&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cette année, les propositions seront revues par un&amp;nbsp;comité:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/tarek_ziade"&gt;Tarek Ziade&lt;/a&gt;&amp;nbsp;(Mozilla)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/GMLudo"&gt;Ludovic Gasc&lt;/a&gt;&amp;nbsp;(Eyepea)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/KangOl"&gt;Christophe Simonis&lt;/a&gt;&amp;nbsp;(OpenERP)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/matrixise"&gt;Stephane Wirtel&lt;/a&gt;&amp;nbsp;(OpenERP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Merci de soumettre vos présentations et a bientot à Bruxelles pour
parler Python et/ou boire une bonne bière&amp;nbsp;Belge.&lt;/p&gt;
&lt;p&gt;Bien à&amp;nbsp;vous,&lt;/p&gt;
&lt;p&gt;Stéphane Wirtel&amp;nbsp;(&amp;#64;matrixise)&lt;/p&gt;
</summary><category term="fosdem" /><category term="python" /><category term="devroom" /></entry><entry><title>Call Of Papers FOSDEM 2013</title><link href="http://wirtel.be/posts/en/2012/11/20/call-of-papers-fosdem-2013/" rel="alternate" /><updated>2012-11-20T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-11-20:posts/en/2012/11/20/call-of-papers-fosdem-2013/</id><summary type="html">&lt;p&gt;This year, Python will be represented by its Community. If you want to discuss
with a lot of Python Users, it’s the place to be in February&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Like every year, &lt;a class="reference external" href="http://fosdem.org/2013/"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; will take place the
&lt;strong&gt;first week-end of February&lt;/strong&gt; in &lt;strong&gt;Brussels&lt;/strong&gt;&amp;nbsp;(Belgium).&lt;/p&gt;
&lt;p&gt;We will have a room in the K building (&lt;strong&gt;80 seats&lt;/strong&gt;). This dev room will
be open all day &lt;strong&gt;Sunday, February 3rd&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you want to hold a session in the Python devroom, please go to the
&lt;a class="reference external" href="http://python-fosdem.org"&gt;python-fosdem&lt;/a&gt; web site and fill the&amp;nbsp;survey.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call for Papers is open until December&amp;nbsp;21st&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This year, the submissions will be reviewed by a&amp;nbsp;committee:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/tarek_ziade"&gt;Tarek Ziade&lt;/a&gt;&amp;nbsp;(Mozilla)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/GMLudo"&gt;Ludovic Gasc&lt;/a&gt;&amp;nbsp;(Eyepea)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/KangOl"&gt;Christophe Simonis&lt;/a&gt;&amp;nbsp;(OpenERP)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://twitter.com/matrixise"&gt;Stephane Wirtel&lt;/a&gt;&amp;nbsp;(OpenERP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you for submitting your sessions and see you soon in Brussels to talk
Python and/or have some nice Belgian&amp;nbsp;Beers.&lt;/p&gt;
&lt;p&gt;Best&amp;nbsp;regards,&lt;/p&gt;
&lt;p&gt;Stephane Wirtel&amp;nbsp;(&amp;#64;matrixise)&lt;/p&gt;
</summary><category term="fosdem" /><category term="python" /><category term="devroom" /></entry><entry><title>Python @ FOSDEM 2013</title><link href="http://wirtel.be/posts/en/2012/10/22/python-at-fosdem-2013/" rel="alternate" /><updated>2012-10-22T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-10-22:posts/en/2012/10/22/python-at-fosdem-2013/</id><summary type="html">&lt;div class="section" id="python-fosdem-2013"&gt;
&lt;h2&gt;Python &amp;#64; &lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&amp;nbsp;2013&lt;/h2&gt;
&lt;p&gt;Dear Python&amp;nbsp;Community,&lt;/p&gt;
&lt;p&gt;I am really glad to announce to you that we will have a python devroom at
&lt;a class="reference external" href="http://fosdem.org/2013"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt; 2013&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; is a free event offering open source communities
a place to meet, share ideas and collaborate. It is renowned for being highly
developer-oriented and brings together 5000+ geeks from all over the&amp;nbsp;world.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Stephane&lt;/p&gt;
&lt;/div&gt;
</summary><category term="fosdem" /><category term="python" /></entry><entry><title>Python au FOSDEM 2013</title><link href="http://wirtel.be/posts/fr/2012/10/22/python-at-fosdem-2013/" rel="alternate" /><updated>2012-10-22T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-10-22:posts/fr/2012/10/22/python-at-fosdem-2013/</id><summary type="html">&lt;div class="section" id="python-au-fosdem-2013"&gt;
&lt;h2&gt;Python au &lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&amp;nbsp;2013&lt;/h2&gt;
&lt;p&gt;Chère Communauté&amp;nbsp;Python,&lt;/p&gt;
&lt;p&gt;Je suis réellement content de vous annoncer que nous aurons une salle pour la
communauté Python au &lt;a class="reference external" href="http://fosdem.org/2013"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt; 2013&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le &lt;a class="reference external" href="http://fosdem.org"&gt;&lt;span class="caps"&gt;FOSDEM&lt;/span&gt;&lt;/a&gt; est un événement gratuit offrant aux
communautés Open Source un lieu de rencontre, de partage d&amp;#8217;idées et de&amp;nbsp;collaboration.&lt;/p&gt;
&lt;p&gt;Bien à&amp;nbsp;vous,&lt;/p&gt;
&lt;p&gt;Stéphane&lt;/p&gt;
&lt;/div&gt;
</summary><category term="fosdem" /><category term="python" /></entry><entry><title>Page de Donation de l’AFPY</title><link href="http://wirtel.be/posts/fr/2012/09/24/add-the-afpy-donation-page/" rel="alternate" /><updated>2012-09-24T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-09-24:posts/fr/2012/09/24/add-the-afpy-donation-page/</id><summary type="html">&lt;div class="section" id="ajouter-un-lien-vers-la-page-de-donation-de-l-afpy"&gt;
&lt;h2&gt;Ajouter un lien vers la page de donation de&amp;nbsp;l&amp;#8217;&lt;span class="caps"&gt;AFPY&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Lors de la dernière Assemblée Générale de l&amp;#8217;Association Francophone de Python
(&lt;a class="reference external" href="http://www.afpy.org"&gt;&lt;span class="caps"&gt;AFPY&lt;/span&gt;&lt;/a&gt;) qui s&amp;#8217;est déroulée le 16 septembre au &lt;a class="reference external" href="http://www.pycon.fr/2012/"&gt;PyConFR&lt;/a&gt; je me suis demandé
de quelle manière je pouvais aider cette&amp;nbsp;association.&lt;/p&gt;
&lt;p&gt;Une des réponses à ma question est la suivante, propager la page de&amp;nbsp;donation.&lt;/p&gt;
&lt;p&gt;Voilà chose dite, chose&amp;nbsp;faite.&lt;/p&gt;
&lt;p&gt;Je vous invite toutes et tous à présenter la page de donation sur votre&amp;nbsp;blog.&lt;/p&gt;
&lt;p&gt;Merci,&lt;/p&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="afpy" /></entry><entry><title>MailCatcher, L’outil pour le développeur</title><link href="http://wirtel.be/posts/fr/2012/02/21/mailcatcher-loutil-pour-le-developpeur/" rel="alternate" /><updated>2012-02-21T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-02-21:posts/fr/2012/02/21/mailcatcher-loutil-pour-le-developpeur/</id><summary type="html">&lt;div class="section" id="mailcatcher"&gt;
&lt;h2&gt;MailCatcher&lt;/h2&gt;
&lt;p&gt;J’avais envie de vous présenter &lt;a class="reference external" href="http://mailcatcher.me"&gt;MailCatcher&lt;/a&gt; qui est un petit outil très
utile que tout développeur doit au moins&amp;nbsp;connaitre.&lt;/p&gt;
&lt;p&gt;L’idée de &lt;a class="reference external" href="http://mailcatcher.me"&gt;MailCatcher&lt;/a&gt;, est de proposer un server &lt;span class="caps"&gt;SMTP&lt;/span&gt; tournant sur le port
1025 et permettant ainsi de récupérer tous les emails qui auront été émis par
votre&amp;nbsp;application.&lt;/p&gt;
&lt;p&gt;Cet outil est très important si vous désirez vérifier
tous les emails sortant de votre système sans devoir modifier une
configuration ou commencer à bidouiller des&amp;nbsp;emails.&lt;/p&gt;
&lt;div class="section" id="installation"&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;MailCatcher est un gem Ruby, il est donc installable sur les systèmes possédant&amp;nbsp;Ruby&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gem install mailcatcher
&lt;/pre&gt;
&lt;p&gt;Afin de l’exécuter, veuillez simplement lancer l’application via la commande&amp;nbsp;suivante&lt;/p&gt;
&lt;pre class="literal-block"&gt;
mailcatcher
&lt;/pre&gt;
&lt;p&gt;Attention, cette commande lancera MailCatcher en mode daemon par défaut, si
vous désirez l’utiliser sans passer par un mode daemon, ajouter le paramètre -f
sur la ligne de&amp;nbsp;commande.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
mailcatcher -f
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="utilisation"&gt;
&lt;h3&gt;Utilisation&lt;/h3&gt;
&lt;p&gt;J’utilise l’outil swaks que vous pouvez installer via le package manager
de votre distribution. Dans mon cas, il s’agit de fedora, mais vous
pouvez l’avoir dans Debian ou&amp;nbsp;Ubuntu.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
yum install swaks
&lt;/pre&gt;
&lt;pre class="literal-block"&gt;
apt-get install swaks
&lt;/pre&gt;
&lt;p&gt;Une fois installé, vous pouvez utiliser l’outil comme indiqué dans
l’exemple&amp;nbsp;ci-dessous&lt;/p&gt;
&lt;pre class="literal-block"&gt;
swaks --from stephane&amp;#64;wirtel.be --to stephane&amp;#64;wirtel.be --server localhost --port 1025
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="verification"&gt;
&lt;h3&gt;Vérification&lt;/h3&gt;
&lt;div class="figure align-center"&gt;
&lt;img alt="" src="http://i.imgur.com/kg2QC.png" style="width: 800px;" /&gt;
&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le constater, mon mail est bien arrivé dans
MailCatcher, et il m’est donc possible de le regarder à mon&amp;nbsp;aise.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="cas-dutilisation"&gt;
&lt;h3&gt;Cas&amp;nbsp;d’utilisation&lt;/h3&gt;
&lt;div class="section" id="utilisation-avec-devise-et-rails"&gt;
&lt;h4&gt;Utilisation avec Devise et&amp;nbsp;Rails&lt;/h4&gt;
&lt;p&gt;Devise donne la possibilité d’envoyer des emails lors de l’inscription
d’un utilisateur. Avec cet outil, il vous est donc possible de regarder
le contenu sans devoir passer votre temps à inspecter les logs de&amp;nbsp;Rails.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="references"&gt;
&lt;h3&gt;Références&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.jetmore.org/john/code/swaks/"&gt;swaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://mailcatcher.me"&gt;MailCatcher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="smtp" /><category term="tools" /></entry><entry><title>PostgreSQL - Foreign Data Wrapper</title><link href="http://wirtel.be/posts/en/2012/02/04/postgresql-foreign-data-wrapper-openerp/" rel="alternate" /><updated>2012-02-04T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2012-02-04:posts/en/2012/02/04/postgresql-foreign-data-wrapper-openerp/</id><summary type="html">&lt;div class="section" id="postgresql-foreign-data-wrapper-for-openerp"&gt;
&lt;h2&gt;PostgreSQL - Foreign Data Wrapper for&amp;nbsp;OpenERP&lt;/h2&gt;
&lt;p&gt;Here is a simple example, but via this connector we can connect to #OpenERP from&amp;nbsp;PostgreSQL&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="c"&gt;# -*- encoding: utf-8 -*-&lt;/span&gt;
&lt;span class="c"&gt;# copyright: 2012 - Stephane Wirtel &amp;lt;stw@openerp.com&amp;gt;&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;multicorn&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ForeignDataWrapper&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;.utils&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;log_to_postgres&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;rpc&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;XmlRPCConnector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Object&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OpenERPForeignDataWrapper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ForeignDataWrapper&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="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fdw_columns&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OpenERPForeignDataWrapper&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fdw_columns&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;connector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;XmlRPCConnector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;hostname&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                                                 &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;port&amp;#39;&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;cnx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Connection&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;connector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                              &lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                              &lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                              &lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;password&amp;#39;&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;object_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fdw_options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;object&amp;#39;&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;execute&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="n"&gt;quals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;log_to_postgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quals&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;log_to_postgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

        &lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Object&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;cnx&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;object_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;select&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="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="section" id="multicorn"&gt;
&lt;h3&gt;multicorn&lt;/h3&gt;
&lt;p&gt;I just created a small shell script to drop and create the database, and create the&amp;nbsp;server.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;

&lt;span class="nv"&gt;&lt;span class="caps"&gt;PGSQL&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/psql

&lt;span class="nv"&gt;&lt;span class="caps"&gt;DATABASE&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;openerp_multicorn

&lt;span class="nv"&gt;$&lt;span class="caps"&gt;PGSQL&lt;/span&gt;&lt;/span&gt; -d postgres -c &lt;span class="s2"&gt;&amp;quot;&lt;span class="caps"&gt;DROP&lt;/span&gt; &lt;span class="caps"&gt;DATABASE&lt;/span&gt; &lt;span class="caps"&gt;IF&lt;/span&gt; &lt;span class="caps"&gt;EXISTS&lt;/span&gt; ${&lt;span class="caps"&gt;DATABASE&lt;/span&gt;}&amp;quot;&lt;/span&gt;
createdb &lt;span class="nv"&gt;$&lt;span class="caps"&gt;DATABASE&lt;/span&gt;&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;span class="caps"&gt;PGSQL&lt;/span&gt;&lt;/span&gt; -d &lt;span class="nv"&gt;$&lt;span class="caps"&gt;DATABASE&lt;/span&gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;&amp;lt;-&lt;span class="caps"&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class="s"&gt;&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;EXTENSION&lt;/span&gt; multicorn;&lt;/span&gt;

&lt;span class="s"&gt;&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;SERVER&lt;/span&gt; multicorn_openerp&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;FOREIGN&lt;/span&gt; &lt;span class="caps"&gt;DATA&lt;/span&gt; &lt;span class="caps"&gt;WRAPPER&lt;/span&gt; multicorn&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;OPTIONS&lt;/span&gt; (wrapper &amp;#39;multicorn.openerpfdw.OpenERPForeignDataWrapper&amp;#39;);&lt;/span&gt;

&lt;span class="s"&gt;&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;FOREIGN&lt;/span&gt; &lt;span class="caps"&gt;TABLE&lt;/span&gt; external_oe_users (&lt;/span&gt;
&lt;span class="s"&gt;    login character varying,&lt;/span&gt;
&lt;span class="s"&gt;    name character varying)&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;SERVER&lt;/span&gt; multicorn_openerp &lt;span class="caps"&gt;OPTIONS&lt;/span&gt; (&lt;/span&gt;
&lt;span class="s"&gt;        hostname &amp;#39;localhost&amp;#39;,&lt;/span&gt;
&lt;span class="s"&gt;        port &amp;#39;8069&amp;#39;,&lt;/span&gt;
&lt;span class="s"&gt;        database &amp;#39;openerp&amp;#39;,&lt;/span&gt;
&lt;span class="s"&gt;        username &amp;#39;admin&amp;#39;,&lt;/span&gt;
&lt;span class="s"&gt;        password &amp;#39;admin&amp;#39;,&lt;/span&gt;
&lt;span class="s"&gt;        object &amp;#39;res.users&amp;#39;&lt;/span&gt;
&lt;span class="s"&gt;    );&lt;/span&gt;

&lt;span class="s"&gt;&lt;span class="caps"&gt;SELECT&lt;/span&gt; login, name &lt;span class="caps"&gt;FROM&lt;/span&gt; external_oe_users where login=&amp;#39;admin&amp;#39;;&lt;/span&gt;

&lt;span class="s"&gt;&lt;span class="caps"&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;stephane@atlantis:~&lt;span class="nv"&gt;$ &lt;/span&gt;./multicorn.sh
&lt;span class="caps"&gt;DROP&lt;/span&gt; &lt;span class="caps"&gt;DATABASE&lt;/span&gt;
&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;EXTENSION&lt;/span&gt;
&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;SERVER&lt;/span&gt;
&lt;span class="caps"&gt;CREATE&lt;/span&gt; &lt;span class="caps"&gt;FOREIGN&lt;/span&gt; &lt;span class="caps"&gt;TABLE&lt;/span&gt;
&lt;span class="caps"&gt;NOTICE&lt;/span&gt;:  &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; admin&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="caps"&gt;NOTICE&lt;/span&gt;:  &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
 login | name
-------+-------
 admin | Admin
&lt;span class="o"&gt;(&lt;/span&gt;1 row&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="openerp" /><category term="postgresql" /><category term="fdw" /></entry><entry><title>Installation of OpenERP 5.0 on Debian 6.0</title><link href="http://wirtel.be/posts/en/2011/11/02/install_openerp_v5_on_debian_v6/" rel="alternate" /><updated>2011-11-02T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-11-02:posts/en/2011/11/02/install_openerp_v5_on_debian_v6/</id><summary type="html">&lt;div class="section" id="how-to-install-openerp-5-0-on-debian-6-0"&gt;
&lt;h2&gt;How to install OpenERP 5.0 on Debian&amp;nbsp;6.0&lt;/h2&gt;
&lt;div class="section" id="openerp"&gt;
&lt;h3&gt;OpenERP&lt;/h3&gt;
&lt;p&gt;OpenERP is an open source comprehensive suite of business applications
including Sales, &lt;span class="caps"&gt;CRM&lt;/span&gt;, Project management, Warehouse management, Manufacturing,
Accounting and Human Resources. OpenERP has separate client and server
components. &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; interfaces are&amp;nbsp;available.&lt;/p&gt;
&lt;p&gt;In this study case, we will use the &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; protocol, because it is based on
the &lt;span class="caps"&gt;HTTP&lt;/span&gt; protocol containing the Host.  And if you want to use this
configuration for the NetRPC protocol, you will have a problem because this
protocol does not contain the&amp;nbsp;Host.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.openerp.com"&gt;OpenERP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section" id="install-the-dependencies"&gt;
&lt;h4&gt;Install the&amp;nbsp;dependencies&lt;/h4&gt;
&lt;p&gt;With your root access, we will install the dependencies for OpenERP&amp;nbsp;v6.0.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~# useradd -m -s /bin/bash openerp
~# apt-get install postgresql
~# su postgres -c &amp;quot;createuser -s openerp&amp;quot;
~# apt-get install python-psycopg2 python-reportlab python-voject
~# apt-get install python-lxml python-pychart python-tz
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="fetch-and-execute-openerp"&gt;
&lt;h4&gt;Fetch and Execute&amp;nbsp;OpenERP&lt;/h4&gt;
&lt;p&gt;Using the openerp&amp;nbsp;user:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~$ mkdir openerp
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~$ wget http://www.openerp.com/download/stable/source/openerp-server-5.0.16.tar.gz
~$ tar xfz openerp-server-5.0.16
~$ cd openerp-server-5.0.16/server/bin
~$ ./openerp-server.py --log-level=debug
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="connect-to-the-server"&gt;
&lt;h4&gt;Connect to the&amp;nbsp;server&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;You can use the &lt;span class="caps"&gt;GTK&lt;/span&gt; client and you set the right information in the dialog box for the&amp;nbsp;connection&lt;/li&gt;
&lt;li&gt;You can use this python&amp;nbsp;code&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;xmlrpclib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8069&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;http://&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;/xmlrpc/db&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&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;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_version&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;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Version: &lt;/span&gt;&lt;span class="si"&gt;%r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;localhost&amp;#39;&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="debian" /><category term="openerp" /></entry><entry><title>Installation of OpenERP 6.0 on Debian 6.0</title><link href="http://wirtel.be/posts/en/2011/11/02/install_openerp_v6_on_debian_v6/" rel="alternate" /><updated>2011-11-02T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-11-02:posts/en/2011/11/02/install_openerp_v6_on_debian_v6/</id><summary type="html">&lt;div class="section" id="how-to-install-openerp-6-0-on-debian-6-0"&gt;
&lt;h2&gt;How to install OpenERP 6.0 on Debian&amp;nbsp;6.0&lt;/h2&gt;
&lt;div class="section" id="openerp"&gt;
&lt;h3&gt;OpenERP&lt;/h3&gt;
&lt;p&gt;OpenERP is an open source comprehensive suite of business applications
including Sales, &lt;span class="caps"&gt;CRM&lt;/span&gt;, Project management, Warehouse management, Manufacturing,
Accounting and Human Resources. OpenERP has separate client and server
components. &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; interfaces are&amp;nbsp;available.&lt;/p&gt;
&lt;p&gt;In this study case, we will use the &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; protocol, because it is based on
the &lt;span class="caps"&gt;HTTP&lt;/span&gt; protocol containing the Host.  And if you want to use this
configuration for the NetRPC protocol, you will have a problem because this
protocol does not contain the&amp;nbsp;Host.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.openerp.com"&gt;OpenERP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section" id="install-the-dependencies"&gt;
&lt;h4&gt;Install the&amp;nbsp;dependencies&lt;/h4&gt;
&lt;p&gt;With your root access, we will install the dependencies for OpenERP&amp;nbsp;v6.0.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~# useradd -m -s /bin/bash openerp
~# apt-get install postgresql
~# su postgres -c &amp;quot;createuser -s openerp&amp;quot;
~# apt-get install python-psycopg2 python-reportlab python-voject
~# apt-get install python-lxml python-pychart python-tz
~# apt-get install python-yaml python-mako
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="fetch-and-execute-openerp"&gt;
&lt;h4&gt;Fetch and Execute&amp;nbsp;OpenERP&lt;/h4&gt;
&lt;p&gt;Using the openerp&amp;nbsp;user:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~$ mkdir openerp
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;~$ wget http://www.openerp.com/download/stable/source/openerp-server-6.0.3.tar.gz
~$ tar xfz openerp-server-6.0.3
~$ cd openerp-server-6.0.3/server/bin
~$ ./openerp-server.py --log-level=debug
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="connect-to-the-server"&gt;
&lt;h4&gt;Connect to the&amp;nbsp;server&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;You can use the &lt;span class="caps"&gt;GTK&lt;/span&gt; client and you set the right information in the dialog
box for the&amp;nbsp;connection&lt;/li&gt;
&lt;li&gt;You can use this python&amp;nbsp;code&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;xmlrpclib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8069&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;http://&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;/xmlrpc/db&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&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;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_version&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;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Version: &lt;/span&gt;&lt;span class="si"&gt;%r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;localhost&amp;#39;&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="debian" /><category term="openerp" /></entry><entry><title>Nginx and multiple instances of OpenERP</title><link href="http://wirtel.be/posts/en/2011/11/02/nginx-proxy-openerp/" rel="alternate" /><updated>2011-11-02T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-11-02:posts/en/2011/11/02/nginx-proxy-openerp/</id><summary type="html">&lt;div class="section" id="nginx-and-multiple-instances-of-openerp"&gt;
&lt;h2&gt;Nginx and multiple instances of&amp;nbsp;OpenERP&lt;/h2&gt;
&lt;div class="section" id="nginx"&gt;
&lt;h3&gt;nginx&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="http://wiki.nginx.org"&gt;Nginx&lt;/a&gt; is a free, open-source, high-performance &lt;span class="caps"&gt;HTTP&lt;/span&gt;
server and reverse proxy, as well as an &lt;span class="caps"&gt;IMAP&lt;/span&gt;/&lt;span class="caps"&gt;POP3&lt;/span&gt; proxy&amp;nbsp;server.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="openerp"&gt;
&lt;h3&gt;OpenERP&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="http://www.openerp.com"&gt;OpenERP&lt;/a&gt; is an open source comprehensive suite of
business applications including Sales, &lt;span class="caps"&gt;CRM&lt;/span&gt;, Project management, Warehouse
management, Manufacturing, Accounting and Human Resources. OpenERP has separate
client and server components. &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; interfaces are&amp;nbsp;available.&lt;/p&gt;
&lt;p&gt;In this study case, we will use the &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; protocol, because it is based on the
&lt;span class="caps"&gt;HTTP&lt;/span&gt; protocol containing the Host.  And if you want to use this configuration
for the NetRPC protocol, you will have a problem because this protocol does not
contain the&amp;nbsp;Host.&lt;/p&gt;
&lt;div class="section" id="install-the-openerp-versions"&gt;
&lt;h4&gt;Install the OpenERP&amp;nbsp;versions&lt;/h4&gt;
&lt;p&gt;For that, I suppose you can install OpenERP v5.0 and v6.0 but it&amp;#8217;s not the case,
you can read my tutorials for the installation of v6.0 or&amp;nbsp;v5.0.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="/2011/11/02/install_openerp_v5_on_debian_v6"&gt;Installation of OpenERP&amp;nbsp;v5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/2011/11/02/install_openerp_v6_on_debian_v6"&gt;Installation of OpenERP&amp;nbsp;v6.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will use the installation paths for the rest of my&amp;nbsp;tutorial&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;#8217;t forget to change the port of your&amp;nbsp;instances.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For&amp;nbsp;v5.0:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
~$ ./openerp-server.py --log-level=debug --no-netrpc --port=9069
&lt;/pre&gt;
&lt;p&gt;For&amp;nbsp;v6.0:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
~$ ./openerp-server.py --log-level=debug --no-netrpc --no-xmlrpcs --xmlrpc-port=10069
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="the-configuration"&gt;
&lt;h4&gt;The&amp;nbsp;configuration&lt;/h4&gt;
&lt;p&gt;In our study case, we know we use the &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; protocol assigned to the port&amp;nbsp;8069.&lt;/p&gt;
&lt;p&gt;We will use the proxy module of nginx for the solution. In my example, I will
use the port&amp;nbsp;9069.&lt;/p&gt;
&lt;p&gt;The first openerp will use the port 9069 and the second will be&amp;nbsp;10069.&lt;/p&gt;
&lt;p&gt;For nginx, it&amp;#8217;s very simple, just define a configuration file for the&amp;nbsp;servers.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;openerp_v5.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;8069&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:9069&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-&lt;span class="caps"&gt;IP&lt;/span&gt;&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;openerp_v6.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;8069&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:10069&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-&lt;span class="caps"&gt;IP&lt;/span&gt;&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Don&amp;#8217;t forget to change your &lt;span class="caps"&gt;DNS&lt;/span&gt; entries to point on the same server, in this case,&amp;nbsp;localhost:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
127.0.2.1   openerp_v5.example.com openerp_v6.example.com
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="check-the-configurations"&gt;
&lt;h3&gt;Check the&amp;nbsp;configurations&lt;/h3&gt;
&lt;p&gt;Here is a small python script to check that the proxy is well&amp;nbsp;configured&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;xmlrpclib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8069&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ServerProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;http://&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s"&gt;/xmlrpc/db&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&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;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_version&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;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Version (openerp_v5.example.com): &lt;/span&gt;&lt;span class="si"&gt;%r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;openerp_v5.example.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Version (openerp_v6.example.com): &lt;/span&gt;&lt;span class="si"&gt;%r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;openerp_v6.example.com&amp;#39;&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="python" /><category term="proxy" /><category term="openerp" /><category term="nginx" /><category term="virtual" /><category term="hosting" /></entry><entry><title>PostgreSQL: Use GNU/Parallel and pg_dump</title><link href="http://wirtel.be/posts/en/2011/07/15/rsync_parallel/" rel="alternate" /><updated>2011-07-15T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-07-15:posts/en/2011/07/15/rsync_parallel/</id><summary type="html">&lt;div class="section" id="how-to-use-gnu-parallel-and-pg-dump"&gt;
&lt;h2&gt;How to use &lt;span class="caps"&gt;GNU&lt;/span&gt;/Parallel and pg_dump&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;I work with the &lt;a class="reference external" href="http://www.postgresql.org"&gt;PostgreSQL database server&lt;/a&gt; and
for the backup process, I use the &lt;a class="reference external" href="http://www.postgresql.org/docs/8.4/static/app-pgdump.html"&gt;pg_dump&lt;/a&gt;&amp;nbsp;utility.&lt;/p&gt;
&lt;p&gt;If you have many databases, you know there is a problem with this tool. In
fact, it&amp;#8217;s a serial process, it saves database after another and if you have a
big one, you risk to wait for longtime. In my situation, this is problematic
and I looked to use an other tool to parallelize the&amp;nbsp;process.&lt;/p&gt;
&lt;p&gt;But I discovered the tool &lt;a class="reference external" href="http://www.gnu.org/s/parallel/"&gt;&lt;span class="caps"&gt;GNU&lt;/span&gt;/Parallel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;GNU&lt;/span&gt;/Parallel is a shell tool for executing jobs in parallel using one or more&amp;nbsp;computers.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.gnu.org/s/parallel/"&gt;Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://ftp.gnu.org/gnu/parallel/parallel-20110722.tar.bz2"&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.gnu.org/s/parallel/man.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section" id="installation"&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;wget http://ftp.gnu.org/gnu/parallel/parallel-20110722.tar.bz2
tar xfj parallel-20110722.tar.bz2
cd parallel-20110722
./configure --prefix=/opt/local
make
make install
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="the-script"&gt;
&lt;h2&gt;The&amp;nbsp;Script&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="c"&gt;# Path to the &lt;span class="caps"&gt;GNU&lt;/span&gt;/Parallel tool&lt;/span&gt;
&lt;span class="nv"&gt;&lt;span class="caps"&gt;PARALLEL&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/local/bin/parallel

&lt;span class="c"&gt;# We select all the databases we want to backup except the &amp;#39;template0&amp;#39;,&lt;/span&gt;
&lt;span class="c"&gt;# &amp;#39;template1&amp;#39; and &amp;#39;postgres&amp;#39; databases&lt;/span&gt;
&lt;span class="nv"&gt;&lt;span class="caps"&gt;INPUTLIST&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;psql -d postgres -A -t &lt;span class="s"&gt;&amp;lt;&amp;lt;&lt;span class="caps"&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;SELECT&lt;/span&gt; datname &lt;span class="caps"&gt;FROM&lt;/span&gt; pg_database&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;WHERE&lt;/span&gt; datname &lt;span class="caps"&gt;NOT&lt;/span&gt; &lt;span class="caps"&gt;IN&lt;/span&gt; (&amp;#39;template0&amp;#39;,&amp;#39;template1&amp;#39;,&amp;#39;postgres&amp;#39;)&lt;/span&gt;
&lt;span class="s"&gt;    &lt;span class="caps"&gt;ORDER&lt;/span&gt; &lt;span class="caps"&gt;BY&lt;/span&gt; datname &lt;span class="caps"&gt;ASC&lt;/span&gt;;&lt;/span&gt;
&lt;span class="s"&gt;&lt;span class="caps"&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;

&lt;span class="c"&gt;# And we call the parallel tool with the right arguments&lt;/span&gt;
&lt;span class="nv"&gt;&lt;span class="caps"&gt;CMD&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pg_dump --no-owner {} | gzip -9 &amp;gt; ${OUTPUT_DIR}/{}.dump.sql.gz&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$&lt;span class="caps"&gt;INPUTLIST&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; | &lt;span class="nv"&gt;$&lt;span class="caps"&gt;PARALLEL&lt;/span&gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$&lt;span class="caps"&gt;CMD&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you have an other solution to this problem, I&amp;#8217;m&amp;nbsp;interrested&lt;/p&gt;
&lt;p&gt;In a future post, I will show you how to use &lt;a class="reference external" href="http://www.gnu.org/s/parallel/"&gt;&lt;span class="caps"&gt;GNU&lt;/span&gt;/Parallel&lt;/a&gt;
and rsnapshot to parallelize the rsync&amp;nbsp;tool.&lt;/p&gt;
&lt;/div&gt;
</summary><category term="parallel" /><category term="pg_dump" /><category term="backup" /><category term="postgresql" /></entry><entry><title>nginx, gunicorn and Flask</title><link href="http://wirtel.be/posts/en/2011/02/24/nginx-gunicorn-flask/" rel="alternate" /><updated>2011-02-24T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-02-24:posts/en/2011/02/24/nginx-gunicorn-flask/</id><summary type="html">&lt;div class="section" id="how-to-install-nginx-gunicorn-and-flask"&gt;
&lt;h2&gt;How to install nginx, gunicorn and&amp;nbsp;Flask&lt;/h2&gt;
&lt;p&gt;I like to work on my personal project &lt;a class="reference external" href="http://www.caviste.be"&gt;Caviste&lt;/a&gt; and for the moment, I wanted
to use nginx, gunicorn with my Flask application.  To explain the architecture
of my installation, nginx is the web server with a cache for the static content
(html, css, javascript and images).  the Flask application will be served by
the gunicorn webserver; When there is a request, the nginx server (front-end)
will forward to the gunicorn server for the dynamic&amp;nbsp;content.&lt;/p&gt;
&lt;div class="section" id="flask"&gt;
&lt;h3&gt;Flask&lt;/h3&gt;
&lt;p&gt;Here is a small project I like to follow, this one has been developped by
&lt;a class="reference external" href="http://lucuum.pocoo.org"&gt;Armin Ronacher&lt;/a&gt;.  The documentation is certainly the best documentation for a
project, pragmatic and concise. The source code is well documented and the
developer is the maintainer of Werkzeug, Pygments and is in the &lt;a class="reference external" href="http://www.pocoo.org"&gt;Pocoo Team&lt;/a&gt;.&lt;/p&gt;
&lt;div class="section" id="installation"&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;pre class="literal-block"&gt;
pip install flask
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="example"&gt;
&lt;h4&gt;Example&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="c"&gt;# -*- encoding: utf-8 -*-&lt;/span&gt;
&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;    deploy.py&lt;/span&gt;
&lt;span class="sd"&gt;    ~~~~~~~~~&lt;/span&gt;

&lt;span class="sd"&gt;    :author: (c) 2011 - Stephane Wirtel &amp;lt;stephane@wirtel.be&amp;gt;&lt;/span&gt;
&lt;span class="sd"&gt;    :license: &lt;span class="caps"&gt;BSD&lt;/span&gt;&lt;/span&gt;
&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;render_template_string&lt;/span&gt;

&lt;span class="c"&gt;# load the middleware from werkzeug&lt;/span&gt;
&lt;span class="c"&gt;# This middleware can be applied to add &lt;span class="caps"&gt;HTTP&lt;/span&gt; proxy support to an application&lt;/span&gt;
&lt;span class="c"&gt;# that was not designed with &lt;span class="caps"&gt;HTTP&lt;/span&gt; proxies in mind.&lt;/span&gt;
&lt;span class="c"&gt;# It sets `REMOTE_ADDR`, `HTTP_POST` from `X-Forwarded` headers.&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;werkzeug.contrib.fixers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ProxyFix&lt;/span&gt;


&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&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="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/&amp;#39;&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;index&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;render_template_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wsgi_app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ProxyFix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wsgi_app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="gunicorn"&gt;
&lt;h3&gt;Gunicorn&lt;/h3&gt;
&lt;p&gt;I discovered gunicorn during the &lt;a class="reference external" href="http://www.pycon.fr"&gt;PyConFR 2010&lt;/a&gt; at Paris, I found this project
very cool, because the community is very active, and &lt;a class="reference external" href="http://twitter.com/benoitc"&gt;Benoit Chesneau&lt;/a&gt; is a
good evangelist of gunicorn.  He wants to create the best &lt;a class="reference external" href="http://www.wsgi.org"&gt;&lt;span class="caps"&gt;WSGI&lt;/span&gt;&lt;/a&gt; server, the
fastest and the simplier to&amp;nbsp;configure.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://gunicorn.org"&gt;gunicorn&lt;/a&gt;, written in Python, it’s a very minimalist web server but its works
is well&amp;nbsp;done.&lt;/p&gt;
&lt;div class="section" id="id1"&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;pre class="literal-block"&gt;
pip install gunicorn
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="configuration"&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;The configuration is easy, you just define a configuration file.
Here is a small example where we specify the number of&amp;nbsp;workers.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;workers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;bind&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;127.0.0.1:18000&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;proc_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;www.example.com&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;pidfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;/tmp/www.example.com.pid&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;pre class="literal-block"&gt;
gunicorn deploy:app
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="nginx"&gt;
&lt;h3&gt;Nginx&lt;/h3&gt;
&lt;div class="section" id="id2"&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;pre class="literal-block"&gt;
apt-get install nginx
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="id3"&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;The configuration of nginx (on Debian Like) is in the
/etc/nginx/sites-enabled&amp;nbsp;directory&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;frontends&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;# We define the binding of the gunicorn web server&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="n"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/localhost-access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/localhost-error.log&lt;/span&gt; &lt;span class="s"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass_header&lt;/span&gt; &lt;span class="s"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forward-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_redirect&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-&lt;span class="caps"&gt;IP&lt;/span&gt;&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Scheme&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;if&lt;/span&gt; &lt;span class="s"&gt;(-f&lt;/span&gt; &lt;span class="nv"&gt;$request_filename&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://frontends&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://nichol.as/benchmark-of-python-web-servers"&gt;Benchmark of Python &lt;span class="caps"&gt;WSGI&lt;/span&gt; Servers (Nicholas&amp;nbsp;Piël)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://flask.pocoo.org/docs/deploying/others/#proxy-setups"&gt;How to deploy&amp;nbsp;Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://gunicorn.org/deploy.html"&gt;Gunicorn&amp;nbsp;Deployment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="nginx" /><category term="gunicorn" /><category term="flask" /><category term="python" /></entry><entry><title>Flask-OpenERP</title><link href="http://wirtel.be/posts/en/2011/02/22/flask-openerp/" rel="alternate" /><updated>2011-02-22T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-02-22:posts/en/2011/02/22/flask-openerp/</id><summary type="html">&lt;div class="section" id="how-to-discuss-with-openerp-from-flask"&gt;
&lt;h2&gt;How to discuss with OpenERP from Flask&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;I started to work on a new extension for the Flask project. This extension will
help the developer to integrate OpenERP in this web&amp;nbsp;app.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;GitHub: &lt;a class="reference external" href="https://github.com/matrixise/flask-openerp"&gt;https://github.com/matrixise/flask-openerp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</summary><category term="openerp" /><category term="flask" /><category term="extensions" /></entry><entry><title>Enfin Papa ;-)</title><link href="http://wirtel.be/posts/fr/2011/01/21/enfin-papa-/" rel="alternate" /><updated>2011-01-21T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2011-01-21:posts/fr/2011/01/21/enfin-papa-/</id><summary type="html">&lt;div class="section" id="margaux-1-0"&gt;
&lt;h2&gt;Margaux&amp;nbsp;1.0&lt;/h2&gt;
&lt;p&gt;Après neuf mois de developpement, de roadmap, de milestones, nous sommes enfin
parvenus à une version 1.0 de Margaux&amp;nbsp;;-)&lt;/p&gt;
&lt;p&gt;Ma compagne et moi-même avons donc le grand plaisir de vous informer que notre
superbe petite fille Margaux est née le 21 janvier 2011 à 3h26, pesant 3,270kg
et mesurant 51&amp;nbsp;cm.&lt;/p&gt;
&lt;p&gt;Regardez par&amp;nbsp;vous-même&lt;/p&gt;
&lt;img alt="/static/images/margaux.png" class="align-center" src="/static/images/margaux.png" style="width: 600px;" /&gt;
&lt;/div&gt;
</summary></entry><entry><title>Loempia</title><link href="http://wirtel.be/posts/en/2010/10/04/loempia/" rel="alternate" /><updated>2010-10-04T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2010-10-04:posts/en/2010/10/04/loempia/</id><summary type="html">&lt;div class="section" id="loempia-addons-registry-for-openerp"&gt;
&lt;h2&gt;Loempia - Addons Registry for&amp;nbsp;OpenERP&lt;/h2&gt;
&lt;p&gt;Hi&amp;nbsp;all,&lt;/p&gt;
&lt;p&gt;I want to talk about a personal project for OpenERP. This project is&amp;nbsp;Loempia.&lt;/p&gt;
&lt;p&gt;Loempia will be the official repository for the modules of OpenERP, it allows to share the modules with the&amp;nbsp;community.&lt;/p&gt;
&lt;div class="section" id="why-loempia"&gt;
&lt;h3&gt;Why&amp;nbsp;Loempia?&lt;/h3&gt;
&lt;p&gt;Currently, the community and OpenERP &lt;span class="caps"&gt;S.A.&lt;/span&gt; use LaunchPad to share the modules of&amp;nbsp;OpenERP.&lt;/p&gt;
&lt;p&gt;The problem with this way of working is that we don&amp;#8217;t know where a module is and if this module is up to date or not. Where are the certified modules ?&amp;nbsp;etc&amp;#8230;&lt;/p&gt;
&lt;p&gt;I think Loempia can help everybody, because it will be the main repository for the modules of&amp;nbsp;OpenERP.&lt;/p&gt;
&lt;p&gt;With Loempia, you will have the capability to share your modules and comments. You could use the tag and rating&amp;nbsp;systems.&lt;/p&gt;
&lt;p&gt;You will have the capability to make some searchs with some specific&amp;nbsp;criteria.&lt;/p&gt;
&lt;p&gt;You will be able to look for the modules for the accounting for the version 5.0 of a specific&amp;nbsp;contributor.&lt;/p&gt;
&lt;p&gt;Do you want the certified modules for OpenERP 6.0, a small search on Loempia and you will get the&amp;nbsp;results.&lt;/p&gt;
&lt;p&gt;I think it&amp;#8217;s a very useful site and not only a marketing&amp;nbsp;tool!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="why-don-t-you-want-to-use-pypi"&gt;
&lt;h3&gt;Why don&amp;#8217;t you want to use&amp;nbsp;PyPi?&lt;/h3&gt;
&lt;p&gt;PyPi is a very cool site if you want to share a python module, it&amp;#8217;s very useful and it works fine. But it&amp;#8217;s a technical site. Yes, we could use it to store the openerp&amp;#8217;s modules and after, what? You could show the best contributors, the most downloaded modules, and promote modules with&amp;nbsp;screenshots.&lt;/p&gt;
&lt;p&gt;Some features of&amp;nbsp;Loempia:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;You could select a module of a given&amp;nbsp;contributor.&lt;/li&gt;
&lt;li&gt;You could select a module for a specific version of&amp;nbsp;OpenERP.&lt;/li&gt;
&lt;li&gt;How can I get the certified modules? Are these modules&amp;nbsp;updated?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope that Loempia will help OpenERP, the Community and the&amp;nbsp;developers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="what-will-we-propose-in-loempia"&gt;
&lt;h3&gt;What will we propose in&amp;nbsp;Loempia?&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Rating&amp;nbsp;System&lt;/li&gt;
&lt;li&gt;Comment&amp;nbsp;System&lt;/li&gt;
&lt;li&gt;Tag&amp;nbsp;System&lt;/li&gt;
&lt;li&gt;User / Authentication system (OpenID, you will be able to connect with your LaunchPad &lt;span class="caps"&gt;ID&lt;/span&gt;&amp;nbsp;account)&lt;/li&gt;
&lt;li&gt;Allows to register new launchpad branches or upload zip&amp;nbsp;files&lt;/li&gt;
&lt;li&gt;Generate the documentation of the modules and integrate it into&amp;nbsp;Sphinx&lt;/li&gt;
&lt;li&gt;Allows the screenshots (thanks to&amp;nbsp;NaNtic)&lt;/li&gt;
&lt;li&gt;Produce sample of &lt;span class="caps"&gt;PDF&lt;/span&gt;&amp;nbsp;reports&lt;/li&gt;
&lt;li&gt;Develop web-services for the &lt;span class="caps"&gt;API&lt;/span&gt; to register/browse&amp;nbsp;addons&lt;/li&gt;
&lt;li&gt;Allows the possibility to register a branch or a module in the buildbot of OpenERP and add the results in the module&amp;nbsp;statistics&lt;/li&gt;
&lt;li&gt;Fetch the specifications of a module in &lt;span class="caps"&gt;JSON&lt;/span&gt;, &lt;span class="caps"&gt;XML&lt;/span&gt; via an&amp;nbsp;url&lt;/li&gt;
&lt;li&gt;Download the module via an&amp;nbsp;url&lt;/li&gt;
&lt;li&gt;A python library and a command line client to handle the&amp;nbsp;modules&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;$ loempia search &amp;lt;module&amp;gt;
$ loempia show &amp;lt;module+version&amp;gt;
$ loempia fetch &amp;lt;module+version&amp;gt;
$ loempia login &amp;lt;user&amp;gt; &amp;lt;version&amp;gt;
$ loempia push &amp;lt;module&amp;gt;
$ loempia install &amp;lt;module&amp;gt;
$ loempia update {-all | &amp;lt;module&amp;gt; | &amp;lt;module+version&amp;gt; }
$ loempia outdated
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Currently, the project is hosted on &lt;a class="reference external" href="http://www.loempia.org"&gt;http://www.loempia.org&lt;/a&gt;, but you can see a mock-up on &lt;a class="reference external" href="http://beta.loempia.org"&gt;http://beta.loempia.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is &lt;a class="reference external" href="http://www.loempia.org/website_modules.pdf"&gt;the mock-up of the screens&lt;/a&gt; with&amp;nbsp;balsamic&lt;/p&gt;
&lt;p&gt;If you have comments or suggestions, you can contact&amp;nbsp;me.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="project" /><category term="loempia" /><category term="openerp" /></entry><entry><title /><link href="http://wirtel.be/posts/en/2009/11/24/openerp-override-xml-attribute/" rel="alternate" /><updated>2009-11-24T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2009-11-24:posts/en/2009/11/24/openerp-override-xml-attribute/</id><summary type="html">&lt;div class="section" id="open-erp-how-to-override-an-xml-attribute-in-an-xml-view"&gt;
&lt;h2&gt;Open &lt;span class="caps"&gt;ERP&lt;/span&gt; - How to override an xml attribute in an xml&amp;nbsp;view&lt;/h2&gt;
&lt;p&gt;A nice feature has been developed in the trunk version of Open &lt;span class="caps"&gt;ERP&lt;/span&gt;.  It&amp;#8217;s
possible to override an xml attribute of an openerp view with the &amp;#8216;attributes&amp;#8217;&amp;nbsp;position.&lt;/p&gt;
&lt;p&gt;For&amp;nbsp;Example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;&lt;span class="caps"&gt;UTF&lt;/span&gt;-8&amp;quot; ?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;openerp&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;data&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;record&lt;/span&gt; &lt;span class="na"&gt;model=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ir.ui.view&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;res_partner_form&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;res.partner.form&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;res.partner&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;form&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;inherit_id&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;base.view_partner_form&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arch&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;xpath&lt;/span&gt; &lt;span class="na"&gt;expr=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/form/notebook/page[@string=&amp;#39;General&amp;#39;]/field[@name=&amp;#39;address&amp;#39;]/tree&amp;quot;&lt;/span&gt;
                       &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;attributes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;editable&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;top&lt;span class="nt"&gt;&amp;lt;/attribute&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/xpath&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/record&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/data&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/openerp&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Just an update, If you want to use this feature with a page, don&amp;#8217;t forget to
remove the last &amp;#8216;/&amp;#8217; in the xpath&amp;nbsp;expression.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;record&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;base.view_crm_partner_info_History&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;model=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ir.ui.view&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;res.partner.crm.history.inherit1&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;res.partner&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;form&lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;inherit_id&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;base.view_partner_form&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arch&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;xpath&lt;/span&gt; &lt;span class="na"&gt;expr=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/form/notebook/page[@string=&amp;#39;History&amp;#39;]&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;attributes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;invisible&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;False&lt;span class="nt"&gt;&amp;lt;/attribute&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/xpath&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/record&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</summary><category term="openerp" /><category term="xml" /></entry><entry><title>RubyFlow - a new RSS flow for Ruby and Rails</title><link href="http://wirtel.be/posts/fr/2008/04/23/rubyflow/" rel="alternate" /><updated>2008-04-23T00:00:00+02:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2008-04-23:posts/fr/2008/04/23/rubyflow/</id><summary type="html">&lt;div class="section" id="rubyflow-un-nouveau-flux-pour-ruby-et-rails"&gt;
&lt;h2&gt;RubyFlow - un nouveau flux pour Ruby et&amp;nbsp;Rails&lt;/h2&gt;
&lt;p&gt;Voici quelques semaines, Peter Cooper a lancé un nouveau projet nommé &lt;a class="reference external" href="http://www.rubyinside.com/rubyflow-a-new-ruby-news-site-851.html"&gt;RubyFlow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il est vrai que la majorité des flux &lt;span class="caps"&gt;RSS&lt;/span&gt; que j&amp;#8217;utilisais se tarissaient, et
cela m&amp;#8217;ennuyait. Ne plus avoir de news concernant Ruby et Rails, arrrgghhh !!!,
c&amp;#8217;était&amp;nbsp;insoutenable.&lt;/p&gt;
&lt;p&gt;Maintenant, des centaines de news viennent à moi, oh que je suis content&amp;nbsp;lol.&lt;/p&gt;
&lt;p&gt;Voici la version française de ce site &lt;a class="reference external" href="http://flow.rubyfrance.org"&gt;RubyFlow&amp;nbsp;&lt;span class="caps"&gt;FR&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</summary><category term="ruby" /></entry><entry><title>Code Cooking</title><link href="http://wirtel.be/posts/fr/2008/03/23/code-cooking/" rel="alternate" /><updated>2008-03-23T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2008-03-23:posts/fr/2008/03/23/code-cooking/</id><summary type="html">&lt;div class="section" id="du-code-c-est-de-la-cuisine-il-faut-avoir-la-technique-et-les-ingredients"&gt;
&lt;h2&gt;Du code, c&amp;#8217;est de la cuisine, il faut avoir la technique et les&amp;nbsp;ingrédients.&lt;/h2&gt;
&lt;p&gt;Le développement de logiciel, je suis désolé pour certains, mais pour moi, il
s&amp;#8217;agit d&amp;#8217;un art. Je suis écrivain en logiciel, et j&amp;#8217;essaie d&amp;#8217;écrire le meilleur
code qu&amp;#8217;il soit. Je ne m&amp;#8217;amuse pas à trouver des phrases bien tournées pour les
mettres ensemble. J&amp;#8217;essaie de comprendre et de créer quelque chose qui soit
facilement lisible, compréhensible et maintenable très&amp;nbsp;facilement.&lt;/p&gt;
&lt;p&gt;Je discute avec un ami que je n&amp;#8217;ai plus vu depuis des années, et cela me
chagrine de l&amp;#8217;entendre me dire tout le contraire de ce que j&amp;#8217;aime. Le goût du
bon code. Jean Pierre Coffe dirait &amp;#8220;Le goût de la bonne bouffe&amp;#8221;, et bin moi,
c&amp;#8217;est la même chose mais pour du code. Je n&amp;#8217;aime pas voir un code insipide, je
veux du code, qui me parle et où la lecture me permettre une compréhension très&amp;nbsp;rapide.&lt;/p&gt;
&lt;p&gt;Il est clair que l&amp;#8217;on doit vivre de son travail, moi je vis de mon code, c&amp;#8217;est
bête, mais on pourrait me comparer à un chef coq, et j&amp;#8217;apprend chaque jour pour
continuer à mitonner des bons petits plats&amp;nbsp;:d&lt;/p&gt;
&lt;p&gt;Une personne qui se respecte, écrira du bon code, du moins, c&amp;#8217;est ce que je
pense. Je ne peux m&amp;#8217;imaginer la chose&amp;nbsp;autrement.&lt;/p&gt;
&lt;/div&gt;
</summary><category term="code" /><category term="cook" /></entry><entry><title>Nouveau Travail chez OpenERP (anciennement TinyERP)</title><link href="http://wirtel.be/posts/fr/2008/03/19/nouveau-travail-chez-openerp-anciennement-tinyerp/" rel="alternate" /><updated>2008-03-19T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2008-03-19:posts/fr/2008/03/19/nouveau-travail-chez-openerp-anciennement-tinyerp/</id><summary type="html">&lt;div class="section" id="nouveau-travail-chez-openerp-anciennement-tinyerp"&gt;
&lt;h2&gt;Nouveau Travail chez OpenERP (anciennement&amp;nbsp;TinyERP)&lt;/h2&gt;
&lt;p&gt;A partir du 14 mai 2008, nous travaillerons chez Tiny.be qui est la société éditrice de&amp;nbsp;TinyERP.&lt;/p&gt;
&lt;p&gt;TinyERP est un logiciel de gestion d&amp;#8217;entreprise, dont la rivalité avec &lt;span class="caps"&gt;SAP&lt;/span&gt; et d&amp;#8217;autres projets n&amp;#8217;est plus à&amp;nbsp;faire.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;espère que l&amp;#8217;équipe sera contente de nous recevoir, et que nous même, aurons un bel&amp;nbsp;avenir.&lt;/p&gt;
&lt;/div&gt;
</summary><category term="openerp" /><category term="job" /></entry><entry><title /><link href="http://wirtel.be/posts/en/2008/02/02/new_beta_release_of_programming_ruby/" rel="alternate" /><updated>2008-02-02T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2008-02-02:posts/en/2008/02/02/new_beta_release_of_programming_ruby/</id><summary type="html">&lt;div class="section" id="new-release-of-the-programming-ruby"&gt;
&lt;h2&gt;New Release of the &amp;#8220;Programming&amp;nbsp;Ruby&amp;#8221;&lt;/h2&gt;
&lt;p&gt;Cool, a new release of the last beta version of &amp;#8220;Programming Ruby&amp;#8221;. I believe
that Andy and Dave will prepare a very good book. I look forward to having a
paper&amp;nbsp;version.&lt;/p&gt;
&lt;p&gt;Thanks again for your&amp;nbsp;work.&lt;/p&gt;
&lt;p&gt;Buy this book, it covers the last version of Ruby&amp;nbsp;1.9&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.pragprog.com/"&gt;The Pragmatic&amp;nbsp;Programmers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</summary><category term="ruby" /><category term="programming" /><category term="book" /></entry><entry><title>Après la SOAP, le dessert</title><link href="http://wirtel.be/posts/fr/2007/12/05/apres_la_soap-le_dessert/" rel="alternate" /><updated>2007-12-05T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2007-12-05:posts/fr/2007/12/05/apres_la_soap-le_dessert/</id><summary type="html">&lt;div class="section" id="apres-la-soap-le-dessert"&gt;
&lt;h2&gt;Après la &lt;span class="caps"&gt;SOAP&lt;/span&gt;, le dessert&amp;nbsp;!&lt;/h2&gt;
&lt;p&gt;Vous souvenez-vous, dans &lt;a class="reference external" href="/2007/12/04/la-soap"&gt;mon précédent billet&lt;/a&gt;,
j&amp;#8217;indiquais que j&amp;#8217;allais devoir utiliser &lt;a class="reference external" href="http://code.whytheluckystiff.net/mouseHole/"&gt;mouseHole&lt;/a&gt;
afin de vérifier le bon fonctionnement d&amp;#8217;un connecteur&amp;nbsp;&lt;span class="caps"&gt;SOAP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;#8217;étais prêt à mettre la main à la pate, quand tout à coup,
j&amp;#8217;ai trouvé &lt;a class="reference external" href="http://www.soapui.org/"&gt;soapUI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il s&amp;#8217;agit d&amp;#8217;un outil de test pour&amp;nbsp;WebServices.&lt;/p&gt;
&lt;p&gt;A première vue, il avait l&amp;#8217;air simple, mais j&amp;#8217;ai pû constater qu&amp;#8217;il était
génial. Importer mon &lt;span class="caps"&gt;WSDL&lt;/span&gt;, générer un mock webservice et tester mon connecteur
en quelques minutes, sans écrire une seule&amp;nbsp;ligne.&lt;/p&gt;
&lt;p&gt;Je ne vous dis pas la joie que j&amp;#8217;ai pû ressentir en me disant que j&amp;#8217;avais gagné
quelques jours de développement à cause d&amp;#8217;un manque d&amp;#8217;outil pour debugger mes
messages&amp;nbsp;&lt;span class="caps"&gt;SOAP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;La chose vraiment intéressante, il est possible de scripter cet outil via
Groovy afin de modifier les responses à la volée.  Sincèrement, j&amp;#8217;avais la
bouche ouverte&amp;nbsp;:d&lt;/p&gt;
&lt;/div&gt;
</summary><category term="soap" /><category term="delphi" /><category term="c++" /></entry><entry><title>SOAP + Delphi + C++</title><link href="http://wirtel.be/posts/fr/2007/12/04/soap-delphi-c/" rel="alternate" /><updated>2007-12-04T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2007-12-04:posts/fr/2007/12/04/soap-delphi-c/</id><summary type="html">&lt;div class="section" id="a-la-soap"&gt;
&lt;h2&gt;A la &lt;span class="caps"&gt;SOAP&lt;/span&gt;&amp;nbsp;!!&lt;/h2&gt;
&lt;p&gt;Voilà, pour le boulot, je vais devoir créer un connecteur &lt;span class="caps"&gt;SOAP&lt;/span&gt;. La partie la
plus marrante, c&amp;#8217;est que je ne dispose pas d&amp;#8217;outils pour vérifier mes messages.
Donc, je me suis entrain de penser à écrire un proxy http écrit en ruby, et qui
fera intermédiaire entre moi et le webservice que je dois&amp;nbsp;attaquer.&lt;/p&gt;
&lt;p&gt;Je vais essayer tout à l&amp;#8217;heure cet outil : &lt;a class="reference external" href="http://code.whytheluckystiff.net/mouseHole/"&gt;mouseHole&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J&amp;#8217;espère que son utilisation m&amp;#8217;aidera, car de cette manière, il m&amp;#8217;aidera à
valider mon code plus&amp;nbsp;rapidement.&lt;/p&gt;
&lt;p&gt;Pour ne pas oublier, je développe principalement en C++ Builder 6 et Delphi&amp;nbsp;7.&lt;/p&gt;
&lt;p&gt;Je n&amp;#8217;ai pas le choix, c&amp;#8217;est les choix technologiques de mon&amp;nbsp;employeur.&lt;/p&gt;
&lt;/div&gt;
</summary><category term="soap" /><category term="delphi" /><category term="c++" /></entry><entry><title /><link href="http://wirtel.be/posts/fr/2007/12/03/win32ole_le_retour/" rel="alternate" /><updated>2007-12-03T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2007-12-03:posts/fr/2007/12/03/win32ole_le_retour/</id><summary type="html">&lt;div class="section" id="win32ole-le-retour"&gt;
&lt;h2&gt;Win32OLE, le&amp;nbsp;retour&lt;/h2&gt;
&lt;p&gt;Suite à mon  &lt;a class="reference external" href="/2007/11/25/ruby_ole_and_word"&gt;précédent article sur&amp;nbsp;Win32OLE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Je viens de découvrir une méthode de classe très intéressante, surtout qu&amp;#8217;elle appartient à la classe &lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;. Il s&amp;#8217;agit de la&amp;nbsp;méthode&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="ss"&gt;&lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:const_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ole_object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;module_or_class&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous souvenez-vous du code de mon précédent article ? J&amp;#8217;avais défini un ensemble de constantes hiérarchisées à l&amp;#8217;aide de&amp;nbsp;modules.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Word&lt;/span&gt;
    &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;PageSetup&lt;/span&gt;
        &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Orientation&lt;/span&gt;
            &lt;span class="no"&gt;Portrait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
            &lt;span class="no"&gt;Landscape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="c1"&gt;# .....&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En découvrant cette méthode, j&amp;#8217;ai pû refactoriser mon code, afin de le rendre plus lisible et d&amp;#8217;utiliser directement les constantes définies par la couche &lt;span class="caps"&gt;OLE&lt;/span&gt;. Voici donc, un peu de refactorisation de mon précédent&amp;nbsp;code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c1"&gt;# Définition d&amp;#39;un module qui va servir à agréger les différentes constantes&lt;/span&gt;
&lt;span class="c1"&gt;# qui sont définie dans le composant &lt;span class="caps"&gt;OLE&lt;/span&gt; de Word.&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Word&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;begin&lt;/span&gt;
    &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;&lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Word.Application&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# La méthode &lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;::const_load charge les différentes constantes&lt;/span&gt;
    &lt;span class="c1"&gt;# depuis l&amp;#39;instance Word.&lt;/span&gt;
    &lt;span class="c1"&gt;# De cette manière, il n&amp;#39;est pas nécessaire de créer une correspondance&lt;/span&gt;
    &lt;span class="c1"&gt;# entre constante et valeur numérique&lt;/span&gt;
    &lt;span class="no"&gt;&lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;const_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Word&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Documents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PageSetup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PaperSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:WdPaperA4&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PageSetup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Orientation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:WdOrientLandscape&lt;/span&gt;
&lt;span class="k"&gt;ensure&lt;/span&gt;
    &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je vous donne un avis, je n&amp;#8217;ai pas pû complètement la documentation lors de l&amp;#8217;article précédent, ce qui m&amp;#8217;a fait perdre du temps. Un conseil, lisez les exemples, la documentation et tout ce qui peut aider.&amp;nbsp;Références&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://ruby-doc.org/core/classes/WIN32OLE.html#M002844"&gt;&lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;::const_load&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</summary><category term="ruby" /><category term="ole" /><category term="word" /><category term="automation" /></entry><entry><title /><link href="http://wirtel.be/posts/fr/2007/11/25/ruby_ole_and_word/" rel="alternate" /><updated>2007-11-25T00:00:00+01:00</updated><author><name>Stephane Wirtel</name></author><id>tag:wirtel.be,2007-11-25:posts/fr/2007/11/25/ruby_ole_and_word/</id><summary type="html">&lt;div class="section" id="ruby-ole-et-word"&gt;
&lt;h2&gt;Ruby, &lt;span class="caps"&gt;OLE&lt;/span&gt; et&amp;nbsp;Word&lt;/h2&gt;
&lt;div class="section" id="comment-generer-des-documents-words-avec-ole-et-ruby"&gt;
&lt;h3&gt;Comment générer des documents Words avec &lt;span class="caps"&gt;OLE&lt;/span&gt; et Ruby&amp;nbsp;?&lt;/h3&gt;
&lt;p&gt;Je vais être honnête avec vous, je ne suis pas pour l&amp;#8217;utilisation de Word, mais
les personnes travaillant avec moi, utilisent majoritairement cet outil et ne
jurent que par celui-ci. Afin d&amp;#8217;utiliser correctement &lt;span class="caps"&gt;OLE&lt;/span&gt; avec Ruby, il faut
avoir à sa disposition plusieurs outils,&amp;nbsp;:-)&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;win32ole Elle fait partie de la librairie standard de Ruby et d&amp;#8217;une très
grande utilité ;-) sans ça, il est impossible de pouvoir utiliser Word via&amp;nbsp;&lt;span class="caps"&gt;OLE&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://dave.burt.id.au/ruby/ole_browser.rb"&gt;ole_browser.rb&lt;/a&gt; qui est un
script permettant d&amp;#8217;introspecter les objets disponibles. Cet outil a été
écrit par Dave Burt et Masaki&amp;nbsp;Suketa.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;win32ole&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Définition d&amp;#8217;une nouvelle méthode basée sur l&amp;#8217;opérateur &amp;#8216;/&amp;#8217; afin de sucharger
la classe&amp;nbsp;String.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Etant donné que je n&amp;#8217;avais pas envie d&amp;#8217;écrire tout le temps du code
inutilement, et que j&amp;#8217;adore refactoriser, j&amp;#8217;ai ajouté une petite méthode au
module Kernel. Celle me permet de gagner un peu de lisibilité, mais pas grand
chose, je la met dans la zone des&amp;nbsp;Helpers.o&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Kernel&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Bon, commençons par le plus intéressant, je pense que le plus intéressant est
tout de même de charger Word :D donc, voici comment charger cet&amp;nbsp;outil.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;&lt;span class="caps"&gt;WIN32OLE&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Word.Application&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans mon exemple, je ne veux pas voir l&amp;#8217;interface de Word, de ce fait, je
n&amp;#8217;active pas sa&amp;nbsp;visibilité.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Visible&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Etant donné que cet article parle de la création de document, il ne s&amp;#8217;agit pas
d&amp;#8217;ouvrir un document Word et de lui rajouter des infos, on part de&amp;nbsp;zéro.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Documents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Afin que vous ne soyez pas perdu dans des nombres magiques, j&amp;#8217;ai ajouté une
petite liste de constantes, permettant de cette manière une utilisation plus
aisée des&amp;nbsp;composants.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Word&lt;/span&gt;
    &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;PageSetup&lt;/span&gt;
        &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Orientation&lt;/span&gt;
            &lt;span class="no"&gt;Portrait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
            &lt;span class="no"&gt;Landscape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
        &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Size&lt;/span&gt;
            &lt;span class="no"&gt;PaperA4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Font&lt;/span&gt;
        &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ColorIndex&lt;/span&gt;
            &lt;span class="no"&gt;Black&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="no"&gt;Blue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
            &lt;span class="no"&gt;Turquoise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
            &lt;span class="no"&gt;BrightGreen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
            &lt;span class="no"&gt;Pink&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
            &lt;span class="no"&gt;Red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
            &lt;span class="no"&gt;Yellow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
            &lt;span class="no"&gt;White&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
            &lt;span class="no"&gt;DarkBlue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
            &lt;span class="no"&gt;Teal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
            &lt;span class="no"&gt;Green&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;
            &lt;span class="no"&gt;Violet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;
            &lt;span class="no"&gt;DarkRed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;
            &lt;span class="no"&gt;DarkYellow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ParagraphAlignment&lt;/span&gt;
        &lt;span class="no"&gt;Left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="no"&gt;Center&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="no"&gt;Right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
        &lt;span class="no"&gt;Justify&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
        &lt;span class="no"&gt;Distribute&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="no"&gt;JustifyMed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
        &lt;span class="no"&gt;JustifyHi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
        &lt;span class="no"&gt;JustifyLow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
        &lt;span class="no"&gt;ThaiJustify&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette partie est bête, mais spécifie le format de la page, de cette manière
j&amp;#8217;indique le format A4 en Paysage ( LandScape&amp;nbsp;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PageSetup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PaperSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:PageSetup&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="ss"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:PaperA4&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PageSetup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Orientation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:PageSetup&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="ss"&gt;Orientation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Landscape&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour toutes les sections se trouvant dans le document, nous allons ajoutés un
en-tête et un pied de page. Création de l&amp;#8217;entête avec une police de caractères
ayant la couleur Violet, et dont le contenu sera &amp;#8220;En-tête&amp;nbsp;d&amp;#8217;exemple&amp;#8221;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sections&lt;/span&gt;
    &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Range&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Font&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ColorIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Font&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="ss"&gt;ColorIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Violet&lt;/span&gt;
        &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;En-tête d&amp;#39;exemple&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Footers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Range&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ParagraphFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Alignment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:ParagraphAligment&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Right&lt;/span&gt;
        &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Font&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ColorIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;Word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Font&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="ss"&gt;ColorIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:DarkRed&lt;/span&gt;
        &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Stephane Wirtel &amp;lt; stephane &lt;span class="caps"&gt;DOT&lt;/span&gt; wirtel &lt;span class="caps"&gt;AT&lt;/span&gt; gmail &lt;span class="caps"&gt;DOT&lt;/span&gt; com&amp;gt;&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Selection&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="c1"&gt;# Ajout d&amp;#39;une image,&lt;/span&gt;
    &lt;span class="n"&gt;picture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InlineShapes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddPicture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;change_directory.png&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Bon, on insère un break, c&amp;#39;est à dire une nouvelle page&lt;/span&gt;
    &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InsertBreak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Je ne suis pas Superman, mais j&amp;#39;y arrive :D&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;Une option en plus que les autres :D&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TypeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InsertBreak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Spécification de la taille de la police à utiliser&lt;/span&gt;
    &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Font&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;font&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="s2"&gt;&amp;quot;Bitstream Vera Sans Mono&amp;quot;&lt;/span&gt;
        &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
        &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Bold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="c1"&gt;# On ajoute l&amp;#39;heure avec la date de cette manière, on peut déjà savoir la date de création du document&lt;/span&gt;
    &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TypeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InsertBreak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et si on enregistrait le document, ça serait cool, vous ne pensez pas ? Tout ce
travail pour ne pas le sauver, ça serait débile :D Donc,&amp;nbsp;tadaaaaam&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SaveAs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;test.doc&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant il ne reste plus qu&amp;#8217;à fermer l&amp;#8217;application Word, si nous ne le
faisons pas, il restera une instance Word ouverte, ce qui peut provoquer des&amp;nbsp;problèmes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Imaginez maintenant la création d&amp;#8217;un &lt;span class="caps"&gt;DSL&lt;/span&gt; pour simplifier tout ce code, ou aussi
l&amp;#8217;utilisation de&amp;nbsp;Textile&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</summary><category term="ruby" /><category term="ole" /><category term="word" /><category term="automation" /></entry></feed>
