<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4622127992180437360</id><updated>2011-11-14T19:28:08.362+01:00</updated><category term='ruby'/><category term='shoes'/><category term='scheme'/><category term='socio'/><category term='harp'/><category term='cfd'/><category term='java'/><category term='proce55ing'/><category term='web'/><category term='jeux web'/><category term='fortran'/><category term='liens'/><category term='troll'/><category term='pro'/><category term='libre'/><category term='sobe session'/><category term='music'/><category term='event'/><category term='art'/><category term='bd'/><category term='page'/><category term='poésie'/><category term='meta'/><category term='io'/><category term='jeu'/><category term='programmation'/><category term='groovy'/><category term='java3d'/><category term='g33k'/><category term='rails'/><category term='base'/><category term='xfce'/><category term='soft'/><category term='windows'/><category term='ocaml'/><category term='sneakers'/><category term='code'/><category term='cat'/><category term='ada'/><category term='science'/><title type='text'>Sobe Session</title><subtitle type='html'>&lt;a href="http://sobe-session.blogspot.com" title="... du Ruby, du Fortran, des codes, de l&amp;#39;art, de la science, des jeux, du web..."&gt;Un peu de programmation et beaucoup d'autres choses...&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default?start-index=101&amp;max-results=100'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3081658476605678663</id><published>2010-03-22T21:06:00.000+01:00</published><updated>2010-03-22T21:06:29.308+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Tumblelog de jeu</title><content type='html'>Je viens de me lancer dans un &lt;a href="http://gam3z.tumblr.com/"&gt;&lt;b&gt;nouveau blog&lt;/b&gt;&lt;/a&gt; (oui, je sais, vu l'activité de ce celui-ci...) &lt;b&gt;à propos de jeu(x)&lt;/b&gt;, toutes catégories confondus : jeux de plateaux, jeux de rôle, jeux vidéos (de préférence libres ou indés si possible...) et autres.&lt;br /&gt;&lt;br /&gt;C'est l'occasion de faire mes petites fiches de jeu, de me remettre un peu à publier sur un sujet qui me plait, et accessoirement de tester &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt; qui me parait être une plate-forme bien pratique...&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3081658476605678663?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3081658476605678663/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3081658476605678663' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3081658476605678663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3081658476605678663'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2010/03/tumblelog-de-jeu.html' title='Tumblelog de jeu'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3867987238347866580</id><published>2009-11-07T11:45:00.001+01:00</published><updated>2009-11-07T11:46:19.816+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='harp'/><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='bd'/><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><title type='text'>Octobre 2009</title><content type='html'>&lt;i&gt;Retour sur le mois passé...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Rett.iuwt&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://iuwt.fr/"&gt;Asmanur&lt;/a&gt; a eu la formidable idée de créer une plateforme &lt;a href="http://status.net/"&gt;Status.net&lt;/a&gt; en parallèle du chan #sdz (et #zds - sur epic.net) et de &lt;a href="http://buzzerl.iuwt.fr/web/index?page=1"&gt;Buzzerl&lt;/a&gt; : ça s'appelle &lt;b&gt;"Rett.iuwt" ou "Twuitter"&lt;/b&gt;, et c'est &lt;a href="http://rett.iuwt.fr/index.php/"&gt;&lt;b&gt;ici&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Etant maintenant bien habitué à Twitter, j'avoue que j'apprécie bien ce mode de communication, en particulier comparé à IRC (où, il faut bien le dire, je ne fous jamais les pieds), aux forum et aux réseaux sociaux plus "riches" :&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Par rapport aux messageries instantanées donc, c'est beaucoup moins invasif, on gère plus facilement le bruit, et ça a également l'énorme avantage de la persistance (les logs IRC, c'est pénible à lire).&lt;/li&gt;&lt;li&gt;Je trouve les forum souvent trop "statiques". De plus, ils sont généralement axés vers un "thème" en particulier, et se&amp;nbsp;prêtent&amp;nbsp;mal au partage d'items (liens, news, photos, etc...) : ils ne sont pas vraiment faits pour ça.&lt;/li&gt;&lt;li&gt;Les "gros" réseaux sociaux, au sens "grosse appli", sont... lourds. Facebook par exemple, même s'il reste un outil très utile pour garder le contact avec ses potes, n'est pas du tout adapté pour une utilisation en mode "communauté" : trop d'applications (plus useless et mal codées les unes que les autres), trop de bruit et des outils (et interface) trop lourds. Sans parler des problèmes d'accès aux informations privées...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Peut-être Google Wave (NON, je n'ai pas d'invitation, je n'y suis pas !) proposera-t-il quelque chose de nouveau dans ce domaine...&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dans la foulée, je cherchais un client multi-plateforme pour Twitter et Status.net, et je suis tombé sur &lt;b&gt;&lt;a href="http://qt-apps.org/content/show.php/qTwitter?content=99087"&gt;qTwitter&lt;/a&gt;&lt;/b&gt;, qui est tout à fait sympathique. Certes, ce n'est pas le plus joli esthétiquement, mais il fait bien le job et a pas mal de fonctionnalités utiles (réglage mises-à-jour, support de Twitter, Identi.ca et autres Status.net, options d'auto-#tag et de&amp;nbsp;raccourcissement&amp;nbsp;d'URL...).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Il reste plus qu'à trouver un moyen propre de faire le pont entre deux comptes/API Twitter et Status.net, et ce sera &amp;nbsp;nickel...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;SupInfo&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;On a beaucoup entendu parler de &lt;b&gt;SupInfo&lt;/b&gt; ce mois-ci, dans des termes &lt;i&gt;peu avantageux&lt;/i&gt; (euphémisme).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;D'abord la sombre histoire d'un &lt;a href="http://twitter.com/Dokidate"&gt;étudiant&lt;/a&gt; à qui SupInfo refusait de remettre son diplôme qui a fait un peu de buzz. Ensuite, &lt;a href="http://emfleury.free.fr/index.php?post/2009/07/23/SupInfo"&gt;un article assassin&lt;/a&gt; d'un enseignant chercheur sur la formation prodiguée par cette école... qui a déclenché pas mal de réactions, notamment celle d'un compte Twitter (&lt;a href="http://twitter.com/olivier_comes"&gt;@olivier_comes&lt;/a&gt;) supposé appartenir à un responsable de cette école (je vous laisse juger au vu des tweets, mais je ne peux que penser qu'il s'agit d'une usurpation d'identité...).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Je ne commente pas l'affaire de l'étudiant, elle me parait louche. Pour ce qui est de l'article, s'il avait été écrit par un membre de la &lt;a href="http://fr.wikipedia.org/wiki/Commission_des_titres_d'ing%C3%A9nieurs"&gt;CTI&lt;/a&gt;, j'y porterais plus de crédit, même si je pense que l'auteur est de bonne foi.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Je ne connais personnellement aucune personne étudiant ou ayant étudié dans cet (ces) établissement(s). Je ne connais pas non plus particulièrement bien la formation prodiguée.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pour autant, les problèmes mentionnés (même s'ils sont exagérés, là n'est pas la question) sont pour moi "logiques" pour une formation privée, d'une part, et non sanctionnée par la CTI d'autre part.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;J'ai toujours été favorable à l'&lt;b&gt;enseignement (supérieur) public&lt;/b&gt;, qu'il se fasse en classes préparatoires, universités, écoles d'ingénieurs ou autre. Ce n'est pas tant une question de gratuité (les écoles de commerce publiques sont payantes par exemple), mais une certaine garantie (imparfaite bien sûr) du mérite de l'intégration : concours après les CPGE, intégration sur titre depuis la fac, etc... L'argent n'est pas supposé intervenir dans cette phase là.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ensuite, qu'on le veuille ou non, la &lt;b&gt;commission des titres d'ingénieur&lt;/b&gt; impose des conditions parfois très strictes aux établissements pour que ceux-ci délivrent le diplôme d'ingénieur. Ce n'est pas pour rien : d'une part, cela assure un semblant de standardisation entre les formations sur les sujets transverses (gestion de projet, management, communication, langues, formation théorique, etc...) quelque soit le niveau supposé de la dite formation. D'autre part, c'est une sorte de "label qualité" applicable à tous ses diplômés. Bien sûr, ensuite, certains étudiants seront plus compétents que d'autres dans un contexte professionnel : c'est pourquoi il est évident qu'avoir un diplôme SupInfo n'est pas un point négatif en soi. Cependant, je comprendrais un recruteur (surprenant, non ?) qui à profil équivalent préfèrerais un candidat avec un diplôme d'ingénieur.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Jeux&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Deux très bons jeux ce mois-ci :&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.popcap.com/games/pvz?lcid=1036&amp;amp;s_kwcid=TC|4220|plants%20vs.%20zombie||S|b|3953324654"&gt;Plants VS Zombies&lt;/a&gt;&lt;/b&gt; : un excellent jeu de stratégie sur PC (Windows, Mac et Web) dans le genre "tower-defense en lignes". Design marrant, bonne durée de vie, musiques géniales... vraiment très sympa.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.jeuxvideo.com/jeux/nintendo-ds/00019654-professeur-layton-et-la-boite-de-pandore.htm"&gt;Professeur Layton et la boîte de Pandore&lt;/a&gt;&lt;/b&gt; : sur Nintendo DS, dans la lignée du premier épisode. Je craignais un peu que le principe de jeu s'essouffle à cause d'une répétition des énigmes, mais je me trompais : on se régale tout pareil.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Musique et BD&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;D'abord, l'annonce du nouvel album des &lt;b&gt;Puppetmastaz&lt;/b&gt; pour le 9 Novembre (déjà) : &lt;i&gt;"The Breakup"&lt;/i&gt;. Si vous aimez le Hip Hop un peu décalé, technique et à tendance électro, foncez. Un minimix de preview, absolument génial, est disponible gratuitement &lt;a href="http://fairtilizer.com/track/56407"&gt;ici&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dans le style vieux Blues et Boogie, je vous conseille &lt;b&gt;&lt;a href="http://fr.wikipedia.org/wiki/Sonny_Boy_Williamson_I"&gt;Sonny Boy Williamson I&lt;/a&gt;&lt;/b&gt;, un grand harmoniciste ayant enregistré dans les années 30 et 40. Beaucoup de perles dans sa discographie.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;J'ai enfin récupéré la &lt;b&gt;bande originale du film Conan le Barbare&lt;/b&gt;, par Basil Poledouris. Hormis le fait que c'est excellent (surtout pour un geek comme moi, ou pour un fan de &lt;a href="http://www.penofchaos.com/warham/donjon.htm"&gt;Naheulbeuk&lt;/a&gt;), je pense que c'est à conseiller à toute personne souhaitant découvrir doucement la musique classique : les morceaux sont plutôt courts, les mélodies assez simples et redondantes, mais la composition générale et l'interprétation en font quelque chose de très intéressant.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En BD, le dernier &lt;a href="http://fr.wikipedia.org/wiki/Jiro_Taniguchi"&gt;Jiro Taniguchi&lt;/a&gt;, &lt;b&gt;&lt;i&gt;"Un zoo en hiver"&lt;/i&gt;&lt;/b&gt;, est très bon : dans la lignée de ses titres &lt;i&gt;"Un ciel radieux"&lt;/i&gt;, &lt;i&gt;"Quartier lointain"&lt;/i&gt; ou &lt;i&gt;"Le journal de mon père"&lt;/i&gt;, celui-ci apporte une touche auto-biographique supplémentaire (jeunesse dans l'industrie du dessin et du manga dans les années 60), et une ambiance vraiment particulière. Très touchant.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3867987238347866580?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3867987238347866580/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3867987238347866580' title='5 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3867987238347866580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3867987238347866580'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/11/octobre-2009.html' title='Octobre 2009'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-6406937543753862586</id><published>2009-10-17T17:24:00.003+02:00</published><updated>2009-10-17T17:41:44.752+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='page'/><category scheme='http://www.blogger.com/atom/ns#' term='io'/><title type='text'>Io Language Libraries and Tools</title><content type='html'>&lt;div style="text-align: justify;"&gt;Because of its too short name, it's quite hard to find&amp;nbsp;&lt;b&gt;resources&amp;nbsp;for &lt;/b&gt;&lt;a href="http://www.iolanguage.com/"&gt;&lt;b&gt;Io language&lt;/b&gt;&lt;/a&gt;. Besides, I never found some kind of "&lt;i&gt;libraries central&lt;/i&gt;" for it (as it exists in other languages like Perl or Ruby for example). &lt;a href="http://www.iolanguage.com/"&gt;Io official website&lt;/a&gt; also lacks of links, or some are obsolete...&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So, this post is &lt;b&gt;an attempt to simply list existing libs and tools for Io language&lt;/b&gt; and provide links to them, with minimalist descriptions.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;You are really encouraged to notify&lt;/b&gt; me (via the comments for example) missing libs or tools, or &lt;b&gt;to use &amp;nbsp;this raw list&lt;/b&gt; for a possible centralization of Io&amp;nbsp;resources&amp;nbsp;(This is what &lt;a href="http://en.wikipedia.org/wiki/Creative_Commons"&gt;CC licences&lt;/a&gt; are for).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://shinh.skr.jp/io/iofe/"&gt;&lt;b&gt;IoFE&lt;/b&gt;&lt;/a&gt; - An alternative command line interface to the IoVM interpreter [old ?]&lt;/li&gt;&lt;li&gt;&lt;a href="http://xeny.net/IoWiki"&gt;&lt;b&gt;IoWiki&lt;/b&gt;&lt;/a&gt; - A simple wiki written in Io (&lt;a href="http://github.com/tumble/iowiki"&gt;sources&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/cdcarter/backpacking"&gt;&lt;b&gt;Backpacking&lt;/b&gt;&lt;/a&gt; - An Io web framework [old ?]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/defunkt/ike"&gt;Ike&lt;/a&gt;&lt;/b&gt; - Rake (Make in Ruby) in Io [several repos]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/iownbey/jim"&gt;Jim&lt;/a&gt;&lt;/b&gt; - An IRC bot in Io&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/anthem/muun"&gt;Muun&lt;/a&gt;&lt;/b&gt; - A multi-user unified network&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/tyler/iota"&gt;Iota&lt;/a&gt;&lt;/b&gt; - A tiny web app framework in Io [old ?]&lt;/li&gt;&lt;li&gt;&lt;b&gt;Yown&lt;/b&gt; - A little web framework for Io (initially&amp;nbsp;developed&amp;nbsp;by _why) [several repos/forks]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/oleganza/io-snippets"&gt;Io-snippet&lt;/a&gt;&lt;/b&gt;s - Snippets for Io&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/qxjit/icis"&gt;Icis&lt;/a&gt;&lt;/b&gt; - An Io continuous integration server&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/nrk/couchdb-io-viewserver"&gt;couchDB-io-viewserver&lt;/a&gt;&lt;/b&gt; - A couchDB viewserver in Io [old ? - Ok ?]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/jdp/io-scgi"&gt;Io-SCGI&lt;/a&gt;&lt;/b&gt; - An SCGI implementation for Io&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/kevinclark/chordal"&gt;Chordal&lt;/a&gt;&lt;/b&gt; - An Io library to generate chords [???]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/quag/io-pack"&gt;Io-Pack&lt;/a&gt;&lt;/b&gt; - A pack/unpack implementation for Io&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/quag/iospec2"&gt;Iospec2&lt;/a&gt;&lt;/b&gt; - An RSpec-like tool (behavior driven development) for Io [several repos]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/fredreichbier/io-stuff"&gt;Io-Stuff&lt;/a&gt;&lt;/b&gt; - Little utilities for Io [Ok ?]&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/quag/io-json"&gt;&lt;b&gt;Io-JSON&lt;/b&gt;&lt;/a&gt; - A simple json pack/unpack for Io&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/iamaleksey/beanstalk-client-io"&gt;Beanstalk-client-io&lt;/a&gt;&lt;/b&gt; - A beanstalk client library&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/omf/iosvn"&gt;IoSVN&lt;/a&gt;&lt;/b&gt; - Subversion Io language add-on&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/fredreichbier/iorm"&gt;iorm&lt;/a&gt;&lt;/b&gt; - A minimalistic ORM [Ok ?]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/oleganza/iopackage"&gt;IoPackage&lt;/a&gt;&lt;/b&gt; - Io code package manager based on Git repositories&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/josip/generys"&gt;Generys&lt;/a&gt;&lt;/b&gt; - Web framework in Io [Ok ?]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/fredreichbier/netz"&gt;Netz&lt;/a&gt;&lt;/b&gt; - A simple webserver abstraction layer for Io [Ok ? New]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://github.com/fitzgen/couchdb-io"&gt;couchDB-Io&lt;/a&gt;&lt;/b&gt; - Io library for CouchDB [New]&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/Sobe/IoGraphViz"&gt;&lt;b&gt;IoGraphViz&lt;/b&gt;&lt;/a&gt; - Binding for GraphViz [New]&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;i&gt;Not found:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;IoGTK&lt;/li&gt;&lt;li&gt;ModIo&lt;/li&gt;&lt;li&gt;IoL4&lt;/li&gt;&lt;li&gt;It (by Pixar studios)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;Sources:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;a href="http://www.iolanguage.com/community/projects/"&gt;&lt;span style="font-size: small;"&gt;Io official website&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;, &lt;a href="http://github.com/languages/Io"&gt;GitHub&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Last update:&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;span style="font-size: small;"&gt; 17th October 2009&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-6406937543753862586?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/6406937543753862586/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=6406937543753862586' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6406937543753862586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6406937543753862586'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/10/io-language-libraries-and-tools.html' title='Io Language Libraries and Tools'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3208146409204778231</id><published>2009-09-28T00:22:00.000+02:00</published><updated>2009-09-28T00:24:45.652+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='harp'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='sobe session'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='java3d'/><category scheme='http://www.blogger.com/atom/ns#' term='soft'/><category scheme='http://www.blogger.com/atom/ns#' term='io'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Septembre 2009</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Intro :&lt;/span&gt; J'ai décidément du mal à tenir ce blog à jour... Pourtant, il y a bien des sujets dont je souhaiterais parler ici ; mais entre les articles demandant trop d'investissement en temps et ceux qui seraient trop courts, au final, je ne publie pas. Donc j'ai décidé de me lancer dans une série mensuelle, listant rapidement des petites choses intéressantes, tout domaine confondu (enfin, surtout ceux habituellement traités ici...). En espérant donner un petit coup de fouet à ce blog qui refuse de mourir.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Logiciels :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Découvert au taf, &lt;a style="font-weight: bold;" href="http://www.launchy.net/"&gt;Launchy&lt;/a&gt; est un petit lanceur d'application bien sympathique, disponible sous Windows et Linux. Très pratique (et libre).&lt;br /&gt;&lt;br /&gt;M'étant mis tout récemment à la musique assistée par ordinateur (voir plus bas), je vous conseille &lt;a style="font-weight: bold;" href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt; (libre et multi-plateforme) que je découvre pour tout ce qui est enregistrement et montage audio. J'avoue que j'ai toujours eu peur des logiciels de MAO à cause de la complexité de certaines références (genre Cubase), mais là ça se présente de manière plutôt simple, même s'il faut creuser un peu pour certaines fonctionalités.&lt;br /&gt;&lt;br /&gt;Enfin, j'ai récemment commencé à utiliser &lt;a style="font-weight: bold;" href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; au travail... Contre toute attente, je sens que ce soft va me réconcilier avec les IDE : bien que lourd, il fait un nombre de tâches hallucinant et facilite vraiment la vie du développeur sur pas mal de points assez peu intéressants (conventions syntaxiques, intégration du gestionnaire de configuration, génération automatique de méthode, commentaires, détection d'erreurs en live, etc...). J'ai sans doute l'air de découvrir la roue, mais bon... quand ça tourne bien, faut pas bouder son plaisir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Musique&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Certains le savent, d'autres non. Je suis un gros fan de Blues, et je joue depuis "presque" un an de l'&lt;a href="http://fr.wikipedia.org/wiki/Harmonica_diatonique"&gt;harmonica diatonique&lt;/a&gt; (&lt;span style="font-style: italic;"&gt;blues harp&lt;/span&gt; donc). Comme je l'avais &lt;a href="http://sobe-session.blogspot.com/2009/02/expatriation-et-microblogging.html"&gt;déjà dit ici&lt;/a&gt;, je pense que ce sujet est un peu loin des thématiques habituelles de ce blog, et donc j'en parle chez &lt;a href="http://lefty-chronicles.blogspot.com/"&gt;Lefty&lt;/a&gt;.&lt;br /&gt;Notamment ce mois-ci : &lt;a href="http://lefty-chronicles.blogspot.com/2009/09/simply-blues.html"&gt;un article&lt;/a&gt; sur une compilation de Blues très bien foutue pour ceux qui veulent découvrir, et un &lt;a href="http://lefty-chronicles.blogspot.com/2009/09/le-blues-du-dimanche-soir-8.html"&gt;premier essai d'enregistrement&lt;/a&gt; avec Lefty à la gratte (d'où l'utilisation d'Audacity).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Pro&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Suite à la fin de ma &lt;a href="http://sobe-session.blogspot.com/2009/07/fin-de-projet-scade.html"&gt;mission précédente&lt;/a&gt;, j'ai enchainé cet été sur un nouveau truc en... Java. Et plus précisément en &lt;a href="https://java3d.dev.java.net/"&gt;Java3D&lt;/a&gt;.&lt;br /&gt;Ce nouveau job me plait beaucoup, en bonne partie parce que j'apprends énormément de choses nouvelles, et que l'environnement est assez différent de mes expériences précédentes.&lt;br /&gt;D'abord le domaine de la &lt;a href="http://fr.wikipedia.org/wiki/G%C3%A9om%C3%A9trie_algorithmique"&gt;géométrie algorithmique&lt;/a&gt; (que je connaissais déjà dans un contexte de calcul scientifique/modélisation mathématique) qui est bigrement intéressant. Pour l'occasion, je me suis d'ailleurs (enfin) payé le &lt;a style="font-style: italic;" href="http://www.cs.uu.nl/geobook/"&gt;Computational Geometry&lt;/a&gt; (de Berg - Cheong - van Kreveld - Overmars) que je ne saurais que trop conseiller à ceux qui s'intéressent à ces problématiques (attention cependant, il n'existe pas de traduction).&lt;br /&gt;Ensuite, l'environnement très libre/open source : même si c'est en bonne partie des outils &lt;span style="font-style: italic;"&gt;classiques&lt;/span&gt; de développement en Java, c'est toujours agréable de bosser avec des choses comme Eclipse (voir plus haut), &lt;a href="http://fr.wikipedia.org/wiki/Apache_Ant"&gt;Ant&lt;/a&gt;, &lt;a href="http://testng.org/"&gt;TestNG&lt;/a&gt;, SVN, &lt;a href="http://trac.edgewall.org/"&gt;TRAC&lt;/a&gt;, plein de bibliothèques  libres, etc... (plutôt que Visual Toto, des scripts batch halakon, des outils de test et des libs internes foireux, Clearcase et Rhapsody...). Ah oui, et un wiki pour la doc : si c'est pas cool ça...&lt;br /&gt;Bon, et le Java, c'est pas si terrible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;IoGraphViz := &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Io + GraphViz &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comme je voulais depuis longtemps m'investir dans un &lt;span style="font-style: italic;"&gt;vrai&lt;/span&gt; projet libre, et qu'en parallèle je voulais me pencher plus sérieusement sur le &lt;a href="http://www.iolanguage.com/"&gt;langage Io&lt;/a&gt;, je me suis lancé dans le projet &lt;a style="font-weight: bold;" href="http://github.com/Sobe/IoGraphViz"&gt;IoGraphViz&lt;/a&gt;.&lt;br /&gt;Il s'agit d'un binding, pour le langage Io, de l'outil de génération de graphes &lt;a style="font-weight: bold;" href="http://www.graphviz.org/"&gt;GraphViz&lt;/a&gt;. Il n'est pas encore stable/mature, mais j'espère sortir assez rapidement une première version fonctionelle. Pour l'instant je me base fortement sur l'équivalent en Ruby : &lt;a style="font-weight: bold;" href="http://raa.ruby-lang.org/project/ruby-graphviz/"&gt;RubyGraphViz&lt;/a&gt;, mais je compte diverger de plus en plus de ce (très bon) point de départ.&lt;br /&gt;Ce qui est intéressant en se lançant dans ce genre de projet, c'est que ça implique de nombreuses contraintes qui sont assez formatrices :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mieux maitriser le(s) langage(s) utilisé(s) bien sûr&lt;/li&gt;&lt;li&gt;Héberger son projet/maitriser un gestionnaire de configuration et/ou de version (dans mon cas, je me suis mis à &lt;a href="http://fr.wikipedia.org/wiki/Git"&gt;Git&lt;/a&gt; via &lt;a href="http://github.com/"&gt;Github&lt;/a&gt; - sous Windows, c'est pas de la tarte au début mais on s'en sort...)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Et surtout rechercher toutes ces petites choses auxquelles on ne pense pas : de la doc sur des points ultra pointus, un générateur de documentation, tests unitaires, etc...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Je compte faire un vrai article d'introduction (&lt;span style="font-style: italic;"&gt;in English if you please...&lt;/span&gt;) à la lib quand elle sera présentable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Curiosités du web&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://web.ku.edu/%7Eidea/dialectmap.htm"&gt;International Dialects of English Archive&lt;/a&gt; propose des petits fichiers audio à l'écoute illustrant les accents (en anglais) de gens des quatre coins du monde. Amusant et pratique pour bosser son oreille.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.journee-mondiale.com/plan.php"&gt;Journée Mondiale&lt;/a&gt; présente une liste (non exhaustive mais impressionante) des &lt;span style="font-style: italic;"&gt;journées mondiales/internationales/européennes/nationales&lt;/span&gt; de... tout et n'importe quoi (genre là on est entre la &lt;span style="font-style: italic;"&gt;Journée Européenne des Langues&lt;/span&gt; et la &lt;span style="font-style: italic;"&gt;Journée Mondiale de la Surdité&lt;/span&gt;... touss touss).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://buzzerl.iuwt.fr/web/index"&gt;&lt;span style="font-weight: bold;"&gt;Buzzerl&lt;/span&gt;&lt;/a&gt; : un reddit pas bien, fait par des gens biens, utilisé par des gens biens et des gens pas biens (en Erlang).&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3208146409204778231?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3208146409204778231/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3208146409204778231' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3208146409204778231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3208146409204778231'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/09/septembre-2009.html' title='Septembre 2009'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1678650120181093699</id><published>2009-07-10T13:51:00.003+02:00</published><updated>2009-07-10T16:27:14.148+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='ada'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Fin de projet SCADE</title><content type='html'>La fin d'une mission, ou d'un projet, c'est toujours une bonne occasion de faire le point. Je viens de terminer tout récemment une mission de quelques mois en tant que développeur logiciel, en SCADE, pour un système embarqué sur avion. Cette mission a été plutôt enrichissante sur plusieurs points.&lt;br /&gt;&lt;div face="georgia" style="text-align: justify;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3018/2587499729_5544850f3f.jpg?v=0"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 360px; height: 270px;" src="http://farm4.static.flickr.com/3018/2587499729_5544850f3f.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;SCADE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fr.wikipedia.org/wiki/Lustre_%28langage%29"&gt;SCADE&lt;/a&gt; est un environnement de développement propriétaire édité par &lt;a href="http://www.esterel-technologies.com/"&gt;Esterel&lt;/a&gt;, et basé sur le langage &lt;a href="http://fr.wikipedia.org/wiki/Lustre_%28langage%29"&gt;Lustre&lt;/a&gt;. Il cible principalement les applications dites "critiques", dans des domaines divers comme le ferroviaire, le nucléaire, le spatial... et bien sûr l'aéronautique.&lt;br /&gt;Ce que les gens du milieu appellent un peu pompeusement de la "spécification formelle", j'aurais tendance à l'appeler du "codage graphique" (pour un certain nombre de raisons, les ingénieurs systèmes apprécient peu le terme "code"...). En effet il s'agit ici non pas de coder avec des fichiers textes, mais directement avec une représentation graphique (c'est cette représentation, qui se veut le pendant visuel de la &lt;a href="http://fr.wikipedia.org/wiki/Sp%C3%A9cification_%28informatique%29"&gt;spécification&lt;/a&gt; textuelle, que d'aucun nomme la "spécification formelle"). Par la suite, cette représentation graphique est convertie en langage Lustre (langage de programmation textuel, "classique"), celui-ci étant à son tour interprété afin de générer le code C (ou Ada, au choix) qui sera finalement executé sur cible.&lt;br /&gt;&lt;br /&gt;Alors en pratique, à quoi ça ressemble ? Pour des raisons évidentes de confidentialité, je n'ai pas d'images de mon projet sous la main, mais en gros c'est un espèce d'hybride entre des représentations de &lt;a href="http://fr.wikipedia.org/wiki/Fonction_logique"&gt;fonctions logiques&lt;/a&gt; (notation américaine), de machines à état, et de certains schémas UML. Un exemple de chez Esterel &lt;a href="http://www.esterel-technologies.com/styles/img/products/Editor-large.jpg"&gt;ici&lt;/a&gt; (machine à état en haut,"workflow" en bas).&lt;br /&gt;&lt;br /&gt;N'ayant jamais utilisé ce type d'outil avant, j'avoue que l'adaptation se fait assez rapidement, même si certains aspects restent déroutants (la représentation des machines à états est à mon avis assez peu intuitive par exemple), et si certains côtés sont un peu frustrants (gestion des types...).&lt;br /&gt;Par contre, clairement l'outil possède des avantages sur du codage manuel normal :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tout l'aspect concurrent et synchrone est épargné au développeur, évitant de nombreuses erreurs&lt;/li&gt;&lt;li&gt;Abstraction également de la gestion de la mémoire (ce qui n'est bien sûr pas le cas en C ou en Ada - de longues heures de debug gagnées...)&lt;/li&gt;&lt;li&gt;Représentation du code sous une forme lisible par quelqu'un ne sachant pas coder (un &lt;a href="http://fr.wikipedia.org/wiki/Ing%C3%A9nierie_des_syst%C3%A8mes"&gt;ingénieur système&lt;/a&gt; par exemple)&lt;/li&gt;&lt;li&gt;Annulation du besoin de vérification manuelle sur de nombreux points (revue du code généré notamment)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;DO-178B&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C'est mon second projet dans ce que les commerciaux aiment appeler "un contexte de DO-178B". En pratique, la &lt;a href="http://fr.wikipedia.org/wiki/DO-178B"&gt;DO-178B&lt;/a&gt;, est une norme aéronautique pour le développement d'applications critiques (le plus souvent embarquées sur avion). C'est une norme très sévère qui imposent de nombreuses règles pour la conception et le développement logiciel. Notamment :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La gestion de configuration obligatoire&lt;/li&gt;&lt;li&gt;La traçabilité "parfaite" entre les spécification et le code&lt;/li&gt;&lt;li&gt;Les différents aspects de la validation et vérification (revue de code, indépendance entre le codeur et le testeur, couverture des tests...)&lt;/li&gt;&lt;/ul&gt;Bizarrement, on s'habitue... Quand j'ai découvert cette norme, j'ai plus eu l'impression de la subir que d'en profiter, mais là, ayant participé à la mise en place du process de validation (l'ensemble des règles et documents pour les tests, entre autres), je dois avouer que travailler dans un cadre très strict a ses avantages. De bonnes pratiques sont obligatoires au niveau de la traçabilité par exemple : "Quel bout de code correspond à une spec donnée ?". Ou encore : "Jusqu'à quel point dois-je tester mes fonctions ?", etc...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Au niveau dev...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C'est la première fois que je me retrouvais seul, en milieu pro, à prendre en charge le développement complet d'un soft. C'est un peu flippant au début, surtout quand on a été habitué à avoir des gars très bons techniquement à côté de soi, mais c'est aussi extrêmement enrichissant.&lt;br /&gt;En particulier, le fait de devoir faire soi-même des choix au niveau de l'architecture du logiciel, des conventions techniques, du design, etc... c'est l'une des parties les plus intéressantes du développement (l'implémentation est sympa aussi, hein !).&lt;br /&gt;&lt;br /&gt;Sans trop rentrer dans les détails techniques (qui seraient de toute façon une redite de pas mal de principes de base de conception logicielle), voici ce que j'en ai retenu :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Les spécifications, quand elles sont écrites par quelqu'un d'autre qu'un codeur, sont forcément en décalage par rapport aux réels besoins, et par rapport à leur mise en oeuvre. Ce qui veut dire que celui qui code doit participer, et influencer au maximum cette phase de spécification. En gros : &lt;span style="font-weight: bold;"&gt;participer à cette expression des besoins plutôt que la subir ensuite&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; Avant même de réfléchir à la façon d'implémenter les fonctions demandées, &lt;span style="font-weight: bold;"&gt;identifier les problèmes à venir, d'un point de vue software&lt;/span&gt; (pas d'un point de vue système, ou métier), qui se posent et proposer une solution. Par exemple dans mon cas : grand nombre de variables en entrée et en sortie =&gt; création de façades ; uniquement des variables booléennes =&gt; créations de types structurés utilisés dans les interfaces de chaque fonction ; besoin temporaire de certains modes de fonctionnement =&gt; &lt;a href="http://fr.wikipedia.org/wiki/Strategie_%28patron_de_conception%29"&gt;design pattern Strategy&lt;/a&gt; (non, il n'y a pas de POO dans SCADE, pour autant ça reste applicable) et séggrégation des fonctions par mode ; etc...&lt;/li&gt;&lt;li&gt;Essayer de piquer les &lt;span style="font-weight: bold;"&gt;bonnes pratiques des langages modernes et/ou fonctionnels&lt;/span&gt; : pas de variables globales, éviter tant que possible les effets de bord, composer ses fonctions, etc...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Le typage, c'est la vie&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Communiquer au maximum&lt;/span&gt; : "Mon code est dans tel état là, maintenant.", "Telle partie sera disponible le tant.", "On va avoir des problèmes à tel niveau sur telle spec.", "Je suis en retard par rapport au planning à cause de tel problème.", etc... et de façon systématique et quotidienne. Cela permet d'éviter bien des mauvaises surprises.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Séparer ce qui change de ce qui ne change pas&lt;/span&gt; (formulation honteusement pompé à &lt;a href="http://www.jroller.com/rolsen/"&gt;Russ Olsen&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Et &lt;span style="font-weight: bold;"&gt;les classiques&lt;/span&gt; : &lt;a href="http://fr.wikipedia.org/wiki/Keep_it_Simple,_Stupid"&gt;KISS&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Don%27t_Repeat_Yourself"&gt;DRY&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/a&gt;, etc...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;span style="font-weight: bold;"&gt;credits :&lt;/span&gt; photo de nacelle par &lt;a href="http://www.flickr.com/photos/ericejohnson/2587499729/"&gt;Eric E Johnson&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1678650120181093699?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1678650120181093699/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1678650120181093699' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1678650120181093699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1678650120181093699'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/07/fin-de-projet-scade.html' title='Fin de projet SCADE'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7469210850744634354</id><published>2009-06-23T23:00:00.004+02:00</published><updated>2009-06-23T23:21:59.815+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Les promesses de la programmation fonctionnelle</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Disclaimer :&lt;/span&gt; &lt;span style="font-style: italic;"&gt;Je me permets un post cours et un peu dans l'urgence pour vous proposer un document qui risque de ne pas être éternellement disponible librement... Si le lien ci-dessous ne vous permet pas d'accéder à la version PDF (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0609/rW_CS_FunctionalProgramming.pdf"&gt;ici&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) de cet article, c'est qu'il est trop tard... Désolé.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Juste un petit message pour signaler la publication récente d'un article (scientifique) qui me semble intéressant, à propos de programmation fonctionnelle :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www2.computer.org/portal/web/computingnow/0609/whatsnew/cise"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a style="font-weight: bold;" href="http://www2.computer.org/portal/web/computingnow/0609/whatsnew/cise"&gt;The Promises of Functional Programming&lt;/a&gt;,&lt;br /&gt;de Konrad Hinsen (&lt;span style="font-style: italic;"&gt;CNRS Orléans&lt;/span&gt;)&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;L'auteur axe sa réflexion autour des qualités de ce type de langages, s'attardant sur la famille "LISP - Clojure" (dans laquelle il inclut implicitement Erlang, pour ceux qui se demanderaient où le placer...) et "ML" ; à savoir robustesse et compacité du code et surtout facilité de parallélisation, un aspect aujourd'hui crucial en calcul scientifique (domaine de l'auteur).&lt;br /&gt;&lt;br /&gt;J'espère reparler rapidement ici de programmation fonctionnelle, mais sous un angle un peu particulier, puisque je ne pratique aucun langage fonctionnel à proprement parler...&lt;br /&gt;&lt;br /&gt;Bonne lecture !&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7469210850744634354?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7469210850744634354/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7469210850744634354' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7469210850744634354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7469210850744634354'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/06/les-promesses-de-la-programmation.html' title='Les promesses de la programmation fonctionnelle'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-9033201882892668194</id><published>2009-04-01T11:21:00.006+02:00</published><updated>2009-04-01T12:11:11.219+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Algorithme naïf de cryptage d'entrée</title><content type='html'>Je vous propose aujourd'hui un petit algorithme dans le domaine de la &lt;a href="http://fr.wikipedia.org/wiki/Cryptographie"&gt;cryptographie&lt;/a&gt;, implémenté en Ruby. Comme vous allez le voir, il s'agit d'un algorithme à clef secrète générée aléatoirement au moment du chiffrement. Cette méthode est assez peu intéressante pour la plupart des applications de cryptage (transfert de message notamment) de par le fait que la clef doit être transmise afin que le destinataire puisse décrypter le message. Dans ce cadre, on utilise plus volontiers la cryptographie asymétrique (RSA, etc...), ou, pour des raisons de performances, une méthode symétrique dont la clef est cryptée de façon asymétrique.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;En revanche, cet algorithme me semble utilisable pour un autre genre d'applications : de façon locale, afin de crypter une réception de donnée par exemple.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Contexte&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Plusieurs hypothèses tout d'abord. La donnée à recevoir peut être accédée par morceaux (bits, lettres, chiffres, lignes, pages, etc...). On ne connait pas à priori sa taille. On suppose également que l'on peut pareillement accéder à un nombre important de données similaires.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nJatC71XBiI/SdM3W7meAZI/AAAAAAAAAZY/bM49PmHm_Zo/s1600-h/asian_clones.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 356px; height: 238px;" src="http://3.bp.blogspot.com/_nJatC71XBiI/SdM3W7meAZI/AAAAAAAAAZY/bM49PmHm_Zo/s200/asian_clones.jpg" alt="" id="BLOGGER_PHOTO_ID_5319656451950379410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Principe : Se fondre dans la masse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le coeur de la méthode consiste à noyer l'information que l'on souhaite recevoir (notée A dans la suite, &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;data&lt;/span&gt; dans le code) la recevant par morceaux, au milieu d'une foule d'autres informations similaires, de façon aléatoire.&lt;br /&gt;Pour cela, on construit des "cycles" de taille aléatoire, dont seuls certains index (aléatoires eux-aussi) contiennent des parts de données intéressantes. La clé consiste en la liste des cycles utilisées (plus simplement, la liste des couples [occurences de part de A, taille du cycle]).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Le code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dans mon implémentation en Ruby, j'applique l'algorithme à un tableau. L'input &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;dummies&lt;/span&gt; correspond donc à une liste de données. La sortie est la paire [données cryptée, clé]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cryptage :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/433626.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A noter que je clone l'entrée data afin que la méthode soit non destructive sur celle-ci.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Décryptage :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/433628.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;On décrypte par morceau correspondant chacun à un cycle de la clef.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemple :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour tester cette méthode :&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/433629.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ce qui donne un résultat du genre (pour rappel, la clef est profondément aléatoire...) de &lt;a href="http://pastie.org/433630"&gt;celui-ci&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Encore une fois, il s'agit d'une méthode naïve, à utilité limitée (je suis un grand débutant en crypto). Cependant, pour un usage local, elle me semble adaptée, bien que probablement peu performante en terme de vitesse (celle-ci étant conditionnée par l'ampleur des cycles et le nombre d'occurrences par cycle, ici en dur).&lt;br /&gt;J'ai du mal à me figurer de grosses failles dans cet algorithme, si ce n'est pour ce qui est de l'utilisation de la randomisation : 1/ sa complexité étant dans l'absolue aléatoire, elle ne peut être calculée que par majoration dans le meilleur des cas (le meilleur des cas en crypto étant en fait le pire des cas en algorithmique), 2/ des failles existent sur des implémentations standards des méthodes &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;random&lt;/span&gt; (présence de cycles, etc... Des méthodes plus abouties existent cependant, notamment celles utilisant des propriétés physiques du matériel informatique, comme la température par exemple).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Notes : &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;1/ Crédit photo : &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.janchipchase.com"&gt;Jan Chipcase&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;2/ Ceci n'est pas un poisson d'Avril. J'aime pas cette tradition de clampes.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-9033201882892668194?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/9033201882892668194/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=9033201882892668194' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/9033201882892668194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/9033201882892668194'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/04/algorithme-naif-de-cryptage-dentree.html' title='Algorithme naïf de cryptage d&apos;entrée'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nJatC71XBiI/SdM3W7meAZI/AAAAAAAAAZY/bM49PmHm_Zo/s72-c/asian_clones.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7162993191740276158</id><published>2009-03-27T11:55:00.008+01:00</published><updated>2009-03-27T15:35:21.271+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><category scheme='http://www.blogger.com/atom/ns#' term='base'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Comment utiliser Twitter ?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nJatC71XBiI/ScyxHweYhRI/AAAAAAAAAZQ/BegHYU0928U/s1600-h/twitter.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://2.bp.blogspot.com/_nJatC71XBiI/ScyxHweYhRI/AAAAAAAAAZQ/BegHYU0928U/s200/twitter.png" alt="" id="BLOGGER_PHOTO_ID_5317820006847251730" border="0" /&gt;&lt;/a&gt;Vu l'énorme buzz du moment sur le service web &lt;a style="font-weight: bold;" href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, et les questions que j'entends fréquemment sur celui-ci, il me parait utile d'expliquer le plus simplement possible ce qu'est Twitter, et comment l'utiliser.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Qu'est-ce que Twitter ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le terme "Twitter" désigne plusieurs choses : un service web, le site web correspondant et la start-up (entreprise) le gérant/possédant. Je reviendrai sur la différence site / service web un peu plus loin.&lt;br /&gt;&lt;br /&gt;Twitter permet de publier des "tweets" (gazouillis en Anglais. Twitter veut donc dire "gazouilleur", d'où les images de piafs du site). Ceux-ci correspondent à des "textes" de 140 caractères maximum, pouvant comporter des liens. Dans une certaine mesure, cela ressemble au "statut" sur FaceBook ("What are you doing ?" - la nouvelle interface de FaceBook s'inspire d'ailleurs de celle de Twitter), ou à l'"état" en messagerie instantané. Un exemple typique en Français (par&lt;a href="http://twitter.com/genma"&gt; Genma&lt;/a&gt; - vous noterez l'humour, en cette période d'HADOPI...) :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;"Une mère insensée" de Christine Albanel (Auteur) en vente, sur Amazon : http://tinyurl.com/cvjvpo De la bonne lecture, en livre de chevet ?&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Mais comme on dit, "Dans l'espace, personne ne vous entendra crier". Twitter permet donc de "suivre" d'autres utilisateurs et donc d'être suivis par d'autres utilisateurs. Basiquement, cela signifie que vous verrez leurs tweets (ou mise à jour) et inversement, par ordre chronologique.&lt;br /&gt;Il y a de nombreuses fonctionnalités associées au suivi : blocage d'utilisateurs intempestifs, tweets privés, tweets adressés à une ou plusieurs utilisateurs en particulier, etc... J'y reviendrai plus tard. Twitter permet également dadresser des messages privés directement à un utilisateur (direct message) : pour cela, celui-ci doit déjà vous suivre, ceci afin d'éviter le spam.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Twitter est donc un outil de réseau social plutôt qu'un réseau social au sens strict (comme FaceBook ou LinkedIn). Personnellement, je le vois comme un nouveau mode de communication.&lt;br /&gt;La différence entre site web et service web réside dans le fait que ceux-ci sont découplés. Plus simplement : rien ne vous oblige à utiliser le site web de Twitter pour tweeter, afficher vos tweets et/ou suivre d'autres personnes. Il existe en effet de nombreux moyens d'utiliser ce service : pléthore de logiciels tiers, plugins pour navigateurs, widgets et autres services web. Twitter en propose une liste non exhaustive &lt;a href="http://twitter.com/downloads"&gt;ici&lt;/a&gt;. Dans la colonne de droite de ce blog, vous pouvez par exemple lire mes derniers tweets. Il est également possible de tweeter par SMS via son téléphone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A quoi sert Twitter ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Difficile d'être objectif sur ce point, tant les critiques du service peuvent être dythirambiques ou assassines.&lt;br /&gt;Twitter est un outil de communication avant tout. Ce qui est intéressant, c'est qu'il peut être utilisé de nombreuses façons, pour des objectifs divers.&lt;br /&gt;L'une des principales attaques contre Twitter consiste à dire que : "Dire ce que l'on est en train de faire est à la fois narcissique, impudique et contre-productif." (je résume volontairement).&lt;br /&gt;Pour autant, je vous propose dans la suite quelques "modes" d'utilisation de Twitter qui tentent démontrer le contraire, après avoir décrit les quelques "normes d'utilisations".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Comment tweeter ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Voici quelques normes courantes d'utilisation de Twitter :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RT&lt;/span&gt; signifie "ReTweet" : lorsque l'on lit un tweet intéressant et que l'on souhaite lui faire écho, il suffit de le copier et de le tweeter à son tour. Pour cela, on utilise cette syntaxe, avec "source" l'utilisateur du tweet de départ :&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;RT @source Un tweet très intéressant, sans doute avec un lien. &lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;@user&lt;/span&gt; : dans un tweet, mettre @ devant le nom d'un utilisateur, sans espace, permet de mettre automatiquement un lien vers son profil. En particulier, lorsque l'on adresse un tweet à une personne , (pour répondre à son dernier tweet par exemple) le tweet doit commencer par ceci. Exemple :&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;@toto197 Moi aussi j'ai adoré ce bouquin, même si la fin est un peu abrupte.&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;#keyword&lt;/span&gt; : lorsque l'on souhaite que son tweet soit référencé dans certains moteurs de recherche et/ou puisse être classifié automatiquement dans une catégorie donnée par d'autres services, sites ou logiciels, on utilise le signe # devant le mot-clé employé, sans espace. Par exemple :&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Tous à la manif contre #hadopi !&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;OH&lt;/span&gt; pour OverHead : moins fréquent, cela signifie que vous tweeter quelque chose que vous avez entendu. Exemple :&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;OH Ingenicono va licencier 1 milliard de consultants.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Comment utiliser Twitter : quelques "modes" d'utilisation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Liste non exhaustive, mais illustrant, à mon sens, les possibilités offertes par ce service, avec quelques outils, et exemples de tweets (à titre purement informatif, et non contractuels).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Microblogging : ma vie, mon œuvre, mon cµl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Grand classique du &lt;a href="http://fr.wikipedia.org/wiki/Microblog"&gt;microblogging&lt;/a&gt; que l'on méprise tous (et qu'on est pourtant si nombreux à pratiquer...), il s'agit &lt;span style="font-style: italic;"&gt;stricto sensu&lt;/span&gt; de tweeter ce que l'on est en train de faire, ou d'une manière plus large, ce qui nous arrive IRL (dans la "vraie" vie quoi...). Bien qu'assez inintéressant, il y a des cas, ou celà permet de rester en contact (d'une certaine façon, à chacun de juger) avec sa famille et ses amis. Aussi, on peut utiliser Twitter comme un IRC/MSN moins invasif.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Les bons outils pour cela sont (a priori : je pratique assez peu ce "mode") un bon petit &lt;a href="http://www.firefoxfacts.com/2009/02/20/twitbin-best-twitterer-for-firefox/"&gt;pluggin&lt;/a&gt; pour son navigateur, histoire d'éviter de passer par le site, voire &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt;, et &lt;a href="http://tinypic.com/"&gt;tinypic&lt;/a&gt; pour partager ses photos (photos de sa vie, son oeuvre, etc...), et un bon forfait de SMS... A la limite, un logiciel tiers avec notifications (genre &lt;a href="http://www.tweetdeck.com/beta/"&gt;TweetDeck&lt;/a&gt;) pour une utilisation type instant messaging avec beaucoup de followers/followings. Passer en mode privé (c'est à dire n'autoriser que certainss followers) est une option s'il s'agit uniquement de rester en contact avec des proches IRL.&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Arrive à l'aéroport.&lt;/li&gt;&lt;li&gt;Bah, le café est pas bon !&lt;/li&gt;&lt;li&gt;Vais faire caca LOL&lt;/li&gt;&lt;li&gt;@sabrinette256 kikoo twa !&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Microblogging : partage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Déjà plus intéressant, on peut utiliser Twitter comme un flux de partage et/ou tumblelog (comme &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt; par exemple) ; c'est à dire pour partager ses liens web : lectures, images, vidéos, etc... ou ses propres oeuvres.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Peu de besoins finalement pour ce mode là : &lt;a href="http://tinyurl.com/"&gt;tinyurl&lt;/a&gt; pour raccourcir ses liens, &lt;a href="http://tinypic.com/"&gt;tinypic&lt;/a&gt; pour loader ses images et vidéos et pourquoi un script du type "Tweet This", tweetant automatiquement la page courante de votre navigateur.&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New blog :  http://lesageducontinent.wordpress.com/&lt;/li&gt;&lt;li&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Amazing real pixel art : &lt;a href="http://www.flickr.com/photos/12997020@N00/3205996243/" rel="nofollow" target="_blank"&gt;http://www.flickr.com/photo...&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Cranial view: &lt;a href="http://bp3.blogger.com/_0OXYBDjaqVw/R_xAvwCWgaI/AAAAAAAADl0/Mt_gmiet4x4/s1600-h/skull310.jpg" rel="nofollow" target="_blank"&gt;http://bp3.blogger.com/_0OX...&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Coworker&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Application professionnelle : avoir un état de l'activité de ses collègues de travail. Ne riez pas, dans certains domaines, je pense que celà peut être extrêmement utile, et contrairement à ce qu'on pourrait croire, un gain de productivité. Effectivement, il est parfois vital de savoir sur quelle tâche sont vos collègues. Par ailleurs, je pense qu'on peut facilement imaginer un script parsant automatisant les tweets, et créant une ébauche de relevé d'activité (j'en reparlerai sans doute dans un prochain post).&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Mode privé surtout (le monde n'a pas besoin de savoir, et dans ce contexte, il est contreproductif de suivre quelqu'un d'autre que vos collègues). Eventuellement un notifier discret ?&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bug n°256 corrigé&lt;/li&gt;&lt;li&gt;J'attaque la spec IHM-93&lt;/li&gt;&lt;li&gt;En réunion client jusqu'à 16H&lt;/li&gt;&lt;li&gt;@jdupont il y a un soucis dans la 3° partie de ton rapport&lt;/li&gt;&lt;li&gt;Je pars voir l'expert dans 30 min. Pas de question sur le nouveau process ?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Commerce 2.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Pas mal d'entreprises commencent à utiliser Twitter pour diffuser des infos, faire des annonces, et même avoir un retour sur leur dernier "produit" ou encore lancer des micro-sondages.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Les entreprises peuvent assez facilement développer/se payer des scripts ou autres bots tweetant automatiquement leurs infos. &lt;a href="http://wefollow.com/"&gt;WeFollow&lt;/a&gt; par exemple, leur permet de se référencer facilement et d'augmenter leur visibilité. Cependant, il est nécessaire que celles-ci comprennent que Twitter n'est pas un média à sens unique, comme peut l'être la  télévision par exemple : l'outil perd de son intérêt s'il est uniquement employé pour diffuser, et qu'aucun retour n'est pris en compte.&lt;br /&gt;Par exemple, l'un des développeurs du logiciel &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt; utilise régulièrement Twitter pour demander leur avis à ses followers sur les fonctionnalités qu'ils désirent dans le logiciel, comment celles-ci doivent se présenter / s'utiliser, etc... Il a ainsi un retour direct et synthétique (140 caractères...) d'un nombre important d'utilisateurs.&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Promo au magasin à partir de demain sur les chaussures rouges !&lt;/li&gt;&lt;li&gt;Notre nouveau modèle de netbook 2 Go sortira finalement courant Avril&lt;/li&gt;&lt;li&gt;Participez au concours d'IndusBidule : http://indusbidule.fr/concours/toto&lt;/li&gt;&lt;li&gt;Notre équipe IT cherche un nouveau responsable media : http://recruttruc/offre/244&lt;/li&gt;&lt;li&gt;Hausse de notre action de 7.8% : http://www.tousdanslesbourses.com/blague&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Event Media&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Twitter est un très bon outil pour les professionnels de l'évènementiel. Il permet rapidement d'informer de son dernier évènement : concert, festival, exposition, conférence, etc...&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Ici encore pour le professionnel, les scripts et un bon référencement sont les bienvenus. Rien de particulier, si ce n'est que des liens restent nécessaires pour détaillé le tweet.&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Concert de Lyne la Coquine le 4 à Limoges au Grand Vase : http://llc-music.fr/concerts&lt;/li&gt;&lt;li&gt;Plus que quelques places pour l'opéra de Whessenfyerstrauss à Marseille le 12 Juin : http://...&lt;/li&gt;&lt;li&gt;Finalement, le jeune talent Elvis Presley n'assurera pas ces dates en France à partir du 1er Avril. Pour tout remboursement, contactez http://...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;News&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Les grands acteurs du monde de l'information se mettent à Twitter : CNN, BBC, The Guardian Tech, etc... En général, ils proposent des brèves, et des liens vers les articles de leurs sites respectifs. Personnellement, je ne trouve pas encore un intérêt majeur à ce mode là : il réinvente le flux RSS en moins pratique, sans apporter énormément de plus value.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Pour le follower, un logiciel tiers du type de &lt;a href="http://www.tweetdeck.com/beta/"&gt;TweetDeck&lt;/a&gt;, permettant de trier les tweets, semble approprié s'il suit plusieurs de ces sources : en effet, le nombre de tweets peut être important, et éventuellement noyer ses autres contacts.&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Text message system revolutionises medical care in Malawi &lt;a href="http://bit.ly/KVw9" rel="nofollow" target="_blank"&gt;http://bit.ly/KVw9&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Tesla unveils electric 'family car of the future' &lt;a href="http://bit.ly/OWmQa" rel="nofollow" target="_blank"&gt;http://bit.ly/OWmQa&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;Google cuts 200 global sales and marketing jobs &lt;a href="http://bit.ly/D1cHf" rel="nofollow" target="_blank"&gt;http://bit.ly/D1cHf&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lazy Web&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Ce que j'appelle le "&lt;span style="font-style: italic;"&gt;Lazy Web&lt;/span&gt;" (litéralement "Web paresseux") est la méthode consistant à demander une information aux autres, sur le web, plutôt que de la rechercher comme un grand garçon (ou une grande fille, ou un grand robot que s'il est sage il pourra jouer à pong). Autant je déteste passablement les gens en abusant sur les forums ("Hé, comment on fé pour désinstaller un logicielle sous L1nux ?" - il faut toujours qu'il y ait une bonne âme (aussi appelée un pigeon) pour répondre à ce genre de topic honteux), autant je dois reconnaître que sur Twitter, c'est un peu différent. D'abord parce que le tweet en question va polluer beaucoup moins longtemps la liste de vos followers que sur un forum ou autre. Ensuite parce que d'une certaine façon, vous vous adressez généralement à moins de personnes. Ensuite, parce que si c'est fait intelligemment, ça peut être efficace.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Pas d'outils particuliers pour cette utilisation. A noter que contrairement aux modes précédents, il ne saurait ici s'agir d'un mode d'utilisation de Twitter à part entière  : qui vous suivra si vous ne faites que poser des questions ? Attention à ne pas en abuser donc...&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Je me tate entre l'achat d'un eeePC et d'un Aspire One : des avis ?&lt;/li&gt;&lt;li&gt;Quelle galère pour compiler tel logiciel sous Window$ : c'est normal, ou il faut carrément que je le compile sous Nix en croisé ?&lt;/li&gt;&lt;li&gt;Question au peuple : Gmail est mort aussi chez vous ?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Buzz Surfer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What ?&lt;br /&gt;&lt;br /&gt;Twitter permet de s'informer des préoccupations des gens l'utilisant, quasiment en temps réel. Pour ceux qui sont accros à la nouveauté, au buzz (comme on dit chez les djeunz) et pour les beta-testeurs et early-adopters de tout poil, c'est une aubaine car certains outils sont vraiment efficaces pour ce faire.&lt;br /&gt;&lt;br /&gt;How ?&lt;br /&gt;&lt;br /&gt;Principalement ici : l'outil de recherche de Twitter, &lt;a href="http://search.twitter.com/"&gt;TwitterSearch&lt;/a&gt;. Celui-ci permet d'afficher en temps réel les tweets contenant un mot-clef. Il informe également des sujets du moment. Grâce à l'&lt;a href="http://apiwiki.twitter.com/"&gt;API &lt;/a&gt;très ouverte de Twitter, on voit également apparaître des outils communautaires très intéressantes, comme &lt;a href="http://hadopi.infobrulante.com/"&gt;API's VS Hadopi&lt;/a&gt;.&lt;br /&gt;C'est dans ce genre d'utilisation que les mots-clés (avec # devant) et les retweets prennent tous leur sens : référencement, phénomène d'écho, etc...&lt;br /&gt;&lt;br /&gt;Like ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cuil is really a good... nah, just kidding...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Autres...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bien d'autres utilisations sont possibles : communauté, jeux (on en reparlera), spam, bots, etc...&lt;br /&gt;&lt;br /&gt;A chacun d'utiliser le service comme il l'entend, mais toujours avec moins de 140 caractères.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;--------&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Les commentaires sont ouverts pour toute question.&lt;br /&gt;Je reparlerai très certainement de Twitter dans de prochains posts.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7162993191740276158?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7162993191740276158/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7162993191740276158' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7162993191740276158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7162993191740276158'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/03/comment-utiliser-twitter.html' title='Comment utiliser Twitter ?'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nJatC71XBiI/ScyxHweYhRI/AAAAAAAAAZQ/BegHYU0928U/s72-c/twitter.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1632658023139873767</id><published>2009-03-16T13:26:00.003+01:00</published><updated>2009-03-16T13:51:30.549+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Animal Quiz en Ruby</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nJatC71XBiI/Sb5GINCZnOI/AAAAAAAAAZI/F7GPY8bsrRE/s1600-h/meduse.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 75px; height: 75px;" src="http://2.bp.blogspot.com/_nJatC71XBiI/Sb5GINCZnOI/AAAAAAAAAZI/F7GPY8bsrRE/s200/meduse.jpg" alt="" id="BLOGGER_PHOTO_ID_5313761717096389858" border="0" /&gt;&lt;/a&gt;Allez, comme ça fait un moment que je n'ai pas posté de code, je vous propose un petit jeu rigolo : le quiz des animaux, implémenté en Ruby.&lt;br /&gt;Il s'agit d'un petit algorithme tentant de deviner à quel animal vous pensez : pour ce faire, le programme vous pose un certain nombre de questions, puis vous propose un animal. Si celui-ci est l'animal auquel vous pensiez, le programme gagne. Sinon, il vous demande d'ajouter une question (ayant pour réponse oui ou non) permettant de différencier l'animal proposé et le votre, et l'ajoute dans sa base de question.&lt;br /&gt;La structure employée est un arbre binaire dont les branches sont les questions et les feuilles les animaux. Celle-ci est enregistrée dans un fichier YAML dans mon code en fin de partie.&lt;br /&gt;&lt;br /&gt;Le code étant un peu long, et en plusieurs fichiers, au lieu de le coller ici, je vous propose d'aller le consulter/télécharger chez pastie (un fichier d'exemple en YAML inclus) :&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://pastie.org/417586"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Le Code&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Vous noterez la méthode &lt;span style="font-family: courier new; color: rgb(0, 0, 102);"&gt;list_animals&lt;/span&gt; de la classe Game, non employée dans mon code, mais permettant d'inspecter le contenu de l'arbre de données (Combien d'animaux ? Plusieurs occurrences d'une même espèce ? Etc...). Le principal défaut de cette approche est que l'ordre des questions influe énormément sur la structure. Par ailleurs, il est parfois difficile de différencier deux animaux avec une question "oui/non" non ambiguë (dans l'appli web du "Génie" ci-dessous, il y a la possibilité de ne pas se prononcer...) : un tigre mange-t-il des souris ?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pour ce code, je me suis basé sur les règles fixées par le défi &lt;a href="http://rubyquiz.com/quiz15.html"&gt;Ruby Quiz n°15&lt;/a&gt;. L'implémentation qu'ils proposent est d'ailleurs bien plus concise que la mienne... A lire pour plus de détails.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Liens&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Arbre_binaire"&gt;Arbre binaire&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rubyquiz.com/quiz15.html"&gt;Ruby Quiz n°15&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.akinator.com/aki_fr/"&gt;Akinator, le génie du web&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Crédit photo :&lt;/span&gt; &lt;a href="http://www.flickr.com/photos/l-ines/"&gt;L-ines&lt;/a&gt;, sous CC. &lt;a href="http://www.flickr.com/photos/56425134@N00/172877564"&gt;Lien&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1632658023139873767?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1632658023139873767/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1632658023139873767' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1632658023139873767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1632658023139873767'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/03/animal-quiz-en-ruby.html' title='Animal Quiz en Ruby'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nJatC71XBiI/Sb5GINCZnOI/AAAAAAAAAZI/F7GPY8bsrRE/s72-c/meduse.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8358378917818333953</id><published>2009-03-10T13:58:00.003+01:00</published><updated>2009-03-10T14:21:27.492+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='sneakers'/><title type='text'>I luv' Sneakers : Sneakerz Reddit</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nJatC71XBiI/SbZnq7kzC_I/AAAAAAAAAZA/mcnTP2iG5IM/s1600-h/superstar_monsieur.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_nJatC71XBiI/SbZnq7kzC_I/AAAAAAAAAZA/mcnTP2iG5IM/s200/superstar_monsieur.jpg" alt="" id="BLOGGER_PHOTO_ID_5311546797774277618" border="0" /&gt;&lt;/a&gt;C'est pas vraiment un secret : je suis un gros fan de sneakers (chaussures de sports / urban shoes). Du coup, je viens de lancer un petit subreddit sur ce thème : &lt;a href="http://www.reddit.com/r/Sneakerz/"&gt;Sneakerz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;N'hésitez pas à aller jeter un coup d'œil ou à proposer vos liens si vous aussi vous pensez qu'une paire de Superstar est plus classe qu'un costard Hugo Boos.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8358378917818333953?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8358378917818333953/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8358378917818333953' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8358378917818333953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8358378917818333953'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/03/i-luv-sneakers-sneakerz-reddit.html' title='I luv&apos; Sneakers : Sneakerz Reddit'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nJatC71XBiI/SbZnq7kzC_I/AAAAAAAAAZA/mcnTP2iG5IM/s72-c/superstar_monsieur.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-945436889018900491</id><published>2009-02-26T09:13:00.002+01:00</published><updated>2009-02-26T09:55:43.021+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><title type='text'>Loi Création et Internet : Black Out</title><content type='html'>&lt;div style="text-align: justify;"&gt;Je suis bien conscient que je parle rarement politique ou économie sur ce modeste blog. Je suis aussi conscient qu'il y a probablement, en ces temps de crise, moultes sujets plus importants : des 90000 nouveaux chômeurs en France en Janvier, en passant par les réformes dans l'éducation, la recherche ou les collectivités territoriales, les petits soucis dans les colonies, ou ces pauvres moines tibétains dont on ne respecte pas tellement les droits (de l'homme).&lt;br /&gt;&lt;br /&gt;Mais en bon geek occidental égocentrique que je suis, je me dois de faire un petit billet contre cette espèce de bouse malsaine que d'aucuns nomment la &lt;a href="http://fr.wikipedia.org/wiki/Loi_Cr%C3%A9ation_et_Internet"&gt;&lt;span style="font-weight: bold;"&gt;Loi Création et Internet&lt;/span&gt;&lt;/a&gt; (dite &lt;span style="font-weight: bold;"&gt;loi HADOPI&lt;/span&gt;). Je ne refais pas ici le topo sur cette loi en cours d'adoption que bien d'autres auront bien mieux expliquée (cf les liens ci-dessous - pour résumer : liberticide, techniquement stupide et fondamentalement inefficace).&lt;br /&gt;&lt;br /&gt;Simplement, en bon mouton engagé, je participe d'une part au black out, qui consiste à peindre son site personnel en noir (vous remarquerez que de par mes compétences et mon amour assez relatifs pour le CSS, seule ma bande latérale se retrouve partiellement noircie). D'autre part, je viens de signer à l'instant &lt;a href="http://www.svmlemag.fr/petition_riposte_graduee"&gt;la pétition lancé par le magazine informatique SVM&lt;/a&gt; (qui rappelons-le, ne sont pas d'affreux gauchistes aux relents bolchéviques, le couteau entre les dents, etc... NI -et ça aussi c'est important- des geek boutonneux de libristes utopistes qui font pleins de trucs illégaux et gratuits avec leurs ordinateurs, tellement qu'ils s'en servent bien.).&lt;br /&gt;&lt;br /&gt;Bref, dans quelques mois, quand vous serez sous les verrous parce que votre voisine de 12 ans a craqué la clé WEP (15 à 30 min actuellement) de votre DuconBox pour télécharger illégalement le dernier single de Laurie, vous pourrez vous aussi, vous la jouer prisonnier politique si vous prenez vos disposition maintenant. A bon entendeur, je vous laisse de la lecture :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://petaramesh.org/post/2009/02/26/Ya-un-Ternet-quest-tout-Nwar"&gt;Ya un Ternet qu'est tout noir&lt;/a&gt;, par Petaramesh.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.framablog.org/index.php/post/2009/02/25/loi-hadopi-creation-internet-scenario-isoc-france"&gt;Hadopi : le scénario catastrophe mais plausible de l'Isoc France&lt;/a&gt;, chez Framasoft (prospective à lire absolument).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.framablog.org/index.php/post/2009/02/19/loi-creation-internet-acces-libre"&gt;La loi Création et Internet, le chant du cygne et le maquis&lt;/a&gt;, chez Framasoft.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.framablog.org/index.php/post/2009/02/23/april-loi-creation-et-internet-mobilisation"&gt;Projet de loi Création et Internet : l'April s'insurge et appelle à la mobilisation&lt;/a&gt;, chez Framasoft encore.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.svmlemag.fr/petition_riposte_graduee"&gt;Pétition contre ce projet de loi&lt;/a&gt; chez SVM.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Une dernière chose : comme le prédit la prospective assez inquiétante, cette loi et les moyens qu'elle envisage ne seront pas efficace contre les geeks, les hackers et les libristes, bien qu'elle les fasse passer d'office pour des petits bandits. Que tout soit bien clair entre nous, l'Etat, en France, actuellement, n'a absolument pas les compétences en informatique (mais pas que) nécessaires pour faire appliquer cette loi (pour preuve, la récente&lt;a href="http://www.silicon.fr/fr/news/2009/02/09/le_virus_conficker_touche_la_marine_francaise_et_leurs_rafales"&gt; infection par Conficker de réseaux de l'armée&lt;/a&gt;). Et on ne fait pas voter une loi sans volonté de la faire appliquer.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-945436889018900491?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/945436889018900491/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=945436889018900491' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/945436889018900491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/945436889018900491'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/loi-creation-et-internet-black-out.html' title='Loi Création et Internet : Black Out'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7267843383271191072</id><published>2009-02-24T09:32:00.000+01:00</published><updated>2009-02-24T09:32:11.680+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='soft'/><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Diffusion du libre</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2031/1992266098_2169f4dc28.jpg?v=0"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 118px; height: 143px;" src="http://farm3.static.flickr.com/2031/1992266098_2169f4dc28.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;Je ne sais pas si c'est une fausse impression de ma part, mais j'ai l'impression que la notion de logiciel libre est plus connue et mieux comprise par le grand public qu'il y a quelques années. Bien sûr, il reste du chemin à parcourir et de la "propagande" à faire, mais il me semble qu'il y a évolution (même si "libre" reste trop souvent synonyme de "gratuit").&lt;br /&gt;Essayons de synthétiser les vecteurs de cette évolution, ou du moins, les &lt;span style="font-weight: bold;"&gt;facteurs contribuant le plus significativement à la propagation de la "culture libre"&lt;/span&gt; (au sens plus large qu'uniquement logicielle).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Vecteurs de diffusion de la "culture libre"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bon, je passe sur Internet. C'est évidemment la clef de la naissance, l'évolution et la réussite du libre, depuis le départ. D'ailleurs, &lt;span style="font-weight: bold;"&gt;Internet et le web&lt;/span&gt; sont construits principalement sur des technologies (et des principes) libres ou du moins ouvertes : HTTP(S), SSH, CGI, FTP, Javascript, PHP, etc... (certes, il y a aussi le Flash...).&lt;br /&gt;&lt;br /&gt;La &lt;a href="http://www.mozilla.org/foundation/"&gt;&lt;span style="font-weight: bold;"&gt;fondation Mozilla&lt;/span&gt;&lt;/a&gt;, via Firefox a été et reste un acteur très important de propagation du libre. Même si la fondation est assez souvent critiquée par la communauté du libre, pour des raisons aussi diverses que de validité variable, elle mérite que l'on reconnaisse le bénéfice de ses actions.&lt;br /&gt;D'abord Firefox est un bon à très bon produit, surtout comparativement à Internet Explorer. Pour autant, je ne pense pas que ce soit le logiciel libre le plus répandu auprès du grand public (les chiffres me manquent pour vérifier ça : si quelqu'un connaît une bonne source de statistiques à propos du libre, je suis preneur) : d'une part, Internet Explorer est encore majoritaire en terme de visites web, et d'autre part, on a tendance à oublier pas mal de programmes, énormément employés (en bonne partie de par leur gratuité) : VLC, eMule, Vuze (anciennement Azureus), The Gimp ou Java... La différence avec ces logiciels, est que Mozilla met largement en avant le côté libre de Firefox (et de ses autres produits), ce qui n'est pas le cas sur ces autres. C'est assez similaire sur la suite OpenOffice de Sun : le côté libre/open source est souvent souligné dans les pubs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fr.wikipedia.org/"&gt; &lt;span style="font-weight: bold;"&gt;Wikipédia&lt;/span&gt;&lt;/a&gt; a, je pense, indirectement, mais fortement, contribué à diffuser la culture libre. Le principe d'encyclopédie collaborative est bien connue du public. Le droit de réutilisation du contenu est également bien admis (bien que les conditions de rediffusion imposées par la license de documentation libre GNU (&lt;a href="http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Licence_de_documentation_libre_GNU"&gt;GFDL&lt;/a&gt;) le soient nettement moins...). Sur les principes, le logiciel libre et les règles de Wikipédia sont très proches : tout le monde peut participer/contribuer, réutiliser, diffuser, etc... C'est en bonne partie Wikipédia qui fait connaître les licences &lt;a href="http://creativecommons.org/"&gt;Creatives Commons&lt;/a&gt; via Wikimedia Commons (de plus en plus de sites les mettent en avant cependant, comme &lt;a href="http://flickr.com/"&gt;Flickr&lt;/a&gt; récemment). Ces principes étant compris pour l'encyclopédie, ils deviennent plus clairs lorsqu'ils sont expliqués pour les logiciels.&lt;br /&gt;Par ailleurs, la communauté libre utilisant Wikipédia de façon soutenue, les projets libres sont souvent mis en avant dans les articles du site (parfois de manière subjective et un peu pénible d'ailleurs : je ne pense pas qu'on ait besoin de ça...), ce qui permet une certaine forme de publicité : la pub par la doc (un logiciel (ou autre d'ailleurs) existe-t-il vraiment s'il n'a pas d'article sur Wikipédia ?).&lt;br /&gt;&lt;br /&gt;Ensuite, phénomène commercial plus récent, l'apparition des &lt;span style="font-weight: bold;"&gt;netbooks ou ultra-portables&lt;/span&gt; a contribué à faire connaître le logiciel libre et surtout Linux (pas forcément en bien cependant) à un public de néophytes (à commencer par les vendeurs informatiques eux-mêmes...). Je ne suis pas persuadé que les gens aient bien compris la notion de logiciel libre en achetant un eeePC sous Xandros, mais ils ont au moins compris la différence de prix avec Windows... c'est déjà ça (c'est l'argument principal de vente de Linux, hormis la moindre consommation mémoire par rapport à Vista ou même XP). &lt;br /&gt;Par contre, j'ai des doutes plus que prononcés sur l'efficacité de la "pub" des netbooks pour Linux. En effet, les 2 distributions majeures sur ces machines (majeures car les plus "vendues") sont Xandros (eeePC) et Linpus Linux (Acer Aspire One) : ces 2 distros sont... nazes. Bloquées, interfaces trop simplifiées, modification constructeur de packages "basiques" (sous Linpus : Firefox, Pidgin notamment...)... Bref, je les trouve extrêment mauvaises, assez loin de l'esprit de départ de Linux, et forcément décevantes pour le grand public issu de Windows XP. Il y a cependant des exception comme la Suse SLED sur le MSI Wind par exemple, ou d'autres sous Xubuntu.&lt;br /&gt;Il faut par contre noter que l'apparition de ces machines a pas mal boosté la communauté et les entreprises sur le développement, la relance, ou l'adaptation de distros adaptées : gOS, Xubuntu (mon choix sur Aspire One A150 : XFCE devrait vraiment être relancé par les netbooks), Ubuntu Netbook Remix, Joli Cloud (à venir ?), Android (pas mal de boulot a été fait pour récupérer le dev effectué pour les OS de mobiles ou PDA)... plus l'adaptation matos pour les "grandes" distributions existantes : OpenSuse, Ubuntu, Mandriva, etc...&lt;br /&gt;Je suis mal renseigné sur les BSD, mais il serait intéressant de savoir comment ces communautés ont réagi par rapport à ces nouvelles machines.&lt;br /&gt;&lt;br /&gt;Bien sûr, il serait injuste de ne pas parler ici du travail constant fait par &lt;span style="font-weight: bold;"&gt;la communauté &lt;/span&gt;dans son ensemble : développement bien sûr, mais aussi et surtout : rencontres, stands, aide, forums, install parties, propagande, pétitions, etc... C'est un boulot souvent ingrat, faut reconnaître le mérite des gars et des gyals qui font ça (bénévolement en général, rappelons-le).&lt;br /&gt;C'est aussi eux qui diffusent l'information lorsque le logiciel libre est adopté par une grande entreprise ou mieux, par une administration de l'état : c'est souvent un bon coup de pub pour le libre.&lt;br /&gt;Plus méchant, les procès contre les entreprises ne respectant pas les licences libres (en France on a eu Free notamment pour du soft intégré dans la Freebox si je me souviens bien) ou contre les monopoles (Microsoft, bien souvent... mais bientôt Google probablement) font parler du libre, et sont toujours une occasion d'expliquer les fondamentaux.&lt;br /&gt;&lt;br /&gt;Cela dit, tous ces facteurs doivent, selon moi, à terme devenir de moins en moins significatifs. Même la partie "éthique" du LL passe, à mon avis, au second plan derrière la &lt;span style="font-weight: bold;"&gt;qualité logicielle&lt;/span&gt;. Je ne parle pas ici d'une quelconque norme industrielle bancale : je parle simplement du fait que de par leur nature, les projets libres, ou open sources (sous réserve d'être suffisament "importants") doivent logiquement être d'une qualité supérieure à leurs homologues propriétaires (et à fortiori freewares). Cela peut se constater déjà sur de nombreux exemples : Firefox est probablement le meilleurs navigateur web actuellement (même si Opéra ou Chrome se défendent), la JVM est toujours probablement la meilleure machine virtuelle sur le marché (depar sa portabilité : faut se méfier de .Net sur d'autres aspects...), les langages libres sont systématiquement meilleurs que leurs homologues propriétaires (troll ?), OpenOffice arrive petit à petit au niveau d'offre de Microsoft Office, en science de nombreuses libs sous GPL ou autre dominent l'écosystème (Lapack entre autres...), Linux (troll ?), etc... Je n'ai pas parlé ici des domaines que je connais mal comme  le P2P ou la messagerie instantanée où il y aurait des choses à dire...&lt;br /&gt;C'est à mon avis sur ce point qu'il faut appuyer encore et toujours pour convaincre. Il faut croire que Microsoft a droit à l'erreur avec Vista, les migrations d'OS ayant surtout profité à Mac OS et à... Windows XP (!), mais dans le libre,  un nouvel utilisateur déçu, c'est un utilisateur perdu &lt;span style="font-style: italic;"&gt;ad vitam aeternam&lt;/span&gt;. Au boulot ! ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Notes : &lt;/span&gt;&lt;br /&gt;Je comptais initialement faire un article pour présenter quelques logiciels libres que je considère comme étant injustement méconnus du grand public (Thunderbird, Pidgin, Sage et Freemind probablement). M'étant un peu enflammer sur la diffusion du LL, j'ai pas envie de coller le reste à la fin, ça viendra dans un prochain article.&lt;br /&gt;&lt;br /&gt;Je ne prétends aucunement faire autorité sur les questions évoquées ci-dessus (même si mon "style", je m'en rends compte et m'en excuse, peut le laisser penser) : c'est plus un avis personnel, pour invitation à la réflexion et à la discussion sur ces sujets (les commentaires sont grand-ouverts).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;span style="font-weight: bold;"&gt;Crédit images, par ordre d'apparition&lt;/span&gt; : &lt;a href="http://flickr.com/photos/gabrieljuan/1992266098/"&gt;libre.taxi&lt;/a&gt; par &lt;a href="http://flickr.com/photos/gabrieljuan/"&gt;Gabriel Juan&lt;/a&gt; (utilisation commerciale interdite), &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7267843383271191072?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7267843383271191072/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7267843383271191072' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7267843383271191072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7267843383271191072'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/diffusion-du-libre.html' title='Diffusion du libre'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-2618437794155883012</id><published>2009-02-19T09:17:00.001+01:00</published><updated>2009-02-19T09:17:51.298+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='poésie'/><title type='text'>Programmation poétique - Chapitre VII : Ton langage pue du cµl n°2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Disclaimer :&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;Attention, article violent : âmes sensibles, femmes enceintes et handicapés du second degré s'abstenir.&lt;/span&gt; Malgré ses côtés provocateur, insultant et inutilement vulgaire, cet article se veut humoristique et satirique : l'auteur du présent article ne saurait donc être tenu pour responsable des symptômes suivants suite à sa lecture, même partielle (liste non-exhaustive, donnée à titre d'exemple) : nausées, vomissements, chocs anaphylactiques, chutes de phalange(s), déclenchements de diabète, crises d'épilepsie, ruptures de certitudes programmatiques, constipations, inflammations du nerf trollien, asthmes, infections du compilateur et céphalalgies.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: courier new;font-family:courier new;" &gt;~=o=~&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Je me suis fait rouler sur le pied par une voiturette sans permis, ma nouvelle voisine a l'orgasme facile, bruyant et à répétition (à 2H30 du matin en semaine), mon responsable au boulot estime que prendre des vacances au bout de seulement 12 mois de travail, "ça fait pas sérieux", mon PC s'éteint tout seul sans prévenir lorsque j'appuie sur 4 chiffres d'affilé, Facebook vient de décider qu'il posséderait mes données perso et celles de mes 3 seuls amis même après ma mort et la leur (ah tiens, non finalement ?) et un pigeon s'est laissé allé sur ma modeste Merco (neuve) en sortie de station de lavage.&lt;br /&gt;Bref je suis pas jouasse.&lt;br /&gt;Du coup, je vais cracher sur quelque chose pour me détendre : les langages de programmation par exemple. D'une part parce que j'ai mis "&lt;span style="font-style: italic;"&gt;n° 1&lt;/span&gt;" sur l'&lt;a href="http://sobe-session.blogspot.com/2009/02/programmation-poetique-chapitre-vi-ton.html"&gt;article précédent&lt;/a&gt;, donc faut bien continuer la série (sinon c'est pas une série, c'est un article tout seul : on se comprend ?) et d'autre part, pour rappeler au monde que moi aussi je sais troller comme un bon gros geek moyen (surtout qu'on cherche à m'asticoter en ce moment...).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Donc, ton langage pue du cµl...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le C pue du cµl.&lt;br /&gt;Ah le C ! Ce beau langage venu des temps lointains... Ses pointeurs, ses références, ses allocations mémoires... Si les performances ont un prix, en C, c'est celui d'un sol intégralement recouvert de peaux de bananes trempées dans l'huile d'olive sous un coulis de vaseline tiède (ça glisse quoi...).&lt;br /&gt;Ah, les instructions préprocesseur, et leur infinie élégance... Ah, le typage faible ! Ah, le paradigme procédural pur de chez pur ! (Oui, je suis au courant, c'est possible d'implémenter la POO en C. Un petit exemple dans un code en production s'il vous plait ? Merci.)&lt;br /&gt;Le plus marrant avec le C, c'est que ses bonnes performances deviennent franchement une malédiction quand on voit tous les jeunes tanchards muants qui s'y frottent. "A&lt;span style="font-style: italic;"&gt;ttends, han, ton serveur le fait pas en Python/Ruby/Perl, t'es fou, c'est vachement plus speed en C !&lt;/span&gt;". Ben voyons mon cochon : ton code sera seulement 3 à 5 fois plus long, et tu gagneras bien 5 milisecondes par requêtes (sur 1 seconde, c'est vrai que ça vaut bien le coup pour un projet amateur...), et tu mettras juste 10 fois plus de temps à le coder. Mais soit, il faut bien que jeunesse se fasse (casser les dents à coup de &lt;span style="font-style: italic;"&gt;null &lt;/span&gt;&lt;span style="font-style: italic;"&gt;pointer exception&lt;/span&gt;).&lt;br /&gt;Bon, je reconnais qu'il est difficile d'attaquer le C en tant que langage sur le côté technique. C'est un langage globalement bon, la preuve est qu'il est majoritairement utilisé dans... Attendez voir ! C'est marrant ça : dans le monde du logiciel libre, le C doit (devait ?) couvrir environ 95% du pool de code sous licence approuvée par la FSF. Genre tout GNU (sauf Emacs en LISP, hahaha. Hum...), la majorité du noyau Linux, les gestionnaires de fenêtres, les BSD, and &lt;span style="font-style: italic;"&gt;so on&lt;/span&gt;... "Pire", la majorité des compilateurs et interpréteurs des langages modernes sont implémentés (ou du moins pour la version standard) en C : gcc, gfortran, gnat (Ada95),  g++, Io, MRI (Ruby), CPython, Bigloo (Scheme) &lt;span style="font-style: italic;"&gt;and so on...&lt;/span&gt; En quoi c'est un problème ? Attendez les gars, on ne peut pas décemment cracher pendant 20 ans sur Microsoft pour sa position dominante, son monopole et blablabla et laisser une technologie, aussi bonne soit-elle rester trop majoritaire ("position dominante", souvenez-vous !) dans son propre écosystème logiciel, si ? Ben si apparemment. Cela dit, vu le temps qu'il a fallu au monde libre pour se mettre à critiquer Google et Apple, on est plus à ça prêt (c'est vrai que c'est bien plus rigolo de se br4nler la nouille des heures sur les différences entre la GPL V2 et V3...). C'est quand même pas si compliqué de recoder KDE en Erlang, m3rde !&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Le C sent le cµl dépassant son allocation mémoire (error at runtime).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le Python pue du cµl.&lt;br /&gt;Même si c'est pas vraiment de sa faute... Bon alors d'accord, on peut critiquer l'indentation obligatoire. Et c'est vrai que c'est trop laid (même si l'indentation "çay b1en"). On pourrait aussi contester le principe du "&lt;span style="font-style: italic;"&gt;One and only one way to do it&lt;/span&gt;". Et de fait, je peux vraiment pas blairer cette approche. On pourrait, trouver les notations syntaxiques vraiment moches : elles le sont. Enfin, on peut légitimement trouver que la POO est quand même pas glorieuse.&lt;br /&gt;Mais tout cela n'est que broutille face au réel problème de Python. Je parle bien sûr de sa communauté. En effet, la communauté Python possède probablement en son sein le plus grand nombre d'intégristes barbus pré-pubères (la barbe est donc un pastiche) que le monde ait jamais connu.&lt;br /&gt;L'occupation principale du pythoniste convaincu (notez que je ne généralise pas : il y a également des pythonistes pas convaincus, ainsi que des pythonistes asthéniques), plutôt que produire du code Python, est de déféquer dans la bouche des gens pratiquant d'autres langages. Leurs cibles principales sont bien sur les codeurs Perl et Ruby, mais ils s'attaquent également avec la plus grande vaillance à d'autres langages plus costauds (mais néanmoins olfactifs) tels que le C++. Certes ce comportement se retrouve dans bien des communautés de devs... Mais ça se ressent sans doute plus chez les pythoneux. Moi, de mauvaise foi ? &lt;a href="http://fr.wikipedia.org/wiki/Utilisateur:Piglop/Python_zealots"&gt;Cette page&lt;/a&gt; de Wikipédia devrait vous convaincre...&lt;br /&gt;Ces "zealots" ne s'arrêtent cependant pas à de simples attaques directes contre d'autres langages. Inspirés par la propagande faite pour leur dialecte bien aimé par leur grand frère Google ("&lt;span style="font-style: italic;"&gt;Nan, mais Python C tro bien : c'est utilisé par Google et la NASA !!!&lt;/span&gt;". Voui voui voui...), ces talibans du code source pousse le vice jusqu'à désigner Python comme LE langage implémentant un logiciel donné. Et là ça devient drôle : quelques exemples. Sur Wikipédia tout d'abord, on retrouve fréquemment des programmes "&lt;span style="font-style: italic;"&gt;implémentés &lt;/span&gt;grâce&lt;span style="font-style: italic;"&gt; au langage Python&lt;/span&gt;" (merci vieux !).  Jusque là pas de problème. Cela dit, je doute qu'&lt;a href="http://fr.wikipedia.org/wiki/Abaqus"&gt;Abaqus&lt;/a&gt; (voir historique), code de calcul en mécanique solide, soit codé intégralement en Python. La première fois que j'ai lu ça, j'avoue que j'ai bien rigolé... Dire qu'il y a des gars qui ne doutent pas une seconde qu'un code de simulation numérique "lourd" (c'est régulièrement utilisé professionnellement pour passer des calculs, sur clusters, d'une durée de 3 à 10 jours...), vieux de plusieurs décennies, puisse être entièrement en langage de script... (même s'il est vrai que leur utilisation est et sera, je l'espère, de plus en plus importante dans le domaine). Autre exemple, &lt;a href="http://blog.wired.com/monkeybites/2007/12/math-geek-softw.html"&gt;cet article chez Wired&lt;/a&gt; (magazine de geeks pourtant réputé - article un peu daté) désigne le logiciel libre de mathématiques &lt;a href="http://www.sagemath.org/index.html"&gt;Sage&lt;/a&gt; comme étant codé en Python. Ben tiens... C'est rigolo, parce que l'intérêt principal du libre (hormis que c'est quasiment toujours gratos...), c'est d'avoir accès au code source. Du coup, je suis allé voir. Hé bien les enfants, c'est pas faute de ne pas l'avoir écrit :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Sage has significant components written in the following languages: C/C++, Python, Lisp, and Fortran.&lt;/span&gt; - README.txt&lt;/blockquote&gt;&lt;br /&gt;On peut également légitimement penser qu'il utilise pour la partie build/admin le Perl et le M4, vu que les interpréteurs associés sont nécessaires à la compilation du programme... Du coup c'est pas entièrement en Python ? Etonnant... c'est pas ce qu'il y a écrit sur &lt;a href="http://fr.wikipedia.org/wiki/SAGE_%28logiciel_de_calcul_formel%29"&gt;Wikipédia&lt;/a&gt; là encore...&lt;br /&gt;Dernière chose, ces fameux zealots ont souvent une excuse pour être aussi souvent ridicules : ce sont des (gros) n00bs. Python est très populaire (ça c'est pas un reproche), du coup il est souvent conseillé aux jeunes débutants en programmation par leurs aînés. Ces petits bons-à-rien prenant exemples sur leurs aînés sus-nommés (symbole du père, Freud, tout ça...), ils crachent eux aussi sur les autres langages et sont d'une mauvaise foi égale justement à la foi qu'ils ont en leur sacro-saint serpent (cf. la secte dans Conan le barbare).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Le Python sent le cµl de jeune intégriste reptilien qui indente.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Visual Basic&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le Visual Basic pue du cµl.&lt;br /&gt;Rassurez vous, je vais faire court. Tout d'abord, précisons que tous les Basic puent du cµl : Visual, Pure, Small, Dark, for Application... Tous. Mais c'est sur le Visual, puisque le plus répandu, que je vais m'étendre (au sens figuré).&lt;br /&gt;"Visual" tout d'abord. "Visual" ça craint parce que c'est Microsoft. J'insiste pas : j'aime pas tirer sur les ambulances, même quand elles sont en or massif avec des jantes en caviar. Mais "Visual" ça craint aussi parce que ça évoque GUI. Et la GUI est à la programmation ce qu'une bonne claque dans la gµeule est à la vie en général : c'est parfois nécessaire, mais c'est jamais agréable.&lt;br /&gt;Ensuite il y a "Basic". Je rappelle qu'au départ, le Basic est basé sur le Fortran (cf article précédant de la série). Alors s'il est vrai que c'est dans les vieux chaudrons qu'on fait la meilleure confiture d'oignons, faut quand même faire gaffe à quel chaudron on prend... Non, ce langage est simplement médiocre.&lt;br /&gt;Le vrai côté puant du Visual Basic, c'est, je pense, qu'il s'agit d'un langage propriétaire. En soi, c'est abbérant  que des développeurs (et surtout, les entreprises qui les emploient) osent baser leur propre produit sur une technologie sur laquelle ils n'ont aucun droit, ni aucun contrôle (que ce soit au niveau de ses spécifications ou de son évolution). C'est probablement ce qui explique les problèmes (doux euphémisme) liés aux changements de version (VB6, VB.Net, etc...) et le passage des applications au C#. Sur ce point, je crois que c'est même plus un problème d'odeur : c'est le stade de l'arme chimique (mortelle ?).&lt;br /&gt;Je ne pense pas qu'on puisse parler de communauté pour le VB (pas au même sens que pour les langages libres en tout cas). Pour les autres Basics, elles sont majoritairement composées de jeunes pinpins boutonneux voulant (TOUS !) coder un MMORPG ("&lt;span style="font-style: italic;"&gt;mieux que WoW&lt;/span&gt;") seuls, et après 2 (longues) semaines d'apprentissage. Je suis de tout coeur avec vous les gars.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Visual Basic sent le cµl de Big Billou (qu'est pas t'a toi !).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:courier new;"&gt;~=o=~&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Que les petits oubliés de la procédure se rassurent, ceci n'est qu'une seconde partie : je m'amuse bien en trollant gratuitement, je compte bien continuer. Sur ce, j'ai un voisin à castrer (et p't'ê't bien un manager...) avant de débuter à la chasse au pigeon (et p't'ê't bien au manager...).&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-2618437794155883012?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/2618437794155883012/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=2618437794155883012' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2618437794155883012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2618437794155883012'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/programmation-poetique-chapitre-vii-ton.html' title='Programmation poétique - Chapitre VII : Ton langage pue du cµl n°2'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8160528077281105111</id><published>2009-02-16T05:51:00.001+01:00</published><updated>2009-02-18T15:40:43.492+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='poésie'/><title type='text'>Programmation poétique - Chapitre VI : Ton langage pue du cµl n°1</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Disclaimer :&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;Attention, article violent : âmes sensibles, femmes enceintes et handicapés du second degré s'abstenir.&lt;/span&gt; Malgré ses côtés provocateur, insultant et inutilement vulgaire, cet article se veut humoristique et satirique : l'auteur du présent article ne saurait donc être tenu pour responsable des symptômes suivants suite à sa lecture, même partielle (liste non-exhaustive, donnée à titre d'exemple) : nausées, vomissements, chocs anaphylactiques, chutes de phalange(s), déclenchements de diabète, crises d'épilepsie, ruptures de certitudes programmatiques, constipations, inflammations du nerf trollien, asthmes, infections du compilateur et céphalalgies.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: courier new;font-family:courier new;" &gt;~=o=~&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Un mois que je dors plus, ma copine m'a lâché pour un orang outang ingénieur commercial, j'en suis au 6ème Blue Screen of Death de la journée, mon manager a été obligé de baisser mon salaire à cause de la crise (le pauvre, il va pas pouvoir s'augmenter cette année), ma gangrène au pied me fait un peu de soucis ses derniers jours, et en plus, à midi, c'était navets ou blettes.&lt;br /&gt;Bref je suis pas jouasse.&lt;br /&gt;Du coup, je vais cracher sur quelque chose pour me détendre : les langages de programmation par exemple. D'une part j'en ai croisé quelques uns ces derniers temps, et d'autre part, ils sont vachement moins forts à la bagarre que la plupart des gars sur lesquels je pourrais avoir envie de déverser ma bile (et accessoirement, il a été prouvé qu'ils n'appréciaient pas le contact de la salive ou de la bile d'autrui. C'est pas le cas de toutes les personnes sus-non-nommées...).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Donc, ton langage pue du cµl...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Fortran&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le Fortran pue du cµl.&lt;br /&gt;Pour rappel, le Fortran n'est pratiqué que par de vieux clampins de scientifiques qui codent comme des pieds de cul-de-jattes malgré leur expérience paléontologique : goto partout, noms de variables et de fonctions d'un demi caractère, effets de bords, commentaires inexistants ou ridicules... que du bonheur. Le Fortran n'est pas sensible à la casse : c'est pas chouette ça ?&lt;br /&gt;Il faut par contre porter au crédit des gens bossant sur ses compilateurs un exploit considérable : il n'existe absolument aucune norme pour la compilation de ce langage. Ce qui veut dire que l'on a aucune garantie que les résultats (résultats numériques j'entends : que du calcul en Fortran, on va pas non plus faire du web avec cette bouse !) donnés par un exécutable pondu par un compilo donné soit obtenus à nouveau avec un exe pondu par un autre compilo. Je rappelle aux enfants ici présents que le Fortran a grosso-modo 40 ans, ce qui laisse un rien de temps pour mettre en place ce genre de chose...&lt;br /&gt;Je fais l'impasse sur les normes de codages moches, les variables globales COMMONS, la gestion des chaînes de caractères, la tentative lamentable d'insertion de la POO dans les versions récentes, les formats, les variables implicites, etc...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Le Fortran sent le vieux cµl.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;OCaml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'OCaml pue du cµl.&lt;br /&gt;C'est un langage d'universitaires élitistes qui se la pètent avec leurs "tuples", "motifs", "inférence"... bref que des termes que personne ne b1te. Déjà que c'est assez fastidieux à lire, ça n'utilise que des concepts "rares" pour faire joli et gagner trois lignes de code, ou un effet de bord, voire un +1 en "beauté mathématique".&lt;br /&gt;OCaml est sensé être super-méga-performant-pas-loin-du-C-et-du-Fortran, mais bizarement, personne ne l'utilise en calcul scientifique lourd... c'est d'autant plus c0n que c'est à peu prêt le seul endroit où ça sert, les perfs. OCaml ne supporte pas la surcharge des opérateurs, du coup pour aditionner 2 flottants, il faut utiliser l'opérateur "+." : c'est pas vilain ça ? La communauté OCaml est... non, en fait y en a pas.&lt;br /&gt;Le truc  probablement le plus ridicule : systématiquement, lorsqu'un débutant pose une question sur la POO en OCaml, il se voit répondre que c'est pas important, ou que c'est un peu spécial, ou que c'est pas utile dans son cas... A quoi ça sert de mettre "Objective" dans le nom, bande de blaireaux ?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;L'OCaml sent le cµl usé sur les bancs de la fac.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Groovy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le Groovy pue du cµl.&lt;br /&gt;Déjà, son nom est naze. Ensuite, il ne tourne que sur la JVM, et ça, "çay mâl" (cf Java). C'est lent, hybride et pas beau. On verse chaque fois sa petite larme lorsque :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;"toto".class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;nous renvoie :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-family:courier new;" &gt;class java.lang.String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pourquoi pas "&lt;span style="font-family:courier new;"&gt;java.jre_v1056.j2ee.lang.stdlib.groovy.String.gString&lt;/span&gt;" ? C'est vrai, quoi, ce serait beaucoup mieux précis plus bien !&lt;br /&gt;Malgré tous les efforts de Sun, Groovy n'est pas populaire (c'est pas parce que ya trois c0uillons sous Grails...). Et de fait, ce langage ne sert à rien : JRuby, Jython, Javascript et compagnie sont déjà là (et mieux).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Groovy sent le cµl moitié Java, moitié Ruby et re-mi-ours derrière. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Io&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le Io pue du cµl.&lt;br /&gt;Il faut franchement avoir le sens marketing d'une mouette albanaise (qui ne vend pas beaucoup de brosses à dents) et la maîtrise des outils de recherche web d'un crabe des îles Kouriles (qui, rappelons-le, n'ont pas encore l'ADSL) pour avoir l'idée sublime de nommer son langage "Io" (prononcé "Ayo" comme les rappeurs quand ils font "Ayo ayo, Wass'up N1gga !"). Deux lettres. Pratique pour Google ! Surtout quand ces deux lettres signifient "Input/Output", terme un tant soit peu employé en programmation... Crét1n...&lt;br /&gt;La documentation fait l'impasse sur énormément de méthodes de base : pratique pour débuter !&lt;br /&gt;A ce jour, il est possible d'estimer la taille de la communauté des utilisateurs de Io grâce à son reddit. Celui-ci compte 24 abonnés (3172 pour Ruby à titre comparatif). Il est cependant fortement probable que certains soient des redditeurs débutants s'étant trompés en s'y inscrivant. Une petite vingtaine donc.&lt;br /&gt;Ah oui : il n'y a quasiment aucune lib, et les seules existantes ne marchent pas vraiment bien... mais bon, comme tout le monde s'en br4nle...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Io sent le cµl de vache grèque abandonnée.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Java pue du cµl.&lt;br /&gt;Java, c'est avant tout une machine virtuelle permettant la portabilité des applications, blablabla... Cela dit, vu que le C tourne toujours à plus d'endroit que la JVM, et bien... avant de sentir mauvais, le Java ne sert surtout à rien, à part à faire dresser le k1k1 des chefs développeurs (ceux qui codent plus quoi) en entreprise.&lt;br /&gt;Chefs développeurs criant à tue-tête sur leurs ingénieurs software (autres appellations possibles) pour qu'ils tiennent leurs délais parce que "&lt;span style="font-style: italic;"&gt;depuis qu'on utilise le framework "Swing 40K" au lieu du "JRE v6", on est sensé avoir un gain de productivité de 50% (au bas mot, c'était écrit chez Sun !) et que, ben, donc du coup, on a plannifié les dates de livraison avec ces chiffres et que là on est en retard bande de faignants !&lt;/span&gt;". Ben tiens, t'as qu'à coder toi, conn4rd.&lt;br /&gt;Ingénieur software, sinistre p1sseur de code sur- ou sous-payé (non, pas entre les deux), qui passe plus de temps à se (dé)battre avec les spécs du clients et les design patterns imposés (et inutiles 90% du temps) qu'à apprendre à coder correctement ou même, à simplement coder ("&lt;span style="font-style: italic;"&gt;de toute façon, il s'en fout, il est dans les télécoms de formation, alors hein !&lt;/span&gt;"). Du coup, avec le domaine web et le Fortran (cf ci-dessus), c'est probablement le Java qui a le "code moyen produit" le plus moche.&lt;br /&gt;Enfin, le Java produit un grand nombre d'onomatopés à l'haleine lasse (qui pue donc) : "Sélannnn !", "Sarââââmmm !" ou "Saramsamèrlapuuuuuuute !". On pourra me montrer tous les benchmarks de la créations sensés prouver que Java n'est pas si loin du C++, je reste convaincu que c'est lent. En fait, j'ai même un indice : la petite icône de la JVM est toujours présente en bas d'écran quand les cris ci-dessus sortent de mon acerbe bouche. Si ça c'est pas un signe...&lt;br /&gt;Techniquement, le code n'est pas beau et est verbeux, l'introspection est hyper-lourde, bref...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Le Java sent le cµl professionnel certifié par Sun (mais en retard sur son jalon).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: courier new;font-family:courier new;" &gt;~=o=~&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Que les petits oubliés de la procédure se rassurent, ceci n'est qu'une première partie (à ceux qui se posent la question, oui, je ch1erais aussi sur le Ruby : qui aime bien châtie bien). Trop courte, je vous l'accorde, mais là je dois m'amputer le pied pour l'envoyer à un primate de mes amis, avant de "régler" un bug de Windows avec le crâne de mon supérieur hiérarchique, et d'aller me faire un petit roupillon (si j'arrive à digérer ces maudits navets).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8160528077281105111?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8160528077281105111/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8160528077281105111' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8160528077281105111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8160528077281105111'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/programmation-poetique-chapitre-vi-ton.html' title='Programmation poétique - Chapitre VI : Ton langage pue du cµl n°1'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-6480536117426506117</id><published>2009-02-15T12:10:00.001+01:00</published><updated>2009-02-15T14:20:59.090+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='cat'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='io'/><title type='text'>Langages en construction</title><content type='html'>Il existe littéralement &lt;a href="http://www.scriptol.fr/programmation/liste-langages-programmation.php"&gt;plusieurs centaines de langages de programmation&lt;/a&gt;. Et malgré ce, de nouveaux langages continue d'apparaître chaque année, développés par de grosses boîtes ou par quelques passionnés. Je n'ai pas vraiment envie de trop discuter de l'intérêt de développer de nouveaux langages aujourd'hui, simplement :&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Oui, il existe déjà de nombreux langages de très bonne qualité, spécialisés ou non, largement employés ou non, dans la plupart des paradigmes connus. &lt;/li&gt;&lt;li&gt;Oui, la &lt;span style="font-weight: bold;"&gt;qualité&lt;/span&gt; de langages récents comme &lt;a href="http://fr.wikipedia.org/wiki/Io_%28langage%29"&gt;Io&lt;/a&gt;, ou le &lt;span style="font-weight: bold;"&gt;succès&lt;/span&gt; d'autres comme &lt;a href="http://fr.wikipedia.org/wiki/Lua"&gt;Lua&lt;/a&gt; justifie de continuer à en développer d'autres.&lt;/li&gt;&lt;li&gt;Non, un langage n'est pas "indémodable" ou éternel : le &lt;a href="http://fr.wikipedia.org/wiki/Fortran"&gt;Fortran&lt;/a&gt; et le &lt;a href="http://fr.wikipedia.org/wiki/Cobol"&gt;Cobol&lt;/a&gt;, notamment, doivent être progressivement &lt;span style="font-weight: bold;"&gt;abandonnés et remplacés&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Par ailleurs, quand on aime la programmation, le processus de création d'un langage, ses étapes de développements, les choix faits sur ses caractéristiques, son (ou ses) paradigme(s), son implémentation, etc... sont particulièrement intéressants.&lt;br /&gt;&lt;br /&gt;Je vous propose donc de jeter un coup d'oeil à 4 langages actuellement en construction :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Cat&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cat-language.com/cat-logo-160-b.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 160px; height: 108px;" src="http://www.cat-language.com/cat-logo-160-b.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a style="font-weight: bold;" href="http://www.cat-language.com/"&gt;Cat&lt;/a&gt; est un langage interprété de haut niveau, "&lt;a href="http://en.wikipedia.org/wiki/Stack-oriented_programming_language"&gt;stack-oriented&lt;/a&gt;", comme le &lt;a href="http://fr.wikipedia.org/wiki/Forth_%28langage%29"&gt;Forth&lt;/a&gt;, et fonctionnel. Des 4 que je vous propose dans cet article, c'est probablement le plus avancé au niveau de son développement, celui-ci ayant débuté en 2006, malgré la présence de bugs conséquents (flottants et récursivité notamment).&lt;br /&gt;&lt;br /&gt;Les langages de ce type, à pile, sont relativement peu nombreux : Forth, &lt;a href="http://en.wikipedia.org/wiki/Joy_programming_language"&gt;Joy&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Factor_%28langage%29"&gt;Factor&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Postscript#Le_langage"&gt;PostScript&lt;/a&gt; et quelques assembleurs en gros... Cat ne rentre donc pas dans une niche trop saturée. Ce paradigme est assez intéressant et original... et déroutant : il utilise la notation post-fixée (on en parlait&lt;a href="http://sobe-session.blogspot.com/2008/12/notations.html"&gt; ici&lt;/a&gt;) qui reste plutôt rare, et la manipulation de la pile demande un certain temps d'adaptation. Cela dit, pris comme un jeu, c'est assez amusant.&lt;br /&gt;Le côté fonctionnel du langage est dû au fait que toute instruction correspond à une fonction appliquée à la pile. Le langage supporte aussi une forme de macro.&lt;br /&gt;Petit plus, le typage est statique et inféré (comme en &lt;a href="http://fr.wikipedia.org/wiki/OCaml#Typage"&gt;OCaml&lt;/a&gt; par exemple).&lt;br /&gt;&lt;br /&gt;La version actuelle de Cat est implémenté en &lt;a href="http://fr.wikipedia.org/wiki/C_sharp"&gt;C#&lt;/a&gt;. Oui, je sais, berk. Cela dit, d'une il compile sous &lt;a href="http://fr.wikipedia.org/wiki/Mono_%28informatique%29"&gt;Mono&lt;/a&gt; et donc est utilisable partout (théoriquement...), et d'autre part, une machine virtuelle en C++ est actuellement en cours de développement par &lt;a href="http://www.cdiggins.com/"&gt;Christopher Diggins&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vous pouvez aller jouer avec, directement en ligne sans rien installer, grâce à cet &lt;a href="http://www.cat-language.com/interpreter.html"&gt;interpréteur online&lt;/a&gt; (Allez y je vous dis, c'est rigolo ! Par contre, tout le langage n'est pas dispo dessus...).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemple de la factorielle naïve (récursive) :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/389634.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Ioke&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ioke.org/img/IokeLogo.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 106px; height: 104px;" src="http://ioke.org/img/IokeLogo.png" alt="" border="0" /&gt;&lt;/a&gt;De ces 4, &lt;a style="font-weight: bold;" href="http://ioke.org/"&gt;Ioke&lt;/a&gt; est peut-être le plus "sérieux" et le plus suceptible de connaître le succès auprès des programmeurs amateurs et même professionnels. Ioke (prononcé "&lt;span style="font-style: italic;"&gt;Ayoki&lt;/span&gt;", comme "Io" en anglais et "Loki", le dieu scandinave) est développé par &lt;a href="http://olabini.com/"&gt;Ola Bini&lt;/a&gt; qui travaille également sur &lt;a href="http://en.wikipedia.org/wiki/JRuby"&gt;JRuby&lt;/a&gt; (implémentation de &lt;a href="http://fr.wikipedia.org/wiki/Ruby"&gt;Ruby&lt;/a&gt; sur la &lt;a href="http://fr.wikipedia.org/wiki/Machine_virtuelle_Java"&gt;JVM&lt;/a&gt;), entre autres.&lt;br /&gt;Ioke est un langage dynamique, orienté objet,&lt;a href="http://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_prototype"&gt; à prototypes&lt;/a&gt;, tournant sur la JVM, et inspiré par Io, &lt;a href="http://fr.wikipedia.org/wiki/Smalltalk"&gt;Smalltalk&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Lisp"&gt;LISP&lt;/a&gt; et Ruby. Sa première version est sortie il y a seulement quelques mois.&lt;br /&gt;&lt;br /&gt;Bien que je ne l'ai pas testé, je trouve Ioke très prometteur pour plusieurs raisons. D'abord parce qu'il s'inspire de très bons langages et que son paradigme (OO à prototype) est très intéressant. Ensuite, qu'on le veuille ou non, parce que le fait qu'il tourne sur la machine virtuelle Java lui ouvre les portes du monde professionnel : ce n'est pas une garantie d'utilisation par les entreprises, mais ça augmente significativement ses chances. Il contient une foule de concepts/features intéressantes : syntaxe, blocks, macros, "&lt;a href="http://ioke.org/wiki/index.php/Guide#Lecros"&gt;lecros&lt;/a&gt;", &lt;a href="http://ioke.org/wiki/index.php/Guide#Aspects"&gt;aspects&lt;/a&gt;, &lt;a href="http://fr.wikipedia.org/wiki/Introspection_%28informatique%29"&gt;introspection&lt;/a&gt;... La documentation est particulièrement riche et bien faite.&lt;br /&gt;&lt;br /&gt;Ola Bini, son développeur principal, est un blogger assidu et un passionné des langages de programmation : il est possible de suivre les étapes de réflexion et de construction de Ioke, et bien d'autres choses sur &lt;a href="http://olabini.com/blog/tag/ioke/"&gt;son blog&lt;/a&gt;. C'est assez enrichissant.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemple de "99 Bottles" (oui, on dirait vraiment du Io...) : &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/389638.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Potion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://s3.amazonaws.com/twitter_production/profile_images/32324032/mortar_midget.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 77px; height: 77px;" src="http://s3.amazonaws.com/twitter_production/profile_images/32324032/mortar_midget.png" alt="" border="0" /&gt;&lt;/a&gt;L'un des derniers projets de &lt;a href="http://whytheluckystiff.net/"&gt;Why's the Lucky Stiff&lt;/a&gt; s'appelle &lt;a style="font-weight: bold;" href="http://github.com/why/potion/tree/master"&gt;Potion&lt;/a&gt;. Comme d'habitude avec ce hacker, il s'agit d'un petit OVNI. Potion est un tout petit langage, qui se veut rapide, orienté "objet et &lt;a href="http://fr.wikipedia.org/wiki/Mixin"&gt;mixin&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Sa machine virtuelle fait à peine 4000 lignes de code, en C. Il faut croire que c'est une obsession pour _Why de réduire au maximum la taille de tout code : &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; pour la GUI et &lt;a href="http://github.com/why/camping/tree/master"&gt;Camping&lt;/a&gt; comme micro-framework web en Ruby, ou &lt;a href="http://github.com/why/yown/tree/master"&gt;Yown&lt;/a&gt; en Io. Une bonne partie de Potion est inspiré par Lua.&lt;br /&gt;&lt;br /&gt;La syntaxe est assez particulière, et le langage s'appuie sur l'approche suivante :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tout est un objet&lt;/li&gt;&lt;li&gt;Même les mixins sont des objets&lt;/li&gt;&lt;li&gt;Et bien sûr, les fermetures sont des objets&lt;/li&gt;&lt;li&gt;CEPENDANT, les objets ne sont pas tout : ils ne sont rien sans les mixins.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Les objets n'ont pas de classe : les données (attributs) sont au niveau de l'objet lui-même, et les méthodes sont conservées dans des mixins. Tout objet possède par contre des mixins.&lt;br /&gt;Je n'ai pas encore testé Potion, n'ayant pas réussi à le compiler sous Windows. On va le tenter prochainement sous 'nix, ça a l'air vraiment marrant...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemple de Fibonacci récursif :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/389662.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Tinyrb&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.skitch.com/20090213-t35ix84ib124fyk4wpd3iw8u12.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 111px; height: 61px;" src="http://img.skitch.com/20090213-t35ix84ib124fyk4wpd3iw8u12.jpg" alt="" border="0" /&gt;&lt;/a&gt;Plus qu'un langage à proprement parler,&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://code.macournoyer.com/tinyrb/"&gt;Tinyrb&lt;/a&gt; est une toute nouvelle machine virtuelle pour le langage Ruby. Elle &lt;a href="http://macournoyer.com/blog/2009/02/12/tinyrb/"&gt;s'annonce&lt;/a&gt; comme la plus petite VM du langage, mais aussi comme étant plus que raisonnablement rapide. Il s'agit pour l'instant d'une version "allégée" du langage Ruby : tout code Tinyrb tournera avec un autre inerpréteur Ruby, mais l'inverse n'est pas vrai (il manque notamment un certain nombre de classes du core standard de Ruby) .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://macournoyer.com/"&gt;Marc-André Cournoyer&lt;/a&gt; a lancé ce projet en s'inspirant de Lua (encore !), Potion (tiens donc !) et &lt;a href="http://tinypy.org/"&gt;Tinypy&lt;/a&gt;. Ici, comme pour Lua, l'aspect intéressant, c'est le côté portable et embarquable. C'est un côté de plus en plus présent dans les langages récents (Lua, Io...)&lt;br /&gt;&lt;br /&gt;Comme pour Potion, je n'ai pas encore réussi à compiler la VM sous Window$ : à retenter aussi sous Linux... Pas de code ici, c'est du Ruby, pas plus (mais un peu moins).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;~~~~&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Voilà, n'hésitez pas à jeter un coup d'oeil à ces "petits" projets, et bon hack !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;NOTE : les images de cet article sont libres/dans le domaine public et liées aux projets associés, hormis celle employée pour Potion , qui est l'avatar actuel de &lt;a href="http://whytheluckystiff.net/"&gt;Why's the Lucky Stiff&lt;/a&gt;, et qui lui appartient.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-6480536117426506117?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/6480536117426506117/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=6480536117426506117' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6480536117426506117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6480536117426506117'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/langages-en-construction.html' title='Langages en construction'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3101103697041263265</id><published>2009-02-14T20:20:00.003+01:00</published><updated>2009-02-14T20:59:43.134+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='harp'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='sobe session'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Expatriation et Microblogging</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Expatriation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour la première fois de ma, colossale, vie de blogger, je viens de publier un article dans un autre blog que celui-ci : &lt;a style="font-style: italic;" href="http://lefty-chronicles.blogspot.com/2009/02/lautre-instrument-du-blues.html"&gt;L'autre instrument du Blues&lt;/a&gt;, chez &lt;a href="http://lefty-chronicles.blogspot.com/"&gt;Lefty&lt;/a&gt;, à propos de l'harmonica... en Blues.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pourquoi ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;D'abord, parce que c'est Lefty qui me l'a demandé (et qu'on ne refuse rien à "&lt;span style="font-style: italic;"&gt;Mickey le gaucher dit La corde&lt;/span&gt;"). Ensuite parce que ça me gênait de parler de musique de façon aussi spécialisée sur ce blog, sachant que ça n'a strictement rien à voir avec mes "sujets habituels" (même si ça peut être assez large, je reste plutôt ciblé sur le monde de la programmation, du web, du logiciel libre... bref plutôt informatique et sciences malgré quelques écarts qui restent dans la geekerie ordinaire). Sans aller jusqu'à dire que j'aurais déstabilisé mon (immense) public, ça n'était pas très logique.&lt;br /&gt;&lt;br /&gt;Il n'est pas du tout exclus que cette expérience continue (c'est à dire que je publie d'autres articles sur la musique dans les Chroniques de Lefty) voire même que je l'étende à d'autres sujets, qui sait ? Pourquoi pas par exemple un article sur le &lt;a href="http://da-bhm.org/index.yaws"&gt;BHM&lt;/a&gt; par exemple ? Même si nous avons plus ou moins la même cible au départ, je ne détesterais pas participer à &lt;a href="http://da-bhm.org/tag.yaws?tag=paradigmes"&gt;leur série sur les paradigmes de programmation&lt;/a&gt;... (si j'ai le temps, sur les langages stack-oriented).&lt;br /&gt;&lt;br /&gt;J'ajoute un encart "Copinage Honteux" qui manque un peu sur ma colonne de droite...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Microblogging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vous avez peut-être remarqué que j'utilisais la fonction de partage de Google Reader comme un Tumblelog (&lt;a href="http://www.google.com/reader/shared/18417123674913443552"&gt;ici&lt;/a&gt;), ou que je m'étais mis à &lt;a href="http://twitter.com/SobeTBT"&gt;Twitter&lt;/a&gt;... J'avoue qu'après avoir pas mal critiqué ce genre d'outils/pratiques, à l'usage (avec &lt;span style="font-style: italic;"&gt;un peu&lt;/span&gt; de temps libre aussi, il faut bien le dire...), c'est assez addictif. Twitter me semble ouvrir des voies très intéressantes dans la façon de communiquer, mais j'avoue que ça reste assez "gadget" à mon niveau (encore que...).&lt;br /&gt;&lt;br /&gt;En bref, si vous êtes absolument fascinés (si si, vous l'êtes !) par ma vie, mon oeuvre et mon cµl (ou du moins ce qu'il en reste...), vous pouvez vous abonner à ces flux.&lt;br /&gt;&lt;br /&gt;J'en profite pour signaler que j'ai récemment mis à jour &lt;a href="http://sobe-session.blogspot.com/2007/12/blogs-ruby.html"&gt;ma liste de blogs Ruby&lt;/a&gt;. Je vais probablement bientôt faire une autre page de ce type pour les blogs de programmation autre que sur le Ruby que je suis.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3101103697041263265?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3101103697041263265/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3101103697041263265' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3101103697041263265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3101103697041263265'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/expatriation-et-microblogging.html' title='Expatriation et Microblogging'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-2882771192053950732</id><published>2009-02-08T09:02:00.007+01:00</published><updated>2009-02-08T10:44:09.883+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cfd'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Atlas du monde réel</title><content type='html'>&lt;div style="text-align: justify;"&gt;Il y a de nombreuses façons de représenter le monde qui nous entoure. Traditionnellement, un carte représente le monde en tant qu'espace "physique" (ou plus exactement, une de ses &lt;a href="http://fr.wikipedia.org/wiki/Projection_cartographique"&gt;projections&lt;/a&gt;) le plus fidèlement possible en termes de surfaces et distances.&lt;br /&gt;Un &lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/Cartogram"&gt;cartogramme&lt;/a&gt; tente lui de représenter le monde en fonction d'une variable donnée : &lt;a href="http://fr.wikipedia.org/wiki/PIB"&gt;PIB&lt;/a&gt; d'un pays, densité de la population, taux d'accès à une ressource, etc. Pour ce faire, il déforme les surfaces et les distances réelles proportionnellement à la variable qu'il exprime. Cette technique est relativement récente : inventée durant le XIXème siècle, elle n'est fréquemment utilisée que depuis la seconde moitié du XXème. Par exemple, ci-dessous, la répartition des destinations touristiques dans le monde (où l'on peut voir que la France, l'Espagne et l'Italie apparaissent bien plus volumineuses que sur une carte classique de par leur forte attraction touristique). De nombreux cartogrammes sont consultables en ligne sur le site &lt;a href="http://www.worldmapper.org/textindex/text_index.html"&gt;WorldMapper&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nJatC71XBiI/SY6V7Kr4NzI/AAAAAAAAAX8/rp26GqoFz40/s1600-h/atlas-tourisme.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 491px; height: 228px;" src="http://1.bp.blogspot.com/_nJatC71XBiI/SY6V7Kr4NzI/AAAAAAAAAX8/rp26GqoFz40/s320/atlas-tourisme.jpg" alt="" id="BLOGGER_PHOTO_ID_5300338655174866738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;L'&lt;a style="font-weight: bold;" href="http://www.amazon.fr/Atlas-monde-r%C3%A9el-Cartographier-modes/dp/2732437972"&gt;Atlas du monde réel&lt;/a&gt; (&lt;a href="http://www.thamesandhudson.com/en/1/9780500514252.mxs"&gt;chez l'éditeur&lt;/a&gt;) propose avec 366 cartogrammes une représentation originale et souvent très efficace du monde, sur des problématiques très diverses (économiques, politiques, ressources, sociologiques, médicales, culturelles, etc...).&lt;br /&gt;&lt;br /&gt;L'une des très grandes qualités de cet ouvrage (hormis sa présentation très claire et agréable) se cache derrière &lt;span style="font-weight: bold;"&gt;la méthode employée pour la génération de ses cartes&lt;/span&gt;. En effet, il s'agit d'une méthode numérique récente (2004) développée par Michael Gastner et &lt;a href="http://www-personal.umich.edu/%7Emejn/"&gt;Mark Newman&lt;/a&gt; (coauteur de l'ouvrage et chercheur numéricien à l'université du Michigan).&lt;br /&gt;Cette méthode se base sur le phénomène physique de la diffusion (mécanique des fluides/thermique) : les territoires représentés se déforment comme s'il s'agissait de ballons contenant du gaz (la variable étudiée) avec des zones de pression (les zones de fortes densités de population, le plus souvent). Article de référence : &lt;a style="font-weight: bold; font-style: italic;" href="http://aps.arxiv.org/PS_cache/physics/pdf/0401/0401102v1.pdf"&gt;Diffusion-based method for producing density equalizing maps&lt;/a&gt;, &lt;span style="font-size:85%;"&gt;Michael T. Gastner and M. E. J. Newman&lt;/span&gt; (PDF).&lt;br /&gt;D'un point de vue purement numérique, l'équation de la diffusion est résolue par une transformée de Fourrier rapide (&lt;a href="http://en.wikipedia.org/wiki/FFT"&gt;FFT&lt;/a&gt;) et intégrée par une méthode de &lt;a href="http://en.wikipedia.org/wiki/Runge_kutta"&gt;Runge-Kutta&lt;/a&gt; d'ordre 4. Selon les auteurs, une précision à 1.0E-4 (cela peut paraître décevant, mais une précision plus grande n'est quasiment pas observable humainement) est obtenue en peu d'itérations (ordre de temps de calcul : quelques minutes sur un ordinateur de bureau).&lt;br /&gt;&lt;br /&gt;Ce qui m'a paru intéressant dans cette méthode, c'est l'application d'un problème de physique (la diffusion/mécanique des fluides) à un contexte tout à fait décalé (cartographie/représentation des données). Dans l'article cité plus haut, sont listées les précédentes méthodes de génération de cartogrammes, dont une autre consiste en une &lt;span style="font-weight: bold;"&gt;analogie physique&lt;/span&gt; avec l'élasticité des matériaux (mécanique solide déformable).&lt;br /&gt;Dans d'autres domaines, pour ce type d'analogie, on peut citer l'utilisation de méthodes de &lt;abbr title="Computational Fluid Dynamic"&gt;CFD&lt;/abbr&gt; (calcul en mécanique des fluides) dans des calculs de trafic (routier ou autre) ou en finance ("flux" monétaires...).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Références :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.thamesandhudson.com/en/1/9780500514252.mxs"&gt;Atlas du monde réel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://aps.arxiv.org/PS_cache/physics/pdf/0401/0401102v1.pdf"&gt;Diffusion-based method for producing density equalizing maps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.worldmapper.org/index.html"&gt;WorldMapper&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-personal.umich.edu/%7Emejn/"&gt;Mark Newman&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Autres liens en vrac à propos des cartes :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.arte.tv/fr/Comprendre-le-monde/le-dessous-des-cartes/392.html#"&gt;Le Dessous des Cartes&lt;/a&gt; (l'émission)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.arte.tv/fr/Comprendre-le-monde/le-dessous-des-cartes/2312298.html"&gt;Les Atlas du Dessous des Cartes&lt;/a&gt; (1 et 2)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bibliodyssey.blogspot.com/2008/08/dogs-of-war.html"&gt;Cartes satiriques de la Ière Guerre Mondiale&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;Note : le cartogramme présenté ci-dessus est tiré de l'"Atlas du monde réel" et appartient à ses auteurs.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-2882771192053950732?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/2882771192053950732/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=2882771192053950732' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2882771192053950732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2882771192053950732'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2009/02/atlas-du-monde-reel.html' title='Atlas du monde réel'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nJatC71XBiI/SY6V7Kr4NzI/AAAAAAAAAX8/rp26GqoFz40/s72-c/atlas-tourisme.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8724586921165752688</id><published>2008-12-24T16:47:00.006+01:00</published><updated>2009-10-18T09:55:06.264+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='harp'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Sortie de Tabz Converter</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.folkrevolution.co.uk/instruments/images/harmonicas/bluesharp.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 117px; height: 82px;" src="http://www.folkrevolution.co.uk/instruments/images/harmonicas/bluesharp.jpg" alt="" border="0" /&gt;&lt;/a&gt;Allez hop ! Pour les fêtes, je vous propose une petite application de bureau que j'ai codée récemment : &lt;a href="http://www.the-shoebox.org/apps/113"&gt;Tabz Converter&lt;/a&gt;. Il s'agit d'un petit logiciel libre (licence BSD) avec interface graphique permettant de convertir des partitions musicales au format texte, d'une notation vers une autre. Il est surtout orienté vers les partitions d'harmonicas, ce type d'outil existant déjà pour la plupart des instruments plus répandus (guitare, etc...).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;A quoi ça ressemble ? Comment ça marche ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nJatC71XBiI/SVikvOQO4HI/AAAAAAAAAX0/SaijttSYk8M/s1600-h/tabz_converter_snap.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 276px;" src="http://1.bp.blogspot.com/_nJatC71XBiI/SVikvOQO4HI/AAAAAAAAAX0/SaijttSYk8M/s400/tabz_converter_snap.PNG" alt="" id="BLOGGER_PHOTO_ID_5285155293906264178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Il s'agit d'une application toute simple : 2 petites listes déroulantes pour choisir les notations de départ et d'arrivée, à choisir parmi les suivantes :&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Solfège&lt;/li&gt;&lt;li&gt;Notation Américaine&lt;/li&gt;&lt;li&gt;Harmonica chromatique (12 trous en Do / accordage standard)&lt;/li&gt;&lt;li&gt;Harmonica diatonique (10 trous en Do / accordage Richter standard)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Ensuite, il suffit de taper sa partition dans l'edit box de gauche, appuyer sur "&lt;span style="font-family:courier new;"&gt;Convert&lt;/span&gt;", et le résultat apparaîtra dans l'edit box de gauche (dans laquelle il peut être copié et/ou modifié). La syntaxe pour les partoches est la suivante :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://pastie.org/346306.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/346305.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/346303.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Un petit bouton "&lt;span style="font-family:courier new;"&gt;Help&lt;/span&gt;" permet d'ouvrir une fenêtre d'aide avec le détails des syntaxes utilisées, avec exemples.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comment l'installer ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cette application est basée sur &lt;a style="font-weight: bold;" href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; (et donc implémentée en Ruby) : l'application ne nécessite donc pas d'installation en elle même, cependant pour la faire tourner il faut avoir préalablement installé le programme Shoes. Celui-ci est disponible librement sous la plupart des plates-formes connues à cette adresse :&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a style="font-weight: bold;" href="http://shoooes.net/"&gt;http://shoooes.net/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Tabz Converter&lt;/span&gt; lui-même est disponible dans la &lt;a href="http://www.the-shoebox.org/"&gt;Shoebox&lt;/a&gt; (un répertoire de petites applications pour Shoes - quitte à installer Shoes, essayez en quelques unes, certaines sont très rigolotes...) à cette adresse :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.the-shoebox.org/apps/113"&gt;Tabz_Converter&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Sous forme de&lt;span style="font-family:courier new;"&gt; .zip&lt;/span&gt; ou &lt;span style="font-family:courier new;"&gt;.rar&lt;/span&gt;. Une fois décompressé, il suffit de lancer le fichier &lt;span style="font-family:courier new;"&gt;tabz_converter.rb&lt;/span&gt; avec Shoes, et l'application se lance (&lt;span style="font-family:courier new;"&gt;shoes tabz_converter.rb&lt;/span&gt; via un terminal sous Windows comme sous Nix).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;La suite ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Je vais tenter d'améliorer ce petit programme régulièrement (l'utilisant moi même de façon conséquente). Parmi les améliorations fortement envisagées pour l'avenir, on peut trouver la prise en compte des altérations pour les harmonicas (overnote, bend, etc...) et un moyen (boutons "+"/"-") de monter/descendre d'une octave sur les partitions où cela est possible (pas pour l'harmonica diatonique donc).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Tout commentaire, suggestion ou rapport de bug est le bienvenu, via cet article, la &lt;a href="http://www.the-shoebox.org/apps/113"&gt;page de l'application&lt;/a&gt; dans la Shoebox voire même par mail (cf. page de profil).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:courier new;"&gt;~=o=~&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-style: italic;" &gt;Bonnes fêtes à tous.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8724586921165752688?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8724586921165752688/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8724586921165752688' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8724586921165752688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8724586921165752688'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/12/sortie-de-tabz-converter.html' title='Sortie de Tabz Converter'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nJatC71XBiI/SVikvOQO4HI/AAAAAAAAAX0/SaijttSYk8M/s72-c/tabz_converter_snap.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3050534004005980351</id><published>2008-12-23T22:59:00.006+01:00</published><updated>2008-12-25T10:02:25.162+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Notations...</title><content type='html'>&lt;div style="text-align: justify;"&gt;Il existe différentes façons de présenter les expressions mathématiques, les définitions de fonctions ou encore du code informatique. Juste pour l'exemple, sur l'expression &lt;span style="font-family:courier new;"&gt;[(5+1)*7 = 42]&lt;/span&gt; voici les &lt;span style="font-weight: bold;"&gt;3 &lt;a href="http://fr.wikipedia.org/wiki/Notations_infix%C3%A9e,_pr%C3%A9fix%C3%A9e,_polonaise_et_postfix%C3%A9e"&gt;notations&lt;/a&gt; les plus courantes en programmation&lt;/span&gt; :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://pastie.org/345867.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La notation&lt;span style="font-weight: bold;"&gt; infixée&lt;/span&gt; est la plus courante. C'est celle que l'on utilise la plus généralement tant en mathématiques qu'en programmation (j'entends par là, dans la majorité des langages...). Les opérateurs se placent entre les opérandes.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La notation &lt;span style="font-weight: bold;"&gt;préfixée&lt;/span&gt; place l'opérateur avant les opérandes. On la retrouve dans des langages tels que LISP ou Scheme. Même si elle peut paraître assez peu intéressante sur cet exemple, elle présente un grand intérêt : ne pas limiter un opérateur à seulement 2 opérandes. Par exemple &lt;span style="font-family:courier new;"&gt;[1 + 2 + 3 + 4 = 10]&lt;/span&gt; peut s'écrire plus succinctement&lt;span style="font-family:courier new;"&gt; [(+ 1 2 3 4)]&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Enfin, la notation &lt;span style="font-weight: bold;"&gt;postfixée&lt;/span&gt; (ou &lt;span style="font-style: italic;"&gt;Polonaise inversée&lt;/span&gt;)  place elle les opérateurs à la suite des opérandes. Celle-ci est quasi-systématique dans les langages concaténatifs tels que Forth, Factor, Joy ou Cat (dont on devrait reparler ici très prochainement...). Vous remarquerez son absence de parenthèse : c'est son idée de base.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3050534004005980351?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3050534004005980351/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3050534004005980351' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3050534004005980351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3050534004005980351'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/12/notations.html' title='Notations...'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7917765635272478367</id><published>2008-12-14T15:00:00.006+01:00</published><updated>2008-12-16T22:31:34.102+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='xfce'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>3 petits Reddits</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sp.reddit.com/alien.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 29px; height: 40px;" src="http://sp.reddit.com/alien.png" alt="" border="0" /&gt;&lt;/a&gt;Petit post publicitaire pour présenter à ceux qui ne connaissent pas &lt;a href="http://fr.reddit.com/"&gt;Reddit&lt;/a&gt;, et 3 petits sub-reddits sympathiques.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;Reddit est un site de "&lt;a href="http://en.wikipedia.org/wiki/Social_news"&gt;social news&lt;/a&gt;" ou de "&lt;a href="http://fr.wikipedia.org/wiki/Social_bookmarking"&gt;social bookmarking&lt;/a&gt;", assez proche de Digg (l'aspect réseau social en moins), ou Scoopeo en Français (moins orienté "news" cependant) : son contenu consiste en une liste de liens proposés par la communauté des internautes, mise à jour en permanence. Afin de trier les liens par sujet, il existe de nombreux "sub-reddits", spécialisé dans un genre ou un thème donné. Parmi les plus connus de ces sub-reddits, on retrouve &lt;a href="http://www.reddit.com/r/pics/"&gt;Pics&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/politics/"&gt;Politics&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/technology/"&gt;Technology&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/science/"&gt;Science&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/programming/"&gt;Programming&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/ruby/"&gt;Ruby&lt;/a&gt;, &lt;a href="http://www.reddit.com/r/WTF/"&gt;WTF&lt;/a&gt; (What The Fuck ? : &lt;span style="font-style: italic;"&gt;C'est quoi ce bordel ?&lt;/span&gt;) ou encore NSFW (Not Safe For Work : pour du pOr|\|0 et autre...). Depuis plusieurs mois, il est possible de créer gratuitement ses propres sub-reddits, publics ou privés, sur des sujets de son choix, et ce, assez facilement.&lt;br /&gt;&lt;br /&gt;Au niveau de l'utilisation, le principe est très simple. Vous pouvez proposer un lien qui vous a plu (ou pas d'ailleurs...) à l'un des sub-reddits. Ensuite, ce lien apparaitra dans la liste des nouveaux liens soumis. A partir de ce moment, les autres redditeurs pourront voter pour ou contre ce lien, le commenter et éventuellement le reporter en cas d'abus (par exemple si vous postez un lien prOn dans le &lt;a href="http://www.reddit.com/r/aww/"&gt;reddit des trucs mimi&lt;/a&gt;). Si votre lien obtient un accueil favorable, il pourra éventuellement passer en première page.&lt;br /&gt;Pour encourager les redditeurs, il existe un système de points appelés "&lt;a href="http://www.reddit.com/help/karma"&gt;points de karma&lt;/a&gt;". Ils sont supposés représenter le respect que vous doit la communauté en fonction de votre attitude : liens soumis appréciés, bons commentaires, etc... Sans être un but en soi, ils donnent un aperçu de l'activité de chacun sur le site.&lt;br /&gt;&lt;br /&gt;Parenthèse pour les hackeurs, le code de Reddit est libre et donc disponible pour chacun. Au départ codé &lt;a href="http://blog.reddit.com/2005/12/on-lisp.html"&gt;en LISP&lt;/a&gt;, il est désormais principalement implémenté en Python (&lt;a href="http://code.reddit.com/browser"&gt;sources&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Cependant, comme beaucoup de sites "web 2.0" reposant majoritairement sur l'activité de sa communauté, il est soumis à divers problèmes. Notamment, il est très difficile pour un sub-reddit de survivre si sa communauté n'est suffisament active, ou, tout simplement, nombreuse (ce qui est souvent le cas pour des sujets très spécifiques). De même, étant un site international, c'est l'Anglais qui domine très largement les autres langues (même s'il existe quelques reddits spécifiquement dans d'autres langues...). Il est d'ailleurs amusant de constater une certaine "animosité" à l'égard de liens dans certaines langues (dont le Français) ou l'absence totale dans certaines autres (dont l'Arabe)...&lt;br /&gt;&lt;br /&gt;Je me permets donc de vous proposer ici 3 "petits" reddits qui me paraissent intéressants :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a href="http://www.reddit.com/r/PixelArt/"&gt;Pixel Art :&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumbs.reddit.com/t5_2ql09.png?v=9b1075919fd6eb393ab79e2ad2ba72f6"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 120px; height: 40px;" src="http://thumbs.reddit.com/t5_2ql09.png?v=9b1075919fd6eb393ab79e2ad2ba72f6" alt="" border="0" /&gt;&lt;/a&gt;Ce très modeste sub-reddit se focalise sur le pixel art, bien sûr, mais également sur toute autre tentaive artistique liée à 'lunivers informatique.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reddit.com/r/BluesMusic/"&gt;&lt;span style="font-size:130%;"&gt; &lt;span style="font-weight: bold;"&gt;Blues Music :&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumbs.reddit.com/t5_2qkpy.png?v=be34dadf7b6e4405e7fabbd7cd1ece25"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 120px; height: 40px;" src="http://thumbs.reddit.com/t5_2qkpy.png?v=be34dadf7b6e4405e7fabbd7cd1ece25" alt="" border="0" /&gt;&lt;/a&gt;Autre sub-reddit sympathique, mais malheureusement très peu actif, Blues Music parle bien évidemment... de Blues. N'hésitez pas à proposer vos liens !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reddit.com/r/xfce/"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;XFCE :&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumbs.reddit.com/t5_2qliy.png?v=1de294f15b0270fb99771e331e740bb2"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 53px; height: 40px;" src="http://thumbs.reddit.com/t5_2qliy.png?v=1de294f15b0270fb99771e331e740bb2" alt="" border="0" /&gt;&lt;/a&gt;Enfin, l'un des plus "spé", le reddit de l'environnement graphique &lt;a href="http://www.xfce.org/?lang=fr"&gt;XFCE&lt;/a&gt;. Pour info, j'ai découvert cet environnement récemment via les nouveaux netbooks sous Linux, et je dois doit dire que dans ce type de matériel, il est particulièrement efficace et agréable.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7917765635272478367?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7917765635272478367/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7917765635272478367' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7917765635272478367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7917765635272478367'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/12/3-petits-reddits.html' title='3 petits Reddits'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1039374102882773990</id><published>2008-12-13T00:30:00.004+01:00</published><updated>2008-12-13T01:33:09.231+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='socio'/><title type='text'>Europa</title><content type='html'>"Bon, voila. Je souhaite bon courage à mon successeur Tchèque."&lt;br /&gt;&lt;br /&gt;Non.&lt;br /&gt;&lt;br /&gt;"Je vous prie d'accepter mes excuses pour ce qui n'a pas été accompli. L'Europe est au cœur de ce qui peut devenir la principale puissance mondiale, tant au sens géopolitique qu'au sens culturel, ou bassement économique. Je tiens à encourager particulièrement mon successeur Tchèque à la présidence l'Union Européenne. La Tchécoslovaquie a été l'un des pays de l'Est les plus développé avant l'invasion Hitlérienne. Il est naturel de reconnaître ses états fils, dont la Slovaquie, donc,  avec la plus grande attention. Ainsi que les Pays-Bas, ne serait-ce que pour l'héritage de Rombrant. La Suède et le Danemark pour leur culture scandinave (L'Odinisme étant reconnu en tant que religion et non secte dans de nombreux états.). L'Espagne pour ses poètes, son histoire et ses douleurs. Le Portugal pour sa tristesse. La Finlande pour sa langue, absolument abstraite et sa musique métalo-pop merdique. L'Irlande pour notre héritage celte commun, qu'on le veuille ou non. Le Royaume-Unis, bien que ça coûte à chacun. L'Italie, et son influence antique qui a grosso-modo marqué toute l'Europe. La Grèce, à qui l'on doit le nom d'"Europe" : sordide vache catin, maitresse de Zeus. Bulgarie, Roumanie et Hongrie : états mal aimés qui portent pourtant en eux tout l'héritage, au sens large, de l'empire austro-hongrois. La Pologne, régulièrement citée comme lieu le plus sinistre au monde (après la Moldavie - et prouvant aux yeux de certains, l'existence de Dieu). L'Allemagne, véritable centre de l'Europe depuis le Saint Empire Germanique. Et les états Baltes (et non Basques...) sans cesse à la recherche de leur véritable identité, entre influence slave et délires micro-culturels finno-hougriens. Pays des balkans, whatever yo name(s), qui souhaitez sortir de cette poudrière de m3rde. Et enfin, encore, l'Italie, la trop caricaturée, qui vaut cent fois son pesant culturel et historique via le très décadent empire romain. Je ne peux bien sûr pas parler ici de la France, ni de la Belgique, qui connaissent leur rôle dans l'aventure européenne."&lt;br /&gt;&lt;br /&gt;Voilà ce qui me semble être le le discours nécessaire d'un véritable européen objective et pragmatique. Cela dit, pour des raisons à la fois économiques et sociales, nous sommes loin d'entendre ce type de discours (pourtant fédérateur, à sa façon...) de la part des différents responsables européens.&lt;br /&gt;&lt;br /&gt;Pourquoi ?&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1039374102882773990?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1039374102882773990/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1039374102882773990' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1039374102882773990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1039374102882773990'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/12/europa.html' title='Europa'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8370040238297368029</id><published>2008-12-01T22:08:00.003+01:00</published><updated>2008-12-01T22:23:11.785+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sobe session'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Changement de Design</title><content type='html'>&lt;div style="text-align: justify;"&gt;Depuis quelques temps, une immonde barre bleue non identifiée était apparue dans le corps des messages de ce blog...&lt;br /&gt;&lt;br /&gt;Malgré mes 47 secondes d'efforts acharnés, je n'ai pas réussi à corriger ce bug, et donc par flemme profonde (et désintérêt significatif pour le HTML/CSS/XML, il faut bien l'avouer... surtout quand il est aussi crade que dans Blogger !), j'ai décidé de changer le design de ce modeste blog... en en prenant un tout-fait-tout-prêt (ou &lt;span style="font-style: italic;"&gt;presque&lt;/span&gt;), déniché &lt;a href="http://www.free-themes.org/themes/all-themes"&gt;ici&lt;/a&gt;. Celui-ci étant sous licence &lt;abbr title="Creative Commons"&gt;CC&lt;/abbr&gt; avec paternité, vous avez droit à un petit lien vers &lt;a href="http://www.netlash.com/"&gt;le site de l'auteur&lt;/a&gt; inclus, mais ça reste discret.&lt;br /&gt;&lt;br /&gt;Je disais "presque" car il manquait un bon &lt;a href="http://www.compender.com/2007/12/simple-tag-cloud.html"&gt;petit nuage de tags&lt;/a&gt; (que je préfère généralement aux vilaines listes de libellés basques de chez Blogger), ainsi que le petit &lt;a href="http://www.google.com/translate_tools?hl=en&amp;amp;sl=fr"&gt;outils de traduction Google&lt;/a&gt; qui peut être utiles à nos amis non-francophones.&lt;br /&gt;&lt;br /&gt;Vos avis sur le nouveau design sont les bienvenus, en espérant qu'il me motive à me remettre à poster un peu plus fréquemment !&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8370040238297368029?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8370040238297368029/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8370040238297368029' title='6 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8370040238297368029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8370040238297368029'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/12/changement-de-design.html' title='Changement de Design'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-459758097210473521</id><published>2008-10-31T14:27:00.005+01:00</published><updated>2008-10-31T15:11:01.974+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Pourquoi utiliser Ruby ?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_nJatC71XBiI/RzeFlvDXoyI/AAAAAAAAAAg/XCkw4vexxmQ/old_logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 94px; height: 109px;" src="http://lh5.ggpht.com/_nJatC71XBiI/RzeFlvDXoyI/AAAAAAAAAAg/XCkw4vexxmQ/old_logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:georgia;" &gt;Note préliminaire :&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;Il y a quelques temps, j'avais rédigé cette présentation à la demande de gars du &lt;a href="http://www.siteduzero.com/"&gt;Site du Zéro&lt;/a&gt;, dans le but de faire un topic de comparaison objective (Mama mia !) du &lt;span style="font-weight: bold;"&gt;Ruby&lt;/span&gt; et du &lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;. Ne connaissant que très peu le Python, je me suis chargé de la partie Ruby. Initialement rédigée en zCode, la première version de celle-ci est disponible à l'adresse suivante (à toute fin utile) : &lt;a href="http://pastie.org/225818"&gt;version zCode&lt;/a&gt;. (Merci par avance de me prévenir si vous détectez un problème dans cet article : lien mort, texte "bizarre" ou autre).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center; font-family: courier new;"&gt;-~=.=~-&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class="allcode wrap"&gt;  &lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Pourquoi Ruby ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Ruby&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;Ruby est un langage de programmation libre, interprété, à typage dynamique fort et orienté objet. L'écriture de ce langage d'origine japonaise a débuté en 1993 et est dirigée par différents principes :&lt;br /&gt;&lt;/span&gt; &lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;span style="font-family:georgia;"&gt;En Ruby, &lt;/span&gt;&lt;b style="font-family: georgia;"&gt;toute donnée est un objet&lt;/b&gt;&lt;span style="font-family:georgia;"&gt;, et toute fonction est une méthode (une méthode étant elle même un objet...) : il n'existe pas de type primitif comme dans certains autres langages.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;pre style="color: rgb(0, 0, 153);"&gt;irb(main):001:0&gt; 1.class&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;=&gt; Fixnum&lt;/span&gt;&lt;br /&gt;irb(main):002:0&gt; Fixnum.class&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;=&gt; Class&lt;/span&gt;&lt;br /&gt;irb(main):003:0&gt; Class.class&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;=&gt; Class&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;span style="font-family:georgia;"&gt;Ruby est &lt;/span&gt;&lt;b style="font-family: georgia;"&gt;dynamique et flexible&lt;/b&gt;&lt;span style="font-family:georgia;"&gt; : possibilité de modifier le code à l'exécution, et/ou de redéfinir son implémentation de base.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;pre style="color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;# Exemple de modification du code natif&lt;/span&gt; &lt;span style="color: rgb(51, 204, 0);"&gt;# en cours d'execution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;a = 1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;puts a.class&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#=&gt;Fixnum&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;# to_s : methode native de conversion en String&lt;/span&gt;&lt;br /&gt;puts a.to_s&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#=&gt;"1"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;# Modification de to_s&lt;/span&gt;&lt;br /&gt;class Fixnum&lt;br /&gt;&lt;/span&gt;    &lt;span class="meta meta_paragraph meta_paragraph_text"&gt;def to_s&lt;br /&gt;&lt;/span&gt;        &lt;span class="meta meta_paragraph meta_paragraph_text"&gt;"Huhuhu !"&lt;br /&gt;&lt;/span&gt;    &lt;span class="meta meta_paragraph meta_paragraph_text"&gt;end&lt;br /&gt;&lt;/span&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;end&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;puts a.to_s&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#=&gt;"Huhuhu !"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;b&gt;Le principe de moindre surprise&lt;/b&gt; veut que le développeur (expérimenté, ou venant d'un autre langage) soit le moins surpris/dépaysé/perturbé possible par la syntaxe ou les mots clés de Ruby.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;b&gt;"Convention plutôt que configuration."&lt;/b&gt; Ruby favorise ce concept, très repris dans certaines applications du langage, dont Rails.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;Ruby est à comparer à d'autres langages dynamiques interprétés, dont : Python, Groovy, PHP, Io, Perl et Scheme, entre autres.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Pourquoi Ruby ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;b&gt;Quelques avantages :&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Entièrement objet, mais autorise le procédural, et dans une certaine mesure inspiré du fonctionnel. &lt;b&gt;Le développeur est&lt;/b&gt; donc &lt;b&gt;libre&lt;/b&gt;. De même il y a "&lt;b&gt;Plusieurs façons de faire la même chose&lt;/b&gt;". Cela ne veut pas dire pour autant que toutes se vaillent.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Le core et l'API standard&lt;/b&gt; fournissent tout le nécessaire pour débuter (et continuer !) : threads, benchmark, gestion d'exceptions, parseurs...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Grandes possibilités de métaprogrammation.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;&lt;b&gt;Différentes implémentations&lt;/b&gt; du langage sont disponibles : &lt;a href="http://www.blogger.com/%3Ehttp://www.ruby-lang.org/fr/about/"&gt;MRI&lt;/a&gt; pour la principale en C, mais aussi &lt;a href="http://jruby.codehaus.org/%22"&gt;JRuby&lt;/a&gt; (en Java, pour la JVM), &lt;a href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt; (pour la plate-forme .Net), &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt; (en Ruby) et dernièrement &lt;a href="http://ruby.gemstone.com/"&gt;MagLev&lt;/a&gt;, et quelques autres.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;La &lt;b&gt;prise en main&lt;/b&gt; est &lt;b&gt;généralement rapide&lt;/b&gt; pour quelqu'un ayant déjà de premières bases en programmation et en POO.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;Contrairement à ce qu'on peut souvent entendre, la &lt;b&gt;&lt;a href="http://www.ruby-doc.org/"&gt;documentation&lt;/a&gt;&lt;/b&gt; du coeur et des librairies standards est bonne et claire. &lt;b&gt;Les ouvrages&lt;/b&gt; traitant du langage sont également assez nombreux, et parfois de très bonne qualité. Notamment : &lt;a href="http://poignantguide.net/ruby/"&gt;Why's (Poignant) Guide to Ruby&lt;/a&gt;, le &lt;a href="http://ruby-doc.org/docs/ProgrammingRuby/"&gt;Pickaxe&lt;/a&gt;, &lt;a href="http://www.amazon.fr/Ruby-par-lexemple-Lucas-Carlson/dp/2841773477"&gt;Ruby par l'Exemple&lt;/a&gt;, &lt;a href="http://www.amazon.com/Design-Patterns-Ruby-Addison-Wesley-Professional/dp/0321490452"&gt;Design Patterns in Ruby&lt;/a&gt;...&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;&lt;b&gt;Outils associés&lt;/b&gt; : TextMate (pour MacOS), Aptana RadRails (pour Eclipse ?), RDoc (génération automatique de documentation), RubyGems (gestionnaire de packages, appelés "gem" en Ruby), etc...&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;&lt;b&gt;Communauté&lt;/b&gt; importante et active : &lt;a href="http://rubyforge.org/"&gt;RubyForge&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;De nombreuses &lt;b&gt;gems, portages et librairies&lt;/b&gt; de qualité pour le web (Rails, Merb, Ramaze, Camping...), pour la GUI (GTK, WxWidgets, FOX, Shoes, tk...), pour les sciences (BioRuby, LaPack...)...&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;&lt;b&gt;&lt;br /&gt;Et quelques (malheureux) défauts : &lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"&gt;&lt;ul&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;D'abord, &lt;b&gt;les performances&lt;/b&gt; en terme de vitesse d'exécution sont assez mauvaises pour un langage de ce type. A relativiser cependant : les performances sont rarement critiques pour un langage de ce type d'une part, et d'autre part, les améliorations sont régulières sur chacune des implémentations du langage (avec une certaine compétition qui favorise les progrès).&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;Manque de &lt;b&gt;sécurité&lt;/b&gt; sur certains points : peu de warnings, &lt;i&gt;constantes pas constantes&lt;/i&gt;... Ceci est principalement dû à la grande liberté du codeur.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;Métaprogrammation riche, mais incomplète (&lt;a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html%3C/a%3E%3C/li%3E%3C/ul%3E%3C/span%3E"&gt;à comparer à Io pour l'introspection/réflexion notamment).&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="font-family: georgia;"&gt;&lt;a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html%3C/a%3E%3C/li%3E%3C/ul%3E%3C/span%3E"&gt;&lt;b&gt;Communauté&lt;/b&gt; très (trop ?) orientée Rails et web. Très anglophone également.&lt;/a&gt;&lt;/li&gt;&lt;a style="font-family: georgia;" href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html%3C/a%3E%3C/li%3E%3C/ul%3E%3C/span%3E"&gt;&lt;br /&gt;&lt;/a&gt;&lt;li style="font-family: georgia;"&gt;&lt;a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html%3C/a%3E%3C/li%3E%3C/ul%3E%3C/span%3E"&gt;Gestion perfectible des &lt;/a&gt;&lt;a href="http://blog.blainebuxton.com/2008/06/too-complex.html"&gt;blocks&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;Certaines parties des librairies standards contestables (&lt;i&gt;Math&lt;/i&gt; et &lt;i&gt;Matrix&lt;/i&gt; entre autres).&lt;/li&gt;&lt;br /&gt;&lt;li style="font-family: georgia;"&gt;Langage "&lt;b&gt;non-pur&lt;/b&gt;" : à comparer à Io, Smalltalk ou Scheme (encore que le Scheme ne soit peut-être pas "purement" fonctionnel...). Ici encore, c'est surtout une conséquence de la liberté du programmeur. Et en conséquence, la relative facilité pour commencer à coder en Ruby peut donner de &lt;b&gt;mauvaises habitudes aux débutants&lt;/b&gt; (ou l'impression d'avoir rapidement fait le tour...) ; on le constate régulièrement dans des codes pour Rails ou RPG Maker XP.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="meta meta_paragraph meta_paragraph_text"  style="font-family:georgia;"&gt;Ah ! Et dernier avantage du langage : son créateur est aussi un grand comique ^^&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2162/1910968816_d077eb3a40.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 411px; height: 500px;" src="http://farm3.static.flickr.com/2162/1910968816_d077eb3a40.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-459758097210473521?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/459758097210473521/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=459758097210473521' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/459758097210473521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/459758097210473521'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/10/pourquoi-utiliser-ruby.html' title='Pourquoi utiliser Ruby ?'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_nJatC71XBiI/RzeFlvDXoyI/AAAAAAAAAAg/XCkw4vexxmQ/s72-c/old_logo.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-6274243844198831249</id><published>2008-09-23T21:50:00.006+02:00</published><updated>2008-09-23T23:15:06.968+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='proce55ing'/><title type='text'>Une tortue avec Processing</title><content type='html'>&lt;div style="text-align: justify;"&gt;J'ai découvert récemment &lt;a style="font-weight: bold;" href="http://processing.org/"&gt;Processing&lt;/a&gt; (parfois écrit Proce55ing), un langage de programmation/environnement pensé pour des réalisations "artistiques" : images, animations, sons et 'interactions'.&lt;br /&gt;&lt;br /&gt;Basé sur le Java, la syntaxe semble assez proche du Javascript, assez concise et simple. Le typage est statique en revanche. Dans l'ensemble, c'est plutôt bien fait : la prise en main se fait en quelques petits essais... Par exemple :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nJatC71XBiI/SNlN4QNtBbI/AAAAAAAAATg/nrgaGePKkR8/s1600-h/opacite.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nJatC71XBiI/SNlN4QNtBbI/AAAAAAAAATg/nrgaGePKkR8/s320/opacite.PNG" alt="" id="BLOGGER_PHOTO_ID_5249312469497480626" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;Exemple&lt;/span&gt;&lt;span style="font-style: italic;"&gt; (&lt;a href="http://pastie.org/277984"&gt;Le code&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Pour information, cet environnement est disponible sous toute plateforme, et en diverses implémentation (&lt;a href="http://fr.wikipedia.org/wiki/Processing.js"&gt;Javascript&lt;/a&gt;, &lt;a href="http://github.com/jashkenas/ruby-processing/wikis"&gt;Ruby&lt;/a&gt;...). Pour avoir un peu joué avec &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt;, je retrouve là une bonne partie de ce qui a inspiré _Why pour sa conception... L'un des côtés intéressant, outre l'environnement vraiment simplissime, c'est l'assez grand nombre de &lt;a href="file:///C:/processing-0148/reference/libraries/index.html"&gt;bibliothèques&lt;/a&gt; (3D, traitement du son et du signal, XML, Vidéo, PDF...) même si elles sont parfois un peu "&lt;span style="font-style: italic;"&gt;orientée Mac&lt;/span&gt;" (QuickTime entre autre...). Notamment, &lt;a href="http://www.ecole-art-aix.fr/article412.html"&gt;Arduino et Wiring&lt;/a&gt; dans l'interfaçage physique, me paraissent particulièrement intéressants : avec un matos de base relativement abordable (à partir de 20€ pour les cartes), les possibilités sont très grandes... (Je vous laisse chercher.)&lt;br /&gt;&lt;br /&gt;Allez, un petit code rigolo pour illustrer :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Turtle :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;J'ai essayé de faire une petite version, assez simplifiée, du langage &lt;a href="http://fr.wikipedia.org/wiki/Logo_%28langage%29"&gt;Logo&lt;/a&gt; (langage de programmation où l'on dessine avec une tortue).&lt;br /&gt;&lt;br /&gt;Le "coeur" est implémenté dans un premier fichier "&lt;a style="font-family: courier new;" href="http://pastie.org/277987"&gt;turtle_lib.pde&lt;/a&gt;".&lt;br /&gt;La méthode &lt;span style="font-family: courier new;"&gt;setup()&lt;/span&gt;, comme son nom l'indique, est une méthode d'initialisation qui est systématiquement appelée (si existante) par Processing avant la méthode principale. Elle ne peut être rappelée par la suite. La fonction &lt;span style="font-family: courier new;"&gt;noLoop()&lt;/span&gt; indique à l'interpréteur que les instructions qui seront données par la suite n'auront pas à être répétées (par défaut, le contenu de la méthode &lt;span style="font-family: courier new;"&gt;draw()&lt;/span&gt; est exécuté de manière cyclique, notamment pour les animations et les captions diverses : souris, clic, etc... Ici, ceci est inutile et gênant).&lt;br /&gt;Les méthodes suivantes sont les méthodes de base du Logo : &lt;span style="font-family: courier new;"&gt;move&lt;/span&gt; pour avancer le crayon d'un nombre donné de pixels, &lt;span style="font-family: courier new;"&gt;turn&lt;/span&gt; pour changer sa direction, &lt;span style="font-family: courier new;"&gt;changeColor&lt;/span&gt; pour changer sa couleur et son opacité, &lt;span style="font-family: courier new;"&gt;raisePen&lt;/span&gt; et &lt;span style="font-family: courier new;"&gt;putPen&lt;/span&gt; pour le lever le crayon (celui-ci n'écrit donc plus lorsqu'on le déplace) et le (re)poser, respectivement.&lt;br /&gt;&lt;br /&gt;Voici un petit exemple d'utilisation : les instructions se trouvent dans la méthode draw() qui constitue la méthode "principale" de tout programme Processing.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nJatC71XBiI/SNlYIuYvyAI/AAAAAAAAATo/c9Eooo5kvAw/s1600-h/turtle_ex2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_nJatC71XBiI/SNlYIuYvyAI/AAAAAAAAATo/c9Eooo5kvAw/s320/turtle_ex2.PNG" alt="" id="BLOGGER_PHOTO_ID_5249323747591047170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Exemple de la tortue (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://pastie.org/278025"&gt;turtle_ex.pde&lt;/a&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Non, ce n'est pas très joli... mais c'est de la faute à la tortue !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Références : &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://processing.org/"&gt;Processing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ecole-art-aix.fr/rubrique81.html"&gt;Tutoriel&lt;/a&gt; de l'école des Arts d'Aix-en-Provence&lt;/li&gt;&lt;li&gt;&lt;a href="http://processing.org/reference/index.html"&gt;Doc&lt;/a&gt; de référence du langage.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wiring.org.co/"&gt;Wiring&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Dans le même genre...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; (Ruby)&lt;/li&gt;&lt;li&gt;&lt;a href="http://nodebox.net/code/index.php/Home"&gt;Nodebox&lt;/a&gt; (Python / MacOS)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.contextfreeart.org/"&gt;ContextFree&lt;/a&gt; ("proche" du C)&lt;/li&gt;&lt;li&gt;Et bien d'&lt;a href="http://www.artsoftware.org/wiki/index.php/Main_Page"&gt;autres&lt;/a&gt;...&lt;/li&gt;&lt;/ul&gt;Amusez-vous bien !&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-6274243844198831249?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/6274243844198831249/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=6274243844198831249' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6274243844198831249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6274243844198831249'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/09/une-tortue-avec-processing.html' title='Une tortue avec Processing'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nJatC71XBiI/SNlN4QNtBbI/AAAAAAAAATg/nrgaGePKkR8/s72-c/opacite.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1588938318031456100</id><published>2008-09-14T22:09:00.004+02:00</published><updated>2008-09-14T22:36:12.658+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><title type='text'>Se faire plaisir pour la rentrée...</title><content type='html'>&lt;div style="text-align: justify;"&gt;Parce que parfois, se faire plaisir... ça fait plaisir...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41g%2BinqP1PL._SL500_AA280_.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 280px;" src="http://ecx.images-amazon.com/images/I/41g%2BinqP1PL._SL500_AA280_.jpg" alt="" border="0" /&gt;&lt;/a&gt;Ceci est un &lt;a style="font-weight: bold;" href="http://www.amazon.fr/gp/product/B000FNUF8O/ref=s9subs_c2_21_img2-rfc_p-frt_g1?pf_rd_m=A1X6FK5RDHNB96&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=1A7RZJWYHF392MWDF7W6&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=218420791&amp;amp;pf_rd_i=405320"&gt;PicooZ&lt;/a&gt; : un tout petit hélicoptère télécommandé. C'est pas très cher, assez chaud à maîtriser, sans risque et franchement marrant... &lt;a href="http://www.picooz.fr/index.php?"&gt;Un blog&lt;/a&gt; avec plein de ressources, vidéos, tricks et news sur ces petits machinos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.trictrac.net/jeux/centre/imagerie/boites/4449_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 176px; height: 250px;" src="http://www.trictrac.net/jeux/centre/imagerie/boites/4449_1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tiens, je crois que je n'avais pas encore parlé de jeu de plateau ici... &lt;a style="font-weight: bold;" href="http://www.trictrac.net/index.php3?id=jeux&amp;amp;rub=detail&amp;amp;inf=detail&amp;amp;jeu=4449"&gt;Roma&lt;/a&gt; de Stefan Feld (en VF) est un jeu de carte avec dés pour 2 joueurs dans le style "stratégie conviviale" : dans la lignée de Citadelle, il associe des aspects tactiques assez simples mais parfois vicieux avec une part relativement importante de hasard qui garde le jeu assez équilibré, le tout avec des parties durant environ 30 minutes. De façon assez surprenante (pour moi) la part de chance dans ce jeu ne me paraît pas trop gênante par rapport à d'autres (Colons de Catane et Risk, entre autre) où elle peut aisément fusiller complètement une stratégie en quelques mauvaises passes. Bref, un bon petit jeu dans la tradition allemande pour 2.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nJatC71XBiI/SM1z8wm2ihI/AAAAAAAAATY/nqh_yGQKHiE/s1600-h/BBKing_one_kind_favor.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_nJatC71XBiI/SM1z8wm2ihI/AAAAAAAAATY/nqh_yGQKHiE/s320/BBKing_one_kind_favor.jpg" alt="" id="BLOGGER_PHOTO_ID_5245976628633700882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Conseillé par &lt;a href="http://lefty-chronicles.blogspot.com/"&gt;Lefty&lt;/a&gt;, le dernier BB King, &lt;a style="font-weight: bold;" href="http://www.bbking.com/discography/detail.aspx/pid/1494"&gt;One Kind Favor&lt;/a&gt;, est un petit bijou : reprenant de bons vieux classiques de manière elle aussi classique (et peut-être limite jazzy sur les bords pour certains morceaux). On retrouve vraiment l'essence du Blues avec une combinaison chant + guitare parfaite. Un très bon album (&lt;a href="http://lefty-chronicles.blogspot.com/2008/09/riley-b-king.html"&gt;article de Lefty&lt;/a&gt; sur celui-ci).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1588938318031456100?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1588938318031456100/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1588938318031456100' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1588938318031456100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1588938318031456100'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/09/se-faire-plaisir-pour-la-rentre.html' title='Se faire plaisir pour la rentrée...'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nJatC71XBiI/SM1z8wm2ihI/AAAAAAAAATY/nqh_yGQKHiE/s72-c/BBKing_one_kind_favor.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-902411434620534720</id><published>2008-09-14T21:30:00.001+02:00</published><updated>2008-09-14T21:39:06.687+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Ruby : Renommer un ensemble de fichiers</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img src="http://lh3.ggpht.com/sobeTBT/Rzi9M_DXo0I/AAAAAAAAABA/NrurqYDiv18/ruby_icone.jpg" style="margin: 10px 10px 0pt 0pt; float: left;" title="Ruby" alt="Logo Ruby" /&gt; Juste un petit code pour renommer un ensemble de fichiers. Sous Unix, un petit shell serait sans doute suffisant, mais étant sous Windows à la maison et n'aimant pas des masses le Batch, voici ce que ça pourrait donner... Dans cet exemple, on associe à &lt;span style="font-family: Courier;"&gt;d&lt;/span&gt; le répertoire dans lequel on souhaite renommer les fichiers dont le nom commence par  "&lt;span style="font-family: Courier;"&gt;PICTURE_&lt;/span&gt;" (sortie d'appareil photo dans mon cas) en "&lt;span style="font-family: Courier;"&gt;starpics_000X&lt;/span&gt;" avec &lt;span style="font-family: Courier;"&gt;X&lt;/span&gt; s'incrémentant.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51); font-family: monospace;"&gt;&lt;br /&gt;d = Dir.&lt;span style="font-weight: bold; font-family: monospace; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;(&lt;span style="font-weight: normal; font-family: monospace; font-style: normal; color: rgb(180, 180, 255); background-color: rgb(17, 34, 51);"&gt;"C:/Documents and Settings/utilisateur/Photos/Star"&lt;/span&gt;)&lt;br /&gt;Dir.chdir(&lt;span style="font-weight: normal; font-family: monospace; font-style: normal; color: rgb(180, 180, 255); background-color: rgb(17, 34, 51);"&gt;"C:/Documents and Settings/utilisateur/Photos/Star"&lt;/span&gt;)&lt;br /&gt;i = 1&lt;br /&gt;d.&lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt; &lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;do&lt;/span&gt; |file|&lt;br /&gt;  &lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; file.&lt;span style="font-weight: bold; font-family: monospace; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);"&gt;to_s&lt;/span&gt;[0..7] == &lt;span style="font-weight: normal; font-family: monospace; font-style: normal; color: rgb(180, 180, 255); background-color: rgb(17, 34, 51);"&gt;"PICTURE_"&lt;/span&gt; &lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;then&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold; font-family: monospace; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);"&gt;File&lt;/span&gt;.rename(file.&lt;span style="font-weight: bold; font-family: monospace; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);"&gt;to_s&lt;/span&gt;, &lt;span style="font-weight: normal; font-family: monospace; font-style: normal; color: rgb(180, 180, 255); background-color: rgb(17, 34, 51);"&gt;"starpics_000#{i}.jpg"&lt;/span&gt;)&lt;br /&gt;    i += 1&lt;br /&gt;  &lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-family: monospace; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Rien de bien méchant dans ce court code. Quelques remarques cependant : on remarque que même sous Windows, les séparateurs dans le chemin du répertoire est un slash et non pas un anti-slash... Il me semblait qu'il y avait une méthode de base pour faire cette conversion un peu pénible mais je ne l'ai pas retrouvée... Une chose un peu pénible avec cette partie du core de Ruby, sur les fichiers et répertoires, c'est que c'est assez peu homogène : ici, on itère sur les fichiers grâce à la méthode d'instance &lt;span style="font-family: Courier;"&gt;each&lt;/span&gt; de la classe &lt;span style="font-family: Courier;"&gt;Dir&lt;/span&gt; (Directory), on change le répertoire courant grâce à la méthode de classe &lt;span style="font-family: Courier;"&gt;chdir&lt;/span&gt;, mais la méthode de renommage de fichier est une méthode de classe ! Pourquoi pas une méthode d'instance sur sa cible ?&lt;br /&gt;&lt;br /&gt;Au passage, il est possible de renommer plusieurs fichiers en même temps sous Windows via l'explorateur : les sélectionner puis faire &lt;span style="font-family: Courier; font-weight: bold;"&gt;F2&lt;/span&gt;. On en renomme un, les autres prennent le même nom, suivi de "&lt;span style="font-family: Courier;"&gt; (X)&lt;/span&gt;" avec &lt;span style="font-family: Courier;"&gt;X&lt;/span&gt; s'incrémentant. La beauté de Windows ? Des anti-slashs dans les chemins et surtout de superbes espaces et parenthèses dans les noms de fichiers...&lt;br /&gt;&lt;br /&gt;Un bon tutoriel sur Ruby pour la partie &lt;a style="font-weight: bold;" href="http://pbnaigeon.developpez.com/tutoriel/ruby/premiers-pas-avec-ruby/#LVIII"&gt;"Manipulation de fichiers"&lt;/a&gt;, par JB Naigeon (:fr).&lt;br /&gt;&lt;/div&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-902411434620534720?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/902411434620534720/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=902411434620534720' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/902411434620534720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/902411434620534720'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/09/ruby-renommer-un-ensemble-de-fichiers.html' title='Ruby : Renommer un ensemble de fichiers'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/sobeTBT/Rzi9M_DXo0I/AAAAAAAAABA/NrurqYDiv18/s72-c/ruby_icone.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3894307182773496441</id><published>2008-09-02T22:09:00.010+02:00</published><updated>2008-09-03T00:35:53.201+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Essai de Google Chrome en Live !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google.com/chrome/intl/fr/images/logo_sm.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px;" src="http://www.google.com/chrome/intl/fr/images/logo_sm.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Après l'&lt;a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html"&gt;annonce&lt;/a&gt; hier de sa sortie imminente, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Google Chrome&lt;/span&gt;, le navigateur web made in Google, est disponible depuis quelques (petites) heures en téléchargement (&lt;a href="http://www.google.com/chrome"&gt;ici&lt;/a&gt;). Le géant du web diffusait déjà aujourd'hui cette &lt;a href="http://www.google.com/googlebooks/chrome/index.html"&gt;BD&lt;/a&gt; (en anglais), expliquant par&lt;/div&gt;&lt;div style="text-align: justify;"&gt; la voix de ses développeurs l'intérêt de ce logiciel et détaillant techniquement (parfois de manière assez poussée !) ses caractéristiques diverses.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Après mon &lt;a href="http://sobe-session.blogspot.com/2008/08/essai-de-flock-en-live.html"&gt;dernier article&lt;/a&gt; sur le navigateur orienté social Flock, je ne résiste pas à vous refaire le coup du &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;post écrit en live depuis ce nouveau browser&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;De l'importance de la première impression...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;img src="http://blogs.pcworld.com/staffblog/archives/google_chrome_screen_03.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" border="0" alt="" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ce qui saute aux yeux à l'ouverture du soft, c'est la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;sobriété et la clarté de l'interface&lt;/span&gt;. Comme sur la plupart des applications Google (je pense surtout à Gmail et Google Reader), c'est une réussite : du bleu clair et du blanc, des icônes claires et populaires, etc... Le design de l'interface est entièrement tourné vers l'onglet, et non pas vers la fenêtre. Pour celle-ci, on oscille entre un visuel rappelant la dernière version de GTK, et l'interface de Windows Vista... pour le peu qu'on la remarque ! En effet, et comme annoncé, ce sont les onglets qui gouvernent ici, et donc, ceux-ci atteignent le haut de l'écran, un peu comme en mode plein écran sur d'autres navigateurs.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La barre principale est minimaliste, dans un style rappelant assez Safari : 4 boutons, la barre d'adresse et 2 icônes de menu déroulant ("contrôler la page actuelle" et "personnaliser et contrôler Google Chrome"). Même la barre de favori en dessous peut être enlevée (on y retrouve en coin le dossier des favoris sous forme de menu déroulant). Tout  à manifestement été fait pour que l'on oublie le navigateur lui même : clairement, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;on ne voit que sa page web&lt;/span&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Au niveau de l'affichage, c'est &lt;a href="http://fr.wikipedia.org/wiki/WebKit"&gt;WebKit&lt;/a&gt;, le moteur de rendu utilisé par Safari (et dérivé du KHTML de &lt;a href="http://fr.wikipedia.org/wiki/Konqueror"&gt;Konqueror&lt;/a&gt;) qui est utilisé. J'avoue être très agréablement surpris par les progrès de celui-ci... même si c'est un peu déstabilisant lorsqu'on est "trop" habitué au moteur &lt;a href="http://fr.wikipedia.org/wiki/Gecko_(moteur_de_rendu)"&gt;Gecko&lt;/a&gt; (employé par Firefox).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Oh, et un détail : il n'y a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;pas de panneau latéral&lt;/span&gt; !&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Vite vite ?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://data.fubiz.net/images/monza.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://data.fubiz.net/images/monza.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Au démarrage&lt;/span&gt;, Chrome va vite. Chez moi (c'est important), il est à priori plus rapide que Flock (équivalent à un Firefox 2 dernière version avec quelques extensions) et plus rapide que Firefox 3... Au &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;chargement&lt;/span&gt;, c'est assez difficilement mesurable à l'oeil nu, et surtout, ça me paraît plus "variable" qu'avec mes autres navigateurs (hormis peut-être Opera...) : sans doute un poil plus long, mais à faire vérifier par de &lt;span class="Apple-style-span" style="font-style: italic;"&gt;vraies&lt;/span&gt; mesures. Par contre, le navigateur est impressionnant pour le &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;javascript&lt;/span&gt; : Gmail et Google Reader (tiens des applis Google, comme par hasard...) sont extrêmement rapides (si vous n'êtes pas convaincus, à tester sur cet &lt;a href="http://esoteric.sange.fi/brainfuck/impl/interp/i.html"&gt;interpréteur online de Brainfuck&lt;/a&gt;... qui n'a pas été codé par Google...).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Au niveau de la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;consommation mémoire&lt;/span&gt;, chaque onglet est un processus séparé. Pour résumer pour les moins informaticiens d'entre nous, c'est à dire qu'ils se comportent comme étant chacun "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;un programme à part&lt;/span&gt;" : notamment, si l'un d'entre eux bugge, le programme dans son ensemble ainsi que les autres onglets continuent de fonctionner. Cela veut également dire que l'on peut surveiller la conso de chaque onglet : le programme propose un gestionnaire de tâches séparé de celui de l'OS ainsi qu'une page spéciale &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;about:memory&lt;/span&gt; afin de gérer sa consommation.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A titre purement indicatif, sur ma modeste bécane (avec les mêmes pages ouvertes bien sûr mais probablement avec des différences de cache) :&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Chrome : 131 M&lt;/li&gt;&lt;li&gt;Firefox 3 : 97 M&lt;/li&gt;&lt;li&gt;Flock 1.2.4 : 115 M&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chrome est donc encore &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;assez loin des efforts de Mozilla&lt;/span&gt; pour diminuer la consommation mémoire.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;J'ai par ailleurs l'"impression" que l'intégration du &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Flash&lt;/span&gt; est d'avantage réussi que dans mes autres navigateurs... Illusion d'optique ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Clarté et Opacité&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://data.fubiz.net/images/weblink.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://data.fubiz.net/images/weblink.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Parmi les exemples et fonctionnalités qui font la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;clarté&lt;/span&gt; de Chrome on a une barre d'état... inexistante : celle-ci apparaît uniquement au besoin, pendant le chargement d'une page ou lorsque l'on passe sur un lien. La barre d'adresse met également en relief le nom du site plutôt que l'adresse complète de la page courante. Les options sont également très claires. Et les principaux raccourcis de Firefox fonctionnent... La page d'acceuil est une sorte de Fast-Dial en mieux : il propose les pages les plus visitées par l'utilisateur mais aussi les favoris récents ou encore d'afficher l'historique : très bien conçu.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cependant, certaines fonctionnalités me paraissent d'un accès assez difficile, comme le gestionnaire de tâches, le passage en mode "navigation privée" ou encore le gestionnaire d'extensions/plug-ins (pas trouvé). Par certains côté, Chrome me rappelle beaucoup les produits Mac de par son "&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;opacité&lt;/span&gt;" sur les fonctions les moins employées par les utilisateurs (demandez donc à un &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Mac-User basique&lt;/span&gt; d'ouvrir un terminal et un éditeur de texte...).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Et Tic et Tac ?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;img src="http://data.fubiz.net/images/vote0.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" border="0" alt="" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fini le live, parlons éthique... Ou plutôt, posons-nous quelques questions...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Est-il &lt;a href="http://www.biologeek.com/2008/09/big-browser-sinvite-chez-vous/"&gt;raisonnable&lt;/a&gt; d'utiliser un navigateur produit par l'entreprise leader (incontestée) du web ?&lt;/li&gt;&lt;li&gt;Quel est l'intérêt pour Google de financer ce navigateur ?&lt;/li&gt;&lt;li&gt;Celui-ci intègrera-t-il une &lt;a href="http://www.silicon.fr/fr/news/2008/09/02/david_kadouch__google__chrome_est_un_environnement_de_travail_"&gt;forme de publicité&lt;/a&gt; ? (autre que pour la marque Google en elle-même)&lt;/li&gt;&lt;li&gt;Google finançant &lt;a href="http://standblog.org/blog/post/2008/09/02/A-propos-de-Google-Chrome-et-du-reste"&gt;la fondation Mozilla&lt;/a&gt;, qu'en est-il de l'&lt;a href="http://www.silicon.fr/fr/news/2008/09/02/google_prolonge_de_trois_ans_son_accord_avec_mozilla"&gt;avenir des relations entre ces 2 entités&lt;/a&gt; ?&lt;/li&gt;&lt;li&gt;Faut-il craindre l'avènement du &lt;a href="http://www.biologeek.com/2008/09/big-browser-sinvite-chez-vous/"&gt;Big Browser&lt;/a&gt; ?&lt;/li&gt;&lt;li&gt;Si Google Chrome est open-source, n'est-ce pas en partie pour favoriser l'adoption des technologies "Google-made" par les autres grands acteurs du &lt;a href="http://blog.headius.com/2008/09/few-thoughts-on-chrome.html"&gt;monde libre&lt;/a&gt; (Mozilla entre autres) ?&lt;/li&gt;&lt;li&gt;Quid du service de mise à jour de ce navigateur ? (élément de sécurité critique)&lt;/li&gt;&lt;li&gt;Quel sera l'impact de cette nouveauté sur le marché des navigateurs web ?&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.silicon.fr/fr/news/2008/09/02/client_google_chrome_ou_microsoft__un_pari_pour_les_entreprises__"&gt;Qui vise Google&lt;/a&gt; ? Microsoft et/ou Mozilla ? (et/ou Apple ?)&lt;/li&gt;&lt;li&gt;Chrome ne sera-t-il que le navigateur d'Adroid ? (pour téléphones portables)&lt;/li&gt;&lt;li&gt;Pourquoi Chrome n'est-il disponible &lt;a href="http://jehaisleprintemps.net/blog/fr/2008/09/02/un-chrome-qui-besoin-de-polish/"&gt;que sous Windows&lt;/a&gt; !!!? (pour l'instant...)&lt;/li&gt;&lt;li&gt;Où sont les extensions et les plug-ins ?&lt;/li&gt;&lt;li&gt;Juste un &lt;a href="http://www.cuil.com/"&gt;buzz&lt;/a&gt; ?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A chacun de répondre, pronostiquer et choisir.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google Chrome est prometteur. Tous les paris ne sont pas encore gagnés pour lui, loin de là : performances, consommation mémoire, ouverture, sécurité et maintenance... Cependant, sa conception  relativement neuve (relativement car WebKit n'est pas non plus une révolution...), ses objectifs techniques et son originalité lui assureront inévitablement des adeptes. Cela suffira-t-il a changer significativement la donne dans le marché des navigateurs web, toujours (mais de moins en moins) dominé par Internet Explorer ? Rien n'est moins sûr... mais c'est Google, on ne sait jamais...&lt;/div&gt;&lt;div&gt;Par ailleurs, il soulève bien des interrogations, et même des inquiétudes, notamment dans le monde du libre. Sans sombrer dans la paranoïa et la suspicion pour toute société possédant plus de 4$, il est nécessaire de continuer à rester prudent vis-à-vis des pratiques de Google.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Ressources :&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/chrome"&gt;Télécharger Google Chrome&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/googlebooks/chrome/"&gt;BD d'introduction&lt;/a&gt; (:en)&lt;/li&gt;&lt;li&gt;&lt;a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html"&gt;Annonce de la sortie&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Note : Les images de cet article appartiennent à leurs propriétaires respectifs. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3894307182773496441?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3894307182773496441/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3894307182773496441' title='5 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3894307182773496441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3894307182773496441'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/09/essai-de-google-chrome-en-live.html' title='Essai de Google Chrome en Live !'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-6941351659468558720</id><published>2008-08-19T23:38:00.001+02:00</published><updated>2008-08-19T23:38:37.294+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Essai de Flock en Live !</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: Georgia;"&gt;Ceci est un essai de l'éditeur de post du navigateur web &lt;a href="http://www.flock.com"&gt;Flock&lt;/a&gt;. Celui-ci est un dérivé de Firefox orienté "&lt;span style="font-style: italic;"&gt;Social&lt;/span&gt;", c'est à dire disposant de nombreuses fonctionnalités pour les sites dits &lt;span style="font-style: italic;"&gt;sociaux&lt;/span&gt; ou &lt;span style="font-style: italic;"&gt;web 2.0&lt;/span&gt; tels que les blogs, réseaux sociaux, "&lt;span style="font-style: italic;"&gt;social bookmark&lt;/span&gt;", partage média et autres...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Commençons par ce que j'ai entre les doigts... &lt;span style="text-decoration: underline; font-weight: bold;"&gt;Je découvre avec vous, en live !&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia;"&gt;&lt;font size="4"&gt;L'Editeur&lt;/font&gt;&lt;/span&gt;&lt;span style="text-decoration: underline; font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="font-family: Georgia;" /&gt;&lt;img src="http://static.flickr.com/62/217867240_e54a53b55e_o.jpg" style="margin: 0pt auto 10px; display: block; text-align: center; width: 311px; height: 232px; font-family: Georgia;" title="Flock Girl" alt="Smile, it's Flock !" /&gt;&lt;br style="font-family: Georgia;" /&gt;&lt;div style="text-align: justify;"&gt;Déjà, l'éditeur (qui se présente dans une fenêtre séparée) propose d'ajouter un titre et un texte alternatif avec chaque image : c'est un bon point par rapport à l'éditeur de base de Blogger (mais pourquoi n'ont-ils pas fait de même pour les liens !!!?). Il comporte 3 onglets : "&lt;span style="font-style: italic;"&gt;Editor&lt;/span&gt;", "&lt;span style="font-style: italic;"&gt;Source&lt;/span&gt;" et "&lt;span style="font-style: italic;"&gt;Preview&lt;/span&gt;", consultables en permanence. L'aperçu est très pratique, par contre je regrette qu'il n'y ait pas de coloration syntaxique sur les sources...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://images.google.fr/images?imgsz=icon&amp;amp;gbv=2&amp;amp;hl=fr&amp;amp;q=lego&amp;amp;btnG=Recherche+d%27images" title=""&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" title="Solo lego via clipboard" alt="So what ?" src="http://tbn0.google.com/images?q=tbn:cqbCLtLUGuV5uM:http://img.jeuxvideo.fr/photo/00300076.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Cette dernière image a été ajouté directement via le "&lt;span style="font-style: italic;"&gt;Web Clipboard&lt;/span&gt;" : du drag-N-drop d'un objet quelconque (texte, image, lien...) vers celui-ci et cet objet devient accessible directement pour le blogger ou le mailler, ou l'insérer dans un post en cours de rédaction... Pas mal.&lt;br /&gt;&lt;br /&gt;Pas de récupération des tags (libellés) déjà utilisés depuis Blogger cependant. Dommage. Pas d'upload direct d'image depuis l'éditeur non plus... mais l'upload d'image constitue un outil à part entière du navigateur (voir plus loin).&lt;br /&gt;&lt;br /&gt;La gestion de différents comptes de blog sur différentes plate-forme semble assez aisée.&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;Le Navigateur&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Le navigateur en lui-même est assez agréable : très proche de Firefox évidemment, mais plus chargé, et avec un design de base assez moderne et ma foi agréable. Un grand nombre de favoris est déjà présent parmi les "applis sociales" : webmail divers, la plupart des plate-formes de blog, les réseaux (Facebook, etc...), les bookmarkers (Digg, Delicious, magnolia) et les médias (Youtube, Flickr, etc...). Peu d'add-on semblent cependant disponibles... rien pour &lt;a href="http://www.reddit.com/"&gt;reddit&lt;/a&gt; notamment.&lt;br /&gt;&lt;br /&gt;Les fonctionnalités ont l'air plus ou moins utiles : &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MyWorld &lt;/span&gt;semble être un compromis entre une page personnalisée (iGoogle ou NetVibes par exemple) et un Speed Dial à la Opera. &lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;People sidebar&lt;/span&gt; permet, après s'être loggé à son réseau social fav... bref, Facebook (ou Hi5 pour les Sud-Américains, c'est-à-dire pas pour les mecs de Blois...). Elle permet, donc d'avoir sous la main tous ses contacts : accès aux actions de base (message, wall, accès profil, etc...) et "flux média" (les photos quoi...). PLUS des notifiers pour les requêtes principales (mail, friend request, event, etc...). Pratique pour jeter un oeil sur ses contacts sans passer 2H sur site...&lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;Media Bar&lt;/span&gt;, elle, propose d'afficher en haut de page, sous forme de liste déroulante de vignettes, les "objets" en provenance d'un flux donné. Celui-ci peut être les images les plus vues de Flickr, une chaîne Youtube, les photos de ses amis sur Facebook, des images de news d'un site d'info ou autre. Pas mal.&lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;Feed Sidebar&lt;/span&gt; est un simple aggrégateur de flux RSS, Atom, etc... Plutôt sommaire, mais avec possibilité de créer des sous-dossier (par thème par exemple).&lt;br /&gt;&lt;br /&gt;Le bouton &lt;span style="font-weight: bold;"&gt;Webmail&lt;/span&gt; est comparable au bouton Gmail de la barre d'outil Google pour Firefox. Pas bien plus mais ça marche.&lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;barre de favoris&lt;/span&gt; est déjà bien pleine : Facebook, Digg, Flickr, Photobucket, Delicious, etc... Elle est cependant scindée en 2 avec une partie "online" proposant d'accéder à et/ou partager ses favoris en ligne grâce au service de Flock. Mwooof.&lt;br /&gt;&lt;br /&gt;Plus utile la barre &lt;span style="font-weight: bold;"&gt;Accounts and Services&lt;/span&gt; donne l'état de connexion/disponibilité de l'utilisateur sur les différentes applis supportées. Très utile en fait...&lt;br /&gt;&lt;br /&gt;Il y a également un bouton pour le &lt;span style="font-weight: bold;"&gt;Web Clipboard&lt;/span&gt; que j'ai utilisé tout à l'heure. En image, dans la barre latérale :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://lh4.ggpht.com/sobeTBT/SKs02awPXXI/AAAAAAAAASI/fCPSAjvmNVE/webclip.PNG" title="webclip.PNG” cannot be displayed, because it contains errors."&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; width: 377px; height: 267px;" title="Web Clipboard : Flock" alt="Web Clipboard : Flock" src="http://lh4.ggpht.com/sobeTBT/SKs02awPXXI/AAAAAAAAASI/fCPSAjvmNVE/webclip.PNG" border="0" /&gt;&lt;/a&gt;Enfin, il reste un bouton pour ouvrir l'&lt;span style="font-weight: bold;"&gt;éditeur de blog&lt;/span&gt; et un autre pour l'&lt;span style="font-weight: bold;"&gt;uploader de photos&lt;/span&gt; (Facebook, Picasa, Flickr, etc...). Extrêmement pratique dans les 2 cas.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;font size="4"&gt;Conclusion&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Sincèrement, je suis assez surpris. Flock est très agréable et d'une grande facilité de prise en main, pour peu que l'on soit habitué à Firefox (et encore...) : de nombreux petits messages d'aide (discrets) apparaissent au fur et à mesure de l'utilisation pour faciliter la configuration des différents comptes et autres options. &lt;span style="font-style: italic;"&gt;Painless&lt;/span&gt;. Au niveau navigation et options associées, c'est du Firefox, ni plus, ni moins. C'est clair, visuellement réussi, et assez ergonomique. Par ailleurs, l'installation se fait, "&lt;span style="font-style: italic;"&gt;évidemment&lt;/span&gt;", avec l'importation des données de votre autre (vos autres...) navigateurs.&lt;br /&gt;On peut trouver qu'il y a "trop" de choses useless. Par exemple, je n'utilise pas Digg, ni Flickr, ni un paquet de sites du genre : du coup beaucoup de raccourcis, et widgets me sont inutiles. Qu'à cela ne tienne, ils sont supprimables.&lt;br /&gt;Pour ce qui est de l'intérêt d'un tel navigateur par rapport à Firefox (ou Opera voire Safari)... La question se pose clairement, étant données la qualité et le degré de customisation de ce(s) navigateur(s). Cela dit, pour une utilisation très "sociale" du web, Flock me semble très adapté. Ses aspects gadgets sont le reflet même de ce type d'utilisation du web : à chacun son utilisation des blogs, des réseaux sociaux et du web en général.&lt;br /&gt;&lt;br /&gt;Liens : &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.flock.com/"&gt;Site officiel de Flock&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Web_2.0"&gt;Web 2.0&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-6941351659468558720?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/6941351659468558720/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=6941351659468558720' title='5 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6941351659468558720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6941351659468558720'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/essai-de-flock-en-live.html' title='Essai de Flock en Live !'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/sobeTBT/SKs02awPXXI/AAAAAAAAASI/fCPSAjvmNVE/s72-c/webclip.PNG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-5022161157174905187</id><published>2008-08-19T19:34:00.002+02:00</published><updated>2008-08-19T19:54:52.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Medicolor : le code</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nJatC71XBiI/SKsEbOmWFZI/AAAAAAAAARo/psHB6F-fJQs/s1600-h/cent_00.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 100px;" src="http://4.bp.blogspot.com/_nJatC71XBiI/SKsEbOmWFZI/AAAAAAAAARo/psHB6F-fJQs/s200/cent_00.PNG" alt="" id="BLOGGER_PHOTO_ID_5236283857570239890" border="0" /&gt;&lt;/a&gt;Je viens de me rendre compte que j'ai oublié de publier le code de &lt;span style="font-weight: bold;"&gt;Medicolor&lt;/span&gt; : mon petit programme fait avec Ruby et &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; générant les images de 2 articles précédents... Honte à moi ! Donc, basiquement, Medicolor est une petite appli manipulant les couleurs : à partir d'un pattern de départ (et les conditions aux limites associées), le programme moyenne à chaque itération (déclenchée par un simple clic dans la fenêtre) les couleurs de chaque disque présent avec celles de ses voisins.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pas clair ? Vous pouvez l'essayer à partir des sources (nécessite Ruby et Shoes version r751 ou suivante).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a style="font-weight: bold;" href="http://pastie.org/255801"&gt;Les sources&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;En ligne de commande : &lt;span style="font-family: courier new; font-weight: bold;"&gt;$&gt;shoes shoes_medicolor.rb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Le nom du fichier d'entrée (medicase_01.rb par exemple) peut être directement changé dans le require. Les conditions aux limites sont périodiques ou fixées, les points peuvent être également de couleur fixe (voir cas d'exemple avec les sources).&lt;br /&gt;&lt;br /&gt;Amusez vous bien !&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-5022161157174905187?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/5022161157174905187/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=5022161157174905187' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5022161157174905187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5022161157174905187'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/medicolor-le-code.html' title='Medicolor : le code'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nJatC71XBiI/SKsEbOmWFZI/AAAAAAAAARo/psHB6F-fJQs/s72-c/cent_00.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-4651139596571905017</id><published>2008-08-13T19:21:00.003+02:00</published><updated>2008-08-13T22:48:22.832+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='sobe session'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Tumblelog</title><content type='html'>&lt;div style="text-align: justify;"&gt;En général, j'essaie d'éviter de "&lt;a href="http://fr.wikipedia.org/wiki/Meta_%28prefixe%29"&gt;metablogger&lt;/a&gt;" (blogger au sujet de mon blog, ou du fait même de blogger). Mais une fois n'est pas coutume...&lt;br /&gt;&lt;br /&gt;Les quelques courageux qui suivent ce blog régulièrement auront sans doute constaté que malgré mes efforts, ma fréquence de publication a pour le moins "baissé" depuis quelques mois. Plus de travail, moins de temps libre, etc... Donc, moins de temps pour écrire des articles "corrects".&lt;br /&gt;Cependant, il y a une solution pour partager rapidement des liens, articles et infos intéressantes : un &lt;a href="http://fr.wikipedia.org/wiki/Tumblelog"&gt;tumblelog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sur le principe, un tumblelog est comparable à un blog, mais avec des billets très courts : de simples notes ou liens, en général sans commentaires. Entre la page de partage et le flux de liens, avec un contenu souvent plus divers qu'un blog classique. Il semblerait que le terme ait été introduit par &lt;a href="http://redhanded.hobix.com/inspect/tumbleloggingAssortedLarvae.html"&gt;Why The Lucky Stiff&lt;/a&gt;, hacker ruby populaire. Attention à ne pas confondre avec le &lt;a href="http://fr.wikipedia.org/wiki/Microblogging"&gt;Microblogging&lt;/a&gt; qui consiste à partager sous forme de courts tickets les instants passionnants de sa vie (cf. Twitter et autres sites buggés...).&lt;br /&gt;&lt;br /&gt;Et il se trouve que j'utilise la page de partage de Google Reader comme &lt;a href="http://www.google.com/reader/shared/18417123674913443552"&gt;Tumblelog à cette adresse&lt;/a&gt;, les derniers articles apparaissant dans la colonne de droite de cette page. Par rapport à ce blog, la fréquence de post est bien supérieure et les sujets plus variés (programmation bien sûr, mais aussi design, art, BD, jeux...).&lt;br /&gt;&lt;br /&gt;Pour le principe, j'ajoute ici une liste de tumbles et pages de partage que je suis, en vrac :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://rubyist.tumblr.com/"&gt;A Rubyist Railistic Adventure&lt;/a&gt; par Juixe (ruby, rails...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/reader/shared/user/05802634821126248076/state/com.google/broadcast"&gt;fr4nc1s0ud&lt;/a&gt;'s sharez items par B. Francisoud (programmation, web, cinéma, autre...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://coder.tumblr.com/"&gt;Happy Coder's Daily Digest&lt;/a&gt; par Juixe (programmation, web...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.janchipchase.com/"&gt;Future Perfect&lt;/a&gt; (photo, design, asie...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://lemonodor.tumblr.com/"&gt;Lemonodor Auxiliary&lt;/a&gt; par un homme faisant du LISP (photo, art, geek...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://pixelbot.stefdem.com/blog.php"&gt;PixelBot&lt;/a&gt; (pixel art...)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Au passage, j'en profite : j'ai "nettoyé" ma colonne de droite : plus de pub, moins de liens useless. J'ai également ajouté un bouton &lt;a href="http://fr.reddit.com/"&gt;reddit&lt;/a&gt; en bas d'article pour ceux qui utilisent cet outil (on en reparlera...). Bonne lecture.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-4651139596571905017?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/4651139596571905017/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=4651139596571905017' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/4651139596571905017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/4651139596571905017'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/tumblelog.html' title='Tumblelog'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-6043426526959694852</id><published>2008-08-06T23:00:00.004+02:00</published><updated>2008-08-07T19:54:53.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Classe Struct en Ruby</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/sobeTBT/Rzos9PDXo3I/AAAAAAAAABk/aHyBlWpg9r0/ruby_icone.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://lh6.ggpht.com/sobeTBT/Rzos9PDXo3I/AAAAAAAAABk/aHyBlWpg9r0/ruby_icone.jpg" alt="" border="0" /&gt;&lt;/a&gt;Je suis récemment tombé (par hasard, pour changer...) sur une classe de Ruby pour le moins rare : &lt;a href="http://www.ruby-doc.org/core/classes/Struct.html"&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;Struct&lt;/span&gt;&lt;/a&gt;. Basiquement, il s'agit d'une classe permettant d'implémenter rapidement des conteneurs simples, et fixés. Par rapport à un &lt;a href="http://www.ruby-doc.org/core/classes/Hash.html"&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;Hash&lt;/span&gt;&lt;/a&gt;, il n'est possible que de passer des symboles comme clefs, et il n'est pas permis d'ajouter de nouvelles clefs après déclaration. &lt;span style="font-weight: bold; font-family: courier new;"&gt;Struct&lt;/span&gt; possède également moins de méthodes que &lt;span style="font-weight: bold; font-family: courier new;"&gt;Hash&lt;/span&gt;, mais conserve les plus importantes (celles héritées d'&lt;a href="http://www.ruby-doc.org/core/classes/Enumerable.html"&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;Enumerable&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;J'avoue être assez surpris par l'existence de cette classe. D'une part, parce que je ne l'ai rencontrée dans aucun code Ruby. Jamais. Ensuite parce qu'elle semble assez peu intéressante par rapport à un hachage (hormis pour l'aspect "déclaré" et "fixé" de ses clefs). Enfin, parce qu'elle n'apporte pas à priori de meilleures performances qu'un hachage (car elle est implémentée avec... eh voui...).&lt;br /&gt;&lt;br /&gt;Deux liens sur cette classe :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Documentation &lt;a href="http://www.ruby-doc.org/core/classes/Struct.html"&gt;Struct&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nutrun.com/weblog/ruby-struct/"&gt;Article&lt;/a&gt; chez  NutRun&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Enfin, encore un côté surprenant, les clefs d'une structure ne semblent pas en être des attributs...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;Fiche = Struct.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;(&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:nom&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:prenom&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:adresse&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:phone&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Exemple d&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'&lt;/span&gt;initialisation&lt;br /&gt;&lt;/span&gt;roger = Fiche.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Dupont"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Roger"&lt;/span&gt;, \&lt;br /&gt;                  &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;/span&gt;3 rue des Lilas, \&lt;br /&gt;                  55555 Canardville&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;/span&gt;, \&lt;br /&gt;                  &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"0800555222"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;p roger&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; #struct Fiche nom=&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Dupont"&lt;/span&gt;, prenom=&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Roger"&lt;/span&gt;, &lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#        adresse=&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"3 rue des Lilas, 55555 Canardville"&lt;/span&gt;, &lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#        phone=&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"0800555222"&lt;/span&gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;chuck = Fiche.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;chuck.prenom = &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Chuck"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; chuck.prenom&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; Chuck&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Fiche&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; foo&lt;br /&gt;    &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@prenom&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; bar&lt;br /&gt;    &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; self.prenom&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;chuck.foo&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; nil&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;chuck.bar&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; Chuck&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-6043426526959694852?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/6043426526959694852/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=6043426526959694852' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6043426526959694852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/6043426526959694852'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/classe-struct-en-ruby.html' title='Classe Struct en Ruby'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/sobeTBT/Rzos9PDXo3I/AAAAAAAAABk/aHyBlWpg9r0/s72-c/ruby_icone.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-749296576098332413</id><published>2008-08-05T20:40:00.006+02:00</published><updated>2008-08-05T20:47:05.388+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><title type='text'>Medicolor : 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_nJatC71XBiI/SJie7U221HI/AAAAAAAAAQo/jb5QuOGBEHI/s1600-h/stars_00.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_nJatC71XBiI/SJie7U221HI/AAAAAAAAAQo/jb5QuOGBEHI/s320/stars_00.PNG" alt="" id="BLOGGER_PHOTO_ID_5231105709239096434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SJifGVEgbZI/AAAAAAAAAQw/U3fw-shrYV4/s1600-h/stars_01.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SJifGVEgbZI/AAAAAAAAAQw/U3fw-shrYV4/s320/stars_01.PNG" alt="" id="BLOGGER_PHOTO_ID_5231105898274909586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SJifQvhg_2I/AAAAAAAAAQ4/cZXN5TfiDFo/s1600-h/stars_02.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SJifQvhg_2I/AAAAAAAAAQ4/cZXN5TfiDFo/s320/stars_02.PNG" alt="" id="BLOGGER_PHOTO_ID_5231106077174595426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SJifo61ubnI/AAAAAAAAARA/m5SmDUJz8mU/s1600-h/stars_03.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SJifo61ubnI/AAAAAAAAARA/m5SmDUJz8mU/s320/stars_03.PNG" alt="" id="BLOGGER_PHOTO_ID_5231106492529012338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_nJatC71XBiI/SJif0USW-iI/AAAAAAAAARI/o6q-eQpGqpE/s1600-h/stars_15.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_nJatC71XBiI/SJif0USW-iI/AAAAAAAAARI/o6q-eQpGqpE/s320/stars_15.PNG" alt="" id="BLOGGER_PHOTO_ID_5231106688338557474" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-749296576098332413?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/749296576098332413/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=749296576098332413' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/749296576098332413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/749296576098332413'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/medicolor-2.html' title='Medicolor : 2'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_nJatC71XBiI/SJie7U221HI/AAAAAAAAAQo/jb5QuOGBEHI/s72-c/stars_00.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3638969013813034676</id><published>2008-08-04T22:48:00.009+02:00</published><updated>2008-08-04T22:59:29.453+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><title type='text'>Medicolor : 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SJdrkczS_WI/AAAAAAAAAPg/jraAd1b5jWI/s1600-h/dix_rand_00.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SJdrkczS_WI/AAAAAAAAAPg/jraAd1b5jWI/s320/dix_rand_00.PNG" alt="" id="BLOGGER_PHOTO_ID_5230767766164929890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SJdsHFcTgiI/AAAAAAAAAPw/yzT3urfUnAA/s1600-h/dix_rand_01.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SJdsHFcTgiI/AAAAAAAAAPw/yzT3urfUnAA/s320/dix_rand_01.PNG" alt="" id="BLOGGER_PHOTO_ID_5230768361189900834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SJdsxxo7cgI/AAAAAAAAAQI/NbXSumw8HUQ/s1600-h/dix_rand_02.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SJdsxxo7cgI/AAAAAAAAAQI/NbXSumw8HUQ/s320/dix_rand_02.PNG" alt="" id="BLOGGER_PHOTO_ID_5230769094608515586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SJdtAxM3t8I/AAAAAAAAAQQ/Na4Ml9itf3k/s1600-h/dix_rand_03.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SJdtAxM3t8I/AAAAAAAAAQQ/Na4Ml9itf3k/s320/dix_rand_03.PNG" alt="" id="BLOGGER_PHOTO_ID_5230769352188868546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SJdtR_LL00I/AAAAAAAAAQY/mbq9lWHJKKg/s1600-h/dix_rand_10.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SJdtR_LL00I/AAAAAAAAAQY/mbq9lWHJKKg/s320/dix_rand_10.PNG" alt="" id="BLOGGER_PHOTO_ID_5230769647997670210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_nJatC71XBiI/SJdtgEc8GBI/AAAAAAAAAQg/jnQYcjAEx7w/s1600-h/dix_rand_47.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_nJatC71XBiI/SJdtgEc8GBI/AAAAAAAAAQg/jnQYcjAEx7w/s320/dix_rand_47.PNG" alt="" id="BLOGGER_PHOTO_ID_5230769889932482578" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3638969013813034676?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3638969013813034676/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3638969013813034676' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3638969013813034676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3638969013813034676'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/08/medicolor-1.html' title='Medicolor : 1'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_nJatC71XBiI/SJdrkczS_WI/AAAAAAAAAPg/jraAd1b5jWI/s72-c/dix_rand_00.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-5480702958806059871</id><published>2008-07-28T22:34:00.005+02:00</published><updated>2008-07-28T23:00:51.419+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Forgotten Ruby methods</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/sobeTBT/Rzi9M_DXo0I/AAAAAAAAABA/NrurqYDiv18/ruby_icone.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://lh3.ggpht.com/sobeTBT/Rzi9M_DXo0I/AAAAAAAAABA/NrurqYDiv18/ruby_icone.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Ou plutôt les méthodes que  je n'utilise pas assez...&lt;/span&gt; Sur les tableaux, les chaînes de caractères et quelques autres petites choses très mignonnes  comme l'opérateur ternaire, l'affectation multiple (à consommer avec modération...) et le &lt;span style="font-family: courier new; font-weight: bold;"&gt;||&lt;/span&gt;. 21 autres choses très intéressantes dans &lt;a href="http://www.rubyinside.com/21-ruby-tricks-902.html"&gt;cet article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Petit mot sur la méthode &lt;span style="font-family: courier new; font-weight: bold;"&gt;extend&lt;/span&gt; : d'un point de vue POO, elle permet en quelque sorte "&lt;span style="font-style: italic;"&gt;d'instancier un module&lt;/span&gt;". Si une classe étend un module &lt;span style="font-weight: bold; font-family: courier new;"&gt;Mod&lt;/span&gt;, les "&lt;span style="font-style: italic;"&gt;méthodes d'instance&lt;/span&gt;" de celui-ci seront transmises à la classe en tant que méthode de classe. Si l'on étend &lt;span style="font-weight: bold; font-family: courier new;"&gt;Mod&lt;/span&gt; avec un simple objet (bon, d'accord, une classe est un objet... mon explication précédente reste valable.), celui-ci se comportera comme une instance de &lt;span style="font-weight: bold; font-family: courier new;"&gt;Mod&lt;/span&gt;, avec les méthodes qui vont avec... Deux bonnes sources sur le sujet : [&lt;a href="http://rubyscube.blogspot.com/2008/03/experimentations-avec-les-mixins.html"&gt;Ruby's Cube, :fr&lt;/a&gt;] et [&lt;a href="http://www.juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/"&gt;Juixe TechKnow, :en&lt;/a&gt;].&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;### Multiple affectation  and || ###&lt;br /&gt;&lt;/span&gt;a, b = nil, 10&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [nil, 10]&lt;br /&gt;&lt;/span&gt;a || b&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; 10&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;### On Arrays... ###&lt;br /&gt;&lt;/span&gt;a = [0,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"111"&lt;/span&gt;,2,3,3,3,3]&lt;br /&gt;a.&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"111"&lt;/span&gt;,2,3,3,3,3]&lt;br /&gt;&lt;/span&gt;a.delete 3&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; 3&lt;br /&gt;&lt;/span&gt;a&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"111"&lt;/span&gt;,2]&lt;br /&gt;&lt;/span&gt;a.delete_at 1&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"111"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;a&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,2]&lt;br /&gt;&lt;/span&gt;a.insert(1,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;,2]&lt;br /&gt;&lt;/span&gt;a += [3,4,5]&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;,2,3,4,5]&lt;br /&gt;&lt;/span&gt;a.inspect&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[0,\"1\",2,3,4,5]"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;a.map!{|v| (v.is_a? Numeric)? v &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;/span&gt; v.to_i}&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [0,1,2,3,4,5]&lt;br /&gt;&lt;/span&gt;a = a.join &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"-"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"0-1-2-3-4-5"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;a = a.split &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'-'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"0"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"2"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"3"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"4"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"5"&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;a | [&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"6"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"7"&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; [&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"0"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"1"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"2"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"3"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"4"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"5"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"6"&lt;/span&gt;, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"7"&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;### And Strings... ###&lt;br /&gt;&lt;/span&gt;str = &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"  trop d&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'espace tue l'&lt;/span&gt;espace...      "&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"  trop d&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'espace tue l'&lt;/span&gt;espace...      "&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;str = str.strip&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"trop d&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'espace tue l'&lt;/span&gt;espace..."&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;str.crypt &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Oz"&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Oz"&lt;/span&gt; est le &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'sel'&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Oz2SDpLQ4HL02"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;str.count &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"e"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; 5&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;### Finaly, the Object#extend method ###&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;module&lt;/span&gt; Mod&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; homerize&lt;br /&gt;        p &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Doh!"&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Simpson&lt;br /&gt;    extend Mod&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simpson.homerize&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Doh !"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; nil&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;bart = Simpson.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# bart can&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'&lt;/span&gt;t homerize, &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;unless&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;bart.extend Mod&lt;br /&gt;bart.homerize&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Doh !"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; nil&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-5480702958806059871?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/5480702958806059871/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=5480702958806059871' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5480702958806059871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5480702958806059871'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/forgotten-ruby-methods.html' title='Forgotten Ruby methods'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/sobeTBT/Rzi9M_DXo0I/AAAAAAAAABA/NrurqYDiv18/s72-c/ruby_icone.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-532274017630775135</id><published>2008-07-24T20:17:00.003+02:00</published><updated>2008-07-24T20:35:24.611+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Algorithme Rho de Pollard en Ruby</title><content type='html'>&lt;div style="text-align: justify;"&gt;L'&lt;a style="font-weight: bold;" href="http://fr.wikipedia.org/wiki/Algorithme_rho_de_Pollard"&gt;algorithme Rho de Pollard&lt;/a&gt; permet de décomposer un entier en son produit de facteurs premiers. Cet algorithme se base sur une fonction dite aléatoire &lt;span style="font-family: courier new; font-weight: bold;"&gt;f&lt;/span&gt;, permettant d'obtenir une suite cyclique : &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;xi+1 = f(xi) % n &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;avec &lt;span style="font-weight: bold;font-family:courier new;" &gt;n&lt;/span&gt; l'entier à décomposer.&lt;br /&gt;&lt;br /&gt;Attention, si :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;pgcd(|xi - x2i|, n) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;prend &lt;span style="font-weight: bold;font-family:courier new;" &gt;n&lt;/span&gt; pour valeur, l'algorithme produit une boucle infinie (il faudrait (y a qu'à...) alors changer la fonction &lt;span style="font-weight: bold;font-family:courier new;" &gt;f&lt;/span&gt; ou aller se faire cuire un steak de soja) : dans mon code, je lève une erreur, en l'occurrence.&lt;br /&gt;Sinon, beaucoup de récursion...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Code prime.rb :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Ruby 1.8.6 : &lt;span style="font-weight: bold;font-family:courier new;" &gt;$ prime.rb [integer]&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre  style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;def&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;pgcd&lt;/span&gt; m, n&lt;br /&gt;(n==0)? m &lt;span style="font-weight: bold; font-style: normal; color: rgb(255, 255, 81); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;:&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;pgcd&lt;/span&gt;(n, m%n)&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;def&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;f&lt;/span&gt; x, n&lt;br /&gt;(x**2 + 1) % n&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;def&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;x&lt;/span&gt; i, n&lt;br /&gt;(i==0)? 2 &lt;span style="font-weight: bold; font-style: normal; color: rgb(255, 255, 81); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;:&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;f&lt;/span&gt;(&lt;span style="color: rgb(255, 102, 0);"&gt;x&lt;/span&gt;(i-1,n), n)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;class&lt;/span&gt; &lt;span style="font-weight: bold; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;def&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;is_prime?&lt;/span&gt;&lt;br /&gt;    res = true&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;if&lt;/span&gt; self &lt; 2 then&lt;br /&gt;        res = false&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;for&lt;/span&gt; i &lt;span style="font-weight: bold; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;in&lt;/span&gt; 2..Math.&lt;span style="color: rgb(255, 102, 0);"&gt;sqrt&lt;/span&gt;(self).to_i&lt;br /&gt;            &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;if&lt;/span&gt; i.&lt;span style="color: rgb(255, 102, 0);"&gt;is_prime?&lt;/span&gt; and (self%i == 0) &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;then&lt;/span&gt;&lt;br /&gt;                res = false&lt;br /&gt;            &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;    res&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;def&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;pollard&lt;/span&gt; n&lt;br /&gt;r = []&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;if&lt;/span&gt; n.&lt;span style="color: rgb(255, 102, 0);"&gt;is_prime?&lt;/span&gt;&lt;br /&gt;    r.push n&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;elsif&lt;/span&gt; n != 1&lt;br /&gt;    i, p = 0, 1&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;while&lt;/span&gt; p == 1&lt;br /&gt;        i += 1&lt;br /&gt;        p = &lt;span style="color: rgb(255, 102, 0);"&gt;pgcd&lt;/span&gt;((&lt;span style="color: rgb(255, 102, 0);"&gt;x&lt;/span&gt;(i,n)-&lt;span style="color: rgb(255, 102, 0);"&gt;x&lt;/span&gt;(2*i,n)).abs, n)&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;raise&lt;/span&gt; &lt;span style="font-weight: normal; font-style: normal; color: rgb(180, 180, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;"Pollard Algorithm: Cycle FAIL"&lt;/span&gt; &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;if&lt;/span&gt; p==n&lt;br /&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;if&lt;/span&gt; p.&lt;span style="color: rgb(255, 102, 0);"&gt;is_prime?&lt;/span&gt; &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;then&lt;/span&gt;&lt;br /&gt;        r.push p&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;else&lt;/span&gt;&lt;br /&gt;        r.push &lt;span style="color: rgb(255, 102, 0);"&gt;pollard&lt;/span&gt;(p)&lt;br /&gt;    &lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    r.push &lt;span style="color: rgb(255, 102, 0);"&gt;pollard&lt;/span&gt;(n/p)&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;r.flatten!&lt;br /&gt;r&lt;br /&gt;&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;input = &lt;span style="font-weight: bold; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;ARGV&lt;/span&gt;[0].to_i&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;pollard&lt;/span&gt;(input).&lt;span style="font-weight: bolder; font-style: normal; color: rgb(54, 245, 255); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;each&lt;/span&gt; {|x| &lt;span style="font-weight: bold; font-style: normal; color: rgb(204, 0, 0); background-color: rgb(17, 34, 51);font-family:monospace;" &gt;puts&lt;/span&gt; x}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-532274017630775135?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/532274017630775135/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=532274017630775135' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/532274017630775135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/532274017630775135'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/algorithme-rho-de-pollard-en-ruby.html' title='Algorithme Rho de Pollard en Ruby'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7889404251347705589</id><published>2008-07-22T22:29:00.009+02:00</published><updated>2008-07-24T20:53:46.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Ruby : Plus ou Moins en moins de 100</title><content type='html'>&lt;div style="text-align: justify;"&gt;Suite à &lt;a href="http://enfranchisedmind.com/blog/2008/05/23/time-for-a-little-golf-number-guessing-game-in-ruby/"&gt;cet article rigolo&lt;/a&gt; (tiré d'un &lt;a href="http://enfranchisedmind.com/blog/"&gt;blog&lt;/a&gt; tout à fait intéressant au passage), essayons de faire le jeu du &lt;span style="font-weight: bold;"&gt;"Plus ou Moins"&lt;/span&gt;, en Ruby avec le moins de caractères possibles...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Code : &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-size: 50%; color: rgb(255, 0, 0);"&gt;n=(100*rand).to_i;loop{d=gets.to_i;(d==n)?(puts "bravo !";break):puts((d&gt;n)?"lower":"greater")}&lt;/pre&gt;&lt;br /&gt;Désolé, ça dépasse encore un poil... &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(ctrl ou pomme + molette)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;95 caractères donc... mais pas top lisible. Je regrette surtout que ce ne soit pas "vraiment" en une ligne (objectivement, là, il y en a 3), mais on ne peut pas tout avoir...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7889404251347705589?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7889404251347705589/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7889404251347705589' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7889404251347705589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7889404251347705589'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/ruby-plus-ou-moins-en-moins-de-100.html' title='Ruby : Plus ou Moins en moins de 100'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-762863063306675120</id><published>2008-07-17T22:34:00.012+02:00</published><updated>2008-07-18T00:20:52.873+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Dummydgets pour Shoes : Bulles</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SH-uDQbi4hI/AAAAAAAAAM8/6E1JrDNc92U/s1600-h/shoes-icon-blue.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 70px; height: 70px;" src="http://bp0.blogger.com/_nJatC71XBiI/SH-uDQbi4hI/AAAAAAAAAM8/6E1JrDNc92U/s320/shoes-icon-blue.png" alt="" id="BLOGGER_PHOTO_ID_5224085463746404882" border="0" /&gt;&lt;/a&gt;Allez hop, deux petits programmes profondément inutiles faits avec les pieds, pour &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt;. Dans ces deux là, j'utilise le bloc &lt;span style="font-weight: bold;font-family:courier new;" &gt;motion{}&lt;/span&gt; qui permet d'effectuer une action en fonction de la position courante du curseur. La syntaxe est la suivante :&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style="font-weight: bold;"&gt;motion&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;do&lt;/span&gt; |x,y|&lt;br /&gt; foo(x)&lt;br /&gt; bar(y)&lt;br /&gt; foobar(x,y)&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;    # etc...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Dès lors, le code contenu dans ce block (ici les méthodes &lt;span style="font-family:courier new;"&gt;foo&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;bar&lt;/span&gt; et &lt;span style="font-family:courier new;"&gt;foobar&lt;/span&gt;) sera exécuté dès que la position du curseur (désignée par &lt;span style="font-family:courier new;"&gt;x&lt;/span&gt; et &lt;span style="font-family:courier new;"&gt;y&lt;/span&gt;) change. Attention, l'axe Y est dirigé vers le bas (il serait plus rigoureux d'écrire &lt;span style="font-family:courier new;"&gt;|left,top|&lt;/span&gt; plutôt que &lt;span style="font-family:courier new;"&gt;|x,y|&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;J'utilise aussi la méthode &lt;span style="font-weight: bold;font-family:courier new;" &gt;move(x,y)&lt;/span&gt; qui permet... de déplacer sa cible à la position (x,y). &lt;span style="font-style: italic;"&gt;Easy, isn't it ?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Bubbles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dans celui-ci, la fenêtre contient une dizaine de bulles qui se déplacent selon des fonctions plus ou moins complexes qui donnent une impression assez "chaotique"... mais en fait non.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SH-5YKI-ksI/AAAAAAAAANE/wQ8AMb-SN2c/s1600-h/bubble_shoes.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SH-5YKI-ksI/AAAAAAAAANE/wQ8AMb-SN2c/s320/bubble_shoes.PNG" alt="" id="BLOGGER_PHOTO_ID_5224097917463073474" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Bubbles (pointeur non-représenté)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Le &lt;span style="font-weight: bold;"&gt;code&lt;/span&gt; est disponible &lt;a href="http://pastie.org/236004"&gt;ici&lt;/a&gt;, et l'&lt;span style="font-weight: bold;"&gt;image de fond&lt;/span&gt; &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://lh4.ggpht.com/sobeTBT/SH-sh8Fp75I/AAAAAAAAAMw/l0yXFv4G_5E/b.PNG"&gt;ici&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; (penser à modifier le chemin dans votre code).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Gogle Head&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Là, le "dude" suit le curseur du regard lorsqu'on le déplace. Les trajectoires de mouvement des yeux sont simplement des cercles (attention, trigonométrie !). J'ai laissé en commentaire quelques lignes qui facilitent l'ajustement des caractéristiques des trajectoires, si certains veulent s'amuser en changeant l'image de fond (de préférence au format PNG).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SH-5f97bNfI/AAAAAAAAANM/Lw-xaJZ_C4w/s1600-h/gogle_head_shoes.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SH-5f97bNfI/AAAAAAAAANM/Lw-xaJZ_C4w/s320/gogle_head_shoes.PNG" alt="" id="BLOGGER_PHOTO_ID_5224098051623958002" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt; &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Gogle Head (pointeur en haut à droite de la fenêtre,&lt;br /&gt;non-représenté)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Le &lt;span style="font-weight: bold;"&gt;code&lt;/span&gt; est disponible &lt;a href="http://pastie.org/236008"&gt;ici&lt;/a&gt;, et l'&lt;span style="font-weight: bold;"&gt;image de fond&lt;/span&gt; &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://lh4.ggpht.com/sobeTBT/SH-shtpiBFI/AAAAAAAAAMo/X4Qs-gnP1V0/head_for_shoes.png"&gt;ici&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; (penser à modifier le chemin dans votre code).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Liens :&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mes autres &lt;a href="http://sobe-session.blogspot.com/search/label/shoes"&gt;articles&lt;/a&gt; sur Shoes&lt;/li&gt;&lt;li&gt;Divers &lt;a href="http://code.whytheluckystiff.net/shoes/wiki/Tutorials"&gt;tutos sur Shoes&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.whytheluckystiff.net/entirety/"&gt;La doc&lt;/a&gt; la plus "&lt;span style="font-style: italic;"&gt;weird&lt;/span&gt;" au monde. Ou presque...&lt;/li&gt;&lt;li&gt;&lt;a href="http://picasaweb.google.com/sobeTBT/ImagesPourProg"&gt;Les images de ces 2 scripts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Dans le même genre (en beaucoup mieux !) : &lt;a href="http://www.the-shoebox.org/apps/30"&gt;Scatter Pack&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-762863063306675120?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/762863063306675120/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=762863063306675120' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/762863063306675120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/762863063306675120'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/dummydgets-pour-shoes-bulles.html' title='Dummydgets pour Shoes : Bulles'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_nJatC71XBiI/SH-uDQbi4hI/AAAAAAAAAM8/6E1JrDNc92U/s72-c/shoes-icon-blue.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8838529368657591849</id><published>2008-07-10T20:56:00.006+02:00</published><updated>2008-07-17T23:48:47.475+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><title type='text'>ShoesFests</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SHZ25u55p4I/AAAAAAAAAL8/LIWnjfHIHYs/s1600-h/barcamp-shoeless3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SHZ25u55p4I/AAAAAAAAAL8/LIWnjfHIHYs/s320/barcamp-shoeless3.jpg" alt="" id="BLOGGER_PHOTO_ID_5221491552198174594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Demain, Vendredi &lt;span style="font-weight: bold;"&gt;11/07/2008 à partir de 8am GMT&lt;/span&gt; (soit 21H en France, Belgique, Suisse et Luxembourg ou 15H à Québec) pendant 24H, est organisée la &lt;span style="font-weight: bold;"&gt;ShoesFests sur le chan #shoes du réseau IRC Freenode (irc.freenode.net)&lt;/span&gt; ! Il s'agit de découvrir &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Shoes&lt;/span&gt;&lt;/a&gt;, le curieux toolkit de GUI de Why's The Lucky Stiff pour Ruby, d'écrire et partager de petits programmes avec Shoes en s'amusant, le tout en présence de Why's et d'autres rubyistes sympas. Cet event a pour but de tester et diffuser ce programme, tout en identifiant les problèmes de documentation et de clarté. Une seconde édition est prévue est prévue aux &lt;span style="font-weight: bold;"&gt;mêmes horaires le Vendredi 25 Juillet&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Après ça, on ne pourra plus dire que "&lt;a href="http://sobe-session.blogspot.com/2007/12/someone-knows-shoes.html"&gt;Nobody Knows Shoes&lt;/a&gt;" !&lt;br /&gt;&lt;br /&gt;Je vais essayer d'y passer demain soir, ça a l'air prometteur !&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SHZ5aNqEHuI/AAAAAAAAAME/9kWd4u02RX0/s1600-h/shoes-example1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SHZ5aNqEHuI/AAAAAAAAAME/9kWd4u02RX0/s320/shoes-example1.bmp" alt="" id="BLOGGER_PHOTO_ID_5221494309232320226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;L'annonce chez  :&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;a href="http://www.rubyinside.com/shoesfest-announcement-948.html"&gt;Ruby Inside&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ihack.us/2008/06/27/shoesfests-on-july-11th-and-july-25th/"&gt;iHack&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;More :&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Page de &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Page de &lt;a href="http://whytheluckystiff.net/"&gt;_Why's&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hackety.org/"&gt;Blog&lt;/a&gt; de _Why's&lt;/li&gt;&lt;li&gt;&lt;a href="http://hackety.org/2007/11/07/ohAndTheseShoesLessons.html"&gt;Liens vers des micro-tutos&lt;/a&gt; sur Shoes (chez &lt;a href="http://juixe.com/techknow/"&gt;Juixe&lt;/a&gt;, via _Why's)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8838529368657591849?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8838529368657591849/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8838529368657591849' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8838529368657591849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8838529368657591849'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/shoesfests.html' title='ShoesFests'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_nJatC71XBiI/SHZ25u55p4I/AAAAAAAAAL8/LIWnjfHIHYs/s72-c/barcamp-shoeless3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-5167927225445054880</id><published>2008-07-09T22:09:00.010+02:00</published><updated>2008-07-09T23:52:04.324+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><title type='text'>Omniscientificoclasme : 1 - Les langages de programmation</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Je hais les &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;omniscientifiques&lt;/span&gt;.&lt;/span&gt; Ceux qui croient tout savoir avec un aplomb digne de Chuck Norris : "P&lt;span style="font-style: italic;"&gt;eu importe tes arguments, ma foi en mon propre savoir leur est supérieure.&lt;/span&gt;". Ceux qui gaspillent leur énergie à étaler leurs connaissances incomplètes. Ceux qui promeuvent leur culture et leur expériences seules, snobbant tout ce qui ne fait pas partie du cercle de leur "&lt;span style="font-style: italic;"&gt;sélection&lt;/span&gt;" d'items de valeur. Ceux qui sont constamment blasés de tout (puisqu'ils l'ont déjà vu, lu ou fait, ou qu'ils connaissaient il y a déjà des lustres).&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Les omniscientifiques ne sont pas omniscients : ils croient l'être.&lt;/span&gt;  &lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Les omniscientifiques ne sont pas scientifiques : ils veulent l'être.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il est temps de détruire cette engeance malfaisante. Et pour cela, il existe un moyen simple : &lt;span style="font-weight: bold;"&gt;détruire leur foi en leur savoir faussement complet&lt;/span&gt;. Comment ? En mettant en évidence les "trous", les "hiatus" et autres "manques" à leur connaissance, pour enfin faire renaître l'objectivité, l'humilité et la curiosité dans leur esprit biaisé.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-family:verdana;" &gt;Vous aussi, soutenez l'Omniscientificoclasme !&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nJatC71XBiI/SHUledSCSgI/AAAAAAAAALs/iKgSCTXGYNU/s1600-h/clasme.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 274px; height: 368px;" src="http://bp2.blogger.com/_nJatC71XBiI/SHUledSCSgI/AAAAAAAAALs/iKgSCTXGYNU/s320/clasme.jpg" alt="" id="BLOGGER_PHOTO_ID_5221120548192537090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Allez, après la jolie intro, en avant Guingamp !&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold; color: rgb(204, 0, 0);"&gt;&lt;span style="font-size:130%;"&gt;VOUS NE CONNAISSEZ PAS&lt;br /&gt;TOUS LES LANGAGES DE PROGRAMMATION :&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Vous ne connaissez pas &lt;a href="http://www.gotopp.org//index.html.fr"&gt;GOTO++&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.gotopp.org//index.html.fr"&gt;GOTO++&lt;/a&gt; est un &lt;a href="http://fr.wikipedia.org/wiki/Langage_de_programmation_exotique"&gt;langage exotique&lt;/a&gt; complètement loufoque. Son paradigme est "&lt;span style="font-style: italic;"&gt;orienté goto&lt;/span&gt;" (vous avez bien lu !). Le GOTO++ doit son nom à l'instruction GOTOGOTO qui va à une étiquette "au pif" dans une liste donnée... Ses types de variables privilégiés sont les étiquettes, les chances, les pingouins, les troupeaux de pingouins, les bergers et les machines à pingouins. A noter qu'il y a aussi une tortue pour faire du dessin à la &lt;a href="http://fr.wikipedia.org/wiki/Logo_%28langage%29"&gt;Logo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Vous ne connaissez pas &lt;a href="http://fr.wikipedia.org/wiki/Scratch_%28langage%29"&gt;Scratch&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fr.wikipedia.org/wiki/Scratch_%28langage%29"&gt;Scratch&lt;/a&gt; est un langage de programmation développé par le MIT, spécifiquement pour les enfants. Basé sur &lt;a href="http://fr.wikipedia.org/wiki/Squeak"&gt;Squeak&lt;/a&gt; (une implémentation dérivée de &lt;a href="http://fr.wikipedia.org/wiki/Smalltalk"&gt;Smalltalk&lt;/a&gt;), il a principalement un but éducatif et est très visuel. Un point intéressant est que le langage est dans la langue maternelle de l'enfant (une vingtaine de langues européennes disponibles selon Wikipedia). Il est aussi assez orienté "multimédia" pour encourager le tout jeune hacker. Une guideline à noter (et approfondir peut-être) également est  le principe du "Imagine-Programme-Partage" que l'on retrouve notamment dans Hackety Hack (dont on reparlera sans faute !).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Vous ne connaissez pas &lt;a href="http://factorcode.org/"&gt;Factor&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://factorcode.org/"&gt;Factor&lt;/a&gt; est un langage dynamique basé sur la pile (dans la ligné de &lt;a href="http://fr.wikipedia.org/wiki/Forth_%28langage%29"&gt;Forth&lt;/a&gt; donc). Il supporte également l'orientation objet, les macros à la &lt;a href="http://fr.wikipedia.org/wiki/LISP"&gt;LISP&lt;/a&gt; et les continuations. Mais ce n'est pas pour autant un &lt;a href="http://fr.wikipedia.org/wiki/Langage_de_programmation_exotique"&gt;langage exotique&lt;/a&gt; : toute plate-forme (sauf Solaris apparemment ?), bindings pour OpenGL, Cocoa, X11 ou Win32, client et serveur web, parser XML et autres, support de plusieurs BDD... Un "vrai" langage donc, encore moins connu que &lt;a href="http://fr.wikipedia.org/wiki/Io_%28langage%29"&gt;Io&lt;/a&gt;... avec un logo classe.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nJatC71XBiI/SHUsn8WJrAI/AAAAAAAAAL0/A4w_PBvG6tw/s1600-h/clasme2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nJatC71XBiI/SHUsn8WJrAI/AAAAAAAAAL0/A4w_PBvG6tw/s320/clasme2.jpg" alt="" id="BLOGGER_PHOTO_ID_5221128407731514370" border="0" /&gt;&lt;/a&gt;&lt;span style="color: rgb(255, 0, 0);font-family:verdana;" &gt;Dans notre lutte objective contre les omniscientifiques, ce n'est qu'une première bataille.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-family:verdana;" &gt;D'autres suivront !&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold;"&gt;NOTA :&lt;/span&gt; les images de cet articles appartiennent à leurs auteurs respectifs (&lt;a href="http://www.behance.net/myshli"&gt;Danil Kryvoruchko&lt;/a&gt; pour la première et probablement un propagandiste nord-coréen sans droit d'auteur pour la seconde).&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-5167927225445054880?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/5167927225445054880/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=5167927225445054880' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5167927225445054880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5167927225445054880'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/omniscientificoclasme-1-les-langages-de.html' title='Omniscientificoclasme : 1 - Les langages de programmation'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nJatC71XBiI/SHUledSCSgI/AAAAAAAAALs/iKgSCTXGYNU/s72-c/clasme.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-4852599181227703592</id><published>2008-07-08T23:27:00.004+02:00</published><updated>2008-07-08T23:54:18.398+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='ada'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Règles de codage, mes amours</title><content type='html'>&lt;div style="text-align: justify;"&gt;Il n'est pas rare d'avoir quelques &lt;span style="font-weight: bold;"&gt;règles de codage&lt;/span&gt; dictées lors du développement d'un programme dans une entreprise, ou dans un projet en général. En soi, c'est plutôt bien, ça rend souvent le code plus homogène, lisible ou maintenable. Certaines règles se justifient pour les besoins de performances, de documentation ou de fiabilité. Mais parfois...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nJatC71XBiI/SHPdFd14NAI/AAAAAAAAALk/9nDfwXK_0aU/s1600-h/outrage.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nJatC71XBiI/SHPdFd14NAI/AAAAAAAAALk/9nDfwXK_0aU/s320/outrage.jpg" alt="" id="BLOGGER_PHOTO_ID_5220759479032230914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Pas de ligne de plus de 131 caractères.&lt;/span&gt; Moral, mais pourquoi pas 132 ou 130 ?&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Minimiser les boucles, mais maximiser leur portée.&lt;/span&gt; Hein ?&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Pas d'identifieur (nom de classe, variable ou package) de plus de 31 caractères.&lt;/span&gt; Si ça parait évident, attendez de voir la suivante... (et celle d'après !)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Les noms des identifieurs doivent être clairs et représenter l'objet identifié.&lt;/span&gt; Par exemple, "&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;Initialize_Space_Craft_With_One_Pilot&lt;/span&gt;&lt;span style="font-style: italic;"&gt;" et non pas "&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;Init_SC_with1_pilot&lt;/span&gt;&lt;span style="font-style: italic;"&gt;".&lt;/span&gt; Hahahaha !!!&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Interdiction d'utiliser &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;use&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.&lt;/span&gt; &lt;/span&gt;RHAHahahaha...&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;BANG!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Pas d'appel récursif.&lt;/span&gt; Boom.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Pas de condition&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;IF&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt; sans &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;ELSE&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;.&lt;/span&gt; Peut se justifier par des raisons de fiabilité (le codeur a effectivement envisagé le cas contraire et écrit exlicitement null, avec commentaires dans le &lt;span style="font-family: courier new;"&gt;ELSE&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Dans les &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;CASE-WHEN&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;, interdiction d'utiliser &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;when others&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;.&lt;/span&gt; Moral pour la fiabilité (Ada95 plante si l'on omet un cas possible), parfois très pénible en pratique (heureusement que l'Ada admet les &lt;span style="font-family: courier new;"&gt;OR&lt;/span&gt; dans les &lt;span style="font-family: courier new;"&gt;CASE&lt;/span&gt;, parce qu'avec des litéraux de 15 à 20 entrées...).&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: georgia; font-style: italic; color: rgb(0, 0, 153);"&gt;Les variables doivent être déclarées dans l'ordre d'apparition dans le code.&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Dumbest rule ever.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;J'en passe et des meilleures. L'important est surtout de mettre au point ces normes avant de commencer l'implémentation... Dommage pour certains, pas vrai ?&lt;br /&gt;&lt;br /&gt;Mais quelles sont les règles de codage indispensables en réalité ? Celles qui apportent effectivement la lisibilité, la fiabilité et la maintenabilité ?&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-4852599181227703592?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/4852599181227703592/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=4852599181227703592' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/4852599181227703592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/4852599181227703592'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/rgles-de-codage-mes-amours.html' title='Règles de codage, mes amours'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nJatC71XBiI/SHPdFd14NAI/AAAAAAAAALk/9nDfwXK_0aU/s72-c/outrage.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-2544007937005269336</id><published>2008-07-07T23:00:00.011+02:00</published><updated>2008-07-08T19:39:09.292+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troll'/><title type='text'>iRant</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nJatC71XBiI/SHKFiLWOs8I/AAAAAAAAAJ8/OSqJWrjNhuE/s1600-h/macoswindows.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 129px; height: 106px;" src="http://bp2.blogger.com/_nJatC71XBiI/SHKFiLWOs8I/AAAAAAAAAJ8/OSqJWrjNhuE/s320/macoswindows.JPG" alt="" id="BLOGGER_PHOTO_ID_5220381740283900866" border="0" /&gt;&lt;/a&gt;Une fois n'est pas coutume, déversons un peu de bile contre un acteur important de l'informatique mondiale : Apple.&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Cet article fait suite à l'achat par &lt;a href="http://lefty-chronicles.blogspot.com/"&gt;Lefty&lt;/a&gt; d'un câble alimentation pour son iBook, pour la modique somme de 75€ (français, nouveaux, TTC). Hahaha&lt;span style="font-size:85%;"&gt;hahurfff&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Apple fait de supers produits, certes. Jusqu'à &lt;a href="http://www.zedshaw.com/rants/apple_sux.html"&gt;il n'y a pas si longtemps&lt;/a&gt;, le matos était plutôt résistant, de bonne qualité, et surtout Apple était surtout un OS à toute épreuve : MacOS. Réputé sans virus, spyware et autres joyeusetés informatiques... Hélas...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SHKIrgVGb9I/AAAAAAAAAKE/B9J-2R0YuhI/s1600-h/alim_apple.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 255px; height: 196px;" src="http://bp0.blogger.com/_nJatC71XBiI/SHKIrgVGb9I/AAAAAAAAAKE/B9J-2R0YuhI/s320/alim_apple.jpg" alt="" id="BLOGGER_PHOTO_ID_5220385199070015442" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Le fruit de la discorde : un logo trop cher.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Once upon a time&lt;/span&gt;, Macintosh c'était de drôles de PC avec des fenêtres, à l'époque ou &lt;a href="http://www.villiard.com/blog/wp-content/uploads/2007/04/bill-gates.jpg"&gt;Big Bilou&lt;/a&gt; jouait encore avec son caca sous DOS. Dans mon maigre souvenir, ces ordinateurs étaient très accueillants, simples et "ludiques". Et pourtant...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SHKKlBRIEZI/AAAAAAAAAKM/rssTpY2rPv8/s1600-h/apple_ii_large.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SHKKlBRIEZI/AAAAAAAAAKM/rssTpY2rPv8/s320/apple_ii_large.jpg" alt="" id="BLOGGER_PHOTO_ID_5220387286675886482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In the good old days...&lt;/span&gt;&lt;br /&gt;                      -- Abraham Simpson&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Le problème actuel d'Apple vient peut-être de cet aspect "ludique" présent dès le départ : jouant sur le côté design, "innovation technologique bien pensée" et se reposant beaucoup sur ses "fan-boys", la pomme commence à vraiment faire des erreurs.&lt;br /&gt;L'iPod a révolutionné les lecteurs MP3 (entre autre avec l'AAC, touss touss...) mais la robustesse des différents modèles est assez relative. L'iPhone est sans doute un bon produit mais à quel prix ? Celui d'un cadre très supérieur qui n'a jamais les doigts gras (c'te chance !) et que ça ne dérange pas de devoir payer son abonnement très cher, chez un fournisseur unique (dans un premier temps). Quid du MacBook Air, horriblement cher pour ses perfs avec port Ethernet en option pour 29€ (???) et batterie non amovible ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_nJatC71XBiI/SHKPYkALTfI/AAAAAAAAAKU/lsEsZ5LvGVE/s1600-h/ibutton.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_nJatC71XBiI/SHKPYkALTfI/AAAAAAAAAKU/lsEsZ5LvGVE/s320/ibutton.jpg" alt="" id="BLOGGER_PHOTO_ID_5220392570219875826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;iButton, simplicity for Human Kind ($299,95)&lt;/span&gt;&lt;br /&gt;                   -- Steve Jobs&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Du côté logiciel, il y a aussi flottement... J'aime beaucoup iTunes, mais pas ses pµT4iN$ de processus (genre "Helper" !!!) qui tournent en permanence sans aucun raison. La suite bureautique iWork, à sa sortie, était assez ridicule avec tous ses formats uniquement accessibles en lecture et écriture par elle seule... Safari n'est pas un mauvais navigateur web, loin de là : il est basé sur &lt;a href="http://fr.wikipedia.org/wiki/Webkit"&gt;WebKit&lt;/a&gt; (fork du moteur web de Konqueror (KHTML),  logiciel génial de KDE sous Linux). Mais au niveau fonctionnalités c'est pas toujours pratique (pour les flux notamment), la sécurité est relative (pas mal de failles qui trainent trop longtemps ces derniers mois) , la sortie Windows ridicule dans ses premières versions et finalement assez peu personnalisable.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nJatC71XBiI/SHKRWpM0hII/AAAAAAAAAKc/L3f1N7jwaDI/s1600-h/iham-apple.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nJatC71XBiI/SHKRWpM0hII/AAAAAAAAAKc/L3f1N7jwaDI/s320/iham-apple.jpg" alt="" id="BLOGGER_PHOTO_ID_5220394736278602882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;iHam: for real Apple fan-boyz mouf'&lt;/span&gt; &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(only $/kg 200)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A ce sujet, l'attitude d'Apple face au libre est assez ambivalente... Le projet &lt;a href="http://fr.wikipedia.org/wiki/Darwin_%28informatique%29"&gt;Darwin&lt;/a&gt; semble assez poussif (même si pas inintéressant de base). Pareil pour ce qui est de l'ouverture des API, c'est pas franchement fabuleux... (et le format de sauvegarde disque, GRRR !!!)&lt;br /&gt;&lt;br /&gt;Mais au niveau logiciel, ce qui est peut-être le plus gênant, c'est l'OS en lui même. MacOS X.5 ne me séduit pas vraiment. Tout comme Vista (la convergence entre les 2 OS étant de mise depuis le départ, malgré ce qu'on peut entendre là-dessus...), il me parait de plus en plus  orienté vers l'"effet visuel", le widget et le "&lt;span style="font-style: italic;"&gt;Oh-mon-Dieu-qu-il-est-beau-ce-doc-qui-brille-!!!&lt;/span&gt;". Bouffe ta RAM mec, fais toi plaisir... Pour ce qui est du fait que les Mac sont davantage touchés qu'avant par les virus, failles et autres, il faut reconnaître que le nombre croissant d'utilisateurs y est pour quelque chose, mais aussi l'utilisation bien plus intensive d'Internet qu'il y a quelques années seulement.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_nJatC71XBiI/SHKUXD-pWRI/AAAAAAAAAKk/BhcSIjridWY/s1600-h/burnin_ibook.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_nJatC71XBiI/SHKUXD-pWRI/AAAAAAAAAKk/BhcSIjridWY/s320/burnin_ibook.JPG" alt="" id="BLOGGER_PHOTO_ID_5220398042001791250" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Tu retourneras poussière !&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                             &lt;/span&gt;- Océdar&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Bon allez, on en crâme un et on s'arrête là. C'est vrai que c'est cruel : Micro$oft, Sony ou Acer (et bien d'autres) méritent sans doute un châtiment bien pire pour leur pratiques et productions respectives. D'autant qu'au départ j'aime bien les Mac ! Mais au final, je ne risque pas de m'en payer un...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nJatC71XBiI/SHKX9_dtAWI/AAAAAAAAAKs/jWwYm3fJGQU/s1600-h/iSuck.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nJatC71XBiI/SHKX9_dtAWI/AAAAAAAAAKs/jWwYm3fJGQU/s320/iSuck.jpeg" alt="" id="BLOGGER_PHOTO_ID_5220402009339658594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Nota :&lt;/span&gt; les images de cet article ne sont pas à moi, ni à Apple. Le vieil Apple II vient du blog de &lt;a href="http://gilesbowkett.blogspot.com/"&gt;Giles Bowkett&lt;/a&gt;, l'iButton et l'iHam je ne sais plus, iSuck on s'en fout, et le "burnin' iBook" du site de &lt;a href="http://www.nongnu.org/ratpoison/"&gt;Ratpoison&lt;/a&gt;. Enfin, le logo modifié est l'oeuvre du designer &lt;a href="http://marioav.blogspot.com/2008/04/just-for-fun.html"&gt;Mario Amaya&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-2544007937005269336?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/2544007937005269336/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=2544007937005269336' title='7 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2544007937005269336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/2544007937005269336'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/07/irant.html' title='iRant'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nJatC71XBiI/SHKFiLWOs8I/AAAAAAAAAJ8/OSqJWrjNhuE/s72-c/macoswindows.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-5346672259866299035</id><published>2008-06-22T14:57:00.005+02:00</published><updated>2008-06-22T23:31:21.094+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><category scheme='http://www.blogger.com/atom/ns#' term='base'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Le Logiciel Libre expliqué à ma Maman (et à toute personne non portée sur l'informatique...)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Copyleft.svg/45px-Copyleft.svg.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 45px; height: 45px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Copyleft.svg/45px-Copyleft.svg.png" alt="" border="0" /&gt;&lt;/a&gt;Le logiciel libre est une notion importante en informatique actuelle. Mais si n'importe quel &lt;a href="http://www.serieslive.com/forums_save/uploads/20051001194624_geek2.jpg"&gt;geek&lt;/a&gt;, informaticien ou programmeur maîtrise ce concept, ce n'est pas le cas du grand public et particulièrement des personnes pour qui l'informatique n'est qu'un outil nécessaire, mais souvent un peu compliqué.&lt;br /&gt;&lt;br /&gt;Le but de cet article est donc de tenter d'&lt;span style="font-weight: bold;"&gt;expliquer à &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://b1.img.v4.skyrock.com/b14/sorykiel00/pics/999770722.jpg"&gt;ma mama&lt;/a&gt;&lt;a style="font-weight: bold;" href="http://b1.img.v4.skyrock.com/b14/sorykiel00/pics/999770722.jpg"&gt;n&lt;/a&gt;, et par extension à toute personne peu portée sur l'informatique &lt;span style="font-weight: bold;"&gt;ce qu'est un logiciel libre&lt;/span&gt;.&lt;br /&gt;Dans ce cadre, il est très probable que je fasse des raccourcis, analogies ou approximations sur certaines notions ou concepts liés ; à l'attention des personnes pointilleuses sur ces points qui font parfois débat (ou &lt;abbr title="débat stérile sur Internet"&gt;troll&lt;/abbr&gt;), n'hésitez pas à utiliser les commentaires afin de mettre les choses au point, point (poin poin !).&lt;br /&gt;Par ailleurs, seuls les geeks semblent maîtriser le web et  avoir le temps de lire les pages présentées dans les liens (et d'autres choses, comme la navigation par onglets sous Firefox ^^) : donc, la plupart des liens pointent vers une simple image (&lt;span style="font-style: italic;"&gt;Une image vaut mille mots.&lt;/span&gt;).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Qu'est-ce qu'un logiciel ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.framasoft.net/IMG/arton1538.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 191px; height: 190px;" src="http://www.framasoft.net/IMG/arton1538.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Commençons par le commencement ! Word, Excel, Firefox, Outlook Express et iTunes sont des logiciels. C'est probablement ceux qu'utilisent le plus ma maman. Mais ce ne sont que quelques exemples. Window$, MacOS X et Linux sont également des logiciels : ce sont des systèmes d'exploitation (c'est à dire le logiciel qui gère l'interaction avec le matériel, écran, clavier, etc ainsi que la base pour les autres logiciels cités en premier.).&lt;br /&gt;Mais il y a également des logiciels plus "discrets" pour l'utilisateur de base : les "drivers" (ou pilotes) qui font fonctionner du matériel (imprimante, webcam, etc...) sur un PC, les systèmes assurant les transmissions bancaires, les applications web (comme Gmail, ou ce blog), le &lt;a href="http://www.cargolux.com/images/fun/web/cockpit/cockpit.jpg%201c.jpg"&gt;manager de vol&lt;/a&gt; d'un avion, un code calcul scientifique, le &lt;a href="http://www.journaldugeek.com/images/2007_02/symbian_uiq31_02.jpg"&gt;système d'un téléphone portable&lt;/a&gt;, un guichet de &lt;a href="http://photo.ortho.free.fr/Quebec/im/01/guichet_automatique.JPG"&gt;retrait&lt;/a&gt; de monnaie ou encore la &lt;a href="http://www.via-commea.com/images/zones%20de%20synchronisation.jpg"&gt;synchronisation des feux&lt;/a&gt; dans les grandes agglomérations.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Pour résumer, sur un ordinateur (&lt;a href="http://mms2.ensmp.fr/mmc_paris/cas/images/cluster.gif"&gt;au sens large&lt;/a&gt;), un logiciel est toute la partie non-matérielle. En anglais, on parle de "Harware" pour le matériel (partie "dure") et de "software" pour les logiciels (partie "légère" ou immatérielle).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Comment construit-on un logiciel ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://media.digiweb.ie/wp-content/uploads/2007/10/digiweb-developer.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 236px; height: 193px;" src="http://media.digiweb.ie/wp-content/uploads/2007/10/digiweb-developer.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Sans trop rentrer dans la technique, quelques notions sont utiles pour la suite.&lt;br /&gt;Tout logiciel est construit à partir d'un "code source" qu'écrit le programmeur, développeur ou codeur (ou ingénieur logiciel, mais celui-ci, il se la pète un peu je trouve ^^). De quoi s'agit-il ? Il s'agit d'un texte, écrit dans un langage spécialement conçu pour "&lt;span style="font-style: italic;"&gt;communiquer avec l'ordinateur&lt;/span&gt;". Il existe de nombreux langages permettant d'écrire du code.&lt;br /&gt;Le code source peut être défini comme un ensemble d'ordre et de définitions d'ordres que le codeur donne à la machine. Du coup, le code source d'un logiciel peut être comparé à une recette de cuisine à laquelle on ajoute une définition des gestes techniques (abricoter, brider, delayer, etc...).&lt;br /&gt;Par exemple, ci-dessous voici à quoi pourrait ressembler le code permettant d'ouvrir une fenêtre contenant une horloge à l'heure :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;Programme Fenetre-Horloge :&lt;br /&gt;ouvrir fenetre&lt;br /&gt;fenetre contient horloge(heure_actuelle)&lt;br /&gt;toutes les 1 secondes : mettre l'heure à jour dans horloge&lt;br /&gt;fin programme&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Bien sûr il s'agit de pseudo-code : c'est à dire un langage de programmation que la machine ne comprendrait pas. Mais dans l'esprit, on n'est pas très loin de ce à quoi pourrait ressembler un vrai code source. La preuve, voici un vrai programme faisant ce que je viens de décrire, en Ruby (Ruby est donc un "vrai" langage de programmation) :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre&gt;&lt;code&gt;stack do&lt;br /&gt; background black&lt;br /&gt; para @time.strftime("%a"),&lt;br /&gt;   span(@time.strftime(" %b %d, %Y "), :stroke =&gt; "#ccc"),&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    strong(@time.strftime("%I:%M"), :stroke =&gt; white),&lt;br /&gt;   @time.strftime(".%S"), :align =&gt; "center", :stroke =&gt; "&lt;/code&gt;&lt;code&gt;#666"&lt;br /&gt;end&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://hackety.org/images/shoes-clock.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://hackety.org/images/shoes-clock.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;(source : &lt;a href="http://hackety.org/2007/12/10/shoesClockAndDictionary.html"&gt;hackety.org&lt;/a&gt; par &lt;span style="font-style: italic;"&gt;Why's the Lucky Stiff&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C'est déjà moins compréhensible, mais ça marche ^^ !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Qu'est-ce qu'un logiciel libre ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic; color: rgb(0, 0, 153);"&gt;Un &lt;b&gt;logiciel libre&lt;/b&gt; est un &lt;a href="http://fr.wikipedia.org/wiki/Logiciel" title="Logiciel"&gt;logiciel&lt;/a&gt; dont la &lt;a href="http://fr.wikipedia.org/wiki/Licence_de_logiciel" title="Licence de logiciel"&gt;licence&lt;/a&gt; dite &lt;a href="http://fr.wikipedia.org/wiki/Licence_libre" title="Licence libre"&gt;libre&lt;/a&gt; donne à chacun le droit d'utiliser, d'étudier, de modifier, de dupliquer, de donner et de vendre ledit logiciel.&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Cette citation Wikipedia est selon moi une bonne définition de ce qu'est un logiciel libre.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i70.photobucket.com/albums/i84/EnableConsole/TinyTux.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 142px; height: 142px;" src="http://i70.photobucket.com/albums/i84/EnableConsole/TinyTux.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Mini-Tux, une mascotte de Linux (libre !)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Contrairement à ce qu'on pourrait facilement penser, un logiciel libre n'est pas forcément un logiciel gratuit. &lt;span style="font-weight: bold;"&gt;C'est sa licence qui est libre&lt;/span&gt;, c'est à dire le texte "juridique" définissant les droits de l'utilisateur sur le logiciel. Même si la majorité des logiciels libres sont gratuits, il en existe quelques un payants, ou en version payante (on y reviendra).&lt;br /&gt;&lt;br /&gt;En l'occurrence, l'utilisateur, quel qu'il soit, à &lt;span style="font-weight: bold;"&gt;le droit d'utiliser&lt;/span&gt; le logiciel comme bon lui semble.&lt;br /&gt;&lt;br /&gt;Contrairement à la plupart des logiciels propriétaires (non-libres donc), l'utilisateur a également&lt;span style="font-weight: bold;"&gt; le droit de copier, donner, vendre ce logiciel&lt;/span&gt; dans certaines conditions. Il n'y a donc quasiment pas de piratage dans le monde du logiciel libre puisqu'on est libre de dupliquer et de distribuer ces logiciels. Je dis quasiment car les conditions ne sont parfois pas respectées : par exemple une condi tion de redistribution peut être de continuer à montrer le code source (ce que ne font pas toujours les entreprises).&lt;br /&gt;&lt;br /&gt;Le &lt;span style="font-weight: bold;"&gt;droit de vente&lt;/span&gt; peut paraître surprenant : pourquoi vendre un logiciel qui peut ensuite être redistribué gratuitement ? En pratique, peu de logiciels libres sont payants. La plupart du temps, le code source du logiciel est gratuit, mais c'est le support associé qui est rémunéré. Par exemple, le logiciel de développement que j'utilise actuellement est libre, mais mon entreprise paye la société qui le distribue pour corriger rapidement les bugs que nous rencontrons, ou ajouter de petites fonctionnalités. Je peux par contre utiliser la version amateur, sans support, gratuitement, à la maison.&lt;br /&gt;&lt;br /&gt;L'utilisateur a également&lt;span style="font-weight: bold;"&gt; le droit d'"étudier"&lt;/span&gt; le logiciel : en pratique, cela signifie qu'il a le droit d'accéder au code source du logiciel pour comprendre (ou essayer de comprendre) comment celui-ci fonctionne. On parle alors de logiciel "&lt;span style="font-weight: bold;"&gt;Open-source&lt;/span&gt;" puisque ses sources sont accessibles à tous ; "ouvertes". Bien entendu, ce droit est surtout destiné aux développeurs : ceux qui sont capables de lire le code source.&lt;br /&gt;Hormis le côté éducatif, ce droit a un avantage direct pour un logiciel libre : les bugs et autres erreurs dans le code source sont visibles par tous et donc, le plus souvent, rapide ment détectés. Cela explique également pourquoi les logiciels libres les plus utilisés proposent des mises à jours régulières : les erreurs sont fréquemment corrigées et on en fait profiter les utilisateurs le plus rapidement possible.&lt;br /&gt;Enfin, dans le domaine scientifique, il y a un autre intérêt direct : la vérification. Dans un code de calcul notamment, il devient possible de vérifier les formules et algorithmes qui ont été employés. En cela, le logiciel libre garde l'&lt;span style="font-weight: bold;"&gt;esprit scientifique&lt;/span&gt; (particulièrement mathématique / pas de brevets en maths) qui veut que &lt;span style="font-weight: bold;"&gt;le savoir&lt;/span&gt; soit &lt;span style="font-weight: bold;"&gt;accessible à tous&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Le logiciel libre en pratique&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.petitboulot.fr/images_et_photos/images/bricoleur_bricolage_cherche%20bricoleur_cherche%20bricolage.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 217px; height: 217px;" src="http://www.petitboulot.fr/images_et_photos/images/bricoleur_bricolage_cherche%20bricoleur_cherche%20bricolage.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Beaucoup de logiciels libres sont soutenus par une "&lt;span style="font-weight: bold;"&gt;comm&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;unauté&lt;/span&gt;". Ce terme, qui fait un peu penser à "secte", "hippy" ou "communisme", désigne simplement un groupe de personnes soutenant un logiciel libre. Il s'agit bien sur de programmeurs qui le développent, mais aussi de simples utilisateurs qui l'utilisent bien sûr, mais aussi qui le testent (et donc préviennent de certains bugs), le diffusent, écrivent de la documentation (aide, wiki, manuels, etc...), font sa publicité, aident les débutants ou même le soutiennent financièrement.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ce côté communautaire fait souvent croire que le logiciel libre est uniquement l'affaire de quelques passionnés, et que les entreprises ne les emploient jamais. Cela est faux.&lt;br /&gt;&lt;br /&gt;Pour le simple utilisateur, &lt;span style="font-weight: bold;"&gt;un logiciel libre a plusieurs avantages&lt;/span&gt;. Comme on l'a vu précédemment, il est souvent gratuit, facilement trouvable puisque librement distribuable et mis à jour régulièrement.&lt;br /&gt;Ensuite, du fait de l'ouverture du code, les logiciels libres sont souvent personnalisables puisque n'importe qui peut proposer un module complémentaire (comme un aspect graphique ou un add-on sous Firefox).&lt;br /&gt;Enfin, de par la compétition (pour ne pas dire guerre) entre les logiciels libres et les logiciels propriétaires, les communautés attachent beaucoup d'importance à aider les nouveaux arrivants, notamment sur les forums d'aide (en principe du moins...).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Un aspect important du libre en informatique réside dans les &lt;span style="font-weight: bold;"&gt;standards des formats&lt;/span&gt;, ce point étant vital pour les utilisateurs de base et probablement encore plus pour les entreprises. Un format, c'est les dernières lettres d'un fichier : par exemple &lt;span style="font-weight: bold;font-family:courier new;" &gt;.jpeg&lt;/span&gt; ou &lt;span style="font-weight: bold;"&gt;.gif&lt;/span&gt; pour une image, &lt;span style="font-weight: bold;"&gt;.mp3&lt;/span&gt; ou &lt;span style="font-weight: bold;"&gt;.ogg&lt;/span&gt; pour une chanson, &lt;span style="font-weight: bold;"&gt;.doc&lt;/span&gt; ou &lt;span style="font-weight: bold;"&gt;.rtf&lt;/span&gt; pour un document texte ou encore &lt;span style="font-weight: bold;"&gt;.xls&lt;/span&gt; pour un classeur Excel.&lt;br /&gt;Plus que trois lettres après un point, ces formats désignent la façon dont la machine écrie et lit ces documents : c'est une représentation de la donnée de départ en langage machine ; en règle générale, un être humain ne peut pas lire ces formats.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Le problème&lt;/span&gt; est qu'il existe &lt;span style="font-weight: bold;"&gt;des formats propriétaires&lt;/span&gt;. Une entreprise peut donc décider de déposer une licence propriétaire, ou un brevet sur un format qu'elle aurait "inventé". C'est le cas pour Microsoft avec le .doc et le .xls ou le .aac par Sony (entre autres). Alors, elle peut décider de "libérer" son utilisation ou non.&lt;br /&gt;Dans tous les cas, ces formats posent problèment car d'une part, une entreprise peut décider d'abandonner un format (si Microsoft abandonne le .doc, comment ouvrir ses documents dans 10 ans ?) ou d'autre part de restreindre sa diffusion en faisant payer les producteurs d'autres logiciels l'employant. Ou encore de se réserver entièrement les droits sur un format : par exemple pour de l'audio pour écouter un tel format créé par Toshiba, vous devez acheter un lecteur Toshiba (simple exemple).&lt;br /&gt;&lt;br /&gt;En général, les logiciels libres préfèrent créer ou/et employer des &lt;span style="font-weight: bold;"&gt;formats libres et standards&lt;/span&gt; assurant ainsi la &lt;span style="font-weight: bold;"&gt;compatibilité&lt;/span&gt; entre les différentes applications (par exemple un format de tableau pourrait être lisible par différents logiciels tableurs -comme Excel-) ainsi que la &lt;span style="font-weight: bold;"&gt;pérennité des documents&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quelques exemples de logiciels libres (propriétaires) :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Firefox&lt;/span&gt; ; navigateur web (InternetExplorer, Safari, Opera...)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Thunderbird&lt;/span&gt; ; outil de messagerie (Outlook Express...)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Azureus&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;EMule&lt;/span&gt; ; peer-to-peer (?)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;OpenOffice.org&lt;/span&gt; ; suite bureautique (Microsoft Office...)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Linux&lt;/span&gt; ; système d'exploitation (Windows, MacOS)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Gimp&lt;/span&gt; ; dessin et traitement d'image (Paint, Photoshop...)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SciLab&lt;/span&gt; ; outil scientifique (MatLab, Maple...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt; &lt;span style="font-weight: bold;"&gt;Références :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Logiciel"&gt;Logiciel &lt;/a&gt;(chez Wikipedia)&lt;/li&gt;&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Logiciel_libre"&gt;Logiciel Libre&lt;/a&gt; (chez Wikipedia)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.framasoft.net/rubrique2.html"&gt;Liste de logiciels libres par rubriques&lt;/a&gt; (Framasoft)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Alors Maman, tu as compris ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Les commentaires sont ouverts !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-5346672259866299035?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/5346672259866299035/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=5346672259866299035' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5346672259866299035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5346672259866299035'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/06/le-logiciel-libre-expliqu-ma-maman-et.html' title='Le Logiciel Libre expliqué à ma Maman (et à toute personne non portée sur l&apos;informatique...)'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1548275636313787957</id><published>2008-06-12T20:29:00.004+02:00</published><updated>2008-06-12T21:07:50.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Firefox 3 - D-Day !</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.spreadfirefox.com/sites/all/themes/spreadfirefox_RCS/images/download-day/buttons/fr/dday_badge_fox.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 251px; height: 200px;" src="http://www.spreadfirefox.com/sites/all/themes/spreadfirefox_RCS/images/download-day/buttons/fr/dday_badge_fox.png" alt="" border="0" /&gt;&lt;/a&gt;Je ne vais pas vous faire étalage des avantages de Firefox sur la concurrence dans le monde merveilleux des navigateurs web. Non. Mais je vous encourage vivement à participer au &lt;a style="font-weight: bold;" href="http://www.spreadfirefox.com/fr/worldrecord/"&gt;Download Day de Firefox 3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Il s'agit d'essayer d'&lt;span style="font-weight: bold;"&gt;établir le record du plus grand nombre de téléchargements pour un logiciel en 24H&lt;/span&gt;. Amusant non ? Outre le fait que c'est un évènement marketing sympa, c'est l'occasion de découvrir, ou mettre à jour l'un des meilleurs navigateurs disponibles sous toute plate-forme.&lt;br /&gt;&lt;br /&gt;Vous pouvez déjà effectuer une promesse de téléchargement sur &lt;a href="http://www.spreadfirefox.com/fr/worldrecord/"&gt;la carte du monde&lt;/a&gt; (la France n'est d'ailleurs pas si mal placée ^^) ou patienter gentiment jusqu'à... &lt;a href="http://www.silicon.fr/fr/news/2008/06/12/officiel_firefox_3_sera_lance_le_17_juin"&gt;&lt;span style="font-weight: bold;"&gt;Mardi 17 Juin&lt;/span&gt;&lt;/a&gt; (selon &lt;a href="http://www.silicon.fr/"&gt;Silicon.fr&lt;/a&gt;, qui a réalisé il y quelques jours une &lt;a href="http://www.silicon.fr/fr/news/2008/05/29/firefox_3_le_point_avec_tristan_nitot_president_de_mozilla_europe"&gt;interview de Tristan Nitot&lt;/a&gt;, Prez' de Mozilla Europe, sur la sortie du dernier panda rouge).&lt;br /&gt;&lt;br /&gt;Bon téléchargement !&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1548275636313787957?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.spreadfirefox.com/fr/worldrecord/' title='Firefox 3 - D-Day !'/><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1548275636313787957/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1548275636313787957' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1548275636313787957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1548275636313787957'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/06/firefox-3-d-day.html' title='Firefox 3 - D-Day !'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-8473158717674803808</id><published>2008-06-07T00:14:00.005+02:00</published><updated>2008-06-07T02:00:52.867+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Ruby Duck-Safe interface</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.littleredduck.com.au/images/hme_logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 73px; height: 76px;" src="http://www.littleredduck.com.au/images/hme_logo.gif" alt="" border="0" /&gt;&lt;/a&gt;Suite à un &lt;a href="http://sobe-session.blogspot.com/2008/05/typage-statique-pour-ruby.html"&gt;précédent article sur DiamondBack Ruby&lt;/a&gt;, j'ai un peu réfléchis à la question de la sécurisation de l'appel de fonctions/procédures/méthodes, au niveau des types dans un langage dynamique tel que Ruby (/Python,/Perl/Etc...).&lt;br /&gt;&lt;br /&gt;Finalement, quel est le problème ? Quelque soit le paradigme, il se situe au niveau de la capacité d'une fonction/procédure/méthode à traiter ses arguments en fonction de leur type, classe ou comportement. Problème simple donc. (Les aspects plus bas niveau sont ici  peu intéressants : on est actuellement capables de les éluder).&lt;br /&gt;&lt;br /&gt;Tout est dans la notion d'&lt;a href="http://fr.wikipedia.org/wiki/Interface_en_informatique"&gt;interface&lt;/a&gt; : dans les langages statiques, une interface n'est pas seulement un moyen d'appeler un "service" (fonction/méthode/...) mais c'est également un "contrat" qui impose des conditions sur les informations passées à l'appel (le plus souvent sur leur type). Par exemple, la fonction &lt;span style="font-family: courier new;"&gt;acheter_une_baguette&lt;/span&gt; ne peut se contenter de prendre 0.45 en argument : il faut que 0.45 soit en €, "de type €".&lt;br /&gt;&lt;br /&gt;Ruby est un langage dynamique comme tant d'autres. Mais de par sa conception, sa "philosophie", il fait le choix de se concentrer sur ce que fait un objet plutôt que sur ce qu'il est : c'est le &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;Duck Typing&lt;/a&gt;. On peut  facilement critiquer cette approche du typage pour plusieurs raisons. Cet &lt;a href="http://beust.com/weblog/archives/000269.html"&gt;article sur Otaku&lt;/a&gt; en expose plusieurs. Pour ma part, je me contenterais de dire qu'elle réside dangereusement sur la langue (quel rapport entre &lt;span style="font-family: courier new;"&gt;Balançoire.balancer&lt;/span&gt; et &lt;span style="font-family: courier new;"&gt;Coupable.balancer&lt;/span&gt; ?).&lt;br /&gt;&lt;br /&gt;Mais les langages statiques ne sont pas nécessairement satisfaisants sur ce point non plus. Pour faire un parallèle avec les mathématiques, on peut considérer que :&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left; font-family: courier new;"&gt;&lt;span style="font-weight: bold;"&gt;f : R  -&gt; R&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    x |-&gt; x + 2&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;avec &lt;span style="font-weight: bold; font-family: courier new;"&gt;R&lt;/span&gt; l'ensemble des réels, est une déclaration de type statique.&lt;br /&gt;&lt;br /&gt;Pour autant, &lt;span style="font-weight: bold; font-family: courier new;"&gt;f&lt;/span&gt; reste valable de &lt;span style="font-weight: bold; font-family: courier new;"&gt;N&lt;/span&gt; dans &lt;span style="font-weight: bold; font-family: courier new;"&gt;N&lt;/span&gt; (naturels), de &lt;span style="font-weight: bold; font-family: courier new;"&gt;C&lt;/span&gt; dans &lt;span style="font-weight: bold; font-family: courier new;"&gt;C&lt;/span&gt; (complexes), etc... Le Duck Typing assure que &lt;span style="font-weight: bold; font-family: courier new;"&gt;f&lt;/span&gt; est valable du moment que &lt;span style="font-weight: bold; font-family: courier new;"&gt;x&lt;/span&gt; possède une méthode "&lt;span style="font-weight: bold; font-family: courier new;"&gt;+&lt;/span&gt;", ce qui évite de redéfinir&lt;span style="font-weight: bold; font-family: courier new;"&gt; f&lt;/span&gt; pour chaque espace où cette fonction est valable.&lt;br /&gt;&lt;br /&gt;Mais est-ce suffisant ? Prenons :&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold; font-family: courier new;"&gt;f : &lt;/span&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;x |-&gt; 2 / x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dans ce cas, on doit de plus assurer que &lt;span style="font-weight: bold; font-family: courier new;"&gt;x&lt;/span&gt; n'est pas nul. Si mathématiquement, cela s'exprime sur l'espace sur lequel est défini &lt;span style="font-weight: bold; font-family: courier new;"&gt;x&lt;/span&gt;, "informatiquement" on aura le plus souvent &lt;span style="font-weight: bold; font-family: courier new;"&gt;x&lt;/span&gt; entier ou flottant. Les contraintes sur un argument ne se limite donc pas à son type/classe, ni à son comportement (possède méthode "+"), mais aussi à d'autres paramètres, comme son état (ici sa valeur). De plus, s'il s'agit ici d'un exemple simple : il existe probablement d'autres exemples mettant en évidence l'influence du contexte d'appel.&lt;br /&gt;&lt;br /&gt;Je vous propose ici un module (naïf) permettant d'exprimer assez simplement, lors de l'implémentation d'une méthode, les contraintes associées à ses arguments. Le but est d'assurer ces contraintes sans pour autant surcharger le code de structures conditionnelles avec gestion d'exceptions : on déclare simplement notre contrat.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(sources également disponibles **sans fuck1n' coupure** &lt;a href="http://pastie.org/210548"&gt;ICI&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;module&lt;/span&gt; Safety&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Negator &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;for&lt;/span&gt; error message&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,125,54);background-color: rgb(17, 34, 51);"&gt;@@neg_converter&lt;/span&gt; = {&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:is_a&lt;/span&gt;?       =&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"is not a"&lt;/span&gt;,&lt;br /&gt;                       &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;respond_to&lt;/span&gt;&lt;/span&gt;? =&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"does not respond to"&lt;/span&gt;,&lt;br /&gt;                       &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt;&lt;/span&gt;?    =&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"does not &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt;"&lt;/span&gt;,&lt;br /&gt;                       &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:each_element_is_a&lt;/span&gt;? =&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"contains element(s) that is(are) not"&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Ensure that constraints are respected&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; ensure_it cstr&lt;br /&gt;        cstr.&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;do&lt;/span&gt; |arg, cstrs|&lt;br /&gt;            value = cstrs[0] &lt;br /&gt;            cstrs[1...cstrs.size].&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;do&lt;/span&gt; |pair| &lt;br /&gt;                &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; not value.method(pair[0]).&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;call&lt;/span&gt;(pair[1]) &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;then&lt;/span&gt;&lt;br /&gt;                    raise &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;/span&gt;Argument #{arg} (#{value.inspect}) \&lt;br /&gt;                          #{&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,125,54);background-color: rgb(17, 34, 51);"&gt;@@neg_converter&lt;/span&gt;[pair[0].&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;to_sym&lt;/span&gt;]} #{pair[1]}.&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;/span&gt;&lt;br /&gt;                &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    private&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# A simple example of constraint method&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; each_element_is_a? klass&lt;br /&gt;        assertion = true&lt;br /&gt;        self.&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;do&lt;/span&gt; |elt|&lt;br /&gt;            assertion = false &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; not elt.is_a? klass&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;        assertion&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La méthode &lt;span style="font-family: courier new;"&gt;ensure_it&lt;/span&gt; checke les contraintes passées. Une contrainte est facilement exprimable par une méthode telle que &lt;span style="font-family: courier new;"&gt;each_element_is_a?&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Exemples :&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;require&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'Safety'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Fixnum&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt; Safety&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; mult_by_plus num1, num2&lt;br /&gt;        ensure_it({&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:num1&lt;/span&gt; =&gt; [num1, [&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:is_a&lt;/span&gt;?, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Fixnum&lt;/span&gt;]],&lt;br /&gt;                   &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:num2&lt;/span&gt; =&gt; [num2, [&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;respond_to&lt;/span&gt;&lt;/span&gt;?, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:next&lt;/span&gt;]]})&lt;br /&gt;        self*num1+num2&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;a = 1&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; a.mult_by_plus(1,2)&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; a.mult_by_plus(1,1)&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; a.mult_by_plus(1,1.0) &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; Error raised &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Et :&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;require&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'Safety'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt; Safety&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; potamok tab&lt;br /&gt;    ensure_it({&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:tab&lt;/span&gt; =&gt; [tab, [&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;respond_to&lt;/span&gt;&lt;/span&gt;?, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt;&lt;/span&gt;],&lt;br /&gt;                             [&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:each_element_is_a&lt;/span&gt;?, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Fixnum&lt;/span&gt;]]})&lt;br /&gt;    val = 0                         &lt;br /&gt;    tab.&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;each&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;do&lt;/span&gt; |elt|&lt;br /&gt;        val += elt**2&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    val&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; potamok [42,33,59]&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; potamok [1,2,3,6,59.3] &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; Error raised&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Toute remarque est la bienvenue.&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-8473158717674803808?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/8473158717674803808/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=8473158717674803808' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8473158717674803808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/8473158717674803808'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/06/ruby-duck-safe-interface.html' title='Ruby Duck-Safe interface'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-25832912440554194</id><published>2008-05-30T23:59:00.003+02:00</published><updated>2008-05-31T01:16:10.123+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Google Reader pour Lefty</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fluid-pictures.com/fluid.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 104px; height: 181px;" src="http://www.fluid-pictures.com/fluid.jpg" alt="" border="0" /&gt;&lt;/a&gt;Les &lt;a href="http://fr.wikipedia.org/wiki/RSS_%28format%29"&gt;flux RSS&lt;/a&gt; sont vraiment un moyen très puissant de se tenir au courant à moindre coût : c'est une application "assez" récente d'Internet, qui à mon avis est encore mal maîtrisée par l'internaute moyen (ce qui n'est pas le cas de Lefty, puisque celui-ci a un &lt;a href="http://lefty-chronicles.blogspot.com/"&gt;blog&lt;/a&gt; - &lt;a href="http://www.avomarks.fr/blog/images/surprise.jpg"&gt;waow &lt;/a&gt;! -).&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Présentation : &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'intérêt des flux RSS réside dans un principe très simple :&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"Chercher une information qui vous intéresse sur le web est en soi une perte de temps : c'est l'information qui vous intéresse qui doit arriver à vous."&lt;/blockquote&gt;&lt;br /&gt;D'où ces flux qui vous tiennent au courant des dernières entrées du blog de votre pote qui joue de la gratte, des dernières nouvelles concernant les JO ou d'une réponse à votre message sur un forum de discussion.&lt;br /&gt;La question est comment ? Comment profiter de ces outils le plus simplement et naturellement possible ?&lt;br /&gt;&lt;br /&gt;Il existe grosso-modo &lt;span style="font-weight: bold;"&gt;3 méthodes&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Via son navigateur web&lt;/li&gt;&lt;li&gt;Via un agrégateur de flux offline et/ou son logiciel de messagerie&lt;/li&gt;&lt;li&gt;Via un agrégateur de flux online&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La plupart des &lt;span style="font-weight: bold;"&gt;navigateurs web&lt;/span&gt; modernes intègrent des outils de lecture de flux RSS/ATOM. Mais dans l'ensemble je les trouve reltivement peu pratiques. Le modèle de Safari est assez peu intuitif, avec un rendu assez médiocre. Opera est un peu mieux sur ce point, mais j'accroche pas. Firefox (v2, j'attends la suite...)  par contre, propose les marque-pages dynamiques qui peuvent être intéressants : ceux-ci se présentent comme des favoris classiques qui se déroulent pour révéler les dernières entrées du flux. C'est surtout pratique pour les flux souvent mis à jour (tumblelog, blogger hyperactif ou site d'informations), mais là encore, il faut faire l'effort de cliquer dessus pour être tenu au courant (monde de feignants...).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leblogdeco.fr/wp-content/suspension-fibre-optique-brindilles-ligne-roset.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 161px; height: 243px;" src="http://www.leblogdeco.fr/wp-content/suspension-fibre-optique-brindilles-ligne-roset.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Les&lt;span style="font-weight: bold;"&gt; agrégateurs de flux&lt;/span&gt;, eux, se présentent davantage comme des logiciels de messagerie, recevant les entrées comme des messages. D'ailleurs, différents logiciels de messagerie proposent cette fonctionnalité, &lt;a href="http://www.mozilla-europe.org/fr/products/thunderbird/"&gt;Mozilla ThunderBird&lt;/a&gt; notamment.&lt;br /&gt;&lt;br /&gt;Mais il existe une méthode qui paraît plus "logique" : les &lt;span style="font-weight: bold;"&gt;agrégateurs de flux online&lt;/span&gt; comme &lt;a href="http://www.google.fr/reader/"&gt;Google Reader&lt;/a&gt;, &lt;a href="http://www.netvibes.com/#General"&gt;NetVibes&lt;/a&gt; (qui est en fait un peu plus qu'un simple agrégateur : plus proche d'iGoogle peut-être...) ou &lt;a href="http://www.bloglines.com/"&gt;BlogLines&lt;/a&gt; (et bien d'&lt;a href="http://fr.wikipedia.org/wiki/Agr%C3%A9gateur#Voir_aussi"&gt;autres&lt;/a&gt;...).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Google Reader :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Je vais m'intéresser maintenant plus particulièrement à Google Reader. (Non, je n'ai pas d'action chez Google : je ne leur fais pas de pub... juste de la propagande. On en reparlera...)&lt;br /&gt;&lt;br /&gt;L'intérêt, à mon sens, de Google Reader, c'est qu'il se présente &lt;span style="font-weight: bold;"&gt;quasiment comme Gmail&lt;/span&gt; : si on utilise cette messagerie, on ne sera pas dépaysé.&lt;br /&gt;Pour ajouter des abonnements, rien de plus simple : on peut entrer l'URL du flux désiré (via "&lt;span style="font-family: courier new;"&gt;ajouter un abonnement&lt;/span&gt;"), ou importer une liste de flux (fichier au format OPML) dans "&lt;span style="font-family: courier new;"&gt;Gestion des abonnement/Importer&lt;/span&gt;" ou encore lancer une recherche et attendre les propositions du moteur. Si en plus on possède un navigateur profondément bon (comme, je sais pas moi... &lt;a href="http://www.spreadfirefox.com/fr/worldrecord"&gt;Firefox&lt;/a&gt; ?), celui-ci vous propose de l'y ajouter lorsque vous cliquez l'icône d'abonnement sur un site.&lt;br /&gt;&lt;br /&gt;En dehors des fonctionnalités de base, comme tagger ses articles, assurer un suivi, ajout à iGoogle et quelques stats, Google Reader permet également de &lt;span style="font-weight: bold;"&gt;"partager" des items&lt;/span&gt;. C'est à dire que suite à la lecture d'un très bon article sur l'un de vos flux, vous pouvez cliquer sur "&lt;span style="font-family: courier new;"&gt;Partager&lt;/span&gt;" pour l'ajouter à votre page de partage. Cette page web est "publique" et est donc accessible à quiconque en connait l'adresse : à fournir à vos amis par exemple.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jessimcc.free.fr/divers/forum/jardinage/serre1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 228px; height: 170px;" src="http://jessimcc.free.fr/divers/forum/jardinage/serre1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mais &lt;span style="font-weight: bold;"&gt;allons un peu plus loin&lt;/span&gt;. Il existe évidemment un widget pour ajouter vos derniers coups de cœur à votre site ou à votre blog (painless, surtout chez Blogger). Du coup, on obtient quasiment un "Tumblelog" (blog avec messages très courts, le plus souvent un simple lien vers une page intéressante).&lt;br /&gt;Attention, maintenant grosse manip' bien technique : dans "&lt;span style="font-family: courier new;"&gt;Paramètres&lt;/span&gt;", passer la langue en Anglais et là "&lt;span style="font-weight: bold;"&gt;KABOOM&lt;/span&gt;"* : vous pouvez à présent ajouter des notes qui seront partagées par défaut (décocher la case "Share" sinon) et la possibilité de changer l'apparence de votre page de partage (d'où les petits ninjas sur la mienne**). Du coup, on a effectivement &lt;span style="font-weight: bold;"&gt;un Tumblelog à pas cher&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Je suis sûr que ça va intéresser &lt;a href="http://www.lefty-chronicles.blogspot.com"&gt;Lefty&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;* : Si vous ne parvenez pas à effectuer cette manipulation, merci de contacter notre équipe d'assistance au 080808, 44€55/s...&lt;br /&gt;** : Dans la colonne de droite, juste en dessous de la pub sur laquelle vous ne cliquez jamais bande de rats !&lt;br /&gt;*** : Les images de cet article appartiennent à leurs propriétaires respectifs. Pas à moi donc...&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-25832912440554194?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/25832912440554194/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=25832912440554194' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/25832912440554194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/25832912440554194'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/05/google-reader-pour-lefty.html' title='Google Reader pour Lefty'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1940226201881692026</id><published>2008-05-21T23:47:00.005+02:00</published><updated>2008-05-22T00:09:59.367+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='liens'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Typage statique pour Ruby</title><content type='html'>&lt;div style="text-align: justify;"&gt;Via &lt;a href="http://blog.segment7.net/articles/2008/04/16/static-typing-for-ruby"&gt;cet article&lt;/a&gt; sur &lt;a href="http://blog.segment7.net/"&gt;Segment7&lt;/a&gt;, voici le lien vers une publication sur le développement de &lt;a href="http://www.cs.umd.edu/%7Ejfoster/ruby.pdf"&gt;DRuby (DiamondBack Ruby)&lt;/a&gt; [:en, :pdf] : un outil (codé en OCaml) visant à autoriser le &lt;span style="font-weight: bold;"&gt;typage statique en Ruby&lt;/span&gt;. Le code source de cette application devrait être publié dans les mois à venir.&lt;br /&gt;&lt;br /&gt;J'ai un avis assez mitigé sur ce genre de projet : d'un côté, j'apprécie la possibilité de choisir (cf. &lt;a href="http://sobe-session.blogspot.com/2008/01/typage-statique-ou-dynamique-la-groovy.html"&gt;article précédent sur le typage&lt;/a&gt; en Groovy), et je reconnais tout à fait beaucoup des avantages du typage statique. Parmi eux, une certaine fiabilité et la détection précoce d'erreurs de développement.&lt;br /&gt;Mais en Ruby (Perl, Python, etc...) ?  L'un des avantages de ces langages dynamiques n'est-il pas d'"éluder" au maximum les contraintes de type pour un développement plus rapide et libre ? En Ruby en tout cas, la "philosophie" veut que l'on s'intéresse davantage au comportement d'un objet (no primitive type here !) qu'à sa classe (principe du "&lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;Duck Typing&lt;/a&gt;"). On croise donc plus souvent des &lt;span style="font-weight: bold;font-family:courier new;" &gt;foo.respond_to? :a_method&lt;/span&gt; que des &lt;span style="font-weight: bold;font-family:courier new;" &gt;foo.is_a? A_Class&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Il est cependant intéressant de se poser la question suivante (et pas seulement en Ruby !) :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Comment et/ou avec quelles techniques, assurer la fiabilité d'un programme dans un langage dynamique ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Je vais essayer de bientôt placer quelques petits exemples de code sur ce sujet.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1940226201881692026?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1940226201881692026/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1940226201881692026' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1940226201881692026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1940226201881692026'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/05/typage-statique-pour-ruby.html' title='Typage statique pour Ruby'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-90528933626604248</id><published>2008-05-15T22:39:00.009+02:00</published><updated>2008-05-15T23:25:09.672+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Ruby : Création dynamique de méthodes</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.programmez.com/img/actus/ruby.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://www.programmez.com/img/actus/ruby.jpg" alt="" border="0" /&gt;&lt;/a&gt;Ola Bini vient de publier &lt;a href="http://ola-bini.blogspot.com/2008/05/dynamically-created-methods-in-ruby.html"&gt;un article très bien fait&lt;/a&gt; sur les différentes façons disponibles en Ruby pour la création dynamique de méthodes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pour cela, il envisage trois voies : le &lt;span style="font-family: courier new; font-weight: bold;"&gt;def&lt;/span&gt; classique, la méthode &lt;span style="font-weight: bold; font-family: courier new;"&gt;define_method&lt;/span&gt; ou l'une de ces deux dans un &lt;span style="font-weight: bold; font-family: courier new;"&gt;eval&lt;/span&gt;. Plusieurs paramètres importants dans le choix de la méthode utilisée :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Performances (à ce titre, voir &lt;a href="http://railsontherun.com/2008/5/4/avoid-using-metaprogramming"&gt;cet article déconseillant l'usage de la métaprogrammation&lt;/a&gt;...)&lt;/li&gt;&lt;li&gt;Portée lexicale&lt;/li&gt;&lt;li&gt;Fuites mémoires&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;De façon assez amusante, il recommande pour des questions de vitesse, surtout, d'utiliser en priorité le &lt;span style="font-weight: bold; font-family: courier new;"&gt;def&lt;/span&gt;  classique. Juste pour l'exemple, voici le code d'une définition par &lt;span style="font-weight: bold; font-family: courier new;"&gt;def&lt;/span&gt;, dans un &lt;span style="font-weight: bold; font-family: courier new;"&gt;eval&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Foo&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;bar = Foo.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;&lt;br /&gt;method_name = &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:something&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;eval &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"def bar.&lt;b&gt;#{method_name}&lt;/b&gt;; puts &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'Hi !'&lt;/span&gt;; end"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;bar.method(method_name).&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;call&lt;/span&gt;&lt;br /&gt;&lt;i&gt;#=&gt; Hi !&lt;/i&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-90528933626604248?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ola-bini.blogspot.com/2008/05/dynamically-created-methods-in-ruby.html' title='Ruby : Création dynamique de méthodes'/><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/90528933626604248/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=90528933626604248' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/90528933626604248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/90528933626604248'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/05/ruby-cration-dynamique-de-mthodes.html' title='Ruby : Création dynamique de méthodes'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-3407562301538984229</id><published>2008-04-27T21:43:00.005+02:00</published><updated>2008-05-03T20:32:48.380+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>MetaTricks : Un petit DSL</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.programmez.com/img/actus/ruby.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://www.programmez.com/img/actus/ruby.jpg" alt="" border="0" /&gt;&lt;/a&gt;Depuis quelques temps, j'avais envie de tester s'il était facile ou non d'implémenter un petit DSL (ou Domain Specific Language) en Ruby. Il se trouve que plutôt, oui. Le code collé chez Pastie :&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://pastie.caboo.se/187701"&gt;&lt;span style="font-weight: bold;"&gt;Code DSL&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Le langage que je vous propose est loin d'être Turing-complet : ce n'est pas le but. Dans sa forme actuelle, il gère les transferts entre les "comptes" de plusieurs personnes grâce à une syntaxe en anglais. Trois verbes disponibles : donner, recevoir et avoir. Les phrases sont formées de la façon suivante :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:courier new;" &gt;"Sujet" "Verbe" "Somme" $ [complément]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Avec pour complément facultatif :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:courier new;" &gt;"Cibleur" "Second compte"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il est possible de commenter une ligne en la commençant par "--" (comme en Ada !). Un "cibleur" ('to' ou 'from') désigne un autre compte. Attention, pour des raisons de blocage mental de ma part à l'approche d'une Regexp, la somme d'argent doit être un entier, et non un flottant. Pas de centimes pour les vrais. Ah, oui, et pas de point à la fin des phrases. Il parait que ça sert à rien(.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Un exemple ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 102);"&gt;-- Marie is cool:&lt;br /&gt;Marie gives 5 $ to Peter&lt;br /&gt;Marie has 10 $&lt;br /&gt;Marie receives 15 $ from Peter&lt;br /&gt;Peter gives 10 $ to Simon because he previously borrowed him...&lt;br /&gt;-- Marion is Marie's dark-twin...&lt;br /&gt;Sobe receives 1 $ from Marion&lt;br /&gt;-- But Sobe's a gangsta who gat connectionz so:&lt;br /&gt;Sobe receives 100000 $ like this !&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;est valable, et donnera :&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;--------------------&lt;br /&gt;-= Report =-&lt;br /&gt;--------------------&lt;br /&gt;Number of accounts: 5&lt;br /&gt;Marie owns 25.0 $.&lt;br /&gt;Peter lost 20.0 $.&lt;br /&gt;Simon earned 10.0 $.&lt;br /&gt;Sobe earned 100001.0 $.&lt;br /&gt;Marion lost 1.0 $.&lt;/pre&gt;&lt;br /&gt;C'est loin d'être parfait, mais le corps de l'interprète fait à peine 200 lignes. Je suis juste un peu déçu de ne pas avoir davantage employé les outils de la métaprogrammation : je passe sans doute trop par de l'analyse de chaîne de caractère, opération en soit risquée.&lt;br /&gt;&lt;br /&gt;Tout commentaire ou critique vivement apprécié(e).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-3407562301538984229?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://pastie.caboo.se/187701' title='MetaTricks : Un petit DSL'/><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/3407562301538984229/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=3407562301538984229' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3407562301538984229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/3407562301538984229'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/04/metatricks-un-petit-dsl.html' title='MetaTricks : Un petit DSL'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-1210938658644679383</id><published>2008-04-23T22:38:00.004+02:00</published><updated>2008-04-24T22:40:09.038+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Ruby : Sécuriser la redéfinition de méthode</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.programmez.com/img/actus/ruby.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://www.programmez.com/img/actus/ruby.jpg" alt="" border="0" /&gt;&lt;/a&gt;Etant un peu angoissé de nature, il y a un truc qui me tracasse en Ruby depuis quelques temps : l'absence de warning à la redéfinition de méthodes existantes. Un exemple ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Object&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; self.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Oh dude !"&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;a = &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Array&lt;/span&gt;.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt; 46&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; **Judgement Day**&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ceci devrait bien vous convaincre de l'utilité d'avertir le programmeur durant le développement. Rappelons aussi que &lt;span style="font-weight: bold; font-family: courier new;"&gt;Object.methods&lt;/span&gt; dénombre 77 méthodes pour cette racine de tout objet en Ruby...&lt;br /&gt;&lt;br /&gt;Du coup, voilà un petit trick qui permet de sécuriser ce point, grâce à la méthode de classe &lt;span style="font-weight: bold; font-family: courier new;"&gt;method_added&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Object&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; self.method_added sym&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; self.methods.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt;? sym.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;to_s&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;then&lt;/span&gt;&lt;br /&gt;            print &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"WARNING: method #{sym}" + \\&lt;br /&gt;            "of &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; #{self} redefined\n"&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Integer&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; clone&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"I&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'&lt;/span&gt;m your dark twin !"&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;#=&gt; WARNING: method clone of &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;Integer&lt;/span&gt; redefined&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-1210938658644679383?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/1210938658644679383/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=1210938658644679383' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1210938658644679383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/1210938658644679383'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/04/ruby-scuriser-la-redfinition-de-mthode.html' title='Ruby : Sécuriser la redéfinition de méthode'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-5953548642513811754</id><published>2008-04-07T22:54:00.003+02:00</published><updated>2008-04-07T23:39:06.036+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>MetaTricks : Ciseaux pour enfants</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.programmez.com/img/actus/ruby.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://www.programmez.com/img/actus/ruby.jpg" alt="" border="0" /&gt;&lt;/a&gt;Les 28 et 29 Mars derniers a eu lieu la &lt;a href="http://mtnwestrubyconf2008.confreaks.com/"&gt;MountainWest RubyConf 2008&lt;/a&gt;, une série de présentations sur la programmation en Ruby. Il y a beaucoup de conférences de Rubyistes et de Railistes à travers le monde (certains en sont d'ailleurs &lt;a href="http://hackety.org/2007/11/14/rubyIsMoney.html"&gt;agacés&lt;/a&gt;...), mais celle-ci me semble avoir été particulièrement riche, avec des sujets très intéressants : DSL, cœur du langage, écosystème général,  et... métaprogrammation.&lt;br /&gt;&lt;br /&gt;Je n'ai pas la chance d'avoir été sur place mais, miracle du web oblige, les vidéos des différentes présentations sont disponibles (en bonne voire très bonne qualité, avec les slides en direct) à &lt;a href="http://mtnwestrubyconf2008.confreaks.com/"&gt;cette page&lt;/a&gt;. Merci Confreaks !&lt;br /&gt;&lt;br /&gt;La présentation de &lt;a href="http://gilesbowkett.blogspot.com/"&gt;Giles Bowkett&lt;/a&gt; est particulièrement réussie :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://mtnwestrubyconf2008.confreaks.com/03bowkett.html"&gt;&lt;span style="font-weight: bold;"&gt;Code Generation : The Safe Scissors of Metaprogramming&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt; Giles Bowkett, dont j'ai régulièrement parlé ici (générateur de MIDI en Ruby, métaprogrammation...), y parle bien sûr de métaprog' et de génération "automatique" de code, le premier étant un outil pour le second.&lt;br /&gt;Il est assez difficile de résumer ce type de présentation en quelques mots, et je vais donc lancer ça en vrac :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Archimède et mathématiques par les cercles en Grèce.&lt;/li&gt;&lt;li&gt;Les Rubyistes pratiquent des "langages exotiques" : Scala, Erlang, Haskell, Lisp, Io, Scheme, Smalltalk... mais ne parle pas Grec !&lt;/li&gt;&lt;li&gt;De Pi "The Circle" à Lambda "The Ultimate" en LISP.&lt;/li&gt;&lt;li&gt;3 piliers improbables : Rubinius, Nodebox et "code == data".&lt;/li&gt;&lt;li&gt;Ruby2ruby&lt;/li&gt;&lt;li&gt;"Monkeypatch Monkeypatching is Metamonkeypatching"&lt;/li&gt;&lt;li&gt;Avantages économiques de la génération de code.&lt;/li&gt;&lt;li&gt;Pub pour "Code Generation in Action"...&lt;/li&gt;&lt;li&gt;De Java à Rails en passant par LISP (et Perl ! (et Smalltalk !)).&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;"Skilled programmers can write better programmers than they can hire."&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Avec de l'humour absurde au milieu, du code en live et de la bonne humeur... Très agréable à regarder. Les deux seuls reproches que je pourrais faire sont d'une part qu'il passe un peu trop vite (à mon goût) de l'"historique" à la pratique, et d'autre part que les domaines d'applications proposés en exemple ne me paraissent pas assez ambitieux, surtout venant de lui ; G. Bowkett n'étant pas le dernier des n00bs : parmi ses petites réalisations persos on trouve autre chose que des applis en Rails : API pour le robot Lego, générateur de MIDI, programmation graphique, diverses gems... visitez &lt;a href="http://gilesbowkett.blogspot.com/"&gt;son site&lt;/a&gt; ! (ou retrouvez les autres présentations &lt;a href="http://mtnwestrubyconf2008.confreaks.com/"&gt;ici&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-5953548642513811754?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mtnwestrubyconf2008.confreaks.com/03bowkett.html' title='MetaTricks : Ciseaux pour enfants'/><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/5953548642513811754/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=5953548642513811754' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5953548642513811754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/5953548642513811754'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/04/metatricks-ciseaux-pour-enfants.html' title='MetaTricks : Ciseaux pour enfants'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-9016159471953548926</id><published>2008-04-02T22:03:00.007+02:00</published><updated>2008-04-02T22:23:30.897+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Une classe pour une fonction</title><content type='html'>&lt;div style="text-align: justify;"&gt;Une petite idée comme ça : plutôt que d'&lt;span style="font-weight: bold;"&gt;appeler directement une fonction&lt;/span&gt;, comme ici (loi des gaz parfaits) :&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; compute_p v, n, t&lt;br /&gt;    r = 8.314&lt;br /&gt;    p = (n*r*t)/v&lt;br /&gt;    &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;return&lt;/span&gt; p&lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"p = #{compute_p(1.0, 10.0, 273.5)}"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pourquoi ne pas créer &lt;span style="font-weight: bold;"&gt;une classe, représentant cette fonction&lt;/span&gt; ? En effet, on peut alors définir un certain nombre d'options à l'exécution "internes" à notre fonction (ici, j'ai mis des exemples simples : &lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;print&lt;/span&gt; pour un affichage console, et &lt;span style="font-family: courier new; color: rgb(0, 0, 153);"&gt;clock&lt;/span&gt; pour retarder l'exécution d'un temps donné). On pourrait aussi sécuriser les arguments (non fait ici...) par rapport à des contraintes internes à la classe (ex : &lt;span style="font-style: italic;"&gt;température &gt; 0, autre ?&lt;/span&gt;) ou décider de remplacer certains arguments sous certaines conditions, éventuellement externes. Et bien d'autres choses, pour des problématiques concurrentielles... Des idées ?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt; Compute_p_&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;class&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Initializing the arguments as attributes&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;initialize&lt;/span&gt; args &lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@v&lt;/span&gt; = args[&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:v&lt;/span&gt;]&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@n&lt;/span&gt; = args[&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:n&lt;/span&gt;]&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@t&lt;/span&gt; = args[&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:t&lt;/span&gt;]&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,125,54);background-color: rgb(17, 34, 51);"&gt;@@r&lt;/span&gt; = 8.314&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt&lt;/span&gt; = []&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt_args&lt;/span&gt; = {}&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# To add an option at execution&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; add_option option, argopt = nil&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt&lt;/span&gt;.push option&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt_args&lt;/span&gt;[option] = argopt&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Wait &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;for&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt_args&lt;/span&gt;[&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:clock&lt;/span&gt;] s before executing&lt;/span&gt;    &lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; option_clock&lt;br /&gt;        t_beg = Time.now&lt;br /&gt;        t = t_beg&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt&lt;/span&gt;.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt;? &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:clock&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;then&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;while&lt;/span&gt; t &amp;lt t_beg + &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt_args&lt;/span&gt;[&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:clock&lt;/span&gt;]&lt;br /&gt;                t = Time.now&lt;br /&gt;            &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Verbose-like&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; option_print&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;if&lt;/span&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@opt&lt;/span&gt;.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;include&lt;/span&gt;? &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:print&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;then&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Executing function Compute_p"&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"with arguments"&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"v = #{&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@v&lt;/span&gt;}"&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"n = #{&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@n&lt;/span&gt;}"&lt;/span&gt;&lt;br /&gt;            &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"t = #{&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@t&lt;/span&gt;}"&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;   &lt;br /&gt; &lt;br /&gt;    &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Execution after options&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;def&lt;/span&gt; execute&lt;br /&gt;        &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Options management&lt;br /&gt;&lt;/span&gt;        option_print        &lt;br /&gt;        option_clock&lt;br /&gt;        &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 34, 51);font-style: italic;font-weight: normal;font-family: monospace;"&gt;# Function core&lt;br /&gt;&lt;/span&gt;        p = (&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@n&lt;/span&gt;*&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,125,54);background-color: rgb(17, 34, 51);"&gt;@@r&lt;/span&gt;*&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@t&lt;/span&gt;)/&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,91,91);background-color: rgb(17, 34, 51);"&gt;@v&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;return&lt;/span&gt; p&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;    &lt;br /&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;values = {&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:v&lt;/span&gt; =&gt; 1.0, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:n&lt;/span&gt; =&gt; 10.0, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:t&lt;/span&gt; =&gt; 273.5}&lt;br /&gt;calcul = Compute_p_class.&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;new&lt;/span&gt; values&lt;br /&gt;calcul.add_option &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:clock&lt;/span&gt;, 5.0&lt;br /&gt;calcul.add_option &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(255,255,81);background-color: rgb(17, 34, 51);"&gt;:print&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;puts&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"p = #{calcul.execute}"&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-9016159471953548926?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/9016159471953548926/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=9016159471953548926' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/9016159471953548926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/9016159471953548926'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/04/une-classe-pour-une-fonction.html' title='Une classe pour une fonction'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-7465342354755483663</id><published>2008-03-30T01:41:00.005+01:00</published><updated>2008-03-30T01:55:55.578+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='jeu'/><category scheme='http://www.blogger.com/atom/ns#' term='fortran'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Jeu de Nim en Fortran</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nJatC71XBiI/R-7h0mxsoCI/AAAAAAAAAHs/Sr4vf0MmZMI/s1600-h/f90_icon.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_nJatC71XBiI/R-7h0mxsoCI/AAAAAAAAAHs/Sr4vf0MmZMI/s320/f90_icon.bmp" alt="" id="BLOGGER_PHOTO_ID_5183328515028459554" border="0" /&gt;&lt;/a&gt;Vous connaissez peut-être le jeu de Nim sous le nom de "jeu des allumettes"... Version Frotran 90 "sale" ("Goto statement considered harmfull", non respect des normes actuelles...) en mode console. Au passage, je teste l'outil de conversion html de (g)Vim (f*ck it ça passe pas...)... Got a problem homie ? Just tell me (give my money and buy my medecine...). Version collée chez Pastie pour plus de lisibilité (lignes trop longues, etc...) : &lt;a href="http://pastie.caboo.se/172612"&gt;goto ICI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ze code : &lt;/span&gt;&lt;br /&gt;(compilé avec GFortran (fortran 90) sous Windows)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(208, 208, 208); color: rgb(238, 238, 204); background-color: rgb(17, 34, 51);font-family:monospace;"&gt;&lt;br /&gt;Program Jeu_de_Nim&lt;br /&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;IMPLICIT&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;NONE&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt; :: nbre_allum, ordre, choix, scorePC, scoreHumain, nb_parties, i, aleas&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;logical&lt;/span&gt; :: PC_first, tournoi&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! BIENVENUE&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"JEU DE NIM v2.0"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Bienvenue dans ce petit jeu de Nim."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"A chaque tour, le joueur ou le PC doivent prendre 1, 2 ou 3 allumettes."&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Celui qui prend la derniere allumette a perdu. Bonne chance."&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"      "&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; scorePC = 0&lt;br /&gt; scoreHumain = 0&lt;br /&gt; tournoi = .FALSE.&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! MENU&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;111 print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Entrez votre choix :"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[0] : Nouvelle Partie"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[1] : Nouveau Tournoi"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[2] : Afficher Scores"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[3] : Reinitialiser les Scores"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[4] : Quitter"&lt;/span&gt;&lt;br /&gt; read*, choix&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (choix)&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (0)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 222&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (1)&lt;br /&gt;   tournoi = .TRUE.&lt;br /&gt;   scorePC = 0&lt;br /&gt;   scoreHumain = 0&lt;br /&gt;   11 print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Tournoi en combien de parties ?"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   read*, nb_parties&lt;br /&gt;   if (nb_parties &amp;lt 1) then&lt;br /&gt;    print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Tssss... Trop drole..."&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 11&lt;br /&gt;   end if&lt;br /&gt;   &lt;br /&gt;   aleas = 2*rand()&lt;br /&gt;   &lt;br /&gt;   PC_first = .TRUE.&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (aleas == 1) PC_first = .FALSE.&lt;br /&gt;   i = 0&lt;br /&gt;   10 i = i+1&lt;br /&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"PARTIE numero : "&lt;/span&gt;, i&lt;br /&gt;   call Afficher_scores(scorePC, scoreHumain)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (i &gt; nb_parties) then&lt;br /&gt;    call Afficher_scores(scorePC, scoreHumain)&lt;br /&gt;    if (scorePC &gt; scoreHumain) print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"LE PC GAGNE LE TOURNOI &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    if (scorePC == scoreHumain) print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"EGALITE &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!! INCROYABLE !!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;    if (scorePC &amp;lt scoreHumain) print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"VOUS GAGNEZ LE TOURNOI &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!! BRAVO !!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 111&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;END&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;   nbre_allum = 50*rand() + 1&lt;br /&gt;   PC_first = .NOT.PC_first&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 223&lt;br /&gt;   &lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (2)&lt;br /&gt;   call Afficher_scores(scorePC, scoreHumain)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 111&lt;br /&gt;   &lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (3)&lt;br /&gt;   scorePC = 0&lt;br /&gt;   scoreHumain = 0&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 111&lt;br /&gt;   &lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (4)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 666&lt;br /&gt;   &lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;DEFAULT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Mauvais choooooooooooix......"&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 111&lt;br /&gt;   &lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;END&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! PARTIE&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;222 print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Combien d&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'&lt;/span&gt;allumettes pour la partie ? (0 pour un nombre au hasard)"&lt;/span&gt;&lt;br /&gt; read*, nbre_allum&lt;br /&gt; if (nbre_allum == 0) nbre_allum = 50*rand()+1&lt;br /&gt; if (nbre_allum &amp;lt 0) then&lt;br /&gt;  print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Hummmmmm... Pas beaucoup ca..."&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 222&lt;br /&gt; end if&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Qui joue en premier ?"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[1] : PC"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[2] : Humain"&lt;/span&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"[3] : Au hasard"&lt;/span&gt;&lt;br /&gt; read*, ordre&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (ordre)&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (1)&lt;br /&gt;   PC_first = .TRUE.&lt;br /&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Le PC commence."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (2)&lt;br /&gt;   PC_first = .FALSE.&lt;br /&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"L&lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;'&lt;/span&gt;humain commence."&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (3)&lt;br /&gt;   aleas = 2*rand()&lt;br /&gt;   PC_first = .TRUE.&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (aleas &gt; 1) PC_first = .FALSE.&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;DEFAULT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   PC_first = .TRUE.&lt;br /&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Apprends a taper cono &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;   print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Du coup le PC commence..."&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;END&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;223 &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (PC_first) &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;THEN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  do while (nbre_allum &gt; 0)&lt;br /&gt;   call Tour_de_jeu_PC(nbre_allum,scoreHumain)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (nbre_allum &gt; 0) call Tour_de_jeu_Humain(nbre_allum,scorePC)&lt;br /&gt;  end do&lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;ELSE&lt;/span&gt;&lt;br /&gt;  do while (nbre_allum &gt; 0)&lt;br /&gt;   call Tour_de_jeu_Humain(nbre_allum,scorePC)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (nbre_allum &gt; 0) call Tour_de_jeu_PC(nbre_allum,scoreHumain)&lt;br /&gt;  end do&lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;END&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;IF&lt;/span&gt; (tournoi) &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 10&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 111&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! EXIT&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;666 print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"MERCI, A BIENTOT &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;End Program Jeu_de_Nim&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! AFFICHAGE DES SCORES&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;Subroutine Afficher_scores(scPC, scHuman)&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(50,105,5);background-color: rgb(17, 34, 51);"&gt;intent(in)&lt;/span&gt; :: scPC, scHuman&lt;br /&gt; &lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!! SCORE !!!!!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"PC     : "&lt;/span&gt;, scPC &lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Humain : "&lt;/span&gt;, scHuman&lt;br /&gt; &lt;br /&gt;End Subroutine Afficher_scores&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! TOUR PC&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;Subroutine Tour_de_jeu_PC(nb_al, scHuman)&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(50,105,5);background-color: rgb(17, 34, 51);"&gt;intent(inout)&lt;/span&gt; :: nb_al, scHuman&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt; :: reste, prise&lt;br /&gt; &lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Il y a "&lt;/span&gt;, nb_al, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"allumettes."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; reste = MOD(nb_al,4)&lt;br /&gt; &lt;br /&gt; if (nb_al == 1) then&lt;br /&gt;  prise = 1&lt;br /&gt; else&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (reste)&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (1)&lt;br /&gt;    prise = 3*rand()+1&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (2)&lt;br /&gt;    prise = 1&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (3)&lt;br /&gt;    prise = 2&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; (0)&lt;br /&gt;    prise = 3&lt;br /&gt;   &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;&lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;CASE&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(204,0,0);background-color: rgb(17, 34, 51);"&gt;DEFAULT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Erreur : module inconsistant"&lt;/span&gt;&lt;br /&gt;    print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Module = "&lt;/span&gt;, reste&lt;br /&gt;    STOP&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;END&lt;/span&gt; &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;SELECT&lt;/span&gt;&lt;br /&gt; end if&lt;br /&gt; &lt;br /&gt; nb_al = nb_al - prise&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Le PC prend "&lt;/span&gt;, prise, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;" allumettes."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Il reste : "&lt;/span&gt;, nb_al, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"allumettes."&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; if (nb_al == 0) then&lt;br /&gt;  print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"VOUS AVEZ GAGNE &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!! FELICITATIONS !!!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;  scHuman = scHuman + 1&lt;br /&gt; end if&lt;br /&gt;&lt;br /&gt;End Subroutine Tour_de_jeu_PC&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;! TOUR HUMAIN&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;/span&gt;Subroutine Tour_de_jeu_Humain(nb_al, scPC)&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt;, &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(50,105,5);background-color: rgb(17, 34, 51);"&gt;intent(inout)&lt;/span&gt; :: nb_al, scPC&lt;br /&gt; &lt;span style="font-weight: bold;font-family: monospace;font-style: normal;color: rgb(155,70,20);background-color: rgb(17, 34, 51);"&gt;integer&lt;/span&gt; :: prise&lt;br /&gt; &lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Il y a "&lt;/span&gt;, nb_al, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"allumettes."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Combien souhaitez vous en prendre ? (1, 2 ou 3)"&lt;/span&gt;&lt;br /&gt;999 read*, prise&lt;br /&gt; &lt;br /&gt; if ((prise &gt; 3).OR.(prise &amp;lt 1).OR.(prise &gt; nb_al)) then&lt;br /&gt;  print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Nombre saisi incorrect : veuillez recommencer."&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bolder;font-family: monospace;font-style: normal;color: rgb(54,245,255);background-color: rgb(17, 34, 51);"&gt;GOTO&lt;/span&gt; 999&lt;br /&gt; end if&lt;br /&gt;&lt;br /&gt; nb_al = nb_al - prise&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Vous avez pris "&lt;/span&gt;, prise, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;" allumettes."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"Il reste : "&lt;/span&gt;, nb_al, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"allumettes."&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; if (nb_al == 0) then&lt;br /&gt;  print*, &lt;span style="font-weight: normal;font-family: monospace;font-style: normal;color: rgb(180,180,255);background-color: rgb(17, 34, 51);"&gt;"VOUS AVEZ PERDU &lt;span style="color: rgb(0,255,110);background-color: rgb(17, 134, 51);font-style: normal;font-weight: normal;font-family: Georgia;"&gt;!!!!!"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;  scPC = scPC + 1&lt;br /&gt; end if&lt;br /&gt; &lt;br /&gt;End Subroutine Tour_de_jeu_Humain&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://creativecommons.org/licenses/by/2.0/fr/" rel="license"&gt;
&lt;img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"/&gt;
&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4622127992180437360-7465342354755483663?l=sobe-session.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sobe-session.blogspot.com/feeds/7465342354755483663/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4622127992180437360&amp;postID=7465342354755483663' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7465342354755483663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4622127992180437360/posts/default/7465342354755483663'/><link rel='alternate' type='text/html' href='http://sobe-session.blogspot.com/2008/03/jeu-de-nim-en-frotran.html' title='Jeu de Nim en Fortran'/><author><name>Sobe</name><uri>http://www.blogger.com/profile/00052582236106478920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_nJatC71XBiI/R2llCg0sxiI/AAAAAAAAAGg/JT_u2EOuyDQ/S220/pitichatsobe.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nJatC71XBiI/R-7h0mxsoCI/AAAAAAAAAHs/Sr4vf0MmZMI/s72-c/f90_icon.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4622127992180437360.post-4407096029653018042</id><published>2008-03-26T21:59:00.002+01:00</published><updated>2008-03-26T23:53:20.551+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='libre'/><category scheme='http://www.blogger.com/atom/ns#' term='programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='g33k'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Google Summer Of Code</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/images/code_sm.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 153px; height: 55px;" src="http://code.google.com/images/code_sm.png" alt="" border="0" /&gt;&lt;/a&gt;Cette année encore, Google organise le &lt;span style="font-weight: bold;"&gt;Summer of Code&lt;/span&gt; (abrégé en SoC) : il s'agit d'une opération permettant à des étudiants du monde entier de s'investir dans un grand projet libre le temps de l'été. Pour en savoir plus :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;La &lt;a href="http://code.google.com/soc/2008/"&gt;page officielle&lt;/a&gt; du programme (:en)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.siteduzero.com/news-62-23666-92109-google-summer-of-code-2008-inscriptions-ouvertes.html"&gt;Présentation&lt;/a&gt; sur le &lt;abbr title="Site du Zéro"&gt;SDZ&lt;/abbr&gt; (:fr)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Plutôt que de plagier cette dernière news très bien faite, je vais juste apporter quelques remarques.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Beaucoup de projets impliqués ; Un grand absent ?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De mes petits yeux fatigués, j'ai compté &lt;span style="font-weight: bold;"&gt;177 projets libres&lt;/span&gt; participant au programme. C'est énorme. Chacun profitant de l'engagement de plusieurs étudiants, à temps plein, pendant 2 mois complets, il faut se figurer le bénéfice que cela génère pour le monde du libre ! Sans compter les 4500 $ pour l'étudiant et 500 $ pour le projet en cas de succès...&lt;br /&gt;&lt;br /&gt;On retrouve beaucoup de noms très connus du monde libre : Apache, The GIMP, Wikimedia, Linux, Mozilla... ( Mais aussi certains un peu moins célèbres qui m'ont fait plaisir comme &lt;a href="http://www.wesnoth.org/"&gt;Battle for Wesnoth&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Mais il en manque certains, dont un qui saute aux yeux : &lt;a style="font-weight: bold;" href="http://www.openoffice.org/"&gt;OpenOffice.org&lt;/a&gt;. Pourquoi ? Vraiment là, je donne ma langue au chat... (Mauvaises relations avec Google ?).&lt;br /&gt;J'ai aussi noté l'absence totale de logiciel de P2P (Azureus et Bittorrent sont eux aussi libres). Là en revanche, ça peut s'expliquer plus simplement vu l'utilisation souvent approximativement légale de ce type d'application. Quoique. A ce compte là, on pourrait exclure tous les projets de langage de prog' : on peut potentiellement en faire mauvais usage...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Les langages ? (Ruby ?)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Question essentielle s'il en est... On en retrouve un nombre considérable : C, C++ et Java bien sûr. Mais pas seulement. La plupart des langages de script sont là : PHP, Perl, Python, Ruby, Javascript, Groovy, Scheme... Et aussi du fonctionnel pour les durs : LISP (CommonLISP et Scheme notamment) et Haskell au moins. Et puis des langages de grognards : Fortran et Ada notamment sur &lt;a href="http://fr.wikipedia.org/wiki/GNU_Compiler_Collection"&gt;GCC&lt;/a&gt;.&lt;br /&gt;Au passage, je trouve vraiment exceptionnel de pouvoir participer, en tant qu'étudiant, au développement d'un "grand" langage via ce programme : LISP, PHP, Perl... Geeky !&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Et le &lt;span style="font-weight: bold;"&gt;Ruby ?&lt;/span&gt; On le retrouve sur différents projets, et pas forcément ceux auxquels on pouvait s'attendre...&lt;br /&gt;Certes, il y a &lt;a href="http://rubycentral.com/projects/gsoc-2008/ideas-for-gsoc-2008"&gt;Ruby Central&lt;/a&gt; dont les propositions de sujet sont très axées sur Merb et sur la collaboration avec d'autres langages (Python et Java notamment) ou d'autres interpréteurs (JRuby et Rubinius).&lt;br /&gt;On retrouve ensuite Ruby dans les projets &lt;a href="http://docs.codehaus.org/display/GSOC/Ideas"&gt;Codehaus&lt;/a&gt; (JRuby) et... &lt;a href="http://www.nescent.org/index.php"&gt;NESCent&lt;/a&gt; : le "National Evolutionary Synthesis Center" sur le &lt;a href="http://code.google.com/soc/2008/nescent/about.html"&gt;projet Bio*&lt;/a&gt; (Bio_ : Perl, Python, Ruby, SQL, Java...) dans le domaine de la bio-informatique. &lt;a href="http://sobe-session.blogspot.com/2007/11/ruby-en-sciences.html"&gt;Ruby en science ?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Triple-win ? (Winwinwin...)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vous l'aurez compris, je suis très favorable à ce type d'opération qui semble profitable aux trois protagonistes :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pour les étudiants :&lt;/span&gt; de l'expérience (très valorisable) et potentiellement une rétribution non négligeable.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pour les projets :&lt;/span&gt; 2 mois de travail par étudiant (+ 500 $ ?), un peu de pub, et potenti
