• # commentaires

    Posté par  . Évalué à 5 (+5/-2).

    régalez-vous des commentaires sur ce site. Comme si l'informatique était une évidence pour tout un chacun.

    On peut aussi voir dans l'algorithme des années bisextiles, un lien avec Jésus ; puis un autre de rappeler que "l'année solaire dure 365,2425 jours calendaires" ; ouf …

    • [^] # Re: commentaires

      Posté par  (Mastodon) . Évalué à 10 (+12/-0).

      Il y en a aussi des bons :

      Blague qui circulait avant l'an 2000 à propos du bug Y2K (year 2000):
      Dieu convoque Clinton , Poutine et Bill Gates peu avant l'an 2000 , leur annonce la fin de monde en l'an 2000 et leur demande de transmettre l'information .
      1) Clinton à ses concitoyens : J'ai une bonne et une mauvaise nouvelle
      La bonne est que Dieu existe , la mauvaise est que c'est bientot la fin du monde.
      2) Poutine à ses concitoyens : J'ai 2 mauvaises nouvelles
      La 1ere mauvaise nouvelle est que Dieu existe et la 2eme est que c'est bientot la fin du monde.
      3) Bill Gates à ses employés : J'ai 2 bonnes nouvelles
      La 1ere bonne nouvelle est que Dieu estime que je se suis l'un des 3 plus importantes personnes sur terre . La 2eme bonne nouvelle est qu'il n'est plus nécessaire de travailler sur le bug Y2K

      (je la connaissais pas, ça m'a bien fait marrer en tous cas :) )

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Année bissextile, an 0, seconde intercalaire, et bien d'autres

    Posté par  (site web personnel) . Évalué à 10 (+7/-0).

  • # Ailleurs

    Posté par  (site web personnel) . Évalué à 7 (+5/-0).

    Matt Johnson-Pint a compilé une liste de bugs survenus le 29 février :

    https://codeofmatt.com/list-of-2024-leap-day-bugs/

  • # Comment est-ce possible ?

    Posté par  . Évalué à 10 (+8/-0).

    Moi j'aimerais bien avoir une explication technique, comment est-il possible d'ignorer une année bissextile ? Je n'ose imaginer que les développeurs qui ont codé tous ces logiciels buggués sont ignorants au point qu'ils ne sauraient pas qu'une année peut avoir 366 jours et que même cela arrive assez souvent.
    Je croyais que pour tous les langages à la mode il existe des bibliothèques qui gèrent les dates et les calendriers avec toutes leurs particularités. Du coup est-ce que quelqu'un saurait décrire un exemple où il faudrait spécifiquement traiter le cas où le jour suivant le 28/02 n'est pas le 01/03 ?

    • [^] # Re: Comment est-ce possible ?

      Posté par  (site web personnel) . Évalué à 10 (+12/-0).

      Je pense qu'il y a sans doute le fait que les libs en question sont quand même un peu obscur.

      Mon premier code python était en python 2.2 ou 2.3 (et pendant longtemps, j'ai pensé que 2.4 était un peu bleeding edge), j'ai fait du python depuis le début de ma carrière, je parle régulièrement à pycon, et pourtant, la semaine derrière, j'ai du utiliser datetime en python, et j'ai encore eu du mal à m'y retrouver pour faire ce que je voulais (à savoir avoir un chaîne avec la date/heure dans 1h et 2h pour une API REST distante, avec la gestion des timezones).

      je dit pas que c'est impossible ni compliqué, vu que j'ai fini par écrire les 2 lignes requises, mais bon, je peux voir comment des gens avec finalement moins d'expérience peuvent se planter et avoir du mal.

      Et ça, c'est avec python qui a une lib correct. Tu parles des langages à la mode, mais si tu regardes la liste donnée plus haut, les 2 premiers sont des problèmes sur des terminaux de paiement, donc probablement de l'embarqué, probablement du C ou du C++, donc sans doute du code fait main.

      Dans la catégorie medium, il y a deux fois des smartwatchs (donc encore du C), et coreboot (encore du C).

      J'ai rien contre le C ou l'embarqué, mais ça rentre pas dans "langages à la mode avec une bibli toute faite".

      Dans la liste aussi, l'exemple le plus intéressant est celui la: https://github.com/phoenixframework/phoenix/issues/5737

      Le code rajoute 1 an sur l'année et le correctif est de rajouter 365 jours à la place. J'aurais sans doute pu faire la même connerie en python, car c'est plus simple de décomposer l'année que d'utiliser deltatime(year=1).

      Quand tu regardes les autres, j'ai le sentiment que c'est le genre de bug qui vont découler du fait que les biblis fancys dont tu parles n'ont pas les fonctions toutes faites, ou peuvent avoir des bugs.

      Par exemple, ça va tomber sur les calculs de récurrences. Si tu fait un cronjob qui se lance automatiquement au bout d'un 1 an à la même date (par exemple, à l'installation d'un système), il faut pas que tu le fasse un 29 février, car une implémentation naïve (à savoir la date du jour dans la ligne cron) va se lancer 1 fois tout les 4 ans.

      Je pense qu'il y a plein de soucis subtiles qui ne sont pas évident quand tu fais des choses qui ne semblent pas être de la gestion de temps classique.

      • [^] # Re: Comment est-ce possible ?

        Posté par  . Évalué à 4 (+2/-0).

        Je comprends mieux. Merci d'avoir pris la peine de rédiger cette explication détaillée, finalement plutôt réconfortante : pas besoin d'ignorer ce qu'est une année bissextile pour ne pas éviter un bug du 29/02. :-D

        • [^] # Re: Comment est-ce possible ?

          Posté par  . Évalué à 6 (+4/-0). Dernière modification le 03 mars 2024 à 13:54.

          Le temps c'est vraiment compliqué et les bibliothèques vraiment bien faites ça ne court pas les rues.

          J'ai par exemple vu des bugs arriver au changement d'année alors que ce n'est pas un cas bizarre. Il avait même était testé sur le changement d'année. Mais qui pense que pour toute date tu peux retrouver son année et l'année de sa semaine et que ça peut ne pas correspondre (quand l'année ne commence pas un lundi) ? Et tester ça en 2017 quand comme ce fut le cas cette année le premier janvier tombe un lundi ?

          Je trouve la bibliothèque des dates de java excellente (elle a de quoi représenter à peu près tout ce dont tu peux avoir besoin), mais j'ai toujours un doute quant à la manière de faire pour changer une timezone. Il m'arrive de vouloir prendre le premier janvier 1970 00:00 UTC et de vouloir juste remplacer la timezone (donc être toujours à 00:00) ou de vouloir le traduire avec une autre timezone et donc potentiellement tout changer. Les deux sont possibles, mais ça n'est pas intuitif à utiliser.

          Résonner avec des timezone du type Europe/Paris plutôt qu'en offset n'est pas non plus intuitif.

          C'est un réel savoir de manipuler les dates et aujourd'hui ça s'apprend beaucoup sur le tas.

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: Comment est-ce possible ?

      Posté par  (site web personnel) . Évalué à 7 (+5/-0).

      Le bug arrive quand tu penses que c'est pas nécessaire d'utiliser une telle bibliothèque. Genre tu veux toutes les données d'une base sur 1 an, c'est facile, il suffit de faire une requête sur la plage 2024-02-29 à (2024 moins 1)-02-29, et pouf!

      Un LUG en Lorraine : https://enunclic-cappel.fr

    • [^] # Re: Comment est-ce possible ?

      Posté par  (Mastodon) . Évalué à 7 (+4/-0). Dernière modification le 03 mars 2024 à 08:41.

      est-il possible d'ignorer une année bissextile ?

      Tu saurais, sans relire Wikipedia, me donner la règle des années bisextiles ? Parce que "tous les 4 ans" c'est pas ça.

      La gestion du temps c'est toujours compliqué, et c'est toujours un piège à con.

      Ma théorie c'est simplement que ces bugs sont faits par des informaticiens "normaux" qui ont sous estimé la complexité de gestion du temps. Soit ils ont bricolé leurs propres fonctions, soit ils ont mal utilisé une lib, mais dans tous les cas ils n'ont pas été spécialement sensibilisés au problème et <paf> pastèque.

      Et la remarque va sur le code mais surtout sur les tests.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Comment est-ce possible ?

        Posté par  . Évalué à 10 (+11/-0).

        Tu saurais, sans relire Wikipedia, me donner la règle des années bisextiles ?

        Oui.

        Parce que "tous les 4 ans" c'est pas ça.

        Je sais. Cela dit rater un 29 février en 2024 alors qu'on en a eu un en 2020, 2016, 2012,… ça me parait plus inquiétant que d'en mettre un en 2100.

    • [^] # Re: Comment est-ce possible ?

      Posté par  . Évalué à 5 (+4/-0).

      Moi j'aimerais bien avoir une explication technique, comment est-il possible d'ignorer une année bissextile ?

      Je n'ai aucune statistique, mais je pense qu'une grosse part des bugs sont des cas stupides qui ont été ignorés pour aller plus vite ou parce que pas pertinent à une époque puis ça l'est devenu, ou parce que cachés au fond d'une complexité de code.

      Ceux qui concernent les années bissextiles sont plus exposés médiatiquement mais au final ça reste des bugs comme des millions d'autres qui ont lieu tous les jours mais qui sont moins accessibles au grand public.

      • [^] # Re: Comment est-ce possible ?

        Posté par  (site web personnel) . Évalué à 4 (+2/-0).

        parce que cachés au fond d'une complexité de code

        date à la seconde près - date à la seconde près 1h avant = 3600 s ?

        mais au final ça reste des bugs comme des millions d'autres qui ont lieu tous les jours

        un peu comme le changement d'heure deux fois par an…
        qui irait croire qu'il n'y a pas 24 h / j, 1440 min / j, 86400 s / j : c'est pourtant bien connu ! (on va en reparler ce mois-ci :/)

        • [^] # Re: Comment est-ce possible ?

          Posté par  (site web personnel, Mastodon) . Évalué à 5 (+3/-0).

          qui irait croire qu'il n'y a pas…

          À tout hasard :

          • Des gens qui sont au courant des secondes intercalaires (RIP « 86400 s / j »)
          • Les gens qui savent qu’entre deux jours il peut historiquement y en avoir plusieurs (au moins le saut du calendrier julien au grégorien)
          • Tous les Jack Baeur dont la journée dure plusieurs épisodes, et d’autres qui soufflent de voir arriver la fin du Jour de la marmotte, etc.

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

          • [^] # Re: Comment est-ce possible ?

            Posté par  . Évalué à 2 (+0/-0).

            au moins le saut du calendrier julien au grégorien

            Les changements de calendrier c'est encore autre chose. Tu n'ajoute pas une mesure d'un calendrier à un autre, ça reviens à ajouter des °C et des °K.

            https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

            • [^] # Re: Comment est-ce possible ?

              Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

              Je pense à des questions simple comme : En Bulgarie, quel fut le lendemain du 31 mars 1916 ? (c’est une question classique que les implémentations GNU et BSD des commandes date savent résoudre …sous réserve de ne pas s’y prendre naïvement.)
              Je pense à des formulations connues comme : Sainte Thérèse d'Avila est morte dans la nuit du 4 au 15 octobre 1582.
              Je ne disais pas d’additionner des calendriers mais de traiter des successions de jours… (Accessoirement on sait ajouter des Celsius à des Kelvin si l’addition fait sens. Je pense que tu fais allusion à l’addition de températures absolues et là pas besoin de changer d’unité pour que ce soit sans valeur —à ne pas confondre avec impossible, bref.)

              “It is seldom that liberty of any kind is lost all at once.” ― David Hume

              • [^] # Re: Comment est-ce possible ?

                Posté par  . Évalué à 3 (+1/-0).

                Accessoirement on sait ajouter des Celsius à des Kelvin si l’addition fait sens.

                Il faut une étape en plus ne serais-ce que pour affirmer l'unité de ton résultat.

                En Bulgarie, quel fut le lendemain du 31 mars 1916 ?

                Comme le montre ta réponse ce n'est même pas une question de calendrier. Seul tzdata référence ce genre de choses. Il faut avoir une notion géographique précise pour pouvoir faire ce genre de manipulation, ce n'est pas tout EET qui a fais ce changement. Je suis curieux parce que je n'arrive pas à faire faire la déduction à date.

                TZ=':Europe/Sofia' date -d 'March 31 1916 +1 days'

                me donne le premier avril et pas le 4… mais je l'ai du premier coup en java ! ZonedDateTime.parse("1916-03-31T00:00:00+02:00[Europe/Sofia]").plusDays(1) (j'aime vraiment beaucoup la bibliothèque de dates de java).

                https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

        • [^] # Re: Comment est-ce possible ?

          Posté par  . Évalué à 3 (+1/-0).

          date à la seconde près - date à la seconde près 1h avant = 3600 s ?

          C'est vrai en POSIX qui décrit l'heure comme étant 3600s et le jour comme 86400s (et bien sûr les minutes comme étant 60s). D'ailleurs la commande date ne sait pas lire 2016-12-31T23:59:60UTC.

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: Comment est-ce possible ?

      Posté par  (site web personnel, Mastodon) . Évalué à 4 (+2/-0).

      Un exemple dont je me souviens est le lecteur mp3 Zune de Microsoft (oui, ça nous rajeunit pas). Ils utilisaient une fonction qui calculait, je crois, le "jour julien" (numéro du jour dans l'année). Cette fonction prenait bien sûr en compte le cas du 29 février, mais avec un bug qui faisait qu'elle se retrouvait en boucle infinie.

      Le plus triste, c'est qu'ils avaient recopié cette fonction depuis un exemple dans une documentation de Motorola. Et que d'autres logiciels avant ou après s'étaient déjà fait piéger par ce bug en recopiant ce bout de code depuis la même documentation.

      Les calculs de jour julien, numéros de semaines, tout ça, j'imagine bien que ça peut être utilisé dans le monde bancaire.

      Pour l'éclairage public, je peux imaginer une table "date du jour-> horaires d'allumge" avec un trou le 29 février dans la table harce que ce jour n'était pas affiché pour la personne (ou l'algorithme) qui a rempli la table.

    • [^] # Re: Comment est-ce possible ?

      Posté par  (site web personnel, Mastodon) . Évalué à 3 (+1/-0).

      Parce que certains dev pensent que c’est plus facile de gérer les dates à la main que d’utiliser la librairie de leur langage (et de lire la doc associée).

      • [^] # Re: Comment est-ce possible ?

        Posté par  . Évalué à 4 (+2/-0).

        Ou tout simplement car ils ne savent meme pas que la lib/fonction existe, ou qu'ils n'imaginent même pas qu'il puisse y avoir une quelconque complexité. Dunning-Kruger, quand tu nous tiens…

        • [^] # Re: Comment est-ce possible ?

          Posté par  . Évalué à 3 (+1/-0).

          Il faut faire attention avec les jugements

          Pendant longtemps et encore beaucoup de langages ont des bibliothèques standards de gestion de dates anémiques. Il n'est pas rare non plus de devoir gérer un truc à la main car impossible avec la bibliothèque que tu utilise1. Tout le monde n'est pas d'accord non plus POSIX a définit le temps de manière simpliste par rapport à ce que fait l'IANA.

          Il y a 2 ensembles de développeurs ceux qui se sont plantés avec des dates et ceux qui vont se planter avec des dates. À chacun de s'attacher à ne pas faire parti des 2 ensembles en même temps.


          1. donc j'ai un endroit où j'ai le cas particulier 24:00 vers l'heure (au sens time) maximale d'une journée 

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

  • # Compil

    Posté par  . Évalué à 3 (+1/-0).

    Quelques pistes dans une compilation (en anglais, désolé) : Falsehoods programmers believe about time

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.