L'arrivée de Laurent et le retour de Richard
Un historique de toutes nos réunions
Nous avons mangé de la salade de foie de lapin (il n'y avait
plus de gésiers), des travers de porc, une andouillette et
une bavette. Nous avons bu du pastis, de la vodka,
un diabolo-citron, de la bière blanche et de la Leffe.
-
C'est la première fois que Laurent assiste à une réunion du
groupe de Paris. Il a participé à la réunion du 9 février
au café après
l'Assemblée Générale,
mais c'était
une réunion de l'association « Les Mongueurs de Perl »
plutôt qu'une réunion du groupe Paris.PM. Idem pour les
réunions en ligne du premier lundi de chaque mois.
Il a déménagé de Grenoble vers la région parisienne
au début de l'année 2008. Auparavant, il était le seul
membre du
groupe Grenoble.PM.
La liste de messagerie avait
plusieurs abonnés, dont certains qui s'abonnent à toutes les
listes de Mongueurs, quel que soit leur emplacement géographique :
Philippe (BooK), Sébastien (Maddingue) et quelques autres.
-
Ce n'est pas la première fois que Richard vient à une réunion.
Il est déjà venu à
quelques occasions
avant
la conférence
YAPC::Europe 2003
où il
a fourni le Wifi.
[ J'ai relevé également la mention du prénom Richard lors d'une réunion
d'août 2007, mais je ne me souviens
pas s'il s'agit de la même personne.
]
Son problème, c'est qu'il assure un cours d'informatique à Cergy
le jeudi matin à 8 heures. C'est pourquoi il a des réticences
à venir à nos réunions du mercredi soir qui durent assez tard.
Pour une raison inconnue, cette semaine le cours aura lieu
à 9 heures. De plus, avec la grève des transports en commun,
Richard peut se permettre d'arriver à 9 heures et demie.
C'est pourquoi il a pu se permettre de venir à notre réunion.
-
C'est le retour des
Journées Perl 2008
à Albi.
Pour la partie Perl, parmi les divers points marquants
de cette conférence, il y a eu la discussion
sur les tris,
qui a eu lieu lors du repas
du vendredi soir. Si la fonction de comparaison d'un
tri
renvoie une constante 1, pour prétendre
contre vents et marées que $b est toujours
supérieur à $a, alors le
tri
inverse la liste, un genre de
reverse
en moins performant. Et que se passe-t-il si la fonction de comparaison
renvoie -1 ? Normalement, elle devrait laisser la liste
telle quelle, puisque $a est toujours inférieur à $b.
Vous pouvez essayer avec le script suivant, auquel vous devrez fournir
un paramètre numérique entre 1 et 26 :
#!/usr/bin/perl
my @liste;
my $elem = 'a';
push @liste, $elem ++ for (1 .. $ARGV[0]);
$, = ' ';
print @liste, "\n";
print sort( { 1 } @liste), "\n";
print sort( { -1 } @liste), "\n";
Curieusement, il y a un seuil à 17--18, où le tri change de comportement.
L'un des participants à la conférence ne comprenait pas pourquoi il y avait
un seuil. La raison est sans doute la suivante : les tris
en O(n.log n) sont nettement plus compliqués que les tris
en O(n^2). Donc, pour n suffisamment faible, un tri en
O(n^2) est plus performant qu'un tri en O(n.log n). On peut supposer
que des tests ont été faits et que l'on a trouvé que dans l'interpréteur
perl, le moment où le tri O(n.log n) dépasse le tri O(n^2)
est lorsque l'on doit trier 18 enregistrements ou plus. Ou alors,
ce que je n'ai pas fait, on peut lire le source de Perl.
-
Ou alors, on peut demander à quelqu'un qui sait, tel David qui
résume les messages de la liste P5P.
Il nous explique que dans les anciennes versions, le tri
utilisé était le quick-sort de Hoare
(ou la variante Hoare-Knuth ?). C'est un tri
en O(n.log n) dans le cas général, mais dans le cas
le plus défavorable, il agit en O(n^2). Donc, il a été
question d'adopter un autre algorithme.
Un Perl-5 Porter a étudié la question
et a montré que le meilleur algorithme de tri était
le heapsort.
Puis quelqu'un d'autre a fait remarquer que la pratique
ne suivait pas ce résultat théorique et que, dans la pratique,
il était préférable d'utiliser un
merge sort.
En effet, le
heap sort
accède aux divers éléments du tableau à trier de façon apparamment désordonnée.
Tandis que le
merge sort
accède à des éléments voisins. Donc, le
heap sort
invalidera les caches mémoires de niveau 2 des processeurs, tandis que le
tri-fusion
en tirera partie. Si le nombre de comparaisons
est un peu plus important avec le
tri fusion,
cela provoquera néanmoins une activité inférieure sur le bus de données.
-
Toujours est-il que l'expérience effectuée avec le
script exposé ci-dessus est foireuse à la base.
La fonction de comparaison doit vérifier un certain
nombre de propriétés mathématiques :
- la réflexivité : la comparaison de $x avec $x doit renvoyer
zéro pour signifier l'égalité ;
- l'anti-symétrie : la comparaison de $x avec $y
doit donner le résultat inverse de la comparaison de $y avec $x ;
- la transitivité : si l'on a $x < $y et $y< $z,
alors on doit avoir $x < $z
Or, le renvoi systématique de la valeur -1 contredit la réflexivité
et l'anti-symétrie.
-
Lors de la réunion, j'ai repris pour Théo l'explication que
Laurent avait déjà entendue au petit-déjeuner à Albi, sur
le bug
du module
DateTime::Event::Sunrise.
Voici les explications, mais avec des valeurs numériques précises.
Ce module est la conversion d'une
fonction C dans le domaine public
écrite par Paul Schlyter.
À un moment, la fonction sun_RA_dec
calcule la position du soleil en
coordonnées équatoriales
et renvoie donc trois valeurs,
l'ascension droite
et la déclinaison,
exprimées en degrés
et la distance Terre-Soleil, exprimée en unités astronomiques.
Or, les commentaires de ladite fonction C signalent seulement
les deux premières valeurs, ils n'évoquent pas la distance Terre-Soleil.
La distance Terre-Soleil permet de calculer le rayon apparent du Soleil
vu de la Terre. Ce rayon est en moyenne de 0,2666 degrés, avec un
maximum de 0,2711 degrés et un minimum de 0,2622 degrés.
On a besoin du rayon apparent car le coucher du soleil correspond
au moment où le sommet du cercle disparaît à l'horizon.
C'est-à-dire, dans le
système de coordonnées horizontales,
au moment où
le centre du Soleil a une hauteur égale à moins le rayon apparent du Soleil.
Dans la fonction C d'origine, le rayon du Soleil s'appelait sr
(sun radius) et son ascension droite sRA
(sun Right Ascension). Comme les commentaires ne faisaient
pas mention du rayon du Soleil, le Perliste a confondu sr et sRA.
La plupart du temps, l'ascension droite, en degrés, est largement supérieure à 1.
Donc, le rayon apparent du Soleil, résultat du calcul 0.2666 / $sRA
était quasi-nul, ce qui faussait l'heure de coucher du Soleil
en lui donnant une avance de 1 à 3 minutes,
selon la latitude du lieu considéré. Mais le 21 mars, l'ascension droite
vaut une fraction de degré. Donc, le rayon apparent du Soleil était nettement
plus important, ce qui provoquait un retard énorme. En prenant au hasard
quelques couples de longitude et de latitude, j'en ai obtenu un
(longitude 92,33 et latitude 48,83) pour lequel le Soleil était
tellement gros qu'il y avait toujours un bout qui dépassait, donc il
ne se couchait jamais. Et pourtant, ce n'était pas au Pôle Nord ni au Pôle
Sud avec le soleil de minuit.
-
Dans ce module, il y avait des
tests.
Le problème, c'est que ces
tests
évaluent le lever et le coucher du Soleil uniquement les 19, 20 et 21 juin.
Il utilise de nombreux endroits sur Terre, mais c'est uniquement
des dates au mois de juin. D'autre part, je ne sais pas comment
l'auteur a obtenu les valeurs de test. Je suppose qu'il a lancé le
test sur sa machine et qu'il a considéré que les valeurs obtenues
étaient les valeurs que le module devait fournir. En d'autres termes,
le fichier de test vérifie que les résultats sont identiques
d'une machine à l'autre, pas qu'ils sont corrects. J'ai fait
pareil lorsque j'ai corrigé son module. La bonne solution
aurait consisté à prendre les heures sur un calendrier de la poste
(à condition d'avoir une collection de calendriers couvrant
toutes les régions de la Terre) ou sur des éphémérides.
-
Ainsi que je l'ai signalé
dans le compte-rendu du mois dernier,
j'ai installé
Bundle::DateTime::Complete.
Or, certains modules plantent au make test.
Dans ce cas,
cpanp
demande s'il faut installer quand même ce module.
Si l'on répond par la négative, il arrête toute installation,
même pour les autres modules du lot, dont la plupart
fonctionnent très bien. Et si l'on répond par l'affirmative,
il installe le module qui a échoué et traite les
modules suivants. Curieusement, l'un des modules qui échoue
aux tests est le module
DateTime::Calendar::Hebrew
qui convertit la date en calendrier hébraïque et qui, pourtant, me
donne entière satisfaction.
-
Et pourquoi est-ce que je m'intéresse au calendrier hébraïque
et au coucher du soleil ? Parce que tous les matins,
j'aime bien lire ceci :
Grégorien : 2008-06-11, mercredi 11 juin 2008
JD 2454629.27668981 MJD 54628.7766898149
La grande aiguille est sur le huit et la petite aiguille est sur le neuf
Zee beeg hund is un zee eight und zee little hund is un zee nine. Bork, bork, bork!
Lever du soleil à 05:45:04
Coucher du soleil à 21:55:38
Calendrier romain : III Id juin 2008
Julien : 2008-05-29, Wednesday 29 May 2008
Calendrier maya
12.19.15.7.6 (baktun, katun, tun, uinal, kin) 9 Zotz (Haab) 1 Cimi (Tzolkin)
Hébreu : 5768-03-08, Wednesday 08 Sivan 5768
Hijri : 1429-6-6 AH
Hobbit : Trewsday 21 Forelithe 7472
Calendrier républicain
0216-09-24T8:60:02, Quartidi 24 Prairial CCXVI, jour du caille-lait
24 Prairial II Armée de la Moselle. Passage de la Sambre, par l'armée de la Moselle ;
investissement de Charleroy.
Armée de la Moselle, des Ardennes, et du Nord réunies. Action vigoureuse sur plusieurs colonnes qui
repoussent tous les avants-postes de Charleroy, et se portent victorieuses jusqu'au dessus de
Gosselies.
24 Prairial III Armée de Sambre et Meuse. Prise de Luxembourg.
'Pataphysique
135-10-25, mercredi 25 Merdre 135, Apparition D'Ubu Roi
-
Revenons sur terre. Richard
s'intéresse, lui, aux coordonnées géographiques des
clients de la société pour laquelle il travaille, pour
savoir à quelle distance ces clients se trouvent
de telle ou telle agence. Cela l'a amené à programmer les
conversion entre les coordonnées Lambert 2 étendu,
utilisées par l'IGN,
et les coordonnées WGS
qui sont celles que donnent les GPS.
À noter qu'il existe en réalité plusieurs systèmes de
coordonnées Lambert 2 pour la France. Il y
en a un pour la métropole et il y en a un pour chaque
département ou territoire d'outre-mer.
-
En ce moment, le livre de chevet de Richard est la version française de
Perl Best Practices.
Un point qui l'a marqué est la nouvelle méthode pour
définir des objets en Perl, les
« objets inversés ».
Je comprends sa réaction. Nous avons l'habitude de nous représenter
une variable telle qu'un tableau, un hachage
comme un bloc compact de données élémentaires et nous nous attendons
à avoir la même représentation mentale pour une instance d'objet.
Et c'est le cas habituellement, une instance d'objet étant un
hachage « béni » par bless.
Or la méthode des
objets inversés
revient à répartir les attributs d'une instance
dans différents hachages, ce qui fait voler en éclats cette image
mentale d'un bloc compact.
-
Quelqu'un a demandé à David si les threads
fonctionnaient bien sous Perl. Éh bien pas vraiment.
Si le programme crée des threads trop
nombreux, il arrive un moment où ça foire.
-
David nous explique que les sources de Perl ont
migré d'un répertoire
Perforce
vers un répertoire
Git.
Et c'est grâce à
Sam Vilain
[ le mal-nommé ]
que tout a été migré,
jusqu'au moindre message de commit.
-
Lorsque des Perl Mongers étrangers font du
tourisme, il arrive qu'ils participent à
une réunion des groupes locaux sur leur itinéraire,
voire qu'ils déclenchent une.
Hélas, comme le déplore David, cela ne
s'est pas fait pour le voyage de
Brian D Foy
ou celui d'Adam Kennedy.
Quelqu'un lui fait remarquer que le voyage d'Adam
est encore à venir, il aura lieu au mois d'août
et, semble-t-il, Adam sera hébergé par Kai.
HTML 5 - CSS v3
Mongueurs de Paris, le 28 janvier 2021
Copyright © The Paris Perl Mongers, 1999-2024