YBoy360 a écrit 727 commentaires

  • [^] # Re: Kamoulox !

    Posté par  (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 2.

    Je sais pas trop ce que tu veux dire par « aspect performance », mais lancer une exception c’est loin d’être cheap, le stack unwinding, capturer la stack trace etc a un coût certain. En pratique, pour beaucoup d’application, ça va pas faire une différence notable, mais c’est pas gratuit, que ce soit en c++ ou en java.

    Il y a 2 aspects liés à la gestion des exceptions :

    • le coût d'une levée d'exception, comme tu le signales,
    • le coût de gestion de celles-ci dans le binaire (binaire plus gros).

    En C++, le coût de gestion était élevé à mon époque, tout le monde n'activait pas la gestion de celles-ci (d'où des incompatibilités sur certaines plateformes). En gros, ça revient à ajouter des return spéciaux supplémentaires, et l'une des règles de codage en C++ était de minimiser le nombre de return dans le corps des méthodes. Je crois qu'en Java, le coût de gestion est plus négligeable car il peut y avoir des optimisations au runtime, et la Jvm est stack-based (un peu comme du C++ sur du x86), donc peu d'impact d'un return.

    Le lancement d'une exception dans le cas normal arrive rarement. Donc même si le coût est élevé, tu perds au final peu de performances. C'est différent de systématiquement encapsuler ton résultat. Mais oui, c'est pas forcément significatif en terme d'impacte sur la plupart du code que l'on rencontre.

    I use Arch BTW

  • [^] # Re: Kamoulox !

    Posté par  (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 3.

    En Java, tu es obligé d'attraper la plupart des exceptions.

    Pas en Groovy. Dans le cadre d'un serveur d'application qui intègre un connecteur FreeCAD, Solr, LibreOffice, sans compter la gestion des données persistantes, la problématique de la sécurité, la validation des données… c'est peut-être un avantage. Tu n'as certainement pas envie de traiter tous les cas de figure si le formulaire contient un fichier à uploader et peu lever un nombre d'exception conséquent lors de la sauvegarde de ce formulaire.

    D'ailleurs, vu par l'utilisateur, le cas ou une exception est non catchée sur un serveur d'application c'est que la requête retourne un code 501 et que les données persistantes ne sont pas modifiées. C'est donc "limité". L'application continue de tourner. C'est difficile d'anticiper un comportement correcte suite à certaines erreurs. Moi, c'est mon tél ou ma boite mail qui vont recevoir les insultes, personne ne va en mourir dans mon cas (à moins d'être susceptible ou dépressif). Mais je ne vois pas comment on peut faire mieux.

    Il n'y a quasiment pas de try … catch dans notre code, excepté pour ne pas interrompre l'initialisation du serveur si l'erreur est tolérable, lors de l'initialisation des services, lorsque le service est initialisé AVANT son utilisation (pas de lazy-init). Bref, au final, je n'ai pas quasiment pas de code de gestion d'erreur, mais nombre d'erreur soit sont traitées par le framework lui-même, soit on ne peut rien en faire et seulement prévenir l'administrateur…

    I use Arch BTW

  • [^] # Re: Kamoulox !

    Posté par  (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 5.

    C'est inspirant cette façon de faire des présentations… 1h pour ne pas faire de try catch.

    Ce qui est intéressant c'est la volonté de formuler tous les cas de figure pour la gestion d'erreurs et d'y associer une syntaxe.

    Ce qui me gène avec cette approche :

    • l'aspect performance, on ne retourne pas directement un résultat, mais un objet virtuel, qui contient soit le résultat, soit une erreur. C'est un inconvénient par rapport au fait de dissocier le résultat et l'erreur ;
    • "do or do not, there is no try", j'ai besoin de savoir pourquoi ;
    • Au final je ne trouve pas forcément la syntax simple ;
    • Enfin et surtout, la validation des données N'EST PAS une erreur.

    En ce qui me concerne, nous utilisons groovy et Java, qui propose avec les enum des possibilités proches. Pour le cas présenter (validation d'un objet, sequence de traitement, gestion des erreurs associées) :

    • La validation des données nécessite un validator dans la classe implémentant l'objet, aucun cas de gestion de cette aspect n'apparait dans le code métier, c'est le FW qui décore les actions pour retourner l'information à l'utilisateur ;
    • Le reste sont des exceptions.

    Les exceptions constituent les erreurs non prévisibles, comme un problème réseau, disque plein, et d'autres aspect, comme la sécurité. Je comprends mal l'intérêt de ne pas utiliser les exceptions..

    I use Arch BTW

  • [^] # Re: Kamoulox !

    Posté par  (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 3.

    Je n'ai pas bien compris ce qu'était une gestion élégante d'erreur avec un union une interface encapsulant 2 types…

    Ce n'est pas plus propre de séparer le résultat et la gestion d'erreur ?

    I use Arch BTW

  • [^] # Re: Tu es prêt pour... Etre déçu par le libre

    Posté par  (site web personnel) . En réponse au journal Le mouvement du logiciel libre est un mouvement politique et social. Évalué à 5.

    Moi je dirai : Il ne faut pas rabaisser le libre à un mouvement dogmatique, politique ou religieux. De même, l'échange du savoir n'a pas de couleur politique. C'est sûr, c'est tellement plus beau d'être de ceux qui demande aux autres de partager… C'est gratuit, mais pas libre.

    I use Arch BTW

  • [^] # Re: Un peu tout

    Posté par  (site web personnel) . En réponse au sondage Développeur Libristes, oui ! mais macOS, Visual Studio et Azure ?. Évalué à 1.

    PyCharm, Intellij plus une bonne distribution Kde, je trouve ça bien plus efficace que MacOS. Et largement suffisamment bien fini.

    Sans faire de prosélytisme, car j'aime bien mon M1 PRO, je le préférais largement sous Linux. Mais le monde du PC portable est à la ramasse par rapport à ce que propose Apple en terme de hardware sur le haut de gamme.

    I use Arch BTW

  • [^] # Re: Chapeau bas, David Louapre

    Posté par  (site web personnel) . En réponse au lien ScienceEtonnante : JE CRAQUE WORDLE ! 🟩⬛🟨⬛🟨 (grâce aux maths). Évalué à -6.

    Ce type est une énigme à lui tout seul, il est un peu aux sciences ce que Gad Elmaleh est à l'humour.

    I use Arch BTW

  • [^] # Re: Compatibilité à partir du Jdk 7+

    Posté par  (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 5.

    Selon moi :

    les joins

    from n1 in nums1
    innerjoin n2 in nums2 on n1 == n2
    select n1 + 1, n2

    Et les clauses Having / Group by ( )

    from p in persons
    groupby p.gender
    having p.gender == 'Male'
    select p.gender, max(p.age)

    La syntaxe est concise et typée. Je ne suis pas expert en LINQ/Stream API, je pense que ce dernier aspect est délicat avec ces APIs. Et le tout en utilisant le Jdk 7. C'est d'ailleurs un peu comme les WhereQueries de Gorm (très ancienne), mais cette infrastructure ne fonctionne que sur les classes du domaine qui sont donc mappées dans une base de données, pas sur de simples objets en mémoire.

    I use Arch BTW

  • # Très belle initiative

    Posté par  (site web personnel) . En réponse à la dépêche OpenCL sous Linux : l’état des pilotes AMD est désormais pire que ce qu’il était à l’époque de fglrx. Évalué à 6.

    Si ça t’intéresse, j'ai une carte à base de RDNA1 que je peux te donner (tu sais où me trouver) et je vais recevoir une carte RDNA2 que tu pourrais emprunter (d'ici quelques jours).

    La RDNA2 est une Gigabyte, c'est pour moi un challenge d'acheter cette marque..

    I use Arch BTW

  • [^] # Re: Compatibilité à partir du Jdk 7+

    Posté par  (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 2.

    Mea maxima culpa, cette fonctionnalité mérite que l'on s'y attarde, j'avais peu de temps, aussi mettre du JSON dans des exemples de code pour illustrer un langage me révulse.

    Voici un autre exemple avec des objets classiques :

    enum Location {
     US('USA'), EU('Europe')
    
     Location(String label) {
         this.label = label
     }
    
     final String label
    }
    
    final class Machine {
        Location loc
        String name
        List<String> profile
    }
    
    def m1 = new Machine(loc: Location.EU, name: 'Tartanpion', profile: ['web', 'bi'])
    def m2 = new Machine(loc: Location.US, name: 'Escalope', profile: ['web', 'backend'])
    def m3 = new Machine(loc: Location.EU, name: 'Jambon', profile: ['bi'])
    def m4 = new Machine(loc: Location.US, name: 'Tartuffe', profile: ['web'])
    def m5 = new Machine(loc: Location.EU, name: 'TarteAuPoire', profile: ['web'])
    
    def machines = [m1, m2, m3, m4, m5]
    
    def l1 = GQ {
        from p in machines
        where p.name.startsWith('Tar')
        select p.name
    }.toList()
    
    println l1
    
    def l2 = GQ {
        from p in machines
        where p.loc == Location.EU
        select p.name, p.loc.label
    }.toList()
    
    println l2

    Ce qui donne :

    [Tartanpion, Tartuffe, TarteAuPoire]
    [[Tartanpion, Europe], [Jambon, Europe], [TarteAuPoire, Europe]]

    C'est puissant..

    I use Arch BTW

  • [^] # Re: C'était proprio ?

    Posté par  (site web personnel) . En réponse au journal Sortie de Groovy 4.0.0. Évalué à 6. Dernière modification le 31 janvier 2022 à 17:20.

    C'était volontaire et non issu de Google Trad. C'est comme bronsonizer, je pensais que c'était un running gag…

    Sortie, peut avoir une connotation négative et déjà vu. Je préfère publication. Mais bon.

    I use Arch BTW

  • [^] # Re: The profiler

    Posté par  (site web personnel) . En réponse au lien Aide pour identifier une personne toxique au travail. Évalué à 1. Dernière modification le 31 janvier 2022 à 04:09.

    faut y aller mollo sur les coups d'oeil.

    I use Arch BTW

  • [^] # Re: Bah

    Posté par  (site web personnel) . En réponse au lien Trouver des développeurs va être votre plus gros casse-tête cette année (Python, Java, Javascript). Évalué à 1.

    Merci, j'ai la chanson en tête, j'ai envi de les revoirs maintenant.. Durant l'époque des 8-bit, on se prenait moins la tête.

    I use Arch BTW

  • [^] # Re: Cargo.lock affligeant

    Posté par  (site web personnel) . En réponse au lien Rewriting the GNU Coreutils in Rust. Évalué à 3.

    Les modules du C++ 2020 ne permettent pas justement de rapatrier des binaires "portables" de façon agnostique ?

    Pour gérer les dépendances, c'eût été pratique …

    I use Arch BTW

  • # Le narratif du méchant virus s’épuise. Quelle pourrait être la prochaine étape ?

    Posté par  (site web personnel) . En réponse au journal La goutte. Évalué à 4.

    Le narratif du méchant vaccin?

    Et ensuite quelle sera l'étape suivante ?

    I use Arch BTW

  • # C'est lui kiki...

    Posté par  (site web personnel) . En réponse au lien KiCad 6.0.0 Release. Évalué à 1.

    Il faudrait rédiger une dépêche ou un journal pour ce logiciel.

    I use Arch BTW

  • [^] # Re: Du ressort d'un professionnel?

    Posté par  (site web personnel) . En réponse au lien Psychopathologie du totalitarisme 1/3. Évalué à 1.

    Moi ça me fait penser à ça (La Femme: Disconnexion) :
    https://www.youtube.com/watch?v=JR2mZChrO2c

    I use Arch BTW

  • [^] # Re: Plusieurs bloqueurs de pub, vraiment ?

    Posté par  (site web personnel) . En réponse au journal Manifest V3 pour les extensions de navigateurs. Évalué à 0. Dernière modification le 20 décembre 2021 à 11:01.

    J'ai toujours confondu les Michou et les Michu… C'est vrai qu'il y a peu de madame et de petits chez les Michou.

    Michou

    I use Arch BTW

  • [^] # Re: Logs LinuxFr.org

    Posté par  (site web personnel) . En réponse au lien Log4Shell: RCE 0-day exploit found in log4j, a popular Java logging package. Évalué à 1.

    En effet. Nous n'utilisons pas log4j pour les couches applicative et je n'arrive pas à mixer notre configuration avec celle de log4j…

    Les tentatives ont commencé le 10. Et
    ksh
    % journalctl -u tomcat9 | grep jndi | wc -l
    204

    Après une première analyse, nous ne semblons pas impacté. C'est la première fois cela dit qu'une attaque cible nos sites avec précision et qui aurait potentiellement pu fonctionner.

    I use Arch BTW

  • [^] # Re: Aïe

    Posté par  (site web personnel) . En réponse au lien neocities : faire le web chouette à nouveau. Évalué à 2.

    Oui ça, et le mot cyber[qqc] qui apparait dans mes spams LinkedIn / Teams.

    En plus avec Konsole tu peux la rendre transparente ta console verte pour te transformer en Cyberhacker version 2019. C'est comme cela que je code mes scripts shell (avec cat).

    I use Arch BTW

  • [^] # Re: Et pour Kotlin ?

    Posté par  (site web personnel) . En réponse au journal Une boite à meuh qui fait pas "meuh". Évalué à 0.

    Parce que make, c'est simple ??? Ce que tu veux ressemble à vouloir utiliser les autotools à la place de CMake.

    Ne pas vouloir utiliser gradle, c'est comme utiliser Debian sans apt-get et consort. On peut très bien faire un script shell qui va d/l les dépendances. Maven va aussi d/l les dépendances, ça n'est pas tellement plus simple que Gradle.

    Tu as aussi la possibilité d'utiliser javac directement, un peu comme tu utiliserai gcc. Tu dois même pouvoir faire un makefile utilisant Javac. Pour gérer les dépendances, tu pourras utiliser Ivy, Maven ou Grape. Tu utiliseras 2 outils au lieu d'un.

    Je ne sais pas si Kotlin supporte Grape/Yvi dans le code source comme Groovy…

    Il y a plein de raisons de ne pas apprécier Gradle :
    - il impose un formalisme qui parfois est irritant ;
    - la syntaxe est parfois incohérente (ça c'est améliorer avec la version 7.2) ;
    - Ils ont fait les DSL de sorte qu'il n'y a pas d'autocompletion vraiment efficace ;
    - Les messages d'erreur sont parfois complexe, ou tombe à coté.

    Malgré ces défauts, si tu te conforme au formalisme, c'est juste un outils incontournable, et finalement très efficace, surtout sur de gros projets modulaires. Si tu développes ton plugin pour ajouter un truc au build pour faire fonctionner ton code, tu pourras partager ce que tu fais bien plus aisément, puisqu'il y a de grande chance que les intéressés utilisent aussi Gradle.

    I use Arch BTW

  • [^] # Re: Et pour Kotlin ?

    Posté par  (site web personnel) . En réponse au journal Une boite à meuh qui fait pas "meuh". Évalué à 2. Dernière modification le 10 décembre 2021 à 13:22.

    En théorie, sans IDE, il suffit de faire un :
    ./gradlew build

    Et le tour est joué non ? Ça dépendra juste de Java. Et il faudra au préalable avoir créé le projet (pour avoir le Wrapper Gradle).

    Pour exécuter, créer le binaire ou autres, on peut lister les tâches Gradle avec la tâche 'tasks' : ./gradlew tasks

    Édit : j'avais pas lu l'intégralité de ta question. Gradle télécharge automatiquement les dépendances car c'est exactement ce qu'on lui demande. Si tu ne veux pas télécharger de dépendances, tu peux soit ne pas les utiliser, soit les recoder. C'est un peu comme si tu reprochais à apt-get de télécharger des programmes… Bonne chance.

    I use Arch BTW

  • # Ciel & Espace

    Posté par  (site web personnel) . En réponse au journal Je préfère LinuxFr.org. Évalué à 3.

    Ça reste encore un peu intéressant.

    La presse scientifique du jour d'aujourd'hui n'a plus rien à voir avec celle des années 90…

    I use Arch BTW

  • [^] # Re: le souci : Hot Reload de .NET 6 amputé…

    Posté par  (site web personnel) . En réponse au lien Microsoft angers the .NET open source community with a controversial decision. Évalué à 3.

    Même pour Microsoft, c'est quand même pas très subtile.

    I use Arch BTW

  • [^] # Re: utilisation ?

    Posté par  (site web personnel) . En réponse au journal Sortie de Grails 5.0.0. Évalué à 6. Dernière modification le 15 octobre 2021 à 18:18.

    Difficile de te répondre précisément, si tu regardes leur page tu peux avoir une petite idée. Te dire que c'est l'équivalent du PHP avec Drupal et autres Wordpress, non clairement, mais ce n'est pas le même usage : tu peux réutiliser l'écosystème Java, tu n'es pas limité aux frontaux Web (je sais que l'on est vendredi, rien n'empêche de faire un ERP en n'importe quel langage), donc tu n'es pas isolé.

    J'ai travaillé pour Drouot, tous les sites des commissaires priseurs par exemple étaient réalisés avec Grails. C'était un FW populaire il y a une dizaine d'années. Nos sites sont réalisés avec ce FW, des applications externes que nous utilisons aussi, comme Rundeck.

    Aujourd'hui, ce Framework essai de se mettre à jour, la proximité avec Micronaut est un plus (du même auteur). Attention cela dit, pas mal de plugins qui spécialisent l'utilisation de librairies Java communes ne sont pas bien maintenus, et apportent peu de plus values par rapport à l'usage de Java directement. Les choses semblent cependant s'améliorer au niveau contributions, et comme dit plus haut, tu n'es pas isolé, tu as accès à tout l'écosystème Java.

    En terme de pérennité, une chose rassurante pour ce framework est l'usage de briques de bases très communes, comme Gradle, Spring, Micronaut… Avant la version 3, tout était intégré directement dans grails (hormis Spring), ce qui était inquiétant. Je dirais que c'est le moment de l'utiliser si tu à besoin de réaliser des logiciels intégrés pour l'entreprise (donc pas purement Web), que tu maîtrise Groovy et que tu utilises/apprécies les DSL (c'est un facteur déterminant pour nous) ou que les Microservices ne te satisfont pas.

    Les performances ont aussi progressé dans le sens ou c'est proche de Java (nos vieux sites n'ont pas de cache activé, mais s'affichent rapidement, comme sur ma page perso, nous allons bientôt les renouveler intégralement).

    Bref, nous l'utilisons pour tout hors ERP (nous utilisons Axelor, 400 salariés) : Ged, CRM, CMS, Gestion de projets, génération documentaire, gestion des stocks de certaines filiales, Scheduler, BI… avec environ 150 utilisateurs, sur 4 continent, pas de problème (je n'en parlerai pas sinon :). On se trouve rapidement efficace avec ce FW, et ça donne envie de faire plus avec.

    I use Arch BTW