<html><head></head><body><div class="stretcher">

<h3>Utilisation de la console</h3>

<p>La fen&ecirc;tre ci-dessus est une invite de console Ruby. Saisie une ligne de code Ruby, appuie sur <em>Entr&eacute;e</em> et regarde la fonctionner!</p>

<p>Par exemple, essaie de faire un peu de math&eacute;mathique. Comme: <code class="cmd">2 + 6</code></p>

<div class="answer">\d+</div>

</div>

<div class="stretcher">

<h3>Nombres &amp; Math&eacute;matique</h3>

<p>Bien! Tu as fait un peu de math. Et vu comment la r&eacute;ponse appara&icirc;t?</p>

<p>Ruby reconnait les nombres et les symboles math&eacute;matiques. Tu peux faire encore un peu de maths, par exemple:</p>

<ul><li><code>4 * 10</code></li>

<li><code>5 - 12</code></li>

<li><code>40 / 4</code></li></ul>

<p>C'est certain, les ordinateurs sont pratiques et rapides pour les maths. Allons plus loin. Tu veux voir ton nom invers&eacute;?

Saisie ton prénom entre parenth&egrave;s, comme ceci: <code class="cmd">"Jimmy"</code></p>

<div class="answer">"(\w+)"</div>

</div>

<div class="stretcher">

<h3>Dit ton nom à l'envers</h3>

<p>Parfait, tu as formé une <strong>cha&icirc;ne</strong> &agrave; partir des lettres de ton nom. Une cha&icirc;ne est un jeu de charact&egrave;res que l'ordinateur peut manipuler.</p>

<p>Imagine que les lettres sont sur une corde à linge et que les guillemets sont les pinces &agrave; linge qui les maintiennent. Les guillemets marquent le début et la fin.</p>

