<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shimbawa&#039;s blog</title>
	<atom:link href="http://blog.shimbawa.ch/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.shimbawa.ch</link>
	<description>Un blog de découvertes...</description>
	<lastBuildDate>Wed, 11 Jan 2012 20:58:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>AR-Drone 1.0 et Android</title>
		<link>http://blog.shimbawa.ch/?p=112</link>
		<comments>http://blog.shimbawa.ch/?p=112#comments</comments>
		<pubDate>Wed, 11 Jan 2012 20:58:26 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Photographie]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=112</guid>
		<description><![CDATA[Enfin ! bon, est-ce un peu tard ? j'ai enfin reçu mon AR-Drone 1.0 !
Les moteurs démarrent, et après 2-3 secondes, l'AR-Drone décolle et se stabilise à 1m. Mais avec les turbulences, il bouge un petit peu, aussi il faut un peu compenser. Mais comment fais-t'on ?
...]]></description>
			<content:encoded><![CDATA[<p>Enfin ! bon, est-ce un peu tard ? j&#8217;ai enfin reçu mon AR-Drone 1.0 !</p>
<p>Un billet jaune m&#8217;a incité à passer à la poste ce soir, et là première surprise, un paquet gigantesque (80x60x45), mais comme d&#8217;habitude plein d&#8217;air. Dedans, un autre carton, le vrai, et l&#8217;engin.<br />
Premières impressions: il est énorme !  (53x53cm)</p>
<p>Je branche la batterie et attend la fin du temps de charge (1h30), en regardant les vidéos de parrot.com, et je charge l&#8217;<a href="https://market.android.com/details?id=com.parrot.freeflight&amp;feature=search_result">application officielle</a>. Ah oui, je n&#8217;ai pas d&#8217;aphone, mais un Android !</p>
<p>Enfin, je branche la batterie. Je dispose le carton par terre dans mon hall d&#8217;entrée, comme base de départ (c&#8217;est prévu pour). Je recule et lance l&#8217;application. Connexion en cours&#8230; mais rien ne se passe. Ah oui, il faut me connecter sur le wifi de l&#8217;AR-Drone. Ok, c&#8217;est fait, et je redémarre l&#8217;application. Je suis devant un écran où je voit la caméra frontale (il y en a deux), et quelques boutons: configuration, camera switch, arrêt d&#8217;urgence, et deux cercles, pour monter-descendre, incliner, tourner. Et un dernier, pour décoller. J&#8217;appuie dessus.</p>
<p>Les moteurs démarrent, et après 2-3 secondes, l&#8217;AR-Drone décolle et se stabilise à 1m. Mais avec les turbulences, il bouge un petit peu, aussi il faut un peu compenser. Mais comment fais-t&#8217;on ?<br />
J&#8217;essaie: alors à gauche c&#8217;est pour monter et descendre d&#8217;après la vidéo. Bon c&#8217;est pas ça, il faut cliquer à gauche et pencher le téléphone pour déplacer l&#8217;AR dans le sens de SA marche (pas facile quand il est à l&#8217;envers !). Avec le cercle de droite, je peut tourner sur moi-même et monter-descendre. Bon, pas facile car quand je lui dit de monter, il tourne aussi <img src='http://blog.shimbawa.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Et je m&#8217;approche du mur ! une direction à gauche&#8230; mais trop rapide ! alors à droite&#8230; et je me stabilise. Bon, retour à la base et atterrissage par le bouton. Je tombe à cheval sur le carton. Pas trop mal pour un premier vol.</p>
<p>J&#8217;en ai fait 5, d&#8217;environ 2 minutes chacun, et au dernier, j&#8217;ai pu décoller, monter en tournant sur moi-même et corrigeant la position, puis ré-atterrir sur le carton.</p>
<p>Avec l&#8217;application officielle, pas de vidéo, car Apple l&#8217;interdit pour des raisons de licences apparemment, mais pourquoi on ne l&#8217;a pas sur Android ? Un petit tour sur le market et je trouve <a href="https://market.android.com/details?id=meavydev.ARDrone">une autre application</a> qui permet d&#8217;enregistrer le vol sur la carte SD. Un peu plus difficile à manoeuvrer, mais on y arrive. Malheureusement, après mon vol, je constate que je n&#8217;ai qu&#8217;une vidéo de quelques secondes, quand l&#8217;appareil était arrêté <img src='http://blog.shimbawa.ch/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>Conclusions:<br />
Mes premières impressions sont bonnes !  C&#8217;est un joli outil pas facile à prendre en main à l&#8217;intérieur, certainement influencé par les turbulences contre le mur, les plantes. Cependant, en 10 minutes, j&#8217;arrive à le manoeuvrer sans trop de difficulté. L&#8217;application officielle ne permet pas d&#8217;enregistrer les vidéos mais une autre application officieuse le permet. On a une caméra frontale et une dessous, utile pour se poser.</p>
<p>A suivre&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=112</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un porte-téléphone dans la poche ?</title>
		<link>http://blog.shimbawa.ch/?p=97</link>
		<comments>http://blog.shimbawa.ch/?p=97#comments</comments>
		<pubDate>Sun, 13 Nov 2011 21:32:30 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=97</guid>
		<description><![CDATA[Un ami m&#8217;a un jour posé un problème intéressant: est-il possible d&#8217;avoir un petit objet toujours dans la poche, qui permettrai de tenir un iphone ou tout autre téléphone presque vertical, de manière à pouvoir, par exemple, regarder des films agréablement ? Ce problème, je me le suis posé alors et retourné dans tous les [...]]]></description>
			<content:encoded><![CDATA[<p>Un ami m&#8217;a un jour posé un problème intéressant: est-il possible d&#8217;avoir un petit objet toujours dans la poche, qui permettrai de tenir un iphone ou tout autre téléphone presque vertical, de manière à pouvoir, par exemple, regarder des films agréablement ?</p>
<p>Ce problème, je me le suis posé alors et retourné dans tous les sens. J&#8217;ai presque eu une solution avec une enveloppe a5 pliée 7-8 fois de suite, dont les bouts s&#8217;inséraient les uns dans les autres. Trop fragile.</p>
<p>Hors, qu&#8217;est-ce que tout le monde a dans le porte-monnaie, et se débarasse au bout de quelques mois ? une carte de crédit&#8230;</p>
<p>Mais comment faire un support stable avec une petite carte de crédit ? Voici quelques images&#8230;</p>
<p><a href="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01946m.jpg"><img src="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01946m-150x150.jpg" alt="" width="150" height="150" class="aligncenter size-thumbnail wp-image-99" /></a></p>
<p><a href="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01947m.jpg"><img src="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01947m-150x150.jpg" alt="" width="150" height="150" class="aligncenter size-thumbnail wp-image-100" /></a></p>
<p><a href="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01948m.jpg"><img src="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01948m-150x150.jpg" alt="" width="150" height="150" class="aligncenter size-thumbnail wp-image-101" /></a></p>
<p><a href="http://blog.shimbawa.ch/wp-content/uploads/2011/11/cartesupport.jpg"><img src="http://blog.shimbawa.ch/wp-content/uploads/2011/11/cartesupport-150x150.jpg" alt="" width="150" height="150" class="aligncenter size-thumbnail wp-image-106" /></a></p>
<p>On peut découper la carte au ciseau assez facilement par grattage, en prenant une carte dont un côté est plastifié et en prenant soin de ne pas casser le film plastique, qui assurera la cohésion de la carte lors de sa rotation.</p>
<p>Le poids du téléphone est étonnement bien absorbé par la stabilité de la carte !</p>
<p><a href="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01950m.jpg"><img src="http://blog.shimbawa.ch/wp-content/uploads/2011/11/DSC01950m-150x150.jpg" alt="" width="150" height="150" class="aligncenter size-thumbnail wp-image-102" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=97</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugin Gimp</title>
		<link>http://blog.shimbawa.ch/?p=87</link>
		<comments>http://blog.shimbawa.ch/?p=87#comments</comments>
		<pubDate>Mon, 18 Jul 2011 21:07:11 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[gimp;python;plugin]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=87</guid>
		<description><![CDATA[Pour les besoins d'un jeu, je dois transformer un SVG en un fichier PNG. Je le fais avec Gimp, mais le processus est long, car il se compose d'une vingtaine d'étapes qui peuvent être automatisées.
J'ai tenté de les automatiser avec un plugin Gimp, et ça marche plutôt bien...]]></description>
			<content:encoded><![CDATA[<p>Pour les besoins d&#8217;un jeu, je dois transformer un SVG en un fichier PNG. Je le fais avec Gimp, mais le processus est long, car il se compose d&#8217;une vingtaine d&#8217;étapes qui peuvent être automatisées.</p>
<p>J&#8217;ai tenté de les automatiser avec un plugin Gimp, et ça marche plutôt bien. Tout d&#8217;abord, je me suis penché sur scriptfu, une extension de Gimp basée sur Scheme, lui-même basé sur Lisp. C&#8217;est un language plein de parenthèses difficile à apréhender. J&#8217;ai très vite passé à son alternative python: python-fu.</p>
<p>Ensuite, j&#8217;ai tatonné durant quelques heures, mais enfin mon compilateur de niveau est prêt, et voici quelques astuces que j&#8217;ai trouvées pour développer un plugin gimp. J&#8217;espère qu&#8217;elles vous seront utiles.</p>
<p>Tout d&#8217;abord, il faut créer un plugin Gimp: Dans ~/.gimp-2.6/plug-ins, on créé un fichier .py, contenant:<br />
<code><br />
#!/usr/bin/env python<br />
# -*- encoding:UTF-8 -*-<br />
from gimpfu import *<br />
def myblur(fin, fout):<br />
&nbsp;image = pdb.gimp_file_load(fin, fin)<br />
&nbsp;layer = pdb.gimp_image_get_active_layer(image)<br />
&nbsp;pdb.plug_in_gauss(image, layer, 4, 4, 0)<br />
&nbsp;pdb.gimp_file_save(image, layer, fout, fout)<br />
&nbsp;pdb.gimp_image_delete(image)</code></p>
<p><code><br />
&nbsp;register(<br />
&nbsp;"myblur",<br />
&nbsp;"myblur: Simple blur test",<br />
&nbsp;"myblur: Simple blur test",<br />
&nbsp;"Cédric Dutoit",<br />
&nbsp;"Cédric Dutoit Company",<br />
&nbsp;"2011-2011",<br />
&nbsp;"<img alt="" />/Filters/MyFilters/_TestFilter1...",<br />
&nbsp;"RGB*",<br />
&nbsp;[<br />
&nbsp;(PF_STRING, "fin", "fin", "*.png"),<br />
&nbsp;(PF_STRING, "fout", "fout", "*.png"),<br />
&nbsp;],<br />
&nbsp;[],<br />
&nbsp;myblur)</code></p>
<p><code> main() </code></p>
<p>Ce petit plug-in s&#8217;enregistre dans le menu des filtres Gimp, mais peut aussi être appelé en mode batch, soit sans interface graphique:</p>
<p><code> gimp --no-interface --batch '(python-fu-myblur RUN-NONINTERACTIVE 0 0 "'$1'")' --batch '(gimp-quit  1)' </code></p>
<p>Notez que le python-fu-myblur indique:<br />
1) d&#8217;utiliser python-fu comme interpreteur<br />
2) d&#8217;appeler le plug-in myblur (premier paramètre de register)</p>
<p>Attention: Si votre nom de plugin comprend des underscores, ils se transforment en tirait: my_method -&gt; python-fu-my-method.</p>
<p>Les méthodes appelables sont visualisables dans gimp: help/procedure browser. </p>
<p>Voilà. Sinon pour tester la compilation, et donc inclure gimpfu, on peut utiliser cette astuce:<br />
<code><br />
import sys<br />
sys.path.append("/usr/lib/gimp/2.0/python/")<br />
</code><br />
Mais le pdb demande que le script python soit exécuté en mode batch gimp. Seul le gimpfu.gimp semble échapper à cette règle, mais ses fonctions sont limitées&#8230;</p>
<p>Pour aller plus loin:</p>
<ul>
<li><a href="http://www.gimp.org/docs/python/index.html">La documentation du plugin python de Gimp</a></li>
<li><a href="http://www.gimp.org/tutorials/Basic_Batch/">Le mode batching de Gimp</a></li>
<li><a href="http://www.exp-media.com/content/extending-gimp-python-python-fu-plugins-part-4">Un blog</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=87</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analyse et amélioration du sommeil</title>
		<link>http://blog.shimbawa.ch/?p=84</link>
		<comments>http://blog.shimbawa.ch/?p=84#comments</comments>
		<pubDate>Wed, 22 Jun 2011 20:37:23 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=84</guid>
		<description><![CDATA[webcam nuit infrarouge logitech quickcam timelapse]]></description>
			<content:encoded><![CDATA[<p>Depuis quelque temps, j&#8217;ai l&#8217;impression d&#8217;être toujours plus fatigué, aussi je m&#8217;intéresse à améliorer mon sommeil. Pour celà, j&#8217;ai acquis une montre sleeptracker, qui enregistre tout mouvement durant la nuit: la montre indique ensuite au réveil quand on s&#8217;est réveillé et la durée moyenne entre deux mouvements. Idéalement, la durée moyenne doit être supérieure à 45 minutes, seulement voilà, chez moi, elle est de 18-25 minutes. Est-ce possible de bouger autant durant la nuit ? une seule solution, mettre un témoin, ou&#8230; une caméra.</p>
<p>Mais comment faire pour filmer une nuit sans avoir de caméra infrarouge ? mais&#8230; est-ce qu&#8217;une webcam pourrait filmer dans l&#8217;infrarouge ? les forums d&#8217;astrophotographie affirment que oui !</p>
<p>J&#8217;ai une webcam Quickcam Pro 2000 de Logitech. Celle-ci a bien vécu et je peut tenter une modification de la webcam. Après m&#8217;être renseigné sur les forums, je me lance&#8230; (je n&#8217;ai pas trouvé sur les forums d&#8217;informations de réussite avec cette webcam)</p>
<p>J&#8217;ouvre la webcam. Un peu dur, il y a une petite vis sur le côté. Puis je trouve un circuit imprimé, un optique, une loupe avant le capture et&#8230; une plaque de verre légèrement rouge: j&#8217;ai trouvé !</p>
<p>D&#8217;après les forums, beaucoup de webcams peuvent filmer dans l&#8217;infrarouge, mais sont limitées par un filtre infrarouge. On peut supprimer celui-ci pour une utilisation spécifique. Il s&#8217;agit généralement d&#8217;une plaque transparente mise devant le capteur. Pour ma webcam, c&#8217;est une sorte de petite vitre légèrement rouge de 5mm de côté. Je l&#8217;enlève, puis remonte précautioneusement la webcam, non sans mal (j&#8217;ai les doigts trop gros).</p>
<p>J&#8217;essaie: la webcam fonctionne dans le visible. J&#8217;éteint la lumière, elle fonctionne toujours, mais moins bien. Je prend une télécommande infrarouge et surprise: je vois sur le mur, dans la nuit, un point lumineux&#8230; infrarouge. ça a marché !</p>
<p>J&#8217;installe donc la webcam, scotchée sur l&#8217;armoire, mais il reste à capturer la webcam. Pour ceci, j&#8217;utilise un portable Linux et streamer. Et pour le faire durant toute la nuit, je me fais un petit programme Python:</p>
<pre>import os, time
dev="/dev/video1"

def capture():
    ts=time.strftime("%Y%m%d%H%M%S")
    os.system("streamer -s 640x480 -c %s -o webcam-%s.ppm"%(dev, ts))

nbExceptions = 0
while nbExceptions &lt; 100:
    try:
        capture()
        time.sleep(10)
    except exception, e:
        print time.strftime("%Y%m%d%H%M%S"), " exception ", e
        nbExceptions+=1</pre>
<p>&nbsp;</p>
<p>J&#8217;ai eu quelques problèmes de timeout lors de l&#8217;accès à la webcam, et après avoir fouillé 45 minutes, j&#8217;ai trouvé la solution: &laquo;&nbsp;sudo rmmod pwc&nbsp;&raquo;</p>
<p>Ok, ce petit script enregistre une photo toutes les 10 secondes et stocke l&#8217;heure dans le nom du fichier.<br />
Maintenant, ce serait cool de faire une vidéo ! Je refais un script python, appelant ImageMagick:</p>
<pre>
import glob, os

filenames = glob.glob("*.ppm")
filenames.sort()
for filename in filenames:
    os.system("ppmtojpeg %s &gt; tmp0.jpg" % (filename))
    os.system("convert -despeckle tmp0.jpg tmp1.jpg")
    os.system("convert -adaptive-blur 2 tmp1.jpg tmp2.jpg")
    adata = filename[filename.find("20"): filename.rfind(".")]
    year = adata[:4]
    month = adata[4:6]
    day = adata[6:8]
    hour = adata[8:10]
    amin = adata[10:12]
    sec = adata[12:14]
    sdate = "%s.%s.%s %s:%s:%s" % (day, month, year, hour, amin, sec)
    os.system("convert tmp2.jpg  -pointsize 16 -fill white -annotate +10+10  \"%s\" converted_%s.jpg" % (sdate, filename))

os.system("mencoder \"mf://*.jpg\" -mf fps=12 -o out.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800")
os.system("rm converted_*jpg")
print "Created out.avi"
</pre>
<p>Ce petit script convertit les ppm en jpeg (streamer ne peut pas créer de jpeg ??), puis effectue 2 filtres, despeckle et blur adaptatif, puis lit l&#8217;heure et la date dans le nom du fichier et l&#8217;incruste en haut à gauche de l&#8217;image. J&#8217;ai alors plein d&#8217;images jpeg, que j&#8217;assemble en vidéo avec mencoder&#8230;</p>
<p>cqfd (ce qu&#8217;il fallait développer). Ok, c&#8217;est un peu brut: on peut merger les convert, faire un pipe du streamer sur convert pour sortir la jpeg directement, etc&#8230; mais ça marche !</p>
<p>Enfin, j&#8217;essaie tout ceci. J&#8217;utilise une led infrarouge de viseur nocture pour pointer le lit, je vérifie ma webcam et&#8230; je teste. Enfin, je vais dormir, quoi (la meilleur partie <img src='http://blog.shimbawa.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Et le matin, je processe ma vidéo, et ça marche <img src='http://blog.shimbawa.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>La vidéo confirme ce que dit la montre: je bouge toutes les 15 minutes en moyenne, moins en début de nuit. Je dois donc travailler ma relaxation pour passer de meilleure nuit&#8230; sans somniphère ni médecin coûteux !</p>
<p>Conclusion: on peut facilement modifier une webcam pour voir l&#8217;infrarouge et faire une vidéo timelapse d&#8217;une nuit. N&#8217;espérez pas épier vos voisins de nuit, la qualité est vraiment basique. Mais pour voir qui tire la couette la nuit, c&#8217;est génial <img src='http://blog.shimbawa.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grottes de Vallorbe &#8211; la Cathédrale</title>
		<link>http://blog.shimbawa.ch/?p=82</link>
		<comments>http://blog.shimbawa.ch/?p=82#comments</comments>
		<pubDate>Sun, 12 Jun 2011 18:04:50 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[grottes vallorbe]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=82</guid>
		<description><![CDATA[La salle est noire, un petit bouton vert clignote. Je m&#8217;avance, puis revient à ma place. Un son grandit, semblant venir de loin, puis une musique envahit la caverne. La réverberation m&#8217;indique que je suis dans un grand espace, une cathédrale. Une lumière s&#8217;allume, et je vois une forme, un pilier éclairé par l&#8217;arrière. La [...]]]></description>
			<content:encoded><![CDATA[<p>La salle est noire, un petit bouton vert clignote. Je m&#8217;avance, puis revient à ma place. Un son grandit, semblant venir de loin, puis une musique envahit la caverne. La réverberation m&#8217;indique que je suis dans un grand espace, une cathédrale.<br />
Une lumière s&#8217;allume, et je vois une forme, un pilier éclairé par l&#8217;arrière. La couleur est rouge, légérement orangé. J&#8217;entend l&#8217;eau. Puis une goutte tombe, et arrive sur ce monticule. De l&#8217;eau jaillit, chassée par la goutte d&#8217;eau tombante, rejettant plus de petites goutes d&#8217;eau de tous les côtés. Avec l&#8217;éclairage par l&#8217;arrière, c&#8217;est magnifique&#8230; le dormeur doit se réveiller&#8230;<br />
Puis une autre lumière s&#8217;allume, et encore une autre, et j&#8217;observe un espace chaque fois plus grand tandis que résonne la musique qui s&#8217;offre aux visiteurs de ce lieu. Le spectacle continue, des lumières s&#8217;éteignent et d&#8217;autres s&#8217;allument.<br />
On voit des draperies, puis plus haut, des fistuleuses, dans un jeu et lumière intriguant, progressif, bien conçu.<br />
Les fistuleuses s&#8217;éteignent, et on voit le plafond, d&#8217;un curieux vert, et les parois, rouge-orange.<br />
Puis on voit le fond de la caverne, nous révélant enfin le fond de cette cathédrale&#8230; mais quel fond ? on ne vois pas le bout !<br />
Progressivement, tout s&#8217;éteint, puis se rallume à nouveau le pilier, et on voit l&#8217;eau qui goutte, puis s&#8217;éclate en d&#8217;autres gouttes,<br />
tandis qu&#8217;à l&#8217;arrière plan, un manequin spéléologue est éclairé, très loin, et, progressivement, la salle s&#8217;éteint, et on ne voit bientôt plus que ce petit bouton vert qui clignote.</p>
<p>Etais-ce un rêve ?<br />
en tous les cas, merci à la société des grottes de Vallorbe et ses collaborateurs pour nous avoir dévoilé la cathédrale en ce magnifique jeu et lumière, et je recommande à tous de faire l&#8217;expérience et d&#8217;aller visiter les grottes !</p>
<p>PS:<br />
Un bémol cependant. Les photos sont interdites. Dommage, mais on comprend pourquoi:<br />
L&#8217;oeil met 20 minutes à s&#8217;adapter à l&#8217;obscurité, et une seconde à la lumière. Un simple flash<br />
peut alors casser les 20 minutes de préparation. Lors de la visite de la cathédrale,<br />
nous avons été très géné par des personnes peu scrupuleuses qui prenaient plein de photos<br />
avec les flashs, et malheureusement, nous avons regardé&#8230; et là, il ne restait plus qu&#8217;à ressortir,<br />
aveuglés par le flash&#8230;<br />
De la même manière, le jeu et lumière de la cathédrale est gâché par des personnes avec<br />
des lampes de poche&#8230;<br />
Enfin, il serait appréciable d&#8217;interdire les flashs, mais surtout pas les photos !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=82</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Speed Tracer</title>
		<link>http://blog.shimbawa.ch/?p=77</link>
		<comments>http://blog.shimbawa.ch/?p=77#comments</comments>
		<pubDate>Wed, 01 Jun 2011 06:15:44 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[google speed tracer]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=77</guid>
		<description><![CDATA[Google Speed Tracer est une extension Google Chrome, qui permet de tracer le chargement des compostants de la page web: ressources, flux de données, mais également temps de chargement dom, de refresh écran, d&#8217;ajax, etc&#8230; C&#8217;est un outil indispensable lors de la création d&#8217;un site web optimal, et c&#8217;est ici: http://code.google.com/webtoolkit/speedtracer/get-started.html#downloading]]></description>
			<content:encoded><![CDATA[<p>Google Speed Tracer est une extension Google Chrome, qui permet de tracer le chargement des compostants de la page web: ressources, flux de données, mais également temps de chargement dom, de refresh écran, d&#8217;ajax, etc&#8230;<br />
C&#8217;est un outil indispensable lors de la création d&#8217;un site web optimal, et c&#8217;est ici:</p>
<p>http://code.google.com/webtoolkit/speedtracer/get-started.html#downloading</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=77</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intersection de deux segments de ligne</title>
		<link>http://blog.shimbawa.ch/?p=71</link>
		<comments>http://blog.shimbawa.ch/?p=71#comments</comments>
		<pubDate>Mon, 23 May 2011 20:08:48 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[algorithme ligne intersection]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=71</guid>
		<description><![CDATA[Comment faire pour trouver le point d&#8217;intersection de deux segments de lignes ? Après avoir cherché sur internet pendant longtemps, voici ma solution: public static PrecisionPoint findIntersection(PrecisionPoint p1, PrecisionPoint p2, PrecisionPoint p3, PrecisionPoint p4) { double ua = ((p4.x-p3.x)*(p1.y-p3.y) - (p4.y-p3.y)*(p1.x-p3.x)) / // ((p4.y-p3.y)*(p2.x-p1.x) - (p4.x-p3.x)*(p2.y-p1.y)); double ub = ((p2.x-p1.x)*(p1.y-p3.y) - (p2.y-p1.y)*(p1.x-p3.x)) / // ((p4.y-p3.y)*(p2.x-p1.x) [...]]]></description>
			<content:encoded><![CDATA[<p>Comment faire pour trouver le point d&#8217;intersection de deux segments de lignes ? Après avoir cherché sur internet pendant longtemps, voici ma solution:</p>
<pre>
public static PrecisionPoint findIntersection(PrecisionPoint p1, PrecisionPoint p2,
                                                           PrecisionPoint p3, PrecisionPoint p4) {
		double ua = ((p4.x-p3.x)*(p1.y-p3.y) - (p4.y-p3.y)*(p1.x-p3.x)) / //
					((p4.y-p3.y)*(p2.x-p1.x) - (p4.x-p3.x)*(p2.y-p1.y));
		double ub = ((p2.x-p1.x)*(p1.y-p3.y) - (p2.y-p1.y)*(p1.x-p3.x)) / //
				    ((p4.y-p3.y)*(p2.x-p1.x) - (p4.x-p3.x)*(p2.y-p1.y));
		if (ua1 || ub1) {
			return null;
		}
		double x = p1.x + ua * (p2.x - p1.x);
		double y = p1.y + ub * (p2.y-p1.y);
		return new PrecisionPoint(x, y);
	}
</pre>
<p>Ce code Java est utile pour détecter le point d&#8217;intersection de deux segments de lignes. si ua et ub sont entre 0 et 1, l&#8217;intersection se produit sur le segment, sinon il se produit sur la ligne mais hors segment&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=71</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evaluation des abonnements de train suisse</title>
		<link>http://blog.shimbawa.ch/?p=68</link>
		<comments>http://blog.shimbawa.ch/?p=68#comments</comments>
		<pubDate>Wed, 23 Mar 2011 18:52:59 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[cff abonnement simulation mobilis]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=68</guid>
		<description><![CDATA[Je voyage beaucoup. Chaque jour je prend le train pour aller au travail, aux cours de musique, voir la famille; le week-end, j'aime aller en suisse-allemande, en valais, etc... mais tout ceci coûte cher, et je me suis demandé, mon abonnement arrivant à échéance, si un abonnement mobility ou des billets reviendraient moins cher. Ma supposition de base étaient qu'un abonnement général ou de parcours mobilis, associé à un demi-tarif cff devrait me permettre de gagner quelques francs...]]></description>
			<content:encoded><![CDATA[<p>Je voyage beaucoup. Chaque jour je prend le train pour aller au travail, aux cours de musique, voir la famille; le week-end, j&#8217;aime aller en suisse-allemande, en valais, etc&#8230; mais tout ceci coûte cher, et je me suis demandé, mon abonnement arrivant à échéance, si un abonnement mobilis ou des billets reviendraient moins cher. Ma supposition de base étaient qu&#8217;un abonnement général ou de parcours mobilis, associé à un demi-tarif cff devrait me permettre de gagner quelques francs&#8230;</p>
<p>&nbsp;</p>
<p>J&#8217;estime ma consommation actuelle des transports publics comme suit:</p>
<ul>
<li>220 jours de travail où j&#8217;effectue <em>Chavornay</em>-<em>Lausanne</em>, toutes les 2 semaines via Yverdon pour un cours</li>
<li>20 jours où je dois aller chercher une voiture Mobility de <em>Chavornay </em>à <em>Yverdon </em>(et retour)</li>
<li>30 jours où je dois me rendre à <em>Orbe</em>, pour la famille ou le resto</li>
<li>un week-end à <em>Zermatt </em>(magnifique)</li>
<li>1 week-end à <em>Sumiswald </em>(aussi magnifique)</li>
<li>2 week-end à <em>La Sage</em>, toujours de <em>Chavornay</em></li>
<li>Des week-end en <em>suisse-allemande</em> (<em>Soleure</em>, <em>Bern</em>, <em>olten</em>, <em>Winterthur</em>) ou romande (<em>Sion</em>, <em>Nyon</em>, <em>Vallée</em>, <em>Ste-Croix</em>), je prend <em>Chavornay</em>-<em>Bienne </em>comme moyenne, à 40 trajets par année(x2)</li>
</ul>
<p>&nbsp;</p>
<p>Et&#8230; voici mes résultats: (prix par année, abonnement annuel)</p>
<ul>
<li>tickets, 2èmeclasse, adulte: 8636 CHF</li>
<li>tickets, 2èmeclasse, réduit: 4615 CHF (dont 165 CHF d&#8217;abonnementdemi-tarif)</li>
<li>tickets, 1èreclasse, adulte: 14248 CHF</li>
<li>tickets, 1èreclasse, réduit: 7427 CHF (la plupartdes personnes ne savent pas que ledemi-tarif est aussi valable en 1èreclasse !)</li>
<li>abonnementmobilis, 2èmeclasse: <span style="color: #339966">3557CHF</span></li>
<li>abonnementmobilis, 1èreclasse: <span style="color: #339966">5742 CHF</span></li>
<li>abonnementcff, 2èmeclasse:<span style="color: #339966"> 3300 CHF</span></li>
<li>abonnementcff, 1èreclasse: <span style="color: #339966">5150 CHF</span></li>
</ul>
<p>&nbsp;</p>
<p><strong>Conclusion</strong>:<br />
Pour quelques francs de trop, l&#8217;abonnement général mobilis n&#8217;est pas rentable pour mon cas. <span style="color: #339966"><strong>L&#8217;abonnement général CFF reste le moins cher</strong></span>.<br />
J&#8217;ai encore le choix entre un AG CFF 2ème classe et 1ère classe, et vu que j&#8217;aime bien m&#8217;assoir, je craque pour le 1ère classe&#8230; et c&#8217;est très pratique de pouvoir entrer dans n&#8217;importe quel moyen de transport en suisse, sans réfléchir, sans compter les bonus: des cadeaux, des billets journaliers gratuits, etc&#8230;</p>
<p>&nbsp;</p>
<p>Sans hésiter, je vais renouveller mon abonnement général CFF. Quand à choisir lequel&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven et Eclipse</title>
		<link>http://blog.shimbawa.ch/?p=63</link>
		<comments>http://blog.shimbawa.ch/?p=63#comments</comments>
		<pubDate>Tue, 04 Jan 2011 13:23:48 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=63</guid>
		<description><![CDATA[Maven est très mal supporté dans Eclipse, et les meilleurs plugins ne permettent d&#8217;utiliser Maven de manière satisfaisante. Je vous donne ma recette de cuisine miracle lorsque plus rien ne va: mvn -DdownloadJavadocs=true -DdownloadSources=true clean install -Pnot eclipse:clean eclipse:eclipse -Pnot est un profil spécial demandant à ne pas exécuter les tests: &#60;profiles&#62; &#60;profile&#62; &#60;id&#62;not&#60;/id&#62;&#60;!-- NOTests [...]]]></description>
			<content:encoded><![CDATA[<p>Maven est très mal supporté dans Eclipse, et les meilleurs plugins ne permettent d&#8217;utiliser Maven de manière satisfaisante. Je vous donne ma recette de cuisine miracle lorsque plus rien ne va:</p>
<pre>mvn -DdownloadJavadocs=true -DdownloadSources=true clean install -Pnot eclipse:clean eclipse:eclipse</pre>
<p>-Pnot est un profil spécial demandant à ne pas exécuter les tests:</p>
<pre>&lt;profiles&gt;
  &lt;profile&gt;
    &lt;id&gt;not&lt;/id&gt;&lt;!-- NOTests --&gt;
    &lt;properties&gt;
      &lt;skipTests&gt;true&lt;/skipTests&gt;
    &lt;/properties&gt;
  &lt;/profile&gt;
&lt;/profiles&gt;</pre>
<p>La ligne va effacer les target/*, charger les dépendances, compiler, mettre à jour le .classpath et le .project. Il suffit ensuite de faire un refresh sur les projets dans Eclipse, et d&#8217;attendre la fin de son rebuild&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=63</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serveur REST en PHP</title>
		<link>http://blog.shimbawa.ch/?p=60</link>
		<comments>http://blog.shimbawa.ch/?p=60#comments</comments>
		<pubDate>Thu, 23 Dec 2010 18:43:55 +0000</pubDate>
		<dc:creator>dutoitc</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[rest php mod_rewrite apache]]></category>

		<guid isPermaLink="false">http://blog.shimbawa.ch/?p=60</guid>
		<description><![CDATA[Comment faire simplement du REST en PHP ? après quelques mois de recherche, j&#8217;ai trouvé la réponse, et je vous la fait partager en espérant vous éviter autant de recherches&#8230; Pour http://www.randonneurs.ch, je dispose de mon propre framework PHP, basé sur un système de plugins comportant des contrôleurs de plugin et de fonctionnalité, se relayant [...]]]></description>
			<content:encoded><![CDATA[<p>Comment faire simplement du REST en PHP ? après quelques mois de recherche, j&#8217;ai trouvé la réponse, et je vous la fait partager en espérant vous éviter autant de recherches&#8230;</p>
<p>Pour <a href="http://www.randonneurs.ch">http://www.randonneurs.ch</a>, je dispose de mon propre framework PHP, basé sur un système de plugins comportant des contrôleurs de plugin et de fonctionnalité, se relayant les composants graphiques ou fonctionnels sous forme de chaîne de responsabilité et de filtrages à la volée. Pour accéder aux fonctionnalités de mon site par des applications externes, je choisis REST pour sa simplicité de codage des ressources et son découpage fonctionnel facilité. Seul problème, <strong>comment faire pointer pleins d&#8217;URL différentes sur un seul contrôleur PHP</strong> ?</p>
<p>Il existe plein de solutions, mais celle qui me parait la plus élégante est d&#8217;utiliser <strong><em>mod_rewrite</em></strong>, un module apache permettant de récrire une URL sans que le visiteur n&#8217;en soit informé, et donc de pointer sur un seul contrôleur. Comment ça marche ?</p>
<h3>Etape 1: mod_rewrite</h3>
<p>Tout d&#8217;abord, autoriser la récriture d&#8217;URL dans la configuration Apache:<br />
Editer <em>/etc/apache2/sites-enabled/monsite/</em> et spécifier &laquo;&nbsp;<em>AllowOverride All</em>&nbsp;&raquo; pour l&#8217;URL de votre site.<br />
Ensuite, à la racine du site web, ajouter un fichier<em> .htaccess<span style="font-style: normal"> dont le contenu est le suivant:</span></em><br />
<em> &gt; RewriteEngine On<br />
&gt; RewriteRule ^.*r1(.*)$ /?ctrl=rest&amp;path=$1 [L]</em><br />
Ici, je redirige tout ce qui va sur <em>http://www.randonneurs.ch/r1</em> vers <em>http://www.randonneurs.ch/?ctrl=rest&amp;path=$1</em>, $1 étant le bout de l&#8217;URL après &laquo;&nbsp;r1&#8243;.</p>
<h3></h3>
<h3>Etape 2: dispatcher la requête</h3>
<p>Dans le cas de Randonneurs.ch, un contrôleur front identifie la requête REST par le paramètre <em>ctrl</em> et rediriger vers un contrôleur REST, qui, lui, convertit le chemin en identifiant de dispatch: <em>REST_A_B</em>.</p>
<p>Ensuite, cet identifiant est dispatché dans tous les contrôleurs enregistrés pour résolution (chaîne de responsabilité).</p>
<h3></h3>
<h3>Etape 3: traiter la requête</h3>
<p>Mon plugin <em>A</em> identifie que la requête est pour lui, et traite l&#8217;élément <em>REST_A_B</em>. Il lui incombe de supporter les actions REST: <em>PUT, GET, HEAD</em>&#8230; mais ceci pourait être centralisé par un contrôleur dérivé d&#8217;un AbstractRestController, par exemple. Le contrôleur peut décider d&#8217;envoyer des données différentes en fonction de l&#8217;en-tête d&#8217;entrée: <em>accept: text/plain</em> ou <em>accept: application/json</em> pourraient produire deux résultats différents. N&#8217;oublions pas alors le salvateur<em> json_encode</em> de PHP !</p>
<h3>Conclusion:</h3>
<p>Cette solution fonctionnelle permet de réutiliser un système déjà mis en place de plugins et contrôleurs. Pour une solution plus simple, on peut écrire plus de règles rewrite, qui chacune pointerait sur un fichier php différent. A chacun d&#8217;adapter ensuite cette solution à ses besoins&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shimbawa.ch/?feed=rss2&#038;p=60</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

