--- Log opened mer mar 14 20:03:37 2007 20:03 [@FiFouille]: (en même temps la doc de ruby est pour beaucoup en japonais ... python un peu moins) 20:04 [@FiFouille]: version actuelle 1.8, Ruby 2.0 prévu dans le courant de l'année 20:04 [@FiFouille]: (mais c'est comme debian, ça sortira quand ça sera prêt ... hum) 20:04 [@FiFouille]: tous de bons librists donc, Ruby sous GPL, que demande le peuple 20:04 [@FiFouille]: *next* 20:04 [ gapz]: (les logs en direct : http://www.sceen.net/~gapz/ruby-2007-03-14) 20:04 [@FiFouille]: alors ça sert à plein de trucs 20:05 [@FiFouille]: pour de l'administration systÚme, des scripts perso de la génération de document (latex par exemple) 20:05 [@FiFouille]: rien n'empêche de s'en servir comme un super Bash donc 20:05 [@FiFouille]: ça peut être un bon subsitut à Perl pour les allergiques ;) 20:06 [@FiFouille]: ça peut aussi servir pour des applications plus classiques 20:06 [@FiFouille]: comme vous le feriez pour du python avec un binding gtk ou des histoires du genre 20:06 ::: lordphoenix [n=arnaud@d77-216-118-150.cust.tele2.fr] has quit ["Quitte"] 20:06 [@FiFouille]: alors, buzzword à la mode, hype, toussa 20:06 [@FiFouille]: c'est aussi à la base de Ruby on Rails 20:06 [@FiFouille]: le *fameux* framework web quifaittoutmemelecafé 20:07 [@FiFouille]: c'est beau, c'est hype, c'est djeunz ... et on en parlera pas ce soir :p 20:07 ::: patrick2 [n=patrick@dyn-83-157-212-221.ppp.tiscali.fr] has joined #ubuntu-fr-classroom 20:08 [@FiFouille]: ERB lui c'est une sorte de métalanguage où on peut insérer du code Ruby un peu comme on veut pour générer dynamiquement du html, latex, docbook, etc etc 20:08 [@FiFouille]: lui aussi il est utilisé dans Ruby On Rails, pour les 'vues' 20:08 [@FiFouille]: et enfin, ça peut servir comme premier language de script appris dans le cadre scolaire ou pour le fun 20:08 [@FiFouille]: c'est simple, c'est clair et c'est marrant, tout ce qu'il faut pour les têtes blondes 20:08 [@FiFouille]: des questions jusqu'à présent ? 20:09 [@FiFouille]: j'attends 20 secondes ;) 20:09 [ Gick]: j'ai meme rien loupé 20:09 [ Gexeio]: est-ce qu'il existe deja (?) des applications toute en ruby ? 20:09 [ olivierb]: ça veut dire quoi Ruby On Rail? 20:09 [ gapz]: Gexeio: oui "plein" ;) 20:09 [ Gexeio] gapz: ok 20:10 [ gapz]: enfin par exemple tu as le lecteur de flux RSS raggle entiÚrement en ruby 20:10 [@FiFouille]: Gexeio: rubybot (pour irc), metasploit (un framework complet de test de failles et de création), ruby on rails (pour les plus gros qui me viennent à l'esprit) 20:10 [ Gexeio]: FiFouille: ok je vois 20:10 [@FiFouille]: olivierb: ruby sur les rails (merci pour cette question pas trop dure :p ) 20:10 [ animimotus]: olivierb: * RoR, ruby sur les rails, à ne pas confondre avec ruby sur l'ongle 20:10 [ olivierb]: lol 20:11 [@FiFouille]: on repÚre vite les petits marrants du fond :p 20:11 [@FiFouille]: d'autres questions ? non ? je continue donc ;) 20:11 [@FiFouille]: *next* 20:11 [@FiFouille]: bon alors, vite fait, quelques informations techniques 20:12 [@FiFouille]: garbage collector ça veut dire qu'il s'occupe tout seul de la gestion mémoire, pas besoin d'allouer ou libérer la mémoire qu'on utilise 20:12 [ jnjb]: re 20:12 ::: PyroSmoke [n=PyroSmok@mau49-1-82-245-46-173.fbx.proxad.net] has quit ["Naaannn !!! SI je pars c'est pour aller sur windows ! Aidez moiiiiii !!!"] 20:12 [@FiFouille]: procédural (comme du C), orienté objet (comme du java), fonctionnel (comme lisp ou scheme) 20:12 ::: PyroSmoke [n=PyroSmok@mau49-1-82-245-46-173.fbx.proxad.net] has joined #ubuntu-fr-classroom 20:12 [@FiFouille]: et en ruby, tout est objet, ça va revenir souvent pendant cette introduction 20:13 [@FiFouille]: si vous ne savez pas ce que c'est, vous allez le sentir sans même qu'on vous l'expliquer 20:13 [@FiFouille]: s/r$// 20:13 ::: laptopinmars [n=skateinm@AMarseille-156-1-65-170.w90-28.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 20:13 [@FiFouille]: une chose à ajouter aussi, Ruby a un principe intéressant dans son implémentation 20:13 [@FiFouille]: le principe de "convention" 20:13 [@FiFouille]: least surprise (si je me trompe pas) 20:14 [@FiFouille]: en gros, il réagit comme vous pensez qu'il le ferait, un tableau, une liste, une table de hachage vont réagir de la même maniÚre plus ou moins 20:14 [ gapz]: il y a moyen tout de meme de jouer avec la mémoire ? 20:15 ::: Onc_hansi [n=patrick@dyn-83-157-212-221.ppp.tiscali.fr] has joined #ubuntu-fr-classroom 20:15 [@FiFouille]: un exemple, vous connaissez le fonctionnement général du langage, en général pour de nouveau type de donnés il y a moyen de s'en sortir sans même lire la doc, ça marche comme le reste ;) 20:15 [@FiFouille] gapz: pas à ma connaissance 20:15 [ gapz]: d'accord :) 20:15 [@FiFouille] gapz: il y a moyen d'utiliser des binding C, mais ça sort un peu du cadre de l'intro 20:15 [@FiFouille]: *next* 20:16 [ gapz]: oui oui je me doute, c'était juste pour info, merci :) 20:16 [@FiFouille]: le grand troll actuel "Ruby c'est lent" 20:16 [@FiFouille]: alors oui, c'est moins rapide que d'autres languages de scripts comme du python par exemple 20:16 [@FiFouille]: "rapide", si vous voulez gérer un tableau de 500 000 éléments et réaliser un traitement statistique par exemple 20:17 [@FiFouille]: pour une utilisation classique vous ne vous en rendrez même pas compte 20:17 [@FiFouille]: mais bon, les gens de ruby sont gentils, ils bossent là dessus 20:17 [ reber]: pour info c'est à peu prÚs 10 fois plus lent que php 20:17 [@FiFouille]: et donc il y a toute une série de machines virtuelles qui sont en préparation 20:17 [@FiFouille]: reber: merci d'alimenter le troll 20:17 [ reber]: FiFouille, j'alimente pas, c'est la vérité 20:18 [@FiFouille]: dont Yarv pour ruby2.0 qui fait tourner ruby environ 20 fois plus vite (si j'ai bien lu) 20:18 [@FiFouille]: reber: du coup php est deux fois plus lent (alimentation de troll bis) 20:18 [ Gick]: si on commence à parler de php... 20:19 [@FiFouille]: et pour le moment, jruby est fonctionnel et utilisé pour faire tourner un peu de tout, par exemple du rails (les gens savent pas se défaire de java dans les entreprises on dirait ;) ) 20:19 [@FiFouille]: bon, on va attaquer la deuxiÚme partie 20:19 [@FiFouille]: des questions ? 20:19 ::: shadok [n=shad@unaffiliated/shadok] has quit ["Quit !"] 20:19 [ reber]: jruby fait tourner ror ? ... 20:19 [ THEDamocles]: Peut on faire tourner du Ruby sans VM ? 20:20 [@FiFouille]: chez sun ils sont fan de tout faire tourner dans java 20:20 [@FiFouille]: http://www.infoq.com/news/JRuby-0.9-Released-Enebo 20:20 [@FiFouille]: THEDamocles: avec l'interpréteur classique ruby, oui oui, pas de problÚme ;) 20:20 [ Kouran]: Ruby va remplacer Java ? 20:21 [@FiFouille]: THEDamocles: c'est celui là qu'on va utiliser pour ce cours d'ailleurs 20:21 [ THEDamocles]: FiFouille: Merci. 20:21 [@FiFouille]: Kouran: trÚs bonne question, ça serait marrant, mais dans l'immédiat j'en doute fort ;) 20:21 [ gapz]: il y a matiÚre à troller avec vos questions :D 20:21 [ Kouran]: Ruby va être intégré à Netbeans (pour coder) 20:21 [ Kouran]: comme IDE 20:21 [@FiFouille]: et il y a déjà un plugin pour eclipse 20:21 [ Gick]: Kouran: pq ya des gens qui utilsent Java? 20:22 [@FiFouille]: enfin voilà, pour les trolls c'est aprÚs minuit, autour d'une bonne biÚre ;) 20:22 [ Kouran]: j en connais pas 20:22 [ freacky22527]: Gick: portabilité 20:22 [@FiFouille]: chuteuh :p 20:22 [@FiFouille]: d'autres questions ? 20:22 [ Kouran]: il y a des emplois ? 20:22 ::: shadok [n=shad@unaffiliated/shadok] has joined #ubuntu-fr-classroom 20:22 [@FiFouille]: on va donc commencer à essayer un peu la bête, sinon c'est pas drole 20:22 ::: patrick1 [n=patrick@91.168.4.27] has quit [Read error: 110 (Connection timed out)] 20:22 [@FiFouille]: Kouran: ils cherchent plein de gens pour faire du Ruby On Rails, c'est à la mode, mais c'est du web ;) 20:22 [@FiFouille]: partie 2 donc, c'est parti 20:22 [@FiFouille]: *next* 20:23 [@FiFouille]: je suppose que vous êtes tous sous Ubuntu/Debian & dérivés, donc ça va aller tout seul 20:23 [@FiFouille]: ce dont on va avoir besoin, Ruby, l'interpréteur 20:23 [@FiFouille]: et pour nos essais, on va aussi installer irb, interactive ruby 20:24 [@FiFouille]: c'est comme le mode interactif de python pour ceux qui connaissent, et c'est pratique pour les expérimentations rapides 20:24 [ fredo_78]: peut tu donner les noms des apquets exact µ? 20:24 [@FiFouille]: fredo_78: ça vient :p 20:24 [ fredo_78]: ;-) yess merci 20:24 [@FiFouille]: alors y'a aussi deux autres programmes 20:24 [@FiFouille]: rubygems, c'est un gestionnaire de paquets ruby 20:24 [@FiFouille]: on peut récupérer plein de plugins, de bibliothÚque, les tenir à jour 20:25 [@FiFouille]: et en général les paquets récupérés par gems sont _vachement_ plus récents que ceux packagés dans la distrib 20:25 [ Gexeio]: Comme pear pour php ? 20:25 [@FiFouille]: et encore un autre, rake, ruby make en fait 20:25 [ Kouran]: on peut packager ruby via gems ? 20:25 [ reber]: gem update, gem install, etc 20:25 [@FiFouille]: Kouran: faut qu'on essaie ce week end justement :p 20:26 [@FiFouille]: Gexeio: j'ai jamais utilisé pear, mais si c'est pour des trucs d'accÚs à des bases de données, webservices et autre, oui :p 20:26 [@FiFouille]: *next* 20:26 [@FiFouille]: et donc, prennez votre term favori ou synaptic et en avant 20:27 [@FiFouille]: pendant que ça s'installe, il est aussi possible de s'amuser avec ruby1.9, la version de développement 20:27 [@FiFouille]: mais ça ne supporte pas encore tout, en tout cas pas au niveau du packaging debian/ubuntu 20:27 [@FiFouille]: alors si vous voyez le slide, y'a une petite astuce 20:27 [@FiFouille]: pour avoir l'autocomplétion dans irb 20:28 [@FiFouille]: histoire de pouvoir faire [1,2,3]. et avoir toutes les méthodes (fonctions) utilisables sur un tableau par exemple 20:28 [@FiFouille]: trÚs pratique quand on débute (et même quand on débute pas) 20:29 [@FiFouille]: alors pour les pas habitués du shell, ça met simplement la ligne require 'irb/completion' dans un fichier .irbirc de votre HOME 20:29 [@FiFouille]: des gens qui on des problÚmes pour installer la chose, des questions ? 20:29 [ Gick]: au niveau des bibliothÚques (et le temps que ça s'installe), ruby se situe où niveau richesse/diversité par rapport à perl/python? 20:29 [ animimotus]: FiFouille: t'as donné la liste des paquets ? :) 20:30 [@FiFouille]: Gick: c'est bien moins fourni que perl (normal on va dire) et ça arrive au niveau de python 20:30 [@FiFouille]: tous les grands classiques sont dispos 20:30 [@FiFouille]: animimotus: slide 17, y'a toutes les commandes et paquets 20:30 [@FiFouille]: Gick: apt-cache search lib ruby | less ;) 20:31 [ animimotus]: slide 17... humm 20:31 [@FiFouille]: Gick: et sinon rubygems propose une tonne de trucs, un peu à la maniÚre de CPAN 20:31 [@FiFouille]: animimotus: l'url est dans le topic 20:31 [ fredo_78]: oups j'ai loupé le slide ....je peux le trouvé ou ??? 20:31 [@FiFouille]: pour info donc, l'url des slides est dans le topic, et on est au slide 17 20:31 [@FiFouille]: (sale bande de retardataires :p ) 20:32 [ THEDamocles]: FiFouille: J'ai une erreur sur Installation rubygems... 20:32 [ fredo_78]: dans le topic ?? 20:32 [@FiFouille]: THEDamocles: il est pas utile pour le tuto, donc ça devrait aller, on y regardera plus tard sinon ;) 20:32 [@FiFouille]: http://fifi.be/vrac/slides/ruby-intro/ 20:32 [@FiFouille]: le pdf 20:33 ::: termitor [n=proutage@sab57-1-82-231-109-37.fbx.proxad.net] has joined #ubuntu-fr-classroom 20:33 [ THEDamocles]: FiFouille: Merci. 20:33 [ fredo_78]: yess, merci 20:33 [@FiFouille]: bon, je vais donc faire l'hypothÚse que tout le monde l'a installé :p 20:33 [@FiFouille]: *slide19*, premier exemple 20:34 [@FiFouille]: ouvrez un terminal et lancez irb 20:34 [@FiFouille]: vous allez obtenir qqch en irb(main):001:0> normalement 20:34 [@FiFouille]: et comme tout bon développeur qui se respecte, votre premier programme sera un hello world! 20:34 [@FiFouille]: puts "Hello World!" 20:34 [@FiFouille]: et pui ENTER 20:34 [ Gexeio]: gloups, bug ... 20:35 [ animimotus]: E: Impossible de trouver le paquet rubygems ? oO 20:35 [@FiFouille]: (et rubygems est pas packagé pour dapper apparement ... super, enfin, il est pas indispensable ici ;) ) 20:36 [@FiFouille]: Gexeio: ça marche pas comme ça doit ? 20:36 [@FiFouille]: si vous avez un problÚme pour lancer irb, dites le 20:36 [@FiFouille]: parce qu'on va s'en servir pendant un bon bout de temps 20:36 [ animimotus]: irb c'est quoi ? :) 20:36 [ Gexeio]: FiFouille: je pastebein les messages 20:36 [ Gexeio]: FiFouille: mais c'est pas joli a voir... 20:36 [@FiFouille]: animimotus: slide 14 (rattrape le retard si t'étais pas là au début) 20:37 [ Gexeio]: http://pastebin.com/898965 20:37 [@FiFouille]: bon, pendant ce temps là, continuons 20:37 [@FiFouille]: slide 20 20:37 [@FiFouille]: un exemple de comment on aurait procédé avec un fichier 20:37 [@FiFouille]: la premiÚre ligne c'est le 'shebang' comme on l'appelle 20:37 [@FiFouille]: c'est simplement pour spécifier quel interpréteur utiliser 20:38 [@FiFouille]: pour des scripts shell on retrouve #!/bin/bash souvent, pour du python #!/usr/bin/python 20:38 [@FiFouille]: ruby n'échappe donc pas à la rÚgle 20:38 [@FiFouille]: juste qu'ici on met un -w derriÚre, c'est pour afficher des messages d'erreurs pour des choses étranges, ou qui commencent à devenir dépréciées (qu'on utilise plus) 20:39 [@FiFouille]: avec ruby -c il est aussi possible de vérifier la syntaxe d'un fichier donné, histoire de voir les erreurs de frappes 20:39 [@FiFouille]: mais en aucun cas il ne va regarder si votre programme fait ce qu'il doit 20:39 [@FiFouille]: si vous bouclez infiniment ou que l'appel à une fonction fournit les mauvais arguments il va pas s'en rendre compte 20:40 [@FiFouille]: bon et évidemment, le fichier doit être exécutable si on veut le lancer 'simplement' comme du python ou un script shell en fait 20:40 ::: fredo_78 [n=fredo@AVelizy-151-1-30-220.w82-124.abo.wanadoo.fr] has quit ["Quitte"] 20:40 [@FiFouille]: Gexeio: édite le fichier /home/remi/.irbrc , efface tout et mets simplement la ligne 20:41 [@FiFouille]: require 'irb/completion' 20:41 [@FiFouille]: sans rien d'autre autour, tu sauves et tu relances irb 20:41 [ Gexeio]: FiFouille: ok, pendant ce temp là je me débrouille sur un autre pc 20:41 [@FiFouille]: si ça marche pas, vire tout simplement /home/remi/.irbrc et on y regardera plus tard 20:41 [@FiFouille]: bon, je suppose que tout le monde à un petit Hello World! qui s'affiche 20:42 [@FiFouille]: pour info, la valeur qui se trouve aprÚs => c'est la valeur de retour de la fonction 20:42 [ Gexeio]: FiFouille: c'est bon ça marche, merci 20:42 [@FiFouille]: ici, on voit que puts ne renvoie rien 'nil' 20:42 [@FiFouille]: questions ? 20:43 [@FiFouille]: parfait, je suis super clair ou j'ai endormi tout le monde, parfait 20:43 [@FiFouille]: *slide22* 20:43 [@FiFouille]: on va faire un peu plus compliqué donc 20:44 [@FiFouille]: ici, gets renvoie ce qui est entré au clavier 20:44 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has quit [Read error: 104 (Connection reset by peer)] 20:44 [@FiFouille]: et on va stocker ça dans une variable 'you' 20:44 [@FiFouille]: comme vous le voyez, pas de déclaration de variable en Ruby et pas de typage fort 20:44 [ animimotus]: * require 'irb/completion' avec des vrais ' ' pas des apostrophes ;) 20:45 [@FiFouille]: quand vous allez taper you = gets dans irb, il ne va "rien se passer" 20:45 [@FiFouille]: c'est normal, il attends que vous rentriez qqch 20:45 [@FiFouille]: rentrez votre nom par exemple, et puis faites enter 20:45 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has joined #ubuntu-fr-classroom 20:45 [@FiFouille]: maintenant, puts you affichera votre nom ... fantastique 20:45 [@FiFouille]: puts "Hello " + you + " !" 20:46 [@FiFouille]: quand à lui affiche la concatétnation des trois chaines de caractÚre 20:46 [@FiFouille]: s/quand/quant/ 20:46 [@FiFouille]: juste un problÚme, il y a un retour à la ligne vraiment mal placé 20:46 [ Kouran]: il y a un retour ligne :( 20:46 [@FiFouille]: en fait gets renvoie la chaine de caractÚre qui a été entrée 20:46 [@FiFouille]: mails prend *aussi* le caractÚre de fin de ligne 20:46 [@FiFouille]: donc, deuxiÚme exemple 20:46 [@FiFouille]: you = gets.chomp 20:47 ::: sc_bewolf_72 [n=bewolf@dyn-83-153-207-11.ppp.tiscali.fr] has left #ubuntu-fr-classroom ["Kopete 0.12.4 : http://kopete.kde.org"] 20:47 [@FiFouille]: la méthode chomp supprime tout simplement le dernier caractÚre de la chaine entrée 20:47 [@FiFouille]: et on se retrouve avec la chaine en question, notre nom, sans le retour à la ligne embetant 20:47 [@FiFouille]: deuxiÚme essai, ça fonctionne ! 20:47 [@FiFouille]: plus de retour à la ligne superflu 20:47 [ Kouran]: Ruby is fun ... ! 20:47 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has quit [Read error: 113 (No route to host)] 20:47 [@FiFouille]: alors il y a un autre exemple 20:47 [@FiFouille]: l'interpolation 20:48 [@FiFouille]: "#{code ruby}" 20:48 [@FiFouille]: dans une chaine entre " " il est possible d'exécuter du code ruby 20:48 [@FiFouille]: dans les parties entre #{ } 20:48 [@FiFouille]: ici on affiche la valeur de 'you' 20:48 [@FiFouille]: mais on aurait pu faire autrement 20:48 [@FiFouille]: you = gets 20:48 [@FiFouille]: puis 20:48 [@FiFouille]: puts "Hello #{you.chomp} !" 20:48 [@FiFouille]: rien n'empeche de travailler comme ça 20:49 [ Gick]: \o/ j'avais fait comme ça 20:49 [@FiFouille]: des questions sur ces petits exemples ? 20:49 [ Gick]: ya un "strict" à la perl qui oblige de déclarer les variables? 20:49 [@FiFouille]: Gick: non, justement, et c'est regrétable, c'est sur la wishlist pour ruby2 par contre je pense 20:50 [ Gick]: erf :( 20:50 [@FiFouille]: tout le monde est mort ou quoi ? 20:50 [ Gexeio]: non non 20:50 [ THEDamocles]: FiFouille: Pas moi... 20:50 [ Onc_hansi]: on est pendu a tes levres ;) 20:50 [@FiFouille]: didju ... je pensais voir les premiers suicides au slide 55 environ, finalement au slide 23 c'est déjà fait :D 20:50 [ freacky22527]: nan c'est juste que ton cour est tellement bon qu'on n'a rien à demander ^^ 20:50 [@FiFouille]: ahh, y'a encore des gens, parfait ;) 20:51 [@FiFouille]: bon ben ... *next* 20:51 [ animimotus]: Fi 20:51 [@FiFouille]: les types de base, on va un peu faire le tour 20:51 [ Gick]: vivant, 9 heures de perl m'ont pas tué, c'est pas 50 minutes de ruby qui m'auront ;) 20:51 [@FiFouille]: *slide25* 20:51 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has joined #ubuntu-fr-classroom 20:51 [@FiFouille]: tantot je vous ai dit que dans ruby, tout est objet 20:51 [ animimotus]: moi je bloque à you = gets ^^ 20:51 [ animimotus]: mais c'est pas grave 20:51 [@FiFouille]: ben bon, ici, un exemple d'orienté objet 20:51 [@FiFouille]: l'héritage 20:51 [@FiFouille]: un fixnum est un integer qui lui meme est un numeric 20:52 ::: antho_ [n=antho@ASt-Lambert-152-1-65-153.w82-120.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 20:52 ::: jprieur [n=jprieur@dptinfo.ens.insa-rennes.fr] has quit ["Connection reset by beer"] 20:52 [@FiFouille]: animimotus: tu rentres ton nom, et tu fais ENTER, ensuite tu peux faire joujou avec la variable 'you' ;) 20:52 [ Gexeio]: c'est quoi un fixnum ? 20:52 [@FiFouille]: Gexeio: bonne question, y'en a qui suivent ;) 20:52 [@FiFouille]: fixnum donc, c'est un entier codé sur une taille fixe 20:52 [@FiFouille]: X octects 20:52 [@FiFouille]: bon, problÚme, sur X octects on peut coder un entier qui fait une taille MAX_INT donnée 20:53 [@FiFouille]: si c'est plus grand ? commet on fait ? 20:53 [@FiFouille]: ben l'entier se retrouve 'promu' 20:53 * Krunch rentre en mettant laissant de la boue sur la poignée 20:53 [@FiFouille]: 'promu' en bignum, et là, la mémoire allouée pour stocker le nombre augmente automatiquement avec la valeur donnée 20:53 [@FiFouille]: donc virtuellement, on peut avoir un entier aussi grand qu'on veut, y'a que la mémoire ram qui limite 20:54 [ animimotus]: (bon je suis à nouveau ^^) 20:54 ::: antho_ [n=antho@ASt-Lambert-152-1-65-153.w82-120.abo.wanadoo.fr] has quit [Client Quit] 20:54 [@FiFouille]: alors ici, l'avantage de l'héritage ? 20:54 [@FiFouille]: ben c'est simple, les fonctions définies dans numeric peuvent être utilisées dans les types en dessous (les classes) 20:54 [@FiFouille]: et donc on doit pas s'amuser à copier du code dans tous les sens 20:54 [@FiFouille]: si un objet peut faire ça, alors ses descendants pourront le faire aussi 20:55 ::: syldeb35 [n=syldeb35@ARennes-257-1-69-56.w81-53.abo.wanadoo.fr] has quit [Read error: 110 (Connection timed out)] 20:55 [ Krunch]: 20:17 <@FiFouille> alors oui, c'est moins rapide que d'autres languages de scripts comme du python par exemple 20:55 [@FiFouille]: alors je donne qques exemples de manipulation de type numériques 20:55 [ Krunch]: haha ça rame encore plus que python 20:55 [@FiFouille]: le seul truc qui est pas "trivial" je pense, c'est a**2 20:55 [@FiFouille]: enfin, 5**2 20:55 [@FiFouille]: c'est tout simplement pour faire 5 exposant 2 ... 20:56 ::: melanargia [n=melanarg@gob75-2-82-67-192-55.fbx.proxad.net] has joined #ubuntu-fr-classroom 20:56 [@FiFouille]: la derniÚre ligne par contre est assez bizarre je suppose ? 20:56 [ Gick]: oui, mais ici pour les numeric, on ne déclare quand meme rien, donc on ne sait quand meme pas si c'est un fixnum ou autre? 20:56 [@FiFouille]: ben en fait non 20:56 [@FiFouille]: principe de "suprise minimum" 20:56 [@FiFouille]: si on veut afficher une chaine * 5 .. ben on l'affiche 5 fois 20:57 ::: olivierb [n=olivierb@AAnnecy-256-1-38-152.w90-10.abo.wanadoo.fr] has quit ["Quitte"] 20:57 [@FiFouille]: donc la chaine de caractÚre "5" est affiché 4 fois, et on obtient "5555" ... 20:57 [@FiFouille]: Gick: on peut savoir le type d'un objet en faisant tout simplement 42.class? 20:57 [@FiFouille]: euh, 42.class désolé 20:57 [@FiFouille]: tiens, vous pouvez essayer en fait 20:57 ::: LeUcOs [n=leucos@lns-bzn-54-82-251-110-99.adsl.proxad.net] has joined #ubuntu-fr-classroom 20:58 [@FiFouille]: 42.class , 42.42.class -3.class "5".class 20:58 [@FiFouille]: toutes ces commandes devraient marcher dans irb et vous donnez le type manipulé 20:58 [@FiFouille]: Fixnum, Float, Fixnum, et String 20:58 [ Krunch]: bash: ruby: command not found 20:59 [@FiFouille]: des questions jusque là ? 20:59 [@FiFouille]: ah oui ... comme vous le voyez j'utilise souvent des Objet.méthode 21:00 [@FiFouille]: en fait, on est souvent habitué aux valeur_retour = fonction(variable) 21:00 [@FiFouille]: ici, c'est de l'orienté objet, ça change un peu 21:00 [ Krunch]: c'est quoi un objet ? 21:00 [@FiFouille]: on envoie le "message" class à l'objet 42 (qui est un entier) 21:00 [@FiFouille]: et cet objet répond tout simplement 'FixNum' 21:01 ::: syldeb35 [n=syldeb35@ARennes-257-1-160-42.w86-214.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 21:01 [@FiFouille]: Krunch: alors ça c'est la partie abordée en fin de soirée et qu'on va encore un peu éviter pour pas assomer l'auditoire 21:01 [@FiFouille]: bon ben ... type suivant, les chaînes de caractÚre 21:01 [@FiFouille]: *slide27* 21:02 [@FiFouille]: encore une fois, quelques exemples 21:02 [ Krunch]: FiFouille: c'est fort dommage dans le sens où j'ai cru comprendre que pyth^Wruby était très orienté objet 21:02 [@FiFouille]: + l'opérateur de concaténation, mettre deux bouts ensemble pour n'en former qu'un 21:02 [@FiFouille]: l'affectation de variable, l'exemple avec le * pour 'multiplier' la chaîne 21:02 [@FiFouille]: de nouveau, une interpolation avec #{ } dans " " 21:02 ::: freacky22527 [n=arthur@gov91-1-82-234-91-6.fbx.proxad.net] has quit [Read error: 104 (Connection reset by peer)] 21:02 [@FiFouille]: et puis une petite méthode .upcase sur une chaine 21:03 [@FiFouille]: tout se retrouve en majuscule 21:03 [@FiFouille]: encore une fois, on envoie le 'message' .upcase à l'objet chaine de caractÚre "foobar" et celui ci "se renvoie" en majuscules 21:04 [@FiFouille]: alors c'est en qque sorte du fonctionnel à ce niveau, parce que la valeur de l'objet n'est pas modifiée, c'est une copie en majuscule qui est renvoyée 21:04 [@FiFouille]: (plus là dessus un peu plus tard ;) 21:04 [@FiFouille]: petite remarque, depuis le début on utilie puts, qui ajoute un retour à la ligne à la fin 21:04 [@FiFouille]: print fonctionne aussi, mais il faut rajouter un "\n" soi même ;) 21:04 [@FiFouille]: des questions sur le slide 28 ? 21:05 [@FiFouille]: (ou sur les précédents d'ailleurs) 21:05 [ Onc_hansi]: le 28 ? 21:05 [@FiFouille]: s/28/27/ en fait 21:05 [@FiFouille]: Onc_hansi: bien vu :p 21:05 [@FiFouille]: bon, apparement non, donc passons au 28 :p 21:05 [@FiFouille]: les tableaux 21:06 [@FiFouille]: donc ici, rien de fabuleux, on affecte le tableau de trois valeurs [ 1 ,2 ,3 ] à la variable arr1 21:06 [@FiFouille]: arr1 est donc un tableau 21:06 [@FiFouille]: arr1.class devrait vous afficher Array si vous essayez dans irb ou ruby 21:06 [@FiFouille]: encore une fois, les tableaux sont indexés à partir de 0 21:07 [@FiFouille]: donc arr1[0] renvoie le premier élément, arr1[1] le deuxiÚme et ainsi de suite 21:07 [@FiFouille]: alors petit élément marrant, on peu aussi accéder aux éléments d'un tableau depuis la fin 21:07 [@FiFouille]: arr1[-1] retourne le dernier élément -2 l'avant dernier et ainsi de suite 21:07 ::: ktulu77 [n=theo@chs77-1-82-238-8-65.fbx.proxad.net] has joined #ubuntu-fr-classroom 21:07 [@FiFouille]: la 4Úme ligne détaille l'utilisation d'un "range" 21:08 [@FiFouille]: arr1[1..2] va renvoyer un nouveau tableau avec le deuxiÚme et troisiÚme éléments 21:08 [ Gick]: arr1[-1] => 3 chez moi 21:08 [@FiFouille]: (vous l'avez deviné, les valeurs placées aprÚs => sont ce qui ça renvoie ) 21:08 [@FiFouille]: ouep, coquille, faudra que je corrige, merci ;) 21:09 [@FiFouille]: alors, comment créer un tableau vide vous aller me dire ? 21:09 [@FiFouille]: simple 21:09 [@FiFouille]: arr2 = [] 21:09 [@FiFouille]: arr2 = Array.new fonctionne aussi (pour les fan d'OO) 21:09 [@FiFouille]: << est un opérateur d'insertion, on rajoute l'élément à la suite du tableau 21:10 ::: jnjb [n=etermine@dyn-83-157-37-248.ppp.tiscali.fr] has quit [Connection timed out] 21:10 [@FiFouille]: donc ici on rajoute 2 4 et 3 à la suite, on obtient le tableau [ 2, 4, 3] 21:10 ::: jnjb [n=etermine@dyn-88-123-161-253.ppp.tiscali.fr] has joined #ubuntu-fr-classroom 21:10 [@FiFouille]: encore une fois, principe de suprise minimum, de convention 21:10 [@FiFouille]: l'opérateur + concatÚne les tableaux 21:11 [@FiFouille]: comme vous pouvez le voir, le tableau obtenu est arr1 suivi de arr2 21:11 [@FiFouille]: l'opérateur & va quant à lui renvoyez un tableau avec les éléments communs entre arr1 et arr2 21:11 [@FiFouille]: et - va retirer de arr1 les éléments communs avec arr2 21:12 [@FiFouille]: un dernier exemple 21:12 [@FiFouille]: on concatÚne, et le tableau obtenu est alors trié 21:12 [@FiFouille]: pourquoi les parenthÚses me direz vous ? 21:12 [ Gexeio]: pour affecter les deux objets ? 21:12 [@FiFouille]: ben sinon on trie arr2 et on le concatÚne à arr1 ... on aurait pu le faire, mais ici c'est pas ce dont on a envie ;) 21:13 ::: Kouran [n=kouran@96.240-244-81.adsl-static.isp.belgacom.be] has quit ["Leaving"] 21:13 [@FiFouille]: ici on veut trier le résultat de arr1 + arr2 21:13 [@FiFouille]: questions ? 21:13 [ Gexeio]: on peut faire des tableaux associatifs ? 21:13 [@FiFouille]: Gexeio: et en fait, on affecte pas vraiment les deux objets, on affecte (en triant) le résultat de arr1 + arr2 21:14 [@FiFouille]: Gexeio: haha, bonne question, alors c'est le slide suivant :p 21:14 [ Gexeio]: ^^ 21:14 [@FiFouille]: pas de problÚmes jusqu'à présent donc 21:14 [ animimotus]: c'est limpide, je crois 21:14 [@FiFouille]: je fais une pause de 30 secondes, si vous avez des questions, lachez vous 21:16 [@FiFouille]: petite remarque aussi 21:16 [@FiFouille]: c'est pas comme en C, le tableau peut être hétérogÚne 21:16 [@FiFouille]: rien n'empêche d'avoir 21:16 [@FiFouille]: [ 1, 2, "coucou", [ 1, 2, 3], 42.42, -20 ] 21:17 [@FiFouille]: on arrive donc à une question 21:17 ::: illovae [n=illovae@unaffiliated/illovae] has quit [Remote closed the connection] 21:17 [@FiFouille]: comment ruby gÚre ce genre de bordel ? ;) 21:17 [@FiFouille]: en même temps qu'en ruby tout est objet, tout est aussi référence 21:17 ::: illovae [n=illovae@uni14-1-82-233-221-131.fbx.proxad.net] has joined #ubuntu-fr-classroom 21:17 [@FiFouille]: et une référence c'est quoi, ben juste une adresse en mémoire 21:18 [@FiFouille]: et dans cette zone mémoire, ruby arrive à retrouver quel est le type d'objet manipulé, sa valeur, son ID etc ... 21:18 [@FiFouille]: donc en fait, ici, l'indice 3 (4Úme élément) n'est qu'une référence vers un autre tableau 21:18 [@FiFouille]: qui lui même est une série de 3 références vers des entiers (Fixnum) 21:19 [@FiFouille]: si vous n'avez pas compris, c'est pas grave ;) 21:19 [@FiFouille]: c'était une parenthÚse pour les fans 21:19 [@FiFouille]: passons au slide29 21:19 [ animimotus]: FiFouille: (tous tes ' ont été remplacé par des accents aigus) 21:19 [@FiFouille]: tableus de hachage 21:20 [@FiFouille]: animimotus: dans le pdf ? 21:20 [ animimotus]: ouep 21:20 [@FiFouille]: animimotus: surement un comportement étrange de babel french, je corrigerai ça 21:20 [ Gexeio]: c'est pas des backtits ? 21:20 [ animimotus]: enfin si je c/c dan le term 21:20 [@FiFouille]: les tables de hachage je disais donc 21:20 [ Gick]: [ 1, 2, "coucou", [ 1, 2, 3], 42.42, -20 ][3][2] => 3 pour ceux qui se demandent 21:20 [@FiFouille]: non, c'est des simple quotes ' 21:20 [ Gexeio]: ok 21:20 [@FiFouille]: alors une table de hachage c'est quoi ? 21:21 [@FiFouille]: (et là ça va être sport parce que j'explique bien mal :p ) 21:21 [@FiFouille]: bon alors on peut voir ça comme un carnet d'adresse 21:21 [@FiFouille]: ou un dictionnaire (le terme employé en python d'ailleurs) 21:21 [@FiFouille]: à chaque clé (un nom, un mot) 21:21 [@FiFouille]: correspond une valeur (une adresse, une définition) 21:22 [@FiFouille]: ici, l'exemple pris, c'est des fruits 21:22 [@FiFouille]: une clé pomme correspond à une valeur rouge 21:22 [@FiFouille]: seul petit "problÚme" 21:22 [@FiFouille]: les collisions, à un mot du dico correspond une définition 21:23 [@FiFouille]: conceptuellement parlant, dans un cerveau normalement constitué ça semble une abération 21:23 [@FiFouille]: au niveau de l'ordinateur par contre c'est un autre problÚme 21:23 [@FiFouille]: on va vite expliquer pourquoi 21:23 [@FiFouille]: en fait, quand vous spécifiez une clé (nom, fruit, mot) 21:23 [@FiFouille]: il passe dans une fonction de hachage 21:24 [@FiFouille]: une fonction de hachage c'est une fonction qui, pour une valeur entrée de taille arbitraire renvoie une valeur de taille fixe 21:24 [ Krunch]: 21:17 <@FiFouille> [ 1, 2, "coucou", [ 1, 2, 3], 42.42, -20 ] 21:24 [ Krunch]: ho du scheme 21:24 [@FiFouille]: alors je suppose que vous avez tous entendu parler de Sha1 ou md5 ... ben c'est des fonctions de hachage 21:24 [ Krunch]: cryptographiques 21:24 [ animimotus]: [21:20] [ 1, 2, "coucou", [ 1, 2, 3], 42.42, -20 ][3][2] => 3 pour ceux qui se demandent <------- non non [1, 2, 3] :p 21:25 [@FiFouille]: animimotus: nan, Gick a raison sur ce coup là, mais soit 21:25 [@FiFouille]: alors l'avantage c'est que normalement, l'étendue de valeur renvoyée par la fonction de hachage est bornée (a une taille fixe) et que les valeurs renvoyées sont équitablement réparties sur ce domaine 21:25 [ Krunch]: pour les tables de hachage faut lire knuth sinon 21:25 [@FiFouille]: (miam des maths direz vous) 21:25 [ Krunch]: s/pour les tables de hachage// 21:25 [@FiFouille]: bon ben ... c'est presque fini 21:25 [@FiFouille]: votre dictionnaire, quand vous cherchez un mot 21:26 [@FiFouille]: vous allez d'abord à la section qui correspond à la premiÚre lettre du mot 21:26 [@FiFouille]: puis vous continuez et vous finissez par le trouver 21:26 [@FiFouille]: ici, c'est pareil, on sait connait le domaine (dans le dico c'est de A à Z) 21:27 [ animimotus]: Gick: (ah j'avais pas vu le [2]) 21:27 [@FiFouille]: donc on regarde la valeur renvoyée, et on sait à peu prÚs où taper pour retrouver la clé recherchée 21:27 [@FiFouille]: on arrive enfin à la conclusion 21:27 [@FiFouille]: ça va vachement plus vite qu'un tableau pour retrouver qqch 21:27 [@FiFouille]: le tableau il faut le parcourir dans toute sa longueur pour essayer de trouver ce qu'on cherche 21:27 [@FiFouille]: la table de hachage on pointe rapidement sur ce qu'on cherche (une sorte de dichotomie) 21:28 [@FiFouille]: YES, JE LES AI TOUS TUÉS ! 21:28 [ Onc_hansi]: lol 21:28 [@FiFouille]: bon ben ... aprÚs tout ce blabla, vous irez voir sur wikipedia, c'est bien expliqué ;) 21:28 [ Krunch]: FiFouille: c'est un trie ça, pas une hashtable 21:28 [@FiFouille]: *slide30* 21:28 ::: syldeb35 [n=syldeb35@ARennes-257-1-160-42.w86-214.abo.wanadoo.fr] has quit [Connection timed out] 21:28 [@FiFouille]: alors la syntaxe générale pour une hashtable c'est la premiÚre ligne 21:29 [@FiFouille]: une hashtable vide serait déclarée comme suit 21:29 [@FiFouille]: h = {} ou h = Hash.new 21:29 [@FiFouille]: ici, la premiÚre ligne crée une hashtable avec une seule clé 'pomme' dont la valeur est 'rouge' 21:29 [@FiFouille]: les clés peuvent avoir n'importe quel type 21:29 [@FiFouille]: ici on a utilisé une chaine 21:29 [@FiFouille]: deuxiÚme ligne on utilise un entier 21:29 ::: LeUcOs [n=leucos@lns-bzn-54-82-251-110-99.adsl.proxad.net] has quit ["Leaving."] 21:29 [@FiFouille]: h[42] = 'la réponse est ...' 21:30 [@FiFouille]: la clé 42 et la valeur correspondante 'la réponse est ...' 21:30 [ Krunch]: h[42] et h["42"] sont-ils différents ? 21:30 [@FiFouille]: Krunch: oui, vu que les types sont différents 21:30 ::: syldeb35 [n=syldeb35@ARennes-257-1-142-148.w86-210.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 21:30 [ Gexeio]: et on ne peut pas afficher une hashtable avec puts comme on ferait avec un array ? 21:31 [@FiFouille]: Gexeio: ben rien ne t'emphêche d'essayer ;) 21:31 [@FiFouille]: puts h 21:31 [@FiFouille]: on a une mise à plat, tout à la suite de l'autre 21:31 [ Onc_hansi]: question h[42]="la rep..." ces tequivalent a h={'42' => 'la rep...'}? 21:32 [@FiFouille]: Onc_hansi: oui et non, les deux crée la meme association, sauf que, le premier cas ajoute l'assoc a la table h 21:32 [@FiFouille]: et le deuxieme crée une nouvelle table avec une seule assoc 21:32 [ Gexeio]: FiFouille: c'est juste louche, ça marche sur un de mes shell mais pas sur l'autre... 21:32 [ Onc_hansi]: oki merci :) 21:32 [@FiFouille]: bon, alors je sais pas si ça le fait chez vous 21:32 [ reber]: c'est louche cette histoire de hash... 21:33 [@FiFouille]: mais comme on passe par une fonction de hachage, l'ordre des valeurs est pas garanti 21:33 ::: avoine [n=avoine@modemcable036.0-70-69.static.videotron.ca] has quit ["Ex-Chat"] 21:33 [ Gexeio]: juste, on peut faire tourner deux instance de irb en même temps? 21:33 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has quit [Remote closed the connection] 21:33 [@FiFouille]: c'est pas parce que vous avez mis les clés/valeurs 1, 2 et puis 3 qu'elles vont ressortir dans cet ordre, donc ... _prudence_ ;) 21:33 [@FiFouille]: Gexeio: autant que tu veux 21:33 [ animimotus]: => "la r\303\251ponse \303\240 ..." <--- ça renvoit quoi comme codage ? 21:34 [ Gick]: C'est quand ça va commencer à devenir intéressant que je vais devoir partir... bonne nuit à tous. 21:34 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has joined #ubuntu-fr-classroom 21:35 [@FiFouille]: animimotus: c'est de l'unicode 21:35 ::: Gick [n=Gick@250.52-64-87.adsl-dyn.isp.belgacom.be] has quit ["ZZzzzZZZz"] 21:35 [@FiFouille]: et si vous avez des problÚmes d'encodage dans un cas ou l'autre, spécifiez 21:35 [@FiFouille]: KCODE="u" au début de votre fichier, ruby passera en support d'unicode 21:35 [ animimotus]: ok 21:35 [@FiFouille]: arf 21:35 [@FiFouille]: $KCODE="u" 21:36 [@FiFouille]: ah oui tiens, j'en parle vite fait comme ça 21:36 [@FiFouille]: var1 = 42 21:36 [@FiFouille]: c'est une variable locale 21:36 [@FiFouille]: KCODE c'est une constante 21:36 [@FiFouille]: $KCODE une constante globale 21:36 [@FiFouille]: et enfin, $var1 ... une variable globale ;) 21:36 [@FiFouille]: la différence entre locale et globale ? 21:37 [ Krunch]: les constantes en majuscule c'est une convention où c'est forcé par le langage ? 21:37 [ Gexeio]: sa portée ? 21:37 [@FiFouille]: l'une peut être accédée de n'importe où dans le programme, l'autre, seulement dans les 'scopes' descendants (on verra ça plus loin) 21:37 ::: freacky22527 [n=arthur@gov91-1-82-234-91-6.fbx.proxad.net] has joined #ubuntu-fr-classroom 21:37 [@FiFouille]: Krunch: c'est forcé, une fois défini tu peux plus y toucher 21:37 [@FiFouille]: Gexeio: ouep, sa portée ;) 21:37 [ Krunch]: et les locales c'est des locales lexicales ou dynamiques ? 21:38 [ Krunch]: genre elles sont accessibles dans les fonctions appellées ? 21:38 [@FiFouille]: alors (si je me gourre pas) on peut rentre une variable constante 21:38 [@FiFouille]: et ça simplement en faisant .freeze 21:38 [@FiFouille]: Krunch: elles sont accessibles dans les fonctions appelées et les déclarations à l'intérieur des fonctions appelées travaille dans une autre portée 21:39 [@FiFouille]: bon, j'en étais où ... 21:39 [@FiFouille]: ah oui 21:39 [@FiFouille]: DES QUESTIONS ? :D 21:40 [@FiFouille]: continuons donc avec les tables de hachages alors 21:40 [ reber]: Le .freeze ça sert à freezer une variable, les constantes il me semblent qu'elles commencent par une majuscule. 21:41 [@FiFouille]: reber: c'est ce que j'ai dit non ? 21:41 [@FiFouille]: enfin ... on rend la valeur constante, la variable est pas promue au stade de constante 21:41 [@FiFouille]: bion 21:42 [@FiFouille]: .has_key? permet tout simplement de voir si la table a une clé donnée ou pas 21:42 [@FiFouille]: vous voyez que les parenthÚse sont facultatives pour les fonctions, mais en général je vous conseille de les mettre pour la lisibilité et pour ne pas avoir de blaque en cas d'appels de fonctions imbriqués 21:43 [@FiFouille]: petite variante ... h = Hash.new(5) 21:43 [@FiFouille]: crée une nouvelle table de hachage dont les valeurs par défaut sont 5 21:43 [@FiFouille]: et ce quelle que soit la clée fournie 21:44 [@FiFouille]: ça veut pas dire pour autant que toutes les clés existent (et donc has_key? fonctionne normalement) 21:44 [@FiFouille]: mais que si on fait appel à une clé/valeur inexistante elle renverra 5 21:44 [@FiFouille]: (il y a un exemple à la page suivante qui illustrera une utilisation possible) 21:44 [@FiFouille]: encore une fois, tout est référence 21:45 [@FiFouille]: donc une clé peut avoir une valeur correspondante qui est un entier, un tableau ou même ... une autre table de hachage 21:45 [@FiFouille]: il y a donc moyen de simplement créer des arbres par exemple 21:45 [@FiFouille]: des questions ? 21:45 [@FiFouille]: (sinon on va pouvoir passer à un premier exemple ;) ) 21:46 [@FiFouille]: *slide32* 21:46 [@FiFouille]: alors je vous propose de le lire 21:46 [@FiFouille]: éventuellement l'essayer dans un fichier et le lancer pour voir ce que ça donne 21:46 [@FiFouille]: et puis poser vos questions 21:47 [@FiFouille]: pour ce qui est de la ligne str.split(/ /) je l'expliquerai briÚvement et on reviendra dessus en détail juste aprÚs 21:47 [@FiFouille]: je vous laisse 2 minutes 21:47 [ animimotus]: h = { ’pomme’ => [ ’rouge’, ’verte’]\ <---- l'antislash c'est une coquille ? 21:47 [@FiFouille]: animimotus: c'est pour continuer la ligne sur la ligne suivante 21:47 [@FiFouille]: soit tu mets les 3 lignes l'une derriÚre l'autre sans les \ 21:48 [@FiFouille]: soit sur trois lignes, mais il faut bien que ruby sache que ça continue aprÚs, d'où le \ 21:48 [@FiFouille]: (comme en C ou bash en fait) 21:48 [ animimotus]: dans irb ? 21:48 [ animimotus]: ok 21:48 [@FiFouille]: animimotus: irb devrait pas broncher non plus et s'en sortir sans problÚme 21:49 [ animimotus]: (c'est toujours cette histoire de c/c...) 21:49 [@FiFouille]: animimotus: ça fait du bien à tes doigts de se défouler un peu :p 21:49 [@FiFouille]: animimotus: bon sinon y'a le source aussi qui est dispo hein ;) 21:50 [@FiFouille]: même dossier, fichier .tex 21:50 [ animimotus]: :) 21:50 [@FiFouille]: bon alors, explicitons un peu ça 21:50 [@FiFouille]: on a une longue chaine 21:50 [@FiFouille]: les pommes sont ... jusque ou jaunes 21:50 [@FiFouille]: on crée une table de hachage avec comme valeur par défaut 0 21:51 [@FiFouille]: ensuite, on split (sépare) cette chaine en utilisant / / comme séparateur (un espace) 21:51 [@FiFouille]: on obtient alors un tableau avec chaque mot qui en est un élément 21:51 [@FiFouille]: là dessus, sur le tableau, on utilise .each (chaque élément est parcouru) 21:51 [@FiFouille]: et on applique le bout de code entre { } 21:52 [@FiFouille]: chaque élément est stocké tour à tour dans la variable mot 21:52 [@FiFouille]: et chaque mot se retrouve clé de la table de hachage dont on augmente la valeur de 1 21:52 [ Gexeio]: pourquoi mot est en pipes ? 21:52 [ Gexeio]: *est entre pipes 21:52 [ Gexeio]: *est entre des pipes 21:53 [@FiFouille]: Gexeio: l'itération avec le .each renvoie à chaque fois une valeur (la valeur du tableau à l'indice courant) 21:53 * Gexeio est fatigué 21:53 [@FiFouille]: |variable| permet simplement de spécifier les noms des variables qui vont être utilisées dans le { } 21:53 [ Gexeio]: ok 21:53 [@FiFouille]: [1, 2, 3].each { |chiffre| puts chiffre { 21:53 [@FiFouille]: s/{$/}/ 21:54 [@FiFouille]: par exemple, passerait 1 2 3 en revue, les placerait tour à tour dans chiffre et afficherait chiffre 21:54 [@FiFouille]: tantot je vous ai dit qu'une clé dans une table de hachage devait être unique 21:54 [@FiFouille]: et justement, ici, grâce à ça, si un mot existe déjà dans la table, on augmente tout simplement la valeur associé de 1 21:55 [@FiFouille]: on finit donc bien par compter les mots qu'il y a dans la phrase 21:55 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has quit [] 21:55 [@FiFouille]: si vous voulez voir tout le contenu de la table, c'est simple 21:55 [@FiFouille]: h.each { |cle, valeur| puts "#{cle} => #{valeur}" } 21:56 [@FiFouille]: voila voila, des questions ? 21:56 [@FiFouille]: on aura plein d'expemples de .each un peu plus tard, n'ayez pas peur ;) 21:56 [@FiFouille]: (et la bonne nouvelle, c'est que ça va aller un peu plus vite maintenant ;) ) 21:56 [@FiFouille]: pas de questions ou bien tout le monde est parti ? ;) 21:57 [ Gexeio]: oui 21:57 [ Onc_hansi]: pour l instant ca va 21:57 [@FiFouille]: les autres (s'il y en a) aussi ? 21:58 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has joined #ubuntu-fr-classroom 21:58 * FiFouille comprend maintenant la frustration de ses profs quand ils posent une question à leurs auditeurs ;) 21:58 [ animimotus]: oui j'ai une question. Slide 33 ? :) 21:58 [@FiFouille]: bon, *slide33* 21:58 [@FiFouille]: donc, simplement, conversions 21:58 [@FiFouille]: transformer un entier en chaine et l'inverse et ainsi de suite 21:58 [@FiFouille]: c'est trivial, je vous laisse 15 secondes pour lire ;) 21:59 [@FiFouille]: seul cas particulier, le range (1..5) est simplement un range de 1 à 5 21:59 [ Gexeio]: est-ce qu'il existe les opérateurs de cast ? 21:59 [@FiFouille]: ('a'..'z') est un range qui représente l'alphabet en minuscule 21:59 [@FiFouille]: Gexeio: ben ces quelques méthodes sont des opérateurs de cast on pourrait dire 22:00 [ Gexeio]: d'accord 22:00 [@FiFouille]: il n'y pas de (FixNum)5.23 si c'est la question 22:00 [@FiFouille]: mais plutot un 5.23.to_i 22:00 [@FiFouille]: troisiÚme partie, alors c'est des rappels de ce qu'on a déjà vu 22:00 [@FiFouille]: c'est parti 22:00 [@FiFouille]: *slide36* 22:01 [@FiFouille]: seul cas particulier, le "%0.2f" % 4.425 22:01 [@FiFouille]: comme on le fait en C, on spécifie un code format et aprÚs on a la valeur à 'injecter' 22:01 [@FiFouille]: et là, la syntaxe est ressemblante au python 22:01 [@FiFouille]: le reste .. trivial 22:01 [@FiFouille]: 5 % 3 ... c'est le modulo, le reste de la division 22:02 [@FiFouille]: *slide37* 22:02 [@FiFouille]: <=> est la comparaison, il se contente de renvoyer une valeur en fonction de l'ordre des deux opérandes 22:02 [@FiFouille]: comme strcmp en C pour ceux qui connaissent 22:02 [@FiFouille]: (on en verra une application plus tard) 22:03 [@FiFouille]: === quant à lui est utilisé dans le cas du 'case' par exemple 22:03 [@FiFouille]: et il permet, comme on peut le voir, de trouver sur une valeur appartient à un range par exemple 22:03 [@FiFouille]: 6 entre 5 et 10 ? b dans l'alphabet minuscule ? Z dans l'alphabet minuscule ? 22:03 [@FiFouille]: tout simplement 22:04 [@FiFouille]: (alors vous le lirez dans la doc, mais tout ces opérateurs de comparaisons peuvent être redéfinis à votre guise pour comparer ce que vous voulez) 22:04 [@FiFouille]: si pour vous 1 est plus grand que 2 mais 2 plus petit que 0 ... vous pouvez le faire 22:04 [@FiFouille]: (c'est pas conseillé par contre) 22:05 [@FiFouille]: *slide38* 22:05 [@FiFouille]: les opérateurs logiques, sur les tableaux on a vu ce que ça faisait, sur des entiers ça travaille comme en C et ça se base sur la valeur binaire 22:05 [@FiFouille]: (pour les matheux et électroniciens \o) 22:06 [ Krunch]: on notera cependant que strcmp ne garanti pas nécessairement un ordre correspondant à l'odre "intuitif" 22:06 [@FiFouille]: bon alors, je vais faire le casse pied :D 22:06 [@FiFouille]: partie bloc conditionnels, je vous laisse lire 22:06 [@FiFouille]: posez toutes les questions que vous voulez 22:07 [ Krunch]: combien font 6*7 ? 22:07 [@FiFouille]: normalement vous devriez pouvoir comprendre par vous même 80% sans trop de problÚme 22:07 [@FiFouille]: Krunch: 42 je dirais 22:07 [ Gexeio]: est-ce que val est est transmise au bloc ? 22:07 [ Krunch]: merde en plus c'est pas la multiplication qui je cherchais 22:07 [@FiFouille]: Gexeio: ici c'est pas un bloc, simplement une condition 22:08 [@FiFouille]: est ce que val égale 6 ? 22:08 [@FiFouille]: est ce que val appartient à l'intervale 1 à 5 (compris) 22:08 [@FiFouille]: et sinon, afficher "autre chose" 22:08 [ Krunch]: 6*9 pardon 22:09 [@FiFouille]: petite remarque, vous voyez qu'il est aussi possible de placer la condition aprÚs le code 22:09 [@FiFouille]: afficher "c'est 6" si val égale 6 22:09 [@FiFouille]: afficher "c'est pas 6" à moins que val égale 6 22:09 [@FiFouille]: on pourrait argumenter que c'est pour avoir une meilleure lisibilité et un code moins étalé 22:10 [@FiFouille]: pour for x in ... 22:10 [@FiFouille]: c'est le même principe que pour .each sur un tableau 22:10 [@FiFouille]: sauf qu'au lieu de déclarer la valeur utilisée avec |variable| on la spécifie juste aprÚs le for 22:10 [@FiFouille]: vous êtes libre de son utilisation, mais en général c'est .each qui est le plus utilisé 22:11 [@FiFouille]: *slide42* 22:11 [@FiFouille]: petite remarque aussi 22:11 [@FiFouille]: next permer de "rejouer" la boucle 22:12 [@FiFouille]: ici on recommence donc directement au début de la boucle si la ligne commence par un # (un commentaire) 22:12 [ Krunch]: "comme en perl" 22:12 [@FiFouille]: et on break (on quitte la boucle) si elle contient uniquement le mot quitter 22:12 [@FiFouille]: (pour les expressions rationnelles, voir mon autre présentation ;) ) 22:12 [ Krunch]: ton ? 22:12 [@FiFouille]: encore autre chose, on aurait pu écrire aussi next if s =~ /^#/ 22:13 [ Gexeio]: l'expression entre / / est introduite par ~ ? 22:13 [@FiFouille]: Gexeio: ouep, on vérifie si l'expression rationnelle matche la valeur donnée 22:13 [ Gexeio]: ok 22:13 [@FiFouille]: et ici, il s'agit d'une valeur implicite, la valeur s en fait (la derniÚre valeur de retour) 22:13 [@FiFouille]: c'est un perlisme que beaucoup ont en horreur, il est juste là pour vous montrer que ça existe 22:14 [ Krunch]: c'est un piège pour attirer les mongueurs 22:14 [ Krunch]: mais nous ne sommes pas dupes 22:14 [@FiFouille]: (d'ailleurs pour ruby2 je pense que ces variables implicites passent à la trape ;) 22:15 [@FiFouille]: Krunch: tu peux aussi te taire, c'est le même prix ... et y'a de la biÚre au frigo si t'as pas ton compte 22:15 [ Krunch]: je finis mes pâtes puis je m'y met 22:15 [@FiFouille]: *slide43* donc 22:16 [@FiFouille]: le case, ça change un peu du C, mais c'est simple 22:16 [@FiFouille]: et ici, c'est l'opérateur === qui est utilisé comme on l'a dit plus haut 22:16 [ Krunch]: .oO(php) 22:16 [@FiFouille]: /quitter/ est encore une fois une expression rationnelle, si var contient quitter alors on affiche "quitter" et on quitte (exit) 22:17 [@FiFouille]: voila, on va bientot pouvoir attaquer la derniÚre partie avant les exemples complets 22:17 [@FiFouille]: des questions ? 22:17 [ Gexeio]: pourquoi est-ce que là l'expression rationnel est pas introduite par ~ 22:17 [ animimotus]: # pour nos plus fid`les auditeurs 22:17 [ animimotus]: e 22:17 [ animimotus]: ^^ 22:17 [@FiFouille]: Gexeio: c'est l'opérateur === qui est utilisé implicitement, et il permet de matcher une variable à une expression rationnelle 22:18 [ Gexeio]: ok 22:18 [ reber]: qui a une solution à ça : 4.0-2.1-1.8-0.1 22:18 [ animimotus]: arf c'est le c/c de kpdf qui mird' 22:18 ::: syldeb35 [n=syldeb35@ARennes-257-1-142-148.w86-210.abo.wanadoo.fr] has quit [Read error: 110 (Connection timed out)] 22:18 [ effraie]: o/ 22:19 [@FiFouille]: reber: les types flottants n'ont jamais étés précis ;) 22:19 [ animimotus]: effraie: :p 22:19 [@FiFouille]: effraie: oui ? 22:19 [ effraie]: oui quoi? 22:19 [ effraie]: je disais bonjour 22:19 [@FiFouille]: si vous avez raté un truc, c'est le moment de demander 22:19 [ effraie]: :) 22:19 [@FiFouille]: effraie: bonjour :p 22:19 [@FiFouille]: enfin j'ai assassiné tout le monde, je suis trop balaise 22:19 [ effraie]: ah, merde, j'arrive pendant le cours 22:19 [ effraie]: dsl 22:20 [ animimotus]: bouh effraie :p 22:20 * effraie se confond en excuses 22:20 * FiFouille a une grande carriÚre de prof de romane devant lui 22:20 [ THEDamocles]: FiFouille: Continuons... 22:20 [ reber]: assied toi, et chut 22:20 [ Gexeio]: roa non tu m'as reveiller j'dormais 22:20 [@FiFouille]: *slide45* 22:20 [@FiFouille]: les I/O / E/S 22:20 [@FiFouille]: bon ben, tout bête 22:20 [ Krunch]: .oO(monad) 22:20 ::: syldeb35 [n=syldeb35@ARennes-257-1-43-236.w81-53.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 22:21 [@FiFouille]: on ouvre un fichier, on a un descripteur dessus, on le parcours avec .each (ligne par ligne) et on affiche 22:21 [@FiFouille]: facile non ? 22:21 [@FiFouille]: éventuellement pas oublier de le fermer aussi :p 22:22 [@FiFouille]: ça c'était pour la lecture 'r' (read) 22:22 [@FiFouille]: *slide46* 22:22 [@FiFouille]: l'écriture 22:22 [@FiFouille]: pareil, on ouvre (avec w+) on a un descripteur et on "imprime dans" ce descripteur 22:23 [ Krunch]: pq w+ et pas w ? 22:23 [@FiFouille]: petite subtilité ... 10.times exécute simplement 10 fois le machin entre { } un bloque 22:23 [@FiFouille]: et i est l'indice de l'itération courante 22:23 [@FiFouille]: Krunch: w aurait pu aller aussi, ici on relit pas 22:24 [@FiFouille]: pour toutes ces valeurs "obscures" w, w+, r, a etc ... 22:24 [@FiFouille]: consultez le manuel de fopen(3) tout y est détaillé 22:24 [ Sp4rKy]: re ici 22:24 [@FiFouille]: des questions ? :p 22:25 [@FiFouille]: (aprÚs ça va un peu ralentir de nouveau et ça sera la partie compliquée ;) ) 22:25 [@FiFouille]: bon alors la bonne nouvelle, c'est qu'en lisant à votre aise ce qui reste et un peu de doc, vous avez les bases pour commencer 22:25 [@FiFouille]: à partir de maintenant c'est que du "bonus" et l'occasion de poser des questions à une bonne poire tant qu'elle est là ;) 22:25 [ animimotus]: (y'a pas de man dans irb ?) 22:26 [@FiFouille]: animimotus: c'est pas documenté à la maniÚre de perl, non 22:26 [@FiFouille]: animimotus: par contre y'a un bouquin de référence dont l'url est donnée en derniÚre page et qui est gratuit ;) 22:26 [ animimotus]: \o/ 22:26 [ reber]: animimotus, t'as ri aussi 22:27 [ animimotus]: ri ? 22:28 [@FiFouille]: ah oui tiens, comment j'ai pu oublier 22:28 [ reber]: ri unefonction, une classe etc 22:28 [@FiFouille]: sudo apt-get install ri ;) 22:28 ::: Lestat_ [n=lestat@ANantes-257-1-152-126.w90-32.abo.wanadoo.fr] has quit [Read error: 110 (Connection timed out)] 22:28 [@FiFouille]: ceux qui n'ont pas de questions, je vous invite à lire le slide 51 et 52 22:28 [ animimotus]: reber: j'ai bien fait de poser la question et pas prendre ri pour rire :) 22:29 [ reber]: animimotus, :D 22:29 [@FiFouille]: il s'agit d'exemples d'utilisation d'itérateurs, des .each comme on les a déjà vus 22:29 [ animimotus]: chérie, j'ai ri \o/ 22:29 [@FiFouille]: bon alors pour la fin, je vous laisse choisir de quoi on parle ;) 22:30 [@FiFouille]: blocs, exceptions, regex ou orienté objet 22:30 [@FiFouille]: voir même de ruby on rails si vous voulez, mais alors je finis d'abord ;) 22:31 [ reber]: je vote exceptions, oo 22:31 [@FiFouille]: exceptions++ 22:31 [@FiFouille]: d'autres demandes ? ;) 22:31 [ Gexeio]: je vote orienté objet 22:31 [@FiFouille]: ok, on va commencer par les exceptions alors 22:31 [ animimotus]: je vote Sego \o/ 22:31 [ Gexeio]: mais les exceptions ne vont pas de paire avec les objets ? 22:32 [@FiFouille]: *slide61* alors 22:32 [ THEDamocles]: Exceptions... 22:32 [@FiFouille]: Gexeio: pas forcément 22:32 [ Gexeio]: ok 22:32 [@FiFouille]: bon alors, ceux qui on fait du C le savent, les codes de retour c'est parfois la m**** 22:32 [@FiFouille]: on sait pas toujours à quelle heure on a affaire, pour qu'elle remonte où il faut et s'en remettre plus ou moins c'est la foire 22:32 [@FiFouille]: s/heure/erreur/ mon dieu 22:33 [ The_Marauder]: plop 22:33 [@FiFouille]: les exceptions c'est en fait une espÚce de capsule avec un type et un petit message à l'intérieur 22:33 [ The_Marauder]: vous avez vue le pur message de logout de plutonium ? 22:33 [@FiFouille]: genre 'bon, y'a la lecture de fichier qui s'est vautrée' 22:33 [ The_Marauder]: <-- plutonium a quitté ce serveur ("rm -rf /"). 22:34 [@FiFouille]: comme ça, on peut savoir ce qui a posé problÚme et traiter en conséquence 22:34 [@FiFouille]: The_Marauder: /topic 22:34 [@FiFouille]: un joli exemple au slide 62 22:34 [ Krunch]: ceux qui font du C font des fonctions void qui font des err() 22:34 [ The_Marauder]: FiFouille ? 22:34 [ reber]: The_Marauder, assieds toi, et chut 22:34 [ The_Marauder]: pardon 22:35 ::: Koroviev [n=Koroviev@APoitiers-156-1-17-216.w81-50.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 22:35 [@FiFouille]: il fait quoi cet exemple, ... ben c'est simple 22:35 [@FiFouille]: on ouvre fichier.txt dans le dossier courant 22:35 [@FiFouille]: et on essaie d'écrire l'heure dans ce fichier 22:35 [@FiFouille]: s'il y a un problÚme, que ça soit à l'ouverture ou l'écriture, une exception est lancée 22:35 [@FiFouille]: alors comment ça se passe 22:35 [@FiFouille]: on spécifie qu'on veut intercepter les exceptions sur un bout de code donné 22:35 [@FiFouille]: begin 22:36 [@FiFouille]: le bout de code qui pourrait poser problÚme 22:36 [@FiFouille]: rescue 22:36 [@FiFouille]: (avec rescue on 'attrape' les exceptions qui pourraient apparaître) 22:37 [@FiFouille]: on oublie (temporairement) la ligne commençant par raise, on revient la dessus plus tard 22:37 [@FiFouille]: alors, sur la sortie d'erreur on affiche "essai avec un fichier temporaire" 22:37 [@FiFouille]: et puis on change le nom de fichier qu'on va essayer d'ouvrir 22:37 [@FiFouille]: on essaie plus d'ouvrir fichier.txt dans le dossier courant, mais plutot dans /tmp/ 22:37 [@FiFouille]: on on réessaie, retry 22:38 [@FiFouille]: on va dire qu'il y a encore un problÚme 22:38 [@FiFouille]: /tmp/fichier.txt existe déjà et on a pas les droits dessus 22:38 [@FiFouille]: re exception 22:38 [@FiFouille]: là, si filename = tmpfilename (on est déjà au deuxiÚme essai avec /tmp/fichier.txt) 22:38 [@FiFouille]: si c'est le deuxiÚme on renvoie une autre exception ... ici, personne pour la récupérer 22:38 [@FiFouille]: donc elle va remonter jusqu'au programme principal et l'arreter en affichant "erreur" 22:39 [@FiFouille]: (dans une fonction définie par nos soins on auraient trÚs bien pu se dire que cette exception pourraient etre récupéré autre part, un peu plus haud et faire encore un autre traitement) 22:39 [@FiFouille]: enfin, une derniÚre directive 22:39 [@FiFouille]: ensure 22:39 [@FiFouille]: on s'assure, que, quel que soit le déroulement (problÚme, pas de problÚme) on ferme bien le fichier si celui est ouvert 22:40 [@FiFouille]: d'où le fd.close if fd 22:40 [@FiFouille]: et enfin ... on termine ... end 22:40 [@FiFouille]: quuuueeeeeeesssssstttttttiiiiioonnnnnnnssssss ? ;) 22:40 [ Gexeio]: l'exception serait donc lancée par fd.puts ? 22:40 [@FiFouille]: Gexeio: ou par open 22:40 [ Gexeio]: ok 22:41 [@FiFouille]: ici on récupÚre toutes les exceptions possibles, quel que soit leur type 22:41 [@FiFouille]: il est possible de ne récupérer que certaines exceptions ou bien avoir des traitements différents en fonction des exceptions 22:41 [ animimotus]: fd.close if fd <------- c'est toujours vrai, non ? 22:41 [@FiFouille]: rescue RuntimeError par exemple, ou rescue DivideByZero 22:41 [ animimotus]: fd.close tout court ? 22:41 [@FiFouille]: (bon, c'est pas les noms réels, je m'en souviens pas par coeur, mais l'idée y est ;) ) 22:41 [ reber]: t'aurais un exemple comment se passent les exceptions "en cascade" ? 22:42 [ Gexeio]: animimotus: ben non si c'est open qui génÚre l'exception 22:42 [@FiFouille]: animimotus: par forcément, fd peut ne pas être initialisé, si open n'a jamais réussi à l'ouvrir ;) 22:43 [ animimotus]: tester si le fichier existe avant de chercher à l'ouvrir ? 22:43 [@FiFouille]: reber: comme dans le cas présent, c'est à toi de voir si tu les laisses remonter au niveau supérieur ou bien si tu les traîtes directement 22:45 [ Gexeio]: juste, comment faire des commentaires multilignes ? 22:46 ::: jnjb is now known as extermine 22:46 [ Onc_hansi]: desolé ,je vous quitte trop crevé ,bonne nuit a tous ,(relirai les log pour la suite ;) ) ,merci . 22:47 ::: extermine is now known as jnjb 22:47 [@FiFouille]: # commentaire 22:47 [@FiFouille]: # multiligne 22:47 [@FiFouille]: vim est ton ami ;) 22:47 [ Gexeio]: hum donc pas de /* */ ? 22:48 [@FiFouille]: reber: http://pastebin.ca/395235 22:48 [@FiFouille]: Gexeio: non, il prendrait ça pour une expression réguliÚre ;) 22:48 [@FiFouille]: s/réguliÚre/rationnelle/ 22:48 [ Gexeio]: ok 22:48 [@FiFouille]: bion, des questions sur les exceptions ? 22:48 [ Krunch]: comment faire des commentaire dans une ligne ? 22:49 [@FiFouille]: ce que je vais faire, c'est vite donner le coup de grace 22:49 [@FiFouille]: et pis je suis dispo 'pour la nuit' :p 22:49 [@FiFouille]: Krunch: en fin de ligne, sinon tu peux pas 22:49 [@FiFouille]: *slide69* 22:49 [@FiFouille]: Ruby c'est bien 22:49 [@FiFouille]: *slide70* 22:50 [@FiFouille]: de la doc 22:50 [@FiFouille]: je vous écoute :D 22:50 [@FiFouille]: vous pouvez lancer les tomates ou me huer maintenant, c'est fini 22:50 [ THEDamocles]: *applaudi* 22:50 [ THEDamocles]: BRAVO 22:50 [ Gexeio]: c'est déjà fini ? 22:50 [ animimotus]: \o/ 22:51 [ Gexeio]: *clap* *clap* 22:51 [@FiFouille]: Gexeio: maintenant c'est l'after dans l'arriÚre salle, biÚre, alcool et jeunes filles délurées 22:51 [ Gexeio]: ou mieu : "clap" * 2 22:51 [@FiFouille]: haha 22:51 [ Krunch]: on a plus de tomates :/ 22:51 [ THEDamocles]: lol 22:51 [@FiFouille]: Krunch: il reste des kiwis 22:51 [ Krunch]: ha mais ya de la bolognèse 22:51 [ Krunch]: ho oui les kiwis 22:51 [ Krunch]: ils serviront comme ça 22:52 [ Krunch]: et c'est où cet after ? 22:52 [@FiFouille]: bon, c'est parti pour flooder le chan toute la nuit avec du ruby 22:52 [@FiFouille]: je suis plus en "service", je vais me chercher une biÚre 22:52 [ Krunch]: use Perl; 22:52 [@FiFouille]: Krunch: t'as déjà trop pris toi, privé pour ce soir 22:52 [ animimotus]: "chérie, je sais faire du ruby \o/ !" | "Tu veux pas plutÃŽt m'en offrir un ?" | "Faut voir avec FiFouille, en page 70. Fifouille on rails \o/" 22:52 [ Krunch]: FiFouille: mais pas du tout 22:53 [ Krunch]: ruby on rails 22:53 [ Krunch]: de coke 22:54 [@FiFouille]: ah oui, pour (un des) aspects de l'orienté objet marrant de ruby 22:54 [@FiFouille]: y'a le slide 56 22:54 [@FiFouille]: avec la création d'une méthode each_times pour la class Hash 22:54 [@FiFouille]: ensuite que dire ... 22:55 [@FiFouille]: c'est de l'OO classique, héritage simple (pas multiple) 22:55 [@FiFouille]: mais on peut "l'émuler" en utilisant des modules 22:55 [@FiFouille]: (les mixins comme il les appellent) 22:56 [@FiFouille]: alors je vais faire ma larve et je vous renvoie à ça 22:56 [@FiFouille]: http://rubycentral.com/book/classes.html 22:56 [@FiFouille]: y'a plein de jolis exemples 22:57 [@FiFouille]: tout le monde est au lit \o\ \o/ /o/ 22:57 [@FiFouille] gapz: t'es encore en vie ? :p 22:58 [ mr_pouit]: FiFouille: t'avais sauvegardé l'ancien topic qq part ? :D 22:59 [ THEDamocles]: Merci beaucoup FiFouille, vais dormir @+ tout le monde... 22:59 ::: THEDamocles [n=thedamoc@kellyhouse.force9.co.uk] has quit ["Leaving."] 22:59 [@FiFouille]: mr_pouit: haha, non :D 22:59 [@FiFouille]: quand je vous dis que de me filer l'op c'est de l'inconscience ;) 22:59 [ mr_pouit]: xD 23:00 [ mr_pouit]: skateinmars: racoon97: l'un de vous a l'ancien topic ? sinon, va falloir être imaginatif ;p 23:00 [ Krunch]: /topic ruby on rails de coke 23:01 ::: mode/#ubuntu-fr-classroom [+o mr_pouit] by ChanServ 23:01 ::: mr_pouit changed the topic of #ubuntu-fr-classroom to: Canal francophone d'apprentissage et de développement pour Ubuntu | http://doc.ubuntu-fr.org/projets/ecole | Vos questions et problÚmes dans l'utilisation d'ubuntu : #ubuntu-fr | Demander un paquet/Chercher un programme à packager : http://forum.ubuntu-fr.org/viewtopic.php?pid=575261 | Log du cours sur le shell : http://www.sceen.net/~gapz/shell-2007-01-27 | Mercredi 14 mars à 20H (19H UTC) présentation de Ruby 23:01 [@mr_pouit]: FiFouille: y a un endroit avec les logs temporaires ? 23:01 [@mr_pouit]: (en attendant la page wiki) 23:01 [@FiFouille] je crois que gapz faisait tourner un truc 23:02 [ animimotus] Log du cours sur le shell : http://www.sceen.net/~gapz/shell-2007-01-27 | Mercredi 14 mars à 20H (19H UTC) présentation de Ruby ». 23:02 [ animimotus]: tapez /topic :D 23:02 [ animimotus]: ^^ 23:02 [ Gexeio] nan ils sont là : http://www.sceen.net/~gapz/ruby-2007-03-14 23:02 [@FiFouille] http://www.sceen.net/~gapz/ruby-2007-03-14 23:03 ::: mode/#ubuntu-fr-classroom [-o FiFouille] by FiFouille 23:03 [@mr_pouit]: on a tous trouvé en même temps xD 23:03 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has quit [] 23:03 ::: syldeb35 [n=syldeb35@ARennes-257-1-43-236.w81-53.abo.wanadoo.fr] has quit [Connection timed out] 23:03 [ FiFouille]: et la prochaine fois ... un cours sur vim ... encore plus bizarre \o/ 23:03 ::: mr_pouit changed the topic of #ubuntu-fr-classroom to: Canal francophone d'apprentissage et de développement pour Ubuntu | http://doc.ubuntu-fr.org/projets/ecole | Vos questions et problÚmes dans l'utilisation d'ubuntu : #ubuntu-fr | Demander un paquet/Chercher un programme à packager : http://forum.ubuntu-fr.org/viewtopic.php?pid=575261 | Log de la présentation de Ruby : http://www.sceen.net/~gapz/ruby-2007-03-14 23:04 [ FiFouille]: oui donc, les slides sont sous GFDL, dispo là : http://fifi.be/vrac/slides/ruby-intro/ 23:04 ::: mode/#ubuntu-fr-classroom [-o mr_pouit] by mr_pouit 23:04 [ animimotus]: merci FiFouille 23:04 [ Krunch]: gfdl isn't free ! 23:04 [ FiFouille]: pouvez en faire ce que vous voulez modulo GFDL, oubliez juste pas de faire un peu de pub pour fsugar.be :p 23:05 [ animimotus]: fsugar.be çaybien \o/ 23:05 [ mr_pouit]: Krunch: s/free/dfsg-free/ ;p 23:05 ::: syldeb35 [n=syldeb35@ARennes-257-1-107-252.w86-210.abo.wanadoo.fr] has joined #ubuntu-fr-classroom 23:05 [ FiFouille]: oui et donc je vous (re)présente mon cokoteur (saoul) -> Krunch 23:06 [ Krunch]: je suis même plus saoul 23:06 [ Krunch]: et même plus boueux non plus d'ailleurs 23:06 [ FiFouille]: et le contrat a pas changé, il faut lui demander une fois par jour une présentation sur perl 23:06 [ FiFouille]: par jabber, mail ou irc, vous faites comme vous voulez 23:06 [ Krunch]: excellente idée 23:07 [ Krunch]: ma hitlist commençait à s'amenuiser 23:07 ::: reber [n=reber@cl-158.dub-01.ie.sixxs.net] has quit [Operation timed out] 23:08 [ Gexeio]: bon je vais me coucher, bonne nuit à tous ! 23:08 [ FiFouille]: bon, repassez de temps en temps, faut que je fasse encore qques modifs aux slides 23:08 ::: Gexeio [n=remi@133.180.102-84.rev.gaoland.net] has quit ["ZZzzz..."] 23:08 [ FiFouille]: problÚme de quotes et aussi parlez des symboles qque part :p 23:09 [ mr_pouit] gapz: faut arrêter de logguer maintenant, hein ^^ 23:09 [ FiFouille]: haha, le gars qui est en train de dormir 23:09 [ FiFouille]: ################################# END LOGS FIN THE END 23:09 [ animimotus]: FiFouille: pour les slides, t'as idée pour visionner le pdf sous kpdf mais pas en plein écran ? X) 23:10 [ FiFouille]: animimotus: euh non ... chez moi je l'ai sur la moitié de l'écran et c'est lisible, kpdf peut pas faire en mode fenêtré ? 23:10 ::: The_Marauder [n=The_Mara@cam44-1-82-67-123-151.fbx.proxad.net] has joined #ubuntu-fr-classroom 23:10 [ animimotus]: si, mais ça fait plus qu'un pdf, sans présentation donc, donc sans slide :) 23:11 [ Krunch]: ha tiens faudrait que je vois comment mettre en plein écran avec xpdf 23:11 [ Krunch]: (ça pourrait me servir genre pour demain) 23:11 [ animimotus]: l'erreur de c/c provient de kpdf je crois bien :\ 23:12 [ FiFouille]: Krunch: -fullscreen 23:12 [ animimotus]: fsugar.be bookmarqued 23:13 [ Krunch]: FiFouille: ya tjrs la toolbar 23:14 [ FiFouille]: Krunch: ben alors t'es refait, c'est un bug sous sarge je crois 23:14 [ FiFouille]: Krunch: y'a le meme problÚme sous obsd remarque 23:14 ::: davro-desktop [n=davro@AFontenayssB-152-1-37-215.w83-114.abo.wanadoo.fr] has quit ["Quitte"] 23:14 [ animimotus]: (en fait le slide en html çaymieux :) 23:15 [ FiFouille]: animimotus: t'en fais ce que tu veux, t'as le .tex, tu peux même en faire un odt si tu veux avec l'import :p 23:15 ::: davromaniak [n=cyril@AFontenayssB-152-1-37-215.w83-114.abo.wanadoo.fr] has quit ["for ($i=0; $i<2; $i++) { $do=$do."do";} echo $do"] 23:15 [ animimotus]: (je refais le slide ruby en html :p) 23:15 [ FiFouille]: oui, si vous faites des modifs, hésitez pas à les faire remonter que je paufine la chose ;) 23:15 * Krunch envisage magicpoint 23:17 [ animimotus]: les " et les ' c'est pareil ? 23:17 [ FiFouille]: animimotus: comme avec le shell 23:18 [ FiFouille]: "" interpole s'il y a besoin, '' non 23:18 [ FiFouille]: '#{var}' ça fera #{var} et pas l'affichage de var ;) 23:18 [ animimotus]: j'me disais 23:18 ::: dranju [n=anniedav@cag06-2-82-237-69-90.fbx.proxad.net] has joined #ubuntu-fr-classroom 23:18 ::: Lutin_ [n=Lutin@stang.ens.insa-rennes.fr] has joined #ubuntu-fr-classroom 23:19 [ FiFouille]: et comme la derniÚre fois, j'ai pris 3 heures \o/ --- Log closed mer mar 14 23:20:44 2007