YBoy360 a écrit 673 commentaires

  • [^] # 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.

  • [^] # 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.

  • [^] # 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.

  • [^] # 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.

  • # 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..

  • [^] # 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..

  • [^] # 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.

  • [^] # 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.

  • [^] # 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.

  • [^] # 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 …

  • # 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 ?

  • # 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.

  • [^] # 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

  • [^] # 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

  • [^] # 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.

  • [^] # 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).

  • [^] # 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.

  • [^] # 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.

  • # 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…

  • [^] # 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.

  • [^] # 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.

  • # 77 colonnes

    Posté par  (site web personnel) . En réponse au lien OVH et la malheureuse « erreur humaine » qui a fait tomber des milliers de sites français. Évalué à -3. Dernière modification le 13 octobre 2021 à 21:36.

    Voilà l'intérêt d'avoir des lignes de code courtes, c'est qu'en cas de copier/coller, on évite les sauts de ligne (puisque l'on peut rendre la fenêtre de l'éditeur étroite sans avoir de retour à la ligne automatique)…

  • [^] # Re: We need more

    Posté par  (site web personnel) . En réponse au journal opensara: un nouveau jeu libre. Évalué à 3. Dernière modification le 11 octobre 2021 à 01:39.

    En quoi le typage de Typescript est plus "expressif" que Kotlin ? Est-ce l'héritage du JAvascript ?

    Kotlin est un langage typé statiquement. Selon moi, il a pour lui de ne pas supporter le JSON (pour beaucoup c'est un inconvénient), et le support des DSLs. Et nous l'utilisons dans pas mal de domaine (applications Android ou avec Micronaut).

    Concernant la gestion des assets, nous avions des assets en AngularJS, Angular 2 ou 4, à certains moment nous avions du reactJs, et même du Dart avec des WebComponents, en plus du Kotlin. Aujourd'hui nous sommes entrain de supprimer tous ces composants, la seule entorse au JS, c'est le Kotlin transpilé. Notre application est modulaire au sens Gradle, les modules ont leurs propres Assets (qui n'ont pas d'espace de nommage, en production, mais en ont en mode dev). La gestion des assets est vraiment très complexes dans notre cas : le Gantt, le BI, sont des composants Gradle, les applications que l'on distribue aussi. Comme la même instance est utilisée en Chine, au US et en Europe, on se doit de ne pas avoir plusieurs fichiers Js ou Css à charger, de les compresser, d'utiliser HTTP/2 (si tu regarde ma page ça charge plutôt rapidement, même si tout cela reste classique).

    Perso, je n'ai jamais réussi à débuguer un fichier js issue d'une transpilation en utilisant le mapping associé sur notre version de dev (donc sans compression )… Mais je ne dis pas que c'est impossible, ni que Typescript est un mauvais choix (juste que je préfère Kotlin).

  • [^] # Re: We need more

    Posté par  (site web personnel) . En réponse au journal opensara: un nouveau jeu libre. Évalué à 1.

    Tu veux dire que des projets essaie de compiler / compresser les assets et sont emmerder par TypeScript (qui apporte très peu, je suis d'accord avec l'auteur du journal, quitte à perdre du temps, autant utiliser Kotlin, qui pose les mêmes problème mais apporte un vrai gain.).

    Ça alors !

    On pourrait aussi ajouter que certains projets ne se compile pas via l'IDE, mais que l'IDE supporte le système de build du projet.

  • [^] # Re: Sans SSE

    Posté par  (site web personnel) . En réponse au journal Recherche de valeur dans un tableau et l'écosystème des compilateurs C++. Évalué à 2.

    La version utilisant des long corrigée présente un gains de 10 % sur ARM, mais grand chose sur Intel, par rapport à la version entière… Il y a peut-être encore de marge en regardant le code généré, mais l'épilogue de la fonction est déjà compliqué à écrire (ou les cas non aligné, pour des tableaux de n'importe quelle taille).

    Donc sur cette tablette / Chromebook, le meilleur résultat est pour la boucle suivante (sans optimisation du prefetch) :

    size_t find_int_c4l(const int k, const int* v, const size_t n) {
        size_t i = 0;
        size_t n2 = n >> 1;
        const unsigned long* vl  = (const unsigned long*)v;
        const unsigned long klow = (unsigned long)k;
        const unsigned long khi  = (unsigned long)k << 32;
        const unsigned long maskLow = 0xffffffff;
        const unsigned long maskHi  = maskLow << 32;
        unsigned int index = 0;
    
        for (; i <= n2; i += 8, vl += 8) {
            index = 0;
            __builtin_prefetch(vl + 256, 0, 1);
    
            index = ((vl[0] & maskLow) != klow && (vl[0] & maskHi) != khi) ? index : 1;
            index = ((vl[1] & maskLow) != klow && (vl[1] & maskHi) != khi) ? index : 1;
            index = ((vl[2] & maskLow) != klow && (vl[2] & maskHi) != khi) ? index : 1;
            index = ((vl[3] & maskLow) != klow && (vl[3] & maskHi) != khi) ? index : 1;
            index = ((vl[4] & maskLow) != klow && (vl[4] & maskHi) != khi) ? index : 1;
            index = ((vl[5] & maskLow) != klow && (vl[5] & maskHi) != khi) ? index : 1;
            index = ((vl[6] & maskLow) != klow && (vl[6] & maskHi) != khi) ? index : 1;
            index = ((vl[7] & maskLow) != klow && (vl[7] & maskHi) != khi) ? index : 1;
            if (index == 1) {
                break;
            }
        }
        return i; // i n/2 -8 si ok dans mon cas...
    }

    Résultat :
    bash
    C1 = 2850253 (499999984), C2 = 1233600 (499999984), C3 = 575797 (499999984), C4 = 547523 (499999984), C4l = 494092 (249999992), C5 = 556564 (499999984)

    Par rapport à la version originale, dans mon test sur ARM, la boucle C4l est 5,77 fois plus rapide.