Valid XHTML     Valid CSS2    

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 
;
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&nbsp;: 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&nbsp;: 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&nbsp;: Php et Javascript","nou")) ; fintd() ;
00047     fintr
() ;
00048     exo
(++$nbexo) ;
00049     
00050     tr
() ;
00051       td
() ; h3("5.") ; fintd() ;
00052       td
() ; h3(href("#rubypython","La &laquo;nouvelle garde&raquo;&nbsp;: 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 
;
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&acirc;che &laquo;volatile&raquo;. " ;
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&nbsp;? " 
;
00089      echo " De m&ecirc;me, et il s'agit là de t&acirc;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&nbsp;?" 
;
00092      echo " Là encore, quel langage de programmation, quel outil, logiciel ou commande utiliseriez-vous pour cela&nbsp;? " 
;
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")."&nbsp;: " ;
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&nbsp;:" 
;
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&ucirc;r deux répertoires." ;
00118     finp
() ;
00119     
00120     
00121     pre
("cadre") ;
00122       echo "\n" 
;
00123       echo "    wish tkdiff.tcl v417.r v461.r &amp; \n\n" 
;
00124     finpre
() ;
00125     
00126     p
("texte") ;
00127       echo "Voici une partie de la fen&ecirc;tre d'exécution de "
.b("TkDiff")."&nbsp;:" ;
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&acirc;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&ecirc;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&nbsp;: ils sont &laquo;prévus pour&raquo;. " 
;
00142       echo " C'est aussi ce qui a entra&icirc;né une certaine " 
;
00143       echo "&laquo;guerre des langages de programmation&raquo;" 
;
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 "&laquo;guerre des éditeurs de texte&raquo; " 
;
00148       echo "(vi est le meilleur, emacs est le meilleur, eclipse est le meilleur, etc.) " 
;
00149       echo " et la &laquo;guerre des navigateurs&raquo; " 
;
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&nbsp;?") ;
00156     echo " est aussi stupide que la question " 
;
00157     echo b
("quelle est la meilleure voiture&nbsp;?") ;
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&ecirc;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&ocirc;t ici le parti de présenter (un peu trop rapidement&nbsp;?) de nombreux langages, " 
;
00171     echo " avec une mise en avant de leurs points forts et parfois de leurs inconvénients. De la m&ecirc;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&acirc;che... " 
;
00177     finp
() ;
00178     
00179     h3
("$nbexo.2 Les langages de scripts&nbsp;: 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 &laquo;aggressifs&raquo;, 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&ecirc;me si les &laquo;nouvelles générations&raquo; 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&ucirc;r de l'expérience des autres langages et ils ont &laquo;bien s&ucirc;r &raquo; é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&ecirc;me s'ils sont payants. Car une des " 
;
00211     echo " caractéristiques des premiers langages de scripts était d'&ecirc;tre gratuits, ce qui à l'époque était une " 
;
00212     echo " nouveauté... " 
;
00213     echo " De m&ecirc;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&ecirc;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-&ecirc;tre " 
;
00221     echo " en raison d'une syntaxe trop différente, comme Apl, en son temps... Pourtant Tk (vous avez dit GTK&nbsp;?) é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 &laquo;*p&raquo; " 
;
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&ecirc;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&nbsp;: " 
;
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&nbsp;: " 
;
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&nbsp;: Awk et Rexx","awkrex"));
00282     #h2(aname("$nbexo. Les précurseurs&nbsp;: 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&ecirc;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 &ecirc;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&nbsp;: 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&ecirc;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&nbsp;: 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&ecirc;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&nbsp;: ") ;
00324     finp
() ;
00325     
00326     ul
() ;
00327       debutli
() ;
00328         p
() ;
00329           echo "mon \"vieux\" "
.href("../tuteurs/tutawk.htm","tuteur pour AWK")."&nbsp;;" ;
00330         finp
() ;
00331       finli
() ;
00332       debutli
() ;
00333         p
() ;
00334           echo "une "
.href("http://www.grymoire.com/Unix/Awk.html","longue introduction")." à AWK&nbsp;;" ;
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.&nbsp;Colishaw") ;
00356     echo " étaient&nbsp;: lisibilité, simplicité, portabilité car à l'époque, m&ecirc;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&nbsp;!) 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&ecirc;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&nbsp;: 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 &ecirc;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&ocirc;t que d'utiliser les batch de Dos et bash, par exemple. " 
;
00378     finp
() ;
00379     
00380     h3
("REXX&nbsp;: 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&nbsp;: ") ;
00389     finp
() ;
00390     
00391     ul
() ;
00392       debutli
() ;
00393         p
() ;
00394           echo "mon "
.href("../tuteurs/tutrexx.htm","tuteur pour REXX")."&nbsp;;" ;
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&nbsp;;" ;
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&nbsp;;" ;
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&nbsp;: 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'&ecirc;tre un \"perl-mongueur\" pour développer en Perl. " 
;
00452     finp
() ;
00453     
00454     h3
("Perl&nbsp;: points forts","gvert") ;
00455     
00456     p
("texte") ;
00457     echo "Bien conçu au départ pour &ecirc;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&nbsp;: 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&nbsp;?) y remédier. " 
;
00472     finp
() ;
00473     
00474     p
("texte") ;
00475     echo b
("Documents à lire&nbsp;: ") ;
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&ocirc;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&nbsp;: 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'&ecirc;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&ecirc;me étendu en "
.href("http://tix.sourceforge.net/","Tix").". ";
00533     finp
() ;
00534     
00535     h3
("Tcl/Tk&nbsp;: 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&nbsp;: ") ;
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&nbsp;: 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&ecirc;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&nbsp;: points forts","gvert") ;
00599     
00600     p
("texte") ;
00601     echo "Php s'installe facilement et peut m&ecirc;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&nbsp;: 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&ecirc;né mais saura pallier aux [nombreux] défauts de PHP." 
;
00611     finp
() ;
00612     
00613     p
("texte") ;
00614     echo b
("Documents à lire&nbsp;: ") ;
00615     finp
() ;
00616     
00617     ul
() ;
00618       debutli
() ;
00619         p
() ;
00620           echo "mon "
.href("../tuteurs/tutphp.htm","tuteur pour Php")."&nbsp;;" ;   ;
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) &nbsp;;" ;
00626         finp
() ;
00627       finli
() ;
00628       debutli
() ;
00629         p
() ;
00630           echo href
("http://tnx.nl/php.html","php in contrast to perl")."&nbsp;;" ;
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&ocirc;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&acirc;ce à "
.href(wikien("Nodejs"),"node.js")."." ;
00655     finp
() ;
00656     
00657     h3
("Javascript&nbsp;: 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&nbsp;: c'est donc le seul langage installé en standard sur tous les " 
;
00661     echo" ordinateurs&nbsp;! " 
;
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&nbsp;: 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&nbsp;: ") ;
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 &laquo;nouvelle garde&raquo;&nbsp;: 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&nbsp;: points forts","gvert") ;
00753     
00754     p
("texte") ;
00755     echo "Python est souvent décrit comme &laquo;"
.b("concis")." et ".b("élégant")."&raquo;. 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&nbsp;: 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 "&laquo;prolifération&raquo; de "
.b("self")." dans l'écriture de méthodes objets. " ;
00766     finp
() ;
00767     
00768     p
("texte") ;
00769     echo b
("Documents à lire&nbsp;: ") ;
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&ucirc;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 &laquo;agréable&raquo; à 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&nbsp;! 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&nbsp;: 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&nbsp;: 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&nbsp;: ") ;
00827     finp
() ;
00828     
00829     ul
() ;
00830       debutli
() ;
00831         p
() ;
00832           echo "mon "
.href("../tuteurs/tutruby.php","tuteur pour Ruby 1.9")."&nbsp;;" ;
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&nbsp;;" ;
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")."&nbsp;;" ;
00843           #echo "l'ouvrage ".href("http://majesticseacreature.com/rbp-book/pdfs/rbp_1-0.pdf","Ruby best practices","gbleuf nou")."&nbsp;;" ;
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&ucirc;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&nbsp;:" 
;
00876     finp
() ;
00877     
00878     ul
() ;
00879     
00880      debutli
() ; p("texte") ;
00881        echo " leur coté  interactif (ce qui facilite leur apprentissage)&nbsp;;" 
;
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&nbsp;;" 
;
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&nbsp;;" 
;
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 &laquo;petites t&acirc;ches&raquo; " 
;
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&ucirc;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&ecirc;mes interfaces. Archive des scripts&nbsp;: "
.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&ecirc;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&ucirc;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  &laquo;petites t&acirc;ches&raquo;." 
;
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","&nbsp;exercices corrigés&nbsp;","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","&nbsp;exercices corrigés&nbsp;","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 gH    Retour à la page principale de   (gH)