Je hais la programmation multithreadée à un point qui devrait vous donner une très vague idée de l'infini. Si j'écoutais ma mauvaise conscience, étant d'une fainéantise crasse, je ne passerais pas ma vie à corriger des erreurs dans des bouts de programmes, qu'il s'agisse de simple fuite de mémoire ou comme on dit joliment de « race conditions », beaucoup plus pénibles à corriger car non reproductibles.
Le problème majeur de l'informatique moderne est la qualité du code qui tend asymtotiquement vers zéro et ce d'autant plus vite que la puissance des machines s'accroît. Je ne sais pas si vous voyez bien ce que je veux dire. À l'heure où il faut une machine tournant à l'aide de deux processeurs cadencés à quelques milliers de mégahertz et munie de quelques gigaoctets de mémoire vive pour afficher en deux ou trois secondes un bête 'Hello, World!' écrit en Java, il n'existe plus personne pour se préoccuper de l'utilisation optimale des ressources. Enfin, si, il reste des types comme moi qui n'ont pas vraiment le choix.
Mon problème est aujourd'hui le calcul intensif. Il faut absolument utiliser le maximum des possibilité d'un ordinateur pour réduire les temps de calcul. J'ai dû essayer une grande partie des outils disponibles sans trouver mon bonheur. Il faut dire que le plus petit calculateur à ma disposition est un système à trente-deux processeurs UltraSPARC et que l'immense majorité des outils ne s'adapte que très mal à une telle configuration. Sachant qu'on n'est jamais aussi bien servi que par soi-même, j'ai décidé de me prendre par la main et de coder mon propre langage de programmation. Il y a au moins deux avantages à cela, il suivra au mieux mes besoins et si je suis embêté par un problème dans ce langage, je ne pourrai m'en prendre qu'à moi-même plutôt que d'attendre le bon vouloir du concepteur pour apporter une correction. Toute médaille ayant son revers, je ne peux plus accuser un tiers des défauts de mes programmes et par moment, c'est vraiment difficile…
Depuis quelques années, je passe ainsi le plus clair de mon temps à rajouter des fonctions et corriger des dysfonctionnements majeurs provenant essentiellement des possibilités de programmation multitâche et multithread. En effet, chaque système d'exploitation comprend les spécifications POSIX de manière subtilement différente et parfaitement incompatible quand il n'en manque pas des bouts. Certains autre systèmes comme Windows sont même très reposants parce qu'ils ne comprennent rien.
Le dernier dysfonctionnement en date provient d'un calculateur fonctionnant sous Linux. Une machine vraiment spéciale puisqu'il s'agit d'un bête PC muni de deux processeurs amd64. Au bout de quelques heures d'un calcul d'optimisation, le processus s'arrêtait avec le message d'insulte suivant :
[1610] BUG! <librpl_liberation()> at line #767 of gestion_objets.conv.c
(*s_objet).nombre_occurrences=0
[1610-140395925845840] BACKTRACE <librpl_liberation()> at line #767
/usr/local/bin/rpl(librpl_liberation+0x36c) [0x48390c]
/usr/local/bin/rpl(librpl_liberation+0x1423) [0x4849c3]
/usr/local/bin/rpl(librpl_instruction_save+0x1f8) [0x533958]
/usr/local/bin/rpl(librpl_analyse+0xe1) [0x45bca1]
/usr/local/bin/rpl(librpl_evaluation+0x2773) [0x46fb13]
/usr/local/bin/rpl(librpl_traitement_interruptions_logicielles+0x142) [0x481d92]
/usr/local/bin/rpl(librpl_analyse+0x34f) [0x45bf0f]
/usr/local/bin/rpl(librpl_evaluation+0x2773) [0x46fb13]
/usr/local/bin/rpl(librpl_evaluation+0x1e39) [0x46f1d9]
/usr/local/bin/rpl(librpl_evaluation+0x3076) [0x470416]
/usr/local/bin/rpl(librpl_instruction_detach+0x23ad) [0x4b948d]
/usr/local/bin/rpl(librpl_analyse+0xe1) [0x45bca1]
/usr/local/bin/rpl(librpl_evaluation+0x2773) [0x46fb13]
/usr/local/bin/rpl(librpl_sequenceur_optimise+0x346) [0x553086]
/usr/local/bin/rpl(librpl_rplinit+0x3fea) [0x557e8a]
/usr/local/bin/rpl(main+0xd) [0x562cad]
/lib/libc.so.6(__libc_start_main+0xfd) [0x7fb076d24abd]
/usr/local/bin/rpl [0x454529]
[1610-140395925845840] END OF BACKTRACE
Pour le néophyte total et au premier abord, on ne peut pas prétendre que ce soit vraiment clair, mais ce message signifie qu'un objet dans la pile opérationnelle a été détruit à l'insu de l'utilisateur, ce qui n'est pas franchement normal. J'ai essayé de reproduire le problème sous Solaris, NetBSD, FreeBSD, MacOS X et Linux sparc64 sans aucun résultat. Le problème ne se produit que sous Linux amd64. Je n'aime pas ces problèmes qui dépendent à la fois d'une architecture et d'un système, ce sont les pires !
Quelques longues journées de débogage plus tard, à grands coups de printf(), valgrind, hellgrind et ddd pour l'analyse des cores, je découvre que le système de « copy on write » du fork() de certaines versions de la glibc était particulièrement moisi puisque qu'il créait une image indépendante d'exécution pour le fils que lorsque celui-ci tentait une écriture en mémoire indépendamment de ce que le père pouvait faire. Autant dire que le résultat était assez aléatoire. Le problème étant identifié, restait encore à le contourner, ce qui n'était pas une mince affaire, et à inclure dans le code source les corrections adéquates.
Avec le recul, je me demande de plus en plus comment des programmes écrits pour un système Unix peuvent fonctionner sur un autre Unix tant il y a de problèmes dans les différents appels système ou appels à la libc. Non seulement chaque implantation comprend autre chose des spécifications POSIX, mais il y a souvent un monde entre ce que l'appel est censé faire — aux dires de la documentation du système — et ce qu'il fait réellement. Cela passe par des erreurs non documentées ou de façon plus amusante par des arrêts brutaux pour cause d'erreur de segmentation.
Un exemple étant plus parlant qu'un long discours, voici la page de manuel de la fonction pthread_kill() de Linux :
DESCRIPTION
The pthread_kill() function shall request that a signal be delivered to
the specified thread.
As in kill(), if sig is zero, error checking shall be performed but no
signal shall actually be sent.
qui renvoie directement à la page de kill() indiquant ceci :
DESCRIPTION
The kill() function shall send a signal to a process or a group of pro-
cesses specified by pid. The signal to be sent is specified by sig and
is either one from the list given in <signal.h> or 0. If sig is 0 (the
null signal), error checking is performed but no signal is actually
sent. The null signal can be used to check the validity of pid.
puis un peu plus loin :
ERRORS
The kill() function shall fail if:
EINVAL The value of the sig argument is an invalid or unsupported signal number.
EPERM The process does not have permission to send the signal to any receiving process.
ESRCH No process or process group can be found corresponding to that specified by pid.
Cette description reproduit parfaitement les spécifications POSIX. Le seul problème est qu'un pthread_kill(tid, 0) sur un thread inexistant ne renvoie pas ESRCH dans la variable globale errno mais une erreur de segmentation !
Souvent, le soir, je rêve d'un monde, d'un monde dans lequel les développeurs des différents systèmes auraient compris la même chose des spécifications POSIX, d'un monde où les libc seraient entièrement déboguées…
Il devient impossible de trouver des ampoules à incandescence. Il paraît que c'est pour notre bien, que c'est bon pour le climat et plus économique.
En tant que président du conseil syndical de mon immeuble, j'ai eu la lourde charge de remplacer dans les parties communes ces fameuses ampoules à incandescence par des ampoules à basse consommation. Jusqu'à présent, je mettais des ampoules à incandescence Philips fabriquées spécialement pour les feux tricolores. Elles étaient difficiles à trouver, un peu plus chères mais résistaient très bien aux nombreux cycles d'allumage et d'extinction, en tout cas beaucoup plus que les ampoules installées par les sociétés de nettoyage qui terminaient au bout de quelques jours avec un filament cassé et un halo blanc, signe patent que le vide dans l'ampoule était imparfait. Le fabriquant ne devait pas avoir assez de marge par ampoule pour changer le joint de sa pompe à vide…
Grâce à notre cher gouvernement, on ne trouve plus d'ampoules de forte puissance à incandescence. Le but du jeu a donc été de trouver un moyen d'éclairage à baïonnette B22 pour mettre dans les appliques murales de marque Legrand. Aucune ampoule dite à basse consommation n'entrait dans ces globes en raison de leur forme. Je dois rajouter qu'il faut des ampoules spéciales capables de fonctionner sur une minuterie. Elles doivent s'allumer instantanément et ne pas vieillir prématurément en raison des nombreux cycles d'allumage et d'extinction. Autant dire qu'une telle ampoule est d'autant plus coûteuse qu'elle est difficile à trouver.
Pour pouvoir continuer à éclairer l'escalier de notre immeuble, nous avons donc dû changer les appliques et les ampoules. L'économie substantielle allait de paire avec un éclairage à peine suffisant. Tout était pour le mieux dans le meilleur des monde.
Ce qui m'amuse le plus, c'est la consommation électrique d'une telle ampoule. Si je prends l'ampoule Philips presque toute bête de 60 W, elle coûte 2 € et des poussières pour une durée de vie de 2000 heures. Elle consomme donc au cours de sa vie 60 kWh soit 6,50 € TTC au tarif actuel et règlementé de l'EDF qui devrait augmenter rapidement si j'en crois le courrier accompagnant la facture reçue aujourd'hui. Il suffit qu'elle soit allumée trois minutes pour permettre à un membre typique de la population des habitants de mon immeuble de gravir les cinq étages. Elle permet donc vingt mille passages dans l'escalier et le coût de chaque passage est de 0,0425 centime d'euro.
La lampe fluocompacte a une durée de vie un peu supérieure, mais il faut réduire les cycles d'allumage et d'extinction et donc régler la durée de la minuterie au maximum soit dix minutes. OSRAM me donne 15000 heures de fonctionnement et 15 W de consommation, ce qui nous fait 225 kWh. Sachant que cette nouvelle ampoule coûte 15 €, son coût total énergie comprise est de 39,40 € TTC. Elle ne permet que quatre-vingt dix mille passages puisque le reste de l'énergie est utilisée à éclairer un escalier vide. Son coût par passage est donc de 0,044 centime d'euro.
On voit donc par là que c'est avantageux.
On oublie aussi souvent très vite que l'énergie consommée par une lampe à incandescence n'est pas perdue. C'est autant de moins que l'on consomme en chauffage. Lorsqu'on aura rajouté le coût lié à la fabrication de la lampe fluocompacte ainsi que celui de son recyclage — parce qu'on peut dire ce que l'on veut, une ampoule à incandescence, c'est un bout de verre et un filament de tungstène plongé une atmosphère de gaz amorphe, il n'y a ni terre rare ni électronique —, on voit tout de suite l'intérêt de la chose et ce qu'on gagne à passer d'une lumière blanche de qualité à un éclairage fluorescent médiocre.
La question est maintenant de savoir à qui profite le crime.
Les journalistes ne devraient jamais faire de l'histoire. Ce matin, sur Radio Paris, pardon Paris Inter, non France Inter, nous avons eu une matinale spéciale de commémoration de l'appel du 18 juin avec force témoins.
Je n'arrive pas à imaginer que ces témoins, étant eux-même à Londres, aient pu oublier l'attitude qu'avait alors le gouvernement de sa très gracieuse majesté envers De Gaulle, général de brigade à titre provisoire depuis le 6 mai 1940, déserteur et sous-secrétaire d'état à la guerre et à la défense nationale du défunt cabinet Reynaud. Le cabinet britannique supportant Mandel, à ses yeux plus légitime et moins sulfureux, cet appel n'a pu être envoyé sur les ondes que grâce à l'intervention de Churchill qui en fera modifier les premières lignes dans un sens moins dur pour le gouvernement français.
Le 18 juin 1940, le seul homme politique qui soutenait De Gaulle à titre personnel était Churchill et il le soutenait contre l'avis de son propre gouvernement. On oublie un peu vite ce point. Ce n'est que bien plus tard, après qu'il a été déchu de ses droits, de sa nationalité, de son grade et condamné à mort par contumace et le gouvernement de Vichy le 2 août 1940 que l'opinion britannique et le parlement se mettent à le soutenir et que sa légitimité s'est peu à peu affirmée. Mais ce n'était pas parce qu'il était devenu légitime qu'il n'était pas embarrassant pour les alliés, principalement pour Roosevelt qui tenait absolument à faire de l'Europe en général et de la France en particulier un état faible et vaincu. L'administration de l'AMGOT voulait en effet aller très loin en ce sens et il ne faut pas oublier que Roosevelt s'est toujours arrangé pour limiter la place de De Gaulle et de la France Libre dans les diverses conférences ou opérations militaires sensibles.
Faire de l'appel du 18 juin 1940 l'acte fondateur de la France Libre est donc un peu court. Cet acte n'est que le prolongement logique d'une démarche beaucoup plus ancienne, d'une réflexion complexe sur ce qu'est la France. L'acte fondateur n'est pas cet appel du 18 juin, entendu par à peine une poignée d'auditeurs, ni même celui du 22 juin. L'acte fondateur est le retournement de l'opinion et du parlement britanniques à la suite de la condamnation d'un général français pour acte de résistance. C'est l'État Français lui-même qui, par la condamnation de Clermont-Ferrand, a donné sa légitimité à son plus farouche ennemi et a forcé la main des alliés qui, contraints et forcés, ont dû accepter De Gaulle et faire avec lui.
Par ailleurs, j'aimerais connaître la légitimité qu'a le professeur Jacquard à parler de ce sujet. Il me fait souvent penser à Yves Montand qui donnait son avis sur la Pologne lorsqu'on lui demandait de chanter Barbara alors qu'il se chauffait avec le gaz acheté aux russes.
J'ai horreur qu'on me prenne pour un imbécile. C'est vicéral. J'essaie pourtant de me soigner du mieux possible mais force est de constater que le résultat n'est pas à la hauteur des efforts consentis.
J'ai reçu par le courrier d'hier un papier du RSI (régime social des indépendants qui est la sécurité sociale du chef d'entreprise) s'intitulant pompeusement :
« déclaration commune des revenus des professions indépendantes 2009 ».
Je garde précieusement les enveloppes de tous ces papiers, le cachet de la poste faisant foi.
Ayant un contrôle fiscal la semaine prochaine, je n'étais pas en état de remplir immédiatement ce papier. Je ne sais pas si vous savez ce qu'est une contrôle fiscal, ni quel travail cela demande. Il s'agit à un instant donné de faire une consolidation des comptes d'attente d'une entreprise et un arrêté des impôts, taxes et prélèvements divers. En d'autre termes, cela revient à publier un bilan intermédiaire. Autant dire tout de suite que ce papier du RSI a attendu sur mon bureau jusqu'à ce matin où j'ai ouvert la notice explicative. Ce terme doit vous sembler bizarre, mais il y a bien une notice explicative qui devrait être fournie avec une loupe. J'aime autant vous dire que cette notice est absconse puisque que la même déclaration sert pour :
et que tous ces organismes demandent des informations subtilement différentes.
Une aspirine plus tard et un coup de téléphone à ma comptable, je m'entends dire que n'ayant pas reçu la déclaration plus tôt, celle-ci en avait rempli une et l'avait déjà envoyée il y a plus de deux mois. En effet, je vois en tout petit au haut de la première page que ce document doit être retourné avant le 1er mai 2010 sous peine de taxation d'office et de pénalités conséquentes ! Le cachet sur l'enveloppe indique pourtant très clairement que ce pli a été envoyé le 11 juin 2010 à Strasbourg en courrier à tri diurne plus connu sous le nom de tarif lent.
Demander des informations pour le 1er mai dernier délai, sous peine de pénalités, par un courrier envoyé le 11 juin ne semble choquer personne. Nous vivons une époque résolument moderne.
Au-dessus d'un certain prix, on paie une marque. En revanche, en-dessous d'un certain prix, il faut bien reconnaître qu'on n'en a que pour son argent. J'ai peine à croire qu'on puisse concevoir ou prétendre le contraire.
Je ne dis pas ça parce que je suis fâché, simplement parce que j'en ai assez qu'on me dise qu'un certain nombre de choses sont gratuites : voix sur IP, hébergement informatique, logiciel et j'en passe. Toutes ces choses ont un coût, payé par l'utilisateur final directement ou indirectement.
Lorsque j'utilise un logiciel libre développé par un tiers, j'ai payé d'une manière ou d'une autre ce logiciel. Je peux le payer directement en espèces sonnantes et trébuchantes ou indirectement, soit parce que j'ai acheté un produit développé grâce à ce logiciel, soit parce que le coût de ce logiciel est porté par toute une société aux travers d'impôts et de subventions diverses. De la même manière, lorsque je donne au monde entier un logiciel libre, je ne le fais pas par bonté d'âme, mais parce que ce n'est pas le but ultime de mon travail. Je développe un logiciel parce qu'il m'est utile et non comme une fin en soi (voir pour cela le RPL/2 ou FreeVMS). L'argent que je gagne est donc produit par ce que je fais de ces logiciels et non par les logiciel eux-mêmes. Je n'ai pas l'impression d'être le seul à me comporter de la sorte puisque derrière la plupart des grands projets de logiciels libres se trouvent presque toujours une ou plusieurs entreprises d'envergure internationale.
Le problème est que l'immense majorité des utilisateurs est convaincue que ces outils n'ayant souvent aucun coût sont gratuits et étendent ce raisonnement faux au reste des prestations informatiques. Combien de fois n'ai-je pas entendu :
et j'en passe… Mais bougres d'imbéciles, comment croyez-vous que votre fournisseur d'accès internet rémunère l'entretien du réseau de cuivre si ce n'est en payant un abonnement à France Telecom ? Comment croyez-vous que vous pouvez utiliser l'espèce de système d'exploitation que prétend être Windows sur votre ordinateur si vous n'aviez pas payé Microsoft pour obtenir une licence d'utilisation que la plupart du temps vous n'avez pas lue ? Parce que si vous l'aviez lue…
Ces mêmes personnes tiennent exactement le même résultat sur toutes les autres prestations, surtout lorsqu'elles ne peuvent pas les toucher. C'est particulièrement vrai lorsque l'on touche à l'hébergement de services (serveurs de courriers électroniques, serveurs web…). On voit actuellement fleurir des sites marchands proposant tout et n'importe quoi et surtout à n'importe quel prix. Je n'arrive pas à saisir que quelqu'un se fasse attraper par des hébergeurs qui facturent moins de 10 € TTC pour une connexion à 100 Mbps full duplex et un serveur mutualisé en Raid5, le tout avec une garantie de temps de rétablissement de quatre heures en jours ouvrés. Ce n'est même pas le prix du transit et on n'a encore payé ni l'amortissement du matériel, ni la redondance, ni l'ingénieur système pour sa maintenance, ni ses astreintes.
Pour un tel tarif, il ne faut pas s'attendre à des miracles, tout au plus à de la publicité mensongère. Après tout, ce n'est pas mon problème et les gens ont le droit de choisir leur poison. En revanche, lorsque je dois parler à ces prestataires, ça se corse singulièrement. Cette semaine, j'ai dû transférer une zone DNS d'un prestataire normal à ce genre de gougnafier « low cost » qui a piégé un client à l'aide de conditions qui ont été déclarées abusives par les tribunaux français. Sans doute la personne en question ne va-t-elle pas engager une procédure judiciaire pour quelques euros…
Je disais donc, avant d'être interrompu par moi-même, que je devais migrer une zone DNS. Chez n'importe quel prestataire sérieux, c'est l'affaire de quelques minutes. Cela fait une semaine que je bataille contre ce prestataire, un peu comme Don Quichotte contre ses moulins à vent. Le zonecheck de l'AFNIC échoue parce que l'adresse de messagerie du propriétaire de la zone n'est pas joignable. J'essaie à la main et au bout d'une quinzaine de minutes, le message de test passe. Il y a donc bien un serveur MX qui gère la zone. Deuxième essai, deuxième refus. J'effectue la transaction à la main avec un telnet bien senti sur le port 25 dudit MX. Le 'EHLO' se passe bien, les étapes 'MAIL FROM:' et 'RCPT TO:' aussi. Tiens donc, ce serveur semblait pourtant se comporter comme s'il entretenait une liste grise. J'aurais déjà dû recevoir une erreur temporaire 4xx. Je poursuis avec un 'DATA' et cet espèce de serveur administré avec un pied gauche me renvoie immédiatement une erreur temporaire 450. Ce sale truc effectue un greylisting concernant le couple expéditeur et récepteur lors du traitement du 'DATA' et non du 'RCPT TO:' et renvoie un code non conforme !
Trois coups de téléphone à une boîte vocale surtaxée, cinq mails au prestataire n'ont rien changé. Je n'ai même pas eu une réponse automatique, juste un numéro de ticket à ce jour non traité. Comment voulez-vous après que les mêmes individus prétendent garantir un temps de rétablissement ? Lorsque je vois que les mêmes personnes proposent de gérer pour des professionnels leurs serveurs de messagerie électronique, j'ai beaucoup de peine à empêcher une certaine tétanisation crispée de mes zygomatiques.
Ce n'est pas tout de proposer n'importe quel service informatique à n'importe quel prix. Encore faut-il être compétent, savoir lire les spécifications, les comprendre et ne pas mépriser ses clients liés par des conditions de vente abusives !
Pages: << 1 ... 193 194 195 196 197 198 ...199 ...200 201 202 203 204 >>