schurger.org/2022-03-04T00:00:00-05:00ADS-B Receiver2022-03-04T00:00:00-05:002022-03-04T00:00:00-05:00Jean Schurgertag:None,2022-03-04:/ads-b-receiver.html<p><a href="file:/images/fa.png"><img src="file:///images/fa.png"/></a></p>
<p>As an Aviation enthusiast and pilot (I had to say it), I had to take
the opportunity to setup a little ADS-B receiver.</p>
<p>"ADS-B" stands for "Automatic Dependent Surveillance–Broadcast".</p>
<p>Basicaly, airplanes equipped with an ADS-B Out are broadcasting
informations like their speed, altitude, heading by radio on 1090MHz. In …</p><p><a href="file:/images/fa.png"><img src="file:///images/fa.png"/></a></p>
<p>As an Aviation enthusiast and pilot (I had to say it), I had to take
the opportunity to setup a little ADS-B receiver.</p>
<p>"ADS-B" stands for "Automatic Dependent Surveillance–Broadcast".</p>
<p>Basicaly, airplanes equipped with an ADS-B Out are broadcasting
informations like their speed, altitude, heading by radio on 1090MHz. In
some countries and airspaces, having an ADS-B Out is mandatory.</p>
<p>Any computer with a radio receiver in range can read those
informations.</p>
<p>A such received (search for RTL-SDR) is available for less than 30$,
coming with its antena, so you just have to plug it on you computer USB
port and use the appropriate software.</p>
<p>Some well known websites like <a href="https://flightaware.com">FlightAware</a> are taking great avantage
of that feature to display almost real-time information about airplanes
in the world.</p>
<p>They even encourage people to install their own ADS-B received and
provide the software.</p>
<p>This is what I did. The instructions are provided <a href="https://flightaware.com/adsb/">here</a>.</p>
<p>I ran the "SkyAware" software provided by FlightAware on a Raspberry
Pi, on my roof, and peacefully see all the planes flying over Montréal
(and I'm not the only one).</p>
<p>You can see <a href="https://flightaware.com/adsb/stats/user/jeansch">statistics</a>
about my receiver and a <a href="https://fa.schurger.org">real-time
map</a>.</p>
Self email hosting2022-01-04T00:00:00-05:002022-01-04T00:00:00-05:00Jean Schurgertag:None,2022-01-04:/self-email-hosting.html<p>Hosting its own email server takes a lot of time to setup, maintain
and troubleshoot. I own my domain name and use it for emails since more
that 20 years and used different ways to to it. There is a lot of good
providers like Gmail, Protonmail but they can …</p><p>Hosting its own email server takes a lot of time to setup, maintain
and troubleshoot. I own my domain name and use it for emails since more
that 20 years and used different ways to to it. There is a lot of good
providers like Gmail, Protonmail but they can be expensive or you may
not want to give them your data.</p>
<p>I've discovered <strong>Mail-in-a-box</strong> <a href="https://mailinabox.email/">https://mailinabox.email/</a>:</p>
<ul>
<li>Easy to setup</li>
<li>Use common well known open source software</li>
<li>Provide webmail (with GPG support), shared addressbook (and
calendar)</li>
<li>Well documented</li>
</ul>
<p>Only drawback beeing is only support Ubuntu, but <em><a href="https://mailinabox.email/">https://mailinabox.email/</a></em> adds
support for Debian.</p>
<p>The best of two worlds !</p>
Reboot2021-11-05T00:00:00-04:002021-11-05T00:00:00-04:00Jean Schurgertag:None,2021-11-05:/reboot.html<p>In today's rapidly changing world, rebooting computers become more
and more difficult. Here is a little brutal program to reboot an x86
computer.</p>
<pre class="example"><code>/* cc -o reboot reboot.c */
/* ./reboot */
#include <sys/io.h>
void main(void) {
iopl(3);
outb(6, 0xcf9);
}
</code></pre>
SSH tricks2021-10-15T00:00:00-04:002021-10-15T00:00:00-04:00Jean Schurgertag:None,2021-10-15:/ssh-tricks.html<h1 id="ssh-through-an-http-proxy">SSH through an http proxy</h1>
<p>(<strong>ncat</strong> comming from package <strong>nmap</strong> or
<strong>ncat</strong>)</p>
<pre class="example"><code>ProxyCommand /usr/bin/ncat --proxy-type http --proxy PROXY:PORT --proxy-auth PROXY_USER:PROXY_PASSWORD %h 22
</code></pre>
<h1 id="ssh-through-an-ssh-hop">SSH through an SSH hop</h1>
<pre class="example"><code>ProxyCommand /usr/bin/ssh USER@HOP /bin/nc %h 22
</code></pre>
<h1 id="keeping-an-agent-in-wsl">Keeping an agent in WSL</h1>
<p><strong>keychain</strong> does the trick …</p><h1 id="ssh-through-an-http-proxy">SSH through an http proxy</h1>
<p>(<strong>ncat</strong> comming from package <strong>nmap</strong> or
<strong>ncat</strong>)</p>
<pre class="example"><code>ProxyCommand /usr/bin/ncat --proxy-type http --proxy PROXY:PORT --proxy-auth PROXY_USER:PROXY_PASSWORD %h 22
</code></pre>
<h1 id="ssh-through-an-ssh-hop">SSH through an SSH hop</h1>
<pre class="example"><code>ProxyCommand /usr/bin/ssh USER@HOP /bin/nc %h 22
</code></pre>
<h1 id="keeping-an-agent-in-wsl">Keeping an agent in WSL</h1>
<p><strong>keychain</strong> does the trick</p>
<pre class="example"><code>keychain -q --nogui $HOME/.ssh/key_to_add
source $HOME/.keychain/$(hostname)-sh
</code></pre>
<h1 id="using-the-windows-ssh-agent">Using the Windows ssh-agent</h1>
<p><em>Running Windows PowerShell as administrator</em></p>
<pre class="example"><code>Get-Service -Name ssh-agent | Set-Service -StartupType Manual
</code></pre>
<h1 id="using-emacs-tramp-on-windows-10">Using Emacs TRAMP on Windows
10</h1>
<p>Use <strong>/sshx:</strong> in place of <strong>/ssh:</strong></p>
Playing with e-paper and Micropython2021-02-23T00:00:00-05:002021-02-23T00:00:00-05:00Jean Schurgertag:None,2021-02-23:/playing-with-e-paper-and-micropython.html<ul>
<li><a href="#get-and-upload-the-image.py">Get and upload the
image.py</a></li>
<li>[[#upload-the-driver-from-waveshare-with-my-pr-to-get-micropython-implementation][Upload
the driver from Waveshare (with my PR to get MicroPython
implementation)]]</li>
<li><a href="#upload-the-main.py">Upload the main.py</a></li>
</ul>
<p>I wanted to do some proof of concept using a Pycom LoPy4 and a
e-paper display (epd2in13<sub>V2</sub>).</p>
<p><a href="file:/images/epaper-lopy4-waveshare2in13v2.jpg"><img src="file:///images/epaper-lopy4-waveshare2in13v2.jpg"/></a></p>
<h1 id="hardware">Hardware</h1>
<ul>
<li><a href="https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT">Waveshare
e-Paper V2</a> (V2 is important here)</li>
<li><a href="https://pycom.io/product/lopy4/">Pycom …</a></li></ul><ul>
<li><a href="#get-and-upload-the-image.py">Get and upload the
image.py</a></li>
<li>[[#upload-the-driver-from-waveshare-with-my-pr-to-get-micropython-implementation][Upload
the driver from Waveshare (with my PR to get MicroPython
implementation)]]</li>
<li><a href="#upload-the-main.py">Upload the main.py</a></li>
</ul>
<p>I wanted to do some proof of concept using a Pycom LoPy4 and a
e-paper display (epd2in13<sub>V2</sub>).</p>
<p><a href="file:/images/epaper-lopy4-waveshare2in13v2.jpg"><img src="file:///images/epaper-lopy4-waveshare2in13v2.jpg"/></a></p>
<h1 id="hardware">Hardware</h1>
<ul>
<li><a href="https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT">Waveshare
e-Paper V2</a> (V2 is important here)</li>
<li><a href="https://pycom.io/product/lopy4/">Pycom LoPy4</a> (running
stock micropython from pycom)</li>
</ul>
<h1 id="software">Software</h1>
<ul>
<li><a href="https://github.com/waveshare/e-Paper/">Waveshare Python
driver</a> with my <a href="https://github.com/waveshare/e-Paper/pull/139">pull request</a>
for the MicroPython driver</li>
</ul>
<h1 id="testing">Testing</h1>
<p>The MicroPython provided by pycom does not have the PIL (or Pillow)
package. So to run my test I crafted the "image" to display outside the
controller (on my computer) and just imported the generated python
code.</p>
<h2 id="get-and-upload-the-image.py">Get and upload the image.py</h2>
<ul>
<li>Run <em>gen<sub>image</sub>.py</em> with the <em>2in13-v2.bmp</em>
test file from the Waveshare repository.</li>
<li>Upload <em>image.py</em> in <em>flash</em></li>
</ul>
<h2 id="upload-the-driver-from-waveshare-with-my-pr-to-get-micropython">Upload
the driver from Waveshare (with my PR to get MicroPython</h2>
<p>implementation)</p>
<p>Following files goest to <em>flash/lib/waveshare<sub>epd</sub></em>
(to be created before)</p>
<ul>
<li>waveshare<sub>epd</sub>/epd2in13<sub>V2</sub>.py</li>
<li>waveshare<sub>epd</sub>/epd2in13<sub>V2</sub>.py</li>
<li>waveshare<sub>epd</sub>/init.py</li>
</ul>
<h2 id="upload-the-main.py">Upload the main.py</h2>
<p>In /flash/main.py</p>
<pre class="example"><code>from waveshare_epd import epd2in13_V2
from image import image
epd = epd2in13_V2.EPD()
epd.init(epd.FULL_UPDATE)
epd.Clear(0xFF)
epd.display(image)
</code></pre>
Sauerbraten auto trigger hack2020-11-26T00:00:00-05:002020-11-26T00:00:00-05:00Jean Schurgertag:None,2020-11-26:/sauerbraten-auto-trigger-hack.html<p><a href="file:/images/venice600.png"><img src="file:///images/venice600.png"/></a></p>
<p>Here is a nasty hack for sauerbraten to pull the trigger when you are
aiming at opponent. It then shoot for nothing to let you not been too
much accurate.</p>
<pre class="example"><code>--- cube2-0.0.20130404+dfsg.orig/fpsgame/fps.cpp
+++ cube2-0.0.20130404+dfsg/fpsgame/fps.cpp
@@ -901,8 +901,19 @@ namespace …</code></pre><p><a href="file:/images/venice600.png"><img src="file:///images/venice600.png"/></a></p>
<p>Here is a nasty hack for sauerbraten to pull the trigger when you are
aiming at opponent. It then shoot for nothing to let you not been too
much accurate.</p>
<pre class="example"><code>--- cube2-0.0.20130404+dfsg.orig/fpsgame/fps.cpp
+++ cube2-0.0.20130404+dfsg/fpsgame/fps.cpp
@@ -901,8 +901,19 @@ namespace game
dynent *o = intersectclosest(d->o, worldpos, d);
if(o && o->type==ENT_PLAYER && isteam(((fpsent *)o)->team, d->team))
{
- crosshair = 1;
- r = g = 0;
+ crosshair = 1;
+ r = g = 0;
+ } else if (o && o->type==ENT_PLAYER && !isteam(((fpsent *)o)->team, d->team)) {
+ if (d->falsehit == 0) {
+ d->attacking = true;
+ d->falsehit = 2;
+ }
+ } else {
+ if (d->falsehit > 0) {
+ d->attacking = true;
+ } else {
+ d->attacking = false;
+ }
}
}
--- cube2-0.0.20130404+dfsg.orig/fpsgame/game.h
+++ cube2-0.0.20130404+dfsg/fpsgame/game.h
@@ -551,7 +551,7 @@ struct fpsent : dynent, fpsstate
int playermodel;
ai::aiinfo *ai;
int ownernum, lastnode;
-
+ int falsehit = 0;
vec muzzle;
fpsent() : weight(100), clientnum(-1), privilege(PRIV_NONE), lastupdate(0), plag(0), ping(0), lifesequence(0), respawned(-1), suicided(-1), lastpain(0), attacksound(-1), attackchan(-1), idlesound(-1), idlechan(-1), frags(0), flags(0), deaths(0), totaldamage(0), totalshots(0), edit(NULL), smoothmillis(-1), playermodel(-1), ai(NULL), ownernum(-1), muzzle(-1, -1, -1)
--- cube2-0.0.20130404+dfsg.orig/fpsgame/weapon.cpp
+++ cube2-0.0.20130404+dfsg/fpsgame/weapon.cpp
@@ -793,6 +793,9 @@ namespace game
if(d==player1 || d->ai)
{
+ if (d->falsehit > 0) {
+ d->falsehit--;
+ }
addmsg(N_SHOOT, "rci2i6iv", d, lastmillis-maptime, d->gunselect,
(int)(from.x*DMF), (int)(from.y*DMF), (int)(from.z*DMF),
(int)(to.x*DMF), (int)(to.y*DMF), (int)(to.z*DMF),
</code></pre>
Nits (Non Intrusive Test SMTPserver)2020-09-30T00:00:00-04:002020-09-30T00:00:00-04:00Jean Schurgertag:None,2020-09-30:/nits-non-intrusive-test-smtpserver.html<p>This is a simple SMTP server. It listens for clients sending mails,
then stores email into an mbox file and may send notifications to the
desktop.</p>
<p>It's purpose is to provide a simple debugging tool for applications
sending emails.</p>
<p><em>Based on the work of Grzegorz Adam Hankiewicz
<gradha@efaber.net …</em></p><p>This is a simple SMTP server. It listens for clients sending mails,
then stores email into an mbox file and may send notifications to the
desktop.</p>
<p>It's purpose is to provide a simple debugging tool for applications
sending emails.</p>
<p><em>Based on the work of Grzegorz Adam Hankiewicz
<gradha@efaber.net></em></p>
<p>[[<a href="https://github.com/jeansch/nits">https://github.com/jeansch/nits</a>][]]<a href="https://github.com/jeansch/nits/">https://github.com/jeansch/nits/</a></p>
Arachni on Debian, simple workaround2020-04-01T00:00:00-04:002020-04-01T00:00:00-04:00Jean Schurgertag:None,2020-04-01:/arachni-on-debian-simple-workaround.html<p>Trying to run <a href="https://www.arachni-scanner.com/">Arachni</a>
on Debian.</p>
<p>I've been stuck a while trying to run Arachni 1.5.1-0.5.12 on
Debian.</p>
<p>Arachni was starting and freeze after spawning the browsers.</p>
<p>The issue is discussed here: <a href="https://github.com/Arachni/arachni/issues/1022">https://github.com/Arachni/arachni/issues/1022</a></p>
<p>Somebody named <strong>HanseSecure</strong> commended the following
<a href="https://github.com/Arachni/arachni/issues/1022#issuecomment-443740671">workaround …</a></p><p>Trying to run <a href="https://www.arachni-scanner.com/">Arachni</a>
on Debian.</p>
<p>I've been stuck a while trying to run Arachni 1.5.1-0.5.12 on
Debian.</p>
<p>Arachni was starting and freeze after spawning the browsers.</p>
<p>The issue is discussed here: <a href="https://github.com/Arachni/arachni/issues/1022">https://github.com/Arachni/arachni/issues/1022</a></p>
<p>Somebody named <strong>HanseSecure</strong> commended the following
<a href="https://github.com/Arachni/arachni/issues/1022#issuecomment-443740671">workaround</a>.</p>
<pre class="example"><code>export OPENSSL_CONF=/etc/ssl
</code></pre>
<p>(before running the arachni binary).</p>
Wifi Killer AX1650 on Debian (Linux >= 5.4)2020-04-01T00:00:00-04:002020-04-01T00:00:00-04:00Jean Schurgertag:None,2020-04-01:/wifi-killer-ax1650-on-debian-linux-54.html<p>I'm running <strong>Debian Sid</strong> on an Dell XPS 9300 (I would
be happy with <strong>Buster</strong> but just upgrading to Sid was a
fast way to have X or Wayland working).</p>
<p>That laptop embed an <strong>AX1650 Killer Wifi</strong>
interface.</p>
<h1 id="warning-false-hope-ahead">Warning, false hope ahead</h1>
<p>There is a guide the the Killer's website …</p><p>I'm running <strong>Debian Sid</strong> on an Dell XPS 9300 (I would
be happy with <strong>Buster</strong> but just upgrading to Sid was a
fast way to have X or Wayland working).</p>
<p>That laptop embed an <strong>AX1650 Killer Wifi</strong>
interface.</p>
<h1 id="warning-false-hope-ahead">Warning, false hope ahead</h1>
<p>There is a guide the the Killer's website <a href="https://support.killernetworking.com/knowledge-base/killer-ax1650-in-debian-ubuntu-16-04/">here</a>,
but it does <strong>NOT</strong> works properly with the Linux 5.4
installed with Debian Sid at this time.</p>
<p>As mentionned, the guide /Newer Linux Kernels like 5.4+ might have
bugs and compatibility issues, so if you see issues using them, try
downgrading to 5.3/.</p>
<p>Even if the guide steps run smoothly, here is issue. Wifi will be
<strong>working</strong>, connecting to AP, great pings, but somehow,
TLS/SSL traffic will block most of the time (HTTPS, SSH, …).</p>
<h1 id="solved-running-stock-debian-kernel-modules">[SOLVED] Running
<strong>stock</strong> Debian kernel modules</h1>
<p>Do <strong>NOT</strong> install <em>backport-iwlwifi</em>. The
modules installed in the package
<strong>linux-image-5.4.0-4-amd64</strong> are perfectly fine. But they
require firmware files version > 49.</p>
<p>Those files are available in the following GIT repositoty: [[<a href="https://chromium.googlesource.com/chromiumos/third_party/linux-firmware">https://chromium.googlesource.com/chromiumos/third_party/linux-firmware</a>][]]<a href="https://chromium.googlesource.com/chromiumos/third_party/linux-firmware">https://chromium.googlesource.com/chromiumos/third_party/linux-firmware</a></p>
<p>But there is little difference between the filename the driver will
try to load and the filename in the repository.</p>
<p>I had to rename 'iwlwifi-Qu-c0-hr-b0-50.ucode' to
'iwlwifi-Qu-b0-hr-b0-50.ucode'. a</p>
Terminal minimaliste utilisant VTE2019-07-10T00:00:00-04:002019-07-10T00:00:00-04:00Jean Schurgertag:None,2019-07-10:/terminal-minimaliste-utilisant-vte.html<p><a href="file:/images/terminal.png"><img src="file:///images/terminal.png"/></a></p>
<p>La bibliothèque <a href="https://gitlab.gnome.org/GNOME/vte">VTE</a>
fournit un composant graphique d'émulation de terminal. <a href="https://www.python.org/">Python</a> et et <a href="https://developer.gnome.org/gobject/stable/">Gobject</a> rendent
son utilisation vraiment facile. C'est aussi la seule émulation de
terminal que je trouve satisfaisante pour afficher <a href="https://unicode.org/">Unicode</a>. L'illustration simplicime
ci-dessous me sert de terminal quotidiennement.</p>
<p>[[<a href="https://github.com/jeansch/terminal">https://github.com/jeansch/terminal</a>][]]<a href="https://github.com/jeansch/terminal">https://github.com/jeansch …</a></p><p><a href="file:/images/terminal.png"><img src="file:///images/terminal.png"/></a></p>
<p>La bibliothèque <a href="https://gitlab.gnome.org/GNOME/vte">VTE</a>
fournit un composant graphique d'émulation de terminal. <a href="https://www.python.org/">Python</a> et et <a href="https://developer.gnome.org/gobject/stable/">Gobject</a> rendent
son utilisation vraiment facile. C'est aussi la seule émulation de
terminal que je trouve satisfaisante pour afficher <a href="https://unicode.org/">Unicode</a>. L'illustration simplicime
ci-dessous me sert de terminal quotidiennement.</p>
<p>[[<a href="https://github.com/jeansch/terminal">https://github.com/jeansch/terminal</a>][]]<a href="https://github.com/jeansch/terminal">https://github.com/jeansch/terminal</a></p>
Ari Framboise2017-05-26T00:00:00-04:002017-05-26T00:00:00-04:00Jean Schurgertag:None,2017-05-26:/ari-framboise.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5.5Kg</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>0.5Kg</td>
<td>Carapils</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Tardif</td>
<td>-15m</td>
</tr>
</tbody>
</table>
<h2 id="fruits">Fruits</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Fruit</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1.5Kg</td>
<td>Framboises</td>
<td>-5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>BE 134</p>
<h2 id="gravité">Gravité</h2>
<p>GI: 1.051 GF: 1.020</p>
Kenny2017-05-26T00:00:00-04:002017-05-26T00:00:00-04:00Jean Schurgertag:None,2017-05-26:/kenny.html<p><strong>Attention, Kenny à changé son site internet donc ce programme
ne fonctionne plus</strong></p>
<p>C'est ma principale source de pièces détachées d'autos (une scrap /
casse).</p>
<p>Le site internet <a href="http://kennypiecesdautos.com/index.php">Kenny u-pull</a> liste les
"Nouveaux arrivages" de voiture mortes. À en juger par la quantité, il
s'agit plus de la liste complète.</p>
<p>La …</p><p><strong>Attention, Kenny à changé son site internet donc ce programme
ne fonctionne plus</strong></p>
<p>C'est ma principale source de pièces détachées d'autos (une scrap /
casse).</p>
<p>Le site internet <a href="http://kennypiecesdautos.com/index.php">Kenny u-pull</a> liste les
"Nouveaux arrivages" de voiture mortes. À en juger par la quantité, il
s'agit plus de la liste complète.</p>
<p>La recherche dans cette liste n'étant pas pratique, voila un petit
bout de code Python donnant la même liste, mais bien plus facile à
trier.</p>
<pre class="example"><code>#!/usr/bin/env python
import pyquery
dom = pyquery.PyQuery('http://kennypiecesdautos.com/index.php')
print "\n".join(car for car in (" ".join(c
for c in [div.text for div in arrival.findall('div')] if c)
for arrival in dom.find('.recentArrivalPanel ul li')))
</code></pre>
<p>et un exemple du résultat:</p>
<pre class="example"><code>% ./bin/kenny.py | grep -i subaru
2015-04-03 1998 SUBARU OUTBACK
2015-04-03 2001 SUBARU OUTBACK
2015-04-01 2001 SUBARU OUTBACK
2015-04-01 2002 SUBARU IMPREZA
2015-04-01 1998 SUBARU OUTBACK
2015-03-30 1998 SUBARU LEGACY
2015-03-30 1999 SUBARU IMPREZA
2015-03-27 2000 SUBARU LEGACY
2015-03-27 2005 SUBARU FORESTER
2015-03-25 1989 SUBARU JUSTY
2015-03-25 2003 SUBARU OUTBACK
2015-03-25 1998 SUBARU LEGACY
2015-03-23 1998 SUBARU LEGACY
</code></pre>
Liens à propos de Zappa2017-05-26T00:00:00-04:002017-05-26T00:00:00-04:00Jean Schurgertag:None,2017-05-26:/liens-a-propos-de-zappa.html<ul>
<li>Informations à propos de la réédition des CD: <a href="http://www.lukpac.org/~handmade/patio/vinylvscds/2012hotpoop.html">It's
2012: The Hot Poop on the New Zappa Reissues</a></li>
<li>Forum et tracker: <a href="http://www.zappateers.com/">Zappateers</a></li>
<li>Wiki: <a href="http://wiki.killuglyradio.com/wiki/Main_Page">Zappa
Wiki Jawaka</a></li>
<li>Groupe de discussion: <a href="http://fr.groups.yahoo.com/neo/groups/frank_zappa-zutalors/info">Frank
Zappa ! in France</a></li>
<li><a href="https://www.zappa-analysis.com/">FRANK ZAPPA'S MUSICAL
LANGUAGE</a></li>
</ul>
Standards2017-05-26T00:00:00-04:002017-05-26T00:00:00-04:00Jean Schurgertag:None,2017-05-26:/standards.html<p>(les miens)</p>
<h1 id="invitation">Invitation</h1>
<ul>
<li>Compositeur: Bronislaw Kaper</li>
<li>Interprétation: Jaco Pastorius</li>
</ul>
<h1 id="stolen-moments">Stolen Moments</h1>
<ul>
<li>Compositeur: Oliver Nelson</li>
<li>Interprétation: Frank Zappa (dans l'album Broadway the Hard
Way)</li>
</ul>
<h1 id="naima">Naima</h1>
<ul>
<li>Compositeur: John Coltrane</li>
<li>Interprétation: Carlos Santana & John McLaughlin</li>
</ul>
<h1 id="adagio-du-concerto-en-sol-de-ravel">Adagio du concerto en sol de
Ravel</h1>
<ul>
<li>Compositeur: Maurice Ravel</li>
<li>Interprétation: Herbie Hancock (dans l'album "Gershwin's
World")</li>
</ul>
<h1 id="adagio-du-concerto-de-aranjuez">Adagio …</h1><p>(les miens)</p>
<h1 id="invitation">Invitation</h1>
<ul>
<li>Compositeur: Bronislaw Kaper</li>
<li>Interprétation: Jaco Pastorius</li>
</ul>
<h1 id="stolen-moments">Stolen Moments</h1>
<ul>
<li>Compositeur: Oliver Nelson</li>
<li>Interprétation: Frank Zappa (dans l'album Broadway the Hard
Way)</li>
</ul>
<h1 id="naima">Naima</h1>
<ul>
<li>Compositeur: John Coltrane</li>
<li>Interprétation: Carlos Santana & John McLaughlin</li>
</ul>
<h1 id="adagio-du-concerto-en-sol-de-ravel">Adagio du concerto en sol de
Ravel</h1>
<ul>
<li>Compositeur: Maurice Ravel</li>
<li>Interprétation: Herbie Hancock (dans l'album "Gershwin's
World")</li>
</ul>
<h1 id="adagio-du-concerto-de-aranjuez">Adagio du Concerto de
Aranjuez</h1>
<ul>
<li>Compositeur: Joaquín Rodrigo</li>
<li>Interprétation: Chick Corea ("Spain" dans l'album "Return To The
Seventh Galaxy")</li>
</ul>
<h1 id="canción-del-fuego-fatuo-el-amor-brujo">Canción del fuego fatuo
(El amor brujo)</h1>
<ul>
<li>Compositeur: Manuel de Falla</li>
<li>Interprétation: Miles Davis ("Will O' The Wisp" dans l'album
"Sketches Of Spain")</li>
</ul>
<h1 id="summertime">Summertime</h1>
<ul>
<li>Compositeur: George Gershwin</li>
<li>Interprétation: Janis Joplin</li>
</ul>
<h1 id="it-never-entered-my-mind">It Never Entered My Mind</h1>
<ul>
<li>Compositeur: Miles Davis</li>
<li>Interprétation: Miles Davis</li>
</ul>
<h1 id="round-midnight">Round Midnight</h1>
<ul>
<li>Compositeur: Thelonious Monk</li>
<li>Interprétation: Keith Jarret (dans l'album "Whisper Not")</li>
</ul>
<h1 id="so-in-love">So In Love</h1>
<ul>
<li>Compositeur: Chick Corea</li>
<li>Interprétation: Chick Corea (dans l'album "Chick Corea Akoustic
Band")</li>
</ul>
<h1 id="song-to-john">Song To John</h1>
<ul>
<li>Compositeur: Stanley Clarke</li>
<li>Interprétation: Stanley Clarke (dans l'album "Journey To Love")</li>
</ul>
<h1 id="the-days-of-wine-and-roses">The Days Of Wine And Roses</h1>
<ul>
<li>Compositeur: Henry Mancini</li>
<li>Interprétation: Jaco Pastorius</li>
</ul>
<h1 id="oblivion">Oblivion</h1>
<ul>
<li>Compositeur: Astor Piazzolla</li>
<li>Interprétation: Escalandrum (Daniel 'Pipi' Piazzolla)</li>
</ul>
<h1 id="follow-your-heart">Follow Your Heart</h1>
<ul>
<li>Compositeur: John Mclaughlin</li>
<li>Interprétation: Joe Farrell Quartet (dans l'album ""My Goal's
Beyond")</li>
</ul>
<h1 id="lullaby-of-birdland">Lullaby of Birdland</h1>
<ul>
<li>Compositeur: George Shearing</li>
</ul>
<h1 id="moonlight-serenade">Moonlight Serenade</h1>
<ul>
<li>Compositeur: Glenn Miller</li>
</ul>
<h1 id="in-a-sentimental-mood">In A Sentimental Mood</h1>
<ul>
<li>Compositeur: Duke Ellington</li>
</ul>
<h1 id="darn-that-dream">Darn That Dream</h1>
<ul>
<li>Interprétation: Benoît Paradis Trio</li>
</ul>
<h1 id="jitterbug-waltz">Jitterbug Waltz</h1>
<ul>
<li>Interprétation: Chick Corea (dans l'album "Past, Present &
Futures")</li>
</ul>
<h1 id="speak-low">Speak Low</h1>
<ul>
<li>Interprétation: Ella Fitzgerald & Joe Pass</li>
</ul>
<h1 id="girl-talk">Girl Talk</h1>
<ul>
<li>Interprétation: Claude Nougaro (Dansez sur moi)</li>
</ul>
<h1 id="the-look-of-love">The Look Of Love</h1>
<ul>
<li>Compositeur: Burt Bacharach</li>
</ul>
<h1 id="alone-together">Alone Together</h1>
<ul>
<li>Compositeur: Arthur Schwartz</li>
<li>Interprétation: Peggy Lee</li>
</ul>
<h1 id="goodbye-pork-pie-hat-theme-for-lester-young">Goodbye Pork Pie
Hat / Theme For Lester Young</h1>
<ul>
<li>Compositeur: Charles Mingus</li>
<li>Interprétation: Charles Mingus</li>
</ul>
<h1 id="a-night-in-tunisia">A Night In Tunisia</h1>
<ul>
<li>Compositeur: Dizzy Gillespie</li>
</ul>
<h1 id="hot-house">Hot house</h1>
<ul>
<li>Compositeur: Tadd Dameron</li>
<li>Interprétation: Chick Corea, Gary Burton</li>
</ul>
<h1 id="the-way-you-look-tonight">The Way You Look Tonight</h1>
<h1 id="waltz-for-debby">Waltz for Debby</h1>
<ul>
<li>Compositeur: Bill Evans</li>
</ul>
Noire Sure2017-04-17T00:00:00-04:002017-04-17T00:00:00-04:00Jean Schurgertag:None,2017-04-17:/noire-sure.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5.3Kg</td>
<td>Pale</td>
</tr>
<tr class="even">
<td>700g</td>
<td>Orge ~400°L</td>
</tr>
<tr class="odd">
<td>1Kg</td>
<td>Flocons d'orge</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>Malt acide (pendant 20 minute après l'infusion)</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>15g</td>
<td>Citra</td>
<td>60m</td>
</tr>
<tr class="even">
<td>20g</td>
<td>Sorachi maison</td>
<td>40m</td>
</tr>
<tr class="odd">
<td>43g</td>
<td>Saaz</td>
<td>20m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Sorachi maison</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP007</p>
Double Belge Sorachi2017-03-01T00:00:00-05:002017-03-01T00:00:00-05:00Jean Schurgertag:None,2017-03-01:/double-belge-sorachi.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>7Kg</td>
<td>Maris Otter</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>50g</td>
<td>Nuget</td>
<td>1h50</td>
</tr>
<tr class="even">
<td>310g</td>
<td>Sorachi maison 1an de congelateur</td>
<td>1h40</td>
</tr>
<tr class="odd">
<td>1Kg</td>
<td>Sorachi maison Wet</td>
<td>20m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP530</p>
<h2 id="gravité">Gravité</h2>
<ul>
<li>GI: 1.085 (refractometre)</li>
<li>GF: 1.048 (refractometre) <2017-09-19 mar></li>
</ul>
Récolte2016-09-25T00:00:00-04:002016-09-25T00:00:00-04:00Jean Schurgertag:None,2016-09-25:/recolte.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>6Kg</td>
<td>Franqulin</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>56g</td>
<td>Sorachi Maison</td>
<td>+0m</td>
</tr>
<tr class="even">
<td>56g</td>
<td>Sorachi Maison</td>
<td>+10m</td>
</tr>
<tr class="odd">
<td>112g</td>
<td>Sorachi Maison</td>
<td>+20m</td>
</tr>
<tr class="even">
<td>168g</td>
<td>Sorachi Maison</td>
<td>+30m</td>
</tr>
<tr class="odd">
<td>280g</td>
<td>Sorachi Maison</td>
<td>+45m</td>
</tr>
<tr class="even">
<td>336g</td>
<td>Sorachi Maison</td>
<td>+50m</td>
</tr>
<tr class="odd">
<td>392g</td>
<td>Sorachi Maison</td>
<td>+60m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-04</p>
<h2 id="gravité">Gravité</h2>
<p>G.I. 1.053</p>
I'am a Debian Maintainer2016-06-14T00:00:00-04:002016-06-14T00:00:00-04:00Jean Schurgertag:None,2016-06-14:/iam-a-debian-maintainer.html<p>Thanks to Emilio !</p>
<h1 id="add-new-dm-key-0x16099e15596ae928-jean-schurger-rt-5123">Add new
DM key 0x16099E15596AE928 (Jean Schurger) (RT #5123)</h1>
<p>Add new DM key 0x16099E15596AE928 as requested by DM team (anibal)
Signed by existing DD keys: E4B6813D 7B75921E Agreement: <a href="https://lists.debian.org/debian-newmaint/2014/05/msg00000.html">https://lists.debian.org/debian-newmaint/2014/05/msg00000.html</a>
Advocates: pochu - <a href="https://lists.debian.org/debian-newmaint/2014/06/msg00001.html">https://lists.debian.org/debian-newmaint/2014/06/msg00001 …</a></p><p>Thanks to Emilio !</p>
<h1 id="add-new-dm-key-0x16099e15596ae928-jean-schurger-rt-5123">Add new
DM key 0x16099E15596AE928 (Jean Schurger) (RT #5123)</h1>
<p>Add new DM key 0x16099E15596AE928 as requested by DM team (anibal)
Signed by existing DD keys: E4B6813D 7B75921E Agreement: <a href="https://lists.debian.org/debian-newmaint/2014/05/msg00000.html">https://lists.debian.org/debian-newmaint/2014/05/msg00000.html</a>
Advocates: pochu - <a href="https://lists.debian.org/debian-newmaint/2014/06/msg00001.html">https://lists.debian.org/debian-newmaint/2014/06/msg00001.html</a></p>
Ma ZX-11 a son blog2016-03-29T00:00:00-04:002016-03-29T00:00:00-04:00Jean Schurgertag:None,2016-03-29:/ma-zx-11-a-son-blog.html<p>Ce blog me sert à noter les entretiens mécaniques effectués sur ma
ZX-11, et ce qui y touche plus ou moins.</p>
<h1 id="inspection-rapide-des-carbus">Inspection rapide des carbus</h1>
<p>Les carbus sont un peu sales. Les aiguilles sont impeccables, par
contre, les pointeaux ont fait leur temps, d'ailleurs, c'est curieux,
ils n'ont pas la …</p><p>Ce blog me sert à noter les entretiens mécaniques effectués sur ma
ZX-11, et ce qui y touche plus ou moins.</p>
<h1 id="inspection-rapide-des-carbus">Inspection rapide des carbus</h1>
<p>Les carbus sont un peu sales. Les aiguilles sont impeccables, par
contre, les pointeaux ont fait leur temps, d'ailleurs, c'est curieux,
ils n'ont pas la même usure.</p>
<p><a href="file:/images/carbus_1.jpg"><img src="file:///images/carbus_1.jpg"/></a></p>
<p><a href="file:/images/carbus_2.jpg"><img src="file:///images/carbus_2.jpg"/></a></p>
<h1 id="bilan-post-essais.">Bilan post essais.</h1>
<p>Mais d'où vient cette huile ?</p>
<p>De toute façon, j'avais prévu de démonter dimanche :p</p>
<h1 id="première-balade">Première balade</h1>
<p>Première sortie, malgré une météo annoncée orageuse. Premiers vrais
essais, sur de grandes routes désertes de campagne ;)</p>
<p><a href="file:/images/sortie_1.jpg"><img src="file:///images/sortie_1.jpg"/></a></p>
<p><a href="file:/images/sortie_2.jpg"><img src="file:///images/sortie_2.jpg"/></a></p>
<p><a href="file:/images/sortie_3.jpg"><img src="file:///images/sortie_3.jpg"/></a></p>
<h1 id="jeudi-jour-décisif.">Jeudi, jour décisif.</h1>
<p>La nuit porte conseil (parfois). Jeudi, je me décide pour la ZX-11.
J'appel le propriétaire qui m'informe que je viens de souffler la place
à un autre client.</p>
<p>Je vais la chercher le soir même, retour sous une petite pluie, et
découverte des première sensations.</p>
<p>Elle est plus légère (j'ai vérifié après), plus douce, et moins
bruyante que le tom.</p>
<p>Il va falloir travailler un peu sur les carbus.</p>
<p>Pense-bête: 120000km == 37000km au compteur.</p>
<h1 id="zx-11-ou-zrx">ZX-11 ou ZRX</h1>
<p>Coïncidence incroyable !</p>
<p>Ça fait un moment que je surveille kijiji (et autres sites) à l'affût
d'une ZX-11, ou d'une ZRX.</p>
<p>Cette semaine, pas moins de deux annonces fraîchement publiées sur
kijiji m'interpellent ! et les deux sont dans mes prix.</p>
<p>Habituellement, dans mon budget, on trouve des ZX-11 cassées depuis
quelques années, et très loin. Des ZRX, on n'en trouve simplement pas,
c'est trop cher.</p>
<p>Donc, mercredi, je suis allé inspecter une ZRX légèrement accidentée,
elle n'avait soit disant pas tourné depuis 3 ans, à force de persuasion,
de gymnastique, et de bidouillage, j'arrive à faire démarrer l'engin,
sous les yeux émus du propriétaire. Mais voila, elle est légèrement
accidentée, et ce n'est pas que cosmétique. La commande hydraulique de
l'embrayage fuit, et une fumée mystérieuse s'échappe du collecteur
d'échappement (mystérieuse parce qu'elle n'a pas l'odeur adéquate).</p>
<p>Plus tard, la même soirée, je faisais connaissance avec la ZX-11. Bon
état, 120000km !!! mais entretenue (en particulier les freins et les
amortisseurs).</p>
<h1 id="avant-la-zx-11">Avant la ZX-11</h1>
<p>Avant ma ZX-11, j'avais un tomcat (une ZX-10, quoi de plus normal).
Et ses couleurs étaient parfaites !</p>
<p><a href="file:/images/zx-10.jpg"><img src="file:///images/zx-10.jpg"/></a></p>
Updates en vrac2016-03-29T00:00:00-04:002016-03-29T00:00:00-04:00Jean Schurgertag:None,2016-03-29:/updates-en-vrac.html<h2 id="nouvelle-zx-11">Nouvelle ZX-11</h2>
<p>J'ai trouvé une ZX-11 "moteur brisé" pour un bouchée de pain. 1998,
40000Km, carter d'huile modifié (oil bypass kit Mr Turbo), ligne
d'échappement Muzzy, Kit carburateurs stage 1. La restauration à
commencé !</p>
<h2 id="entretien-dété-2015">Entretien d'été 2015</h2>
<ul>
<li>Nouveau pneus: Michelin Pilot Road 2</li>
<li>Nouvelles plaquettes à l'avant</li>
<li>Jeu aux soupapes …</li></ul><h2 id="nouvelle-zx-11">Nouvelle ZX-11</h2>
<p>J'ai trouvé une ZX-11 "moteur brisé" pour un bouchée de pain. 1998,
40000Km, carter d'huile modifié (oil bypass kit Mr Turbo), ligne
d'échappement Muzzy, Kit carburateurs stage 1. La restauration à
commencé !</p>
<h2 id="entretien-dété-2015">Entretien d'été 2015</h2>
<ul>
<li>Nouveau pneus: Michelin Pilot Road 2</li>
<li>Nouvelles plaquettes à l'avant</li>
<li>Jeu aux soupapes</li>
</ul>
Transporter sa collection de musique de Rdio à Google Play Music2015-11-23T00:00:00-05:002015-11-23T00:00:00-05:00Jean Schurgertag:None,2015-11-23:/transporter-sa-collection-de-musique-de-rdio-a-google-play-music.html<p>C'est la fin de <a href="http://rdio.com">Rdio</a> :(</p>
<p>[[<a href="http://blog.rdio.com/us/2015/11/important-news-from-rdio.html">http://blog.rdio.com/us/2015/11/important-news-from-rdio.html</a>][]]<a href="http://blog.rdio.com/us/2015/11/important-news-from-rdio.html">http://blog.rdio.com/us/2015/11/important-news-from-rdio.html</a></p>
<p>Voila un moyen d'exporter la collection de Rdio à Google Play
Music.</p>
<h1 id="créer-une-application-dans-le-portail-développeurs-de-rdio-en">Créer
une "application" dans le portail développeurs de rdio en</h1>
<p>suivant les indications.</p>
<p>[[<a href="http://www.rdio.com/developers/">http://www …</a></p><p>C'est la fin de <a href="http://rdio.com">Rdio</a> :(</p>
<p>[[<a href="http://blog.rdio.com/us/2015/11/important-news-from-rdio.html">http://blog.rdio.com/us/2015/11/important-news-from-rdio.html</a>][]]<a href="http://blog.rdio.com/us/2015/11/important-news-from-rdio.html">http://blog.rdio.com/us/2015/11/important-news-from-rdio.html</a></p>
<p>Voila un moyen d'exporter la collection de Rdio à Google Play
Music.</p>
<h1 id="créer-une-application-dans-le-portail-développeurs-de-rdio-en">Créer
une "application" dans le portail développeurs de rdio en</h1>
<p>suivant les indications.</p>
<p>[[<a href="http://www.rdio.com/developers/">http://www.rdio.com/developers/</a>][]]<a href="http://www.rdio.com/developers/">http://www.rdio.com/developers/</a></p>
<p>Prendre en note le <strong>CLIENT<sub>ID</sub></strong> et le
<strong>CLIENT<sub>SECRET</sub></strong></p>
<p>(pour la suite des opérations, placer ces variables dans votre
environnement)</p>
<pre class="example"><code>export RDIO_CLIENT_ID=xxx
export RDIO_CLIENT_SECRET=yyy
</code></pre>
<h1 id="créer-un-environnement-python-et-y-installer-de-quoi-importer-la">Créer
un environnement <strong>Python</strong> et y installer de quoi importer
la</h1>
<p>collection</p>
<pre class="example"><code>virtualenv rdio2gpm
source rdio2gpm/bin/activate
pip install git+https://github.com/rdio/rdio-python
</code></pre>
<h1 id="exporter-la-collection">Exporter la collection</h1>
<p>(à partir de l'interpréteur python)</p>
<pre class="example"><code>import os
from rdioapi import Rdio
r = Rdio(os.environ.get('RDIO_CLIENT_ID'),
os.environ.get('RDIO_CLIENT_SECRET'), {})
print r.begin_authentication()
raw_input()
# à ce moment là, ouvrir le lien, et entrer le code indiqué
r.complete_authentication()
open("out.txt", "w").write(
"\n".join("%s|%s" % (a['artist'], a['name'])
for a in r.getAlbumsInCollection()).encode('utf-8'))
</code></pre>
<h1 id="installer-de-quoi-importer-la-collection">Installer de quoi
importer la collection</h1>
<pre class="example"><code>virtualenv rdio2gpm
source rdio2gpm/bin/activate
pip install gmusicapi
</code></pre>
<p>et configurer l'environnement pour l'importable</p>
<p>(pour la suite des opérations, placer ces variables dans votre
environnement)</p>
<pre class="example"><code>export GOOGLE_USERNAME=xxx
export GOOGLE_PASSWORD=yyy
</code></pre>
<h1 id="écrire-le-script-dimportation-suivant">Écrire le script
d'importation suivant</h1>
<p>(le sauver dans <strong>gpm<sub>import</sub>.py</strong>)</p>
<pre class="example"><code>import os
from gmusicapi import Mobileclient
api = Mobileclient()
api.login(os.environ.get('GOOGLE_USERNAME'),
os.environ.get('GOOGLE_PASSWORD'),
Mobileclient.FROM_MAC_ADDRESS)
def get_album_ids(artist, album):
aa = api.search_all_access(query=artist)
artist_ids = set(a['artist']['artistId'] for a in aa['artist_hits'])
aa = api.search_all_access(query=album)
for a in aa['album_hits']:
if set(a['album']['artistId']).intersection(artist_ids):
yield a['album']['albumId']
def add_album(album_id):
map(api.add_aa_track, [t['storeId'] for t in
api.get_album_info(album_id)['tracks']])
# exemple d'import:
# map(add_album, get_album_ids("Frank Zappa", "in New York"))
</code></pre>
<h1 id="utiliser-le-script-dimport-à-partir-de-la-collection-exportée">Utiliser
le script d'import à partir de la collection exportée</h1>
<p>(à partir d'un interpréteur python)</p>
<pre class="example"><code>from gpm_import import add_album, get_album_ids
for artist, album in [l.strip().split('|') for l in open("out.txt").readlines()]:
try:
map(add_album, get_album_ids(artist, album))
print "Imported '%s': '%s'" % (artist, album)
except Exception, e:
print "Failed '%s': '%s', %s" % (artist, album, e)
</code></pre>
Porter2015-11-22T00:00:00-05:002015-11-22T00:00:00-05:00Jean Schurgertag:None,2015-11-22:/porter.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5.75</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>500g</td>
<td>Carafa 3</td>
</tr>
<tr class="odd">
<td>500g</td>
<td>Biscuit</td>
</tr>
<tr class="even">
<td>250g</td>
<td>Crystal 20</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Galaxy</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Galaxy</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>60g</td>
<td>Galaxy</td>
<td>10m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Centenial</td>
<td>Keg</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-33</p>
IPA Sorachi2015-11-07T00:00:00-05:002015-11-07T00:00:00-05:00Jean Schurgertag:None,2015-11-07:/ipa-sorachi.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>6Kg</td>
<td>Pils</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>20g</td>
<td>Sorachi maison</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Sorachi maison</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>50g</td>
<td>Sorachi maison</td>
<td>10m</td>
</tr>
<tr class="even">
<td>100g</td>
<td>Sorachi maison</td>
<td>Keg</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
Identifier les paquets suspects installés sur votre Debian2015-09-01T00:00:00-04:002015-09-01T00:00:00-04:00Jean Schurgertag:None,2015-09-01:/identifier-les-paquets-suspects-installes-sur-votre-debian.html<p>Il y a maintes raisons (souvent mauvaise) pour se retrouver avec des
paquets installés sur un système Debian (ou basé sur Debian) dont on a
perdu l'origine.</p>
<h1 id="le-script-suivant-permet-de-les-lister">Le script suivant permet
de les lister</h1>
<pre class="example"><code>#!/usr/bin/env python
import apt
print "\n".join(p.name for p in apt.Cache …</code></pre><p>Il y a maintes raisons (souvent mauvaise) pour se retrouver avec des
paquets installés sur un système Debian (ou basé sur Debian) dont on a
perdu l'origine.</p>
<h1 id="le-script-suivant-permet-de-les-lister">Le script suivant permet
de les lister</h1>
<pre class="example"><code>#!/usr/bin/env python
import apt
print "\n".join(p.name for p in apt.Cache() if p.installed
and not p.versions[p.installed].origins[0].trusted)
</code></pre>
<h1 id="et-si-on-désire-seulement-obtenir-ceux-dont-une-version-convenable-est">Et
si on désire seulement obtenir ceux dont une version convenable est</h1>
<p>disponible</p>
<pre class="example"><code>#!/usr/bin/env python
import apt
print "\n".join(p.name for p in apt.Cache() if p.installed
and not p.versions[p.installed].origins[0].trusted
and len(p.versions) > 1)
</code></pre>
Touches multimédia dans Emacs avec D-Bus et Gnome2015-06-10T00:00:00-04:002015-06-10T00:00:00-04:00Jean Schurgertag:None,2015-06-10:/touches-multimedia-dans-emacs-avec-d-bus-et-gnome.html<p>J'utilise l'environnement de bureau <a href="http://gnome.org">Gnome</a> et l'éditeur de textes <a href="http://www.gnu.org/software/emacs/">Emacs</a>.</p>
<p>Comme de nombreux utilisateurs de cet éditeur, j'ai tendance lui
faire faire un peu tout et n'importe quoi, y compris jouer de la musique
(en particulier parce que j'aime bien <em>dired</em> pour gérer la
collection).</p>
<p>Il existe de nombreuses façons …</p><p>J'utilise l'environnement de bureau <a href="http://gnome.org">Gnome</a> et l'éditeur de textes <a href="http://www.gnu.org/software/emacs/">Emacs</a>.</p>
<p>Comme de nombreux utilisateurs de cet éditeur, j'ai tendance lui
faire faire un peu tout et n'importe quoi, y compris jouer de la musique
(en particulier parce que j'aime bien <em>dired</em> pour gérer la
collection).</p>
<p>Il existe de nombreuses façons de faire jouer de la musique à Emacs.
J'utilise <a href="http://www.gnu.org/software/emms/">Emms</a>, qui ne
requiert quasiment aucune configuration, et n'oblige pas la maintenance
d'une base de donnée musicale. De plus, il se débrouille tout seul pour
trouver les outils nécessaires à la lecture des fichiers audio sur le
système, sans plus d'indication.</p>
<p>Le clavier que j'utilise est doté de touches multimédia agréablement
placées. Ces touches génèrent les évènements X bien connus
<em>XF86Audio*</em> et sont déjà facile à assigner aux fonctions de
Emms, mais je voulais aller un peu plus loin.</p>
<p>Gnome intègre de base une gestion des touches multimédia, qu'il
transmet via D-Bus aux applications qui le demandent. Il permet aussi de
le faire lorsque l'écran est verrouillé !</p>
<p>Emacs supporte D-Bus, le tour est joué !</p>
<pre class="example"><code>(require 'dbus)
(defvar gnome-mmkeys-pressed-hook nil)
(defun gnome-mmkeys-callback (from key)
(run-hook-with-args 'gnome-mmkeys-pressed-hook key))
(setq gnome-mmkeys-registration nil)
(defun enable-gnome-mmkeys()
(interactive)
(when (not gnome-mmkeys-registration)
(dbus-call-method
"org.gnome.SettingsDaemon"
"/org/gnome/SettingsDaemon/MediaKeys"
"org.gnome.SettingsDaemon.MediaKeys"
"GrabMediaPlayerKeys" "Emacs" 0)
(setq gnome-mmkeys-registration
(dbus-register-signal
"org.gnome.SettingsDaemon"
"/org/gnome/SettingsDaemon/MediaKeys"
"org.gnome.SettingsDaemon.MediaKeys"
"MediaPlayerKeyPressed"
'gnome-mmkeys-callback))))
(defun disable-gnome-mmkeys()
(interactive)
(when gnome-mmkeys-registration
(dbus-unregister-object gnome-mmkeys-registration)
(setq gnome-mmkeys-registration nil)))
;; Utilisation pour Emms
(defun emms-bind-gnome-mmkeys (key)
(cond ((string= "Next" key)
(emms-next))
((string= "Play" key)
(emms-pause))
((string= "Previous" key)
(emms-previous))))
(add-hook 'gnome-mmkeys-pressed-hook 'emms-bind-gnome-mmkeys)
</code></pre>
Variation sur la carte 'complex' de Sauerbraten2015-04-09T00:00:00-04:002015-04-09T00:00:00-04:00Jean Schurgertag:None,2015-04-09:/variation-sur-la-carte-complex-de-sauerbraten.html<p>Il y a quelques années, j'ai perdu beaucoup de temps à jouer avec
l'éditeur intégré à <a href="http://sauerbraten.org/">Sauerbraten</a>.</p>
<p>Voilà l'une de mes créations, une variation sur la première carte du
jeu</p>
<p>On peut y trouver:</p>
<ul>
<li><p>D'innombrables passages secrets, tremplins, et cachettes</p></li>
<li><p>Une piscine</p></li>
<li><p>Une petite maison</p></li>
<li><p>Une jardin de champignons</p></li>
<li><p>Deux …</p></li></ul><p>Il y a quelques années, j'ai perdu beaucoup de temps à jouer avec
l'éditeur intégré à <a href="http://sauerbraten.org/">Sauerbraten</a>.</p>
<p>Voilà l'une de mes créations, une variation sur la première carte du
jeu</p>
<p>On peut y trouver:</p>
<ul>
<li><p>D'innombrables passages secrets, tremplins, et cachettes</p></li>
<li><p>Une piscine</p></li>
<li><p>Une petite maison</p></li>
<li><p>Une jardin de champignons</p></li>
<li><p>Deux labyrinthes</p></li>
<li><p>De très nombreux étages</p></li>
<li><p>De quoi mettre votre dextérité à l'épreuve</p>
<p><a href="./complex.ogz">Télécharger</a></p>
<p><a href="file:/images/sauerbraten_1.png"><img src="file:///images/sauerbraten_1.png"/></a> <a href="file:/images/sauerbraten_2.png"><img src="file:///images/sauerbraten_2.png"/></a> <a href="file:/images/sauerbraten_3.png"><img src="file:///images/sauerbraten_3.png"/></a> <a href="file:/images/sauerbraten_4.png"><img src="file:///images/sauerbraten_4.png"/></a> <a href="file:/images/sauerbraten_5.png"><img src="file:///images/sauerbraten_5.png"/></a> <a href="file:/images/sauerbraten_6.png"><img src="file:///images/sauerbraten_6.png"/></a> <a href="file:/images/sauerbraten_7.png"><img src="file:///images/sauerbraten_7.png"/></a> <a href="file:/images/sauerbraten_8.png"><img src="file:///images/sauerbraten_8.png"/></a></p></li>
</ul>
Notification basique pour Maildir2015-02-10T00:00:00-05:002015-02-10T00:00:00-05:00Jean Schurgertag:None,2015-02-10:/notification-basique-pour-maildir.html<p>Je collecte mes courriels avec <strong>offlineimap</strong> et les
lis avec <strong>mu/mu4e</strong>. L'ensemble fonctionne bien et
rapidement, mais il me manquait les notifications de nouveau courriel.
Voila une solution basique mais efficace.</p>
<pre class="example"><code>#!/usr/bin/env python
import os
import dbus
from email.parser import Parser
from pyinotify import WatchManager, Notifier …</code></pre><p>Je collecte mes courriels avec <strong>offlineimap</strong> et les
lis avec <strong>mu/mu4e</strong>. L'ensemble fonctionne bien et
rapidement, mais il me manquait les notifications de nouveau courriel.
Voila une solution basique mais efficace.</p>
<pre class="example"><code>#!/usr/bin/env python
import os
import dbus
from email.parser import Parser
from pyinotify import WatchManager, Notifier
from pyinotify import ProcessEvent, EventsCodes
INBOX = os.path.join(os.getenv('HOME'), 'Maildir', 'INBOX', 'new')
def notify(summary, body='', app_name='', app_icon='',
timeout=5000, actions=[], hints=[], replaces_id=0):
bus_name = 'org.freedesktop.Notifications'
dbus.Interface(dbus.SessionBus().get_object(
bus_name, '/org/freedesktop/Notifications'),
bus_name).Notify(
app_name, replaces_id, app_icon,
summary, body, actions, hints, timeout)
class PTmp(ProcessEvent):
def process_default(self, event):
email = Parser().parse(open(event.pathname))
notify("Nouveau courriel de '%s'" % email.get('From'),
email.get('Subject'))
if __name__ == "__main__":
wm = WatchManager()
FLAGS = EventsCodes.ALL_FLAGS
mask = FLAGS['IN_MOVED_TO']
notifier = Notifier(wm, PTmp())
wm.add_watch(INBOX, mask, rec=True, auto_add=True)
notifier.loop()
</code></pre>
Fumée2015-02-01T00:00:00-05:002015-02-01T00:00:00-05:00Jean Schurgertag:None,2015-02-01:/fumee.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td></td>
<td>Noir</td>
</tr>
<tr class="even">
<td></td>
<td>Peat</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Legacy</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Legacy</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>40g</td>
<td>Legacy</td>
<td>Fermentation secondaire</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP-01</p>
Torréfier un serveur SSH2015-01-06T00:00:00-05:002015-01-06T00:00:00-05:00Jean Schurgertag:None,2015-01-06:/torrefier-un-serveur-ssh.html<ul>
<li><a href="#bloquer-ssh-sauf-dans-le-réseau-local-192.168.1.024">Bloquer SSH
(sauf dans le réseau local 192.168.1.0/24)</a></li>
<li><a href="#cest-lent-mosh">C'est lent ! Mosh ?</a></li>
<li><a href="#éviter-que-connect-ne-demande-un-mot-de-passe-qui-nexiste-pas">Éviter
que connect ne demande un mot de passe qui n'existe pas</a></li>
</ul>
<p><a href="file:/images/tor-ssh.png"><img src="file:///images/tor-ssh.png"/></a></p>
<p>L'idée est de cacher un <a href="http://www.openssh.com/">serveur
SSH</a> derrière un service <a href="https://www.torproject.org/">Tor</a> déjà installé, le but étant
de pouvoir y accéder, mais de ne …</p><ul>
<li><a href="#bloquer-ssh-sauf-dans-le-réseau-local-192.168.1.024">Bloquer SSH
(sauf dans le réseau local 192.168.1.0/24)</a></li>
<li><a href="#cest-lent-mosh">C'est lent ! Mosh ?</a></li>
<li><a href="#éviter-que-connect-ne-demande-un-mot-de-passe-qui-nexiste-pas">Éviter
que connect ne demande un mot de passe qui n'existe pas</a></li>
</ul>
<p><a href="file:/images/tor-ssh.png"><img src="file:///images/tor-ssh.png"/></a></p>
<p>L'idée est de cacher un <a href="http://www.openssh.com/">serveur
SSH</a> derrière un service <a href="https://www.torproject.org/">Tor</a> déjà installé, le but étant
de pouvoir y accéder, mais de ne pas l'exposer.</p>
<h2 id="configuration-de-tor">Configuration de Tor</h2>
<p>Il suffit de configurer un <strong>HiddenService</strong> sur le port
22. Inscrire dans le ficher de configuration de <strong>tor</strong>
(puis redémarrer <strong>tor</strong>):</p>
<pre class="example"><code>HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 22 127.0.0.1:22
</code></pre>
<p>Ensuite, relever le "hostname" qui aura été généré en lisant le
fichier "/var/lib/tor/hidden<sub>service</sub>/hostname". Il devrait
ressembler à quelque chose comme "hurlub3rlu.onion" c'est l'adresse à
utiliser avec le client SSH.</p>
<h2 id="configuration-du-client-ssh">Configuration du client SSH</h2>
<p>OpenSSH ne sait pas se connecter à une adresse en '.onion'. Du côté
client, on a aussi besoin d'installer <strong>tor</strong>, et au
minimum de le configurer comme proxy SOCKS5. Une fois que le service
<strong>tor</strong> côté client est fonctionnel, il faut configurer
<strong>ssh</strong> pour l'utiliser. Une façon de faire est d'utiliser
<strong>connect-proxy</strong> (donc, l'installer), et indiquer de
l'utiliser dans "~/.ssh/config":</p>
<pre class="example"><code>Host cachecache
HostName hurlub3rlu.onion
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect -S localhost:9050 %h %p
</code></pre>
<h2 id="bonus">Bonus</h2>
<h3 id="bloquer-ssh-sauf-dans-le-réseau-local-192.168.1.024">Bloquer SSH
(sauf dans le réseau local 192.168.1.0/24)</h3>
<pre class="example"><code>iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
</code></pre>
<h3 id="cest-lent-mosh">C'est lent ! Mosh ?</h3>
<p>Malheureusement <a href="https://mosh.mit.edu/">Mosh</a> ne peut pas
fonctionner de cette façon, seul TCP est torréfié, et
<strong>mosh</strong> utilise UDP.</p>
<h3 id="éviter-que-connect-ne-demande-un-mot-de-passe-qui-nexiste-pas">Éviter
que <strong>connect</strong> ne demande un mot de passe qui n'existe
pas</h3>
<pre class="example"><code>export SOCKS5_PASSWORD=
</code></pre>
Py-Asterisk maintainer2015-01-04T00:00:00-05:002015-01-04T00:00:00-05:00Jean Schurgertag:None,2015-01-04:/py-asterisk-maintainer.html<p>I'm honnored to succeed David Wilson as <a href="https://github.com/jeansch/py-asterisk">Py-Asterisk</a>
maintainer.</p>
<p>Py-Asterisk is a small Python module to interact with the <a href="https://www.asterisk.org/">Asterisk</a> PBX.</p>
IPA Maris Otter2015-01-01T00:00:00-05:002015-01-01T00:00:00-05:00Jean Schurgertag:None,2015-01-01:/ipa-maris-otter.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>7Kg</td>
<td>Maris Otter</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>50g</td>
<td>Junga</td>
<td>15m</td>
</tr>
<tr class="even">
<td>50g</td>
<td>Junga</td>
<td>0m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP-051</p>
Changer de sortie 'pulseaudio' en ligne de commande mais facilement2014-05-16T00:00:00-04:002014-05-16T00:00:00-04:00Jean Schurgertag:None,2014-05-16:/changer-de-sortie-pulseaudio-en-ligne-de-commande-mais-facilement.html<ul>
<li><a href="#lister-les-sorties">Lister les sorties</a></li>
<li><a href="#choisir-une-sortie-par-son-numéro">Choisir une sortie par
son numéro</a></li>
<li><a href="#choisir-une-sortie-par-son-nom">Choisir une sortie par son
nom</a></li>
</ul>
<h1 id="problématique">Problématique</h1>
<p>J'ai souvent besoin de changer sur quel matériel je veux que le son
de mon ordinateur soit joué. En général, j'ai le choix entre la carte
son intégrée à mon laptop, la carte son …</p><ul>
<li><a href="#lister-les-sorties">Lister les sorties</a></li>
<li><a href="#choisir-une-sortie-par-son-numéro">Choisir une sortie par
son numéro</a></li>
<li><a href="#choisir-une-sortie-par-son-nom">Choisir une sortie par son
nom</a></li>
</ul>
<h1 id="problématique">Problématique</h1>
<p>J'ai souvent besoin de changer sur quel matériel je veux que le son
de mon ordinateur soit joué. En général, j'ai le choix entre la carte
son intégrée à mon laptop, la carte son USB de meilleur qualité, et des
enceintes branchées sur un ordinateur distant configuré pour accepter
les connections 'pulseaudio'</p>
<p>Pulseaudio fournit un outil en ligne de commande: 'pacmd' mais il
n'est pas pratique à utiliser. Voila un petit script qui se charge de
lister les sorties audio disponibles et de choisir celle à utiliser par
défaut. En bonus, il indique aussi à 'pulseaudio' de changer la sortie
des applications en cours de lecture.</p>
<h1 id="script">Script</h1>
<pre class="example"><code>#!/usr/bin/env python
import sys
import subprocess
default_index = None
current_sink = None
outputs = {}
sinks, _ = subprocess.Popen('pacmd list-sinks', shell=True,
stdout=subprocess.PIPE).communicate()
for line in sinks.split('\n'):
if line.startswith(' index'):
index = line.split(':')[1].strip()
current_index = index
if line.startswith(' * index'):
index = line.split(':')[1].strip()
default_index = index
current_index = index
if line.startswith("\tname:"):
name = line.split(':')[1].strip()
if current_index:
outputs[current_index] = name
to_move = set()
inputs, _ = subprocess.Popen('pacmd list-sink-inputs', shell=True,
stdout=subprocess.PIPE).communicate()
for line in inputs.split('\n'):
if line.startswith(' index'):
index = line.split(':')[1].strip()
to_move.add(index)
if len(sys.argv) > 1:
selected = sys.argv[1].lower()
if selected not in outputs.keys():
for index, output in outputs.items():
if selected in output.lower():
selected = index
break
subprocess.call(["pacmd", "set-default-sink", selected])
for input in to_move:
subprocess.call(["pacmd", "move-sink-input", input, selected])
else:
for index, output in outputs.items():
print "%s %s %s" % (index, output,
"SELECTED" if index == default_index else "")
</code></pre>
<h1 id="utilisation">Utilisation</h1>
<h2 id="lister-les-sorties">Lister les sorties</h2>
<pre class="example"><code>jeansch@blackpage:~/tmp (0) % sso
1 <alsa_output.pci-0000_00_1b.0.analog-stereo>
32 <tunnel.hop.local.alsa_output.pci-0000_00_1b.0.analog-stereo>
33 <alsa_output.usb-Focusrite_Scarlett_2i2_USB-00-USB.analog-stereo> SELECTED
</code></pre>
<h2 id="choisir-une-sortie-par-son-numéro">Choisir une sortie par son
numéro</h2>
<pre class="example"><code>jeansch@blackpage:~/tmp (0) % sso 33
</code></pre>
<h2 id="choisir-une-sortie-par-son-nom">Choisir une sortie par son
nom</h2>
<pre class="example"><code>jeansch@blackpage:~/tmp (0) % sso focus
</code></pre>
Références de pièces (la liste s'allonge !)2014-04-02T00:00:00-04:002014-04-02T00:00:00-04:00Jean Schurgertag:None,2014-04-02:/references-de-pieces-la-liste-sallonge.html<table>
<thead>
<tr class="header">
<th>Designation</th>
<th>Qty</th>
<th>Ref</th>
<th>État</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Vis culasse contre bloc-cylindre</td>
<td>2</td>
<td>92001-1899</td>
<td>Manquant</td>
</tr>
<tr class="even">
<td>Segments</td>
<td>4</td>
<td>13008-1152</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Joint sous bloc cylindre</td>
<td>1</td>
<td>11009-1847</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Pistons</td>
<td>4</td>
<td>13001-1397</td>
<td>À nettoyer</td>
</tr>
<tr class="odd">
<td>Joint carter allumage</td>
<td>1</td>
<td>11060-1695</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Vis carter allumage</td>
<td>1</td>
<td>92002-1343</td>
<td>Manquant</td>
</tr>
<tr class="odd">
<td>Vis axe moteur</td>
<td>1</td>
<td>92150-1156</td>
<td>Manquant</td>
</tr>
<tr class="even">
<td>Tendeur de …</td></tr></tbody></table><table>
<thead>
<tr class="header">
<th>Designation</th>
<th>Qty</th>
<th>Ref</th>
<th>État</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Vis culasse contre bloc-cylindre</td>
<td>2</td>
<td>92001-1899</td>
<td>Manquant</td>
</tr>
<tr class="even">
<td>Segments</td>
<td>4</td>
<td>13008-1152</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Joint sous bloc cylindre</td>
<td>1</td>
<td>11009-1847</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Pistons</td>
<td>4</td>
<td>13001-1397</td>
<td>À nettoyer</td>
</tr>
<tr class="odd">
<td>Joint carter allumage</td>
<td>1</td>
<td>11060-1695</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Vis carter allumage</td>
<td>1</td>
<td>92002-1343</td>
<td>Manquant</td>
</tr>
<tr class="odd">
<td>Vis axe moteur</td>
<td>1</td>
<td>92150-1156</td>
<td>Manquant</td>
</tr>
<tr class="even">
<td>Tendeur de chaine d'alternateur</td>
<td>1</td>
<td>39170-1059</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Chaine d'alternateur</td>
<td>1</td>
<td>92057-1209</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Tendeur de chaine de transmission</td>
<td>1</td>
<td>12048-1113</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Joint de tendeur</td>
<td>1</td>
<td>11009-1858</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Joint carter d'embrayage</td>
<td>1</td>
<td>11009-1860</td>
<td>Manquant</td>
</tr>
<tr class="odd">
<td>Joint transmission</td>
<td>1</td>
<td>11009-1982</td>
<td>À remplacer</td>
</tr>
<tr class="even">
<td>Joints de puits de bougies</td>
<td>4</td>
<td>11009-1725</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Joints de Banjo 'T'</td>
<td>1</td>
<td>11009-1376</td>
<td>À remplacer ou manquants</td>
</tr>
<tr class="even">
<td>Joints de Banjo 'Pipe'</td>
<td>4</td>
<td>11009-1376</td>
<td>À remplacer ou manquants</td>
</tr>
<tr class="odd">
<td>Banjo radiateur (petit)</td>
<td>2</td>
<td>11009-1344</td>
<td>À remplacer ou manquants</td>
</tr>
<tr class="even">
<td>Banjo radiateur (gros)</td>
<td>9</td>
<td>11009-1461</td>
<td>À remplacer ou manquants</td>
</tr>
<tr class="odd">
<td>Clamp échappement</td>
<td>1</td>
<td>92037-1537</td>
<td>À remplacer (cassé)</td>
</tr>
<tr class="even">
<td>Join carter d'huile</td>
<td>1</td>
<td>11009-1981</td>
<td>À remplacer</td>
</tr>
<tr class="odd">
<td>Join drain huile</td>
<td>2</td>
<td>92065-0097</td>
<td>À remplacer</td>
</tr>
</tbody>
</table>
OLA (open-lighting), ENTTEC Open DMX USB & Raspberry Pi2014-02-20T00:00:00-05:002014-02-20T00:00:00-05:00Jean Schurgertag:None,2014-02-20:/ola-open-lighting-enttec-open-dmx-usb-raspberry-pi.html<p><a href="file:/images/opendmx.jpg"><img src="file:///images/opendmx.jpg"/></a></p>
<p>Premier contacte avec <a href="http://en.wikipedia.org/wiki/DMX512">DMX</a>512, pour donner un
petit coup de main à un ami, il s'agissait de faire fonctionner un
module <a href="http://www.enttec.com/?main_menu=Products&pn=70303">ENTTEC
OPEN DMX USB</a> sur un Raspberry Pi (raspi) avec le logicial OLA (<a href="https://code.google.com/p/open-lighting/">open-lighting</a>). Rien
de bien compliqué finalement, mais voila quelques astuces.</p>
<h2 id="installation-de-ola-sur-le-raspi">Installation de OLA sur le …</h2><p><a href="file:/images/opendmx.jpg"><img src="file:///images/opendmx.jpg"/></a></p>
<p>Premier contacte avec <a href="http://en.wikipedia.org/wiki/DMX512">DMX</a>512, pour donner un
petit coup de main à un ami, il s'agissait de faire fonctionner un
module <a href="http://www.enttec.com/?main_menu=Products&pn=70303">ENTTEC
OPEN DMX USB</a> sur un Raspberry Pi (raspi) avec le logicial OLA (<a href="https://code.google.com/p/open-lighting/">open-lighting</a>). Rien
de bien compliqué finalement, mais voila quelques astuces.</p>
<h2 id="installation-de-ola-sur-le-raspi">Installation de OLA sur le
raspi</h2>
<p>Plusieurs méthodes sont expliquées sur le site <a href="http://www.opendmx.net/index.php/OLA_Raspberry_Pi">opendmx.net</a>.
C'est la page qu'on trouve le plus rapidement lors de recherches sur le
net. Elle propose des images toutes faites pré-installées, des
instructions pour les faire fonctionner ou encore les instructions pour
installer OLA à partir des sources disponibles sur leur dépôt GIT.
Personnellement, je préfère garder une installation standard debian
(Raspbien) sur les raspi, et y ajouter ce qui manque. C'est plus facile
à maintenir. Après un peu de recherche, j'ai trouvé un dépôt contenant
des paquets debian déjà compilés pour le raspi.</p>
<pre class="example"><code>deb http://apt.openlighting.org/raspbian wheezy main
</code></pre>
<p>(à ajouter à <strong>/etc/apt/sources.list</strong>, puis installer
le paquet <strong>ola</strong>)</p>
<h2 id="configuration-de-ola-et-choix-du-pilote-pour-le-module-enttec">Configuration
de OLA et choix du pilote pour le module ENTTEC</h2>
<p>OLA est livré avec une panoplie de pilotes, certains, entre en
conflit par ce qu'ils tentent d'utiliser les même périphériques, en
particulier, le port série. En effet, le module ENTTEC présente
simplement un port série connecté en USB.</p>
<p>Lors de l'installation, le paquet 'ola' n'installe pas les fichiers
de configuration des pilotes. Il faut lancer le serveur 'olad' pour
qu'ils soient crées.</p>
<pre class="example"><code>/etc/init.d/olad start
/etc/init.d/olad stop
</code></pre>
<p>Il faut ensuite désactiver les pilotes qui ne nous intéressent pas et
qui peuvent potentiellement entrer en conflit avec celui à utiliser.</p>
<pre class="example"><code>sudo sed -i 's/enabled = true/enabled = false/' /var/lib/ola/conf/*.conf
</code></pre>
<p>Et maintenant activer le bon pilote. Le principal piège est là. Le
pilote à utiliser est <strong>ftdidmx</strong> et non pas 'opendmx'
comme les suggèrent le nom et la description du pilote.</p>
<pre class="example"><code>sudo sed -i 's/enabled = false/enabled = true/' /var/lib/ola/conf/ola-ftdidmx.conf
</code></pre>
<p>Il ne reste plus qu'à démarrer le serveur OLA, créer un univers en
choisissant la sortie fournie par <strong>ftdidmx</strong>.</p>
<p>En cas de problème, OLA envoie pas mal d'informations à syslog.
(Donc, consulter /var/log/syslog)</p>
Photos du 'trackday' de cet été2014-01-15T00:00:00-05:002014-01-15T00:00:00-05:00Jean Schurgertag:None,2014-01-15:/photos-du-trackday-de-cet-ete.html<p>Cet été, je suis allé prendre un cours de conduite de moto sur
circuit, organisé par <a href="http://trackfever.ca/">Trackfever</a>,
sur le circuit <a href="http://www.circuiticar.com">Icar</a> (proche de
l'aéroport de Mirabel). Une sortie inoubliable, très instructive, qui
devrait être obligatoire. Voila quelques photos.</p>
<p><a href="file:/images/trackday_1.jpg"><img src="file:///images/trackday_1-600.jpg"/></a></p>
<p><a href="file:/images/trackday_2.jpg"><img src="file:///images/trackday_2-600.jpg"/></a></p>
<p><a href="file:/images/trackday_3.jpg"><img src="file:///images/trackday_3-600.jpg"/></a></p>
IPA 20142014-01-11T00:00:00-05:002014-01-11T00:00:00-05:00Jean Schurgertag:None,2014-01-11:/ipa-2014.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>7Kg</td>
<td>Maris Otter</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Acides Alpha</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Warrior</td>
<td>15.6%</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Citra</td>
<td>14%</td>
<td>45m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Nelson Sauvin</td>
<td>12%</td>
<td>10m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Newport</td>
<td>10%</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-01</p>
<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.062 G.F. ?</li>
<li>Brassée: [2014-01-11 sam] Embouteillée: [2014-01-29 mer]</li>
</ul>
Pistons2013-12-04T00:00:00-05:002013-12-04T00:00:00-05:00Jean Schurgertag:None,2013-12-04:/pistons.html<p>Les voila</p>
<p>Note: Manque deux vis culasse contre bloc-cylindre</p>
<p><a href="file:/images/pistons.jpg"><img src="file:///images/pistons600.jpg"/></a></p>
Déculassée2013-12-03T00:00:00-05:002013-12-03T00:00:00-05:00Jean Schurgertag:None,2013-12-03:/deculassee.html<p>Les travaux ont commencés, au programme d'hier soir, déculassage.</p>
<p><a href="file:/images/culasse.jpg"><img src="file:///images/culasse600.jpg"/></a></p>
<p><a href="file:/images/haut_moteur.jpg"><img src="file:///images/haut_moteur600.jpg"/></a></p>
<p><a href="file:/images/soupapes.jpg"><img src="file:///images/soupapes600.jpg"/></a></p>
Cet hiver2013-11-28T00:00:00-05:002013-11-28T00:00:00-05:00Jean Schurgertag:None,2013-11-28:/cet-hiver.html<ul>
<li><a href="#connectique-du-démarreur">Connectique du
démarreur</a></li>
<li><a href="#vis-serrant-le-boulon-de-maintient-du-moteur-celui-du-bas">Vis
serrant le boulon de maintient du moteur (celui du bas)</a></li>
<li><a href="#vis-de-carter-de-vilebrequin">Vis de carter de
vilebrequin</a></li>
</ul>
<p>J'ai de grands projets pour cet hiver, et cette année. L'an dernier
j'avais choisi de faire durer la saison le plus longtemps possible en
dépit des températures négatives. Au final, les …</p><ul>
<li><a href="#connectique-du-démarreur">Connectique du
démarreur</a></li>
<li><a href="#vis-serrant-le-boulon-de-maintient-du-moteur-celui-du-bas">Vis
serrant le boulon de maintient du moteur (celui du bas)</a></li>
<li><a href="#vis-de-carter-de-vilebrequin">Vis de carter de
vilebrequin</a></li>
</ul>
<p>J'ai de grands projets pour cet hiver, et cette année. L'an dernier
j'avais choisi de faire durer la saison le plus longtemps possible en
dépit des températures négatives. Au final, les caoutchoucs des pipes
d'admission étaient tellement froides quand je me suis décidé à la
remiser la moto que je n'ai pas été capable d'ôter les carburateurs pour
vider leurs cuves. Cette année, j'ai organisé de démontage plus tôt, et
plus ambitieux. Après deux après midi de dévissage effréné, le moteur
est maintenant bien au chaud au sous-sol, prêt à être rénové. Au
programme:</p>
<ul>
<li>Remplacement de la culasse, chaîne de distribution, tendeurs</li>
<li>Vérification du jeu aux soupapes</li>
<li>Segmentation !</li>
<li>Nettoyage général, examen des éventuelles fuites</li>
<li>Changement des joints (en particulier le joint culasse)</li>
<li>Remplacer les pièces manquantes ou cassées</li>
</ul>
<p><a href="file:/images/sans-moteur.jpg"><img src="file:///images/sans-moteur.jpg"/></a></p>
<h2 id="pièces-à-remplacer">Pièces à remplacer</h2>
<h3 id="connectique-du-démarreur">Connectique du démarreur</h3>
<h3 id="vis-serrant-le-boulon-de-maintient-du-moteur-celui-du-bas">Vis
serrant le boulon de maintient du moteur (celui du bas)</h3>
<h3 id="vis-de-carter-de-vilebrequin">Vis de carter de vilebrequin</h3>
IBM X201 Fan control 'disangager'2013-11-15T00:00:00-05:002013-11-15T00:00:00-05:00Jean Schurgertag:None,2013-11-15:/ibm-x201-fan-control-disangager.html<p>I'm the lucky owner of a Thinkpad X201 since several years.</p>
<p>For some reason, (buggy firmware, dust, buddy drivers), the fan
managment is very debious, especialy when your CPU reach high
temperatures.</p>
<p>It's really disapointing to get the 'critical temperature reached(100
C),shutting down' message and see the system …</p><p>I'm the lucky owner of a Thinkpad X201 since several years.</p>
<p>For some reason, (buggy firmware, dust, buddy drivers), the fan
managment is very debious, especialy when your CPU reach high
temperatures.</p>
<p>It's really disapointing to get the 'critical temperature reached(100
C),shutting down' message and see the system doing so.</p>
<p>Here is a very stupid script that force the fan to rotate at full
speed if the CPU exceed 90°C and go back to automatic control when it
cool down.</p>
<pre class="example"><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
# Set the fan control to 'disengaged' (full-speed) when the CPU temp exceed 90°C
# because the 'auto' mode doesn't allow the fan to reach its top speed when it is needed.
# The 'thinkpad_acpi' kernel module have to be configured to allow fan control
# using the fan_control=1 option.
while True:
temp = int(open("/proc/acpi/ibm/thermal").read().split('\t')[1].split()[0])
level = temp > 90 and 'disengaged' or 'auto'
open("/proc/acpi/ibm/fan", "w").write("level %s" % level)
sleep(5)
</code></pre>
Recette de 'rsync' facile entre deux machine sans SSH2013-10-10T00:00:00-04:002013-10-10T00:00:00-04:00Jean Schurgertag:None,2013-10-10:/recette-de-rsync-facile-entre-deux-machine-sans-ssh.html<ul>
<li><p><a href="#machine-serveur-rsync">Machine serveur 'rsync'</a></p>
<ul>
<li><a href="#rsync.conf">rsync.conf</a></li>
<li><a href="#démarrer-le-serveur">Démarrer le serveur</a></li>
</ul></li>
<li><p><a href="#utilisation-depuis-lautre-machine_1">Utilisation depuis
l'autre machine</a></p></li>
</ul>
<p>(aide mémoire)</p>
<h1 id="contexte">Contexte</h1>
<p>On souhaite transférer une grande quantité de donnée d'une ordinateur
à un autre en un minimum de temps. Les deux machines sont sur un même
réseau local, et on ne se soucie pas de la …</p><ul>
<li><p><a href="#machine-serveur-rsync">Machine serveur 'rsync'</a></p>
<ul>
<li><a href="#rsync.conf">rsync.conf</a></li>
<li><a href="#démarrer-le-serveur">Démarrer le serveur</a></li>
</ul></li>
<li><p><a href="#utilisation-depuis-lautre-machine_1">Utilisation depuis
l'autre machine</a></p></li>
</ul>
<p>(aide mémoire)</p>
<h1 id="contexte">Contexte</h1>
<p>On souhaite transférer une grande quantité de donnée d'une ordinateur
à un autre en un minimum de temps. Les deux machines sont sur un même
réseau local, et on ne se soucie pas de la sécurité.</p>
<p><strong>Rsync</strong> est extrêmement rapide dans ce mode de
fonctionnement, et conserve ses avantages tel que:</p>
<ul>
<li>Conserver les permissions, propriétaire, et group des fichiers.</li>
<li>Pouvoir reprendre un transfert interrompu sans avoir à renvoyer
toutes les données.</li>
</ul>
<h1 id="mis-en-œuvre">Mis en œuvre</h1>
<p>Une des machines doit exécuter 'rsync' en mode 'daemon'.</p>
<h2 id="machine-serveur-rsync">Machine serveur 'rsync'</h2>
<p>(imaginons qu'elle à l'adresse 192.168.0.42)</p>
<p>Dans ce genre de manipulation épisodique, ça ne me tente pas de créer
un fichier de configuration global à 'rsync' (/etc/rsync.conf), un
simple fichier local quelques lignes suffit.</p>
<h3 id="rsync.conf">rsync.conf</h3>
<pre class="example"><code>[plouf]
path = /home
uid = 0
gid = 0
read only = false
</code></pre>
<h3 id="démarrer-le-serveur">Démarrer le serveur</h3>
<pre class="example"><code>rsync --daemon --config rsync.conf
</code></pre>
<h2 id="utilisation-depuis-lautre-machine_1">Utilisation depuis l'autre
machine</h2>
<pre class="example"><code>rsync -a /home/. rsync://192.168.0.42/plouf/.
</code></pre>
Recettes pour ZSH2013-10-10T00:00:00-04:002013-10-10T00:00:00-04:00Jean Schurgertag:None,2013-10-10:/recettes-pour-zsh.html<p>(aide mémoire)</p>
<h1 id="utilisateur-nom-de-la-machine-et-répertoire-courant-dans-le-titre">Utilisateur,
nom de la machine et répertoire courant dans le titre</h1>
<pre class="example"><code>autoload -Uz add-zsh-hook
function title() { echo -ne "\033]0;${USER}@${HOST}:${PWD}\007" }
add-zsh-hook chpwd title
title
</code></pre>
<h1 id="attribuer-une-couleur-différente-dans-la-limite-disponible-en">Attribuer
une couleur différente (dans la limite disponible) en</h1>
<p>fonction de la machine</p>
<pre class="example"><code>c="x"
sum=0
i=1
while …</code></pre><p>(aide mémoire)</p>
<h1 id="utilisateur-nom-de-la-machine-et-répertoire-courant-dans-le-titre">Utilisateur,
nom de la machine et répertoire courant dans le titre</h1>
<pre class="example"><code>autoload -Uz add-zsh-hook
function title() { echo -ne "\033]0;${USER}@${HOST}:${PWD}\007" }
add-zsh-hook chpwd title
title
</code></pre>
<h1 id="attribuer-une-couleur-différente-dans-la-limite-disponible-en">Attribuer
une couleur différente (dans la limite disponible) en</h1>
<p>fonction de la machine</p>
<pre class="example"><code>c="x"
sum=0
i=1
while [[ "$c" != "" ]]; do
c=$HOST[$i]
i=$(($i + 1))
sum=$((sum + $(printf "%d" "'$c")))
done
_colors=(red green yellow blue magenta cyan)
c_hostname=$_colors[$((sum % 6))]
# La couleur est dans $c_hostname
</code></pre>
Partage d'écran avec GNU/Linux2013-09-27T00:00:00-04:002013-09-27T00:00:00-04:00Jean Schurgertag:None,2013-09-27:/partage-decran-avec-gnulinux.html<ul>
<li><p><a href="#laffichage">L'affichage</a></p>
<ul>
<li><a href="#côté-écran-partagé-serveur">Côté écran partagé
(serveur)</a></li>
<li><a href="#côté-poste-de-travail">Côté poste de travail</a></li>
</ul></li>
<li><p><a href="#le-contrôle-clavier-et-souris_1">Le contrôle (clavier
et souris)</a></p></li>
<li><p><a href="#contrôle-de-lalimentation">Contrôle de
l'alimentation</a></p>
<ul>
<li><a href="#allumage">Allumage</a></li>
<li><a href="#extinction">Extinction</a></li>
</ul></li>
</ul>
<ul>
<li><a href="#note-pour-le-partage-du-son_2">Note pour le partage du
son</a></li>
</ul>
<p>(l'idée peut être adaptée à d'autres systèmes)</p>
<h1 id="contexte">Contexte</h1>
<p>L'idée est de partager un écran visible par plusieurs personnes, et
de leur laisser afficher leur "Bureau …</p><ul>
<li><p><a href="#laffichage">L'affichage</a></p>
<ul>
<li><a href="#côté-écran-partagé-serveur">Côté écran partagé
(serveur)</a></li>
<li><a href="#côté-poste-de-travail">Côté poste de travail</a></li>
</ul></li>
<li><p><a href="#le-contrôle-clavier-et-souris_1">Le contrôle (clavier
et souris)</a></p></li>
<li><p><a href="#contrôle-de-lalimentation">Contrôle de
l'alimentation</a></p>
<ul>
<li><a href="#allumage">Allumage</a></li>
<li><a href="#extinction">Extinction</a></li>
</ul></li>
</ul>
<ul>
<li><a href="#note-pour-le-partage-du-son_2">Note pour le partage du
son</a></li>
</ul>
<p>(l'idée peut être adaptée à d'autres systèmes)</p>
<h1 id="contexte">Contexte</h1>
<p>L'idée est de partager un écran visible par plusieurs personnes, et
de leur laisser afficher leur "Bureau" dessus pour le montrer aux
autres. L'écran en question est branché sur un ordinateur sous GNU/Linux
(on pourrait utiliser un Raspberry Pi), lequel doit être accessible
depuis le réseau local.</p>
<h1 id="mis-en-œuvre">Mis en œuvre</h1>
<h2 id="laffichage">L'affichage</h2>
<h3 id="côté-écran-partagé-serveur">Côté écran partagé (serveur)</h3>
<p>La recette du partage d'écran est bien connue, <a href="https://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a>
s'acquitte de cette tâche efficacement depuis longtemps. La subtilité
ici est qu'on ne souhaite pas afficher un écran partagé par quelqu'un
d'autre (via un serveur VNC), mais qu'on souhaite depuis un poste de
travail <em>pousser</em> son propre écran sur un client VNC. Le client
<a href="http://www.tightvnc.com/">TightVNC</a> peut se comporter en
mode serveur, et accepter les connexions de serveurs VNC en mode
client.</p>
<p><em>Dans la session X du serveur, utiliser la commande:</em></p>
<pre class="example"><code>vncviewer -listen
</code></pre>
<h3 id="côté-poste-de-travail">Côté poste de travail</h3>
<p>Nous avons besoin d'un serveur VNC en mode client, <a href="http://www.karlrunge.com/x11vnc/">x11vnc</a> fait l'affaire.</p>
<p><em>Utiliser la commande:</em></p>
<pre class="example"><code>x11vnc --connect serveur:5500
</code></pre>
<h2 id="le-contrôle-clavier-et-souris_1">Le contrôle (clavier et
souris)</h2>
<p>La plus part du temps, on va simplement utiliser le clavier et la
souris du poste de travail, mais dans certains cas, on peut vouloir
prêter le clavier et la souris à quelqu'un d'autre, sans que personne
n'ai à se lever de sa chaise. <a href="http://github.com/dottedmag/x2x">x2x</a> permet de transporter le
clavier et la souris d'un serveur X à un autre.</p>
<p><em>Exemple:</em></p>
<pre class="example"><code>ssh -Y server "x2x -resurface -east -from \$DISPLAY -to :0"
</code></pre>
<p>/L'option <strong>-Y</strong> de ssh permet de transporter
l'affichage sur la machine distante, on a besoin de cette information
pour savoir d'où vient le curseur./</p>
<p><em>L'option <strong>-resurface</strong> de x2x est parfois
necessaire, et bien expliquée dans le manuel.</em></p>
<p><em>L'option <strong>-east</strong> de x2x indique par quel bord de
l'écran ou veut sortir pour atteindre l'autre écran.</em></p>
<h2 id="contrôle-de-lalimentation">Contrôle de l'alimentation</h2>
<p>Le partage d'écran étant occasionnel, si on a rien à afficher, autant
éteindre l'écran. Le standard DPMS permet d'envoyer des ordres
d'allumage et de mise en veille aux écran. L'outil en ligne de commande
<strong>xset</strong> donne accès à ces fonctions.</p>
<h3 id="allumage">Allumage</h3>
<pre class="example"><code>ssh server xset -display :0 dpms force on
</code></pre>
<h3 id="extinction">Extinction</h3>
<pre class="example"><code>ssh server xset -display :0 dpms force off
</code></pre>
<h1 id="note-pour-le-partage-du-son_2">Note pour le partage du son</h1>
<p>Il y a beaucoup de logiciels et de façons de le faire, <a href="http://www.pulseaudio.org">Pulseaudio</a> fournit facilement ce
service.</p>
Fingeris Doloris2013-09-22T00:00:00-04:002013-09-22T00:00:00-04:00Jean Schurgertag:None,2013-09-22:/fingeris-doloris.html<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.060 G.F. ?</li>
<li>Brassée: [2013-09-22 dim] Embouteillée: [2013-10-10 jeu]</li>
</ul>
<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>7Kg</td>
<td>Maris Otter</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Acides Alpha</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Hercule</td>
<td>16.7%</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Simcoe</td>
<td>13.7%</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>60g</td>
<td>Citra</td>
<td>14.5%</td>
<td>15m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>HBC 342</td>
<td>14.9%</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-04</p>
Naima2013-09-01T00:00:00-04:002013-09-01T00:00:00-04:00Jean Schurgertag:None,2013-09-01:/naima.html<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.075 G.F. 1.042</li>
<li>Brassée: [2013-09-01 dim] Embouteillée: [2013-09-15 dim]</li>
</ul>
<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>2-row</td>
</tr>
<tr class="even">
<td>1.5Kg</td>
<td>Munich</td>
</tr>
<tr class="odd">
<td>1.5Kg</td>
<td>Flocons d'orge</td>
</tr>
<tr class="even">
<td>300g</td>
<td>Crystal 120°</td>
</tr>
<tr class="odd">
<td>600g</td>
<td>Roasted Barley</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Golding</td>
<td>90m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Golding</td>
<td>15m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Spait</td>
<td>0m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
Installation d'un traçeur GPS sur ma ZX-112013-08-07T00:00:00-04:002013-08-07T00:00:00-04:00Jean Schurgertag:None,2013-08-07:/installation-dun-traceur-gps-sur-ma-zx-11.html<ul>
<li><a href="#pourquoi-un-rpi">Pourquoi un RPI ?</a></li>
<li><a href="#pourquoi-cette-utilisation">Pourquoi cette utilisation
?</a></li>
<li><a href="#pourquoi-en-parler-sur-mon-site">Pourquoi en parler sur
mon site ?</a></li>
<li><a href="#lidée-enfin">L'idée (enfin)</a></li>
</ul>
<ul>
<li><p><a href="#problèmes-techniques_1">Problèmes techniques</a></p>
<ul>
<li><p><a href="#écriture-des-enregistrements-sur-le-système-de-fichier">Écriture
des enregistrements sur le système de fichier</a></p></li>
<li><p><a href="#connection-internet-pour-envoyer-les-enregistrements">Connection
internet pour envoyer les enregistrements</a></p>
<ul>
<li><a href="#routeur-linksys-wrt54gl">Routeur Linksys WRT54GL</a></li>
<li><a href="#logiciel-dd-wrt-pour-avoir-la-fonctionnalité-répéteur">Logiciel
DD-WRT pour avoir la fonctionnalité répéteur</a></li>
</ul></li>
<li><p><a href="#alimentation-du-raspberry-pi_1">Alimentation du
Raspberry Pi</a></p>
<ul>
<li><a href="#trouver-un-adapteur-12vusb-1a.">DONE Trouver un adapteur
12V/USB …</a></li></ul></li></ul></li></ul><ul>
<li><a href="#pourquoi-un-rpi">Pourquoi un RPI ?</a></li>
<li><a href="#pourquoi-cette-utilisation">Pourquoi cette utilisation
?</a></li>
<li><a href="#pourquoi-en-parler-sur-mon-site">Pourquoi en parler sur
mon site ?</a></li>
<li><a href="#lidée-enfin">L'idée (enfin)</a></li>
</ul>
<ul>
<li><p><a href="#problèmes-techniques_1">Problèmes techniques</a></p>
<ul>
<li><p><a href="#écriture-des-enregistrements-sur-le-système-de-fichier">Écriture
des enregistrements sur le système de fichier</a></p></li>
<li><p><a href="#connection-internet-pour-envoyer-les-enregistrements">Connection
internet pour envoyer les enregistrements</a></p>
<ul>
<li><a href="#routeur-linksys-wrt54gl">Routeur Linksys WRT54GL</a></li>
<li><a href="#logiciel-dd-wrt-pour-avoir-la-fonctionnalité-répéteur">Logiciel
DD-WRT pour avoir la fonctionnalité répéteur</a></li>
</ul></li>
<li><p><a href="#alimentation-du-raspberry-pi_1">Alimentation du
Raspberry Pi</a></p>
<ul>
<li><a href="#trouver-un-adapteur-12vusb-1a.">DONE Trouver un adapteur
12V/USB 1A.</a></li>
</ul></li>
</ul></li>
</ul>
<h1 id="mise-en-garde">Mise en garde</h1>
<p>Ce projet est en cour de réalisation, cet article suit la même
évolution, il n'est donc pas terminé.</p>
<h1 id="introduction">Introduction</h1>
<p>Cette réalisation n'est pas sérieuse du tout, je suis certain qu'ils
existe des centaines de gadgets permettant d'enregistrer un tracé GPS
tout en restant assis sur une moto. C'est une observation toute bête qui
m'a mené à me lancer dans cette réalisation. J'ai remarqué que petit
vide poche de ma ZX-11 à des dimensions parfaites pour y ranger un <a href="http://www.raspberrypi.org/">Raspberry Pi</a> (RPI), et comme tout
possesseur de cette petite machine, je me suis demandé, quoi en faire,
en particulier sur une moto.</p>
<h2 id="pourquoi-un-rpi">Pourquoi un RPI ?</h2>
<ol>
<li>Je l'avais déjà.</li>
<li>Son prix est ridiculement bas.</li>
<li>C'est facile à ranger dans le vide poche d'une ZX-11.</li>
<li>Il fait fonctionner un véritable système d'exploitation, dans mon
cas, <a href="http://debian.org">Debian</a>, agrémenté du même confort
que j'ai à utiliser mon ordinateur personnel.</li>
<li>Il possède une interface réseau, et permet d'utiliser des
périphériques USB.</li>
</ol>
<h2 id="pourquoi-cette-utilisation">Pourquoi cette utilisation ?</h2>
<ol>
<li>C'est facile à réaliser</li>
<li>J'avais déjà l'adaptateur GPS USB, et la carte Wifi USB (merci <a href="http://julbox.fr/">Julien</a>).</li>
</ol>
<h2 id="pourquoi-en-parler-sur-mon-site">Pourquoi en parler sur mon site
?</h2>
<p>Ce projet va demander l'écriture d'un peu de code, résoudre quelques
petits problèmes, et certainement d'autres choses bonnes à partager.</p>
<h2 id="lidée-enfin">L'idée (enfin)</h2>
<p>Le principe, est d'utiliser le RPI pour enregistrer les trajets
effectués en moto, et de les sauvegarder automatiquement sur un
ordinateur ou sur internet quand la moto rentre au garage. L'antenne GPS
se charger de mesurer les coordonnées géographiques pendant le trajet,
et la carte Wifi permet au RPI de se connecter à mon réseau sans fils
domestique. La ZX-11 est une moto à carburateur, elle n'a donc pas
besoin d'électronique pour fonctionner (à part l'allumage). Sur d'autres
véhicules équipés de moteur à injection, le RPI pourrait être programmer
pour enregistre en même temps les informations concernant le
fonctionnement du moteur par son interface ODB2.</p>
<h1 id="problèmes-techniques_1">Problèmes techniques</h1>
<h2 id="écriture-des-enregistrements-sur-le-système-de-fichier">Écriture
des enregistrements sur le système de fichier</h2>
<ul>
<li>Le RPI peut être éteint à tout moment. Pour s'assurer que les
enregistrements soient réellement écrit en permanence, on monte le
système de ficher avec l'option sync. Cette option pose un problème de
performances, mais dans cette application ce n'est pas primordial.</li>
<li>Le format GPX (basé sur XML) impose un début et une fin de fichier.
Comme on ne sait pas quand un enregistrement va être coupé par
l'extinction du RPI, on ne peut pas prévoir l'écriture de la fin du
fichier (On pourrait relire et réécrire complètement le fichier à chaque
mesure, mais ce n'est pas une jolie méthode).</li>
</ul>
<h2 id="connection-internet-pour-envoyer-les-enregistrements">Connection
internet pour envoyer les enregistrements</h2>
<p>Le petit adaptateur Wifi USB connecté sur le RPI n'est pas assez
puissant pour se connecteur sur le routeur de mon appartement depuis le
garage. J'utilise donc un autre routeur configuré en répéteur.</p>
<h3 id="routeur-linksys">Routeur Linksys</h3>
<p><a href="http://support.linksys.com/en-ca/support/routers/WRT54GL">WRT54GL</a></p>
<h3 id="logiciel-dd-wrt-pour-avoir-la">Logiciel <a href="http://www.dd-wrt.com">DD-WRT</a> pour avoir la</h3>
<p>fonctionnalité <a href="http://www.dd-wrt.com/wiki/index.php/Repeater">répéteur</a></p>
<p>DD-WRT v24-sp2 (07/22/09) std - build 12548M NEWD Eko</p>
<h2 id="alimentation-du-raspberry-pi_1">Alimentation du Raspberry Pi</h2>
<p>Le RPI doit être alimenté en 5V, 700mA (au minimum). Je pensais donc
utiliser un simple adaptateur allume-cigare branché sur le 12V de la
moto pour fournir ce courant. Après l'avoir testé, ça ne fonctionne pas.
Le RPI semble bien démarrer, mais l'antenne Wifi ne fonctionne pas.</p>
<h3 id="trouver-un-adapteur-12vusb-1a."><span class="done DONE">DONE</span> Trouver un adapteur 12V/USB 1A.</h3>
Voatsiperifery2013-08-01T00:00:00-04:002013-08-01T00:00:00-04:00Jean Schurgertag:None,2013-08-01:/voatsiperifery.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>4Kg</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>500g</td>
<td>Blé</td>
</tr>
<tr class="odd">
<td>1Kg</td>
<td>Vienna</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>Caramunich</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>16g</td>
<td>Saaz</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Cascade</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Falcon Flight</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="épices">Épices</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>90ml</td>
<td>Poivre Voatsiperifery</td>
<td>10m</td>
</tr>
<tr class="even">
<td>90ml</td>
<td>Poivre Voatsiperifery</td>
<td>au début fermentation secondaire</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP 566</p>
Experimenter LD_PRELOAD2013-06-18T00:00:00-04:002013-06-18T00:00:00-04:00Jean Schurgertag:None,2013-06-18:/experimenter-ld_preload.html<h1 id="introduction">Introduction</h1>
<p>Hier, je suis allé assister pour la première fois à un atelier <a href="http://montrehack.ca/">MontréHack</a>. En tentant de résoudre le
défi proposé, j'ai eu l'idée d'expérimenter <a href="http://man7.org/linux/man-pages/man8/ld.so.8.html">LD<sub>PRELOAD</sub></a>.
(Ce n'était pas la bonne méthode, mais l'expérimentation était
intéressante).</p>
<h1 id="principe">Principe</h1>
<p>Le but de cette expérience est de remplacer un appel système par …</p><h1 id="introduction">Introduction</h1>
<p>Hier, je suis allé assister pour la première fois à un atelier <a href="http://montrehack.ca/">MontréHack</a>. En tentant de résoudre le
défi proposé, j'ai eu l'idée d'expérimenter <a href="http://man7.org/linux/man-pages/man8/ld.so.8.html">LD<sub>PRELOAD</sub></a>.
(Ce n'était pas la bonne méthode, mais l'expérimentation était
intéressante).</p>
<h1 id="principe">Principe</h1>
<p>Le but de cette expérience est de remplacer un appel système par du
code personnel. La programme choisi est <strong>whoami</strong>, on va
lui faire croire à une fausse identité (à l'instar du programme bien
connu <strong>fakeroot)</strong>.</p>
<h1 id="exploration">Exploration</h1>
<p>Un rapide '<strong>strace whoami</strong>' nous révèle rapidement
l'utilisation de l'appel système <strong>geteuid</strong> (on a quand
même une petite idée de ce qu'on cherche).</p>
<pre class="example"><code>jeansch@blackpage:~/tmp (0) % strace whoami
execve("/usr/bin/whoami", ["whoami"], [/* 44 vars */]) = 0
...
geteuid() = 1000
...
write(1, "jeansch\n", 8jeansch
...
</code></pre>
<h1 id="remplacement">Remplacement</h1>
<p>La documentation de <strong>geteuid</strong> (<a href="http://man7.org/linux/man-pages/man2/getuid.2.html">page de
manuel</a>) nous indique le fonctionnement et le prototypage de la
fonction. Il s'agit donc de remplacer cette fonction par une renvoyant
systématiquement le UID 0 (root).</p>
<pre class="example"><code>/* Compitation: cc -fPIC -shared -o geteuid.so geteuid.c
Utilisation: LD_PRELOAD=geteuid.so */
#include <unistd.h>
#include <sys/types.h>
uid_t geteuid(void) {
return 0;
}
</code></pre>
<h1 id="essai">Essai</h1>
<pre class="example"><code>jeansch@blackpage:~/tmp (0) % whoami
jeansch
jeansch@blackpage:~/tmp (0) % LD_PRELOAD=./geteuid.so whoami
root
</code></pre>
<p>C'est gagné :)</p>
<p>Bien entendu, c'est un mensonge. Seul <strong>whoami</strong> croit
que l'usager est <strong>root</strong>, mais c'est faux. Un programme
tentant une opération privilégiée échouera de toute façon, même s'il
croit avoir été exécuté par <strong>root</strong>.</p>
Jeu aux soupapes2013-05-21T00:00:00-04:002013-05-21T00:00:00-04:00Jean Schurgertag:None,2013-05-21:/jeu-aux-soupapes.html<ul>
<li><a href="#description-générique-du-pourquoi-et-du-comment">Description
générique du pourquoi et du comment:</a></li>
<li><a href="#application-à-la-zx-11-en-anglais">Application à la ZX-11
(en anglais)</a></li>
</ul>
<ul>
<li><p><a href="#étapes-générales_1">Étapes générales</a></p>
<ul>
<li><a href="#démontage-et-préparation">Démontage et
préparation</a></li>
<li><a href="#principes-de-mesure">Principes de mesure</a></li>
<li><a href="#remontage">Remontage</a></li>
</ul></li>
<li><p><a href="#en-pratique_1">En pratique</a></p>
<ul>
<li><p><a href="#deux-positions-de-moteur-des-cames-à-contrôler">Deux
positions de moteur (des cames) à contrôler</a></p>
<ul>
<li><a href="#première-position">Première position</a></li>
<li><a href="#deuxième-position">Deuxième position</a></li>
<li>[[#correspondances-entre-les-positions-et-les-mesurer-à-effectuer-les-positions-a-et-b-peuvent-être-inversées][Correspondances
entre les positions et les mesurer à effectuer (les positions A …</li></ul></li></ul></li></ul><ul>
<li><a href="#description-générique-du-pourquoi-et-du-comment">Description
générique du pourquoi et du comment:</a></li>
<li><a href="#application-à-la-zx-11-en-anglais">Application à la ZX-11
(en anglais)</a></li>
</ul>
<ul>
<li><p><a href="#étapes-générales_1">Étapes générales</a></p>
<ul>
<li><a href="#démontage-et-préparation">Démontage et
préparation</a></li>
<li><a href="#principes-de-mesure">Principes de mesure</a></li>
<li><a href="#remontage">Remontage</a></li>
</ul></li>
<li><p><a href="#en-pratique_1">En pratique</a></p>
<ul>
<li><p><a href="#deux-positions-de-moteur-des-cames-à-contrôler">Deux
positions de moteur (des cames) à contrôler</a></p>
<ul>
<li><a href="#première-position">Première position</a></li>
<li><a href="#deuxième-position">Deuxième position</a></li>
<li>[[#correspondances-entre-les-positions-et-les-mesurer-à-effectuer-les-positions-a-et-b-peuvent-être-inversées][Correspondances
entre les positions et les mesurer à effectuer (les positions A et B
peuvent être inversées)]]</li>
</ul></li>
<li><p><a href="#méthode-de-mesure_1">Méthode de mesure</a></p></li>
<li><p><a href="#correction-du-jeu">Correction du jeu</a></p>
<ul>
<li><a href="#remplacement-des-pastilles">Remplacement des
pastilles</a></li>
</ul></li>
</ul></li>
</ul>
<h1 id="introduction">Introduction</h1>
<p>J'ai réalisé pour la première fois le contrôle et l'ajustement du
<strong>Jeu aux soupapes</strong> sur ma <strong>ZX-11</strong>.</p>
<h1 id="outils-spéciaux">Outils Spéciaux</h1>
<ul>
<li>Douille de 24 (optionnel, pour faire tourner le vilebrequin sans la
roue)</li>
<li>Aiment télescopique (optionnel, pour les craintifs ou paranoïaques
comme moi qui ont peur de perdre des morceaux dans le moteur)</li>
<li>Un jeu de cales (indispensable)</li>
<li>Un pied à coulisse numérique ou un micromètre pour mesurer
l'épaisseur des pastilles (ne pas se fier à la valeur inscrite
dessus)</li>
<li>Une idée réaliste du fonctionnement d'un moteur 4 temps (et 4
cylindres)</li>
<li>Une bonne dose de sang froid (au moins la première fois)</li>
<li>De la patience</li>
<li>De quoi prendre des notes</li>
</ul>
<h1 id="pièces-à-remplacer">Pièces à remplacer</h1>
<ul>
<li>Pastilles (optionnel, à déterminer, environ 10$ par pastille chez
votre garagiste, ou disponibles en kit de nombreuses pastilles de
plusieurs tailles sur Internet pour environ 74$).</li>
<li>Joint de carter de vilbrequin (optionnel, en fonction de son état,
moins de 5$)</li>
<li>"Bonding agent" <em>(rien de sexuel)</em>, il s'agit d'une sorte de
colle utilisée pour maintenir le joint du couvercle. Demander conseil à
votre garagiste.</li>
<li>Joints de puits de bougie</li>
</ul>
<h1 id="tutoriaux-sur-internet">Tutoriaux sur Internet:</h1>
<h2 id="description-générique-du-pourquoi-et-du-comment">Description
générique du pourquoi et du comment:</h2>
<ul>
<li><a href="http://www.les7pechesdumotard.fr/Controle-et-reglage-du-jeu-aux,128.html">http://www.les7pechesdumotard.fr/Controle-et-reglage-du-jeu-aux,128.html</a></li>
<li><a href="http://www.les7pechesdumotard.fr/Controle-et-reglage-des-soupapes,130.html">http://www.les7pechesdumotard.fr/Controle-et-reglage-des-soupapes,130.html</a></li>
</ul>
<h2 id="application-à-la-zx-11-en-anglais">Application à la ZX-11 (en
anglais)</h2>
<ul>
<li><a href="http://home.comcast.net/~joelcool/valvezx11/valvezx11.htm">http://home.comcast.net/~joelcool/valvezx11/valvezx11.htm</a></li>
</ul>
<h1 id="étapes-générales_1">Étapes générales</h1>
<h2 id="démontage-et-préparation">Démontage et préparation</h2>
<ol>
<li><p>Accéder au couvercle du moteur : enlever tout ce qui gêne le
déplacement du couvercle</p>
<ul>
<li>Réservoir</li>
<li>Filtre à air</li>
<li>Ram-air</li>
<li>Fils d'allumage</li>
<li>Câbles des carburateurs</li>
<li>Bobines (attention de bien les identifier ainsi que leur
connexions)</li>
<li>Repousser les fils électriques en tout genre</li>
<li>…</li>
</ul></li>
<li><p>Dévisser et retirer le couvercle en faisant attention au
joint.</p></li>
<li><p>Repérer et remettre en place les 4 petits tubes (un au niveau de
chaque bougie) qui choisiront de venir avec le couvercle ou bien de
rester sur le moteur.</p></li>
<li><p>Enlever les bougies (pour empêcher la compression et donc
faciliter la rotation du vilebrequin).</p></li>
<li><p>Boucher les puits des bougies et l'espace vide au niveau de la
chaîne de distribution (des chiffons feront l'affaire).</p></li>
</ol>
<h2 id="principes-de-mesure">Principes de mesure</h2>
<ul>
<li>Il faut mesurer le jeu des 16 soupapes (8 à l'admission, 8 à
l'échappement)</li>
<li>On ne peut accéder qu'a la moitié des soupapes à la fois,
dépendamment de la position du moteur.</li>
<li>Le moteur à 4 position différentes. Deux positions permettent
d'accéder à certaines soupapes, Les deux autres permettent d'accéder aux
autres.</li>
<li>On change la position du moteur en tournant le vilebrequin (soit
directement avec la clef de 24mm, soit en engagent le 6ème rapport et en
tournant la roue arrière).</li>
<li>Pour chaque position de mesure, le repère du vilebrequin doit être
aligné sur la position T.</li>
<li>Le repère et la position T sont visible à partir de la petite
fenêtre ronde située sur carter du vilebrequin.</li>
<li>Une fois le moteur dans une position, mesurer à l'aide d'un jeu de
cales le jeu entre les pastille et les linguets, et en fonction de la
valeur mesurée, corriger le jeu en remplaçant la pastille par une plus
ou moins épaisse.</li>
</ul>
<h2 id="remontage">Remontage</h2>
<ul>
<li>Dans l'ordre inverse, en remplaçant les joints quand c'est
nécessaire.</li>
<li>Appliquer le "bonding agent" au joint du couvercle tel que indiqué
dans la revue technique.</li>
<li>Respecter les couples de serrage.</li>
</ul>
<h1 id="en-pratique_1">En pratique</h1>
<p>À cette étape, on suppose que le couvercle est retiré et qu'on à
déterminé comment tourner le vilebrequin (avec un clef de 24mm après
avoir complètement retiré le carter, ou en tournant la roue arrière
après avoir ouvert la fenêtre du carter de vilebrequin).</p>
<h2 id="deux-positions-de-moteur-des-cames-à-contrôler">Deux positions
de moteur (des cames) à contrôler</h2>
<p>Il n'est pas utile de chercher à savoir dans quelle position est le
moteur, les points importants sont l'alignement du vilebrequin sur le
repère T, et la position des cames.</p>
<h3 id="première-position">Première position</h3>
<ol>
<li><p>Aligner le repère T en tournant le vilebrequin</p></li>
<li><p>Observer les positions des cames</p>
<ul>
<li>Certaines seront orientées vers le haut et l'extérieur du moteur,
elle seront donc "libres". C'est celles qu'on va mesurer.</li>
<li>Les autres seront en appui, et deviendront accessible dans la
deuxième position.</li>
</ul></li>
<li><p>Procéder à la mesure (voir: <em>Méthode de mesure</em>)</p></li>
</ol>
<h3 id="deuxième-position">Deuxième position</h3>
<ol>
<li>Faire un tour complet de vilebrequin. Il doit à nouveau se retrouvé
aligné avec le repère T, mais les cames auront changé
d'orientation.</li>
<li>Observer les positions des cames</li>
<li>Procéder à la mesure (voir: <em>Méthode de mesure</em>)</li>
</ol>
<h3 id="correspondances-entre-les-positions-et-les-mesurer-à-effectuer-les">Correspondances
entre les positions et les mesurer à effectuer (les</h3>
<p>positions A et B peuvent être inversées)</p>
<ol>
<li><p>Position A</p>
<ul>
<li>Mesurer l'admission 2 et 4</li>
<li>Mesurer l'échappement 3 et 4</li>
</ul></li>
<li><p>Position B</p>
<ul>
<li>Mesurer l'admission 1 et 3</li>
<li>Mesurer l'échappement 1 et 2</li>
</ul></li>
</ol>
<h2 id="méthode-de-mesure_1">Méthode de mesure</h2>
<p>Il faut mesurer le jeu entre la pastille et le linguet à l'aide d'un
jeu de cales.</p>
<p>Pour cela, glisser les cales entre la pastille et le linguet les unes
après les autres, en augmentant l'épaisseur de la cale à chaque mesure,
jusqu'à ce que ça ne passe plus. La bonne mesure sera la cale la plus
épaisse qui aura réussi à glisser.</p>
<p>Prendre en notes toutes les valeurs mesurées.</p>
<h2 id="correction-du-jeu">Correction du jeu</h2>
<p>Pour la ZX-11, le constructeur indique les tolérances de jeu de
fonctionnement normal suivantes:</p>
<ul>
<li>Jeu à l'échappement : de <strong>0.18mm</strong> à
<strong>0.24mm</strong></li>
<li>Jeu à l'admission: de <strong>0.13mm</strong> à -
<strong>0.19mm</strong></li>
</ul>
<p>Il faut remplacer les pastilles pour lesquelles le jeu ne rentre pas
dans les tolérances préconisées par le constructeur.</p>
<p>Si le jeu est trop important, il faut mettre une pastille plus
épaisse, à l'inverse, si le jeu est trop faible, il faut remplacer la
pastille par une plus fine.</p>
<h3 id="remplacement-des-pastilles">Remplacement des pastilles</h3>
<p>Encore une fois cette opération se fait en deux temps (toutes les
pastilles ne sont pas accessibles en même temps)</p>
<ol>
<li><p>Mesurer les pastilles en place</p>
<p>Pour chaque soupape ou le jeu est en dehors des normes:</p>
<ol>
<li>Repousser le linguet de la pastille à remplacer en le faisant
coulisser sur le côté.</li>
<li>Pour les soupapes qui ne sont pas sur les extrémités, coincer le
linguet contre le ressort de soupape.</li>
<li>À l'aide de l'aiment télescopique retirer la pastille en place</li>
<li>Mesurer l'épaisseur de la pastille, et la mettre de côté</li>
</ol>
<p><em>Éviter de laisser plusieurs linguets comprimer les ressorts en
même temps.</em></p></li>
<li><p>Tableau d'illustration avec ma propre correction du jeu aux
soupapes</p>
<p><em>Dans mon cas, j'ai retiré toutes les pastilles pour les mesurer,
y compris celles dont le jeu était dans les normes.</em></p>
<ol>
<li><p>Échappement</p>
<table>
<thead>
<tr class="header">
<th>Soupape</th>
<th>1G</th>
<th>1D</th>
<th>2G</th>
<th>2D</th>
<th>3G</th>
<th>3D</th>
<th>4G</th>
<th>4D</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Jeu mesuré</td>
<td>15</td>
<td>15</td>
<td>15</td>
<td>15</td>
<td>10</td>
<td>10</td>
<td>15</td>
<td>10</td>
</tr>
<tr class="even">
<td>Pastille en place</td>
<td>220</td>
<td>220</td>
<td>220</td>
<td>230</td>
<td>235</td>
<td>230</td>
<td>220</td>
<td>230</td>
</tr>
<tr class="odd">
<td>Erreur</td>
<td>+ 5</td>
<td>+ 5</td>
<td>+ 5</td>
<td>+ 5</td>
<td>+ 10</td>
<td>+ 10</td>
<td>+ 5</td>
<td>+ 10</td>
</tr>
<tr class="even">
<td>Nouvelle pastille</td>
<td><strong>215</strong></td>
<td><strong>215</strong></td>
<td><strong>215</strong></td>
<td><strong>225</strong></td>
<td><strong>225</strong></td>
<td><strong>220</strong></td>
<td><strong>215</strong></td>
<td><strong>220</strong></td>
</tr>
</tbody>
</table></li>
<li><p>Admission</p>
<table>
<thead>
<tr class="header">
<th>Soupape</th>
<th>5G</th>
<th>5D</th>
<th>6G</th>
<th>6D</th>
<th>7G</th>
<th>7D</th>
<th>8G</th>
<th>8D</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Jeu mesuré</td>
<td>15</td>
<td>15</td>
<td>10</td>
<td>10</td>
<td>30</td>
<td>0</td>
<td>10</td>
<td>15</td>
</tr>
<tr class="even">
<td>Pastille en place</td>
<td>245</td>
<td>240</td>
<td>250</td>
<td>250</td>
<td>225</td>
<td>255</td>
<td>255</td>
<td>250</td>
</tr>
<tr class="odd">
<td>Erreur</td>
<td>0</td>
<td>0</td>
<td>+ 5</td>
<td>+ 5</td>
<td>- 15</td>
<td>+ 15</td>
<td>+ 5</td>
<td>0</td>
</tr>
<tr class="even">
<td>Nouvelle pastille</td>
<td>245</td>
<td>240</td>
<td><strong>245</strong></td>
<td><strong>245</strong></td>
<td><strong>240</strong></td>
<td><strong>240</strong></td>
<td><strong>250</strong></td>
<td>250</td>
</tr>
</tbody>
</table></li>
</ol></li>
<li><p>Détermination des pastilles à remplacer</p>
<p>Lors du remplacement des pastilles, on peut parfois procéder à un
échange de pastilles ( un pastille trop fine ou trop grosse pour un
emplacement peut s'avérer être parfaite pour un autre). Pour les autres,
il faudra les acheter. (Vous pouvez toujours tenter d'échanger vos
pastilles en trop pour les pastilles qu'il vous faut chez votre
garagiste).</p>
<table>
<thead>
<tr class="header">
<th>Taille</th>
<th>En stoque (sur la moto)</th>
<th>Nécessaires</th>
<th>À acheter</th>
<th>En trop</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>215</td>
<td>0</td>
<td>4</td>
<td>4</td>
<td></td>
</tr>
<tr class="even">
<td>220</td>
<td>4</td>
<td>2</td>
<td></td>
<td>2</td>
</tr>
<tr class="odd">
<td>225</td>
<td>1</td>
<td>2</td>
<td>1</td>
<td></td>
</tr>
<tr class="even">
<td>230</td>
<td>3</td>
<td>0</td>
<td></td>
<td>3</td>
</tr>
<tr class="odd">
<td>235</td>
<td>1</td>
<td>0</td>
<td></td>
<td>1</td>
</tr>
<tr class="even">
<td>240</td>
<td>1</td>
<td>3</td>
<td>2</td>
<td></td>
</tr>
<tr class="odd">
<td>245</td>
<td>1</td>
<td>3</td>
<td>2</td>
<td></td>
</tr>
<tr class="even">
<td>250</td>
<td>3</td>
<td>2</td>
<td></td>
<td>1</td>
</tr>
<tr class="odd">
<td>255</td>
<td>2</td>
<td>0</td>
<td></td>
<td>2</td>
</tr>
</tbody>
</table></li>
<li><p>Installer les nouvelles pastilles</p>
<p>Pour chaque correction à faire:</p>
<ol>
<li>Choisir la pastille de la bonne épaisseur (notez que mon jeu de
cales à une précision de 0.05mm et les pastilles que j'ai remplacé
aussi. Idéalement, utilisez un jeu de cales plus précis).</li>
<li>Installer la pastille dans son trou</li>
<li>Remettre le linguet à sa place</li>
<li>Vérifier le que le jeu rentre dans les normes constructeur</li>
</ol></li>
</ol>
Prevent multiple heads when pushing to a Mercurial repository2013-05-16T00:00:00-04:002013-05-16T00:00:00-04:00Jean Schurgertag:None,2013-05-16:/prevent-multiple-heads-when-pushing-to-a-mercurial-repository.html<h1 id="mercurial-heads-and-push--f">Mercurial heads and push -f</h1>
<p>Mercurial is a fascinating tool but when several people work on the
same project, dealing with 'heads' can quickly become a nightmare.</p>
<p>You know, you want to push your last super-fantastic commits to give
them to the world, and Mercurial barks:</p>
<p>"<strong>push creates new remote …</strong></p><h1 id="mercurial-heads-and-push--f">Mercurial heads and push -f</h1>
<p>Mercurial is a fascinating tool but when several people work on the
same project, dealing with 'heads' can quickly become a nightmare.</p>
<p>You know, you want to push your last super-fantastic commits to give
them to the world, and Mercurial barks:</p>
<p>"<strong>push creates new remote head</strong>"</p>
<p>So, you push using the '-f' hoping that it will not be too hard to
merge later… mistake ! <em>Think before, push after</em>.</p>
<p>The following little hook, configured on the remote repository will
prevent you to accidentally ignore the merge question while you're under
the enthusiasm effect of your last creation.</p>
<pre class="example"><code>#!/usr/bin/env python
"""
[hooks]
pretxnchangegroup.forbid_multiple_heads = forbid_multiple_heads.py
"""
import sys
import os
from mercurial import hg, ui
uiface = ui.ui()
from collections import Counter
repo = hg.repository(uiface, os.environ['PWD'])
branches = Counter([repo.changectx(head).branch()
for head in repo.heads()
if repo.changectx(head).changeset()[5].get(
'close') != '1'])
bad_branches = filter(lambda branch: branches.get(branch) > 0, branches)
for branch in bad_branches:
sys.stderr.write("Pushing would create too many heads "
"(%s) for branch '%s'.\n" % (branches.get(branch), branch))
if bad_branches:
sys.exit(1)
</code></pre>
Mise à jour, entretien récent.2013-05-14T00:00:00-04:002013-05-14T00:00:00-04:00Jean Schurgertag:None,2013-05-14:/mise-a-jour-entretien-recent.html<p>Frite approche les 125000km. Voici l'entretien fait au début de la
saison.</p>
<ul>
<li>Changement d'huile</li>
<li>Changement filtre à huile</li>
<li>Remplacement du liquide de refroidissement pour de l'eau distillée +
aditif (pour pouvoir rouler sur circuit)</li>
<li>Changement des deux pneus</li>
<li><a href="jeu-aux-soupapes-zx-11.html">Jeu aux soupapes</a></li>
<li>Nettoyage des carbus aux ultrasons</li>
<li>Tension de la chaîne</li>
<li>Remplacement …</li></ul><p>Frite approche les 125000km. Voici l'entretien fait au début de la
saison.</p>
<ul>
<li>Changement d'huile</li>
<li>Changement filtre à huile</li>
<li>Remplacement du liquide de refroidissement pour de l'eau distillée +
aditif (pour pouvoir rouler sur circuit)</li>
<li>Changement des deux pneus</li>
<li><a href="jeu-aux-soupapes-zx-11.html">Jeu aux soupapes</a></li>
<li>Nettoyage des carbus aux ultrasons</li>
<li>Tension de la chaîne</li>
<li>Remplacement du switch de frein avant</li>
<li>Remplacement du switch de frein arrière</li>
<li>Remplacement des deux ampoules de feu de stop</li>
<li>Suppression de la vielle pâte à joints du couvercle moteur, et
nettoyage</li>
<li>Remplacement du joint du carter de vilebrequin</li>
</ul>
Outillage sur le net2013-02-01T00:00:00-05:002013-02-01T00:00:00-05:00Jean Schurgertag:None,2013-02-01:/outillage-sur-le-net.html<p>Quand on commence à bricoler de façon un peu plus sérieuse, on
ressent rapidement le besoin d'un outillage un peu plus élaboré qu'un
marteau, deux tournevis et quelques clefs. Or, à la quincaillerie du
coin, ces outils coûtent très cher. Alors voici quelques traductions et
exemples de prix.</p>
<ul>
<li>Pied à …</li></ul><p>Quand on commence à bricoler de façon un peu plus sérieuse, on
ressent rapidement le besoin d'un outillage un peu plus élaboré qu'un
marteau, deux tournevis et quelques clefs. Or, à la quincaillerie du
coin, ces outils coûtent très cher. Alors voici quelques traductions et
exemples de prix.</p>
<ul>
<li>Pied à coulisse numérique = digital caliper (9$)</li>
<li>Jeu de cales = Feeler gauge (4$)</li>
<li>Compressiomètre = Compression tester (55$)</li>
<li>Clef dynamométrique = Torque wrench (40$)</li>
</ul>
Photo de la poignée de gaz2012-12-05T00:00:00-05:002012-12-05T00:00:00-05:00Jean Schurgertag:None,2012-12-05:/photo-de-la-poignee-de-gaz.html<p>À toutes fins utiles, voila comment les câbles sont positionnés sur
la poignée de gaz. <a href="file:/images/poignee_gaz.jpg"><img src="file:///images/poignee_gaz.jpg"/></a></p>
Première neige !2012-11-29T00:00:00-05:002012-11-29T00:00:00-05:00Jean Schurgertag:None,2012-11-29:/premiere-neige.html<p>Les grandes rues ne posent pas de problème, mais il m'a fallu entre 5
et 10 minutes pour parcourir l'immense plaque de glace que constituait
la ruelle entre la rue et l'entrée de mon garage (environ 50m) ! C'est
amusant, le compteur à tourné la roue du 124000ème kilomètre sur la …</p><p>Les grandes rues ne posent pas de problème, mais il m'a fallu entre 5
et 10 minutes pour parcourir l'immense plaque de glace que constituait
la ruelle entre la rue et l'entrée de mon garage (environ 50m) ! C'est
amusant, le compteur à tourné la roue du 124000ème kilomètre sur la
glace :)</p>
<p><a href="file:/images/premiere_neige.jpg"><img src="file:///images/premiere_neige.jpg"/></a></p>
Vidange du circuit de refroidissement2012-11-25T00:00:00-05:002012-11-25T00:00:00-05:00Jean Schurgertag:None,2012-11-25:/vidange-du-circuit-de-refroidissement.html<p>(il y a environ deux semaines)</p>
<p>Bon, la photo ne montre pas grand chose à part la position des
fils.</p>
<p>Les opérations à l'origine de la photo ont été:</p>
<ul>
<li><p>Vidange du circuit de refroidissement.</p></li>
<li><p>Remplacement du collier de fixation manquant du troisième tube
d'échappement, et resserrage des autres (surprise, ils …</p></li></ul><p>(il y a environ deux semaines)</p>
<p>Bon, la photo ne montre pas grand chose à part la position des
fils.</p>
<p>Les opérations à l'origine de la photo ont été:</p>
<ul>
<li><p>Vidange du circuit de refroidissement.</p></li>
<li><p>Remplacement du collier de fixation manquant du troisième tube
d'échappement, et resserrage des autres (surprise, ils étaient tous
desserrés).</p></li>
</ul>
<p><a href="file:/images/capteur_radiateur.jpg"><img src="file:///images/capteur_radiateur.jpg"/></a></p>
Barley Wine 20122012-11-18T00:00:00-05:002012-11-18T00:00:00-05:00Jean Schurgertag:None,2012-11-18:/barley-wine-2012.html<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.063 G.F. ?</li>
<li>Brassée [2012-11-18 dim] Embouteillée [2012-12-09 dim]</li>
</ul>
<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5Kg</td>
<td>Two row</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>Crystal</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>50g</td>
<td>Sorachi</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Sorachi</td>
<td>30m</td>
</tr>
<tr class="odd">
<td>50g</td>
<td>Sorachi</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
<p>*</p>
Noël 20122012-11-08T00:00:00-05:002012-11-08T00:00:00-05:00Jean Schurgertag:None,2012-11-08:/noel-2012.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qty</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>Pale</td>
</tr>
<tr class="even">
<td>3Kg</td>
<td>Blé</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Saphir</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Saphir</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="épices">Épices</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Épice</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>Anis Étoilée</td>
<td>10m</td>
</tr>
<tr class="even">
<td>1/2 c.a.t</td>
<td>Clou girofle</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>1 c.a.t</td>
<td>Cardamone</td>
<td>10m</td>
</tr>
<tr class="even">
<td>2 c.a.t</td>
<td>Poivre rose</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>2 c.a.t …</td></tr></tbody></table><h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qty</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>Pale</td>
</tr>
<tr class="even">
<td>3Kg</td>
<td>Blé</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Saphir</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Saphir</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="épices">Épices</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Épice</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>Anis Étoilée</td>
<td>10m</td>
</tr>
<tr class="even">
<td>1/2 c.a.t</td>
<td>Clou girofle</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>1 c.a.t</td>
<td>Cardamone</td>
<td>10m</td>
</tr>
<tr class="even">
<td>2 c.a.t</td>
<td>Poivre rose</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>2 c.a.t</td>
<td>Canelle</td>
<td>10m</td>
</tr>
<tr class="even">
<td>1 c.a.t</td>
<td>Écorces d'orange</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP530</p>
<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.053, G.F. ?</li>
<li>Brassée [2012-11-08 jeu]</li>
<li>Fermentation secondaire [2012-11-18 dim]</li>
</ul>
Noire d'automne 20122012-11-01T00:00:00-04:002012-11-01T00:00:00-04:00Jean Schurgertag:None,2012-11-01:/noire-dautomne-2012.html<h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.060, G.F. ?</li>
<li>Brassée [2012-11-01 jeu], Fermentation secondaire [2012-11-08 jeu],
Embouteillée [2012-11-19 lun]</li>
</ul>
<h2 id="malts">Malts</h2>
<table>
<tbody>
<tr class="odd">
<td>Qté</td>
<td>Malt</td>
</tr>
<tr class="even">
<td>3.5Kg</td>
<td>Pale</td>
</tr>
<tr class="odd">
<td>1Kg</td>
<td>Munich</td>
</tr>
<tr class="even">
<td>600g</td>
<td>Orge torréfié</td>
</tr>
<tr class="odd">
<td>500g</td>
<td>Crystal 120°</td>
</tr>
<tr class="even">
<td>500g</td>
<td>Blé</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Select</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Select</td>
<td>35m</td>
</tr>
<tr class="odd">
<td>45g</td>
<td>Nugget</td>
<td>20m</td>
</tr>
<tr class="even">
<td>15g</td>
<td>Magnum</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure …</h2><h2 id="infos">Infos</h2>
<ul>
<li>G.I. 1.060, G.F. ?</li>
<li>Brassée [2012-11-01 jeu], Fermentation secondaire [2012-11-08 jeu],
Embouteillée [2012-11-19 lun]</li>
</ul>
<h2 id="malts">Malts</h2>
<table>
<tbody>
<tr class="odd">
<td>Qté</td>
<td>Malt</td>
</tr>
<tr class="even">
<td>3.5Kg</td>
<td>Pale</td>
</tr>
<tr class="odd">
<td>1Kg</td>
<td>Munich</td>
</tr>
<tr class="even">
<td>600g</td>
<td>Orge torréfié</td>
</tr>
<tr class="odd">
<td>500g</td>
<td>Crystal 120°</td>
</tr>
<tr class="even">
<td>500g</td>
<td>Blé</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Select</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Select</td>
<td>35m</td>
</tr>
<tr class="odd">
<td>45g</td>
<td>Nugget</td>
<td>20m</td>
</tr>
<tr class="even">
<td>15g</td>
<td>Magnum</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>T58</p>
<h2 id="notes">Notes</h2>
<p>Embouteillée au sucre de table (mauvaise idée, trop pétillante)</p>
Aide mémoire à l'utilisation des 'entry points' de setuptools2012-10-16T00:00:00-04:002012-10-16T00:00:00-04:00Jean Schurgertag:None,2012-10-16:/aide-memoire-a-lutilisation-des-entry-points-de-setuptools.html<ul>
<li>Créer un module dans un répertoire dédié.</li>
</ul>
<blockquote>
<pre class="example"><code>mkdir tarte
$EDITOR tarte/*__init__.py*
Y écrire votre morceau de code préféré.
</code></pre>
<pre class="example"><code>def aux():
print "Pommes !"
</code></pre>
</blockquote>
<ul>
<li>Créer un fichier <em>setup.py</em> contenant des informations à
propos de votre paquetage et les points d'entrée:</li>
</ul>
<blockquote>
<pre class="example"><code>from setuptools import setup
setup (
name='TarteAuxPommes',
version="1 …</code></pre></blockquote><ul>
<li>Créer un module dans un répertoire dédié.</li>
</ul>
<blockquote>
<pre class="example"><code>mkdir tarte
$EDITOR tarte/*__init__.py*
Y écrire votre morceau de code préféré.
</code></pre>
<pre class="example"><code>def aux():
print "Pommes !"
</code></pre>
</blockquote>
<ul>
<li>Créer un fichier <em>setup.py</em> contenant des informations à
propos de votre paquetage et les points d'entrée:</li>
</ul>
<blockquote>
<pre class="example"><code>from setuptools import setup
setup (
name='TarteAuxPommes',
version="1.0",
description="De saison.",
author="Jean Schurger",
packages=['tarte'],
entry_points="""
[Tarte]
un_nom = tarte:aux
""",
)
</code></pre>
</blockquote>
<ul>
<li>Tester dans un environnement</li>
</ul>
<blockquote>
<pre class="example"><code>virtualenv
sudo python setup.py install
(ou 'develop' si vous voulez pouvoir modifier le code en place tout en mimant un version installée)
</code></pre>
<pre class="example"><code>In [1]: from pkg_resources import load_entry_point
In [2]: f = load_entry_point('TarteAuxPommes', 'Tarte', 'aux')
Out[2]: f()
Pommes !
</code></pre>
</blockquote>
<ul>
<li>Vous pouvez aussi découvrir des points d'entrée.</li>
</ul>
<p>In a more complex application, you may have more plugins ! and you
may want to discover them and maybe load them too !</p>
<blockquote>
<pre class="example"><code>In [1]: from pkg_resources import iter_entry_points
In [2]: for object in iter_entry_points(group='Baz.plugin'):
...: print object
...:
...:
Foooo = super_plugin:Foo
In [3]: object.load()
Out[3]:
In [4]: _().super_function()
Foo plugin loaded !
Bar!
</code></pre>
</blockquote>
De l'air dans l'essence2012-10-12T00:00:00-04:002012-10-12T00:00:00-04:00Jean Schurgertag:None,2012-10-12:/de-lair-dans-lessence.html<p>C'est réglé, j'ai à nouveau remplacé le filtre à essence, et cette
fois ci, ses ouvertures ont le bon diamètre. J'en ai profité pour
remplacer le vieux bout de tube qui le relie à la pompe à essence par un
neuf. Le tout est bien serré, et oh magie, les …</p><p>C'est réglé, j'ai à nouveau remplacé le filtre à essence, et cette
fois ci, ses ouvertures ont le bon diamètre. J'en ai profité pour
remplacer le vieux bout de tube qui le relie à la pompe à essence par un
neuf. Le tout est bien serré, et oh magie, les problèmes de ralenti ont
disparus !</p>
Pi2012-10-12T00:00:00-04:002012-10-12T00:00:00-04:00Jean Schurgertag:None,2012-10-12:/pi.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>3Kg</td>
<td>Blé malté</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Hallertau</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Hallertau</td>
<td>10m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP 380</p>
<h2 id="notes">Notes</h2>
<p>Embouteillée au sucre de table (mauvaise idée, trop pétillante)</p>
<h2 id="infos">Infos</h2>
<ul>
<li>G.I: 1.057 ? G.F: 1.032</li>
<li>Brassée: [2012-10-12 ven]</li>
<li>Embouteillée: [2012-10-29 lun]</li>
</ul>
Correction de la richesse.2012-10-09T00:00:00-04:002012-10-09T00:00:00-04:00Jean Schurgertag:None,2012-10-09:/correction-de-la-richesse.html<p>Le compteur affiche pratiquement 40000 (soit 123000 réels). J'ai
finalement corrigé la richesse. Méthode:</p>
<ul>
<li>Mettre en route la moto, et la laisser chauffer un peu</li>
<li>Tourner la poignée de gaz pour faire monter le régime moteur voulu
(j'ai choisi 6000 tr/min).</li>
<li>Tout en maintenant ce régime, couper le moteur …</li></ul><p>Le compteur affiche pratiquement 40000 (soit 123000 réels). J'ai
finalement corrigé la richesse. Méthode:</p>
<ul>
<li>Mettre en route la moto, et la laisser chauffer un peu</li>
<li>Tourner la poignée de gaz pour faire monter le régime moteur voulu
(j'ai choisi 6000 tr/min).</li>
<li>Tout en maintenant ce régime, couper le moteur à l'aide de
l'interrupteur ou de la clef.</li>
<li>Retirer le réservoir, la boite à air, contrôler et noter la couleur
des bougies (blanc = trop pauvre, noir = trop riche, marron = ok).</li>
<li>Retirer les carbus pour accéder aux visses de richesse (attention de
ne pas mettre de l'essence partout).</li>
</ul>
<h1 id="varia">Varia:</h1>
<ul>
<li>Il manque un collier de fixation des tubes d'échappement (au
cylindre numéro 3), et ça commence à vibrer (ça ne me tente vraiment pas
de réparer ça, le radiateur rend l'accès difficile, mais ce serait
l'occasion de le vidanger).</li>
<li>Le filtre à essence n'est pas adapté, il laisse entrer de l'air, et
un peu d'essence coule à côte (il va être remplacé rapidement).</li>
<li>Le bout de durit entre le filtre à essence et la pompe à fait son
temps, il faut le remplacer aussi (celui entre le filtre et le réservoir
à été raccourci un peu pour enlevé les extrémités usées).</li>
</ul>
mysqlclient read_timeout option2012-10-04T00:00:00-04:002012-10-04T00:00:00-04:00Jean Schurgertag:None,2012-10-04:/mysqlclient-read_timeout-option.html<p><a href="https://github.com/PyMySQL/mysqlclient/blob/main/HISTORY.rst">https://github.com/PyMySQL/mysqlclient/blob/main/HISTORY.rst</a></p>
Mise à jour vers les 122000km2012-09-17T00:00:00-04:002012-09-17T00:00:00-04:00Jean Schurgertag:None,2012-09-17:/mise-a-jour-vers-les-122000km.html<p>Les carbus rénovés sont remontés sur la moto. Il faut que je règle la
richesse, au moins un est un peu trop pauvre, la couleur des bougies me
renseignera.</p>
<p>J'ai aussi changé:</p>
<ul>
<li>les bougies (CR9E)</li>
<li>le filtre à air pour remplacer la vielle mousse par un K&N.</li>
<li>Le filtre …</li></ul><p>Les carbus rénovés sont remontés sur la moto. Il faut que je règle la
richesse, au moins un est un peu trop pauvre, la couleur des bougies me
renseignera.</p>
<p>J'ai aussi changé:</p>
<ul>
<li>les bougies (CR9E)</li>
<li>le filtre à air pour remplacer la vielle mousse par un K&N.</li>
<li>Le filtre à essence</li>
</ul>
<p>J'ai fait la synchro des carbus (au carbtune).</p>
<p>Les soupapes sont encrassées (visibles à la lampe de poche, en
regardant par les pipes d'admission), je vais essayé un additif à
l'essence pour voir ce que ça donne.</p>
<p>Le troisième cylindre semble souffler plus que les autres, et je ne
sais pas quoi en penser.</p>
<p>Montréal et ses rues… probablement après avoir roulé dans un gros
trou, un des joints de fourche s'est mit à couler. J'ai enroulé une
chaussette autour du bras de la fourche pour éviter que l'huile ne coule
sur les freins et le pneu, et maintenant, la ZX-11 est chez kawa, pour
un remplacement des joints…</p>
Carburateurs2012-09-07T00:00:00-04:002012-09-07T00:00:00-04:00Jean Schurgertag:None,2012-09-07:/carburateurs.html<p>(En cours de nettoyage et rénovation)</p>
<p>Les pièces métalliques amovibles (cuves, gicleurs, …) ont passées une
nuit et une journée dans l'acétone.</p>
<p>Faut d'avoir pu les séparer et de ne pas pouvoir retirer les pièces
en plastiques restantes (arrivées d'essence, écrous et joints des
étrangleurs), les carburateurs ont été nettoyés avec …</p><p>(En cours de nettoyage et rénovation)</p>
<p>Les pièces métalliques amovibles (cuves, gicleurs, …) ont passées une
nuit et une journée dans l'acétone.</p>
<p>Faut d'avoir pu les séparer et de ne pas pouvoir retirer les pièces
en plastiques restantes (arrivées d'essence, écrous et joints des
étrangleurs), les carburateurs ont été nettoyés avec un produit à
vaporiser. Quelques passages de brosse à dent, cotons-tiges, dremel
équipée d'une brosse en nylon, et le tour est joué.</p>
<p>Les multiples micro-orifices ont été vérifiés, parfois même
débouchés.</p>
<p>Le tout est maintenant remonté avec des joints, des sièges de
pointeaux, et des pointeaux neufs.</p>
<p>Les visses de ralenti sont réglées à -2 tours, et les flotteurs à
13mm.</p>
<p>Le fonctionnement des membranes à été vérifié manuellement en
déplaçant les boisseaux et les étrangleurs coulissent bien.</p>
<p>Conformément au manuel du constructeur, les deux gicleurs du milieu
sont de taille 158 (les deux cylindres du milieu chauffent plus), et les
deux de l'extérieur en 160.</p>
<p><a href="file:/images/carbus.jpg"><img src="file:///images/carbus.jpg"/></a></p>
Joints de fourche + plaquettes avant.2012-09-01T00:00:00-04:002012-09-01T00:00:00-04:00Jean Schurgertag:None,2012-09-01:/joints-de-fourche-plaquettes-avant.html<p>Les deux joints de fourche ont été changés aujourd'hui, ainsi que les
plaquettes de frein avant.</p>
Joint du tendeur de chaîne de transmission2012-08-18T00:00:00-04:002012-08-18T00:00:00-04:00Jean Schurgertag:None,2012-08-18:/joint-du-tendeur-de-chaine-de-transmission.html<p>Aujourd'hui, changement du joint du tendeur de chaîne d'arbre à came,
changement d'huile, et nouvelle batterie.</p>
<p>Dépose et repose du tendeur:</p>
<ol>
<li><p>desserrer le “gros écrou” qui maintient le ressort et la tige
(clef de 12).</p></li>
<li><p>Enlever les deux petits écrous (celui du fond n'est pas très
accessible, mais une petite …</p></li></ol><p>Aujourd'hui, changement du joint du tendeur de chaîne d'arbre à came,
changement d'huile, et nouvelle batterie.</p>
<p>Dépose et repose du tendeur:</p>
<ol>
<li><p>desserrer le “gros écrou” qui maintient le ressort et la tige
(clef de 12).</p></li>
<li><p>Enlever les deux petits écrous (celui du fond n'est pas très
accessible, mais une petite clef plate de 8 fait l'affaire. pas besoin
de déposer le moteur).</p></li>
<li><p>Démonter, le tendeur et vérifier le bon fonctionnement du cran
d'arrêt.</p></li>
<li><p>Nettoyer, lubrifier (attention à ne pas faire entrer de saletés
dans le moteur).</p></li>
<li><p>Sans remettre le ressort ni la tige, ni l'écrou correspondant,
rentrer la crémaillère dans le tendeur (donc la position la plus
courte).</p></li>
<li><p>Replacer le tendeur avec un joint neuf sur le moteur, toujours
sans avoir remonté le ressort. Serrer les petits écrous.</p></li>
<li><p>Replacer le ressort, la tige, serrer le gros écrou, en prêtant
l'oreille aux clics de la crémaillère.</p>
<p>(Merci à NEPTUNE75 de zzr-leclub.fr pour les conseils)</p>
<p><a href="file:/images/tendeur_1.jpg"><img src="file:///images/tendeur_1.jpg"/></a></p>
<p><a href="file:/images/tendeur_2.jpg"><img src="file:///images/tendeur_2.jpg"/></a></p>
<p><a href="file:/images/tendeur_3.jpg"><img src="file:///images/tendeur_3.jpg"/></a></p>
<p><a href="file:/images/tendeur_4.jpg"><img src="file:///images/tendeur_4.jpg"/></a></p></li>
</ol>
Forums2012-08-13T00:00:00-04:002012-08-13T00:00:00-04:00Jean Schurgertag:None,2012-08-13:/forums.html<p>Le blog me sert aussi d'aide mémoire. Et il est susceptible d'être lu
par d'autres propriétaires de ZX-11 (ou ZZR 1100).</p>
<p>Voila deux forums francophones alimentés par des gens sympathiques et
compétants.</p>
<p><a href="http://forum.zzr-leclub.fr/">http://forum.zzr-leclub.fr/</a></p>
<p><a href="http://1000tomcat.forumactif.org/">http://1000tomcat.forumactif.org/</a></p>
Camshaft Chain Tensioner2012-08-12T00:00:00-04:002012-08-12T00:00:00-04:00Jean Schurgertag:None,2012-08-12:/camshaft-chain-tensioner.html<p>En bon français : Tendeur de chaîne d'arbre à cames.</p>
<p>C'est le joint derrière cette chose la qui fuit.</p>
Fuite2012-08-12T00:00:00-04:002012-08-12T00:00:00-04:00Jean Schurgertag:None,2012-08-12:/fuite.html<p>J'ai trouvé la fuite d'huile ! Ça n'a pas l'air compliqué à réparer.
J'attends l'avis de spécialistes.</p>
<p><a href="file:/images/fuite_1.jpg"><img src="file:///images/fuite_1.jpg"/></a></p>
<p><a href="file:/images/fuite_2.jpg"><img src="file:///images/fuite_2.jpg"/></a></p>
IPA 20122012-03-01T00:00:00-05:002012-03-01T00:00:00-05:00Jean Schurgertag:None,2012-03-01:/ipa-2012.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5Kg</td>
<td>Maris Otter</td>
</tr>
<tr class="even">
<td>300g</td>
<td>Biscuit</td>
</tr>
<tr class="odd">
<td>300g</td>
<td>Munich</td>
</tr>
<tr class="even">
<td>400g</td>
<td>Blé</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Magnum</td>
<td>60min</td>
</tr>
<tr class="even">
<td>60g</td>
<td>Citra</td>
<td>10min</td>
</tr>
<tr class="odd">
<td>60g</td>
<td>Cascade</td>
<td>0min</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
Red2012-02-01T00:00:00-05:002012-02-01T00:00:00-05:00Jean Schurgertag:None,2012-02-01:/red.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>4.8Kg</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>Munich</td>
</tr>
<tr class="odd">
<td>100g</td>
<td>Cristal 80</td>
</tr>
<tr class="even">
<td>100g</td>
<td>Chocolate</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>15g</td>
<td>Nugget</td>
<td>60</td>
</tr>
<tr class="even">
<td>15g</td>
<td>Liberty</td>
<td>dry</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP004</p>
Barley Wine2012-01-01T00:00:00-05:002012-01-01T00:00:00-05:00Jean Schurgertag:None,2012-01-01:/barley-wine.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>5Kg</td>
<td>Maris Otter</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Nugget</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Glacier</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Glacier</td>
<td>Dry</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-04</p>
<h2 id="note">Note</h2>
<p>16L -> 5L</p>
Bière de noel 20112011-12-01T00:00:00-05:002011-12-01T00:00:00-05:00Jean Schurgertag:None,2011-12-01:/biere-de-noel-2011.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>Pils</td>
</tr>
<tr class="even">
<td>2.5Kg</td>
<td>Flocons de blé</td>
</tr>
<tr class="odd">
<td>0.5Kg</td>
<td>Flocons de seigle</td>
</tr>
</tbody>
</table>
<h2 id="divers">Divers</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1Kg</td>
<td>Miel</td>
<td>5min</td>
</tr>
<tr class="even">
<td></td>
<td>Irish moss</td>
<td>5min</td>
</tr>
<tr class="odd">
<td>2 c.a.t</td>
<td>Coriandre Indienne</td>
<td>5min</td>
</tr>
<tr class="even">
<td>22g</td>
<td>Écorce d'orange</td>
<td>5min</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>45g</td>
<td>Willamette</td>
<td>15min</td>
</tr>
<tr class="even">
<td>45g</td>
<td>Willamette</td>
<td>5min</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP545</p>
Montréal-Python2011-10-07T00:00:00-04:002011-10-07T00:00:00-04:00Jean Schurgertag:None,2011-10-07:/montreal-python.html<p>I made a 20 minutes presentation at Montréal-Python.</p>
<p>It was demonstrating off-line map generation using <a href="https://www.openstreetmap.org/">Openstreetmap</a> tools, a
Posgresql database, Leaflet,…</p>
<p>[[<a href="https://pyvideo.org/montreal-python/openstreetmap-geocaching.html">https://pyvideo.org/montreal-python/openstreetmap-geocaching.html</a>][]</p>
Andréa2011-10-01T00:00:00-04:002011-10-01T00:00:00-04:00Jean Schurgertag:None,2011-10-01:/andrea.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>250g</td>
<td>Crystal 120</td>
</tr>
<tr class="even">
<td>110g</td>
<td>Flocons d'orge</td>
</tr>
<tr class="odd">
<td>660g</td>
<td>Orge torréfié</td>
</tr>
<tr class="even">
<td>reste</td>
<td>Pale</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Sucre</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>500g</td>
<td>Cassonade</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>60g</td>
<td>Centenial</td>
<td>60m</td>
</tr>
<tr class="even">
<td>60g</td>
<td>Citra</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>40g</td>
<td>Centenial</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>S-04</p>
Première tout grain2011-09-01T00:00:00-04:002011-09-01T00:00:00-04:00Jean Schurgertag:None,2011-09-01:/premiere-tout-grain.html<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>6Kg</td>
<td>Pils Belge</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>500g</td>
<td>Dextrose</td>
</tr>
</tbody>
</table>
<h2 id="houblons-1">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Citra</td>
<td>60</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Cascade</td>
<td>5m</td>
</tr>
<tr class="odd">
<td>23g</td>
<td>Cascade</td>
<td>0m</td>
</tr>
</tbody>
</table>
<h1 id="levure_1">Levure</h1>
<p>T58</p>
Corail à bande maltée2011-08-06T00:00:00-04:002011-08-06T00:00:00-04:00Jean Schurgertag:None,2011-08-06:/corail-a-bande-maltee.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3kg</td>
<td>LME</td>
</tr>
<tr class="even">
<td>400g</td>
<td>Pale</td>
</tr>
<tr class="odd">
<td>250g</td>
<td>Crystal 80</td>
</tr>
<tr class="even">
<td>100g</td>
<td>Chocolate</td>
</tr>
<tr class="odd">
<td>250g</td>
<td>Biscuit</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Sucre</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>500g</td>
<td>Cassonade</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>17g</td>
<td>Nugget 13</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Willamette 4.8</td>
<td>15m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Willamette 4.8</td>
<td>5m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP 510 (Belgian Bastogne)</p>
Trop petillante2011-04-01T00:00:00-04:002011-04-01T00:00:00-04:00Jean Schurgertag:None,2011-04-01:/trop-petillante.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>170g</td>
<td>2.5 German light crystal malt</td>
</tr>
<tr class="even">
<td>142g</td>
<td>German munich malt</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1.2kg</td>
<td>Dextrose</td>
</tr>
<tr class="even">
<td>1 tasse</td>
<td>Cassonade</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>34g</td>
<td>Cascade</td>
<td>45m</td>
</tr>
<tr class="even">
<td>10g</td>
<td>Centenial</td>
<td>12m</td>
</tr>
<tr class="odd">
<td>12g</td>
<td>Centenial</td>
<td>3m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
Found various small old contributions to Gnome2011-03-20T00:00:00-04:002011-03-20T00:00:00-04:00Jean Schurgertag:None,2011-03-20:/found-various-small-old-contributions-to-gnome.html<h2 id="calculator-2011-03-20">Calculator [2011-03-20]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/b60fe9faf149c9ab3e2bad03e799e424d8785042">https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/b60fe9faf149c9ab3e2bad03e799e424d8785042</a>
<a href="https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/530ae26720a4264bf1e9c2cf6306da710f1884fe">https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/530ae26720a4264bf1e9c2cf6306da710f1884fe</a></p>
<h2 id="control-center-2002-01-10">Control center [2002-01-10]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/44aca2c8c39ba3b2276fe1cc6e42ecd97dfac988">https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/44aca2c8c39ba3b2276fe1cc6e42ecd97dfac988</a></p>
<p>2002-1-10 <a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/3e7140488f04564130227c96a639b5320fa00ac9">https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/3e7140488f04564130227c96a639b5320fa00ac9</a></p>
<h2 id="nautilus-2002-01-07">Nautilus [2002-01-07]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/nautilus/-/commit/81054a094cc71762420e7d3d913441f3969ed62e">https://gitlab.gnome.org/GNOME/nautilus/-/commit/81054a094cc71762420e7d3d913441f3969ed62e</a></p>
<h2 id="gdl-2002-10-20">GDL [2002-10-20 …</h2><h2 id="calculator-2011-03-20">Calculator [2011-03-20]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/b60fe9faf149c9ab3e2bad03e799e424d8785042">https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/b60fe9faf149c9ab3e2bad03e799e424d8785042</a>
<a href="https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/530ae26720a4264bf1e9c2cf6306da710f1884fe">https://gitlab.gnome.org/GNOME/gnome-calculator/-/commit/530ae26720a4264bf1e9c2cf6306da710f1884fe</a></p>
<h2 id="control-center-2002-01-10">Control center [2002-01-10]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/44aca2c8c39ba3b2276fe1cc6e42ecd97dfac988">https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/44aca2c8c39ba3b2276fe1cc6e42ecd97dfac988</a></p>
<p>2002-1-10 <a href="https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/3e7140488f04564130227c96a639b5320fa00ac9">https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/3e7140488f04564130227c96a639b5320fa00ac9</a></p>
<h2 id="nautilus-2002-01-07">Nautilus [2002-01-07]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/nautilus/-/commit/81054a094cc71762420e7d3d913441f3969ed62e">https://gitlab.gnome.org/GNOME/nautilus/-/commit/81054a094cc71762420e7d3d913441f3969ed62e</a></p>
<h2 id="gdl-2002-10-20">GDL [2002-10-20]</h2>
<p><a href="https://gitlab.gnome.org/GNOME/gdl/-/commit/22af6d72a773fdd4f9c5bd16e05d045853e98a8b">https://gitlab.gnome.org/GNOME/gdl/-/commit/22af6d72a773fdd4f9c5bd16e05d045853e98a8b</a></p>
Ineous Ejaculation2011-03-01T00:00:00-05:002011-03-01T00:00:00-05:00Jean Schurgertag:None,2011-03-01:/ineous-ejaculation.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>350g</td>
<td>Victory</td>
</tr>
<tr class="even">
<td>350g</td>
<td>Amber</td>
</tr>
<tr class="odd">
<td>3Kg</td>
<td>Light ME</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>Light ME</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Sucre</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1 tasse</td>
<td>Cassonade</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Centenial</td>
<td>45min</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Cascade</td>
<td>10min</td>
</tr>
<tr class="odd">
<td>60g</td>
<td>Citra</td>
<td>5min</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Cascade</td>
<td>0min</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<ul>
<li>ALE Trapist WLP500</li>
</ul>
Black Valentine2011-02-14T00:00:00-05:002011-02-14T00:00:00-05:00Jean Schurgertag:None,2011-02-14:/black-valentine.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3.1k</td>
<td>M&F light DME</td>
</tr>
<tr class="even">
<td>45g</td>
<td>120°L crystal</td>
</tr>
<tr class="odd">
<td>230g</td>
<td>Chocolate</td>
</tr>
<tr class="even">
<td>150g</td>
<td>Black</td>
</tr>
<tr class="odd">
<td>57g</td>
<td>Roasted barley</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>230g</td>
<td>Cassonade</td>
</tr>
<tr class="even">
<td>680g</td>
<td>Dextrose</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblone</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>20g</td>
<td>Willamet</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>WLP920: Old Bavarian Lager</p>
La Pythoune Indienne de Seattle2011-01-01T00:00:00-05:002011-01-01T00:00:00-05:00Jean Schurgertag:None,2011-01-01:/la-pythoune-indienne-de-seattle.html<h2 id="maltssucres">Malts/Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qty</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>3Kg</td>
<td>LME</td>
</tr>
<tr class="even">
<td>340g</td>
<td>Munich</td>
</tr>
<tr class="odd">
<td>125g</td>
<td>Crystal 40°</td>
</tr>
<tr class="even">
<td>250g</td>
<td>Crystal 15°</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qty</th>
<th>Sucre</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1 tasse</td>
<td>Cassonade</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qty</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>30g</td>
<td>Magnum</td>
<td>60m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Athanum</td>
<td>10m</td>
</tr>
<tr class="odd">
<td>30g</td>
<td>Amarillo</td>
<td>5m</td>
</tr>
<tr class="even">
<td>30g</td>
<td>Athanum</td>
<td>0m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>US-05</p>
<h2 id="note">Note</h2>
<p>Recette par Yannick Gingras</p>
Yellow Snow2011-01-01T00:00:00-05:002011-01-01T00:00:00-05:00Jean Schurgertag:None,2011-01-01:/yellow-snow.html<h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1Kg</td>
<td>blé</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>de Morgans</td>
</tr>
<tr class="odd">
<td>250</td>
<td>corn sirup</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1.4Kg</td>
<td>de DME</td>
</tr>
<tr class="even">
<td>250g</td>
<td>miel</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>50g</td>
<td>de Saaz</td>
<td>45m</td>
</tr>
</tbody>
</table>
<h2 id="épices">Épices</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Épice</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>20g</td>
<td>de orange peel</td>
<td>45m</td>
</tr>
<tr class="even">
<td>2 * 5mg</td>
<td>Coriander</td>
<td>45m</td>
</tr>
<tr class="odd">
<td>1/2 baton</td>
<td>canelle</td>
<td>45m</td>
</tr>
<tr class="even">
<td>2.5g</td>
<td>poivre</td>
<td>45m …</td></tr></tbody></table><h2 id="malts">Malts</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1Kg</td>
<td>blé</td>
</tr>
<tr class="even">
<td>1Kg</td>
<td>de Morgans</td>
</tr>
<tr class="odd">
<td>250</td>
<td>corn sirup</td>
</tr>
</tbody>
</table>
<h2 id="sucres">Sucres</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Malt</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1.4Kg</td>
<td>de DME</td>
</tr>
<tr class="even">
<td>250g</td>
<td>miel</td>
</tr>
</tbody>
</table>
<h2 id="houblons">Houblons</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Houblon</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>50g</td>
<td>de Saaz</td>
<td>45m</td>
</tr>
</tbody>
</table>
<h2 id="épices">Épices</h2>
<table>
<thead>
<tr class="header">
<th>Qté</th>
<th>Épice</th>
<th>Ébullition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>20g</td>
<td>de orange peel</td>
<td>45m</td>
</tr>
<tr class="even">
<td>2 * 5mg</td>
<td>Coriander</td>
<td>45m</td>
</tr>
<tr class="odd">
<td>1/2 baton</td>
<td>canelle</td>
<td>45m</td>
</tr>
<tr class="even">
<td>2.5g</td>
<td>poivre</td>
<td>45m</td>
</tr>
</tbody>
</table>
<h2 id="levure">Levure</h2>
<p>3944 Belgian White</p>
Couleurs de la G9x2010-12-22T00:00:00-05:002010-12-22T00:00:00-05:00Jean Schurgertag:None,2010-12-22:/couleurs-de-la-g9x.html<p>Je suis l'heureux propriétaire d'une souris G9x. Ce petit jouet est
équipé de boutons programmables et de lumières colorées. Le petit bout
de code suivant permet de changer ces couleurs.</p>
<pre class="example"><code>#!/usr/bin/env python
import usb
G9_VENDOR_ID = 0x046d
G9_PRODUCT_IDS = [0xc048, 0xc066]
def get_g9_handle():
for bus in usb.busses():
for device …</code></pre><p>Je suis l'heureux propriétaire d'une souris G9x. Ce petit jouet est
équipé de boutons programmables et de lumières colorées. Le petit bout
de code suivant permet de changer ces couleurs.</p>
<pre class="example"><code>#!/usr/bin/env python
import usb
G9_VENDOR_ID = 0x046d
G9_PRODUCT_IDS = [0xc048, 0xc066]
def get_g9_handle():
for bus in usb.busses():
for device in bus.devices:
if device.idVendor == G9_VENDOR_ID and \
device.idProduct in G9_PRODUCT_IDS:
return device.open()
return None
def g9_change_color(handle=None, red=None, green=None, blue=None):
""" Change the color of an G9 leds
g9: handle
red: int between 0 and 255
green: int between 0 and 255
blue: int between 0 and 255
"""
handle = handle or get_g9_handle()
assert handle
COMMAND = "\x10\x00\x80\x57"
data = "%s%c%c%c" % (COMMAND, red, green, blue)
REQUEST_TYPE = 0x34
REQUEST = 0x09
VALUE = 0x210
INDEX = 0x01
handle.controlMsg(REQUEST_TYPE, REQUEST, data,
VALUE, INDEX)
if __name__ == '__main__':
from sys import argv
if len(argv) == 2:
g9_change_color(red=int(argv[1][:2], 16),
green=int(argv[1][2:4], 16),
blue=int(argv[1][4:6], 16))
else:
print 'Usage: g9led.py RRGGBB'
</code></pre>
<p>Inspiré de <a href="http://als.regnet.cz/logitech-g9-linux-led-color.html">http://als.regnet.cz/logitech-g9-linux-led-color.html</a></p>
Django translations2010-02-15T00:00:00-05:002010-02-15T00:00:00-05:00Jean Schurgertag:None,2010-02-15:/django-translations.html<p>J'ai participé à la traduction en Français de la documentation de
Django. Effort organisé sous forme de Sprint par Montréal-Python.</p>
<p><a href="https://code.djangoproject.com/wiki/Sprint201002Montreal">https://code.djangoproject.com/wiki/Sprint201002Montreal</a></p>
<p><a href="https://www.mtlpy.org/fr/2010/01/django-sprint-follow-up/">https://www.mtlpy.org/fr/2010/01/django-sprint-follow-up/</a></p>
Unit tests with Pylons and its XMLRPCController2009-12-09T00:00:00-05:002009-12-09T00:00:00-05:00Jean Schurgertag:None,2009-12-09:/unit-tests-with-pylons-and-its-xmlrpccontroller.html<p>Now that you have implemented a nice XMLRPCController in your Pylons
application, it's time to write unit tests covering it. The problem is
that the <strong>xmlrpclib</strong> tries to make a real HTTP connection
to an address, but the TestApp used in your TestController is not a real
server, and doesn't …</p><p>Now that you have implemented a nice XMLRPCController in your Pylons
application, it's time to write unit tests covering it. The problem is
that the <strong>xmlrpclib</strong> tries to make a real HTTP connection
to an address, but the TestApp used in your TestController is not a real
server, and doesn't listen to any address.</p>
<p>Here is a quick way to enable the coverage of your XMLRPCController.
Inspired by Kumar McMillan on this <a href="http://groups.google.com/group/pylons-discuss/browse_thread/thread/6c8fc792116bf149/72b7d727654fbd69?#72b7d727654fbd69">thread</a>.</p>
<pre class="example"><code>from StringIO import StringIO
import xmlrpclib
from xmlrpclib import ServerProxy
from mygreatapp.tests import TestController
# a fake httplib.HTTP using 'app' (see TestController.__init__())
class WSGILikeHTTP():
def __init__(self, host, app):
self.app = app
self.headers = {}
self.content = StringIO()
def putrequest(self, method, handler):
self.method = method
self.handler = handler
def putheader(self, key, value):
self.headers[key] = value
def endheaders(self):
pass
def send(self, body):
self.body = body
def getfile(self):
return self.content
def getreply(self):
if self.method == "POST":
r = self.app.post(self.handler,
headers=self.headers,
params=self.body)
self.content = StringIO(r.response)
return (200, None, None)
class WSGIAppTransport(xmlrpclib.Transport):
# Only here to pass the 'app'
def __init__(self, app):
xmlrpclib.Transport.__init__(self)
self.app = app
# return the fake httplib.HTTP(host)
def make_connection(self, host):
host, extra_headers, x509 = self.get_host_info(host)
return WSGILikeHTTP(host, self.app)
class TestApiController(TestController):
def test_voicemails_update(self):
# URL _MUST_ starts with 'http' or 'https' (see xmlrpclib.py)
server = ServerProxy('http://dummy/api',
transport=WSGIAppTransport(self.app))
server.super_function("Foo", "Bla", 42)
</code></pre>
SFLvault2009-01-06T00:00:00-05:002009-01-06T00:00:00-05:00Jean Schurgertag:None,2009-01-06:/sflvault.html<p>Small <a href="https://github.com/savoirfairelinux/sflvault/commit/5c528e041def7711789a1c6e21a10eab01ebf3bc">patch</a>
to SFLvault allowing an alternative 'askpass' method.</p>
<p><a href="https://sflvault.org/">https://sflvault.org/</a></p>
Comme ça fait longtemps...2006-09-04T00:00:00-04:002006-09-04T00:00:00-04:00Jean Schurgertag:None,2006-09-04:/comme-ca-fait-longtemps.html<p>…que je n'ai rien posté (et autres histoires de dates)</p>
<p>Présentation d'un outil bien pratique: <strong>datefudge</strong></p>
<p><strong>datefudge</strong> est écrit et maintenu par Matthias
Urlichs. Il permet de faire croire à un programme à une fausse date.</p>
<h1 id="exemple">Exemple</h1>
<pre class="example"><code>% perl
$t = localtime; print "$t\n";
Mon Sep 4 15:17:09 2006 …</code></pre><p>…que je n'ai rien posté (et autres histoires de dates)</p>
<p>Présentation d'un outil bien pratique: <strong>datefudge</strong></p>
<p><strong>datefudge</strong> est écrit et maintenu par Matthias
Urlichs. Il permet de faire croire à un programme à une fausse date.</p>
<h1 id="exemple">Exemple</h1>
<pre class="example"><code>% perl
$t = localtime; print "$t\n";
Mon Sep 4 15:17:09 2006
</code></pre>
<pre class="example"><code>% datefudge 2006-08-01 perl
$t = localtime; print “$t\n”;
Tue Aug 1 00:00:14 2006
</code></pre>
<p>Magique !</p>
<p>Comment ça marche ?</p>
<p><strong>datefudge</strong> fonctionne comme un
<strong>LD<sub>PRELOAD</sub></strong> et remplace les fonctions
<em>time()</em> et <em>gettimeofday()</em>.</p>
<p>Plus d'infos sur la <a href="http://manpages.debian.net/cgi-bin/display_man.cgi?id=cbd8df970c1ddb5b3d7bbb24fbc9025d&amp;format=html">page
de manuel</a>. Ou dans les <a href="ftp://ftp.debian.org/dists/unstable/main/source/">sources</a>.</p>
<p>Un autre projet intéressant permetant de jouer sur d'autres appels
système: <a href="http://www.subterfugue.org">subterfugue</a>.</p>
Alsa, ES1978 Maestro 2E2004-08-10T00:00:00-04:002004-08-10T00:00:00-04:00Jean Schurgertag:None,2004-08-10:/alsa-es1978-maestro-2e.html<p>A while ago I had an Toshiba laptop and some issue with the sound
card.</p>
<p>Just quoting from: <a href="https://lore.kernel.org/all/Pine.LNX.4.58.0408101424520.17110@wotan.suse.de/T/">https://lore.kernel.org/all/Pine.LNX.4.58.0408101424520.17110@wotan.suse.de/T/</a></p>
<pre class="example"><code>Hi,
I have an (old) laptop with an ESS Technology ES1978 Maestro 2E
rev 10), that seems …</code></pre><p>A while ago I had an Toshiba laptop and some issue with the sound
card.</p>
<p>Just quoting from: <a href="https://lore.kernel.org/all/Pine.LNX.4.58.0408101424520.17110@wotan.suse.de/T/">https://lore.kernel.org/all/Pine.LNX.4.58.0408101424520.17110@wotan.suse.de/T/</a></p>
<pre class="example"><code>Hi,
I have an (old) laptop with an ESS Technology ES1978 Maestro 2E
rev 10), that seems to have an "STAC9721/23" inside (id =
0x83847609).
0000:00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro
2E (rev 10)
Subsystem: Dell: Unknown device 00aa
Flags: bus master, medium devsel, latency 32, IRQ 5
I/O ports at d800 [size=256]
Capabilities: [c0] Power Management
version 2
in the snd_ac97_mixer() function, the ac97 driver test the
AC97_REC_GAIN register by writing 0x8a06 on it, and if it read
well the same value, it enable the AC97_SCAP_AUDIO.
But, on my board, the last quartet of AC97_REC_GAIN, is always
readen as 0, then when the AC97_REC_GAIN is tested, it return
0x0a06 instead of 0x8a06, and the ac97 driver tell "(not audio
or modem codec)", then no sound card.
I simply added a test of 0x83847609 to |= 0x8000 to the test
value, and all works fine.
</code></pre>
UISP, DASA32004-08-10T00:00:00-04:002004-08-10T00:00:00-04:00Jean Schurgertag:None,2004-08-10:/uisp-dasa3.html<p>Small contribution to <a href="https://www.nongnu.org/uisp/">UISP</a>
project.</p>
<p>UISP is a tool to program AVR microcontrollers. Here is an
alternative way to use the serial port to do the programming.</p>
<p>(RESET=!DTR SCK=RTS MOSI=TXD MISO=CTS)</p>
<table>
<thead>
<tr class="header">
<th>AVR</th>
<th>Serial port</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>RESET</td>
<td>!DTR</td>
</tr>
<tr class="even">
<td>SCK</td>
<td>RTS</td>
</tr>
<tr class="odd">
<td>MOSI</td>
<td>TXD</td>
</tr>
<tr class="even">
<td>MISO</td>
<td>CTS</td>
</tr>
</tbody>
</table>
<ul>
<li><a href="https://lists.gnu.org/archive/html/uisp-dev/2004-05/msg00000.html">https://lists.gnu.org …</a></li></ul><p>Small contribution to <a href="https://www.nongnu.org/uisp/">UISP</a>
project.</p>
<p>UISP is a tool to program AVR microcontrollers. Here is an
alternative way to use the serial port to do the programming.</p>
<p>(RESET=!DTR SCK=RTS MOSI=TXD MISO=CTS)</p>
<table>
<thead>
<tr class="header">
<th>AVR</th>
<th>Serial port</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>RESET</td>
<td>!DTR</td>
</tr>
<tr class="even">
<td>SCK</td>
<td>RTS</td>
</tr>
<tr class="odd">
<td>MOSI</td>
<td>TXD</td>
</tr>
<tr class="even">
<td>MISO</td>
<td>CTS</td>
</tr>
</tbody>
</table>
<ul>
<li><a href="https://lists.gnu.org/archive/html/uisp-dev/2004-05/msg00000.html">https://lists.gnu.org/archive/html/uisp-dev/2004-05/msg00000.html</a></li>
<li><a href="https://lists.gnu.org/archive/html/uisp-dev/2004-05/txtmHYoi7w8ck.txt">https://lists.gnu.org/archive/html/uisp-dev/2004-05/txtmHYoi7w8ck.txt</a></li>
</ul>