Listing du fichier scripts1.php
00001 <?php
00002 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00003 include("std.php") ;
00004 # # (gH) -_- scripts1.php ; TimeStamp (unix) : 03 Janvier 2015 vers 16:30
00005
00006 #######################################################################################
00007
00008 debutPage("Langages de scripts (1/2)","strict") ;
00009 debutSection() ;
00010 h1("Langages de scripts, automatisation de commandes et") ;
00011 h1("production de documents structurés") ;
00012 $gh = s_nbsp(20)." gilles.hunault \"at\" univ-angers.fr" ;
00013 h2($gh,"gvert") ;
00014 finSection() ;
00015
00016 ##############################################################################################
00017
00018 debutSection() ;
00019 h2("Table des matières cliquable") ;
00020 blockquote() ;
00021
00022 $nbexo = 0 ;
00023
00024 table(0,5) ;
00025
00026 tr() ;
00027 td() ; h3("1.") ; fintd() ;
00028 td() ; h3(href("#notion","Langages de scripts versus \"grands\" langages","nou")) ; fintd() ;
00029 fintr() ;
00030 exo(++$nbexo) ;
00031
00032 tr() ;
00033 td() ; h3("2.") ; fintd() ;
00034 td() ; h3(href("#awkrex","Les précurseurs : Awk et Rexx ","nou")) ; fintd() ;
00035 fintr() ;
00036 exo(++$nbexo) ;
00037
00038 tr() ;
00039 td() ; h3("3.") ; fintd() ;
00040 td() ; h3(href("#perltcl","La relève : Perl et Tcl/Tk","nou")) ; fintd() ;
00041 fintr() ;
00042 exo(++$nbexo) ;
00043
00044 tr() ;
00045 td() ; h3("4.") ; fintd() ;
00046 td() ; h3(href("#jsphp","Le web classique : Php et Javascript","nou")) ; fintd() ;
00047 fintr() ;
00048 exo(++$nbexo) ;
00049
00050 tr() ;
00051 td() ; h3("5.") ; fintd() ;
00052 td() ; h3(href("#rubypython","La «nouvelle garde» : Python et Ruby","nou")) ; fintd() ;
00053 fintr() ;
00054 exo(++$nbexo) ;
00055
00056 tr() ;
00057 td() ; h3("6.") ; fintd() ;
00058 td() ; h3(href("#dcts","Production automatique de documents structurés","nou")) ; fintd() ;
00059 fintr() ;
00060 exo(++$nbexo) ;
00061
00062 fintable() ;
00063 finblockquote() ;
00064 finSection() ;
00065
00066 $nbexo = 0 ;
00067
00068 ##############################################################################################
00069
00070 $nbexo++ ;
00071 debutSection() ;
00072 h2(aname("$nbexo. Notion de langages de scripts versus \"grands\" langages","notion")) ;
00073
00074 ##############################################################################################
00075
00076 blockquote() ;
00077
00078 h3("$nbexo.1 Quelques traitements vite faits, bien faits") ;
00079
00080 p("texte") ;
00081 echo "Imaginez que vous vouliez calculer la valeur de 2 puissance 11 ou numéroter en continu les lignes des fichiers " ;
00082 echo href("langages1.txt")." et " ;
00083 echo href("langages2.txt")." ou extraire la liste triée du premier mot de chaque ligne non vide du fichier " ;
00084 echo href("langages2.txt")." sachant qu'il s'agit d'une tâche «volatile». " ;
00085 echo " Ou encore que vous vouliez comparer de façon synoptique le contenu des deux fichiers-texte " ;
00086 echo href("v417_r.txt","v417.r")." et ".href("v461_r.txt","v461.r").". " ;
00087 echo " Quel outil, quelle commande, quel logiciel ou " ;
00088 echo " quel langage de programmation utiliseriez-vous pour cela ? " ;
00089 echo " De même, et il s'agit là de tâches plus \"routinières\", et si vous vouliez régulièrement archiver " ;
00090 echo " de façon incrémentale tous les fichiers ".b("XML")." d'un répertoire, ou passer rapidement d'un répertoire à " ;
00091 echo " l'autre, sachant que vous utilisez plusieurs machines avec des systèmes d'exploitation différents ?" ;
00092 echo " Là encore, quel langage de programmation, quel outil, logiciel ou commande utiliseriez-vous pour cela ? " ;
00093 finp() ;
00094
00095 p("texte") ;
00096 echo s_span("Voici quelques éléments de réponses en ligne de commande, sans passer par un fichier-programme, ","bleu") ;
00097 echo s_span(" pour réaliser les actions proposées","bleu")."." ;
00098 finp() ;
00099
00100
00101 p("texte") ;
00102 echo "Pour calculer la valeur de 2 puissance 11, on peut utiliser ".b("Perl")." en mode ".em("one-liner").", " ;
00103 echo " pour numéroter en continu les lignes des fichiers indiqués, on peut utiliser ".b("gawk")." : " ;
00104 finp() ;
00105
00106 pre_fichier("demo1.txt","cadre") ;
00107
00108 p("texte") ;
00109 echo "La vérification de l'exécution de ces commandes est immédiate :" ;
00110 finp() ;
00111
00112 pre_fichier("demo1_res.txt","cadrebleu") ;
00113
00114 p("texte") ;
00115 echo "Pour visualiser la comparaison de deux fichiers, le mieux est sans doute d'utiliser ".b("TkDiff") ;
00116 echo " qui se réduit à un seul script ".b("Tcl/Tk")." nommé ".href("tkdiff_tcl.txt","tkdiff.tcl").". " ;
00117 echo " Il y aussi ".b("tkdirdiff")." qui compare bien sûr deux répertoires." ;
00118 finp() ;
00119
00120
00121 pre("cadre") ;
00122 echo "\n" ;
00123 echo " wish tkdiff.tcl v417.r v461.r & \n\n" ;
00124 finpre() ;
00125
00126 p("texte") ;
00127 echo "Voici une partie de la fenêtre d'exécution de ".b("TkDiff")." :" ;
00128 finp() ;
00129
00130 pvide() ;
00131 p("centre") ;
00132 $img = "tkdiff.png" ;
00133 echo href($img,img($img,$img,600)) ;
00134 finp() ;
00135 pvide() ;
00136
00137 p("texte") ;
00138 echo "Si les langages ".b("Perl").", ".b("Awk")." et ".b("Tcl/Tk")." réalisent bien ces tâches, c'est parce qu'ils ont été conçus pour cela. " ;
00139 echo " En effet, les ".href(wikifr("Langage_de_script"),"langages de scripts")." sont apparus dès le début des ordinateurs pour enchainer et compléter les " ;
00140 echo " commandes système, même s'ils ont évolué ensuite vers des besoins plus spécifiques. C'est pourquoi ils sont en général \"imbattables\" en termes " ;
00141 echo " de concision d'écriture : ils sont «prévus pour». " ;
00142 echo " C'est aussi ce qui a entraîné une certaine " ;
00143 echo "«guerre des langages de programmation»" ;
00144 echo " (comme ".b("C")." ".em("versus")." ".b("Java").", langage de scripts ".em("versus")." \"grand langage\", ".b("Perl")." ".em("versus ") ;
00145 echo b("Ruby")." ou ".b("Python")."...) " ;
00146 echo " qui n'est pas sans rappeler la " ;
00147 echo "«guerre des éditeurs de texte» " ;
00148 echo "(vi est le meilleur, emacs est le meilleur, eclipse est le meilleur, etc.) " ;
00149 echo " et la «guerre des navigateurs» " ;
00150 echo "(Firefox est le meilleur, Chrome est le meilleur, Internet Explorer est le meilleur, etc.)." ;
00151 finp() ;
00152
00153 p("texte") ;
00154 echo "Nous n'entrerons pas ces polémiques car elles sont en général stériles. La question " ;
00155 echo b("quel est le meilleur langage de programmation ?") ;
00156 echo " est aussi stupide que la question " ;
00157 echo b("quelle est la meilleure voiture ?") ;
00158 echo " Sans critère objectif de comparaison (modularité, vitesse d'exécution, concision...), " ;
00159 echo " la plupart des comparaisons ne sont pas pertinentes. De plus, souvent, les sondés ne connaissent " ;
00160 echo " que deux ou trois langages, d'où une vision incomplète, imparfaite, aboutissant à des réponses " ;
00161 echo " biaisées et partiales. " ;
00162 echo " Enfin, pour conclure ce débat, s'il y avait vraiment un langage meilleur que les autres, vu les " ;
00163 echo " intérêts économiques en jeu, cela se saurait... Toutefois, nous vous conseillons de vous pencher " ;
00164 echo " sur " ;
00165 echo "Scala" ;
00166 echo " comme successeur possible de Java, mais pas de regarder le langage Go... " ;
00167 finp() ;
00168
00169 p("texte") ;
00170 echo "Nous prenons plutôt ici le parti de présenter (un peu trop rapidement ?) de nombreux langages, " ;
00171 echo " avec une mise en avant de leurs points forts et parfois de leurs inconvénients. De la même façon " ;
00172 echo " qu'un conducteur utilise la plupart du temps sa propre voiture mais prend aussi de temps en temps le train, " ;
00173 echo " l'avion ou une autre voiture, nous essaierons de montrer comment réaliser le plus rapidement possible " ;
00174 echo " certains traitements pour des applications qui ne sont pas de [trop] grande taille. Au lecteur et à la " ;
00175 echo " lectrice de choisir ensuite si cela vaut le coup pour lui ou pour elle d'utiliser tel ou tel langage pour " ;
00176 echo " telle ou telle tâche... " ;
00177 finp() ;
00178
00179 h3("$nbexo.2 Les langages de scripts : un peu de culture") ;
00180
00181 p("texte") ;
00182 echo "Un langage de scripts se démarque en général des grands langages de programmation comme ".b("C").", ".b("C++").", ".b("Java") ;
00183 echo " par le fait qu'il est souvent interprété, typé dynamiquement, avec une syntaxe adaptée à des " ;
00184 echo " traitements «aggressifs», de certaine structures de données. " ;
00185 echo " On peut très souvent les exécuter en mode interactif pour tester telle ou telle fonctionnalité, ou " ;
00186 echo " s'en servir comme nouveau \"shell de commandes\". Les premiers langages de scripts ont été liés " ;
00187 echo " directement aux systèmes d'exploitation pour lier les commandes entre elles et pour dialoguer avec " ;
00188 echo " l'utilisateur. Au fil du temps, ils ont évolué pour devenir des langages non couplés directement " ;
00189 echo " aux systèmes d'exploitation, ce qui passe souvent par une non-compilation, ce qui est " ;
00190 echo " à la fois un point fort (on transmet le fichier-programme et c'est tout) et un point faible (vitesse d'exécution parfois inférieure), " ;
00191 echo " même si les «nouvelles générations» sont " ;
00192 echo href("http://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e","C/JIT","gvert")." (" ;
00193 echo href("http://en.wikipedia.org/wiki/Just-in-time_compilation","compile/just in time","grouge").")." ;
00194 finp() ;
00195
00196 p("texte") ;
00197 echo "Définis originalement dans un but précis (comme la mise en forme de rapport pour ".b("Perl")."), ils sont souvent " ;
00198 echo " devenus des langages généralistes soutenus par des fortes communautés qui proposent des spécialisations " ;
00199 echo " intéressantes (comme " ;
00200 echo href("http://www.bioperl.org/wiki/Main_Page","BioPerl") ;
00201 echo " par exemple ). Les \"derniers langages\" comme Ruby et Python " ;
00202 echo " bénéficient bien sûr de l'expérience des autres langages et ils ont «bien sûr » été " ;
00203 echo " inventés pour pallier aux faiblesses des autres... mais en en rajoutant d'autres. " ;
00204 finp() ;
00205
00206 p("texte") ;
00207 echo "Certains langages, au demeurant fort intéressants semblent avoir disparu, ou rester la \"niche\" de " ;
00208 echo " certains fanatiques ou de certains spécialistes, comme pour Apl, Forth, Logo, Prolog..." ;
00209 echo " Par contre certains langages de scripts se sont installés dans des lieux incontournables, comme Maple " ;
00210 echo " et Mathematica pour le calcul mathématique formel et appliqué, par exemple, même s'ils sont payants. Car une des " ;
00211 echo " caractéristiques des premiers langages de scripts était d'être gratuits, ce qui à l'époque était une " ;
00212 echo " nouveauté... " ;
00213 echo " De même, le langage R est le langage de scripts gratuit qui s'est imposé depuis le début des années 2000 " ;
00214 echo " comme langage gratuit, performant pour les statistiques malgré le \"monstre\" très payant SAS... " ;
00215 echo " Il lui est même très supérieur dès qu'il s'agit de graphiques et de bioinformatique... " ;
00216 # ref. cours EDA ?
00217 finp() ;
00218
00219 p("texte") ;
00220 echo "Un langage sans doute trop précoce est Tcl et son fameux compère Tk qui n'ont jamais eu le succès escompté, peut-être " ;
00221 echo " en raison d'une syntaxe trop différente, comme Apl, en son temps... Pourtant Tk (vous avez dit GTK ?) était presque " ;
00222 echo " parfait pour écrire de petites interfaces graphiques, avec Tcl comme langage de support. Heureusement, il est devenu " ;
00223 echo " le support standard des interfaces graphiques pour Python et Ruby." ;
00224 finp() ;
00225
00226 p("texte") ;
00227 echo "Les premiers langages de scripts ne connaissaient pas la notion de programmation objet, avaient des mécanismes de sous-programmes " ;
00228 echo " un peu rudimentaires, ne savaient pas interfacer les bases de données et, à l'époque, le Web n'existait, pas plus que les «*p» " ;
00229 echo " (Php, Asp, Jsp) ou Unicode/UTF. " ;
00230 echo " Aujourd'hui (2016), les derniers " ;
00231 echo " langages de scripts sont les \"champions\" de ces domaines d'application. Nous passerons donc des premiers langages, simples et " ;
00232 echo " efficaces, mais parfois incomplets comme Awk et Rexx à des langages plus évolués, comme Perl, Ruby et Python, sans oublier les " ;
00233 echo " incontournables Php et Javascript qui peuvent même s'exécuter en ligne de commande, ce que tout le monde ne connait pas forcément. " ;
00234 finp() ;
00235
00236 p("texte") ;
00237 echo "Voici quelques exemples choisis en session interactive : " ;
00238 finp() ;
00239
00240 pre_fichier("demo_rexx.txt","cadrejaune") ;
00241
00242 pre_fichier("demo_perl.txt","cadrebleu") ;
00243
00244 pre_fichier("demo_php.txt","cadrejaune") ;
00245
00246 pre_fichier("demo_r.txt","cadrebleu") ;
00247
00248 p("texte") ;
00249 echo "Vous pouvez cliquer sur les images produites par ce script R pour les aggrandir : " ;
00250 finp() ;
00251
00252 $img1 = "demo_r_1.png" ;
00253 $img2 = "demo_r_2.png" ;
00254 $img3 = "demo_r_3.png" ;
00255
00256 div("centre") ;
00257 table(0,20) ;
00258 tr() ;
00259 td() ; fintd() ;
00260 td() ; echo href($img1,img($img1,$img1,200)) ; fintd() ;
00261 td() ; echo href($img2,img($img2,$img2,200)) ; fintd() ;
00262 td() ; echo href($img3,img($img3,$img3,200)) ; fintd() ;
00263 fintr() ;
00264 fintable() ;
00265 findiv() ;
00266
00267 # dire prise en main ?
00268 # biblio avec images de livres ?
00269
00270 ## -------------------------------------------------------------------------------------------
00271
00272 exo($nbexo,2) ;
00273
00274 finblockquote() ;
00275 finSection() ;
00276
00277 ##############################################################################################
00278
00279 $nbexo++ ;
00280 debutSection() ;
00281 h2(aname("$nbexo. Les précurseurs : Awk et Rexx","awkrex"));
00282 #h2(aname("$nbexo. Les précurseurs : Awk (plus Gawk, Regina, ooRexx et NetRexx)","awkrex"));
00283
00284 ##############################################################################################
00285
00286 # http://www.catonmat.net/blog/awk-nawk-and-gawk-cheat-sheet/
00287 # http://www.manpagez.com/info/gawk/gawk-4.0.1/gawk_287.php
00288
00289 blockquote() ;
00290
00291 h3("$nbexo.1 Le langage AWK","gbleu") ;
00292
00293 p("texte") ;
00294 echo href(wikien("AWK"),"AWK") ;
00295 echo " apparait sans doute vers 1977. Ecrit pour filtrer et extraire des données des commandes Unix, il devient vite un langage apprécié " ;
00296 echo " des développeurs C (dont il partage un des auteurs) et des développeurs système puisqu'il utilise la même syntaxe de base que le C... sans les pointeurs ! " ;
00297 echo " Basé sur le schéma condition/action, il évolue assez rapidement pour inclure les expressions régulières et les tableaux associatifs. " ;
00298 echo " Bien adapté aux \"petits programmes\", il peut être compilé ou traduit en C dans certaines conditions. Sous Windows, dans les années 90 " ;
00299 echo " TAWK prend le pas sur Awk avant de disparaitre au profit de Gawk (avec le G de GNU)." ;
00300 echo " De par sa spécialisation à traiter des paquets de fichiers-texte, il reste toujours très apprécié et très utilisé pour des traitements " ;
00301 echo " ponctuels et ciblés." ;
00302 finp() ;
00303
00304 h3("AWK : points forts","gvert") ;
00305
00306 p("texte") ;
00307 echo "AWK est facile à apprendre et permet de découvrir la syntaxe de base du C. Il sait traiter avec le même code " ;
00308 echo " tous les fichiers passés en ligne de commande, il peut s'écrire en pas-à-pas et peut fonctionner en " ;
00309 echo " mode ".href("http://www.catonmat.net/blog/awk-one-liners-explained-part-one/","one-liner").". Avec ses tableaux associatifs, ses variables prédéfinies et le support des " ;
00310 echo " expressions régulières, il est assez complet pour de petites applications en mode texte, bien que les sous-programmes soient parfois un peu " ;
00311 echo " rudimentaires. " ;
00312 finp() ;
00313
00314 h3("AWK : points faibles","grouge") ;
00315
00316 p("texte") ;
00317 echo "AWK ne connait ni le Web ni les objets et ne dispose pas de bibliothèques de composants. " ;
00318 echo " Il n'y a pas de mode interactif, sauf à \"bricoler\" mais cela ne présenterait pas beaucoup " ;
00319 echo " d'intérêt puisqu'un programme Awk ne peut pas exister sans au moins un fichier de données." ;
00320 finp() ;
00321
00322 p("texte") ;
00323 echo b("Documents à lire : ") ;
00324 finp() ;
00325
00326 ul() ;
00327 debutli() ;
00328 p() ;
00329 echo "mon \"vieux\" ".href("../tuteurs/tutawk.htm","tuteur pour AWK")." ;" ;
00330 finp() ;
00331 finli() ;
00332 debutli() ;
00333 p() ;
00334 echo "une ".href("http://www.grymoire.com/Unix/Awk.html","longue introduction")." à AWK ;" ;
00335 finp() ;
00336 finli() ;
00337 debutli() ;
00338 p() ;
00339 echo "le ".href("http://www.gnu.org/software/gawk/manual/","manuel")." AWK de référence. " ;
00340 finp() ;
00341 finli() ;
00342 finul() ;
00343
00344 ## -------------------------------------------------------------------------------------------
00345
00346 h3("$nbexo.2 Le langage REXX","gbleu") ;
00347
00348 p("texte") ;
00349 echo href(wikien("REXX"),"REXX") ;
00350 echo " date du début des ".href("http://www.rexxla.org/rexxlang/mfc/rexxhist.html","années 1980").". " ;
00351 echo " Conçu au départ comme langage de shell pour " ;
00352 echo em("mainframe ").href(wikien("IBM"),"IBM")." au niveau du système d'exploitation et des applications, " ;
00353 echo " il devient dès 1984 un langage de commandes " ;
00354 echo " pour PcDos, alors concurrent de ".href(wikien("MS-DOS"),"MsDos")." sous le nom Personal REXX. " ;
00355 echo " Les idées de départ de son créateur, ".href("http://speleotrove.com/rexxhist/Rexx25-RexxLA.pdf","M. Colishaw") ;
00356 echo " étaient : lisibilité, simplicité, portabilité car à l'époque, même si Windows et le Web " ;
00357 echo " n'existaient pas, il fallait des passerelles entre les gros ordinateurs IBM et les premiers PC. " ;
00358 echo " Il avait aussi alors un role de langage complémentaire pour programmer des macros afin de personnaliser " ;
00359 echo " l'éditeur (le seul éditeur !) nommé XEDIT d'IBM pou VM/SP, Kedit pour Windows, Sedit (multi-os). " ;
00360 echo " Object REXX, démarré en 1988, fut vraiment opérationnel en 1996 comme le fut ANSI REXX, et, " ;
00361 echo " à peu près à la même période, ".href("http://www.netrexx.org/","NetREXX") ;
00362 echo " qui inclut la ".href("http://fr.wikipedia.org/wiki/Machine_virtuelle_Java","JVM").". " ;
00363 echo " Une version de REXX pour GNU est ".href("http://regina-rexx.sourceforge.net","regina")." et l'éditeur THE " ;
00364 echo " connu aussi sous le nom de Hessling Editor, est programmable en REXX." ;
00365 finp() ;
00366
00367 h3("REXX : points forts","gvert") ;
00368
00369 p("texte") ;
00370 echo "REXX/Regina est très facile à apprendre. Les blocs de commande sont tous encadrés par do/end qui sert aussi pour les boucles. Son vocabulaire " ;
00371 echo " est simple et court (if, say, parse...). Il y a peu de mots, chaque commande (y compris celle de l'environnement " ;
00372 echo " sous-jacent, système d'exploitation, éditeur ou application) peut être testée via son code-retour. " ;
00373 echo " Les tableaux utilisent une syntaxe avec un point et sont nativement associatifs (mais sans parcours explicite). " ;
00374 echo " Le mécanisme de sous-programme, de variable globale/locale est là encore simple et facile à maitriser, mais peu sophistiqué. " ;
00375 echo " Le fait que REXX transmette directement à l'environnement toute commande qui ne commence pas par un mot-clé en fait un langage " ;
00376 echo " adapté aux interfaces ligne de commande. Non lié aujourd'hui à IBM, on peut l'utiliser sous Dos/Windows, Mac/Os et Linux " ;
00377 echo " comme langage fédérateur et unifié de commandes, plutôt que d'utiliser les batch de Dos et bash, par exemple. " ;
00378 finp() ;
00379
00380 h3("REXX : points faibles","grouge") ;
00381
00382 p("texte") ;
00383 echo "Rexx ne sait pas gérer les expressions régulières (mais dispose avec ".b("parse")." d'un petit analyseur syntaxique), l'arithmétique étendue ne prend pas en compte de fonctions mathématiques sophistiquées. " ;
00384 echo " Il n'y a aucune fonction mathématique prévue pour les réels. De par sa conception, REXX ne connait ni les bases de données ni le Web, pas plus que les objets ou XML. " ;
00385 finp() ;
00386
00387 p("texte") ;
00388 echo b("Documents à lire : ") ;
00389 finp() ;
00390
00391 ul() ;
00392 debutli() ;
00393 p() ;
00394 echo "mon ".href("../tuteurs/tutrexx.htm","tuteur pour REXX")." ;" ;
00395 finp() ;
00396 finli() ;
00397 debutli() ;
00398 p() ;
00399 echo "la liste des ".href("http://www.rexswain.com/rexx.html","fonctions REXX")." de R. Swain ;" ;
00400 finp() ;
00401 finli() ;
00402 # mes fonctions de rexxut et fileut
00403 debutli() ;
00404 p() ;
00405 echo "la page de ".href("http://www.lightlink.com/hessling/","Regina")." de M. Hessling ;" ;
00406 finp() ;
00407 finli() ;
00408 debutli() ;
00409 p() ;
00410 echo "la page officielle de ".href("http://www.rexxla.org/","REXXLA")."." ;
00411 finp() ;
00412 finli() ;
00413
00414 finul() ;
00415
00416 ## -------------------------------------------------------------------------------------------
00417
00418 exo($nbexo,2) ;
00419
00420 finblockquote() ;
00421 finSection() ;
00422
00423 ##############################################################################################
00424
00425 $nbexo++ ;
00426 debutSection() ;
00427 h2(aname("$nbexo. La relève : Perl et Tcl/Tk","perltcl")) ;
00428
00429 ##############################################################################################
00430
00431 # plugin ?
00432 # wfr.tcl.tk/1827 et nombres heureux
00433 # http://www.uppp.free.fr/Tcltk.htm
00434 # http://wiki.tcl.tk/12719
00435 # http://www.tcl.tk/software/plugin/download.html
00436
00437 blockquote() ;
00438
00439 h3("$nbexo.1 Le langage Perl","gbleu") ;
00440
00441 p("texte") ;
00442 echo href(wikifr("Perl_(langage)"),"PERL") ;
00443 echo " fut créé par L. Wall en 1987, soit 10 ans après Awk. " ;
00444 echo " Prévu au départ pour bien formater des rapports, son créateur L. Wall voulait en faire un langage rapide à écrire, pas forcément très lisible. " ;
00445 echo " Du coup, il multiplie les ".href("http://www.tutorialspoint.com/perl/perl_variables.htm","variables prédéfinies","gbleuf nou").", et pense à des syntaxes compactes. Encouragé par une communauté " ;
00446 echo " de développeurs qui communiquent avec lui par mail, de nombreux modules -- plus de 23300 modules en janvier 2013 -- " ;
00447 echo " et un système centralisé d'archives (".href("http://www.cpan.org/","CPAN").") assurent " ;
00448 echo " une forte popularité à Perl qui devient vite un standard de développement rapide. " ;
00449 echo " Sa philosophie " ;
00450 echo href(wikien(urlencode("There's_more_than_one_way_to_do_it")),"timtowtdi") ;
00451 echo " montre qu'on n'est pas obligé d'être un \"perl-mongueur\" pour développer en Perl. " ;
00452 finp() ;
00453
00454 h3("Perl : points forts","gvert") ;
00455
00456 p("texte") ;
00457 echo "Bien conçu au départ pour être court à écrire, Perl est effectivement compact. " ;
00458 echo " Sa communauté et son grand nombre de modules en font un outil très agréable à utiliser. " ;
00459 echo " Les primitives de Perl, écrites en C et peu nombreuses, assurent une grande vitesse d'exécution " ;
00460 echo " et des performances très intéressantes pour des applications sur de gros volumes de données, " ;
00461 echo " par exemple pour le traitement de données génomiques en bioinformatique des années 2015..." ;
00462 finp() ;
00463
00464 h3("Perl : points faibles","grouge") ;
00465
00466 p("texte") ;
00467 echo "Si Perl est facile à lire, il est difficile à relire avec ses ".href("http://c2.com/cgi/wiki?TheProblemWithSigils","sigils") ;
00468 echo " et ses ".href("http://perl.enstimac.fr/DocFr/perlvar.html","variables à une lettre","gbleuf nou").". ";
00469 echo " De plus la syntaxe des fonctions et des appels de " ;
00470 echo " fonctions n'est pas toujours facile à comprendre quand on est habitué(e) à d'autres langages. Enfin, " ;
00471 echo " le paradigme objet n'est pas bien traité en Perl 5. Heureusement Perl 6 vient (viendra ?) y remédier. " ;
00472 finp() ;
00473
00474 p("texte") ;
00475 echo b("Documents à lire : ") ;
00476 finp() ;
00477
00478 ul() ;
00479 debutli() ;
00480 p() ;
00481 echo "mon ".href("../tuteurs/tutperl.htm","tuteur pour Perl")." ;" ;
00482 finp() ;
00483 finli() ;
00484 debutli() ;
00485 p() ;
00486 echo href("http://perl6maven.com/tutorial/toc","Perl 6 tutorial")." ;" ;
00487 finp() ;
00488 finli() ;
00489 debutli() ;
00490 p() ;
00491 echo href("http://perl6maven.com/tutorial/perl5-to-perl6","de Perl 5 à Perl 6")." ;" ;
00492 finp() ;
00493 finli() ;
00494 debutli() ;
00495 p() ;
00496 echo href("http://articles.mongueurs.net/magazines/linuxmag50.html","une seule ligne de perl peut faire beaucoup").". " ;
00497 finp() ;
00498 finli() ;
00499 finul() ;
00500
00501 ## -------------------------------------------------------------------------------------------
00502
00503 h3("$nbexo.2 Les langages Tcl et Tk","gbleu") ;
00504
00505 p("texte") ;
00506 echo href(wikifr("Tool_Command_Language"),"Tcl/Tk") ;
00507 echo " a été conçu dès 1988 par J. Ousterhout. La partie script standard (Tcl) n'a jamais été reconnue comme un langage très " ;
00508 echo " populaire ou performant. Par contre la partie graphique (Tk) avec son interpréteur interactif nommé ".b("wish")." a dès le " ;
00509 echo " départ beaucoup plu pour développer de petites applications graphiques et pour interfacer graphiquement et rapidement les " ;
00510 echo " commandes des OS. Il y avait à une certaine époque un plugin Tcl/Tk pour navigateur qui aurait du révolutionner les applications Web, " ;
00511 echo " mais c'était sans doute trop tôt... Tk reste toujours très présent (en 2012) notamment parce que Python et Ruby l'ont choisi comme support " ;
00512 echo " d'interfaces graphiques." ;
00513 finp() ;
00514
00515 h3("Tcl/Tk : points forts","gvert") ;
00516
00517 p("texte") ;
00518 echo "Tcl dispose de nombreuses fonctions et, comme Rexx, est capable de tout traiter soit comme des caractères ";
00519 echo " soit comme des listes de mots. " ;
00520 echo "Le très gros avantage de Tk est d'être disponible sur tous les OS et de s'interfacer avec tous les autres langages de scripts." ;
00521 echo " Il y a ainsi " ;
00522 echo href("http://rexxtk.sourceforge.net/","rexx tk").", " ;
00523 echo href("http://articles.mongueurs.net/magazines/linuxmag62.html","perl tk").", " ;
00524 echo href("http://wiki.python.org/moin/TkInter","python tk")." nommé aussi ".b("tkinter")." et " ;
00525 echo href("http://www.tutorialspoint.com/ruby/ruby_tk_guide.htm","ruby tk") ;
00526 echo "." ;
00527 echo " Il est à noter que Tk est considéré comme l'extension naturelle de Python et Ruby pour écrire des GUI." ;
00528 finp() ;
00529
00530 p("texte") ;
00531 echo "L'installation standard de Tk fournit de nombreuses applications facile à étendre. " ;
00532 echo "Tk est lui-même étendu en ".href("http://tix.sourceforge.net/","Tix").". ";
00533 finp() ;
00534
00535 h3("Tcl/Tk : points faibles","grouge") ;
00536
00537 p("texte") ;
00538 echo "La syntaxe de Tcl a de quoi rebuter au début puisqu'elle se démarque de presque toutes les autres. " ;
00539 #echo " De plus utiliser les crochets pour les fonctions et les parenthèses pour les tableaux est très perturbant. " ;
00540 echo " De plus utiliser les crochets pour les fonctions est très \"perturbant\" pour les programmeurs \"classiques\". " ;
00541 finp() ;
00542
00543 p("texte") ;
00544 echo b("Documents à lire : ") ;
00545 finp() ;
00546
00547 ul() ;
00548 debutli() ;
00549 p() ;
00550 echo "mon ".href("../tuteurs/tuttcl.htm","tuteur pour Tcl")." ;" ;
00551 finp() ;
00552 finli() ;
00553 debutli() ;
00554 p() ;
00555 echo "mon ".href("../tuteurs/tuttk.htm","tuteur pour Tk")." ;" ;
00556 finp() ;
00557 finli() ;
00558 debutli() ;
00559 p() ;
00560 echo href("http://wiki.tcl.tk/460","des exemples de script").". " ;
00561 finp() ;
00562 finli() ;
00563 finul() ;
00564
00565 ## -------------------------------------------------------------------------------------------
00566
00567 exo($nbexo,2) ;
00568
00569 finblockquote() ;
00570 finSection() ;
00571
00572 ##############################################################################################
00573
00574 $nbexo++ ;
00575 debutSection() ;
00576 h2(aname("$nbexo. Le web classique : Php et Javascript","jsphp")) ;
00577
00578 ##############################################################################################
00579
00580 blockquote() ;
00581
00582 h3("$nbexo.1 Le langage PHP","gbleu") ;
00583
00584 p("texte") ;
00585 echo "Conçu en 1994 puis réécrit en 1997, ".href(wikifr("PHP"),"PHP") ;
00586 echo " est initialement destiné uniquement au Web et c'est le premier langage qui est dédié " ;
00587 echo " à la programmation de scripts coté serveurs, contrairement aux autres langages de scripts " ;
00588 echo " (mais qui pouvaient et peuvent encore quand même s'utiliser en mode " ;
00589 echo href("../vitrine/Democgi/xmps.htm","CGI") ;
00590 echo " sur le serveur). Orienté gestion de " ;
00591 echo " données issues de formulaires et capable de se connecter à tous les systèmes de bases de données, Php s'impose vite commme LE langage du Web malgré " ;
00592 echo " quelques faiblesses, au point que les systèmes AMP (serveur Apache, Mysql, Php) deviennent un standard d'installation de serveurs Web. " ;
00593 echo " Complété par de nombreuses librairies, notamment pour le e-commerce et XML, et avec une prise en charge de la programmation objets et " ;
00594 echo " d'un interpréteur en ligne de commandes (cli), PHP n'est paradoxalement plus guère développé, malgré une annonce de Php 6... dès 2006, " ;
00595 echo " alors qu'il reste sans doute encore en 2015 le langage le plus utilisé au monde pour les scripts coté serveurs. ";
00596 finp() ;
00597
00598 h3("PHP : points forts","gvert") ;
00599
00600 p("texte") ;
00601 echo "Php s'installe facilement et peut même fonctionner sous Windows sans installation (par exemple sur un CD avec " ;
00602 echo href("http://framakey.org/Portables/ZMWSPortable?from=Portables.PortableZMWS","Zmws").")" ;
00603 echo " Sur un serveur, chaque personne peut utiliser des scripts PHP dans son répertoire (contrairement aux CGI). De nombreuses fonctions permettent de " ;
00604 echo " répondre à la plupart des besoins. Enfin, Php peut s'écrire en plein milieu de code HTML." ;
00605 finp() ;
00606
00607 h3("PHP : points faibles","grouge") ;
00608 p("texte") ;
00609 echo "PHP souffre des défauts d'un développement anarchique comme l'absence d'homogénéité des noms de fonctions, la foison de " ;
00610 echo " fonctions plus ou moins équivalentes. Un \"vrai\" programmeur sera gêné mais saura pallier aux [nombreux] défauts de PHP." ;
00611 finp() ;
00612
00613 p("texte") ;
00614 echo b("Documents à lire : ") ;
00615 finp() ;
00616
00617 ul() ;
00618 debutli() ;
00619 p() ;
00620 echo "mon ".href("../tuteurs/tutphp.htm","tuteur pour Php")." ;" ; ;
00621 finp() ;
00622 finli() ;
00623 debutli() ;
00624 p() ;
00625 echo href("http://ws.edu.isoc.org/data/2007/16526054747d8f0f11e10a/php_advanced_mysql_exobase_exocompl.pdf","advanced php")." (PDF) ;" ;
00626 finp() ;
00627 finli() ;
00628 debutli() ;
00629 p() ;
00630 echo href("http://tnx.nl/php.html","php in contrast to perl")." ;" ;
00631 finp() ;
00632 finli() ;
00633 debutli() ;
00634 p() ;
00635 echo href("http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/","php[...] bad design").". " ;
00636 finp() ;
00637 finli() ;
00638 finul() ;
00639
00640 ## -------------------------------------------------------------------------------------------
00641
00642 h3("$nbexo.2 Le langage Javascript","gbleu") ;
00643
00644
00645 p("texte") ;
00646 echo "Le premier " ;
00647 echo href(wikifr("Javascript"),"Javascript") ;
00648 echo " est du à B. Eich et est implémenté dans Netscape (un navigateur) en 1996. Contrairement à PHP qui s'exécute sur un " ;
00649 echo " serveur, Javascript est interprété coté client, plus exactement par le navigateur. Langage mal compris à l'époque, " ;
00650 echo " il est aujourd'hui (2013) normalisé en ECMAScript. Comme Php il est aujourd'hui incontournable pour le Web. Des bibliothèques " ;
00651 echo " comme Jquery, Prototype et un format de données nommé Json en font, avec la technologie AJAX un langage \"fort\" des interfaces " ;
00652 echo " Web dynamiques. Il est à noter que son modèle objet est très particulier (définition par prototype plutôt que par classe) " ;
00653 echo " et qu'il est très peu utilisé en ligne de commande ou sur les serveurs, ce qui risque (2012) de changer " ;
00654 echo " grâce à ".href(wikien("Nodejs"),"node.js")."." ;
00655 finp() ;
00656
00657 h3("Javascript : points forts","gvert") ;
00658
00659 p("texte") ;
00660 echo "Javascript est un langage aux possibilités méconnues alors qu'il est disponible avec tout navigateur : c'est donc le seul langage installé en standard sur tous les " ;
00661 echo" ordinateurs ! " ;
00662 echo " Javascript est suffisamment puissant pour gérer toutes les mises en pages, notamment grace aux frameworks comme Jquery ou Prototype. " ;
00663 finp() ;
00664
00665 h3("Javascript : points faibles","grouge") ;
00666
00667 p("texte") ;
00668 echo "Sa liaison avec DOM notamment via ".b("window.document.getElementById")." en fait un langage souvent mal compris. " ;
00669 echo " Les différentes implémentations liées au navigateur et en particulier Internet Explorer l'ont rendu à ses débuts non inter-opérable et donc " ;
00670 echo " assez mal perçu." ;
00671 finp() ;
00672
00673 p("texte") ;
00674 echo b("Documents à lire : ") ;
00675 finp() ;
00676
00677 ul() ;
00678 debutli() ;
00679 p() ;
00680 echo "mon ".href("../tuteurs/tutjs.htm","tuteur pour Javascript")." ; " ;
00681 finp() ;
00682 finli() ;
00683 debutli() ;
00684 p() ;
00685 echo href("http://fr.eloquentjavascript.net/","JavaScript Éloquent")." ; " ;
00686 finp() ;
00687 finli() ;
00688 debutli() ;
00689 p() ;
00690 echo href("http://www.alsacreations.com/article/lire/578-La-gestion-des-evenements-en-JavaScript.html","évènements en Javascript")." ;" ;
00691 finp() ;
00692 finli() ;
00693 debutli() ;
00694 p() ;
00695 echo href("http://www.siteduzero.com/tutoriel-3-4745-ajax-et-l-echange-de-donnees-en-javascript.html","AJAX échange de données")." ;" ;
00696 finp() ;
00697 finli() ;
00698 debutli() ;
00699 p() ;
00700 echo href("http://mckoss.com/jscript/object.htm","POO Javascript")."." ;
00701 finp() ;
00702 finli() ;
00703 finul() ;
00704 /*
00705 debutli() ;
00706 p() ;
00707 echo href("","") ;
00708 finp() ;
00709 finli() ;
00710 */
00711
00712 ## -------------------------------------------------------------------------------------------
00713
00714 exo($nbexo,2) ;
00715
00716 finblockquote() ;
00717 finSection() ;
00718
00719 ##############################################################################################
00720
00721 $nbexo++ ;
00722 debutSection() ;
00723 h2(aname("$nbexo. La «nouvelle garde» : Python et Ruby","rubypython")) ;
00724
00725 ##############################################################################################
00726
00727 # http://pythonfacile.free.fr/python/ressources.html
00728 # http://diveintopython.adrahon.org/toc/index.html
00729 # http://ruby-doc.org/docs/beginer-fr/xhtml
00730 # http://forum.ubuntu-fr.org/viewtopic.php?pid=350236
00731 # http://ww2.ac-creteil.fr/util/programmation/python/python-intro.html
00732
00733 # http://pythonfacile.free.fr/python/unicode.html
00734
00735 blockquote() ;
00736
00737 h3("$nbexo.1 Le langage Python","gbleu") ;
00738
00739 p("texte") ;
00740 echo "Comme pour d'autres langages de scripts, " ;
00741 echo href(wikifr("Python_(langage)"),"Python") ;
00742 echo " est au départ un langage écrit par une seule personne, G. van Rossum (en 1991). " ;
00743 echo " Après quelques erreurs de jeunesse, Python version 2 devient un langage de scripts reconnu pour sa lisibilité et " ;
00744 echo " sa gestion \"propre\" des types et des structures de données. Il est fonctionnel, objet et s'interface bien avec Tk. " ;
00745 echo " En 2008, Python passe en version 3, malheureusement parfois incompatible avec la version 2. " ;
00746 echo " Une forte communauté scientifique qui trouvait Perl un peu dépassé et des applications comme numpy ou scipy en font un " ;
00747 echo " langage fortement reconnu et apprécié. De plus, issu des années 2000, Python sait bien se placer comme langage de prototypage " ;
00748 echo " pour le web ou les bases de données notamment avec son fameux framework de développement " ;
00749 echo href("http://www.djangobook.com/en/2.0/index.html","django")."." ;
00750 finp() ;
00751
00752 h3("Python : points forts","gvert") ;
00753
00754 p("texte") ;
00755 echo "Python est souvent décrit comme «".b("concis")." et ".b("élégant")."». Il est souvent considéré comme facile à apprendre et " ;
00756 echo " relativement bien documenté et il est fortement orienté objets. " ;
00757 finp() ;
00758
00759 h3("Python : points faibles","grouge") ;
00760
00761 p("texte") ;
00762 echo "La non compatibilité entre Python 2 et Python 3 couplée à la présence de nombreux modules en Python 2 absents en Python 3 a de quoi décourager. " ;
00763 echo " De plus la syntaxe par indentation peut en déranger plus d'un(e). Le mélange entre le style fonctionnel et le style objet " ;
00764 echo " comme dans ".b("len(x)")." et ".b("x.reverse()")." si x est une liste est le sujet de nombreuses controverses, comme la " ;
00765 echo "«prolifération» de ".b("self")." dans l'écriture de méthodes objets. " ;
00766 finp() ;
00767
00768 p("texte") ;
00769 echo b("Documents à lire : ") ;
00770 finp() ;
00771
00772 ul() ;
00773 debutli() ;
00774 p() ;
00775 echo "mon ".href("../tuteurs/tutpython.php","tuteur pour Python 3")." ; " ;
00776 finp() ;
00777 finli() ;
00778 debutli() ;
00779 p() ;
00780 echo "un ".href("http://hebergement.u-psud.fr/iut-orsay/Pedagogie/MPHY/Python/courspython3.pdf","cours d'initiation")." à Python 3" ;
00781 echo " avec ses ".href("http://hebergement.u-psud.fr/iut-orsay/Pedagogie/MPHY/Python/exercices-python3.pdf","exercices corrigés")." par B. Cordeau ;" ;
00782 finp() ;
00783 finli() ;
00784 debutli() ;
00785 p() ;
00786 echo "le ".href("https://docs.djangoproject.com/en/1.4/intro/tutorial01/","tutoriel")." de django." ;
00787 finp() ;
00788 finli() ;
00789 finul() ;
00790
00791 p("texte") ;
00792 echo "Mais bien sûr, on trouvera beaucoup plus de références avec Google via " ;
00793 echo href("http://www.google.fr/search?q=python3+filetype%3Apdf","python3 filetype:pdf","gbleuf nou") ;
00794 echo " et ".em("consor").", comme le fameux ".href("http://getpython3.com/diveintopython3/","dive3")."." ;
00795 finp() ;
00796
00797 ## -------------------------------------------------------------------------------------------
00798
00799 h3("$nbexo.2 Le langage Ruby","gbleu") ;
00800
00801 p("texte") ;
00802 # echo href(wikifr("Ruby"),"Ruby") ;
00803 echo "Là encore créé par une seule personne, \"Matz\" dès 1995, ".href(wikifr("Ruby"),"Ruby")." se revendique d'une forte filiation Smalltalk " ;
00804 echo " (voir mon \"vieux\" ".href("../tuteurs/tutsml.htm","tuteur Smalltalk","gbleuf nou").") " ;
00805 echo " et ".href("../tuteurs/tutperl.htm","Perl","gbleuf nou")." dont il partage parfois la syntaxe. ";
00806 echo "Son concepteur introduit un concept intéressant puisque le langage se veut «agréable» à programmer. Il est ".b("entièrement objets").", mais permet la " ;
00807 echo " programmation fonctionnelle et procédurale et aussi la métaprogrammation car tout est ouvert, y compris le langage initial. Ainsi, on peut redéfinir + pour " ;
00808 echo " tout ce qui bouge ! Couplé au framework ".href(wikifr("Ruby_on_Rails"),"Rails","grouge nou").", Ruby est un langage de prototypage très facile à utiliser, au moins au début. " ;
00809 finp() ;
00810
00811 h3("Ruby : points forts","gvert") ;
00812
00813 p("texte") ;
00814 echo "Le grand nombre de fonctions disponibles pour chaque type de données et sa possibilité de tout redéfinir en font un langage facile à s'approprier, quitte à le " ;
00815 echo " déformer pour l'adapter à un DSL. " ;
00816 finp() ;
00817
00818 h3("Ruby : points faibles","grouge") ;
00819
00820 p("texte") ;
00821 echo "Maitriser les subtilités de proc, lambda et autre \"yield\" requiert pas mal de temps. De plus le passage par @ et @@ dans les méthodes objets montre bien qu'il est " ;
00822 echo " difficile de trouver une syntaxe simple pour des concepts compliqués comme les variables d'instance et de classe. " ;
00823 finp() ;
00824
00825 p("texte") ;
00826 echo b("Documents à lire : ") ;
00827 finp() ;
00828
00829 ul() ;
00830 debutli() ;
00831 p() ;
00832 echo "mon ".href("../tuteurs/tutruby.php","tuteur pour Ruby 1.9")." ;" ;
00833 finp() ;
00834 finli() ;
00835 debutli() ;
00836 p() ;
00837 echo "le ".href("http://www.rubyinside.com/media/poignant-guide.pdf","guide poignant","gbleuf nou")." de Ruby, si vous supportez la mise en page ;" ;
00838 finp() ;
00839 finli() ;
00840 debutli() ;
00841 p() ;
00842 echo "l'ouvrage ".href("http://www.amazon.fr/Ruby-Best-Practices-Gregory-Brown/dp/0596523009","Ruby best practices","gbleuf nou")." ;" ;
00843 #echo "l'ouvrage ".href("http://majesticseacreature.com/rbp-book/pdfs/rbp_1-0.pdf","Ruby best practices","gbleuf nou")." ;" ;
00844 finp() ;
00845 finli() ;
00846 debutli() ;
00847 p() ;
00848 echo "le ".href("http://french.railstutorial.org/chapters/beginning","tutoriel")." en français de Ruby on Rails." ;
00849 finp() ;
00850 finli() ;
00851 finul() ;
00852
00853 p("texte") ;
00854 echo "Mais bien sûr, on trouvera beaucoup plus de références avec Google via ".href("http://www.google.fr/search?q=ruby+filetype%3Apdf","ruby filetype:pdf","gbleuf nou")."." ;
00855 finp() ;
00856
00857 ## -------------------------------------------------------------------------------------------
00858
00859 exo($nbexo,2) ;
00860
00861 finblockquote() ;
00862 finSection() ;
00863
00864 ##############################################################################################
00865
00866 $nbexo++ ;
00867 debutSection() ;
00868 h2(aname("$nbexo. Production automatique de documents structurés","dcts")) ;
00869
00870 ##############################################################################################
00871
00872 blockquote() ;
00873
00874 p("texte") ;
00875 echo "Les caractéristiques qui font la force et la faiblesse des langages de scripts sont en général :" ;
00876 finp() ;
00877
00878 ul() ;
00879
00880 debutli() ; p("texte") ;
00881 echo " leur coté interactif (ce qui facilite leur apprentissage) ;" ;
00882 finp() ; finli() ;
00883
00884 debutli() ; p("texte") ;
00885 echo " leur coté \"dynamique\" avec un typage souvent ".href(wikifr("Duck_typing"),"en canard","nou")." (!) ou ".href(wikien("Duck_typing"),"duck typing","nou").", " ;
00886 echo " ce qui évite le typage statique déclaratif et la gestion explicite de la mémoire ;" ;
00887 finp() ; finli() ;
00888
00889 debutli() ; p("texte") ;
00890 echo " l'utilisation d'un interpréteur du langage, ce qui évite la compilation et les dépendances ou liaisons à des fichiers binaires ;" ;
00891 finp() ; finli() ;
00892
00893 debutli() ; p("texte") ;
00894 echo " la centralisation des modules, packages et autres bibliothèques, ce qui fournit un accès rapide aux ressources." ;
00895 finp() ; finli() ;
00896
00897 finul() ;
00898
00899 p("texte") ;
00900 echo "C'est pourquoi ces langages sont les plus adaptés et les plus efficaces pour les «petites tâches» " ;
00901 echo " comme mettre en forme des documents, restructurer des informations en ligne, en colonne, aménager des titres et des rubriques... " ;
00902 echo " et pour interfacer ou créer des DSL (".href(wikien("Domain-specific_language"),"langages spécifiques","nou")."), " ;
00903 echo " sans compter bien sûr le \"collage\" entre commandes des systèmes d'exploitation ou la programmation de logiciel. " ;
00904 echo " Ainsi Rexx est le langage qui permet de programmer les éditeurs de type Xedit, Python sert à programmer le logiciel Gimp... " ;
00905 finp() ;
00906
00907 p("texte") ;
00908 echo "Du coup, il est relativement facile de \"démarrer\" dans ces langages via des " ;
00909 echo href("transvers.php","applications transversales","grouge nou")." comme " ;
00910 echo " la conversion pouces/centimètres, le comptage de lignes vides dans un fichier texte..." ;
00911 finp() ;
00912
00913 p("texte") ;
00914 echo "Il est clair aussi qu'écrire des interfaces avec " ;
00915 echo href("http://www.dev0.bplaced.net/quick/TclTk_quickref.pdf","Tk"). " (".href("tcltk_quickref.pdf","copie locale","gbleuf nou").") " ;
00916 echo " est beaucoup plus rapide et plus agréable à réaliser avec des langages de scripts " ;
00917 echo " qu'avec C ou Java (sans parler des interfaces basées sur Qt, Gtk ou wxWidgets). " ;
00918 echo " Ainsi le tutoriel ".href("http://www.tkdocs.com/tutorial/onepage.html","tkdoc-onepage")." montre comment profiter de Active Perl, Active Tcl, Active Python et " ;
00919 echo " Ruby pour réaliser les mêmes interfaces. Archive des scripts : ".href("tk4l.zip","","gvert nou").". " ;
00920 finp() ;
00921
00922 p("texte") ;
00923 echo "Enfin, comme la bureautique dispose de formats ouverts, notamment avec " ;
00924 echo href("http://fr.wikipedia.org/wiki/Rich_Text_Format","RTF")." (".href("../Tools/rtfspecs_1.9.doc","specs_1.9","gbleuf nou").") " ; ;
00925 echo " et " ;
00926 echo href("http://fr.wikipedia.org/wiki/Comma-separated_values","CSV") ;
00927 echo " et puisque " ;
00928 echo href("http://fr.wikibooks.org/wiki/LaTeX/Mise_en_forme_du_texte","LaTeX") ;
00929 echo " utilise des fichiers-textes comme source, il est très facile de produire des documents structurés pour " ;
00930 echo " le traitement de texte, les tableurs, et même pour l'édition de livres. Un exemple de tels formats est fourni " ;
00931 echo " ci-dessous avec les documents produits. " ;
00932 finp() ;
00933
00934 blockquote() ;
00935 table(1,15,"collapse") ;
00936 tr() ;
00937 th(); echo "Format" ; finth() ;
00938 th(); echo "Source" ; finth() ;
00939 th(); echo "Résultat" ; finth() ;
00940 fintr() ;
00941 tr() ;
00942 td() ; echo href("http://www.apprendre-en-ligne.net/LaTeX/IntroLaTeX.pdf","LaTeX") ; fintd() ;
00943 td() ; echo href("demo_tex.txt") ; fintd() ;
00944 td() ; echo href("demo_tex.pdf") ; fintd() ;
00945 fintr() ;
00946 tr() ;
00947 td() ; echo href("http://fr.wikipedia.org/wiki/Format_de_fichier","RTF") ; fintd() ;
00948 td() ; echo href("demo_rtf.txt") ; fintd() ;
00949 td() ; echo href("demo_rtf.doc") ; fintd() ;
00950 fintr() ;
00951 tr() ;
00952 td() ; echo href("http://en.wikipedia.org/wiki/Comma-separated_values","CSV") ; fintd() ;
00953 td() ; echo href("demo_csv.txt") ; fintd() ;
00954 td() ; echo href("demo_csv.xls") ; fintd() ;
00955 fintr() ;
00956 fintable() ;
00957 finblockquote() ;
00958
00959 p("texte") ;
00960 echo "La production automatique de dessins et graphiques via des scripts est possible aussi, bien sûr, notamment avec les formats " ;
00961 echo href("http://fr.wikipedia.org/wiki/Scalable_Vector_Graphics","SVG") ;
00962 echo " et " ;
00963 echo href("http://fr.wikipedia.org/wiki/Drawing_eXchange_Format","DXF") ;
00964 echo " sachant que " ;
00965 echo href("../Farcompr/sacor.htm#latex","LaTeX") ;
00966 echo " permet aussi de composer des petits graphiques avec son environnement " ;
00967 echo href("http://fr.wikibooks.org/wiki/LaTeX/Dessiner_avec_LaTeX/R%C3%A9alisation_de_graphiques_math%C3%A9matiques","picture") ;
00968 echo " mais aussi surtout avec " ;
00969 echo href("http://fr.wikipedia.org/wiki/PSTricks","PsTricks").". " ;
00970 echo " Il existe aussi de nombreux formats dédiés comme " ;
00971 echo href("http://figr.bzero.se/","pic").", " ;
00972 echo href("http://en.wikipedia.org/wiki/DOT_language","dot").", " ;
00973 echo " des librairies comme ".href("http://jpgraph.net/","jpgraph").", " ;
00974 echo href("http://raphaeljs.com/","raphaeljs")."... " ;
00975 finp() ;
00976
00977 p("texte") ;
00978 echo s_span("Notre cours ".href("../Pagsd","PAGSD")." (Production Automatisée de Graphiques,","bleu") ;
00979 echo s_span("Statistiques et Documents) montre tout cela en détail.","bleu")."." ;
00980 finp() ;
00981
00982 p("texte") ;
00983 echo "Si on demande à un progamme informatique d'écrire le code d'un autre programme, cela se nomme de la " ;
00984 echo href("http://en.wikipedia.org/wiki/Literate_programming","Literate programming","gbleuf nou") ;
00985 echo " mais c'est une autre histoire, tout aussi intéressante... " ;
00986 finp() ;
00987
00988 p("texte") ;
00989 echo "On trouvera dans les divers exercices proposés des exemples de \"petits programmes\" pour de «petites tâches»." ;
00990 finp() ;
00991
00992
00993 ## -------------------------------------------------------------------------------------------
00994
00995 exo($nbexo,2) ;
00996
00997 finblockquote() ;
00998
00999 ##############################################################################################
01000
01001 pvide() ;
01002 p() ;
01003 echo href("montresource.php?nomfic=scripts1.php","Code-source de cette page","orange_stim nou")."." ;
01004 finp() ;
01005
01006 finSection() ;
01007
01008 ##############################################################################################
01009
01010 finPage() ;
01011
01012 #######################################################################################
01013 #######################################################################################
01014
01015 function exo($num,$mode=1) {
01016
01017 #######################################################################################
01018
01019 # mode 1 : tdm ; mode 2 : dans la page
01020
01021 if ($mode==1) {
01022 tr() ;
01023 td() ; fintd() ;
01024 td() ; echo href("s1p".$num.".php?solutions=0"," exercices corrigés ","bouton_fin bleu_pastel nou") ; fintd() ;
01025 fintr() ;
01026 } else {
01027 p() ;
01028 nbsp() ;
01029 br() ;
01030 nbsp(10) ;
01031 echo href("s1p".$num.".php?solutions=0"," exercices corrigés ","bouton_fin vert_pastel nou") ;
01032 finp() ;
01033 } # fin si
01034
01035 } # fin de fonction exo
01036 #######################################################################################
01037 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)