Listing du fichier tp6.php
00001<?php
00002 # # (gH) -_- tp6.php ; TimeStamp (unix) : 27 Novembre 2020 vers 09:48
00003 error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00004 header('Content-Type "text/html; charset=iso-8859-1"') ;
00005 ini_set( 'default_charset', 'ISO-8859-1' );
00006 include("decra-inc.php") ;
00007
00008
00009 $R = ghRouge("R") ;
00010 $XML = ghRouge("XML") ;
00011 $Awk = ghRouge("AWK") ;
00012 $Php = ghVert("PHP") ;
00013 $ruby = ghRouge("Ruby") ;
00014 $ror = ghRouge("ROR") ;
00015
00016 $numSerie = 6 ;
00017 debutTP($numSerie,"MVC en $ruby via ROR") ;
00018 ghAtAngers() ;
00019
00020 ## -------------------------------------------------------------------------------------------
00021
00022 sdl(3) ; echo cmt(' pour afficher toutes les solutions : tp1.php?solutions=1') ; sdl(3) ;
00023
00024 ## -------------------------------------------------------------------------------------------
00025
00026 p("texte") ;
00027 echo "" ;
00028 finp() ;
00029 debutSection() ;
00030
00031 $tableauDesRubriques = array() ;
00032 $idr = 0 ;
00033 $idr++; $tableauDesRubriques[$idr] = "Découverte de $ruby" ;
00034 $idr++; $tableauDesRubriques[$idr] = "Installation et test de ROR (première partie)" ;
00035 $idr++; $tableauDesRubriques[$idr] = "Chapitre un, une première mini-application" ;
00036 $idr++; $tableauDesRubriques[$idr] = "Chapitre deux, une vraie application" ;
00037 $idr++; $tableauDesRubriques[$idr] = "Tout le reste du turoriel" ;
00038 $idr++; $tableauDesRubriques[$idr] = "Ajout de fonctionalités" ;
00039 $tdmCRLM = new tdm($tableauDesRubriques) ;
00040 $tdmCRLM->titre() ;
00041 $tdmCRLM->menu("oui","oui","nou") ;
00042
00043 direAfficherSolutionsTP($numSerie) ;
00044
00045 finSection() ;
00046
00047 $numExo = 0 ;
00048
00049 ## -------------------------------------------------------------------------------------------
00050
00051 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Découverte de ruby
00052
00053 ## -------------------------------------------------------------------------------------------
00054
00055 blockquote() ; # tp
00056
00057 blockquote() ; # énoncé
00058
00059 p("texte") ;
00060 echo " Commencer par lire le " ;
00061 echo href("../tuteurs/tutruby.php","tuteur $ruby") ;
00062 echo " puis répondre aux questions suivantes :" ;
00063 finp() ;
00064
00065 ol() ;
00066
00067 debutli() ; p() ;
00068 echo " Quelle version de $ruby est installée dans les salles du département informatique " ;
00069 echo " de la faculté des sciences d'Angers ?" ;
00070 finp() ; finli() ;
00071
00072 debutli() ; p() ;
00073 echo " Est-ce que le premier exemple standard de notre tuteur, ".href("bonjour.rb").", " ;
00074 echo " fonctionne tel quel ?" ;
00075 echo " A-t-on besoin de la première ligne ".b("require \"date\"")." ?" ;
00076 finp() ; finli() ;
00077
00078 debutli() ; p() ;
00079 echo " Et le deuxième exemple standard, versions ".href("tdm.rb")." et " ;
00080 echo " ".href("tdm2.rb")." ?" ;
00081 echo " Quelle version est la plus fidèle à l'esprit de $ruby ?" ;
00082 finp() ; finli() ;
00083
00084 debutli() ; p() ;
00085 echo " Est-ce que les exemples complémentaires nommés respectivement " ;
00086 echo href("sql.rb").", " ;
00087 echo href("ndjpm.rb")." et " ;
00088 echo href("demo_xml.rb")." " ;
00089 echo " fonctionnent tels quels ?" ;
00090 finp() ; finli() ;
00091
00092 finol() ;
00093
00094 p("texte") ;
00095 echo " Est-ce qu'il existe des ".ghVert("Jupyter Notebooks")." pour $ruby ?" ;
00096 finp() ;
00097
00098 finblockquote() ; # énoncé
00099
00100 solutionTP($numExo,$numSerie) ;
00101
00102 p("texte") ;
00103 echo "Voici les réponses aux questions :" ;
00104 finp() ;
00105
00106 ol() ;
00107
00108 debutli() ; p("texte") ;
00109 echo " Comme le montre la commande ".b("ruby --version").", c'est la version " ;
00110 echo ghBleu("2.3.1p112") ;
00111 echo " qui est installée dans les salles informatiques du département informatique " ;
00112 echo " de la faculté des sciences d'Angers." ;
00113 finp() ; finli() ;
00114
00115 debutli() ; p("texte") ;
00116 echo " Oui, l'exemple standard ".href("bonjour.rb")." fonctionne tel quel, même sans" ;
00117 echo " la première ligne ".b("require \"date\"")."." ;
00118 finp() ; finli() ;
00119
00120 debutli() ; p("texte") ;
00121 echo " Les deux versions de la table de multiplication fonctionnent tels quels. " ;
00122 echo " La deuxième version, qui définit une méthode ".b("entier?")." dans la classe ".b("String") ;
00123 echo " correspond sans doute plus à l'esprit de $ruby." ;
00124 finp() ; finli() ;
00125
00126 debutli() ;
00127
00128 p("texte") ;
00129 echo em("A priori").", seul l'exemple " ;
00130 echo href("ndjpm.rb")." fonctionne directement. " ;
00131 echo " Les exemples " ;
00132 echo href("sql.rb")." et " ;
00133 echo href("demo_xml.rb")." " ;
00134 echo " requièrent une installation. " ;
00135 finp() ;
00136
00137 pre_fichier("xmps-ruby.txt","cadre") ;
00138
00139 finli() ;
00140
00141 finol() ;
00142
00143 p("texte") ;
00144 echo " Oui, il existe des ".ghVert("Jupyter Notebooks")." pour $ruby, comme l'indique la page " ;
00145 echo href("https://github.com/jupyter/jupyter/wiki/Jupyter-kernels","jupyter-kernels") ;
00146 echo " mais l'installation n'est pas des plus aisées pour un environnement universitaire et " ;
00147 echo " aucun ".b("docker")." ne semble pour l'instant ne semble être disponible..." ;
00148 finp() ;
00149
00150 finsolution() ; # contient un blockquote
00151
00152 finblockquote() ; # tp
00153
00154 ## -------------------------------------------------------------------------------------------
00155
00156 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Installation et test de ROR (première partie)
00157
00158 ## -------------------------------------------------------------------------------------------
00159
00160 blockquote() ; # tp
00161
00162 blockquote() ; # énoncé
00163
00164 $sous = 0 ;
00165
00166 $sous++ ; h3("Partie 2.".$sous) ;
00167
00168 p("texte") ;
00169 echo " Quelle version de ".b("gem")." est installée ?" ;
00170 echo " Est-ce que la commande ".b("gem install rails --version 3.0.5")." s'exécute correctement ?" ;
00171 echo " Pourquoi ?" ;
00172 echo " Comment corriger ce problème ?" ;
00173 echo " Vérifier ensuite que le code suivant produit une version minimale d'une application $ruby :" ;
00174 finp() ;
00175
00176 pre_fichier("ror-minimal.txt","cadrebleu") ;
00177
00178 $sous++ ; h3("Partie 2.".$sous) ;
00179
00180 p("texte") ;
00181 echo " Si ce n'est pas le cas, " ;
00182 echo " est-ce que la commande ".b("gem install rails --version 5.2.1")." s'exécute correctement ?" ;
00183 echo " Vérifier ensuite que le code suivant produit une version minimale d'une application $ruby :" ;
00184 finp() ;
00185
00186 pre_fichier("ror-minimal.txt","cadrebleu") ;
00187
00188 p("texte") ;
00189 echo "Voici ce qu'on devrait obtenir :" ;
00190 finp() ;
00191
00192 p() ;
00193 nbsp(12) ;
00194 $img = "ror1.png" ;
00195 echo href($img,img($img,"",600)) ;
00196 finp() ;
00197
00198 $sous++ ; h3("Partie 2.".$sous) ;
00199
00200 p("texte") ;
00201 echo " Si cela ne fonctionne toujours pas, lancer la commande " ;
00202 echo b("_ruby_on_rails")." qui, dans les salles du département informatique de l'université d'Angers " ;
00203 echo " lance un ".b("docker")." avec ruby et rails préconfigurés." ;
00204 finp() ;
00205
00206 p("texte") ;
00207 echo "Quelle est alors la version de ".b("ruby").", de ".b("gem")." et de ".b("rails")." ?" ;
00208 finp() ;
00209
00210 p("texte") ;
00211 echo "Exécuter les commandes suivantes et vérifier que le serveur est disponible à l'adresse ".href("http://localhost:3000")."." ;
00212 finp() ;
00213
00214 pre_fichier("ror-cmd0.txt","cadrebleu") ;
00215
00216 $sous++ ; h3("Partie 2.".$sous) ;
00217
00218 p("texte") ;
00219 echo "Quels sont les répertoires et les fichiers créés (en identifiez-vous certains ?) si on exécute " ;
00220 finp() ;
00221
00222 pre_fichier("ror-cmd1.txt","cadrebleu") ;
00223
00224 p("texte") ;
00225 echo "Quel est le message d'avertissement si on exécute ensuite " ;
00226 finp() ;
00227
00228 pre_fichier("ror-cmd2.txt","cadrebleu") ;
00229
00230 p("texte") ;
00231 echo "Exécuter alors " ;
00232 finp() ;
00233
00234 pre_fichier("ror-cmd3.txt","cadrebleu") ;
00235
00236 p("texte") ;
00237 echo "Quels fichiers ont été alors créés (à mettre dans ".b("ror-lst2.txt").") ?" ;
00238 finp() ;
00239
00240 p("texte") ;
00241 echo "Exécuter maintenant " ;
00242 finp() ;
00243
00244 pre_fichier("ror-cmd4.txt","cadrebleu") ;
00245
00246 p("texte") ;
00247 echo "Qu'affiche la console si on ouvre la page index du serveur ?" ;
00248 finp() ;
00249
00250 p("texte") ;
00251 echo "Que contient le fichier ".b("Gemfile")." et quels ".b(em("groupes"))." sont définis dans ce fichier ?" ;
00252 finp() ;
00253
00254 finblockquote() ; # énoncé
00255
00256 solutionTP($numExo,$numSerie) ; # contient un blockquote
00257
00258 $sous = 0 ;
00259
00260 $sous++ ; h3("Partie 2.".$sous) ;
00261
00262 p("texte") ;
00263 echo " La commande ".b("gem --version")." indique que la version ".b("2.5.2.1")." est installée." ;
00264 finp() ;
00265
00266 p("texte") ;
00267 echo " La commande ".b("gem install rails --version 3.0.5")." ne s'exécute pas correctement " ;
00268 echo " parce qu'on essaie d'écrire dans des répertoires système sans être ".b("root").". " ;
00269 echo " En principe, cette commande devrait être précédée de ".b("sudo").". " ;
00270 echo " Comme vous n'avez pas les droits d'administration " ;
00271 echo " dans les salles informatiques du département informatique " ;
00272 echo " de la faculté des sciences d'Angers, il faudrait suivre la procédure indiquée " ;
00273 echo href("https://techgeek4shfl.blogspot.com/2015/10/install-ror-easy-way-without-sudo.html","ici").". " ;
00274 echo " Malheureusement, toujours à cause des droits d'accès, cela ne fonctionne pas dans nos salles informatiques. " ;
00275 finp() ;
00276
00277 $sous++ ; h3("Partie 2.".$sous) ;
00278
00279 p("texte") ;
00280 echo "Cela ne fonctionne pas non plus avec ".b("gem install rails --version 3.0.5")."." ;
00281 finp() ;
00282
00283 $sous++ ; h3("Partie 2.".$sous) ;
00284
00285 p("texte") ;
00286 echo "Une fois le dockeur lancé, les commandes ".b("ruby --version").", ".b("gem --version")." et ".b("rails --version") ;
00287 echo " affichent les numéros de version suivantes :" ;
00288 finp() ;
00289
00290 pre_fichier("ror-version.txt","cadrejaune") ;
00291
00292 p("texte") ;
00293 echo "A la suite du ".b("bundle install")." on dispose de toute une arborescence (44 directories, 61 files) :" ;
00294 finp() ;
00295
00296 pre_fichier("ror-tree1.txt","cadrejaune") ;
00297
00298 p() ;
00299 echo "La liste des fichiers, fournie ci-dessous, une fois triées, est dans ".href("ror-lst1.txt").". " ;
00300 finp() ;
00301
00302 textarea_fichier("rorlst1","cadrebleu",10,70,"r1","ror-lst1.txt") ;
00303
00304 p() ;
00305 echo "Si on exécute ".b("rake db:setup").", Rails se plaint que la base n'est pas créée :" ;
00306 finp() ;
00307
00308 pre_fichier("ror-rake1.txt","cadrejaune") ;
00309
00310 p() ;
00311 echo "Avec les deux commandes ".b("rake")." suivantes, tout est OK :" ;
00312 finp() ;
00313
00314 pre_fichier("ror-rake2.txt","cadrejaune") ;
00315
00316 p() ;
00317 echo "A la suite du lancement du serveur via ".b("rails server")." de nouveaux fichiers sont créés, notamment dans le répertoire ".b("tmp/")." :" ;
00318 finp() ;
00319
00320 textarea_fichier("rorlst2","cadrebleu",10,70,"r2","ror-lst2.txt") ;
00321
00322 p() ;
00323 echo "Il est sans doute prudent de passer ici par ".b("diff")." pour visualiser les différences :" ;
00324 finp() ;
00325
00326 textarea_fichier("rorlst3","cadre",10,70,"r3","ror-diff.txt") ;
00327
00328 p("texte") ;
00329 echo " La console affiche alors les requêtes HTPP et la réponse du serveur :" ;
00330 finp() ;
00331
00332 pre_fichier("ror-serveur.txt","cadrejaune") ;
00333 #pre_fichier("rails-console.txt","cadrejaune") ;
00334
00335 p("texte") ;
00336 echo " Le fichier ".href("Gemfile.txt","Gemfile")." contient les noms de librairies utilisées :" ;
00337 finp() ;
00338
00339 pre_fichier("Gemfile.txt","cadrebleu") ;
00340
00341 p("texte") ;
00342 echo " Les groupes implémentés sont ".b("development")." et ".b("test")." par défaut." ;
00343 finp() ;
00344
00345 finsolution() ; # contient un blockquote
00346
00347 finblockquote() ; # tp
00348
00349 ## -------------------------------------------------------------------------------------------
00350
00351 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Chapitre un, une première mini-application
00352
00353 ## -------------------------------------------------------------------------------------------
00354
00355 blockquote() ; # tp
00356
00357 blockquote() ; # énoncé
00358
00359 p("texte") ;
00360 echo "On ne va pas suivre ici la " ;
00361 echo href("http://french.railstutorial.org/chapters/beginning","version française") ;
00362 echo " du tutoriel qui n'est pas à jour (mais vous pouvez vous en servir lorsque vous ne comprenez pas " ;
00363 echo " les termes anglais) mais plutôt la " ;
00364 echo href("https://www.railstutorial.org/book","version anglaise")." du tutoriel." ;
00365 finp() ;
00366
00367 p("texte") ;
00368 echo "Lire le chapitre 1 jusqu'à la fin de la section 1.3 (aucune manipulation pour l'instant)." ;
00369 finp() ;
00370
00371 p("texte") ;
00372 echo b("Attention :")." pour ce qui suit, il ne faut pas créer le répertoire ".b("~/environment")." comme indiqué dans le tuteur. " ;
00373 echo " Vous pouvez vous contenter du répertoire ".b("environment")." dans le répertoire ".b("Mes_projets_ruby")." que vous retrouvez " ;
00374 echo " aussi dans votre ".em("home directory")." suite au lancement du ".b("docker").". " ;
00375 echo " De même, vous ne devez pas exécuter ".b("rails server")." comme indiqué dans le tutorial, mais " ;
00376 echo b("rails server -p 3000 -b 0.0.0.0")." sous peine de ne pouvoir accéder au serveur." ;
00377 finp() ;
00378
00379 p("texte") ;
00380 echo " Continuer alors la lecture du chapitre 1, exécuter les commandes indiquées jusqu'à la fin de la section 1.3.2 " ;
00381 echo " pour créer l'application ".b("hello_app") ;
00382 echo " et vérifier que la commande " ;
00383 echo b("rails server -p 3000 -b 0.0.0.0")." affiche bien ce qu'on attend." ;
00384 finp() ;
00385
00386 p("texte") ;
00387 echo "Voici ce qu'on doit obtenir :" ;
00388 finp() ;
00389
00390 p() ;
00391 nbsp(12) ;
00392 $img = "ror1.png" ;
00393 echo href($img,img($img,"",600)) ;
00394 finp() ;
00395
00396 p("texte") ;
00397 echo " Effectuer les manipulations de la section 1.3.3 " ;
00398 echo " (fichiers ".b("application_controller.rb")." et ".b("routes.rb").") " ;
00399 echo " pour que la commande " ;
00400 echo b("rails server -p 3000 -b 0.0.0.0")." affiche désormais ".b("hello , world! et bonjour à tous !!").". " ;
00401 finp() ;
00402
00403 p("texte") ;
00404 echo "Voici ce qu'on doit obtenir :" ;
00405 finp() ;
00406
00407 p() ;
00408 nbsp(12) ;
00409 $img = "ror-bonjour.png" ;
00410 echo href($img,img($img,"",600)) ;
00411 finp() ;
00412
00413 p("texte") ;
00414 echo " Lire ensuite la fin du chapitre 1 (section 1.4 et suivantes) mais sans réaliser les manipulations ".b("git").", ".b("bitbucket")." ou ".b("heroku").". " ;
00415 echo " Par contre on essaiera de comprendre ce qu'elles représentent." ;
00416 finp() ;
00417
00418 finblockquote() ; # énoncé
00419
00420 solutionTP($numExo,$numSerie) ; # contient un blockquote
00421
00422 p("texte") ;
00423 echo "Il n'y a aucune question ici !" ;
00424 finp() ;
00425
00426 finsolution() ; # contient un blockquote
00427
00428 finblockquote() ; # tp
00429
00430 ## -------------------------------------------------------------------------------------------
00431
00432 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Chapitre deux, une vraie application
00433
00434 ## -------------------------------------------------------------------------------------------
00435
00436 blockquote() ; # tp
00437
00438 blockquote() ; # énoncé
00439
00440 p("texte") ;
00441 echo " Lire le chapitre 2 et réaliser toutes les manipulations proposées " ;
00442 echo ghRouge("sauf la modification du fichier ".em("Gemfile")) ;
00443 echo " et toujours sans les parties ".b("git").", ".b("bitbucket")." ou ".b("heroku")." jusqu'à la section 2.3.1 incluse. " ;
00444 echo " On ne saisira pas non plus le numéro de version ".b("_5.1.6_")." dans les commandes ".b("rails").". " ;
00445 echo " Après les commandes ".b("rails generate scaffold...")." et ".b("rails db:migrate").", ";
00446 echo " on créera quelques utilisateurs et des micro-messages, comme ci-dessous :" ;
00447 finp() ;
00448
00449 blockquote() ; # tableau
00450 table(1,15,"collapse") ;
00451 for ($i=2;$i<=7;$i++) {
00452 if (($i==2) | ($i==5)) { tr() ; }
00453 td() ;
00454 p() ;
00455 nbsp(12) ;
00456 $img = "ror".$i.".png" ;
00457 echo href($img,img($img,"",200)) ;
00458 finp() ;
00459 fintd() ;
00460 if (($i==4) | ($i==7)) { fintr() ; }
00461 } ; # fin pour i
00462 fintable() ;
00463 finblockquote() ; # tableau
00464
00465
00466 p("texte") ;
00467 echo "Vérifier ensuite que vous arrivez à imposer une longueur maximale de micropost de 140 caractères " ;
00468 echo " comme indiqué dans la section 2.3.2. " ;
00469 echo " Lire (sans manipulations) la section 2.3.5 puis essayer de trouver où est la base de données utilisées. " ;
00470 echo " Quel est son schéma (iste et structure des tables) ?" ;
00471 finp() ;
00472
00473 finblockquote() ; # énoncé
00474
00475 solutionTP($numExo,$numSerie) ; # contient un blockquote
00476
00477 p("texte") ;
00478 echo " La base de données est accessible via le chemin ".b("db/development.sqlite3").". " ;
00479 echo " C'est du sqlite, donc ".b(".schema")." affiche la structure de la base et des tables..." ;
00480 finp() ;
00481
00482 finsolution() ; # contient un blockquote
00483
00484 finblockquote() ; # tp
00485
00486 ## -------------------------------------------------------------------------------------------
00487
00488 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Chapitre deux, une vraie application
00489
00490 ## -------------------------------------------------------------------------------------------
00491
00492 blockquote() ; # tp
00493
00494 blockquote() ; # énoncé
00495
00496 p("texte") ;
00497 echo " Continuer les chapitres et essayer de réaliser un maximum de manipulations. " ;
00498 echo " Vous pouvez essayer de faire un résumé des commandes et des gemmes utilisées." ;
00499 finp() ;
00500
00501 finblockquote() ; # énoncé
00502
00503 solutionTP($numExo,$numSerie) ; # contient un blockquote
00504
00505 p("texte") ;
00506 echo "Voici la plupart des commandes et des gemmes utilisées :" ;
00507 finp() ;
00508
00509 pre_fichier("ror-cmds.txt","cadre") ;
00510
00511 finsolution() ; # contient un blockquote
00512
00513 finblockquote() ; # tp
00514
00515 ## -------------------------------------------------------------------------------------------
00516
00517 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Ajout de fonctionnalités
00518
00519 ## -------------------------------------------------------------------------------------------
00520
00521 blockquote() ; # tp
00522
00523 blockquote() ; # énoncé
00524
00525 p("texte") ;
00526 echo " Compléter le site avec la saisie d'une date de naissance, le calcul et l'affichage de l'age des personnes, " ;
00527 echo " la saisie d'un nombre moyen de films vus par semaine (au cinéma, à la télé, sur ordinateur ou tablette...), " ;
00528 echo " l'affichage de l'indication ".b("j'aimerais lire plus de livres")." en mode oui/non et " ;
00529 echo " le dépot d'un ".b("CV")." au format PDF avec la consultation possible par les autres utilisateurs. " ;
00530 echo " Au passage, vous en profiterez pour traduire tous les affichages en français, histoire de prouver que vous savez " ;
00531 echo " d'où vient chaque page. " ;
00532 finp() ;
00533
00534 p("texte") ;
00535 echo "En ".b("option").", implémentez aussi le service des pages en XHTML strict plutot qu'en HTML 5 " ;
00536 echo " (une validation sans erreur ni avertissement avec " ;
00537 echo href("http://users.skynet.be/mgueury/mozilla/download_090.html","HTML Validator") ;
00538 echo " est conseillée), avec l'icone de validation associée, " ;
00539 echo " le pourcentage des gens qui aimeraient et qui n'aimeraient pas lire plus de livres, le masquage et l'affichage en Javascript de " ;
00540 echo b("j'aimerais lire plus de livres")." pour ceux qui en lisent déjà suffisamment, " ;
00541 echo " une liste bien présentée disponible en PDF (création à la volée) de tous les utilisateurs, " ;
00542 echo " un graphique SVG qui fournit un box-plot des nombres de films par semaine, " ;
00543 echo " un graphique PNG de l'histogramme des fréquences des lecteurs et des non lecteurs..." ;
00544 finp() ;
00545
00546 finblockquote() ; # énoncé
00547
00548 solutionTP($numExo,$numSerie) ; # contient un blockquote
00549
00550 p("texte") ;
00551 #echo "On pourra utiliser l'archive " ;
00552 #echo href("projetRORcomplet.zip") ;
00553 #echo " afin de voir une solution complète. " ;
00554 echo em("Not yet!") ;
00555 finp() ;
00556
00557 finsolution() ; # contient un blockquote
00558
00559 finblockquote() ; # tp
00560
00561 #############################################################################
00562
00563 finTP($numSerie) ;
00564 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)