Claude SIMON a écrit 555 commentaires

  • [^] # Re: Très bel article, petite remarque de français

    Posté par  (site web personnel) . En réponse à la dépêche Nouveautés du langage C dans sa prochaine version C23. Évalué à 4.

    Je crois que c'est peine perdue. C'est comme l'utilisation de librairie (qui est un faux-ami pour le coup) pour désigner une bibliothèque logicielle. C'est rentré dans le mœurs, notamment chez les professionnels, et comme l'usage fait la langue…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Bien utile…

    Posté par  (site web personnel) . En réponse au journal Mon avis sur chatGPT. Évalué à 2.

    Pour accéder à une variable d'une fonction parente dans une sous-fonction, tu n'as rien à faire. C'est disponible de base en Python, l'ensemble des variables de la fonction parente sont accessibles directement.

    Oui et non.

    Oui si c'est pour lire la variable, non si c'est pour la modifier.

    def f_parent():
         msg = 'hello'
         def f_sous_fonction():
              msg +=  ' world'
              print(msg)
         return f_sous_fonction
    
    fsf = f_parent()
    
    fsf()

    UnboundLocalError: local variable 'msg' referenced before assignment

    def f_parent():
         msg = 'hello'
         def f_sous_fonction():
              nonlocal msg      # <- ajout
              msg +=  ' world'
              print(msg)
         return f_sous_fonction
    
    fsf = f_parent()
    
    fsf()

    hello world

    « Smart IoT Crafting » : l'IoT pour tous

  • # Et combien d'utilisateurs qui utilisaient la version VR ?

    Posté par  (site web personnel) . En réponse au lien Firefox perd env 16 millions d'utilisateurs depuis un an. Évalué à 2.

    Il ne devait pas y en avoir tant que ça, n'empêche que Firefox Reality, le navigateur de Mozilla dédié à la réalité virtuelle, a été abandonné en 2022 et retiré des magasins d'applications.
    Je n'ai pas réussi à mettre la main sur Wolvic (sic), son successeur basé sur son code source, pour voir son user-agent.

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: digitalisation

    Posté par  (site web personnel) . En réponse à la dépêche Mesure d'énergie électrique et transmission radio DASH7. Évalué à 4.

    Ce sont les deux premiers qui sont cités par le dernier.

    « Smart IoT Crafting » : l'IoT pour tous

  • # Hum bis…

    Posté par  (site web personnel) . En réponse au lien GPT-3 : c’est toi le Chat (blog d'Olivier Ertzscheid). Évalué à 2.

    […] Il est devenu célèbre pour sa thème principal qui est souvent utilisé dans les médias.

    Pourquoi as-tu mis "thème" au féminin ?

    Je m'excuse, j'ai fait une erreur en utilisant le féminin pour "thème". En fait, "thème" est un mot de genre masculin en français. Merci de me l'avoir signalé.

    Pourquoi as-tu fait cette erreur ?

    Comme je suis un modèle de traitement automatique de la langue, je peux commettre des erreurs. Cela peut être dû à des lacunes dans mes connaissances, à des problèmes de traitement de la langue ou à des limites de mon système. Je suis constamment en train d'apprendre et de m'améliorer, donc je vous remercie de m'avoir signalé cette erreur.

    Cela signifie que tu n'avais jamais employé le mot "thème" jusqu'à présent, ou alors que personne ne t'avait signalé cette erreur ?

    En tant que modèle de traitement automatique de la langue, j'ai été formé à partir d'un grand corpus de textes de différentes sources. Je peux avoir vu ou utilisé le mot "thème" dans le passé, mais je peux avoir fait une erreur en utilisant le féminin pour cela. Il est possible que personne ne m'ait signalé cette erreur auparavant, je m'excuse pour tout désagrément causé.

    « Smart IoT Crafting » : l'IoT pour tous

  • # Hum..

    Posté par  (site web personnel) . En réponse au lien GPT-3 : c’est toi le Chat (blog d'Olivier Ertzscheid). Évalué à 6.

    Moi :

    Quelle est la typologie réseau associée à la technologie 10BASE2 ?

    ChatGPT :

    La technologie de réseau Ethernet coaxial (ou 10BASE2) était généralement utilisée pour créer des réseaux de type "étoile". Dans un réseau en étoile, chaque ordinateur ou périphérique du réseau est connecté à un commutateur central (ou hub) via un câble individuel. Le commutateur central reçoit les données transmises par chaque ordinateur et les achemine vers la destination appropriée. Cette architecture de réseau est connue pour être fiable et facile à mettre en œuvre, car chaque ordinateur est connecté de manière indépendante et peut être ajouté ou retiré du réseau sans perturber les autres ordinateurs. Cependant, elle peut être coûteuse à mettre en place et à entretenir, car elle nécessite un grand nombre de câbles et de connecteurs.

    Moi :

    Tu confonds avec la typologie utilisée avec 10base-T. Avec 10base2, on utilise une typologie réseau dite en bus.

    ChatGPT :

    Je suis désolé pour la confusion. Vous avez raison, la technologie de réseau Ethernet coaxial (ou 10BASE2) était généralement utilisée pour créer des réseaux de type "bus". Dans un réseau en bus, tous les ordinateurs et périphériques du réseau sont connectés en série via un câble commun, qui est généralement un câble coaxial. Chaque ordinateur peut envoyer et recevoir des données sur le réseau en transmettant des trames sur le câble commun. Les trames sont acheminées à chaque ordinateur du réseau, qui les ignore s'il ne s'agit pas de sa destination. Cette architecture de réseau est simple à mettre en œuvre, mais elle est moins fiable que d'autres architectures, car tous les ordinateurs du réseau sont connectés en série et sont donc tous affectés si le câble ou l'un des ordinateurs du réseau tombe en panne. Elle est également moins efficace que d'autres architectures, car elle nécessite un temps de transmission plus long pour acheminer les données à chaque ordinateur du réseau. Aujourd'hui, la technologie Ethernet coaxial (ou 10BASE2) est largement obsolète et a été remplacée par d'autres technologies de réseau, comme Ethernet sur câble torsadé (ou 10BASE-T) et Ethernet sur fibre optique (ou 10BASE-F). Ces technologies sont plus rapides et offrent des vitesses de transmission plus élevées que 10BASE2, et elles sont également plus faciles à mettre en œuvre et à entretenir. Elles sont utilisées dans de nombreux réseaux de petite et de grande taille à travers le monde.

    En tout cas, ça maîtrise l'art de noyer le poisson :-)…

    J'ai reposé la même question dans une nouvelle conversation, et la réponse était alors correcte. Reste à savoir si c'est parce que ça se souvient de ma précédente conversation, ou si ça a globalement intégré l'information…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: dialog

    Posté par  (site web personnel) . En réponse au journal choose, pour des scripts shells interactifs. Évalué à 2.

    Pour les curieux, ce que je reproche à dialog c'est […] l'utilisation de STDERR pour récupérer le résultat, donc on ne peux pas faire INPUT=$(dialog foobar)

    Je ne me rappelle plus comment j'en suis arrivé à cette solution, mais voici un petit script montrant comment j'utilise dialog :

    #!/bin/bash
    INPUT=$(dialog\
      --title "Test"\
      --menu "" 9 21 3\
        "a" "Entrée 1"\
        "b" "Entrée 2"\
        "c" "Entrée 3"\
      3>&1 1>&2 2>&3)
    echo -e "\nValeur retournée : '$INPUT'"

    « Smart IoT Crafting » : l'IoT pour tous

  • # Moment nostalgie…

    Posté par  (site web personnel) . En réponse au journal J'ai testé: une ardoise à cristaux liquides. Évalué à 9.

    Il faut s'habituer à l'écriture en vert sur fond noir

    Ça rappellera des souvenirs aux plus anciens d'entre nous ; certains ont probablement utilisé des moniteurs monochromes vert (mention spéciale à l'Amstrad CPC 464 monochrome), ou ambre…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Un peu d'archéologie

    Posté par  (site web personnel) . En réponse à la dépêche Dernières avancées du côté de Thunderbird. Évalué à 3.

    En des temps anciens, je m'étais fendu d'un journal sur XULRunner, qui était à XUL ce que Electron est à HTML. Plus précisément, le journal portait sur la programmation d'applications XULRunner en C++, au lieu du traditionnel JavaScript. Aujourd'hui, j'utilise Electron à la place de XULRunner, mais je suis resté fidèle à C++.

    Le journal en question : https://linuxfr.org/users/epeios/journaux/xulrunner-et-c.

    Pour les passionnés d'archéologie, les billets de blog référencés dans ce journal peuvent être consultés à cette adresse, le premier se trouvant en bas : https://web.archive.org/web/20120909013202/http://zeusw.org/blog/index.php?categorie5/xul.

    Et pour ceux qui veulent encore creuser plus, le code source des programmes mentionnés dans ces billets sont disponibles aux adresse suivantes :

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Anarchiste, mais...

    Posté par  (site web personnel) . En réponse au journal J'ai lu "Comment je suis devenue anarchiste" d'Isabelle Attard. Évalué à 4.

    Une autrice (en réalité un auteur) de BD et de romans s'exprimant sur son métier : https://maliki.com/strips/a-croisee-chemins/

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Mon avis

    Posté par  (site web personnel) . En réponse au journal "Use plaintext email" ? Vraiment ?. Évalué à 2.

    s/prone/propre/ :-)

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: rien

    Posté par  (site web personnel) . En réponse au journal Bientôt 4 jours sans nouveau journal. Évalué à 2.

    Bon, je ne suis pas fan de ce style de musique ni spécialement versé dans tout ce qui est batterie mais, niveau performance musicale et technique, ça, ça me semble sortir du lot, indépendamment de l'âge de l'exécutante : https://www.youtube.com/watch?v=5jDVZPzfS1c.

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: nano-mesures

    Posté par  (site web personnel) . En réponse au lien La ville de Paris sanctionne les commerces climatisés gardant la porte ouverte - lalibre.be. Évalué à 6.

    X jours ??? Déjà V, je trouve ça énorme ! III à la rigueur, à condition qu'il ne fasse pas trop chaud ! (veni, vidi, et j'ai pas pu résister…)

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Petite revue de code

    Posté par  (site web personnel) . En réponse à la dépêche Moniteur de tunnels SSH Tunnelmon en version 1.1 . Évalué à 7.

    if t.status != 'ESTABLISHED' and t.status != 'LISTEN': => if t.status in ('ESTABLISHED', 'LISTEN'):

    Ça ne serait pas plutôt : if t.status not in ('ESTABLISHED', 'LISTEN'): (ajout de not) ?

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: blockchain et crypto-monnaie sont deux choses différentes

    Posté par  (site web personnel) . En réponse au journal Ethereum prépare son passage de Proof of Work à Proof of Stake. Évalué à 6.

    je suis intéressé par l'intérêt éventuel des autres usages possibles des blockchains

    Si tu en trouves (des intérêts), fais-le savoir !

    Les JNF ? (-> [])

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Au contraire, mais ça dépend

    Posté par  (site web personnel) . En réponse au journal SmartCar. Évalué à 3.

    Et si on parle de véhicules électriques, c'est encore pire : il n'y a plus de boîte de vitesse […]

    Sauf chez Porsche

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 3.

    Je ne connais pas Matplotlib plus que ça, mais il me semble que l'image n'est pas exportée au format SVG.

    D’après la documentation de la méthode savefig, comme il n'y a pas de paramètre format et que le format ne peut pas être déduit du paramètre fname, alors c'est le format par défaut qui est utilisé, à savoir png.

    Voici la fonction que j'utilise pour exporter un graphique Matplotlib en SVG :

    def getSVG(plt):
      figfile = StringIO()
      plt.savefig(figfile, format='svg')
    
      svg = figfile.getvalue();
    
      plt.close()
    
      return svg

    Pour voir ce code en action : https://replit.com/@Q37Info/MatplotlibSVG#main.py (ligne 42).

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Juste mon point de vue

    Posté par  (site web personnel) . En réponse au journal De l'influence néfaste de Google sur les développeurs C++. Évalué à 3.

    Faire un truc rapide sans avoir de compréhension de la lib standard, peut importe le langage, ça me semble très… disons difficile.

    Soit-dit en passant, le C++ est probablement le langage (avec le C, parmi les plus populaires) avec lequel on peut le plus facilement faire des trucs rapides sans rien connaître de la bibliothèque standard. Le C++ donne en effet directement accès à la bibliothèque C standard, aux bibliothèques systèmes, voire à l'assembleur. De quoi court-circuiter la bibliothèque C++ standard sans nécessairement perdre en performances. Il faut être motivé et avoir les compétences nécessaires, mais c'est plus facile qu'avec la plupart des autres langages, car on n'a pas besoin de changer d'environnement de développement pour ce faire …

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 3.

    Matplotlib est aussi capable de générer du SVG et, vu les affinités de SVG avec HTML, il doit y avoir moyen d'injecter ça avec htag.

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Merci

    Posté par  (site web personnel) . En réponse au lien CalCleaner : J'ai développé un petit outil pour supprimer les vieux événements des calendriers. Évalué à 3.

    Ce n'est pas dans un menu, c'est un élément de la listbox affichée à gauche du champ contenant, au-dessus à gauche de la liste des évènements. Et elle est présente dans la version 91.12.0.

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Merci

    Posté par  (site web personnel) . En réponse au lien CalCleaner : J'ai développé un petit outil pour supprimer les vieux événements des calendriers. Évalué à 4.

    Qu'est-ce qui ne va pas, dans Thunderbird, avec : onglet Agenda / Affichage Tous les évènements / Tri par dates croissantes / Sélection de l'évènement le plus récent à supprimer / Shift + Début / Suppr ? En plus, on peut annuler…

    « Smart IoT Crafting » : l'IoT pour tous

  • # Une autre vision des exceptions

    Posté par  (site web personnel) . En réponse au journal De l'influence néfaste de Google sur les développeurs C++. Évalué à 7.

    Ma modeste contribution au débat…

    Soit le pseudo-code suivant :

    Lire octet
    TantQue octet != 0
      Si octet == 1
        Faire ActionA   
      Sinon Si octet == 2
        Lire octet
        Si octet == 0
          Faire ActionB
        Sinon
          Faire ActionC
        FinSi
      Sinon
        Faire ActionD
      FinSi
      Lire octet
    FinTantQue

    Transcription naïve en C, en utilisant getc (j'écarte volontairement l'utilisation de switchcase) :

    int main() {
      int c;
    
      c = getc();
    
      while ( c != 0 ) {
        if ( c == 1 )
          ActionA();
        else if ( c == 2 ) {
          if ( getc() == 0 )
            ActionB();
          else
            ActionC();
        } else
          ActionD();
    
        c = getc();
      }
    
      return EXIT_SUCCESS;
    }

    Avec ce code, s'il y a le moindre problème avec le flux lu par getc(…), on rentre dans une boucle infinie.

    Implémentons maintenant une gestion d'erreurs à la C.

    int main() {
      int c;
    
      c = getc();
    
      if ( c == EOF )
        return EXIT_FAILURE;
    
      while ( c != 0 ) {
        if ( c == 1 )
          ActionA();
        else if ( c == 2 ) {
          c = getc();
    
          if ( c == EOF )
            return EXIT_FAILURE;
    
          if ( c == 0 )
            ActionB();
          else
            ActionC();
        } else
          ActionD();
    
        c = getc();
    
        if ( c == EOF )
          return EXIT_FAILURE;
      }
    
      return EXIT_SUCCESS;
    }

    On voit que, par rapport à la transcription naïve du pseudo-code, on a a doublé le nombre de if à cause de la gestion d'erreurs. Sans compter que j'ai fait l'impasse sur la gestion d'erreurs des fonctions ActionX !

    Utilisons maintenant les exceptions :

    int get(void) {
      int c = getc();
    
      if ( c == EOF )
        throw ;
      else return c;
    }
    
    int main() {
      int c;
    
      try {
        c = get();
    
        while ( c != 0 ) {
          if ( c == 1 )
            ActionA();
          else if ( c == 2 ) {
            if ( get() == 0 )
              ActionB();
            else
              ActionC();
          } else
            ActionD();
    
          c = get();
        }
      } catch () {
        return EXIT_FAILURE;
      }
    
      return EXIT_SUCCESS;
    }

    On voit que le code entre le try et le catch correspond presque ligne à ligne avec le pseudo-code correspondant. Je précise que l'ensemble du code ci-dessus est quand même une énorme simplification de la manière dont j'utilise les exceptions.

    Pour résumer, j'utilise les exceptions afin que mon code soit très proche du pseudo-code que l'on pourrait écrire pour l'algorithme correspondant, ce qui, d’après moi, facilite grandement sa compréhension, sa maintenabilité et son évolutivité, en évitant qu'il ne soit pollué par le code dédié à la gestion des erreurs.

    Cette approche, je l'ai mise en œuvre alors que je programmais encore en C, lorsque je ne connaissais ni le C++, ni son mécanisme d'exceptions. Les throw, try, catch étaient simulés à l'aide de macros s'appuyant sur la bibliothèque setjmp. Ces macros garantissaient par ailleurs que toutes les ressources étaient correctement libérées lors de la survenue d'une «exception» (en fait, un appel à longjmp).

    Lorsque je suis passé au C++, j'ai réimplémenté ces macros en m'appuyant sur les exceptions, tout en conservant leur implémentation originale, les premiers compilateurs C++ n'implémentant pas tous les exceptions.

    Avec cette approche, je n'ai jamais rencontré de problèmes particuliers avec les exceptions. Pour autant, je n'irais pas jusqu'à affirmer qu'elle n'a pas son lot d'inconvénients qui la rendrait inapplicable dans certaines situations…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Qt

    Posté par  (site web personnel) . En réponse au journal De l'influence néfaste de Google sur les développeurs C++. Évalué à 10.

    Ce n'est pas parce que les exceptions posent problèmes avec certains types de projets qu'il faut les bannir de tous les projets.

    Tu fais part de ton expérience, que je ne remets aucunement en question, pour justifier ta position sur les exceptions. Du coup, je vais te faire part de la mienne.

    J"ai travaillé sur des projets assez conséquents, bien que probablement sans commune mesure avec ceux des organismes que tu cites. Il n'en reste pas moins que, pour ma part, les exceptions ne m'ont jamais, au grand jamais, posé de problèmes, même en ce qui concerne la taille des exécutable ou leurs performances.
    Dans le cas notamment des daemon, des programmes qui sont censés être particulièrement fiables, je trouve personnellement que ce sont les exceptions (ou mécanisme similaire) qui permettent le plus facilement d'assurer cette fiabilité.

    Bref, il en va des exceptions comme de toutes les technologies : il faut les utiliser à bon escient ; certaines projets s’accommodent parfaitement de leurs inconvénients, d'autres non…
    Par conséquent, je n'ai aucun scrupule à les utiliser dans mes logiciels, et j'écris ceci tout en reconnaissant qu'elles ne sont pas exemptes de défauts…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: Libre ou pas libre, telle n'est pas la question.

    Posté par  (site web personnel) . En réponse au lien FauxPilot - Clone de GitHub Copilot libre et hors-ligne. Évalué à 2.

    […] lire des milliers de page de code bien écrit pour apprendre à produire du code de qualité […] c'est ce que tous les bons programmeurs font.

    Ce n'est pas la première fois que je vois ce genre d'affirmation. Le seul autre code source que le mien que j'examine à l'occasion sont de courts exemples d'utilisation d'une API. Ça fait de moi un mauvais programmeur ?

    Quand je me suis lancé dans l'informatique en général et la programmation en particulier, le web n'existait pas encore, l'accès à Internet était hors de prix, et je n'avais donc pas accès à une grande quantité de code source. Je pense que nous fûmes beaucoup dans cette situation.

    Du coup, le code source que je produis est probablement atypique. Bien qu'étant disponible sous licence libre sur des forges logicielles populaires, il ne doit pas être d'un grand intérêt pour ce genre de projets…

    « Smart IoT Crafting » : l'IoT pour tous

  • [^] # Re: En parlant de Minitel

    Posté par  (site web personnel) . En réponse au lien OS pour Minitel. Évalué à 2.

    […] (je pense que le pare-feu de mon entreprise bloque les websockets).

    À ce sujet, j'ai eu l'occasion d'essayer une application utilisant des websockets sur quelques réseaux d'entreprises, et j'ai remarqué que beaucoup bloquaient les websockets avec http://, mais pas avec https://

    Ceci dit, http://3611.re fonctionne chez moi, mais pas https://3611.re

    « Smart IoT Crafting » : l'IoT pour tous