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
= 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&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
= 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&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)