<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Tym-Project]]></title>
  <link href="http://blog.tym-project.fr/atom.xml" rel="self"/>
  <link href="http://blog.tym-project.fr/"/>
  <updated>2014-10-12T17:07:23+00:00</updated>
  <id>http://blog.tym-project.fr/</id>
  <author>
    <name><![CDATA[Tym]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Récupérer des données sur un Readynas Ultra 2 (Netgear)]]></title>
    <link href="http://blog.tym-project.fr/2014/10/12/recuperation-de-donnees-nas-readynas/"/>
    <updated>2014-10-12T18:00:00+00:00</updated>
    <id>http://blog.tym-project.fr/2014/10/12/recuperation-de-donnees-nas-readynas</id>
    <content type="html"><![CDATA[<p>Très récemment mon Readynas Ultra 2 a eu un problème de carte réseau, par chance il est encore sous garantie et Netgear m&#8217;a proposé de l&#8217;envoyer chez eux pour remplacer le chassis.</p>

<p>Ne pouvant pas vraiment me passer d&#8217;un NAS pour quelques semaines (à ce stade toutes les excuses sont valables&#8230;) j&#8217;ai investit dans un NAS Synology. J&#8217;ai alors réalisé que toutes mes sauvegardes, quelques scripts intéressant, etc étaient stockés uniquement sur mon ReadyNAS.</p>

<p>Il m&#8217;a donc fallu trouver un moyen d&#8217;accéder à ces données via le disque-dur directement.</p>

<!-- more -->


<p><em>Petite précision, il n&#8217;est pas ici question de la récupération de données sur des disques endommagés&#8230; c&#8217;est un sujet beaucoup plus complexe, qui se base toutefois sur le même principe.</em></p>

<h2>RAID dingue de&#8230; données ?</h2>

<p>L&#8217;intêret d&#8217;un NAS par rapport à un disque-dur externe par exemple se situe dans sa capacité à gérer de manière plus ou moins automatique la redondance des données. Je ne vais pas me lancer dans une explication des différents modes de RAID (Google !), mais en général les NAS &#8220;grand public&#8221; proposent un mode de gestion &#8220;automatique&#8221;, où le système va favoriser la redondance par rapport à la performance ou au volume de données disponible.</p>

<p>Avec 2 disques, un Readynas configuré en mode &#8220;X-RAID-2&#8221; va créer un espace de données correspondant à la taille du disque le plus petit et gérer un redondance entre les deux disques. Le système peut donc supporter au maximum un disque en panne sur les deux disponibles.</p>

<p>Bien que propriétaire, ce mode de gestion se base en fait sur du RAID classique, et nous permet donc d&#8217;utiliser les outils habituels pour gérer ces configurations sous Linux.</p>

<h2>La trousse à outils</h2>

<p>Pour connecter le disque à ma machine j&#8217;ai utilisé un adaptateur SATA/USB tel que celui-ci : <a href="http://www.amazon.fr/Advance-USB-009-Adaptateur-SATA-Noir/dp/B0094GUHG8/ref=sr_1_4?ie=UTF8&amp;qid=1413130879&amp;sr=8-4">Advance - USB-009 - Adaptateur IDE / SATA</a>.</p>

<p>Pour éviter de polluer mon système j&#8217;ai aussi décidé de travailler à partir d&#8217;une Ubuntu 14.04 en live-USB.</p>

<p>L&#8217;outil principal pour travailler sur du RAID en Linux est <code>mdadm</code>&#8230; qui s&#8217;installe ainsi sur Ubuntu :</p>

<pre><code>sudo apt-get update &amp;&amp; sudo apt-get install mdadm
</code></pre>

<p><code>apt</code> va aussi installer Postfix&#8230; probablement pour permettre l&#8217;envoi d&#8217;emails d&#8217;alertes&#8230; donc notre cas tout à fait inutile, on peut donc ignorer la configuration.</p>

<h2>&#8220;À la bataille !&#8221;</h2>

<p><em>Oui, c&#8217;est bien une référence à Ages Of Empire II !</em></p>

<p><code>mdadm</code> étant installé, il est temps de connecter le disque-dur à la machine. Ubuntu devrait automatiquement monter certaines partitions&#8230; mais rarement la bonne&#8230;</p>

<p>Pour déterminer la partition qui contient les données je me suis basé essentiellment sur la taille du volume, dans mon cas environ 1 To. Plusieurs commandes permettent de trouver cette information, j&#8217;ai utilisé <code>fdisk -l</code>, voici un extrait du résultat :</p>

<pre><code>Disk /dev/mapper/c-c: 984.6 GB, 984621252608 bytes
255 heads, 63 sectors/track, 119706 cylinders, total 1923088384 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 65536 bytes
Disk identifier: 0x00000000
</code></pre>

<p>Cette partition a la bonne taille, essayons de la monter :</p>

<pre><code>mkdir data
mount -t ext4 /dev/mapper/c-c ./data/
</code></pre>

<p>Victoire !</p>

<h2>Et sinon ?</h2>

<p>Si cette solution ne fonctionne pas, il est toujours possible de travailler avec <code>mdadm</code> pour monter la partition. Par exemple <code>fdisk -l</code> peut nous dire que <code>/dev/md125</code> a aussi la bonne taille.
<code>mdadm --detail /dev/md125</code> peut permettre de confirmer cela et identifer la partition correspondante :</p>

<pre><code>root@ubuntu:/home/ubuntu# mdadm --detail /dev/md125
/dev/md125:
        Version : 1.2
  Creation Time : Sat Sep 27 09:19:16 2014
     Raid Level : raid5
     Array Size : 972040704 (927.01 GiB 995.37 GB)
  Used Dev Size : 972040704 (927.01 GiB 995.37 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Sun Oct  5 16:37:57 2014
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           Name : A021B7C17002:2
          UUID : c04e7c99:2f19ec0b:7ed9de43:dee7c184
         Events : 5667

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       2       8       35        1      active sync   /dev/sdc3
</code></pre>

<p>La toute dernière ligne nous indique donc que <code>/dev/sdc3</code> est la partition à monter après avoir lancé le RAID avec <code>mdadm --run /dev/md125</code>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Planifier librement l'allumage et l'éteignage d'un nas Readynas Ultra 2]]></title>
    <link href="http://blog.tym-project.fr/2013/10/05/planifier-allumage-nas-readynas/"/>
    <updated>2013-10-05T18:10:00+00:00</updated>
    <id>http://blog.tym-project.fr/2013/10/05/planifier-allumage-nas-readynas</id>
    <content type="html"><![CDATA[<p><em>Oh, un post !</em></p>

<p>Mon NAS est formidable, il sait faire plein de choses géniales, mais la meilleure reste la possibilité de s&#8217;allumer et s&#8217;éteindre automatiquement via un planning (basique) déterminé à l&#8217;avance.</p>

<p><img src="https://s3-eu-west-1.amazonaws.com/pics.tym-project.fr/2013-4/S%C3%A9lection_nasnet.png"></p>

<p>Couplée à <a href="http://www.ebay.fr/itm/Bloc-rallonge-electrique-multiprise-maitre-esclave-5-prises-pour-PC-/271206766539?pt=FR_Image_son_Parasurtenseurs_multiprises&amp;hash=item3f252ed7cb">une prise maitre-esclave</a>, mon NAS devient alors le big boss  de toute ma zone multimedia et me permet facilement d&#8217;éteindre tout ce petit monde pendant la nuit et de rallumer le tout le matin au réveil.</p>

<p>Bon, ça c&#8217;était la théorie. En pratique je me suis rapidement trouvé très très limité par la simplicité du planning natif du NAS. Impossible par exemple de prévoir un allumage de 7h à 8h30, puis de 18h à 23h : uniquement de de 7h à 23H&#8230; ce qui n&#8217;est pas très utile dans mon cas car je n&#8217;ai pas de chat qui utilise le net en mon absence.</p>

<p>Mais comment faire alors pour améliorer cette fonctionnalité ? <em>Spoiler, c&#8217;est possible et expliqué ci-après !</em></p>

<!-- more -->


<h2>Mais où se cachent les scripts ?</h2>

<p>Je l&#8217;ai indiqué par le passé, mais le ReadyNAS c&#8217;est simplement une Debian avec une interface Web un peu sexy. Qui dit Debian dit Linux&#8230; et donc le planning de mise en route/éteignage vu plus haut a forcément un fichier de configuration quelque part !</p>

<pre><code>nas:~# find / -name power* | grep -v devices
/frontview/ui/resource/images/Device/power.gif
/sbin/poweroff
/sys/bus/acpi/drivers/power
/sys/class/power_supply
/sys/power
/etc/cron.d/poweroff
/etc/frontview/poweron_timer
/etc/init.d/powerdown
/etc/acpi/events/powerbtn
/etc/acpi/powerbtn
/proc/acpi/button/power
/proc/sys/kernel/poweroff_cmd
</code></pre>

<p>On commence par le plus évident, <code>/etc/cron.d/poweroff</code> :</p>

<pre><code>nas:~# cat /etc/cron.d/poweroff
 0  0 * *  0 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  9 * *  1 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  9 * *  2 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  9 * *  3 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  9 * *  4 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  9 * *  5 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
 0  0 * *  6 root  /frontview/bin/autopoweroff &amp;&gt; /dev/null
</code></pre>

<p>Pas de grosse difficulté ici, si je veux modifier le planning d&#8217;éteignage (&#8220;poweroff&#8221;), il me suffit d&#8217;ajouter des lignes dans ce fichier. Pour la syntaxe exacte, <a href="http://fr.wikipedia.org/wiki/Crontab">Wikipedia</a> est ton ami.</p>

<p>Bon et le &#8220;poweron&#8221; alors ?? On creuse un peu, on regarde les fichier de la liste plus haut&#8230; et&#8230;</p>

<pre><code>nas:~# cat /etc/frontview/poweron_timer
sun 08:00
mon 06:30
tue 06:30
wed 06:30
thu 06:30
fri 06:30
sat 08:00
</code></pre>

<p>Bingo dans <code>/etc/frontview/poweron_timer</code> ! La syntaxe est on ne peut plus simple, et après quelques tests tout fonctionne comme prévu. Je peux ajouter autant de lignes dans les fichiers de config et mon NAS fait la lambada de l&#8217;auto-allumage !</p>

<h2>&#8220;Mais c&#8217;est chiiiiiant à configurer !&#8221;</h2>

<p>Bon au début c&#8217;est bien, puis je me suis rendu compte que cette config n&#8217;a rien de vraiment ergonomique. Je m&#8217;étais créé un petit Google Spredsheet pour suivre le planning de ma config&#8230; et soudain j&#8217;ai eu une révalation ! Si je bidouillait un script qui irait chercher l&#8217;information directement dans le Google Doc pour ensuite l&#8217;appliquer comme un grand sur la config du NAS !</p>

<p>C&#8217;est donc que ce que j&#8217;ai fait.</p>

<p>Oh, je peux vous expliquer en effet !</p>

<p>Pour commencer, voici à quoi ressemble mon planning :</p>

<p><img src="https://s3-eu-west-1.amazonaws.com/pics.tym-project.fr/2013-4/S%C3%A9lection_gdoc.png"></p>

<p>Je vous passe les détails sur la mise en forme automatique ou les listes de choix, mais le principe général est que je travaille sur des plages de 30 minutes du Lundi au Dimanche.</p>

<p>Pour consulter ce document dans un script j&#8217;ai décidé d&#8217;utiliser Python, surtout pour la présence d&#8217;une librairie bien pratique : <a href="https://github.com/burnash/gspread">gspread</a>. Bien pratique surtout pour sa simplicité&#8230; car l&#8217;API Google est une vrai catastrophe en terme d&#8217;ergonomie.</p>

<pre><code>#!/usr/bin/python2.6

import gspread

# Correspondance des jours pour le crontab et pour la config poweroff
day_to_off={'Lundi':1,'Mardi':2,'Mercredi':3,'Jeudi':4,'Vendredi':5,'Samedi':6,'Dimanche':0}
day_to_on={'Lundi':'mon','Mardi':'tue','Mercredi':'wed','Jeudi':'thu','Vendredi':'fri','Samedi':'sat','Dimanche':'sun'}

gc= gspread.login('monmail@gmail.com','monmotdepasse')
wks=gc.open_by_key('clé de la spreadsheet Google Doc').get_worksheet(0)

#On stocke le contenu dans une variable pour accélérer les traitements à venir
full=wks.get_all_values()
full_=[]


for col in range (1,8):
    for line in range(1,49):
            full_.append([full[0][col],full[line][0],full[line][col]])

full=full_
detail=[]


day=full[0][0]
time=full[0][1]
state=full[0][2]
prev=[day,time,state]

for row in range(1,len(full)-1):
    day=full[row][0]
    time=full[row][1]
    state=full[row][2]
    current=[day,time,state]
    if current[2]==prev[2]:
        prev=current
    else:
        detail.append(current)
        prev=current

cron=open('/etc/cron.d/poweroff','w')
poweron=open('/etc/frontview/poweron_timer','w')        

for row in detail:
    if row[2]=="On":
        #print(day_to_on[row[0]]+' '+row[1])
        poweron.write(day_to_on[row[0]]+' '+row[1]+'\n')
    if row[2]=="Off":
        #print(' '+str(int(row[1][3:5]))+' '+str(int(row[1][0:2]))+' * * '+str(day_to_off[row[0]])+' root  /frontview/bin/autopoweroff &amp;&gt; /dev/null')
        cron.write(' '+str(int(row[1][3:5]))+' '+str(int(row[1][0:2]))+' * * '+str(day_to_off[row[0]])+' root  /frontview/bin/autopoweroff &amp;&gt; /dev/null\n')
</code></pre>

<p>Ce petit bijou de programmation (si si, j&#8217;assume !) va donc interroger le Google Doc, organiser le tout pour déterminer les plages On et Off pour ensuite mettre à jours les fichiers de configuration correspondants.</p>

<p>Il suffit ensuite de programmer un <code>cron</code> pour exécuter le script à intervalles réguliers, et le tour est joué !</p>

<pre><code>nas:~# crontab -l
# m h    dom    mon dow command
*/5 *   *   *   *   /root/auto_on_off_calendar.py &amp;
</code></pre>

<h2>Mon NAS, c&#8217;est pas un ReadyNAS, ton truc ça sert à rien !</h2>

<p>Oh oh oh, on se calme les enfants&#8230; J&#8217;ai indiqué plus haut que mon NAS c&#8217;est du Linux dans le dedans, alors Google est ton ami, et peut-être qu&#8217;une <a href="http://superuser.com/questions/149121/is-there-a-way-to-start-a-linux-machine-automatically">solution existe</a>. Bonne expérimentation !</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Installer un serveur PXE sur un ReadyNAS Ultra 2]]></title>
    <link href="http://blog.tym-project.fr/2013/04/26/acronis-boot-cd-par-le-reseau/"/>
    <updated>2013-04-26T14:11:00+00:00</updated>
    <id>http://blog.tym-project.fr/2013/04/26/acronis-boot-cd-par-le-reseau</id>
    <content type="html"><![CDATA[<p><em>Hey ! Non, ce blog n&#8217;est pas mort !</em></p>

<p>J&#8217;ai fait l&#8217;acquisition depuis quelques semaine d&#8217;un NAS Netgear ReadyNAS Ultra 2&#8230; qui depuis n&#8217;existe plus vraiment depuis car remplacé par la série ReadyNAS 10X. Bref.</p>

<p>Ce petit joujou n&#8217;est rien d&#8217;autre qu&#8217;une petite machine avec du Debian dedans, une vieille Debian Etch, qui date un peu mais qui reste fonctionelle. Voulant utiliser mon NAS comme serveur de sauvegarde je me suis mis en tête de bidouiller pour pouvoir booter un CD de sauvegarde Acronis via le réseau.</p>

<p>Eh beurk, Acronis me direz-vous, et un bon vieux Rsync des familles alors ?! Je n&#8217;ai pas trop le choix si je veux pouvoir sauvegarder mon PC pro, car c&#8217;est le seul outil supporté oficiellement par le service informatique de ma boite&#8230;</p>

<p>Dans le monde Linux, boot via le réseau se traduit par <a href="http://fr.wikipedia.org/wiki/Preboot_Execution_Environment">PXE</a>. Pour résumer, une machine compatible pourra lors du démarrage faire une connection au réseau filaire et booter sur une image stockée sur le réseau.</p>

<!-- more -->


<h2>Etape 1 : Les mains dans le terminal</h2>

<p>Première étape avant toute bidouille sur le NAS, c&#8217;est la sauvegarde&#8230; mettez vos données de coté, on sais jamais !<br/>
Ceci étant fait, il va falloir faire du <code>apt-get</code> pour arriver à nos fins, et donc activer l&#8217;accès SSH sur votre NAS. Utilisez tout simplement <a href="http://www.readynas.com/?p=4203">cet add-on</a>, puis un reboot plus tard vous voila dans votre terminal préféré.<br/>
Attention, vous êtes sur un système Debian certes, mais très largement customisé et optimisé par Netgear. On reste donc très prudent sur ce qu&#8217;on installe !</p>

<p>Pour se mettre en jambes :</p>

<pre><code>apt-get update
apt-get upgrade
apt-get install vim
</code></pre>

<h2>Etape 2 : dnsmasq, le serveur PXE (mais pas que)</h2>

<p>Qui dit PXE dit serveur DHCP qui va donner les infos&#8230; exit donc le bon vieux truc par défaut de la box et à nous la solution maison !</p>

<p>J&#8217;ai choisi d&#8217;installer <a href="http://fr.wikipedia.org/wiki/Dnsmasq">dnsmasq</a> car c&#8217;est un outil très léger, très simple d&#8217;utilisation et surtout bien documenté sur la toile. Son installation est en théorie très simple (<code>apt-get install dnsmasq</code>), mais dans notre cas cela ne suffira pas.<br/>
Notre Debian étant un peu ancienne, la version présente dans le repository n&#8217;est pas assez récente et ne propose pas les fonctionnalités PXE voulues&#8230;</p>

<p>On va donc tricher en utilisant les paquets d&#8217;une version Debian plus récente. Une chance que dnsmasq ne soit pas trop contraignant en termes de prérequis, car cela nous évite de changer le système en profondeur.</p>

<p>On récupère donc les packages et on les installe, dans cet ordre strict :</p>

<pre><code>wget http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.15-2_i386.deb
dpkg -i libidn11_1.15-2_i386.deb

wget http://ftp.us.debian.org/debian/pool/main/d/dnsmasq/dnsmasq-base_2.55-2+b1_i386.deb
dpkg -i dnsmasq-base_2.55-2+b1_i386.deb

wget http://ftp.us.debian.org/debian/pool/main/d/dnsmasq/dnsmasq_2.55-2_all.deb
dpkg -i dnsmasq_2.55-2_all.deb
</code></pre>

<p>La configuration est alors assez simple, éditez <code>/etc/dnsmasq.conf</code> et pensez-bien à couper le DHCP de votre box ou autre :</p>

<pre><code>interface=eth0
bind-interfaces

# Quelques options DHCP : le range, la passerelle, le DNS, une ip statique
dhcp-range=192.168.1.50,192.168.1.80,1h
dhcp-option=3,192.168.1.254
dhcp-option=6,192.168.1.101
dhcp-host=00:24:e8:bb:2f:41,192.168.1.10,tym-laptop

# La partie TFTP
enable-tftp
tftp-root=/opt/pxe
dhcp-boot=pxelinux.0
</code></pre>

<p>On a donc maintenant un serveur DHCP, un serveur DNS (par défaut les demandes sont renvoyées aux DNS dans <code>/etc/resolv.conf</code> et dnsmasq utilise <code>/etc/hosts</code> pour la &#8220;zone&#8221; locale) et surtout un serveur PXE.</p>

<h2>Etape 3 : &#8220;On s&#8217;pingue et on s&#8217;fait un boot ?&#8221;</h2>

<p>On va maintenant mettre en place le contenu du serveur PXE : <code>/opt/pxe</code> dans la config précédente.
Tout d&#8217;abord les <a href="https://www.kernel.org/pub/linux/utils/boot/syslinux/3.xx/syslinux-3.51.zip">binaires PXE</a> :</p>

<ul>
<li><code>pxelinux.0</code> à prendre la racine de l&#8217;archive</li>
<li><code>memdisk</code> à trouver dans le dossier memdisk de l&#8217;archive</li>
</ul>


<p>On place les deux fichiers dans <code>/opt/pxe</code> avec l&#8217;image iso de votre choix&#8230; aux hasard le CD bootable Acronis.<br/>
On crée un <strong>répertoire</strong> <code>pxelinux.cfg</code> avec dedans un fichier <code>default</code> contenant :</p>

<pre><code>DEFAULT acronis
LABEL acronis
  KERNEL memdisk
    APPEND initrd=acronis.iso iso raw
</code></pre>

<p>Et hop, tout ce petit monde vous permettra de booter votre iso favorite via le réseau :</p>

<pre><code>nas:~# ls -R /opt/pxe/
/opt/pxe/:
acronis.iso  memdisk  pxelinux.0  pxelinux.cfg

/opt/pxe/pxelinux.cfg:
default
</code></pre>

<p>Bon boot ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Gérer l'allumage et la mise hors tension d'une machine Linux via un smartphone Android]]></title>
    <link href="http://blog.tym-project.fr/2013/01/06/android-et-linux-piloter-une-machine-a-distance/"/>
    <updated>2013-01-06T14:33:00+00:00</updated>
    <id>http://blog.tym-project.fr/2013/01/06/android-et-linux-piloter-une-machine-a-distance</id>
    <content type="html"><![CDATA[<p>Si vous ne le saviez pas, et bien sachez que ma machine &#8220;perso&#8221; tourne sous Linux (ArchLinux), et que mon smartphone fonctionne sous Android. On est content, non ? <br/>
Continuons dans cette voie, avec une photo de mon bureau :<br/>
<img src="https://s3-eu-west-1.amazonaws.com/pics.tym-project.fr/2013-1/IMG_20130106_142700.jpg"></p>

<p>De mieux en mieux, non ? Vous avez certainement remarqué que l&#8217;écran de mon portable est fermé, recouvert de figurines et de poussière&#8230;<br/>
Et donc ? Et donc je ne peux pas l&#8217;allumer via le bouton habituel&#8230; car cela m&#8217;oblige à virer les figurines, soulever l&#8217;écran, le refermer avant qu&#8217;il ne devienne l&#8217;écran principal&#8230; bla bla bla&#8230; j&#8217;ai dû trouver un moyer de gérer l&#8217;alimentation de cette machine à distance. Oh, et je vais vous en parler dans cet article du coup !</p>

<!--more -->


<h2>Allumer une machine sans les mains, le WOL.</h2>

<p>J&#8217;utilise en fait mon smartphone pour déclencher la mise sous tension de mon ordinateur, à l&#8217;aide d&#8217;un protocolo relativement connu : le <code>Wake On Lan </code>. Cet outil permet tout simplement d&#8217;allumer une machine à travers le réseau, mais sous deux conditions : la cible doit être réliée au réseau via un câble Ethernet et la carte réseau doit supporter le protocole <code>WOL</code>.<br/>
Sous Linux, vous pouvez vérifier assez simplement si votre carte Ethernet est compatible WOL avec <code>ethtool</code> (il faudra probablement allez bidouiller dans votre BIOS au préalable) :</p>

<pre><code>[tym@tym-laptop ~]$ sudo ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 2
Transceiver: internal
Auto-negotiation: on
MDI-X: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000007 (7)
               drv probe link
Link detected: yes
</code></pre>

<p>Ce qui nous inéteresse ici c&#8217;est <code>Supports Wake-on: pumbg</code>, qui signifie que la carte supporte le réveil par (<code>man ethtool</code>) :</p>

<pre><code>p   Wake on PHY activity
u   Wake on unicast messages
m   Wake on multicast messages
b   Wake on broadcast messages
g   Wake on MagicPacket™
</code></pre>

<p>Le <code>g</code>, soit &#8220;MagicPacket&#8221; est l&#8217;option qui nous intéresse ! Si <code>Wake-on</code> ne contient pas <code>g</code>, vous pouvez utiliser <code>ethtool -s eth0 wol g</code> pour l&#8217;activer&#8230; à probablement mettre dans un script systemd ou initd pour garder l&#8217;option au reboot.</p>

<p>Pour allumer ma machine en WOL depuis Android j&#8217;utilise <a href="https://play.google.com/store/apps/details?id=com.benfinnigan.wol">cette application</a> car elle permet de générer des Widgets sur le bureau, mais aussi de sauvegarder la configuration via la synchronisation Google&#8230; très pratique car configurer une machine cible requiert de saisir son adresse MAC.</p>

<h2>Eteindre une machine sans les mains, la bidouille.</h2>

<p>Il existe des applications sur le Play Store pour éteindre votre machine à distance, dans la plupart des cas à travers un client installé sur la cible&#8230; je n&#8217;ai pas trouvé mon bonheur et donc je me suis lancé dans un bidouille !</p>

<p>Le principe est le suivant : un serveur web est installé sur mon Linux, en appelant une URL spécifique depuis le smartphone on va déclencher un script qui va arrêter la machine. Simple, non ?</p>

<p>Je vous passe les détails sur l&#8217;installation du serveur Web&#8230; Google est ton ami (enfin il vaut mieux pour toi&#8230;), mais voici plutôt la page qui déclenche l&#8217;arrêt de la machine (en PHP) :</p>

<pre><code>&lt;?php
echo 'Shutting down...';
file_put_contents('/srv/http/poweroff.now', 'poweroff');
?&gt;
</code></pre>

<p>Oui, c&#8217;est tout ! Cette page a pour seul rôle la création d&#8217;un fichier </code>poweroff.now</code> dans le dossier </code>/srv/http</code>.<br/>
La suite du traitement se trouve dans un script bash exécuté par <code>crontab</code> :</p>

<pre><code>*/1 *   *   *   *   /home/tym/scripts/remote_poweroff.sh
</code></pre>

<p><code>poweroff.sh</code> se lance donc toute les minutes, et voici ce qu&#8217;il fait :</p>

<pre><code>#!/bin/bash
ACTION=/srv/http/poweroff.now
if [ -e "$ACTION" ]; then
rm $ACTION
/sbin/poweroff
fi
</code></pre>

<p>Ce script vérifie l&#8217;existence du fichier créé par la page web, le supprime le cas échéant et arrête la machine. Il est bien entendu possible d&#8217;améliorer le fonctionnement en proposant d&#8217;autre action comme le reboot ou autre, il suffirait de faire évoluer la page Web et le script de traitement&#8230;</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Icy Box IB-351 et Linux]]></title>
    <link href="http://blog.tym-project.fr/2012/10/21/icy-box-ib-351-et-linux/"/>
    <updated>2012-10-21T18:59:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/10/21/icy-box-ib-351-et-linux</id>
    <content type="html"><![CDATA[<p>Il-y-a un quelques années, disons 5 ou 6 ans, basculer un ordinateur personnel sous Linux signifait d&#8217;abord vérifier la compatibilité du matériel. Cela est toujours vrai aujourd&#8217;hui, en témoigne <a href="http://www.linux-drivers.org/">Linux-Drivers.org</a>, mais de manière générale ce n&#8217;est plus un passage obligé.</p>

<p>De manière générale.</p>

<p>Dans le but de mettre en place un NAS sur un Raspberry Pi flambant neuf, j&#8217;ai fait l&#8217;acquisition d&#8217;un boitier Sata USB 3 <a href="http://www.ldlc.com/fiche/PB00116759.html">Icy Box IB-351StU3-B</a>. Ni une ni deux je branche la chose sur le premier port USB disponible&#8230; et&#8230; <code>mount /dev/sda1 /tmp/test</code>&#8230; et rien. Un beau plantage du système.</p>

<!-- more -->


<h2>Le pourquoi de la non chose</h2>

<p>Pourquoi un simple périphérique de stockage n&#8217;est pas reconnu par ma machine ? Avant de creuser un peu plus, je teste rapidement le boitier sur Windows 7 : pas de problème, le disque et son boitier sont correctement reconnus.</p>

<p>De retour sur Linux, je regarde ce qui se passe du coté de <code>dmesg</code> :</p>

<pre><code>[ 3434.890820] usb 1-1.3: new high-speed USB device number 4 using dwc_otg
[ 3434.998764] usb 1-1.3: New USB device found, idVendor=1234, idProduct=5678
[ 3434.998799] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3434.998820] usb 1-1.3: Product: VLI Product String
[ 3434.998836] usb 1-1.3: Manufacturer: VLI manufacture String
[ 3434.998852] usb 1-1.3: SerialNumber: 0000000000006122
[ 3435.007870] scsi0 : usb-storage 1-1.3:1.0
[ 3439.167410] scsi 0:0:0:0: Direct-Access     WDC WD25 00BEKT-75PVM     01.0 PQ: 0 ANSI: 2
[ 3439.173974] sd 0:0:0:0: [sda] 488397165 512-byte logical blocks: (250 GB/232 GiB)
[ 3439.175587] sd 0:0:0:0: [sda] Write Protect is off
[ 3439.175626] sd 0:0:0:0: [sda] Mode Sense: 00 06 00 00
[ 3439.177209] sd 0:0:0:0: [sda] No Caching mode page present
[ 3439.177243] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 3439.186049] sd 0:0:0:0: [sda] No Caching mode page present
[ 3439.186085] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 3439.199966]  sda: sda1
[ 3439.200029] sda: p1 size 488395120 extends beyond EOD, enabling native capacity
[ 3439.206799] sd 0:0:0:0: [sda] No Caching mode page present
[ 3439.206836] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 3439.209317]  sda: sda1
[ 3439.209375] sda: p1 size 488395120 extends beyond EOD, truncated
[ 3439.220922] sd 0:0:0:0: [sda] No Caching mode page present
[ 3439.220959] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 3439.220981] sd 0:0:0:0: [sda] Attached SCSI disk
[ 3440.467258] sd 0:0:0:0: [sda]  Result: hostbyte=0x00 driverbyte=0x08
[ 3440.467301] sd 0:0:0:0: [sda]  Sense Key : 0x5 [current] 
[ 3440.467327] sd 0:0:0:0: [sda]  ASC=0x24 ASCQ=0x0
[ 3440.467349] sd 0:0:0:0: [sda] CDB: cdb[0]=0x28: 28 00 00 00 00 38 00 00 08 00 00 00
[ 3440.467411] end_request: I/O error, dev sda, sector 56
[ 3440.467434] Buffer I/O error on device sda, logical block 56
[ 3440.467458] Buffer I/O error on device sda, logical block 57
[ 3440.467476] Buffer I/O error on device sda, logical block 58
[ 3440.467494] Buffer I/O error on device sda, logical block 59
[ 3440.467511] Buffer I/O error on device sda, logical block 60
[ 3440.467528] Buffer I/O error on device sda, logical block 61
[ 3440.467545] Buffer I/O error on device sda, logical block 62
[ 3440.467562] Buffer I/O error on device sda, logical block 63
</code></pre>

<p>Le mot clé ici est <code>SCSI</code>, en effet ce boitier permet un changement de disque-dur à chaud (c&#8217;est à dire sans arrêt/relance), ce n&#8217;est donc pas un simple périphérique USB comme je l&#8217;imaginais.
Pour confirmer le problème, je teste un <code>hpparm /dev/sda1</code> :</p>

<pre><code>/dev/sda1:
 HDIO_DRIVE_CMD(identify) failed: Invalid argument
 readonly      =  0 (off)
 readahead     = 256 (on)
</code></pre>

<p>Pour comparer, la même commande sur un disque fonctionnel :</p>

<pre><code>/dev/sda2:
 multcount     =  8 (on)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 30401/255/63, sectors = 204800, start = 2048
</code></pre>

<h2>Retour à l&#8217;envoyeur ou geekage intense ?</h2>

<p>Coup de chance pour ce post, LDLC ne propose pas de politique d&#8217;échange ou remboursement, et comme le disque n&#8217;est pas explicitement compatible Linux point de salut auprès du SAV. Il faut donc que je trouve une solution.</p>

<p>Après quelques recherches, je trouve <a href="http://ubuntuforums.org/showthread.php?t=1866432">cet article</a> qui semble correspondre à mon problème, et renvoit vers cet <a href="http://marc.info/?l=linux-usb&amp;m=131946676027988&amp;w=2">obscure publication</a>.</p>

<p>En regardant de plus près, il s&#8217;avère que le boitier se présente comme un appareil de classe <code>SFF-8020i</code> (visible avec un <code>lsusb -v</code>) :</p>

<pre><code>bInterfaceSubClass      2 SFF-8020i, MMC-2 (ATAPI)
</code></pre>

<p><a href="www.bswd.com/sff8020i.pdf">Une recherche Google</a> me permet de trouver une Datasheet, qui a pour titre &#8220;ATA Packet Interface for CD-ROMs&#8221;. Hu hum. CD-ROM ? Effectivement, cela doit être un moyen simplifié de permetre le hot-swap sur un disque-dur (car on peut changer le média dans un lecteur CD-ROM sans reboot).<br/>
Un peu plus loin dans la doc on peut lire &#8220;Support for command packets of at least 12 bytes in length.&#8221;, je n&#8217;ai pas trouvé cela par hasard, c&#8217;est écrit dans l&#8217;article mentionné plus haut (&#8220;This kicks-in code to force all commands to 12-byte, as (I think) required by 8020i&#8221;). Bien qu&#8217;il soit question de 12 octets minimum pour les commandes envoyées au périphérique, les développeurs du noyau Linux ont probablement interprété cela comme une limite à ne pas dépasser.</p>

<p>Quelqu&#8217;un qui doit connaître le noyau comme sa poche a trouvé <a href="http://marc.info/?l=linux-usb&amp;m=131947421908909&amp;w=2">la solution </a>, il faut modifier le noyau pour qu&#8217;il ne force plus les instructions à une longeur de 12 octets. La publication n&#8217;est plus trop à jour, sur un noyau 3.6.2 il faut éditer le fichier <code>linux-3.6.2/drivers/usb/storage/protocol.c</code> et le modifier ainsi :</p>

<pre><code>/* Ligne 66, on commente */
/*for (; srb-&gt;cmd_len &lt; 12; srb-&gt;cmd_len++)
*       srb-&gt;cmnd[srb-&gt;cmd_len] = 0;
*/

/* Ligne 90, on commente */
/* srb-&gt;cmd_len = 12; */
</code></pre>

<p>On recompile le noyau, et hop tout fonctionne, le disque est reconnu sans erreurs.</p>

<p>Alors pour de vrai, j&#8217;ai un peu triché, je n&#8217;ai pas encore compilé de noyau pour un Rapsberry Pi car cela un implique une compilation croisée (compiler du code pour un processeur ARM sur un processeur x86). Mais promis, j&#8217;ai testé et approuvé sur le Archlinux installé sur mon laptop et je me lancerain bientôt dans la cross-compilation pour le Rapsberry Pi :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CyanogenMod 9 sur un HTC One S... entre boot loop et sd-cauchemard]]></title>
    <link href="http://blog.tym-project.fr/2012/08/16/cm9-htc-one-s-boot-loop-et-sdcard/"/>
    <updated>2012-08-16T23:02:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/08/16/cm9-htc-one-s-boot-loop-et-sdcard</id>
    <content type="html"><![CDATA[<p>Je suis l&#8217;heureux propriétaire d&#8217;un HTC One S, et même si la ROM Sense d&#8217;origine est très stable et plutôt agréable à utiliser, je n&#8217;ai pas pu résister à l&#8217;appel de CM9 !</p>

<!-- more -->


<p>Vous l&#8217;avez probablement lu sur les interwebs, CM9 vient d&#8217;être officielement publiée par l&#8217;équipe en charge du projet. Une information à tiroirs, car en fait seulement une pincée d&#8217;appareils est officiellement supportée à ce jour (la communauté doit alors travailler sur d&#8217;autre terminaux qui, selon la stabilité de la chose, seront intégrés ou non dans la branche officielle).<br/>
C&#8217;est dans cet esprit qu&#8217;un portage sur HTC One S est en cours, et est aujourd&#8217;hui très proche de son pendant officiel&#8230; raison amplemant suffisante pour me lancer dans l&#8217;aventure. Je vais donc vous expliquer le processus, vous trouverez certainement des explications plus détaillées ailleurs, je vais donc surtout insister sur les points qui me semblent importants&#8230; et surtout comment je me suis sortit de quelques mauvaises passes.</p>

<p><em>N&#8217;hésitez pas à utiliser les commentaires pour poser vos questions :)</em></p>

<h2>ROM ? Flash ? Kernel ? ADB ?!</h2>

<p>Avant de rentrer dans le vif du sujet une petite explication sur les principes de base s&#8217;impose. Installer (ou flasher) une ROM sur un terminal Android c&#8217;est 3 étapes majeures :<br/>
*  Déverouiller le bootloader, ou plus simplement : virer ces p**** de protections inutiles<br/>
*  Flasher une Recovery, c&#8217;est à dire installer un système de gestion du terminal très bas-niveau, indépendant de la version d&#8217;Android. C&#8217;est en quelque sorte un BIOS.<br/>
*  Flasher la ROM (installer le système d&#8217;exploitation)</p>

<p>Ces étapes font appel à plusieurs outils, que je connais finalement très peu, mais voici ce que j&#8217;en ai compris :<br/>
*  ADB, un outil pour discuter avec le terminal depuis une autre machine en USB. Je me l&#8217;explique comme un terminal SSH.<br/>
*  Fastboot, le truc un peu obscur qui sert à flasher tout et son contraire&#8230; (heureux ?)</p>

<p><strong> Je vous invite très fortement à sauvegarder toute information importante en dehors de votre terminal&#8230; on ne sais jamais. Pensez aussi à <a href="http://support.google.com/android/bin/answer.py?hl=en&amp;answer=1663708">activer la synchronisation des paramètres</a> avec votre compte Google, vous gagnerez un temps précieux à la réinstallation. </strong></p>

<h2>Clic clic ?</h2>

<p>Il est tout à fait possible d&#8217;effectuer toute la manipulation sans toucher la ligne de commande, c&#8217;est d&#8217;ailleurs ce que j&#8217;ai fait lors de mes premières tentatives (oh, si j&#8217;avais su&#8230;).<br/>
L&#8217;outil incontournable c&#8217;est le <a href="http://forum.xda-developers.com/showthread.php?t=1604677">All-in-one toolkit for HTC One S</a>, très bien documenté un peu partout sur le web.<br/>
Seul élément qui m&#8217;a posé problème c&#8217;est l&#8217;installation du Recovery, pour une raison que j&#8217;ignore seul TWRP est fonctionnel (CWM ne démarrait pas sur mon appareil). Oh et si vous avez des difficultés pour faire reconnaître votre appareil : mettez-vous en mode stockage USB, et activez le déboggage.</p>

<p>Hop, un saut dans le temps et vous voila avec votre terminal déverrouillé, direction la ligne de commande pour la suite.</p>

<h2>adb shell push kamoulox flash recovery</h2>

<p>Démarrez votre terminal en recovery, téléchargez les <a href="http://ville.giev.de/?cat=8">images CM9 à jour</a> et copiez-les sur le téléphone avec un <code>adb push mon_zip.zip /sdcard</code>, facile, non ? Utilisez ensuite le menu de votre Recovery pour installer les .zip.<br/>
Il faut ensuite flasher le <code>boot.img</code>, soit le noyau de votre linux embarqué (qui va charger les drivers pour le matériel par exemple) : <code>fastboot flash boot boot.img</code>.</p>

<p>On pense bien à vider le cache et le cache dalvik et on redémarre&#8230; et oh magie CID (la mascotte) est bien là, sur son fond clignotant. Il a clignoté un bail dans mon cas. A vrai dire il a tellement clignoté que je me croyais en boite de nuit&#8230; bref : BOOT LOOP !!!<br/>
Une boot loop c&#8217;est une installation mal faite ou buggée qui n&#8217;arrive pas à se lancer et tourne en boucle&#8230; Arf !<br/>
Après quelques recherches, flash, recherches, une solution : démarrer en recovery et faire un Factory reset.</p>

<p>Bien, le téléphone démarre enfin sur la ROM, tout à l&#8217;air parfait (et fluide !). &#8220;You can now unmout sdcard&#8221;. Wat ? Mon cher CM9 ne reconnaît donc pas le stockage interne du téléphone. Me voila de retour en recovry, Factory reset, reboot, idem, Factory reset, idem, flash, idem&#8230; et puis le lendemain matin la révélation : je démarre mon terminal, pas de sdcard bla bla, un petit tour dans <code>Settings &gt; Backup &amp; reset &gt; Factory data reset</code> et hop, mon téléphone redémarre et reconnait sa sdcard !</p>

<h3>Nous raconte pas ta vie !</h3>

<p>Pour résumer :<br/>
* Installer CM9 depuis la Recovery<br/>
* Démarrer une première fois. Si boot loop alors retour en Recovery et Factory reset<br/>
* Android se lance correctement, si problème de sdcard non reconnue : <code>Settings &gt; Backup &amp; reset &gt; Factory data reset</code></p>

<h2>&#8220;J&#8217;ai tout pêté, ça marche plus, je pleure&#8230;&#8221;</h2>

<p>Si jamais vous vous trouvez dans une impasse avec un sytème qui ne démarre plus sa ROM, vous pouvez vous en sortir en suivant <a href="http://www.htconeforum.com/forum/htc-one-s-hacks/389-how-unbrick-restore-your-htc-one-s-back-100-stock-relocked.html">ces explications</a>. Comme indiqué dans le tutoriel, vous allez avoir besoin d&#8217;une &#8220;RUU&#8221;, c&#8217;est à dire de la ROM officielle du constructeur. Chaque ROM dépend de votre opérateur et de votre version Radio (les chiffres affichés dans le meu du bootloader). Un seul endroit pour trouver votre bonheur : <a href="http://forum.xda-developers.com/showthread.php?t=1543588">ce post sur le forum xda</a>, fouillez bien les réponses car certains membres donnent des liens de téléchargement alternatifs.</p>

<p><strong> De manière générale, documentez-vous bien avant de bidouiller les outils, pour éviter de vous planter&#8230; et surtout pour apprendre un maximum sur cet univers passionnant :) </strong></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Flux RSS : idées de lecture et méthodes de gestion]]></title>
    <link href="http://blog.tym-project.fr/2012/07/15/sources-et-organisation-de-flux-rss/"/>
    <updated>2012-07-15T15:07:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/07/15/sources-et-organisation-de-flux-rss</id>
    <content type="html"><![CDATA[<p>De temps en temps un article ou un tweet annoncent la fin du flux RSS&#8230; mais l&#8217;ancètre fait de la résistance ! Heureusement d&#8217;ailleurs, car personellement je ne peux pas rester collé à Twitter ou autre réseau social, plein de bonnes choses, mais très prolifique et encombré par du bruit inutile.</p>

<h2>Balance tes sources !</h2>

<p>Je vous épargne les incontournables comme Numerama, PC Inpact ou encore Gizmodo pour me concentrer sur ceux plus confidentiels ou moins connus (à mon sens) en France.</p>

<p>Voici donc une sélection de mes flux favoris <!-- more --> :</p>

<ul>
<li><p>Sécurité</p>

<ul>
<li><a href="http://www.f-secure.com/weblog/">F-Secure</a></li>
<li><a href="http://krebsonsecurity.com/">Krebs On Security</a> - Des articles passionants, qui explorent des sujets en détails</li>
<li><a href="http://blog.sucuri.net">Sucuri</a></li>
</ul>
</li>
<li><p>Life Hacking (bidouilles au quotidien)</p>

<ul>
<li><a href="http://lifehacker.com">Lifehacker</a> - L&#8217;incontournable !</li>
<li><a href="http://www.ikeahackers.net">Ikea Hacker</a> - De super idées pour améliorer votre intérieur&#8230; pour peu que vous soyez un minimum bricoleur !</li>
</ul>
</li>
<li><p>Les &#8220;gens&#8221;</p>

<ul>
<li><a href="http://korben.info">Korben</a></li>
<li><a href="http://akibag.com">Akibag</a> - Un produit sympa, mais surtout de passionants articles sur l&#8217;entreuprenariat en France</li>
<li><a href="http://shiii.org">Shiii</a> - Très prolixe à une époque, plus calme aujourd&#8217;hui mais toujours quelques perles qui me font sourire</li>
<li><a href="http://blog.spyou.org">Turb(l)o(g)</a> - En ce moment le rédacteur refait une maison en mode ultra geek&#8230; need !</li>
<li><a href="http://www.codinghorror.com">Coding Horror</a> - L&#8217;excellent Jeff Atwood nous parle de code, mais pas que&#8230; passionant</li>
</ul>
</li>
<li><p>Gadgets et geekeries</p>

<ul>
<li><a href="http://craziestgadgets.com">Craziest Gadgets</a></li>
<li><a href="http://www.geekologie.com/">Geekologie</a> - Parfois hilarant, souvent drôle, j&#8217;adore !</li>
</ul>
</li>
</ul>


<p>Si je devais choisir LE flux à suivre absolument, ce serait <a href="http://news.ycombinator.com/">Hacker News</a>. C&#8217;est un flux richissime en informations diverses, sur un ensemble de sujets technologiques&#8230; attention par contre&#8230; c&#8217;est au minimum 100 articles par jour :-)<br/>
Il existe des agréagateurs pour Hacker News comme <a href="http://www.daemonology.net/hn-weekly-ask/">Hacker News Weekly</a> ou des <a href="http://talkfast.org/2010/07/23/a-cure-for-hacker-news-overload">flux filtrés</a> pour n&#8217;avoir que les articles les plus populaires.</p>

<h2>Astuces de lecture</h2>

<p>J&#8217;utilise Google Reader pour lire mes flux. La première raison est que c&#8217;est une moyen simple de centraliser l&#8217;information independamment de la plateforme : depuis mon PC perso, pro, mon Android ou encore toute machine connectée au Web.<br/>
J&#8217;apprécie aussi le classement par dossiers ou encore la possibilité de &#8220;marquer&#8221; (mettre en favoris) certains articles pour les relire plus tard, typiquement quand je suis sur mon téléphone pour des textes très longs ou avec des vidéos.</p>

<p>Bonus, Google Reader est compatible avec des applications très sympathiques comme Fliboard (Android et iOs) ou <a href="http://feedly.com/">Feedly</a>.</p>

<p>Un élément très important est d&#8217;éviter de s&#8217;abonner à trop d&#8217;information, au risque de passer son temps à éliminer le contenu qui ne vous intéresse pas.<br/>
Mais comment faire alors quand un flux vous attire mais qu&#8217;il est &#8220;pollué&#8221;, au hasard, pas des news Apple&#8230; ?<br/>
La solution : fragmenter ses abonnements sur un même site. Prenons comme exemple <a href="http://arstechnica.com/">ars technica</a> qui propose <a href="http://arstechnica.com/rss-feeds/">une page pour différencer ses flux</a>.<br/>
Moins simple mais toujours faisable avec d&#8217;autres sites comme Le Journal du Geek, où il suffit de naviguer dans une catégorie (exemple : <a href="http://www.journaldugeek.com/category/telephonie/">téléphonie</a>), puis d&#8217;utiliser la fonction <a href="http://support.mozilla.org/fr/kb/Marque-pages%20dynamiques">&#8220;S&#8217;abonner à &#8230;&#8221;</a> de Firefox&#8230; et hop un flux débarrassé du bruit ambiant !</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Android : perte du signal 3g après activation du GPS]]></title>
    <link href="http://blog.tym-project.fr/2012/03/24/android-perte-signal-3g-avec-gps/"/>
    <updated>2012-03-24T19:04:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/03/24/android-perte-signal-3g-avec-gps</id>
    <content type="html"><![CDATA[<p>Android c&#8217;est super, Google Navigation encore plus. Sauf quand ça plante. Surtout en voiture, paumé au milieu de la cambrouse&#8230;<br/>
Oh j&#8217;ai la solution, mais laissez moi vous raconter&#8230;</p>

<!-- more -->


<h2>Vous avez dit &#8220;stressant&#8221; ?</h2>

<p>Le problème est donc le suivant :</p>

<ul>
<li>Mon téléphone est connecté en 3g (ou Edge, peut importe), tout va bien</li>
<li>Je lance Google Navigation, tout va bien</li>
<li>Je choisis ma destination, tout va bien</li>
<li>L&#8217;icône du GPS s&#8217;affiche dans la barre d&#8217;état, je perd la connection data !</li>
</ul>


<p>Frustration et énervement, le seul moyen que j&#8217;avais trouvé pour pouvoir retrouver une connexion data était de couper/réactiver la connectivité de mon mobile.<br/>
En bref, le fait d&#8217;allumer le module GPS (y compris dans Facebook ou toute autre application de localisation) avait pour conséquence facheuse de me faire perdre toute connectivité 3g.</p>

<h2>Google est ton ami&#8230; mais ça suffit pas toujours</h2>

<p>La miracle se trouve evidemment sur l&#8217;interweb, faut-il encore comprendre ce qui y est expliqué. Il est donc question d&#8217;APN, soit &#8220;Appareil Photo Numérique&#8221; en français. Oui, rien à voir avec le sujet !<br/>
Recherche recherche&#8230; ah ! Eureka ! APN c&#8217;est en fait &#8220;Access Point Name&#8221;, soit les points d&#8217;accès réseau.</p>

<p>Le bug en question fait que si vous avez plus de un &#8220;APN&#8221; dans la fameuse liste, activer le GPS fait perdre les pédales à votre terminal et il est incapable de retrouver sa connectivité d&#8217;origine.</p>

<h2>Bon, tu la donne la solution ou quoi ?!</h2>

<p>Hop, un petit tour dans <code>Paramètres&gt;Sans fil et réseaux&gt;Réseaux mobiles&gt;Noms des points d'accès</code>, faites un peu de ménage pour arriver au résultat suivant (le nom va bien entendu varier en fonction de votre opérateur adoré) :</p>

<p><img src="https://s3-eu-west-1.amazonaws.com/pics.tym-project.fr/2012-1/2012-01-28+17.38.42.png"></p>

<p>On garde donc le minimum : l&#8217;accès données et l&#8217;accès MMS (qui sont deux chose bien différentes).</p>

<p>Allez, votre calvaire est terminé, finit la crise de nerf ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Un Gmail, une ligne de commande...]]></title>
    <link href="http://blog.tym-project.fr/2012/03/16/mail-avec-gmail-en-ligne-de-commande-bis/"/>
    <updated>2012-03-16T22:21:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/03/16/mail-avec-gmail-en-ligne-de-commande-bis</id>
    <content type="html"><![CDATA[<p>&#8230; et c&#8217;est le retour du mail en ligne de commande ! Du Python qui fonctionne mieux que le précédent qui, pour une raison inconnue, n&#8217;envoyait plus mes chers messages plein de bits (oh oh!).</p>

<p>Trève de bons mots :</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">from</span> <span class="nn">email.mime.multipart</span> <span class="kn">import</span> <span class="n">MIMEMultipart</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">email.mime.base</span> <span class="kn">import</span> <span class="n">MIMEBase</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">email.utils</span> <span class="kn">import</span> <span class="n">COMMASPACE</span><span class="p">,</span> <span class="n">formatdate</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">email</span> <span class="kn">import</span> <span class="n">encoders</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">os</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">smtplib</span> <span class="kn">import</span> <span class="n">SMTP</span>
</span><span class='line'>
</span><span class='line'><span class="k">def</span> <span class="nf">send_mail</span><span class="p">(</span><span class="n">send_from</span><span class="p">,</span> <span class="n">send_to</span><span class="p">,</span> <span class="n">subject</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="p">[]):</span>
</span><span class='line'>        <span class="n">smtp_serv</span> <span class="o">=</span> <span class="n">SMTP</span><span class="p">(</span><span class="s">&#39;smtp.gmail.com&#39;</span><span class="p">,</span><span class="s">&#39;587&#39;</span><span class="p">)</span>
</span><span class='line'>    <span class="n">smtp_serv</span><span class="o">.</span><span class="n">starttls</span><span class="p">()</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">smtp_serv</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="s">&#39;i-mel-a-dresse@gmail.com&#39;</span><span class="p">,</span> <span class="s">&#39;mot de passe moi le sel veux tu&#39;</span><span class="p">)</span>
</span><span class='line'>        <span class="n">date_</span> <span class="o">=</span> <span class="n">formatdate</span><span class="p">(</span><span class="n">localtime</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">msg</span> <span class="o">=</span> <span class="n">MIMEMultipart</span><span class="p">()</span>
</span><span class='line'>        <span class="n">msg</span><span class="p">[</span><span class="s">&#39;From&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">send_from</span>
</span><span class='line'>        <span class="n">msg</span><span class="p">[</span><span class="s">&#39;To&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">COMMASPACE</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">send_to</span><span class="p">)</span>
</span><span class='line'>        <span class="n">msg</span><span class="p">[</span><span class="s">&#39;Date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">date_</span>
</span><span class='line'>        <span class="n">msg</span><span class="p">[</span><span class="s">&#39;Subject&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">subject</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">msg</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">MIMEText</span><span class="p">(</span><span class="n">text</span><span class="p">))</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
</span><span class='line'>            <span class="n">file_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span><span class='line'>            <span class="n">file_part</span> <span class="o">=</span> <span class="n">MIMEBase</span><span class="p">(</span><span class="s">&#39;application&#39;</span><span class="p">,</span> <span class="s">&quot;octet-stream&quot;</span><span class="p">)</span>
</span><span class='line'>            <span class="n">file_part</span><span class="o">.</span><span class="n">set_payload</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s">&quot;rb&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
</span><span class='line'>            <span class="n">encoders</span><span class="o">.</span><span class="n">encode_base64</span><span class="p">(</span><span class="n">file_part</span><span class="p">)</span>
</span><span class='line'>            <span class="n">file_part</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;Content-Disposition&#39;</span><span class="p">,</span> <span class="s">&#39;attachment; filename=&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span>
</span><span class='line'>                       <span class="o">%</span> <span class="n">file_name</span><span class="p">)</span>
</span><span class='line'>            <span class="n">msg</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="n">file_part</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">smtp_serv</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">send_from</span><span class="p">,</span> <span class="n">send_to</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">as_string</span><span class="p">())</span>
</span><span class='line'>        <span class="n">smtp_serv</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure>


<p>Sans rentrer dans les détails, cette fonction prend en argument l&#8217;expéditeur, le destinataire, l&#8217;objet, le message et un tableau de fichiers (chemin complet).</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Naviguer plus vite sur internet, améliorer son débit ? C'est possible !]]></title>
    <link href="http://blog.tym-project.fr/2012/02/14/ameliorer-son-debit-internet/"/>
    <updated>2012-02-14T21:11:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/02/14/ameliorer-son-debit-internet</id>
    <content type="html"><![CDATA[<p>Avoir un débit rapide pour accéder à internet c&#8217;est important, et cela varie fonction de différents facteurs comme votre fournisseur d&#8217;accès ou la qualité de votre Wifi&#8230; oui c&#8217;est en effet un sujet assez vaste !<br/>
Un moyen assez simple d&#8217;accélérer le temps d&#8217;accès aux site que vous visitez avec votre brouteur préféré c&#8217;est le DNS.</p>

<!-- more -->


<h2>Quoi qu&#8217;où qu&#8217;est-ce le DNS ??</h2>

<p>Quand il est question de réseau on parle très souvent d&#8217;IP (Internet Protocol), et donc d&#8217;adresses sous la forme <code>192.168.1.208</code> par exemple. On a beau être vachement balèzes en technologie de l&#8217;information, c&#8217;est tout de même pas la panacée de se souvenir d&#8217;autant d&#8217;adresses numériques que de sites webs visités&#8230;<br/>
On inventa donc le DNS, ou Domain Name System, qui permet tout simplement d&#8217;associer un nom à une adresse. Par exemple :<code>blog.tym-project.fr</code> est accessible à l&#8217;adresse IP <code>207.97.227.245</code>&#8230; ou presque, mais c&#8217;est une autre histoire.</p>

<p>Cette résolution de nom (ouais mon gars, c&#8217;est le terme ad-hoc pour ce processus) est faite par un serveur qui a dans sa configuration une liste <code>Nom:IP</code>. Tout simplement. Bon pas aussi évident en réalité, mais Wikipedai aura moins la flemme que moi de vous expliquer !</p>

<h2>Plus vite, plus vite, plus viiiite</h2>

<p>A chaque site que vous visitez votre navigateur va donc interroger le serveur DNS configuré dans votre machine pour trouver l&#8217;adresse IP du site correspondant, et c&#8217;est sur ce point que vous allez pouvoir grapiller quelques secondes. <em>La phrase précédente est en lice pour &#8220;la phrase qui tue les asmathiques&#8221;, repirez !</em></p>

<p>Il va donc falloir trouver le serveur DNS qui répond le plus vite aux demandes de votre machine, et il n&#8217;existe pas de solution ultime généralisée, vous allez devoir tester !</p>

<p>Si vous êtes plutôt Windowsien, alors je vous invite à tester <a href="http://www.grc.com/dns/benchmark.htm">DNS Benchmark</a> : cet outil va vous permettre de tester le temps de réponse DNS d&#8217;un ensemble de serveurs avec des couleurs, des graphiques et des chiffres. Je n&#8217;ai pas essayé, mais j&#8217;y crois, ça devrait marcher :)</p>

<p>Pour les Linuxiens, pas de solution toute faite&#8230; mais c&#8217;est pas gênant, bash à la rescousse ! J&#8217;ai écrit un petit bout de script tout simple qui va vous permettre de faire des statistiques un peu &#8220;à la pelle&#8221;, mais suffisament explicites dans mon cas.</p>

<pre><code>while :; do for i in 8.8.8.8 208.67.222.222 89.2.0.1 80.10.246.2; do echo "###  $i"; time nslookup blog.tym-project.fr $i | grep real ; sleep 1; done; echo "--------";done
</code></pre>

<p>Cette commande va donc tourner en boucle, pour avoir des points de mesure un minimum valables, et vous donner pour chaque serveur DNS le temps aproximatif de la résolution.</p>

<p>Tel qu&#8217;il est défini ici je test : Google DNS, Open DNS, DartyBox DNS, Orange DNS. En pratique  qui nous intéresse c&#8217;est la valeur &#8220;real&#8221; :</p>

<pre><code>### 8.8.8.8 ###
real    0m0.021s
user    0m0.003s
sys 0m0.003s

###  208.67.222.222 ###
real    0m0.026s
user    0m0.003s
sys 0m0.003s

###  89.2.0.1 ###
real    0m0.015s
user    0m0.003s
sys 0m0.003s

###  80.10.246.2 ###
real    0m15.017s
user    0m0.007s
sys 0m0.000s
--------

###  8.8.8.8 ###
real    0m0.021s
user    0m0.000s
sys 0m0.007s

[...]    
</code></pre>

<p>Un rapide coup d&#8217;oeil désigne le gagnant : les DNS DartyBox sont plus efficaces, en partie logique car ils sont techniquement plus proches de ma Box.</p>

<p>Une fois l&#8217;heureux élu trouvé chez vous, il ne vous reste plus qu&#8217;à paraméter votre machine ou même votre Box pour utiliser le nouveau serveur DNS.</p>

<h2>Je vois rouge ! Oh, Orange, pardon&#8230;</h2>

<p>Ce test m&#8217;a permis de confirmer ce que j&#8217;ai expérimenté douloureusement par le passé : les DNS d&#8217;Orange sont complètement à la ramasse, y compris pour les clients Livebox (à vérifier). Les mesures sont flagrantes : 15 secondes contre 15 milli-secondes par rapport au DNS Darty par exemple, soit <strong>1000 fois plus lent</strong>&#8230; C&#8217;est une abbération totale !</p>

<p>Si vous voulez augmenter votre débit avec Orange (ou Livebox), commencez donc par changer de serveur DNS (si vous ne savez pas comment faire, demandez dans les commentaires).</p>

<p>C&#8217;est cadeau juste  pour le plaisir, et pourtant j&#8217;ai bien suivi les <a href="http://assistance.orange.fr/les-adresses-dns-791.php">préconisations</a> de l&#8217;opérateur historique :</p>

<pre><code>###  80.10.246.2 ###
real    0m15.017s
</code></pre>

<p>C&#8217;est sûr la #MamieDuCantal elle a le temps d&#8217;attendre sa résolution de noms à ce rythme&#8230;</p>

<p>Et ben&#8230; ;-)</p>

<p><em>Edit : en toute transparence, des chiffres fournis par un camarade chez Orange, où le constat n&#8217;est pas si sombre (cf. dernière ligne). Je suis preneur de vos tests !</em></p>

<pre><code>### 8.8.8.8 ###
real 0m0.136s
user 0m0.000s
sys 0m0.008s

### 208.67.222.222
real 0m0.071s
user 0m0.012s
sys 0m0.004s

### 89.2.0.1
real 0m0.059s
user 0m0.004s
sys 0m0.008s

### 80.10.246.2
real 0m0.053s
user 0m0.000s
sys 0m0.012s
--------
</code></pre>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[On vous recommande 5 clics et nouveaux onglets par mois de Janvier]]></title>
    <link href="http://blog.tym-project.fr/2012/01/28/en-janvier-click-ce-qu-il-te-plait/"/>
    <updated>2012-01-28T17:29:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/01/28/en-janvier-click-ce-qu-il-te-plait</id>
    <content type="html"><![CDATA[<p>Eh, bonne année ! Pour commencer 2012 en beautée, des liens et encore des liens :)</p>

<ol>
<li><a href="http://www.0boxer.com/">Limiter le bazar dans sa boite Gmail&#8230; en jouant !</a></li>
<li><a href="www.reddit.com/r/linux/comments/mi80x/give_me_that_one_command_you_wish_you_knew_years/">Une mine de commandes pas connues sur Linux</a></li>
<li><a href="http://lifehacker.com/5845627/store-pot-covers-inside-your-cabinet-doors-with-a-few-inexpensive-hooks">Pas bête l&#8217;idée pour stocker les couvercles dans la cuisine (oui, dans la vrai vie !)</a></li>
<li><a href="http://httpstat.us/">Un outil pour le dev : une API qui sort des codes Http. Très pratique pour débugger</a></li>
<li><a href="http://sharingmyip.com/">Trouver les sites sur le même hébergement mutualisé ? Facile !</a></li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[J'ai testé la batterie de secours USB MiPOW Power Tube 2200]]></title>
    <link href="http://blog.tym-project.fr/2012/01/14/batterie-de-secours-usb-mipow-powertube/"/>
    <updated>2012-01-14T13:26:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/01/14/batterie-de-secours-usb-mipow-powertube</id>
    <content type="html"><![CDATA[<p>Ayant fait l&#8217;acquisition d&#8217;un HTC Desire d&#8217;occasion il-y-a quelques mois, outre la liberté qu&#8217;il m&#8217;apporte, c&#8217;est un éternel combat contre la batterie à plat ! Je suis assez souvent en déplacement, je n&#8217;ai donc pas toujours l&#8217;occasion de bancher mon mobile&#8230; et c&#8217;est sans compter sur le désert électrique dans les wagons SNCF :)<br/>
Je me suis donc mis en quête d&#8217;une solution pour recharger mon téléphone &#8220;sur la route&#8221;, et je crois bien avoir trouvé !</p>

<!-- more -->


<p>Tout a commencé par un article sur <a href="http://craziestgadgets.com/2011/11/22/review-mipow-powertube-3000/">Craziest Gadgets</a> faisant l&#8217;apologie d&#8217;un produit analogue, un peu trop orienté vers les produits Apple à mon goût, mais m&#8217;orientant vers d&#8217;autres batteries de la marque MiPow.</p>

<p>J&#8217;ai finalement acheté le <a href="http://www.mipow.com/product_detail.php?pid=10&amp;lang=en">Power Tube 2200</a> car moins cher, plus compact et plus joli&#8230; enfin c&#8217;est mon avis (les goûts et les couleurs hein !).</p>

<h2>Quoi qu&#8217;où qu&#8217;est-ce le Power Tube ?</h2>

<p>Une sort de grosse pile en aluminium, légère mais pas trop, avec une multitude d&#8217;embouts et une petite poche en tissu pour transporter le tout :</p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2012-1/mipow1.jpg"></p>

<p>Beaucoup de choix donc dans les appareils à recharger, dans mon cas mon iPod, mon HTC Desire (micro USB) et mon Nokia.<br/>
La recharge du Power Tube se fait par USB comme tout gadget moderne, il se branche aux différents appareils via un câble munis de prises &#8220;Jack&#8221; pour connecter les adaptateurs :</p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2012-1/mipow2.jpg"></p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2012-1/mipow3.jpg"></p>

<h2>Top chrono !</h2>

<p>La bête se recharge complêtement en 4 à 6 heures, et s&#8217;éclaire alors en bleu. Oui, le bleu c&#8217;est geek et classe en même temps !<br/>
Il faut bien avouer que 5 heures en moyenne c&#8217;est long&#8230; vaut mieux pas être pressé !</p>

<p>Mon HTC Desire branché au Power Tube se recharge de 15% à 95% de batterie en 3 heures environ, vidant la pile portative toute son énergie par la même occasion.</p>

<h2>Bon, c&#8217;est bien ce bidule ou pas ?</h2>

<p>Très utile pour un petit coup de jus en se déplaçant ou dans une poche de part le format compact du Power Tube, je trouve la connectique un peu faiblarde et j&#8217;ai des scrupules à la mettre à rude épreuve. Sur ce modèle l&#8217;USB femelle (universel donc) est lui aussi utilisable seulement avec la connectique Jack, donc pas de salut si tout cela s&#8217;abime, ce qui n&#8217;est pas le cas sur le Power Tube 3000 et plus.</p>

<p>La petite pochette en tissu est très pratique pour éviter de perdre les différents embouts au fond d&#8217;un sac.</p>

<p>Si vous avez les moyens, c&#8217;est donc un gadget intéressant &#8220;au cas où&#8221; ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Cadeau : Un mois d'abonnement à Nolife Online]]></title>
    <link href="http://blog.tym-project.fr/2012/01/01/cadeau-un-mois-dabonnement-a-nolife-online/"/>
    <updated>2012-01-01T21:39:00+00:00</updated>
    <id>http://blog.tym-project.fr/2012/01/01/cadeau-un-mois-dabonnement-a-nolife-online</id>
    <content type="html"><![CDATA[<p>Allez hop, on commence 2012 en beautée avec un cadeau ! Oui, un truc que je vous donne contre&#8230; rien. Un cadeau quoi.<br/>
Il est donc question de 30 jours d&#8217;abonnement au service <a href="http://nolife-tv.com">Nolife Online</a>, le service de télévision de rattrapage des geeks ! Si vous ne connaissez pas cette  chaîne de TV voici un exemple : <a href="http://online.nolife-tv.com/index.php?id=15771">Chez Marcus - Prince of Persia</a></p>

<p>Pour gagner, rien de plus simple : sois le plus rapide à commenter cet article avec quelques mots cohérents. Donc &#8220;jhghjghjgjhg&#8221; c&#8217;est pas bon du tout :-)</p>

<p>Oh, et bonne année !</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[On vous recommande 5 clics et nouveaux onglets par mois de Décembre]]></title>
    <link href="http://blog.tym-project.fr/2011/12/20/liens-de-noel-et-autres-bonnes-idees/"/>
    <updated>2011-12-20T18:03:00+00:00</updated>
    <id>http://blog.tym-project.fr/2011/12/20/liens-de-noel-et-autres-bonnes-idees</id>
    <content type="html"><![CDATA[<p>Hop, c&#8217;est le retour de l&#8217;article fourre-tout, ici dans son édition de noël.</p>

<ol>
<li><a href="http://www.geekologie.com/2011/12/warp-me-awake-stat-the-mario-pipe-coffee.php" title="Mug Mario">Un mug Mario original</a></li>
<li><a href="http://lifehacker.com/5865321/hang-nearly-anything-on-your-wall-with-sugru-and-lego-bricks%20%22Legos%20pratiques">La bonne idée du mois : Legos-accroche-tout</a></li>
<li><a href="http://jeromechoain.wordpress.com/2011/11/30/les-peuples-dabord-version-longue-lgw-brassens/" title="JCFrog - Les peuples d'abord">JCFrog et sa nouvelle rengaine&#8230; tellement vrai !</a></li>
<li><a href="https://buy.louisck.net/" title="Louis CK pour 5$">Louis CK, un comique que j&#8217;adore, vend son dernier live 5$. Pas cher la minute de rire en streaming ou en ddl :)</a></li>
<li><a href="http://msreport.free.fr/" title="Exchange et autres">Un peu de technique avec un blog sur Exchange et d&#8217;autres technos Microsoft</a></li>
</ol>


<p>Joyeuses fêtes ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Un sapin de nöel en carton... littéralement.]]></title>
    <link href="http://blog.tym-project.fr/2011/12/11/un-sapin-de-noel-en-carton-dot-dot-dot-litteralement/"/>
    <updated>2011-12-11T20:46:00+00:00</updated>
    <id>http://blog.tym-project.fr/2011/12/11/un-sapin-de-noel-en-carton-dot-dot-dot-litteralement</id>
    <content type="html"><![CDATA[<p>Le 24 décembre approche à grands pas, et avec les différentes préparations traditionnelles. Et quoi de mieux qu&#8217;un beau sapin pour décorer la pièce ? Un &#8220;sapin&#8221; qui sort de l&#8217;ordinaire !</p>

<!-- more -->


<p><a href="http://www.mobilier-orika.com">Orika</a> est une société Française qui imagine et produit des meubles en carton. Oui. En carton. De la table à l&#8217;étagère, en passant par le fauteuil, de nombreux modèles existent.
A l&#8217;occasion des fêtes de fin d&#8217;année Orika a aussi conçu un sapin de noël tout à fait crédible. Trouvant cela interessant, j&#8217;en ai commandé un exemplaire, et voici donc mes impressions sur ce produit.</p>

<h2>Vous avez reçu un colis</h2>

<blockquote><p> <em>Ding Dong</em><br/>
&#8220;Bonjour, j&#8217;ai un colis pour vous&#8221;<br/>
&#8220;Ah super, c&#8217;est le sapin !&#8221;<br/>
&#8220;Ce n&#8217;est pas un sapin&#8230;&#8221;<br/>
&#8220;Si si je vous assure :)&#8221;<br/>
&#8220;Euh&#8230; vous pouvez signer ici svp ?&#8221;</p></blockquote>

<p>Et c&#8217;est ainsi que cet énorme, mais plat, paquet contenant <a href="http://www.mobilier-orika.com/objets-decoration_24_sapin-de-noel-petit-format.html">le petit modèle</a> a fait son entrée dans l&#8217;appartement :</p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2011-4/orika1.jpg"></p>

<p>Il est donc très bien emballé et protégé par les renforts en carton sur les cotés, mais le tout cela reste simple à ouvrir.</p>

<h2>Vous avez dit Ikea ?</h2>

<p>A l&#8217;intérieur on trouve donc le sapin, les instructions de montage et quelques brochures publicitaires.</p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2011-4/orika2.jpg"></p>

<p>On peut donc passer à l&#8217;assemblage de l&#8217;arbre&#8230; et je dois bien avouer que sur ce point les instructions font un peu &#8220;cheap&#8221;. J&#8217;ose espérer que sur des produits plus complexes à construire elles sont plus claires.</p>

<p>Une fois monté il ne reste plus qu&#8217;à fignoler un peu l&#8217;aspect, en découpant les chutes au centre des étoiles, et hop !</p>

<p><img src="http://pics.tym-project.fr.s3-website-eu-west-1.amazonaws.com/2011-4/orika3.jpg"></p>

<p>Je trouve ce sapin original, joli, et surtout personalisable. C&#8217;est à mon avis un gros plus pour occuper les enfants pendant les vacances :)</p>

<p>Merci <a href="http://www.mobilier-orika.com">Orika</a> pour cette brillante idée !</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[2012... ou presque !]]></title>
    <link href="http://blog.tym-project.fr/2011/12/09/2012-ou-presque/"/>
    <updated>2011-12-09T22:30:00+00:00</updated>
    <id>http://blog.tym-project.fr/2011/12/09/2012-ou-presque</id>
    <content type="html"><![CDATA[<p>La nouvelle année est souvent l&#8217;occasion de choisir des résolutions pour les 12 mois qui approchent. Pour Tym-Project cela veut sourtout dire une nouvelle plateforme, ou plutôt un nouveau &#8220;CMS&#8221; : <a href="http://octopress.org" title="Octopress">Octopress</a>, j&#8217;aurai certainement l&#8217;occasion d&#8217;en reparler par la suite !</p>

<p>Ce changement va aussi impliquer une migration de tout le contenu existant depuis Wordpress&#8230; et ça ne vas pas être de la tarte ! Je pense donc laisser les deux blogs actifs pendant un certain temps :-)</p>

<p>A très vite !</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[On vous recommande 5 clics et nouveaux onglets par jour (ou presque)]]></title>
    <link href="http://blog.tym-project.fr/2011/08/31/liens-utiles-pour-visio-wordpress-et-vmwar/"/>
    <updated>2011-08-31T19:39:34+00:00</updated>
    <id>http://blog.tym-project.fr/2011/08/31/liens-utiles-pour-visio-wordpress-et-vmwar</id>
    <content type="html"><![CDATA[<p>Ayant tout un tas de liens que je garde depuis (très) longtemps à droite ou à
gauche, j&#8217;ai décidé de les diffuser ici 5 par 5 quand bon me semblera ! A
l&#8217;avenir j&#8217;essaierai peut-être de les regrouper par catégories&#8230;</p>

<ol>
<li><a href="http://www.techiemania.com/5-awesome-free-tools-to-help-you-choose-your-website-color-scheme.html">Tools To Help You Choose Your Website Color Scheme</a></li>
<li><a href="http://packetlife.net/blog/2011/may/9/using-layers-visio/">Using Layers in Visio</a></li>
<li><a href="http://www.doitwithwordpress.com/rundown-wordpress-theme-files-what-they-do/">A Rundown of WordPress Theme Files and What They All Do</a></li>
<li><a href="http://linuxfr.org/news/sadms-int%C3%A9grer-des-stations-gnulinux-%C3%A0-active-directory">SADMS : Intégrer des stations GNU/Linux à Active Directory</a></li>
<li><a href="http://vpourchet.wordpress.com/2011/02/13/ghettovcb-sh-le-vcenter-backup-du-pauvre/">Ghettovcb.sh : Le VCenter Backup du pauvre !</a></li>
</ol>


<p>Oui, il-y-à pas mal de contenu en anglais&#8230;eh c&#8217;est l&#8217;Interweb ici, il faut
s&#8217;y faire ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ma nouvelle configuration Media Center sous Linux]]></title>
    <link href="http://blog.tym-project.fr/2011/08/21/xbmc-et-archlinux-pour-un-media-center/"/>
    <updated>2011-08-21T12:00:02+00:00</updated>
    <id>http://blog.tym-project.fr/2011/08/21/xbmc-et-archlinux-pour-un-media-center</id>
    <content type="html"><![CDATA[<p>J&#8217;avais déjà évoqué dans un précédent article que
je possède un Media center sous Linux. Suite à une petite bidouille
malheureuse, il s&#8217;est retrouvé complètement planté. J&#8217;ai donc décidé de tout
réinstaller à partir de zéro et de documenter (un peu) l&#8217;opération.<br/>
Je vais
donc détailler les principaux composants de cette installation, sans pour
autant rentrer dans les détails (utilisez les commentaires si besoin).</p>

<!-- more -->


<h2>Qui suis-je, où vais-je, &#8230;</h2>

<p><em>&#8230; dans quelle étagère ?</em> Avant de mettre les mains dans la console, une
petite explication de l&#8217;utilisation que je fais de ma machine s&#8217;impose :</p>

<ul>
<li>Je passe beaucoup de temps sur <a href="http://xbmc.org/skins/" title="Xbmc">Xbmc</a>, un très bon logiciel de Media Center</li>
<li>Je regarde aussi beaucoup Nolife Online (<a href="http://www.nolife-tv.com/souscription" title="Nolife Online">Abonnez vous !</a>)</li>
<li>Je n&#8217;exclue pas l&#8217;idée d&#8217;utiliser d&#8217;autres services de TV de rattrapage comme M6 Replay par exemple.</li>
</ul>


<p>Je possède un clavier sans-fil avec Trackball intégré (<a href="http://www.materiel.net/clavier/enermax-aurora-micro-wireless-kb008w-b-noir-47221.html" title="Clavier Aurora Enermax">celui-ci</a>) ainsi
qu&#8217;une télécommande &#8220;compatible Windows Media Center&#8221; achetée sur e-bay.</p>

<h2>Arch&#8217; mon ami !</h2>

<p>Archlinux m&#8217;a semblé être le meilleur choix comme distribution pour Mediator
(le nom que j&#8217;ai donné à cette machine&#8230;bien avant le scandale sur le
médicament du même nom). Outre sa flexibilité, j&#8217;apprécie surtout le fait
d&#8217;avoir des paquetages très récents&#8230;très utile pour les drivers vidéo par
exemple. C&#8217;est aussi une distribution pour laquelle l&#8217;installation de base est
très légère, sans fioritures. <em>Oui, je pense à Ubuntu en disant cela :)</em> J&#8217;ai
donc réalisé une installation tout à fait classique, j&#8217;ai seulement eu un
petit souci avec la configuration de Grub pour le kernel 3.0 qui fera l&#8217;objet
d&#8217;un prochain (court) article.</p>

<h2>Boot &#8211;> Bureau</h2>

<p>Pour me simplifier un peu la vie j&#8217;ai décidé d&#8217;utiliser un gestionnaire de
login. L&#8217;heureux élu est &#8220;bien entendu&#8221; Slim, pour sa légèreté et sa facilité
de configuration. L&#8217;utilisateur principal autre que root est <code>server</code>, et j&#8217;ai
donc configuré le login automatique de ce dernier via Slim (dans le fichier
<code>/etc/slim.conf</code>) :</p>

<pre><code>default_user server
auto_login yes
</code></pre>

<h2>Gère moi cette fenêtre !</h2>

<p>Mon choix pour le Window Manager s&#8217;est porté, pour les mêmes raisons que Slim,
vers PekWM. La configuration générale que j&#8217;utilise pour ce dernier est assez
simple, j&#8217;ai seulement désactivé les bureaux virtuels et changé le thème. En
ce qui concerne les raccourcis clavier, voici un extrait de mon fichier
<code>~/.pekwm/keys</code> :</p>

<pre><code>Global {
    KeyPress = "XF86AudioLowerVolume" { Actions = "Exec /home/server/scripts/bash_vol_manager.sh lower 5 &amp;" }
    KeyPress = "XF86AudioRaiseVolume" { Actions = "Exec /home/server/scripts/bash_vol_manager.sh raise 5 &amp;" }
    KeyPress = "XF86AudioMute" { Actions = "Exec /home/server/scripts/bash_vol_manager.sh toggle &amp;" }
    KeyPress = "XF86Mail" { Actions = "Exec /home/server/scripts/xbmc.sh &amp;" }
    KeyPress = "Alt Mod4 Alt_L" { Actions = "Exec /home/server/scripts/xbmc.sh &amp;"}
    KeyPress = "XF86Sleep" { Action = "Exec /home/server/scripts/stop.sh &amp;" }
...
</code></pre>

<p>J&#8217;ai donc la gestion du volume avec un petit script maison (que je
détaillerais dans un autre post), l&#8217;ouverture de Xbmc (via les boutons
multimédia &#8220;Mail&#8221; de mon clavier et le bouton &#8220;Start&#8221; de ma télécommande).
Enfin la touche &#8220;Power&#8221; de ma télécommande (qui envoie le signal <code>XF86Sleep</code>)
pour éteindre la machine.<br/>
<em>Le dernier raccourci ne fonctionne pas&#8230;et
j&#8217;ignore pourquoi (ce n&#8217;est pas lié au script associé). Je suis preneur de vos
suggestions !</em></p>

<p>Le script <code>~/.pekwm/start</code> contient les lignes suivantes :</p>

<pre><code>#!/bin/sh
firefox &amp;
sleep 3
/home/server/scripts/xbmc.sh &amp;
</code></pre>

<p>Le temps de pause entre le lancement de Firefox et celui de Xbmc
permet d&#8217;éviter que ce dernier perde le plein écran à cause du précédent.</p>

<h2>Trop fort !</h2>

<p>Avec mon installation précédente je devais souvent jongler avec le volume
entre une vidéo sur Firefox et un média quelconque sur Xbmc. Le volume doit
être poussé au maximum sur Xbmc, mais à environ 70% sur Firefox, pour entendre
correctement dans mon salon.<br/>
J&#8217;ai donc réfléchi à un moyen d&#8217;automatiser ce
changement de volume, et cela s&#8217;est traduit par le script <code>xbmc.sh</code> :</p>

<pre><code>#!/bin/bash
amixer -c 0 sset Master 100%
xbmc
amixer -c 0 sset Master 68%
</code></pre>

<p>Simple mais efficace, il pousse le volume
à fond puis lance Xbmc. Ce dernier n&#8217;étant pas lancé en arrière plan, dès
qu&#8217;il est quitté le volume est placé à 68%. Ce script est utilisé à la fois
dans <code>~/.pekwm/start</code> et <code>~/.pekwm/keys</code>.</p>

<h2>Firefox (à la loupe, sans la loupe)</h2>

<p>J&#8217;ai abandonné <a href="http://www.tym-project.fr/blog/2011/05/utiliser-la-loupe-sous-linux-pour-un-pc-de-salon/" title="Un Linux mediacenter avec une loupe">mon système de loupe</a> pour quelque chose de plus simple :
pousser à fond la taille des caractères à l&#8217;écran (<code>Preferences&gt;Content&gt;Fonts
&amp; Colors&gt;Advances&gt;Maximum font size</code>). C&#8217;est moche mais pratique, l&#8217;avenir me
dira si c&#8217;est réellement une bonne alternative. J&#8217;ai aussi modifié le
<code>about:config</code> pour désactiver la restauration des onglets au lancement (en
cas de crash ou non) :</p>

<pre><code>browser.sessionstore.resume_from_crash;false
browser.sessionstore.max_tabs_undo;0
browser.sessionstore.max_windows_undo;0
</code></pre>

<h2>shutdown -s -t now</h2>

<p>Si il est toujours possible d&#8217;autoriser la mise hors tension du système via
des bidouilles avec <code>sudo</code> et <code>halt</code>, cela reste des bidouilles. La manière la
plus simple est en fait d&#8217;utiliser <code>consolekit</code>, <code>policykit</code> et <code>dbus</code>&#8230; en
effet : c&#8217;est prévu pour.<br/>
Avant tout il faut modifier <code>~/.xinitrc</code> ainsi :</p>

<pre><code>#exec pekwm
exec ck-launch-session pekwm
</code></pre>

<p>Pour tester si vous avez les droits pour couper le système (par
exemple), utilisez cette commande qui vous renverra <code>true</code> ou <code>false</code> :</p>

<pre><code>dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.CanStop
</code></pre>

<p>La commande à utiliser
pour éteindre la machine sera alors la suivante (une simple modification de la
dernière directive) :</p>

<pre><code>dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
</code></pre>

<p>Si jamais vous n&#8217;avez pas les droits, ou êtes simplement curieux, la
configuration se situe dans le fichier
<code>/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy</code>. Une commande
est autorisée par la directive <code>&lt;allow_active&gt;yes&lt;/allow_active&gt;</code>, mais j&#8217;ai
parfois dû utiliser <code>&lt;allow_any&gt;yes&lt;/allow_any&gt;</code></p>

<h2>&#8220;Moi vivant, vous n&#8217;aurez jamais de pauses&#8221;</h2>

<p>Par défaut le serveur X coupe l&#8217;écran au bout d&#8217;un temps donné pour économiser
de l&#8217;énergie. Cela va sans dire que c&#8217;est insupportable pour un écran qui est
censé être allumé en permanence avec la machine&#8230; Une petite configuration
dans <code>/etc/X11/xorg.conf</code> et hop !</p>

<pre><code>Section "ServerFlags"
    Option "BlankTime" "0"
    Option "StandbyTime" "0"
    Option "SuspendTime" "0"
    Option "OffTime" "0"
EndSection
</code></pre>

<h2>Sources</h2>

<ul>
<li><a href="https://wiki.archlinux.org/index.php/PekWM" title="PekWM">PekWM</a></li>
<li><a href="https://wiki.archlinux.org/index.php/Slim" title="Slim">Slim</a></li>
<li><a href="https://wiki.archlinux.org/index.php/ConsoleKit" title="ConsoleKit">ConsoleKit</a></li>
<li><a href="http://www.shallowsky.com/linux/x-screen-blanking.html" title="X11 Scrren Blanking">Mise en veille de l&#8217;écran avec X11</a></li>
<li><a href="http://vuedelaprovince.canalblog.com/" title="La citation &quot;Moi vivant ...&quot;">La citation &#8220;Moi vivant&#8230;&#8221;</a></li>
</ul>


<p>Bonne utilisation ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moi, mon Kindle et moi]]></title>
    <link href="http://blog.tym-project.fr/2011/07/15/test-kindle-long-et-retour-experience/"/>
    <updated>2011-07-15T17:50:12+00:00</updated>
    <id>http://blog.tym-project.fr/2011/07/15/test-kindle-long-et-retour-experience</id>
    <content type="html"><![CDATA[<p>Je suis l&#8217;heureux possesseur d&#8217;un Amazon Kindle
depuis 8 mois environ, et je vais donc décrire ici l&#8217;utilisation que j&#8217;en fait
ainsi que ce que je trouve bien&#8230;et moins bien.</p>

<!-- more -->


<p>Il est question ici du Kindle
3, modèle 3G et Wifi,<a href="http://www.amazon.com/gp/product/B003DZ1Y72?amp%3Brw_absolute=y"> en vente sur Amazon</a> au prix de 189$ (auxquels il
faut rajouter bien entendu les frais de port et de douane). Si tant est que
vous n&#8217;ayez pas encore entendu parler de cette objet (vous Internet dans votre
grotte ?), voici quelques tests sympathiques en français chez <a href="http://korben.info/petit-test-du-kindle-3.html">Korben</a> ou
chez <a href="http://gonzague.me/test-amazon-kindle-3">Gonzague</a>. Outre l&#8217;écran très lisible, j&#8217;apprécie surtout beaucoup
les boutons <code>Page suivante</code> et <code>Page précédente</code> à l&#8217;identique des deux cotés
de l&#8217;appareil, ce qui permet de le tenir dans tous les sens (main gauche ou
droite, à une main ou non, par le coté ou par le bas&#8230;) et ce sans souffrir
d&#8217;une quelconque gène&#8230;comme avec un vrai livre.</p>

<h2>C&#8217;est en lisant que l&#8217;on devient&#8230;lecteur</h2>

<p>Le premier moyen que j&#8217;utilise pour trouver des livres est bien entendu le
<a href="http://www.amazon.com/kindle-store-ebooks-newspapers-blogs/b/ref=topnav_storetab_kinc?ie=UTF8&amp;node=133141011" title="Kindle Store">Kindle Store</a>. Accessible depuis un PC, mais surtout en Wifi ou 3G depuis
le Kindle, il est très fourni en titres en anglais et je n&#8217;y ai que très
rarement pas trouvé mon bonheur. Aujourd&#8217;hui c&#8217;est surtout pour moi un moyen
de lire des extraits de livres, qui sont envoyés gratuitement sur le Kindle,
très utile dans le cas de livres techniques où le fond est aussi important que
la forme. Notez toutefois que, malgré une conversion €/$ parfois très
avantageuse, certaines banques facturent les frais de conversion (les piles de
calculette ça coûte cher&#8230;).</p>

<p>Il existe bien entendu de nombreuses autres sources pour vous procurer
(gratuitement ou non) des e-books, Google est votre ami. Le Kindle ne sait pas
lire les livres au format <code>epub</code> (assez répandu), mais pas d&#8217;inquiétudes, le
logiciel <a href="http://calibre-ebook.com/" title="Calibre">Calibre</a> vous permettra d&#8217;effectuer la conversion au format
<code>mobi</code> très simplement.</p>

<h3>Des images avec des mots</h3>

<p>Calibre sera d&#8217;ailleurs aussi très utile pour convertir des Mangas, Comics ou
Bds au format <code>cbr</code> (une sorte d&#8217;archive contenant les images classées dans
l&#8217;ordre). Il sera alors très agréable de lire sur le Kindle, qui considérera
le fichier comme n&#8217;importe quel e-book. Le fait que l&#8217;écran soit en noir et
blanc peut, au premier abord, paraitre comme un élément très gênant&#8230;mais en
fait pas du tout ! Tout d&#8217;abord beaucoup des supports sont d&#8217;origine en noir
et blanc (surtout pour les Mangas), et si ils ne le sont pas, la qualité des
niveaux de gris est telle que ce n&#8217;est plus un problème.</p>

<h2>Quand j&#8217;étais petit garçon, Je repassais mes leçon&#8230;</h2>

<p><em>&#8230;en les lisant sur un Kindle 3.</em> Le Kindle sait lire les PDFs, mais aussi
convertir vos documents lorsque vous les envoyez à votre adresse mail Kindle :
<code>@kindle.com</code> pour une livraison en 3G mais payante, ou <code>@free.kindle.com</code>
pour une réception en Wifi seulement. Très utile donc pour des supports de
cours, des documentations ou bien entendu vos notes personnelles.</p>

<h2>Un écran c&#8217;est bien, un Kindle c&#8217;est mieux !</h2>

<p>Je lis énormément de news et d&#8217;articles sur écran&#8230;et, c&#8217;est bien connu, tout
cela devient rapidement très fatiguant pour les yeux. Vous pouvez bien entendu
copier-coller tout cela dans un e-mail pour votre adresse Kindle, mais il
existe plus simple et plus ergonomique. Je pense à l&#8217;occurence à
<a href="http://www.instapaper.com/" title="Instapaper">Instapaper</a> Instapaper permet de &#8220;sauvegarder&#8221; vos articles pour les lire
plus tard, et ce à l&#8217;aide de deux moyens : via un bookmarklet ou une adresse
e-mail spécifique. J&#8217;utilise souvent le bookmarklet avec une sorte de
raccourci dans Firefox, j&#8217;ai en fait inséré le code javascript en question
dans un marque-page puis associé ce dernier à un &#8220;Mot clé&#8221;. Je peux donc
envoyer une page très facilement avec la combinaison suivante : <code>Ctrl+L</code>
(barre d&#8217;adresse) puis le &#8220;Mot clé&#8221;, et hop <code>Entrée</code> et emballé c&#8217;est
enregistré ! Il vous suffira ensuite de configurer l&#8217;envoi journalier des
articles sur votre adresse mail Kindle, et vous voila paré pour lire vos
articles dans les transports en commun.</p>

<p>Dans un esprit similaire, un certain Dave se propose de vous envoyer à un
rythme hebdomadaire des articles (en anglais) qu&#8217;il a sélectionné. Parfois
j&#8217;aime, parfois non, mais je vous invite à essayer <a href="http://delivereads.com/" title="Delivereads">Delivereads</a>.</p>

<h2>Vers l&#8217;infini et l&#8217;au delà !</h2>

<p>La fonctionnalité de lecture de PDFs, associé à l&#8217;outil de zoom, me permet de
gagner du temps lors de mes nombreux déplacements professionnels. En effet, je
peux envoyer mes e-billets (SNCF et Air France, je n&#8217;ai pas essayé pour le
reste) sur mon Kindle et les faire scanner par le personnel comme n&#8217;importe
quel billet papier. Attention toutefois car certaines machines peuvent avoir
des difficultés, tout comme les agents qui sont parfois assez surpris face à
l&#8217;appareil. C&#8217;est en tout cas une bonne solution de secours si je n&#8217;ai pas le
temps de retirer mes billets.</p>

<h2>Du plastique et des Hommes</h2>

<p>Un Kindle c&#8217;est surtout un bout de plastique avec de la magie dedans&#8230;et la
magie ça courgiecuite et ça tombe en panne. Dans mon cas j&#8217;ai expérimenté cela
dès le premier mois, avec une connectivité 3G qui ne voulait plus connectiver.
<em>Bon hop, finit les jeux de mots.</em> J&#8217;ai donc commencé par contacter le support
par chat, après description de mon problème on m&#8217;a logiquement invité à
contacter le support par téléphone. Aux US. Merci Free (c&#8217;est gratuit). Une
petite heure de débug plus tard, et après des manipulations cohérentes (menus
de diagnostic &#8220;cachés&#8221;, hard reboot et j&#8217;en passe), le verdict tombe : retour
à la case départ (l&#8217;entrepôt Amazon). Amazon m&#8217;a très gentiment renvoyé un
autre appareil dans la foulée, leur ayant expliqué que j&#8217;avais besoin de
garder le modèle légèrement défectueux le temps de mes révisions. J&#8217;ai un peu
bataillé pour obtenir une étiquette de retour UPS, qui m&#8217;a permit d&#8217;éviter
d&#8217;avancer les frais d&#8217;expédition (mais logiquement remboursés). J&#8217;ai apprécié
le geste commercial (15$), alors que je n&#8217;ai jamais évoqué la question. Petite
astuce, n&#8217;hésitez pas à demande un &#8220;Kindle Specialist&#8221; à votre premier
interlocuteur dans le chat, vous gagnerez du temps. Le Kindle que j&#8217;ai
aujourd&#8217;hui fonctionne sans problèmes depuis un peu plus de 7 mois, pas mal
non ?!</p>

<h3>Stress Test</h3>

<p>Je n&#8217;utilise pas de housse pour mon Kindle, mais en 8 mois d&#8217;utilisation
intensive je n&#8217;ai que deux éléments abimés à relever : l&#8217;écran qui a été abimé
sur une petit zone de 1cm², et le boitier qui tend à se fêler au niveau du bas
du cadre. Le fait qu&#8217;il soit tombé deux fois, au point de se déboiter doit
jouer&#8230;Donc oui, je le considère comme très résistant car une fois &#8220;reboité&#8221;
il était comme neuf ! L&#8217;écran ne me semble pas rayé, ou si il l&#8217;est (dur à
déterminer), cela ne gêne en rien ma lecture.</p>

<h2>Et sinon ?</h2>

<p>Je n&#8217;ai donc que très peu de choses à reprocher à mon Kindle, je note surtout
des fonctionnalités manquantes comme un outil de prise de notes ou le coût des
envois personnels en 3G (<code>@kindle.com</code>). Je n&#8217;ai pas trop de problèmes avec la
langue anglaise, mais ce n&#8217;est pas le cas de tout le monde, donc je considère
cela comme une limitation (surtout pour le support !)</p>

<p>Bonne lecture ;-)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Un Linux mediacenter avec une loupe]]></title>
    <link href="http://blog.tym-project.fr/2011/05/04/utiliser-la-loupe-sous-linux-pour-un-pc-de-salon/"/>
    <updated>2011-05-04T12:00:06+00:00</updated>
    <id>http://blog.tym-project.fr/2011/05/04/utiliser-la-loupe-sous-linux-pour-un-pc-de-salon</id>
    <content type="html"><![CDATA[<p>Un Linux avec Xbmc au milieu du salon c&#8217;est de plus
en plus en commun, et même si je me trompe, c&#8217;est quand même super pratique !
Mais c&#8217;est encore mieux quand cette machine peut aussi servir à consulter ses
mails, utiliser Youtube&#8230; Problème : la résolution d&#8217;écran est trop elevée
pour pouvoir lire à 2m de l&#8217;écran. C&#8217;est donc là qu&#8217;entre en jeu la loupe.</p>

<!-- more -->


<p>Gnome propose son outil, gnome-magnifier, tout un tas d&#8217;infos <a href="https://wiki.ubuntu.com/Accessibility/Reviews/gnome-mag">sur le Wiki
d&#8217;Ubuntu</a> et <a href="http://man.cx/magnifier">et dans le man</a>.</p>

<h2>De la problèmatique des doigts</h2>

<p>Avoir une loupe c&#8217;est une chose, y accéder en est une autre. En effet, la
problématique est toujours la même si il faut aller cliquer dans un petit menu
ou sur une petit icône, sans parler de lancer une ligne de commande ! Allons-y
gaiement avec un raccourci clavier donc&#8230; Avec Gnome (2.XX) rien de plus
simple : <code>Système/Préférences/Raccourcis clavier</code>,la commande étant <code>magnifier
-m -v</code>. L&#8217;option <code>-m</code> pour suivre les mouvements de la souris, <code>-v</code> pour une
loupe verticale (sur la gauche de l&#8217;écran par défaut), eh lisez le <code>man</code> !</p>

<h2>De la problématique du multi-doigt</h2>

<p>Un raccourci pour ouvrir la loupe c&#8217;est pratique, mais comment faire pour
fermer l&#8217;outil ? Un autre raccourci ? Non non non, un peu d&#8217;ingéniosité que
diable ! C&#8217;est en fait un seul et même raccourci clavier qui va servir, en
séquence, à :</p>

<ol>
<li>Lancer la loupe en &#8220;vertical&#8221;</li>
<li>Basculer la loupe en &#8220;horizontal&#8221;, pratique pour la lecture de long textes</li>
<li>Fermer complètement l&#8217;application</li>
</ol>


<p>En terme de script (Bash, pour faire vite et bien), cela donne ceci de la
manière suivante :</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c">#!/bin/bash</span>
</span><span class='line'><span class="k">function </span>killmag <span class="o">{</span>
</span><span class='line'>    <span class="nb">kill</span> -9 <span class="se">\ </span><span class="sb">`</span>ps aux | grep -v grep | grep magnifier | tr -s <span class="s2">&quot; &quot;</span> | cut -d <span class="s2">&quot; &quot;</span> -f 2<span class="sb">`</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'><span class="k">case</span> <span class="se">\</span>
</span><span class='line'><span class="s2">&quot;`ps aux | grep -v grep | grep magnifier | \ tr -s &quot;</span> <span class="s2">&quot; | cut -d &quot;</span> <span class="s2">&quot; -f 12`&quot;</span><span class="se">\</span>
</span><span class='line'>in
</span><span class='line'>    <span class="s2">&quot;-v&quot;</span><span class="o">)</span>
</span><span class='line'>        killmag <span class="o">&amp;&amp;</span> magnifier -h -m
</span><span class='line'>        ;;
</span><span class='line'>    <span class="s2">&quot;-h&quot;</span><span class="o">)</span>
</span><span class='line'>        killmag
</span><span class='line'>        ;;
</span><span class='line'>    <span class="s2">&quot;&quot;</span><span class="o">)</span>
</span><span class='line'>        magnifier -v -m
</span><span class='line'>        ;;
</span><span class='line'><span class="k">esac</span>
</span></code></pre></td></tr></table></div></figure>


<p>On retrouve donc une fonction pour killer la loupe, car il faut la relancer
pour changer d&#8217;orientation. Petit détail syntaxique : l&#8217;utilisation de <code>\</code>
pour faire des retours à la ligne au milieu d&#8217;une commande, pratique pour se
la raconter un peu sur un article de blog (ou faciliter la lecture, c&#8217;est
selon).</p>

<h2>Algo à gogo</h2>

<p>D&#8217;un point de vue algorithmique, et par ordre de déclenchement du script :</p>

<ol>
<li>Par défaut la loupe n&#8217;est pas lancée, donc le résultat du <code>grep</code> dans le <code>case</code> est vide : on lance la loupe en mode vertical</li>
<li>Un second passage va renvoyer &#8221;<code>-v</code>&#8221; dans le <code>case</code> : on kill la loupe et on la relance en horizontal</li>
<li>Le passage suivant renvoit &#8221;<code>-h</code>&#8221;, donc le <code>case</code> kill la loupe pour de bon</li>
<li>Et ainsi fon fon fon&#8230;</li>
</ol>


<p>Bon zoom ;-)</p>
]]></content>
  </entry>
  
</feed>
