Présents à la réunion, en fonction de l'ordre d'arrivée
Olivier,
moi,
Xavier,
Sébastien,
Théo,
Éric (glb),
Romain,
Jérôme,
Laurent,
et David (L).
Nous avons mangé des blue-cheeseburgers, des magrets de canard, des pièces du boucher
saignantes,
des tartiflettes, des escalopes milanaises, des tartes au chocolat et des tartes Tatin.
Nous avons bu de la Beamish Red, de la 16, de la Desperado,
d'autres bières, une margarita et un gin fizz.
Olivier croyait que
Python
possédait un gros avantage sur
Perl,
à savoir la possibilité de surcharger les opérateurs
standards tels que « + » pour les faire
opérer sur des objets définis par l'utilisateur.
Il a même insisté sur ce point dans sa présentation de
Django
aux Journées Perl Francophones 2006
Or, en réunion, nous avons évoqué
useoverload;
Enfin la vérité éclate, tout ce que Python fait de bien,
Perl le fait depuis longtemps.
Au sujet d'overload, je rappelle le conseil de
Damian Conway
dans
Perl Best Practices :
il est souhaitable d'utiliser overload uniquement
lorsque les deux opérations, la surchargeante et la surchargée
sont analogues. En pratique, si l'on veut surcharger
« + », « - » ou « * », il faudra
une classe d'objet qui s'interprête comme un nombre. Donc, en
pratique, cela n'est utile que pour les modules du genre
Math::BigInt
ou Math::BigFloat.
Olivier me donne l'exemple de l'opérateur d'itération
« <> » qui peut s'utiliser de multiples
façons sans avoir besoin de donner une interprétation numérique
à la classe associée.
L'un des exemples les plus célèbres d'overload vient de
C++.
C'est l'utilisation du décalage binaire pour coder les entrées-sorties,
par exemple :
cout << "Hello world." << '\n';
En fait, l'utilisation du « << » pour les sorties
est très bien connue des programmeurs
C++,
plus que le décalage
binaire. La véritable confusion se produira lorsqu'un programmeur
C++
atypique utilisera le décalage binaire pour une multiplication
par 2, 4 ou 8 :
bzzownt = flibadip << 2;
J'évoque le programme de racine carrée
que j'ai annoncé
aux Journées Perl 2005
et qui n'a toujours pas avancé depuis. La version que j'ai
annoncée était en fait la troisième mouture du programme.
La première version du programme était très mal agencée.
Le programme faisait un aller-retour constant entre le calcul numérique
pour savoir quels étaient les chiffres à utiliser et la gestion
de chaînes de caractères pour savoir où les écrire.
La deuxième version était un peu plus propre, dans la
mesure où j'utilisais une classe d'objets, lesquels
s'interprétaient tantôt en tant que chaînes de caractères,
tantôt en tant que valeurs numériques. Avec, évidemment,
la surcharge des quatre opérations arithmétiques.
Si cela a amélioré une portion du code, en revanche
ce n'était toujours pas très propre. En effet, le
programme sort au choix du texte simple, du texte
HTML ou bien une animation
Curses,
tout en prenant soin de ne pas planter si l'utilisateur
demande du texte simple ou du HTML sur un site où
Curses n'est pas installé.
En d'autres termes, il y a des
require
à l'intérieur d'eval,
une abomination. La troisième version sera sous la forme d'un
module, qui possède toutes les connaissances mathématiques,
et de quelques scripts, peu doués en mathématiques, mais
chacun spécialisé dans un format de sortie : texte,
HTML, Curses, Perl-Tk, etc.
Comme l'a bien compris Olivier, un point essentiel est de bien
définir une API entre le module et les scripts.
J'ajoute que le module sera, à terme, capable de calculer les
additions, les soustractions, les multiplications et les divisons.
Peut-être même, pourquoi pas, d'autres algorithmes comme le
calcul du PGCD par l'algorithme d'Euclide.
Pour utiliser l'algorithme, il faut commencer par
adapter le calcul de la division en mettant le quotient
au-dessus du diviseur et non pas en-dessous. Par exemple,
au lieu de :
De la sorte, le quotient de la première division ne prend pas
la place destinée au reste de la deuxième division et ainsi de
suite. Il est alors possible d'obtenir la forme compacte suivante :
Parmi les fonctionnalités de génie de Perl, Xavier
nous évoque également
tie
ainsi que
Perlio,
qui permet d'ajouter des filtres sur des flux en
entrée ou en sortie, sans avoir besoin d'effectuer des
fork.
Ces filtres peuvent être la conversion
de CRLF en LF, le transcodage d'UTF-8 en ISO-8859
parmi de nombreuses possibilités.
Parfois, les fonctionnalités de Perl se marchent
mutuellement sur les pieds. C'est ainsi que
Xavier a voulu utiliser
AutoLoader
dans un script qui utilisait également
CGI.
Or, ce dernier module fait abondamment appel au mécanisme
d'AUTOLOAD et est donc incompatible avec
AutoLoader.
Quelqu'un a demandé comment faire pour imprimer les éléments
d'un tableau, à raison de 10 par ligne. À vrai dire,
je ne vois pas comment faire sans passer par une boucle
for ou while. La boucle intérieure
peut être une boucle implicite avec un
join
ou un map
mais la boucle extérieure sera une boucle explicite.
Xavier nous a évoqué son module
Lemonldap::NG
et son rapport avec
LemonLDAP
d'Éric German (un participant à nos réunions il y a quelques années).
Il s'agit d'une réécriture complète du code. Notamment, Xavier
a soigné l'indentation de son code, alors qu'Éric n'y a pas accordé
beaucoup d'attention. On peut trouver parfois une indentation
inverse, du genre :
sub thlup{my($spazat) = @_;print$spazat;}
[ Cela dit, il existe d'autres cas, comme
CPAN::Mini,
où l'on obtient un phénomène semblable à cause des tabulations qui
sont réglées à 4 positions chez l'auteur du module et à 8 positions
dans mon éditeur et dans
Search CPAN.]
Pour son module, celui avec « NG », Xavier a bénéficié
du contact avec Linagora. Par exemple, c'est sur leur suggestion
qu'il a ajouté la possibilité d'initialiser la base LDAP
avec des valeurs servant d'exemples. C'est bien simple (pour
les utilisateurs, pas pour lui), il suffit d'ajouter une dernière
étape après le make install :
make example
et c'est tout !
Lorsqu'une personne assiste à une réunion avec son ordinateur
portable et passe son temps à taper, nul doute qu'il porte
un soin particulier à conserver des notes sur la réunion...
Sauf si les notes qu'il tapent sont tout simplement de la
doc en format POD pour ses modules sur CPAN.
Un participant à la réunion nous a fait cet aveu.
J'ai repris avec Olivier l'explication que j'ai donnée
au mois de novembre
à Théo, au sujet de l'utilitaire que j'ai écrit en
Parse::Yapp.
Le langage utilisé dans mon travail utilise
les Call et les Goto, avec une
particularité : il est possible d'ajouter un
paramètre introduit par le mot-clé From
pour indiquer que l'étiquette de destination se trouve
dans un autre fichier. L'équivalent très approximatif
du :: de Perl. Un morceau typique de code
ressemble donc à ceci :
Call FLOBA_DAP(SKREECH + GWAP, ERR) From KABOOMM
If ERR
Goto KWOP
Endif
et dans le fichier KABOOMM.src
Subprog FLOBA_DAP(VALEUR, RC)
Value Integer VALEUR
Variable Integer RC
# etc.
sauf que nous n'utilisons pas
Acme::MetaSyntactic::donmartin
pour choisir nos identifiants. Pour revenir à nos moutons,
ma moulinette transforme ces portions de code en :
Call <a href='KABOOMM.html#FLOBA_DAP'>FLOBA_DAP</a>(SKREECH + GWAP, ERR) From <a href='KABOOMM.html'>KABOOMM</a>
If ERR
Goto <a href='#KWOP'>KWOP</a>
Endif
et pour le fichier KABOOMM.src
<a name='FLOBA_DAP'>Subprog FLOBA_DAP</a>(VALEUR, RC)
Value Integer VALEUR
Variable Integer RC
# etc.
Ma tâche a été facilitée par le fait que les appels à des
procédures sont des appels explicites par Call.
Le mot-clé Call n'existe à ma connaissance qu'en
COBOL.
Faux, me répond Olivier, c'était utilisé également
dans le shell de COMMAND.COM, lorsqu'un fichier
.bat demandait l'exécution d'un autre fichier
.bat. D'autre part, lorsque Microsoft est passé
à cmd.exe, le CALL a été utilisé également
pour des branchements à l'intérieur d'un même fichier de
commandes. Finalement, le CALL existe en
Visual Basic,
pour l'appel de procédures. Il est facultatif lorsque la procédure
requiert des paramètres (donc est facilement reconnaissable par
l'analyseur syntaxique grâce aux parenthèses) et il devient
obligatoire lorsque la procédure n'a pas de paramètre (donc difficile
à identifier s'il n'y avait ni parenthèses ni CALL).
Il a été question de la recherche d'un emploi et de
la tentation de pipeauter son interlocuteur pendant
l'entretien. Cela me rappelle
une discussion
sur fr.comp.lang.perl
où quelqu'un demandait comment faire croire à son recruteur
qu'il connaissait très bien Perl. Il n'avait reçu que
des réponses négatives. L'une d'elles émanait de Rafael
qui lui demandait s'il avait posté sa demande sous
sa véritable identité. En effet, il y a de fortes chances
que le recruteur fasse une recherche sur Internet
pour avoir une première idée de l'individu qu'il va
interroger...
En ce moment, Xavier est en train de travailler
sur une solution de SSO (Single Sign-On).
L'emploi de certificats avec de nombreux subjectAltName
permet de regrouper les sites https sur le même serveur. En
utilisant Firefox, on évite même les coûteuses négociations SSL
(26 échanges) car il détecte que le certificat présenté est le même.
Au début de l'ADSL, on pensait qu'à terme, les chefs-lieux de canton
du territoire français métropolitain seraient couverts à 25 % par l'ADSL.
On en est maintenant à 80 %. Néanmoins, cela ne change
pas grand-chose pour Xavier, car il y a des brigades
de gendarmerie dans les zones qui ne sont pas couvertes par
l'ADSL. Il est donc obligé de faire attention au volume
des échanges. C'est ainsi que pour une application
destinée à produire des documents officiels,
Xavier a dû batailler pour que ces documents soient
générés en PDF compressé, alors que son fournisseur voulait
transférer du PostScript sur le réseau.
Quant aux DOM-TOM (sauf qu'il faut dire maintenant
« collectivités d'outre-mer »), toutes les
brigades de gendarmerie ont une connexion à l'intranet
de la Gendarmerie Nationale. Y compris Marie-Passoula,
la brigade située en pleine forêt amazonienne, à
proximité de la frontière franco-brésilienne. Inutile
de dire que le débit est plutôt faible et qu'il est
important que les informations transmises par intranet
soient concises.
Heureusement, certaines applications
n'ont pas besoin d'être optimisées au maximum.
Par exemple, les gendarmes de Marie-Passoula
ou des autres brigades de la Guyane n'ont pas besoin de consulter le fichier
des véhicules volés. En effet, les pirogues n'ont pas
d'immatriculation. Et si un hydravion volé se pose
sur le Maroni, il s'arrangera pour avoir un flotteur
dans les eaux territoriales du Suriname et l'autre
dans les eaux territoriales françaises, donc il sera
impossible à arraisonner.
Il a été question d'un serveur d'applications nommé
Jonas,
mais je n'ai rien retenu de la discusion. Désolé.
Xavier nous a présenté un nouvel accessoire informatique.
Cela ressemble à une clé USB, mais avec un afficheur
à 7 LED sur le dessus et une molette (Jérôme
l'appelle « mini-souris ») sur le côté.
C'est bien une unité de stockage, mais avec cryptographie
et sécurité intégrées. Lorsque l'on branche la clé
sur un port USB, un « U » s'affiche et l'utilisateur
doit alors taper son mot de passe (entièrement numérique,
mais avec une longueur suffisante pour assurer une sécurité
adéquate). Tout ceci à condition, bien sûr, d'avoir
les bons drivers. Heureusement,
Bull
(car c'est lui le fabricant) a promis des
drivers Linux pour très bientôt.
La clé possède en interne des circuits cryptographiques
ce qui permet de l'utiliser pour stocker des clés privées
et des certificats, ainsi que pour négocier des clés
de session sans avoir besoin des fonctions cryptographiques
de l'ordinateur hôte. Et si la clé se fait voler,
le voleur n'aura aucun moyen d'accéder au contenu
de la clé. Tout ce qu'il pourra faire, c'est de la reformatter.
Les documents secrets seront perdus, mais pas divulgués ni
compromis.
Il a été beaucoup question de SAP et de son langage
de programmation
ABAP.
Ceux qui connaissent sont d'accord,
ABAP est un langage désagréable pour le programmeur.
J'en ai des souvenirs assez vieux, car j'ai travaillé
sur un site avec
SAP
en 1989. Mais je ne crois pas qu'ABAP
ait beaucoup gagné en élégance depuis cette époque.
D'autre part, nous avons un élément de comparaison
avec Perl : un script Perl de 300 lignes a
été converti en ABAP. Cela a nécessité 3 mois-hommes
pour la conversion.
SAP
est un progiciel très fourni. Bien que son domaine
d'activité soit la gestion (stocks, comptabilité, paie, etc),
il comporte son propre serveur web intégré. Mais comme
on a pu le constater, ce serveur travaille de façon assez
curieuse. Il comporte des URL à rallonge, plusieurs
milliers de caractères. D'autre part, on a parfois dans
la partie paramètre de l'URL (c'est-à-dire après le « & »)
un paramètre avec un mot-clé et une valeur, et lorsque l'on
examine le cookie de l'application,
on trouve un paramètre avec le même mot-clé et une valeur
différente. En poursuivant plus loin l'expérimentation,
on remarque que si l'on efface le paramètre de l'URL
pour ne laisser que celui du cookie,
cela fonctionne un peu mieux.
SAP possède également ses propres fonctions
de SSO. Ce qui n'empêche pas Xavier de vouloir
confier les contrôles d'authentification à
ses modules LemonLDAP::NG, comme toutes les
autres applications dont il s'occupe. Mais il a eu du mal
à faire admettre cela aux gens de SAP, qui auraient
préféré que Xavier configure les autres applications
pour utiliser le SSO de SAP.
Il a été question des machines
DG
(non, ce n'est pas
Digital, mais Data General). Ces machines ne sont plus
produites, mais il reste encore quelques sites qui
en utilisent. Heureusement, il y a une boutique
tenue par un chinois qui assure la maintenance des
disques Data General. En fait, ce chinois rachète
toutes les
machines DG
qu'il trouve (vente des Domaines, notamment), puis les
revend en pièces détachées.
Un autre participant, lui, est confronté à
Oracle Applications Services.
Il n'est pas en
relation directe avec Oracle, il passe par un
intégrateur. Un jour il a demandé à disposer
d'une fonctionnalité relativement évoluée.
La réponse de l'intégrateur : « Non,
Oracle ne sait pas faire. » Et pourtant
si, Oracle savait faire. Mais lorsque l'on
montrait les documents techniques prouvant
que c'était possible, l'informaticien de la
société intégratrice continuait à soutenir
que ce n'était pas possible.
Olivier m'a parlé d'un
éditeur
de partitions musicales
appelé
Lilypond.
Les fonctionnalités
de cette application sont assez élaborées. Notamment, lorsqu'il
y a deux partitions ou plus, pour indiquer plusieurs
airs dans un morceau polyphonique, il faut aligner
les notes entre les deux partitions. En particulier,
il faut parfois synchroniser deux partitions avec
des rythmes différents, par exemple, si une partition
a un rythme assez lent avec des noires et des blanches
et l'autre un rythme soutenu avec des croches et des
doubles croches, alors il faut espacer les notes
de la première partition pour respecter la synchronisation
avec la seconde. Et s'il s'agit d'une partition lyrique,
il faut également prévoir des espaces (en fait des tirets
de longueur variable) pour synchroniser les paroles.
En revanche, je sais qu'il existe
des extensions
pour écrire de la musique sous
LATEX.
Comme il a été implicitement expliqué ci-dessus,
les gendarmes de Marie-Passoula disposent de
l'Intranet. Mais ils ne sont pas reliés au
réseau électrique pour autant !
Outre les communications par voie hertzienne,
le seul moyen pour les rejoindre est l'hélicoptère.
Et encore, il faut prévenir de son arrivée suffisamment
longtemps à l'avance, pour que l'on puisse désherber
l'aire d'atterrissage de l'hélicoptère. À la vitesse
où l'herbe pousse sous ces latitudes, cela ne vaut pas le
coup d'avoir un terrain dégagé 24 heures sur 24 et 7 jours
par semaine.
Xavier continue à nous parler de contrées exotiques, mais
cette fois-ci dans l'Océan Pacifique. Bien que la France
soit une république, dans certaines îles ou certains
archipels de la Polynésie française, il existe encore
des rois. Ou alors, dans certaines îles, les seuls
représentants de l'administration française sont
les quelques gendarmes affectés à cet endroit.
Ils sont donc obligés d'assurer la fonction
d'officier de l'état-civil, de notaire, de juge de paix
et autres charges relevant d'un autre ministère ou
du secteur privé.
Xavier nous parle également des clandestins qui s'introduisent
illégalement en France et qui, s'ils se font prendre, sont
reconduits à la frontière. Il se trouve que, parfois,
ce sont les clandestins eux-mêmes qui se rendent à la
Police ou à la Gendarmerie pour se dénoncer. Paradoxe ?
Comportement incohérent ? Non. Ce sont des individus qui
sont venus travailler une saison ou deux en France et qui veulent
repartir chez eux à l'issue de cet intervalle de temps.
En se constituant prisonniers, ils sont reconduits à la
frontière par les forces de l'ordre, en d'autres termes
ils bénéficient d'un billet d'avion payé par les contribuables
français...
En commentant le fait que je ne prend jamais de bière, j'ai
dit que la dernière bière que j'ai consommée remonte à au moins
une décennie. Le fait de parler de la « dernière bière »
nous a évoqué le livre de Philippe Delerm,
la Première Gorgée de bière.
Dans la série « problèmes de communication »,
il a été question de réunions de travail houleuses où deux
équipes (j'ai failli dire « factions »)
s'affrontaient alors que dans le fond, elles étaient
d'accord. Simplement, elles utilisent des termes différents
pour les mêmes concepts, d'où une opposition apparente qui
entraîne une compétition pour imposer son point de vue.
Au cours d'une discussion sur le nombre de généraux dans les différentes
forces armées, j'évoque une réflexion que j'ai lue dans un
roman du début des années 1990, à l'époque où l'US Air Force
était encore découpée en Strategic Air Command,
Tactical Air Command et Military Airlift Command
(si mes souvenirs sont exacts). Dans ce roman, l'un des personnages
faisait remarquer que le Strategic Air Command
avait plus de généraux que d'avions.
[ Pour ceux qui veulent les détails, il s'agit de
The Minotaur,
de Stephen Coonts,
publié par Dell Books en avril 1990. ISBN 0-440-29512-2.
La citation se trouve dans les premières pages du quatrième
chapitre. ]
Et je suis désolé, je ne peux rien citer de ce qu'on dit ceux
qui étaient à l'autre bout de la table : David, Éric,
Ils ont sûrement raconté des anecdotes intéressantes, mais
ils étaient un peu trop loin pour que je puisse suivre
ce qu'ils racontaient.