<p>Pour inverser ton nom, tape: <code class="cmd">"Jimmy".reverse</code> (<em>N'oublie pas le point!</em>)</p>

<div class="answer">"(\w+)"</div>

</div>

<div class="stretcher">

<h3>Compter les lettres</h3>

<p>Tu as utilisé la <strong>m&eacute;thode</strong> <code> reverse</code> sur ton nom! En entourant ton nom avec des guillemets, tu as fait une cha&icirc;ne. Ensuite, tu as appelé la m&eacute;thode <code>reverse</code>, qui agit sur les cha&icirc;nes en inversant toutes les lettres.</p>

<p>Maintenant, voyons combien de lettre il y a dans ton nom: <code class="cmd">"Jimmy".length</code></p>

<div class="answer">\d+</div>

</div>

<div class="stretcher">

<h3>Sur la r&eacute;p&eacute;tition</h3>

<p>Bon, je suis certain que tu devines à quoi cela sert. Tu as certainement vu un site internet crier <em>Hey, ton mot de passe est trop court!</em> Certains programmes utilisent ce simple code.</p>

<p>Regarde ça. Multiplions ton nom par 5. <code class="cmd">"Jimmy" * 5</code></p>

<div class="answer">"(\w+)"</div>

</div>

<div class="stretcher chapmark">

<h3>Hey, déjà le résumé n°1</h3>

<p>Regardons ce que tu as appris pendant cette minute.</p>

<ul>

<li><strong>L'invite de la console.</strong> En tapant du code dans l'invite verte, tu obtiens une réponse dans l'invite rouge de la console. Tout code donne une réponse.</li>

<li><strong>Les nombres et les chaines</strong> sont des objet mathématiques et des objets textes en Ruby.</li>

<li><strong>Les méthodes.</strong> Tu as déjà utilisé une méthode écrite en Anglais, <code>reverse</code>

et une méthode symbolique telle que <code>*</code> (la méthode multiplication.) Les méthodes sont des actions!</li>

</ul>

<p>C'est l'essence même de ton apprentissage. Prendre des choses simples, jouer avec et les transformer en d'autres choses. Tu te sens déjà à l'aise? Je parie que oui.</p>

<p>Bien, à présent faisons quelque chose de plus compliqué. Essaie d'inverser un nombre: <code>40.reverse</code></p>

<div class="stdout">NoMethodError?: undefined method `reverse' for (\d+):Fixnum</div>

</div>

<div class="stretcher">

<h3>Arrête d'aboyer comme un fou!</h3>

<p>Tu ne peux pas inverser le nombre quarante. Je suppose que tu peux mettre ton écran devant un écran, mais inverser un nombre n'a pas de sens. Ruby signalé une erreur. Ruby te dis qu'il n'y a pas de méthode <code>reverse</code> pour les nombres.</p>

<p>Peut-être que si tu le transforme en chaïne: <code class="cmd">40.to_s.reverse</code>.</p>

<div class="answer">\"(\d+)\"</div>

</div>

<div class="stretcher">

<h3>Les garçons sont différents des filles</h3>

<p>Et les nombres sont différents des chaînes. Même si tu peux utiliser les méthodes sur n'importe quel objet en Ruby, certaines méthodes ne fonctionnent que sur certains types de choses. Mais tu peux toujours convertir différents types de choses en utilisant la méthode Ruby "to".</p>

<ul><li><strong>to_s</strong> convertit les choses en chaînes.</li>

<li><strong>to_i</strong> convertit les choses en entiers (nombres.)</li>

<li><strong>to_a</strong> convertit les choses en tableaux.</li>

</ul>

<p><em>C'est quoi les tableaux?!</em> Ce sont des listes. Tape "entre crochets": <code class="cmd">[]</code>.</p>

<div class="answer">\[\]</div>

</div>

<div class="stretcher">

<h3>Faire la queue</h3>

<p>Parfais, c'est une liste vide. Les listes stockent des choses <strong>dans l'ordre</strong>.

Comme lorsque tu fais la queue pour du popcorn. Tu es derrière quelqu'un et tu penses pas à le pousser dehors, n'est-ce pas? Et le type derrière toi, tu garde un oeil sur lui, pas vrai?</p>

<p>Voici une liste pour toi. Des numéros de Loterie: <code class="cmd">[12, 47, 35]</code>.</p>

<div class="answer">\[(\d+(, )?){2,}\]</div>

</div>

<div class="stretcher">

<h3>On lève les mains</h3>

<p>Une liste de numéro de loterie. Quel est le plus grand?</p>

<p>Essaie: <code class="cmd">[12, 47, 35].max</code>.</p>

<div class="answer">(\d+)</div>

</div>

<div class="stretcher">

<h3>Ranger une Liste</h3>

<p>Bien, bien. Mais c'est ennuyeux d'avoir à retaper cette liste, n'est-ca pas?</p>

<p>Enregistrons nos nombres dans un <code>ticket</code>, par exemple: <code class="cmd">ticket = [12, 47, 35]</code></p>

<div class="answer">\[(\d+(, )?){2,}\]</div>

</div>

<div class="stretcher">

<h3>Maintenant, tapes Ticket</h3>

<p>À présent, saisie: <code class="cmd">ticket</code></p>

<div class="answer">\[(\d+(, )?){2,}\]</div>

</div>

<div class="stretcher">

<h3>Enregistrée, rangée</h3>

<p>Fantastique! Tu as pendu tes numéros de loto, en les plaçant dans une <strong>variable</strong> nommée <code>ticket</code>.</p>

<p>Que dirais-tu de mettre nos numéros dans l'ordre? Utilise: <code class="cmd">ticket.sort!</code></p>

<div class="answer">\[(\d+(, )?){2,}\]</div>

</div>

<div class="stretcher chapmark">

<h3>Le résumé n°2 est arrivé</h3>

<p>Tu avais une liste. Tu as classé cette liste. La variable <code>ticket</code> est modifiée à présent.</p>

<p>As-tu remarqué que la méthode <code>sort!</code> a un gros point d'exclamation brillant à la fin? Souvent les méthodes Ruby crient qu'elles vont modifier la variable pour de bon. Rien de spéciale, c'est juste un repère.</p>

<p>Maintenant, regardes ce que tu as fait pendant cette deuxième minute:</p>

<ul>

<li><strong>Les erreurs.</strong> Si tu tente d'inverser un nombre ou de faire quelquechose de louche, Ruby va te l'indiquer dans la console.</li>

<li><strong>Les tableaux</strong> sont des listes pour classer des choses dans l'ordre.</li>

<li><strong>Les variables</strong> enregistre les choses et leur donnent un nom. Tu as utilisé le signe égale pour ce faire.<br>Par exemple: <code>ticket = [14, 37, 18]</code>.</li>

</ul>

<p>Au total il y a huit leçons. Tu es au deux-huitième du chemin!

Ce sont des choses simples, tu ne trouves pas? Encore plein de bonnes choses à venir.</p>

<p>Mais changeons de direction un instant. J'ai préparé un peu de poésie pour toi dans une variable. Regarde. Tape <code class="cmd">print poem</code></p>

<div class="stdout">My toast (.+)</div>

</div>

<div class="stretcher">

<h3>malheureusement, tu déteste la poésie des toasts</h3>

<p>Bon, d'accord. Tu n'est pas obligé d'aimer. N'hésite pas à la bricoler, tu es chez ici chez toi.</p>

<p>À la place d'un toast, essaie un melon ou n'importe quoi d'autre. Essaie ceci: <code class="cmd">poemtoast? = 'honeydew'</code></p>

<p>Puis tape ensuite <code class="cmd">print poem</code> pour voir s'afficher le poème.</p>

<div class="stdout">My honey(.+)</div>

</div>

<div class="stretcher">

<h3>Prêt, viser</h3>

<p>Les crochets que tu viens d'utiliser sont trés courant en Ruby. Souviens-toi, tu as saisie: <code>poemtoast? = 'honeydew'</code>. Cette boîte avec le mot <em>toast</em> possède des crochets de chaques côtés, vu?</p>

<p>Les deux crochets sont comme des viseurs utilisés pour pointer une cible. Exactement. Ces crochets signifent "Je recherche ." Prêt, vise. Ici tu recherche des toasts à échanger avec des fruits.</p>

<p>Voici un equestion: Que se passe t-il quand nous inversons entièrement le poème? <code class="cmd">poem.reverse</code>

</p><div class="answer">"\\n.ti tae ot (.+)"</div>

</div>

<div class="stretcher">

<h3>Trop d'inversion</h3>

<p>Oui, bien sur. Tout le poème a donc été retourné, lettre par lettre. Je voulais en fait simplement inverser les lignes. Remplacer la dernière ligne par la première et vice-versa. Inverser, mais pas comme <em>ça</em>.</p>

<p>Voici comment faire: <code class="cmd">poem.to_a.reverse</code></p>

<div class="answer">\["More still did I(.+)"\]</div>

</div>

<div class="stretcher">

<h3>Des anglaises de méthodes chainées</h3>

<p>Que vois-tu donc? Que c'est-il passé? Tu as tapé <code>poem.to_a.reverse</code> et puis quoi?</p>

<p>Deux choses sont arrivées. Tu as transformé le <code>poem</code> en liste en utilisant <code>to_a</code>. (<strong>To a</strong>rray.)

Quand Ruby transforme une chaîne en tableau, il prend les lignes entières une par une. Tu récupère donc chaque ligne du poème.</p>

<p>Ensuite, tu as <code>renversé</code> cette liste. Tu avais chacune des lignes. Tu les as inversées. C'est tout.</p>

<p>Clouons une méthode supplémentaire à la fin: <code class="cmd">print poem.to_a.reverse.join</code>

</p><div class="stdout">More still did I(.+)</div>

</div>

<div class="stretcher chapmark">

<h3>De tous les résumés, voici venir à présent le n°3</h3>

<p>Bon spectacle, mon amis! La méthode <code>join</code> à pris cette liste de lignes inversées pour les mettre ensemble dans une chaîne. (Bien sur, tu aurais pu tout aussi bien utiliser <code>to_s</code>.)</p>

<p>L'heure de la revue.</p>

<ul>

<li><strong>Exclamations.</strong> Les méthodes peuvent avoir un point d'exclamation (et aussi d'intérrogation) dans leur nom. Rien d'extraordinaire. Essaie: <code>poem.include? "my hand"</code></li>

<li><strong>Les crochets.</strong> Cherchent et trouvent les choses. Cherchent et remplace.</li>

<li><strong>Enchaîner</strong> les méthodes te permet de faire beaucoup plus. Tronçonner un poème, le renverser, le réassembler: <code>poem.to_a.reverse.join</code></li>

</ul>

<p>À partir de là, tu voudras peut-être bricoler le poème encore un peu. Une liste complète de toutes les méthodes relatives aux <code>chaînes</code> se trouve <a href="http://www.whytheluckystiff.net/ruby/pickaxe/html/ref_c_string.html" target="_new">ici</a>. Vas-y faire un tour et essaies-en quelques unes (comme par exemple <code>poem.downcase</code> ou <code>poem.delete</code>.)</p>

<p>Qu'en tu en auras terminé,tape: <code class="cmd">books = {}</code></p>

<div class="answer">\{\}</div>

</div>

<div class="stretcher">

<h3>Un petit livre blanc</h3>

<p>Tu as fait un <strong>hachage</strong> vide. (Connu aussi sous le nom de: un <em>dictionaire</em> vide.)</p>

<p>Nous allons remplir ce dictionnaire avec quelques commentaires sur les livres. Voici notre système de classement:</p>

<ul>

<li><code>:splendid</code> &#8594; un chef d'oeuvre.</li>

<li><code>:quite_good</code> &#8594; apprécié, sure, oui.</li>

<li><code>:mediocre</code> &#8594; aussi super que terrible.</li>

<li><code>:quite_not_good</code> &#8594; passablement mauvais.</li>

<li><code>:abyssmal</code> &#8594; navrant.</li>

</ul>

<p>Pour noter un livre, place le titre entre crochets et la note après le signe égale.</p>

<p>Par exemple: <code class="cmd">booksGravity's Rainbow? = :splendid</code></p>

<div class="answer">:\w+</div>

</div>

<div class="stretcher">

<h3>Des commentaires plus consistants</h3>

<p>Continue à le remplir de commentaires. Et si tu veux voir laliste entière, tape simplement: <code>books</code></p>

<p>Encore une fois, les notations sont: <code>:splendid</code>, <code>:quite_good</code>, <code>:mediocre</code>,

<code>:quite_not_good</code>, and <code>:abyssmal</code>.</p>

<p>Ces commentaires ne sont pas des chaînes. Quand tu place un double-point devant un mot, tu obtiens un <strong>symbole</strong>. Les symboles sont moins chers que les chaînes (en termes de coût de mémoire pour l'ordinateur.) Si tu utilise un mot constamment dans un programme, utilise un symbole. Au lieu d'avoir des centaines de copies de ce mot en mémoire, l'ordinateur stockera le symbole <em>une seule fois</em>.</p>

<p>Lorsque tu as <strong>trois</strong> ou <strong>quatre</strong> livres, tape: <code class="cmd">books.length</code>.</p>

<div class="answer">[3-9]</div>

</div>

<div class="stretcher">

<h3>Voyons voir, est-ce que j'ai aimé <em>Gravity's Rainbow</em>?</h3>

<p>Tu vois, la méthode <code>length</code> fonctionne avec les chaînes, les listes et les dictionnaires. Ce qui est super avec Ruby, c'est que les mêmes noms sont souvent réutilisés, ce qui signifie que tu en as moins à retenir.</p>

<p>Si tu désires revoir l'un de tes anciens commentaires, mets à nouveau le titre entre crochet. Mais enlève ke signe égale.</p>

<p>Tout simplement comme ceci: <code class="cmd">booksGravity's Rainbow?</code></p>

<div class="answer">:\w+</div>

</div>

<div class="stretcher">

<h3>Des Hachages en tant que Paires</h3>

<p>Garde à l'esprit que les dictionnaires ne gardent pas les choses rangées. Ce n'est pas leur boulot. Un dictionnaire met simplement en correspondance deux choses: une <strong>clef</strong> et une <strong>valeur</strong>. Dans nos commentaires, la clef est le titre du livre et la valeur est le classement.</p>

<p>Si tu veux uniquement voir les titres des livres que tu as commenté: <code class="cmd">books.keys</code></p>

<div class="answer">\[".*"\]</div>

</div>

<div class="stretcher">

<h3>Es-tu sévère?</h3>

<p>Alors, as-tu donné des commentaires dures et injustes? Regardons les scores avec ce hachage:<br><code class="cmd">ratings = Hash.new {0}</code></p>

<p>Bien, à présent comptons tes commentaires. Reste avec moi. Tape:<br>

<code class="cmd">books.values.each { |rate| ratings[rate] += 1 }</code></p>

<p><em>(La barre verticale dans le code s'appelle un tube, un pipe, probablement placé sur la touche Ctrl + 6 de ton clavier.)</em></p>

<div class="answer">\[:.+\]</div>

</div>

<div class="stretcher">

<h3>Un compte</h3>

<p>Trés bien, wow! Tu as fait la carte des scores. Tape <code>ratings</code> pour voir le total.

Ce nouveau dictionnaire montre un classement puis le nombre de fois que tu as donné ce classement.</p>

<p>Une des nouvelles choses formidables que nous venons d'utiliser s'appelle un <strong>bloc</strong>. Nous allons explorer ceci un peu plus lors du prochain résumé. Mais succintement, un bloc est un morceau de code Ruby entouré par des accolades.</p>

<p>Essayons un nouveau bloc: <code class="cmd">5.times { print "Odelay!" }</code></p>

<div class="stdout">Odelay!Od.*</div>

</div>

<div class="stretcher chapmark">

<h3>Nous arrivons maintenant au résumé n°4</h3>

<p>Les blocs sont toujours attachés aux méthodes. Comme la méthode <code>times</code>, qui prends le bloc et actionne le code encore et encore. (Dans notre cas: <strong>cinq</strong> fois.)</p>

<p>Cette leçon était un peu plus longue. Tu as probablement passé plus de trois minutes pour apprendre:</p>

<ul>

<li><strong>Les hachages.</strong> Le petit dictionnaire avec les pages pliées: <code>{}</code>.</li>

<li><strong>Les symboles.</strong> D'éfficaces petits bouts de code avec deux points: <code>:splendid</code>.</li>

<li><strong>Les blocs.</strong> Des tranches de codes qui peuvent être apportées à la plupart des méthodes Ruby. Voici le code utilisé pour construire la carte des scores:<br><code>books.values.each { |rate| ratings[rate] += 1 }</code>.</li>

</ul>

<p>Sur ton ordinateurs, tuas probablement beaucoup de fichiers différents. Des fichiers avec des images dedans, d'autres avec des programmes. Les fichiers sont organisés par dossiers, aussi souvent appelés:

<strong>répertoires</strong>.</p>

<p>Je t'ai préparé quelques répertoires spécialement pour toi. Jette un oeil:

<code class="cmd">Dir.entries "/"</code></p>

<div class="answer">\["\.", .+\]</div>

</div>

<div class="stretcher">

<h3>La collection privée du Docteur Dir</h3>

<p>Tu viens de lister intégralement tout le contenu du répertoire principal. Il s'agit du répertoire racine, symbolisé par un simple slash. Il contient entre autres quelques programmes et d'autres tutoriels.</p>

<p>Alors, c'est quoi cette méthode <code>Dir.entries</code>? Et bien, c'est juste une méthode, non?

<code>entries</code> est une méthode appelée sur la variable <code>Dir</code>.

Et <code>Dir</code> possède une collection de méthodes pour la manipulation des répertoires.</p>

<p>Encore une petite chose dont nous n'avons pas encore ouvertement parlé. Les arguments de méthodes, colorisés en vert.</p>

<ul>

<li><code>Dir.entries <strong>"/"</strong></code>: Toutes choses apparaissant après une méthode est considérée comme un attachement.</li>

<li><code>print <strong>poem</strong></code>: Tu vois, <code>print</code> est une méthode ordinaire. Le poème lui est attaché. Pour être imprimé.</li>

<li><code>print <strong>"pre", "event", "ual", "ism"</strong></code> à plusieurs arguments, séparés par des parenthèses.</li>

</ul>

<p>Pour lister uniquement les fichiers textes de ce répertoire: <code class="cmd">Dir/*.txt?</code></p>

<div class="answer">\["comics\.txt"\]</div>

</div>

<div class="stretcher">

<h3>Viens, nous allons lire des BD ensemble</h3>

<p>La méthode <code>Dir[]</code> ressemble à <code>entries</code> sauf que la recherche de fichier s'effectue avec des caractères jokers. Nous voyons ici à nouveau les crochets! Remarque qu'ils signifient toujours, "Je suis à la recherche de _?"</p>

<p>Plus spécifiquement: "Je suis à la recherhce des fichiers qui se terminent par <code>.txt</code>."</p>

<p>Ouvrons à présen ce dossier de bandes dessinées. Voici comment faire:<br>

<code class="cmd">print File.read("/comics.txt")</code></p>

<div class="stdout">Achewood.+</div>

</div>

<div class="stretcher">

<h3>Mi Comicas, Tu Comicas</h3>

<p>Très bien! Nous pouvons commencer à utiliser les fichiers pour enregistrer des choses. C'est génial car normalement quand nous quittons Ruby, toutes nos variables disparaissent. Ruby, de lui même, oublie ces choses.

Mais si nous sauvegardons ces choses dans des fichiers, nous pourrons lire ces fichiers lors de nos futures escapades en Ruby.</p>

<p>Hey, et devine quoi? Le répertoire <code>/Home</code> t'appartient! Je te l'offre! Je suis généreux! Faisons un ecopie de notre fichiers de bandes déssinées.</p>

<p>Tu auras besoin de: <code class="cmd">File.copy('/comics.txt', '/Home/comics.txt')</code>

</p><p><em>Si tu avais déjà créé le fichier, utilise File.delete('/Home/comics.txt') pour t'en débarasser.</em></p>

<div class="answer">nil</div>

</div>

<div class="stretcher">

<h3>Ton propre gazon</h3>

<p>Ok, tu as ta propre copie. Jette un oeil dessus: <code>Dir/Home/*.txt?</code></p>

<p>Pour ajouter ta propre BD à la liste, ouvrons le fichier en mode <strong>append</strong>.</p>

<p>Commence comme ceci: <code class="cmd">File.open("/Home/comics.txt", "a") do |f|</code>.</p>

<div class="stdout"></div>

</div>

<div class="stretcher">

<h3>Et maintenant, l'effrayante conclusion</h3>

<p>Ton invite de console a <em>changée</em>. Tu as vu ça? Ton invite est un double <strong>double</strong> point à présent.</p>

<p>Dans ce cours, cette invite signifie que Ruby s'attend à ce que tu saisisse encore autre chose.

Pendant que tu taperas les lignes de code Ruby, le double point restera là jusqu'à ce que tu aies complémtement terminé.</p>

<p>Une astuce sexy: si tu veux arrêter de travailler sur ton code et en finir avec les double-points, utilise la commande <code>reset</code>. Si tu veux retourner à la page rpécédente du cours, utilise la commande <code>back</code> .</p>

<p>Voici donc ton code. Tu as déjà tapé la première ligne, il ne te reste donc plus qu'à saisie la seconde. Le <code>\n</code>

symbolise la touche <em>Entrée</em>.</p>

<ul><li><code class="faded">File.open("/Home/comics.txt", "a") do |f|</code></li>

<li><code>&nbsp;&nbsp;f &lt;&lt; "Cat and Girl: http://catandgirl.com/\n"</code></li>

<li><code class="faded">end</code></li>

</ul>

<p>Et puisque tu deviens fort capable et bien avancé à présent, voici encore une autre astuce: tu peux aussi utiliser les touches flèches haute et basse pour rappeler tes anciennes commandes ou les lancer à nouveau.</p>

<div class="stdout"></div>

</div>

<div class="stretcher">

<h3>Ruby se repose toujours</h3>

<p>La dernière ligne ajoute la bande dessinée <em>Cat and Girl</em> à la liste, mais Ruby va attendre jusqu'à ce que tu aies fini pour la prendre en compte.</p>

<p>À présent, finissons les code que tu as commencé. Tu as ouvert un nouveau bloc lorsque tu as tapé <code>do</code>.

Jusqu'à présent les blocs que nous avons vu utilisaient des accolades. Cette fois nous utiliserons <code>do</code> et <code>end</code> à la place des accolades. Beaucoup de Rubyistes utilisent <code>do...end</code> quand les bloc nécessite plusieurs lignes.</p>

<p>Terminons donc ce bloc, avec: <code class="cmd">end</code></p>

<ul><li><code class="faded">File.open("/Home/comics.txt", "a") do |f|</code></li>

<li><code class="faded">&nbsp;&nbsp;f &lt;&lt; "Cat and Girl: http://catandgirl.com/\n"</code></li>

<li><code>end</code></li>

</ul>

<div class="answer">#.File:/Home/comics\.txt \(closed\).</div>

</div>

<div class="stretcher">

<h3>L'horloge clouée aux dossiers</h3>

<p>Bien, bien! Tu as ajouté une nouvelle BD au dossier. Tu peux le vérifier par toi même: <code>print File.read("/Home/comics.txt")</code></p>

<p>Quelle heure était-il lorsque tu as modifié le fichier? Regardons. Tape: <code class="cmd">File.mtime("/Home/comics.txt")</code></p>

<div class="answer">\w+ \w+ \d+ \d{2}:\d{2}:\d{2} [+-]\d{4} \d{4}</div>

</div>

<div class="stretcher">

<h3>La main de l'heure</h3>

<p>Bon, nous y voilà. L'heure exacte où tu as fait l'ajout au fichier. <code>mtime</code> te donne, en Ruby, un objet Temps.</p>

<p>Si tu cherhce à vérifier l'heure qu'il était, utilise la flèche supérieure et modifie la ligne ainsi: <code class="cmd">File.mtime("/Home/comics.txt").hour</code></p>

<div class="answer">\d+</div>

</div>

<div class="stretcher chapmark">

<h3>Allo, il y a quelqu'un? Et le résumé n°5 tire sa révérence!</h3>

<p>Bien joué, bien joué, bien joué, bien joué! Vraiment, vraiment, vraiment, vraiment, vraiiiiiiiiiment!</p>

<p>Voici la revue des dernières minutes de ta vie:</p>

<ul>

<li><strong>Les fichiers.</strong> Que dire de plus sur le sujet? Qu'il existe de nombreuses méthodes pour éditer des fichiers et se déplacer dans les répertoires.</li>

<li><strong>Les arguments.</strong> Les arguments sont des listes de choses envoyées dans les méthodes. Avec des parenthèses pour les séparer. </li>

<li>Nous avons aussi parlés de <strong>do</strong> et de <strong>end</strong> qui sont une autre manière de faire un block.</li>

</ul>

<p>Tu sais maintenant comment utiliser Ruby. Ce que je veux dire, c'est que tu as vu toutes les bases. Tu dois simplement continuer à apprendre plus de méthodes et à essayer des blocs plus complexes.</p>

<p>Il reste toutefois un aspect de Ruby que nous n'avons pas abordé. Faire tes propres méthodes et tes propres classes.</p>

<p><em>Ahem!</em> Voyons voir cela à présent.</p>

<p>Commence par: <code class="cmd">def load_comics( path )</code></p>

<div class="stdout"></div>

</div>

<div class="stretcher">

<h3>En Ruby, Def Leppard signifie <em>Défini Leppard (la méthode)!</em></h3>

<p>Hey, ok, tu l'as fait. Tu as fait ta propre méthode. Tu as commencé par <code>def</code>, suivi par le nom de la méthode, Leppard.

Et une liste d'arguments dont la méthode aurat besoin. Ce n'est ni effrayant nidangereux!</p>

<p>Tout ce qu'il nous reste à faire est de la remplir avec du code Ruby et la fermer avec <code>end</code>.</p>

<p>Voici le code:</p>

<ul><li><code class="faded">def load_comics( path )</code></li>

<li><code>&nbsp;&nbsp;comics = {}</code></li>

<li><code>&nbsp;&nbsp;File.foreach(path) do |line|</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;url, name = line.split(': ')</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;comics[url] = name.strip</code></li>

<li><code>&nbsp;&nbsp;end</code></li>

<li><code>&nbsp;&nbsp;comics</code></li>

<li><code>end</code></li>

</ul>

<p>Pas besoin d'indentation si tu ne veux pas. Je le fais simplement pour rendre le code plsu lisible.</p>

<div class="answer">nil</div>

</div>

<div class="stretcher">

<h3>Le fruit mûre de ta propre création</h3>

<p>Une nouvelle méthode est née. Utilisons la: <code class="cmd">comics = load_comics('/comics.txt')</code></p>

<p><em>Si tu as un problème, c'est qu'il y a une faute de frappe. Utilise la commande <code>back</code> et essaie à nouveau.</em></p>

<div class="answer">\{.*"Achewood"=."http://achewood.com/".*\}</div>

</div>

<div class="stretcher">

<h3>Hey, Cool, un truc de Bande dessinée</h3>

<p>Regarde au dessus, dans la fénêtre Ruby, et étudie le code que tu as tapé pour la méthode <code>load_comics</code>. Que se passe t-il? Tu envoies la variable <code>path</code> et récupères la variable <code>comics</code>. Ruby laisse passer <code>comics</code>

au travers du filet end de la méthode.</p>

<p>De nombreuse méthodes ont été utilisées pour faire le boulot. Voyons si tu peux les repérer.</p>

<ul><li><strong>File.foreach</strong> est une méthode qui ouvre un fichier et passe chaque lignes au bloc. La variable <code>line</code>

entre le bloc <code>do...end</code> boucle avec chacune des lignes dans le fichier.</li>

<li><strong>split</strong> est une méthode destinée aux chaînes, et qui coupe éclate celle-ci dans un tableau. Une hache est mise sur le double-point et la ligne est coupée par la moitié, nous donnant d'un côté l'<code>url</code> et de l'autre le <code>name</code> de chaque bandes dessinées.</li>

<li><strong>strip</strong> enlève les espaces inutiles autour du nom. Juste au cas où.</li>

</ul>

<p>Droit devant. Bravo. Tu as mis les bandes dessinées dans un dictionnaire Ruby. Et maintenant? À quoi ça sert?</p>

<p>Faisons une page de liens. Qu'en dis tu? Nous allons avoir besoin de charger une petite bibliothèque que j'ai faite pour toi.</p>

<p>Tape: <code class="cmd">require 'popup'</code></p>

<div class="answer">true</div>

</div>

<div class="stretcher">

<h3>Animation de navigateur internet</h3>

<p>Excellent, tu as chargé la bibliothèque <em>popup</em>. Elle est enregistrée dans un fichier dans le dossier <em>Libraries</em>. Essaie: <code>Dir/Libraries/*?</code></p>

<p>La bibliothèque popup contient tout un tas de méthode que j'ai écrite et qui te permettent de contrôler une fenêtre popup sur le site Try Ruby.</p>

<p>Ici, tu peux essayer: <code class="cmd">Popup.goto "http://google.com/"</code></p>

<div class="stdout">\033\[1;JSm.*popup_goto\(.*\)\033\[m.*</div>

</div>

<div class="stretcher">

<h3>Fabriquer des liens et faire tourner le Web</h3>

<p>Notre propre petite popup toute mignonne à manipuler. TU peux aussi la remplir avec tes propres bonnes idées. Nous allons commencer doucement:</p>

<ul><li><code>Popup.make {</code></li>

<li><code>&nbsp;&nbsp;h1 "Mes liens"</code></li>

<li><code>&nbsp;&nbsp;link "Aller sur Google", "http://google.com/"</code></li>

<li><code>}</code></li>

</ul>

<p>Le terme <code>h1</code> (<em>h-un</em>) signifie un titre de niveau un. En HTML, c'est la plus grande taille de titre.</p>

<div class="stdout">\033\[1;JSm.*popup_make\(.*h1.*a href.*\)\033\[m.*</div>

</div>

<div class="stretcher">

<h3>Les Popups c'est si facile, c'est fou</h3>

<p>Ca m'a l'air parfait, tu as parfaitement réussi, comme on te l'a demandé. Faisons une liste à présent.</p>

<p>Voici comment nous faisons une liste avec la bibliothèque popup:</p>

<ul><li><code>Popup.make do</code></li>

<li><code>&nbsp;&nbsp;h1 "Choses à faire"</code></li>

<li><code>&nbsp;&nbsp;list do</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;p "Essayer Ruby"</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;p "Chevaucher un tigre"</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;p "(sur la rivière Euphrates)"</code></li>

<li><code>&nbsp;&nbsp;end</code></li>

<li><code>end</code></li>

</ul>

<p>La méthode <code>p</code> est un raccourcis pour "paragraphe".</p>

<div class="stdout">\033\[1;JSm.*popup_make\(.*h1.*ul.*li.*li.*\)\033\[m.*</div>

</div>

<div class="stretcher">

<h3>Étales les bandes dessinées sur la table</h3>

<p>Ok, tout se passe à merveille. Ce sont des choses simples, mais souviens-toi que tu ne savais que peu de chose sur Ruby il y a encore un quart d'heure!</p>

<p>Dernière étape. Tu vas voir, nous allons tout mettre ensemble.Faisons carilloner l'ensemble tel un gentil scintillement qui sonne sur la plage dans lumière du soleil maginificent!</p>

<p>Assures toi que les bandes dessinées sont chargées: <code>comics = load_comics( '/comics.txt' )</code></p>

<p>À présent, faisons une liste de liens pour chaque BD:</p>

<ul><li><code>Popup.make do</code></li>

<li><code>&nbsp;&nbsp;h1 "BD sur le Web"</code></li>

<li><code>&nbsp;&nbsp;list do</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;comics.each do |name, url|</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link name, url</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;end</code></li>

<li><code>&nbsp;&nbsp;end</code></li>

<li><code>end</code></li>

</ul>

<p>Tu peux cliquer sur le lien et lire la bande dessinée depuis la petite fenêtre qui s'ouvre! Impréssionnant!</p>

<div class="stdout">\033\[1;JSm.*popup_make\(.*h1.*ul.*li.*a href.*li.*a href.*\)\033\[m.*</div>

</div>

<div class="stretcher chapmark">

<h3>Le résumé n°6, ce qui veut dire que tu es arrivé jusqu'ici</h3>

<p>Tu es un ecclésiastique Ruby de niveau 6. Je veux dire, quel bon boulot tu as accomplis. Revoyons cela:</p>

<ul>

<li>Tu as ajouté ta propre méthode avec <strong>def</strong> et tu as utilisé cette méthode <code>load_comics</code> plusieurs fois.</li>

<li><strong>Les bibliothèques.</strong> Tu as utilisé la méthode <code>require</code> pour charger la bibliothèque popup.<br>En tapant: <code>require 'popup'</code></li>

<li>Et comme si cela ne suffisait pas, tu as créé ta propre page web à partir d'une liste dans un fichier de bandes dessinées. <strong>Tu as fais un vrai programme!</strong></li>

</ul>

<p>Que peu t-on faire ensuite? Que te reste t'il à apprendre à présent?

Ha, c'est la meilleure partie. Tu as parcouru un si long chemin que nous allons pouvoir découvrir les classes. Encore deux leçons et tu auras terminé.</p>

<p>Un peu plus tôt, nous avons crée un dictionnaire comme cela: <code class="cmd">Hash.new</code> Vas y, essaie.</p>

<div class="answer">\{\}</div>

</div>

<div class="stretcher">

<h3>Pas une classe d'école, une classe ouvrière</h3>

<p>Tu vois, les accolades vides <code>{}</code> sont un raccourcis équivalent à <code>Hash.new</code>. La méthode <code>new</code>

est utilisée pour fabriquer une certaine classe d'objet. (Imagine toi les "classes" comme dans l'expression

"classes ouvrières" &#8212; un groupe spécifique d'objets qui sont similaires, ont les mêmes boulots, les mêmes chemises.)</p>

<p>Pose toi la question: <em>Comment pourrais-je faire un blog e Ruby?</em>

Par où commencerais-tu? Et bien, tu pourrais stocker tes entrées de blog dans un fichier, non? Mais comment garderais tu la trace du titre de l'entrée et de sa date de publication? Et quand tu voudras charger le fichier, à quoi ressemblera t-il avec Ruby? Ce sera un dictionnaire? Ou un tableau? Ou un tableau de tableaux? Ou encore quelque chose d'autre? </p><p>Je pense vraiment que tu voudras utiliser une classe. Tu es déjà familié de beaucoup de classes: <code>Hachages</code>, <code>Tableaux</code>, <code>Chaines</code>.</p>

<p>Faisons une nouvelle classe: <code class="cmd">class BlogEntry?</code>.</p>

<div class="stdout"></div>

</div>

<div class="stretcher">

<h3>Les choses qui font les blog</h3>

<p>Tu as crée une nouvelle classe <code>BlogEntry?</code>. De quoi est-ce que ton article de blog est-il fait? Un titre, bien sur. Et aussi , d'une date de publication. Et puis le texte de ton article, de ton entrée.</p>

<p>Nous allons ajouter un paramètre d'humeur, comme dans le LiveJournal?. <img src="intro_files/sick.gif"> L'internet à vraiment remis au goût du jour les smileys. <em>Emoticon!</em></p>

<p>Trés bien, donc tu as la première ligne de la classe, voici le reste:</p>

<ul><li><code class="faded">class BlogEntry?</code></li>

<li><code>&nbsp;&nbsp;attr_accessor :title, :time, :fulltext, :mood</code></li>

<li><code>end</code></li>

</ul>

<div class="answer">nil</div>

</div>

<div class="stretcher">

<h3>Les Accesseurs sont les membres balançants</h3>

<p>Hey, la classe, man. Tu as une nouvelle classe <code>BlogEntry?</code>. Pour commencer un nouvel article: <br><code class="cmd">entry = BlogEntry?.new</code>.</p>

<p>Dans le définition de la classe, tu as utilisé une méthode appelée <code>attr_accessor</code>. Il existe beaucoup d'<strong>attr</strong>ibuts de méthodes comme celui-ci qui ajoutent quelques paramétrages aux classes. Ces attributs sont simplement des variables attaché à une classe.</p>

<p>Vois ça comme ça. Une classe est comme une personne. Cette chose humaine qui tient le premier rôle. Et les attributs sont les membres balançants, les différentes partie qui constituent le corps.</p>

<p>Pour donner un titre à ton entrée: <code class="cmd">entry.title = "Aujourd'hui Mt. Hood à été enlevé!"</code></p>

<div class="answer">".+"</div>

</div>

<div class="stretcher">

<h3>L'objet, ce petit paquet ordonné</h3>

<p>Continue et ajoute la date de publication: <code class="cmd">entry.time = Time.now</code></p>

<p>Et l'humeur: <code class="cmd">entry.mood = :malade</code></p>

<p>Et l'entrée elle même: <code class="cmd">entry.fulltext = "Je ne peux pas croire que Mt. Hood à été enlévé! Je reste sans voix! Il a été enlevé par une giraffe qui s'est enfuie nonchalament au volant d'une une Cadillac Seville!!"</code></p>

<p>Pour voir tous tes modification, tape juste à l'invite de la console: <code class="cmd">entry</code>.</p>

<div class="answer">#.BlogEntry:0x[0-9a-f]+ ((@title|@mood|@time|@fulltext)=.*?, ){3}.*</div>

</div>

<div class="stretcher">

<h3>Accélérons tout cela</h3>

<p>Cool, ton blog est terrible. Hey, rendons les choses un peu plus faciles.

Tu ne veux tout de même pas préciser la date de cette façon à chaque fois que tu écris une entrée.

Tu veux simplement saisir rapidement le titre de l'article et ton humeur, n'est pas?</p>

<p>Ajoutons alors une méthode <code>initialize</code>.</p>

<ul><li><code>class BlogEntry?</code></li>

<li><code>&nbsp;&nbsp;def initialize( title, mood, fulltext )</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;@time = Time.now</code></li>

<li><code>&nbsp;&nbsp;&nbsp;&nbsp;@title, @mood, @fulltext = title, mood, fulltext</code></li>

<li><code>&nbsp;&nbsp;end</code></li>

<li><code>end</code></li>

</ul>

<p>Une fois que tu as tapé cela, essaie de faire une nouvelle entrée: <code class="cmd">BlogEntry?.new</code></p>

<div class="stdout">ArgumentError?: wrong number of arguments \(0 for 3\).*</div>

</div>

<div class="stretcher">

<h3>Tu as indiquer à ton blog de rejeter les choses non renseignées</h3>

<p>As-tu remarqué comment nous utilisions le symbole @ à l'intérieure des classes? Comme ceci: <code>@time = Time.now</code></p>

<p>En dehors des classes, nous utilisons des accesseurs: <code>entry.time = Time.now</code> Mais à l'intérieur nous utilisons des <em>variables d'instance</em>: <code>@time = Time.now</code>

C'est exactement la même chose, mais exprimées à deux endroits différents de ton programme.</p>

<p>Ton blog à besoin à présent d'un titre, d'une humeur et d'un texte afin de pouvoir fonctionner. Lorsqu'une nouvelle <code>BlogEntry?</code> est crée, la méthode <code>initialize</code> est employée pour vérifier tous les nouveaux arguments. Oh, et nous avons ici besoin de trois arguments!</p>

<p>Essayons cette fois ci avec les trois.</p><p>

</p><p><code class="cmd">entry2

= BlogEntry?.new( "J'ai laissé Hoodie sur la montagne!", :confused, "Je ne suis jamais retourné sur cette montagne et j'espère qu'une giraffe la enlevée." )</code></p>

<div class="answer">#.BlogEntry:0x[0-9a-f]+ ((@title|@mood|@time|@fulltext)=.*?, ){3}.*</div>

</div>

<div class="stretcher chapmark">

<h3>Une giraffe n'a pas enlevée le résumé n°7</h3>

<p>Aha, toujours là. Et en entier. Nous allons continuer à réaliser ton blog, mais pour l'instant, revoyons tout cela, d'accord?</p>

<ul>

<li><strong>Les Classes.</strong> Tout en Ruby est un objet. Les classes expliquent les objets. Comment un objet précis fonctionne.

Par exemple tu as fait quelques objets "entrées de blog" et c'est objets sont expliqués dans la classe <code>BlogEntry?</code>.

Autrement dit: tu les appelles des objets BlogEntry?.</li>

<li><strong>Les Accesseurs</strong> sont des variables attachées à un objet et qui peuvent être utilisées <em>à l'extérieure</em> de l'objet. (<code>entry.time = Time.now</code>)</li>

<li><strong>Les variables d'Instance</strong> sont ces mêmes variables que tu utilise en tant qu'accesseurs à <em>l'intérieure</em> de l'objet.

Comme dans une definition de méthode par exemple. (<code>@time = Time.now</code>)</li>

</ul>

<p>Ok, concluons les enfants. Voici le dernier chapitre de l'histoire PASSIONNANTE de l'épopée Try Ruby!

Maintenant que tu vois un peu plus comment tout ceci fonctionne, comment vas tu utiliser cela dans ta maison ou dans le congélateur de ton épicier?

Tu es une grande personne (parmis mes favorites), mais tu as besoin de conseils.</p>

<p>Finissons ton blog. Tu as des entrées de blog, mais pas de blog.</p>

<p>Place les entrées dans un tableau: <code class="cmd">blog = [entry, entry2]</code></p>

<div class="answer">\[#.BlogEntry:0x[0-9a-f]+.*, #.BlogEntry:0x[0-9a-f]+.*\]</div>

</div>

<div class="stretcher">

<h3>Ce n'est qu'une histoire de combinaisons</h3>

<p>De bien belles choses peuvent se faire avec les composants simple de Ruby, en particulier lorsque tu les combines ensemble pour former de nouvelles choses. Ici nous avons obtenu un blog fait d'un tableau de classes. En fait, Ruby fonctionne bien avec ce genre de créature.</p>

<p>Voici quelques petites choses que tu peux réaliser avec le tableau du blog:</p>

<ul><li>Tu voudras certainement classer tes articles du plus récent au plus ancien. Tu peux faire cela avec:<br>

<code>blog.sort_by { |entry| entry.time }.reverse</code><br>Regarde les explications sur <a href="http://ruby-doc.org/core/classes/Enumerable.html#M001945" target="_new">sort_by</a> pour en savoir plus.</li>

<li>Si tu recherche dans ton blog une chose relative au mot "cadillac": <br>

<code>blog.find_all { |entry| entry.fulltext.match(/cadillac/i) }</code><br>

Lis <a href="http://ruby-doc.org/core/classes/Enumerable.html#M001949" target="_new">find_all</a>

et <a href="http://ruby-doc.org/core/classes/String.html#M001380" target="_new">match</a>

pour comprendre comment cela fonctionne. De plus: l'expression <code>/giraffe/i</code> est un objet "expression régulière" (Regexp), utiliser pour la correspondance des mots.</li>

<li>Ajoute un nouveau billet avec <code>blog &lt;&lt; new_entry</code><br>

Et jette un oeil sur la documentation de la méthode <a href="http://ruby-doc.org/core/classes/Array.html#M000360" target="_new">&lt;&lt;</a>.</li>

</ul>

<p>Tu peux consulter toutes les méthodes Ruby de base dans la <a href="http://ruby-doc.org/core/" target="_new">liste pricnipale de ruby-doc.org</a> .

Une autre bonne liste se trouve sur laAnother good list is at the <a href="http://www.whytheluckystiff.net/ruby/pickaxe/html/builtins.html">pioche en ligne</a>.</p>

<p>Une méthode <em>réellement</em> utile (Je l'utilise probablement plus que toutes autres) est <code>map</code>. Tape: <code class="cmd">blog.map { |entry| entry.mood }</code></p>

<div class="answer">\[(:\w+, )+:\w+\]</div>

</div>

<div class="stretcher">

<h3>Regarde sa tête &#8212; La transformation à commencée</h3>

<p>La méthode <code>map</code> explore un tableau et remplace chacune des cases par autre chose. Disons que tu veux remplacer chacunes de tes publications le nom <em>Bruce Willis</em>. Allons y: <code>blog.map { "Bruce Willis" }</code></p>

<p>Puisque le bloc retourne toujours la chaîne "Bruce Willis", voilà ce que tu obtiens. Dans le code que tu viens tout juste d'utiliser, l' <code>entrée</code> à été permutée uniquement pour le champ <code>entry.mood</code>.</p>

<p>Maintenant, j'aimerais que tu fasses une popup avec ton entrée de blog. Je ne vais pas te donner tous le code, mais seulement une partie.</p>

<ul><li><code>blog.each do |entry|</code></li>

<li><code>&nbsp;&nbsp;h2 entry.title</code></li>

<li><code>&nbsp;&nbsp;p entry.fulltext</code></li>

<li><code>end</code></li>

</ul>

<p>À présent, j'attends de toi que tu place le code correspondant à la popup et que tu ajoute un titre de niveau <code>h1</code> avec le nom de ton blog. Pour compliquer la chose, affiche la date de chacunes des entrées affichées.</p>

<div class="stdout">\033\[1;JSm.*popup_make\(.*h1.*h2.*p.*h2.*p.*\)\033\[m.*</div>

</div>

<div class="stretcher">

<h3>Tu es un gourou du web en quelque sorte, j'en ai les yeux qui brillent</h3>

<p>Bien, c'est fait! C'est exactement le code que tu peux utiliser pour écrire ton propre blog Ruby. Si tu te sens prêt pour l'aventure, jette un oeil sur les <a href="http://rubyonrails.org/screencasts" target="_new">videos</a> Rails qui montre un vif et jeune camarade créer un blog en 15 minutes. Tu as juste à rester assis et a regarder.</p>

<p>Je dois mentionner Rails. Tu as appris le langage Ruby, comment le parler. Rails est un ensemble de bibliothèques (comme la bibliothèque popup que tu as utilisé.) C'est une boîte à outils très puissante pour construire des sites internet. Si apprendre Rails t'intéresse, j'irais faire un tour <a href="http://rubyonrails.org/" target="_new">par ici</a> à ta place. Commences à utiliser tes compétences Ruby proprement dites!</p>

<p>Une des choses que Rails offre est sa facilité d'utilisation des méthodes de date. Comme, par exemple: <code class="cmd">Time.now - 2.weeks</code></p>

<div class="answer">\w+ \w+ \d+ \d{2}:\d{2}:\d{2} .*</div>

</div>

<div class="stretcher">

<h3>Si tu veux commencer petit</h3>

<p>Si tu veux t'entrainer en commençant à écrire un petit programme en Ruby, j'ai pour toi un projet appelé <a href="http://code.whytheluckystiff.net/mouseHole/" target="_new">MouseHole? (NDT: TrouDeSouris?)</a>

qui est une petite boîte à outils web destinée à écrire des petits programmes Ruby. Tu peux regarder ses <a href="http://code.whytheluckystiff.net/mouseHole/wiki/UserScripts" target="_new">quelques scripts

</a> pour voir ce que je veux dire.</p>

<p>MouseHole? n'est pas réellement faite pour écrire des sites web. Elle sert juste à écrire de petits programmes qui tournerons à l'intérieur de ton navigateur. Ainsi il y a une programme de blocnote pour MouseHole? et un programme qui ajoute une image de souris juste après les liens sur le web pointant vers d'autres programmes MouseHole?.</p>

<p>J'ai mis un script MouseHole? dans le fichier suivant:<br>

<code class="cmd">print File.read("/MouseHole/flickrpedia.user.rb")</code></p>

<div class="stdout">.*Inserts Wikipedia links for Flickr tags.*</div>

</div>

<div class="stretcher chapmark">

<h3>Résumé n°8, le résumé "Hey-relax-tu-as-réussi"</h3>

<p>Cette dernière partie à été un peu plus longue, puisqu'elle ta indiqué des liens sur la façon dont tu peux utiliser Ruby. Si tu t'es amusé, télécharge Ruby et installe le.</p>

<ul><li>Sur Mac: <a href="http://homepage.mac.com/discord/Ruby/" target="_new">l'installateur Ruby pour OS X </a></li>

<li>Sur Windows: <a href="http://rubyforge.org/frs/download.php/4174/ruby182-15.exe" target="_new">l'installateur Ruby pour Windows</a></li>

<li>Sur les autres plate-formes: <a href="http://www.ruby-lang.org/en/20020102.html" target="_new">Source</a></li></ul>

<p>Une fois que tu as installé Ruby, tu peux utiliser Ruby en mode interactif en lançant <code>irb</code> à l'invite de console de ton système. Pour en savoir plus sur Irb, il y à <a href="http://poignantguide.net/ruby/expansion-pak-1.html" target="_new">la Veste du Tigre</a> pour t'aider.</p>

<p>Tu mérite réellement un gâteau double couche avec une double couche de glaçage, accompagné par un type qui joue de la guitare, qui est en fait une double guitare. En fait, je veux dire que tu as terminé, que tu l'as vraiment fait! Aucuns doutes là dessus, tu es un fûté certifié à présent!</p>

<br>

</div>

</body></html>