SpaceFox a écrit 1626 commentaires

  • [^] # Re: Montre ton code

    Posté par  (site web personnel, Mastodon) . En réponse au journal Prototypage d'applications web. Évalué à 7.

    Le schéma est indispensable à cause de ça :

    Le seconde, à laquelle la première se connecte, est constituée d'un ensemble de logiciels qui tournent sur un serveur distant (accessible, lui, d'internet). Pour éviter au développeur d'avoir à s'en occuper, un tel serveur, auquel le toolkit se connecte automatiquement, est gracieusement mis à disposition.

    Il est des applications pour lesquelles il est impensable que quoi que ce soit tourne sur un serveur tiers inconnu. Si je n'ai pas un schéma clair qui m'explique qu'est-ce qui tourne où, et quelles sont les alternatives disponibles, ton framework est disqualifié d'office.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Montre ton code

    Posté par  (site web personnel, Mastodon) . En réponse au journal Prototypage d'applications web. Évalué à 10.

    Plus que du code, je montrerais plutôt un schéma. Parce que depuis le temps que je vois passer tes journaux, je n'ai toujours pas compris qu'est-ce qui s'exécute où avec ton framework.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: ça tape sur la CGT !

    Posté par  (site web personnel, Mastodon) . En réponse au journal Chaque été depuis 9 ans, Altran enclenche une procédure de licenciement contre un délégué syndical. Évalué à 3.

    Je dirais que ça peut être à la fois totalement normal (si la personne n'était pas censée faire du Java) ou purement scandaleux (si la personne était censée faire du Java).

    Personnellement qu'un collègue ne connaisse pas X ou Y hors de son domaine de compétence, je trouve ça normal. Qu'il ne connaisse pas X ou Y dans son domaine de connaissance, ça peut être plus surprenant selon la notoriété et l'utilité de X ou Y. Mais qu'une personne ne connaisse pas le minimum syndical (sans jeu de mot) de son domaine théorique de compétence, là il y a un problème. Je suis toujours halluciné de constater que certains osent se prétendre développeurs professionnels avec de l'expérience mais n'arrivent pas à résoudre un simple fizzbuzz – et c'est loin d'être un cas rare.

    Je parle des développeurs ici parce que c'est le milieu que je connais le mieux, mais le cas de la personne qui est incapable de faire son travail parce qu'elle n'a pas les (compétences, capacités, connaissances) nécessaires à icelui est hélas trop fréquent, dans tous les domaines. Parfois des demandes simples donnent lieu à des situations ubuesques. Exemple réel qui a quelques années maintenant : on avait besoin de photos de produits pour intégrer à un site commercial.

    – Bonjour, Client, il nous manque la photo de la fiche XXX. Ça devrait être une photo de boite d'œufs sur fond blanc.
    – Bonjour, Développeurs. Voici comme demandé dans votre mail la photo sur fond noir.
    (On vérifie. C'est la bonne boite d'œufs, sur fond noir. Notre mail parlait bien d'une photo sur fond blanc).
    – Bonjour, Client. Nous sommes désolés, il a dû y avoir une incompréhension ; pour une question de cohérence avec les autres images, nous avons besoin de la photo sur fond blanc, vous nous avez fourni une version sur fond noir.
    – Bonjour, Développeurs. Voici la photo demandée.
    (Joint : une photo de la boite d'œufs sur fond… paille. Comme si on avait posé la boite sur de la paille).
    – Bonjour, Client. Il semblerait qu'une fausse manœuvre ait provoqué l'envoi de la mauvaise version de la photo. Pouvez-vous vérifier et nous envoyer la photo sur fond blanc ? Elle devrait être dans votre outil de gestion etc.
    – Bonjour, Développeurs, voici la photo demandée sur fond blanc.
    (Joint : une photo d'une boite d'œufs identique achetée je ne sais où, posée sur un bureau blanc et photographiée au smartphone sous une mauvaise lumière, donc sur fond gris clair d'un côté et gris moins clair de l'autre).

    On a supposé qu'en réalité il manquait la photo sur fond blanc dans le référentiel. Mais qu'au lieu d'admettre ça et détourer celle sur fond noir, ou demander à ce qu'on détoure celle sur fond noir (ce qu'on a fini par faire et qui a pris 5 minutes), on a eu droit à ce dialogue absurde qui s'est étalé sur 3 jours.

    Et des situations de ce tonneau, j'en ai vu passer à peu près avec tous les clients, quels qu'aient été leurs domaines de compétence.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: pouvoir exhorbitant...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Chaque été depuis 9 ans, Altran enclenche une procédure de licenciement contre un délégué syndical. Évalué à 6.

    C'est horriblement compliqué à prouver, cf ta propre explication deux messages plus haut.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: pouvoir exhorbitant...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Chaque été depuis 9 ans, Altran enclenche une procédure de licenciement contre un délégué syndical. Évalué à 1.

    Ça devient possible quand le médecin de la sécurité sociale est précisément celui qui fournit les arrêts de complaisance. Mon père a même eu un de ses subordonnés qui lui expliquait qu'il avait un médecin pour se soigner, et un autre pour les arrêts.

    Cela dit c'est quand même un milieu assez particulier (la caricature de la fonction publique, avec un boulot objectivement chiant à mourir).

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: sur Médiapart

    Posté par  (site web personnel, Mastodon) . En réponse au journal Chaque été depuis 9 ans, Altran enclenche une procédure de licenciement contre un délégué syndical. Évalué à 4.

    D'ailleurs, je suppose que c'est aussi toi qui est à l'origine de ceci ? https://blogs.mediapart.fr/ehvince/blog/310818/chaque-ete-depuis-9-ans-altran-tente-de-licencier-un-delegue-syndical

    Si oui, tu as oublié d'en préciser la licence là-bas.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Communications chiffrées ?

    Posté par  (site web personnel, Mastodon) . En réponse au journal LineageOS. Évalué à 7.

    Et logique, et la prononciation correspond à l'écriture, et il n'y a pas besoin d'aller chercher une typographie voire des caractères exotiques.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Une faille de sécurité européenne

    Posté par  (site web personnel, Mastodon) . En réponse au journal RGPD, retrait de toutes les listes de MailJet. Évalué à 3.

    https://darkpatterns.org/

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Chaussures du cordonnier

    Posté par  (site web personnel, Mastodon) . En réponse au journal Freenaute, ton mot de passe d'abonné est stocké en clair chez Free. Évalué à 3.

    1/ on google les hashs, généralement on arrive à en casser un paquet car google a stocké des millions de hash avec leur clair

    Oh, que oui. Y compris des trucs invraisemblables. Je te laisse chercher ce MD5 290b284d9e401b0a1b25ddb281cf5bf0 ou ce SHA-1 b19e461aeaba1172b26b552471f56405e1928d17.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Une faille de sécurité européenne

    Posté par  (site web personnel, Mastodon) . En réponse au journal RGPD, retrait de toutes les listes de MailJet. Évalué à 9.

    En terme de consommation / pollution, un SUV de 2018 est comparable à bien des berines et sûrement préférable à une 306 de 2000

    Sans doute, mais ce n'est pas mon propos. Ce que je veux dire, c'est que quitte à posséder une voiture récente, il vaudrait mieux en avoir une qui réponde à ses besoins sans surdimensionnement. La proportion de SUV que je croise sur le chemin du boulot ou sur les parkings est statistiquement improbable par rapport à la proportion de gens qui ont besoin de ce genre de véhicule.

    Ce qui est un peu dommage, c'est qu'en 20 ans les moteurs ont évolué, mais qu'on s'est surtout servi de cette évolution pour motoriser des véhicules plus gros.

    Ça et évidemment les gens qui viennent systématiquement au boulot en voiture alors qu'ils sont en capacité (distance + capacité physique) de venir en vélo, transports en communs, etc. – voire parfois à pieds.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Une faille de sécurité européenne

    Posté par  (site web personnel, Mastodon) . En réponse au journal RGPD, retrait de toutes les listes de MailJet. Évalué à 10.

    Si ça pouvait calmer la passion des gens pour les SUV et pousser à la sobriété dans la consommation de carburant, ce serait plutôt intéressant.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: ... et pas qu'un ...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 4.

    À peu près dans l'ordre :

    • Le problème d'avoir une variable locale toto alors que tu as un champ nommé toto dans la classe, c'est que si dans la méthode tu utilises toto tu vas utiliser la variable locale, alors que dans toutes les autres méthodes de la classe si tu utilises toto tu vas utiliser le champ (this. est facultatif en Java).
    • Je n'a pas été clair : depuis Java 5, il ne faut plus utiliser les itérateurs dans le cas général – ça sert dans des cas particuliers, par exemple quand on supprime des éléments de la collection itérée.
    • Je ne sais pas exactement ce qu'impose Java, ce qui est sûr c'est que personne ne fait autre chose que « une classe = un fichier du même nom » (sauf les classe à l'intérieur d'autres classes).
    • Integer est effectivement plus lourd que int. En vrai, j'ai vu un seul cas où ça pouvait être problématique depuis plus de dix ans (et ce n'était qu'un élément parmi d'autres). Ce n'est pas un critère tant que tu n'as pas un test de performances qui te montent explicitement que c'en est un.

    En fait j'avais essayé de lancer ton projet TODOMVC. Le « Hello world » du journal semble fonctionner – si on peut appeler l'ouverture d'un navigateur qui appelle un .php sur ton serveur « fonctionner », parce que ça me paraît très éloigné de ce que j'avais compris de ton outil en lisant tes journaux.

    Tant que j'y suis : je ne connais aucun projet qui nécessite encore de lancer javac à la main. Rien que ça, c'est louche. Java profite tellement de la présence d'un IDE que ceux qui s'amusent à le développer et le compiler directement en CLI ne sont plus qu'une infime proportion.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: ... et pas qu'un ...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 6.

    J'avais prévenu que je n'y connaissais pas grand chose en Java !
    […]
    je préviens d'avance, je ne m'y connais pas plus en PHP qu'en Java).

    Mais si tu n'y connais rien, pourquoi tu te tapes les bindings toi-même ? Tu sais que tu vas avoir des versions toutes bancales qui feront peur plus qu'elles donneront envie. Si tu as une lib libre de qualité en C++, tu ne devrais avoir aucun mal à convaincre des développeurs plus expérimentés de faire les bindings dans les langages qui les intéressent.

    Pour le reste, dans l'ordre :

    • Tu ne mets pas 2 classes de premier niveau dans le même fichier en Java. C'est techniquement possible, mais personne ne fait ça.
    • Il n'y a pratiquement aucune raison de faire new String() en Java. En fait, je n'en vois aucune.
    • Il n'y a aucun problème à utiliser un champ dans une méthode.
    • Dans tous les cas, une variable locale ne devrait jamais avoir le même nom qu'un champ – j'imagine que c'est la même chose en C++ ?
    • L'itérateur, c'est Java 5 (2004).
    • Aucun intérêt à faire du Java < 8 en 2018 sur un nouveau projet.
    • On ne commite pas les if de test, ou alors on les commente – j'imagine que c'est la même chose en C++ ?
    • Tu as bien compris pour le new.
    • Un code de démo doit être le plus clair possible et illustrer les bonnes pratiques. Si c'est plus clair avec 15 fichiers qu'avec un seul, alors ça doit être dans 15 fichiers – j'imagine que c'est la même chose en C++ ?
    • On ne peut pas « nuller » un type primitif, mais il y a les classes enveloppes (pour toi Integer) pour ça. Depuis Java 5 (2004) le boxing et l'unboxing (conversion classes enveloppes ↔ types primitifs) sont automatiques.
    • Le code que j'ai proposé pour le paramètre xml fonctionne normalement depuis Java 1.0.
    • Ton explication sur les triples négations n'enlève rien au fait que c'est une triple négation. Pour des raisons de lisibilité (et sauf cas très exceptionnel), un if/else à branches équilibrées (ici c'est le cas) devrait être de la forme if (a == b) { X() } else { Y() } et non if (a != b) { Y() } else { X() }. Et les actions devraient avoir un sens positif (ShowBidule) et pas négatif (HideBidule). C'est valable dans tous les langages, dont le C++.
    • Un code qui n'est pas un pur test devrait utiliser un logger (y'en a un dans l'API standard).
    • Un lien clé-valeur en Java, c'est une Map
    • J'ai essayé de le tester. J'ai eu le même genre d'emmerdes que barmic dans ce commentaire, sauf que moi j'ai écris mon retour sur ma pause au boulot. Je n'avais pas 1h à passer pour faire marcher le bordel.

    La connaissance libre : https://zestedesavoir.com

  • # Chrome-like, Firefox : les blocs de code sont 1,1x trop gros

    Posté par  (site web personnel, Mastodon) . En réponse à la dépêche Quelques petits changements sur le site. Évalué à 4.

    La classe CSS code a une règle font-size: 1.1em;, ce qui fait que les blocs de code (en ligne et multi-ligne) sont plus gros que le reste, d'un facteur 1,1 semble-t-il.

    Ça donne un rendu assez inégal :

    Comportement observé sous Vivaldi 1.15.1147.55 (Stable channel) (64 bits) (moteur JS : V8 6.5.254.41) et Chromium 68.0.3440.7 et Firefox 61.0.1 (64 bits) sous Linux Mint 19 Cinnamon à jour.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Lapin compris

    Posté par  (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 7.

    En fait ça fonctionne parce que ton code est contraire aux bonnes pratiques de Java.

    Un constructeur ça sert à construire un objet, pas à lancer un traitement bloquant. Je me demande d'ailleurs si ça ne peut pas casser certains mécanismes de la JVM d’avoir ce genre de comportement.

    L'une des conséquences, c'est que l'utilisation d'un tel comportement est purement incompréhensible pour le lecteur du code.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: ... et pas qu'un ...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 10. Dernière modification le 03 août 2018 à 16:18.

    Être obligé de jongler avec plusieurs langages en fonction du type d'application à développer ? Non merci, je préfère pouvoir développer tout type d'application en utilisant un seul langage ; c'est beaucoup plus efficace.

    Ou pas.

    Mon stage de fin d'études c'était justement la migration d'une application mono-langage (Progress 4GL) à une pile de langages plus spécialisés (Java, HTML, JS, SQL). Eh bien la pile de langages était infiniment plus facile à comprendre et utiliser que l'espèce de soupe qui prétendait tout faire, des requêtes à la BDD aux effets présentés à l'utilisateur.


    Ça fait la troisième fois (en comptant la version Node.js) qu'ont dit que mon code est nettement perfectible (ce dont j'ai parfaitement conscience, comme je l'ai à maintes fois indiqué). Je veux bien, mais est-ce que quelqu'un aurait la bonté de me montrer ne fût-ce qu'un exemple de ce qui ne va pas, et comment le corriger, histoire que j'ai l'occasion d'améliorer mon code ? Ou alors je vais finir pas penser que mon code n'est peut-être pas aussi mauvais que certains le prétendent !

    Je vais être sec aussi, mais en ce qui concerne ton code Java, il n'y a tellement rien qui va que te l'expliquer en détail est un travail si énorme que c'est décourageant.

    Si je prends juste en exemple le TODO MVC :

    • Le fichier s'appelle main.java mais ne contient pas de classe publique qui s'appelle main.
    • Le fichier n'est pas dans un package.
    • Deux classes (package-protected) dans le même fichier.
    • Tu utilises des new String("…").
    • int index = this.index; ?!
    • D'ailleurs tu passes ton temps à masquer la variable de classe index avec des variables locales index.
    • Tu n'utilises pas les possibilités de l'API standard (l'itérateur ligne 43, le while ligne 197 par exemple, ou tout le bloc de if / else if à partir de la ligne 230).
    • if ( false ) { !?
    • La ligne 273 ressemble beaucoup à une boucle infinie.
    • Ton main lance Exception, ce qu'il ne devrait pas faire, et en plus rien dans ton code ne déclare que cette Exception devrait être lancée.
    • Tu appelles des méthodes avec leur package complet au lieu de les importer (info.q37.xdhq.XDH.readAsset).
    • Tout est ultra-manuel : génération de XML à la main en dur dans le code, méthode escape que tu as réinventé, etc.
    • Tout est en vrac dans un seul fichier : personnellement je ne comprends pas ce que fait ce code à sa simple lecture.
    • J'imagine que le index de la classe TodoMVC pourrait être nullable pour gérer le cas particulier au lieu d'utiliser la valeur spécifique -1.
    • Dans la méthode push tu modifies ton paramètre xml.
    • La logique contient des triples négations : dans handleCount tu as un else sur une condition négative qui active un truc qui s'appelle HideBidule. Au final ça fait quoi ?
    • D'ailleurs le projet s'appelle TODO MVC mais n'est pas du tout du MVC ?!
    • Je passe sur les détails comme le formatage, la présence d'un System.out, l'import de packages complets ou le manque d'accolades.
    • Je passe aussi sur ton API qui me semble très étrange, comme ces méthodes qui attendent un tableau de tableau de String.

    Rien qu'en re-présentant le code correctement, ça donnerait quelque chose comme :

    package todomvc;
    /*
        Copyright (C) 2018 Claude SIMON (http://q37.info/contact/).
    
        This file is part of XDHq.
    
        XDHq is free software: you can redistribute it and/or
        modify it under the terms of the GNU Affero General Public License as
        published by the Free Software Foundation, either version 3 of the
        License, or (at your option) any later version.
    
        XDHq is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
        Affero General Public License for more details.
    
        You should have received a copy of the GNU Affero General Public License
        along with XDHq If not, see <http://www.gnu.org/licenses/>.
    */
    
    import info.q37.atlas.Atlas;
    import info.q37.atlas.DOM;
    import info.q37.atlas.GUI;
    import info.q37.xdhq.XDH;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    
    class Todo {
        public boolean completed;
        public String label;
    
        Todo(String label, boolean completed) {
            this.completed = completed;
            this.label = label;
        }
    
        Todo(String label) {
            this(label, false);
        }
    }
    
    class TodoMVC extends Atlas {
        private Boolean exclude;
        private int index = -1;
        private List<Todo> todos;
    
        private int itemsLeft() {
            return (int) todos.stream()
                    .filter(todo -> !todo.completed)
                    .count();
        }
    
        private String escape( String text ) {
            return text
                    .replace( "&", "&amp;")
                    .replace( "\"", "&quot;")
                    .replace( "<", "&lt;")
                    .replace( ">", "&gt;");
        }
    
        private String push(Todo todo, int id, String xml) {
            return xml
                    + "<Todo"
                    + " id=\"" + id + "\""
                    + " completed=\"" + todo.completed + "\">"
                    + escape(todo.label)
                    + "</Todo>\n";
        }
    
        private void displayCount(DOM dom, int count) {
            String text = "";
    
            switch (count) {
            case 0:
                break;
            case 1:
                text = "1 item left";
                break;
            default:
                text = count + " items left";
                break;
            }
    
            dom.setContent("Count", text);
        }
    
        private void handleCount( DOM dom ) {
            int count = itemsLeft();
    
            if (count != todos.size())
                dom.disableElement("HideClearCompleted");
            else
                dom.enableElement("HideClearCompleted");
    
            displayCount(dom, count);
        }
    
        private void displayTodos( DOM dom ) {
    
            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<XDHTML>\n<Todos>\n";
    
            ListIterator<Todo> li = todos.listIterator();
            while (li.hasNext()) {
                int index = li.nextIndex();
    
                Todo todo = li.next();
    
                if ((exclude == null) || (todo.completed != exclude))
                    xml = push(todo, index, xml);
            }
    
            xml = xml + "</Todos>\n</XDHTML>";
    
            dom.setLayoutXSL("Todos", xml, "Todos.xsl");
            handleCount( dom );
        }
    
        private void submitNew( DOM dom ) {
            String content = dom.getContent("Input");
            dom.setContent("Input", "");
    
            if (!"".equals(content.trim())) {
                todos.add(0, new Todo(content));
                displayTodos( dom );
            }
        }
    
        private void submitModification( DOM dom ) {
            int index = this.index;
            this.index = -1;
    
            String content = dom.getContent("Input." + index);
            dom.setContent("Input." + index, "");
    
            if (!"".equals(content.trim())) {
                todos.set(index, new Todo(content, todos.get(index).completed));
    
                dom.setContent("Label." + index, escape(content));
    
                dom.removeClasses( new String[][] { { "View." + index, "hide" }, { "Todo." + index, "editing" } } );
            } else {
                todos.remove(index);
                displayTodos( dom );
            }
        }
    
        private void toggle( DOM dom, String id) {
            int index = Integer.parseInt(id);
            Todo todo = todos.get(index);
    
            todo.completed = !todo.completed;
    
            todos.set(index, todo);
    
            dom.toggleClass( "Todo." + id, "completed");
            dom.toggleClass( "Todo." + id, "active");
    
            if (exclude != null)
                displayTodos( dom );
            else
                handleCount( dom  );
        }
    
        private void all( DOM dom ) {
            exclude = null;
    
            dom.addClass("All", "selected");
            dom.removeClasses(new String[][] { { "Active", "selected" }, { "Completed", "selected" } } );
            dom.disableElements(new String[]{"HideActive","HideCompleted"});
        }
    
        private void active( DOM dom ) {
            exclude = true;
    
            dom.addClass("Active", "selected");
            dom.removeClasses(new String[][] { { "All", "selected" }, { "Completed", "selected" } } );
            dom.disableElement("HideActive");
            dom.enableElement("HideCompleted");
    }
    
        private void completed( DOM dom ) {
            exclude = false;
    
            dom.addClass("Completed", "selected");
            dom.removeClasses( new String[][] { { "All", "selected" }, { "Active", "selected" } } );
            dom.disableElement("HideCompleted");
            dom.enableElement("HideActive");
        }
    
        private void clear( DOM dom ) {
    
            todos.removeIf(todo -> todo.completed);
    
            displayTodos( dom );
        }
    
        private void edit(DOM dom, String id) {
            String content = dom.getContent(id);
    
            index = Integer.parseInt(content);
    
            dom.addClasses( new String[][] { { "View." + content, "hide" }, { id, "editing" } } );
            dom.setContent("Input." + content, todos.get(index).label);
            dom.focus("Input." + content);
        }
    
        private void cancel( DOM dom ) {
            int index = this.index;
            this.index = -1;
    
            dom.setContent("Input." + index, "");
            dom.removeClasses( new String[][] { { "View." + index, "hide" }, { "Todo." + index, "editing" } } );
        }
    
        public TodoMVC() {
            System.out.println("Connection detected...");
    
            todos = new ArrayList<>();
    
        }
    
        public void handle( DOM dom, String action, String id ) {
            switch (action) {
                case "Connect":
                    dom.headUp(XDH.readAsset("HeadDEMO.html"));
                    dom.setLayout("", XDH.readAsset("Main.html"));
                    dom.focus("Input");
                    dom.disableElements(new String[]{"HideActive", "HideCompleted"});
                    displayTodos(dom);
                    break;
                case "Submit":
                    if (index == -1)
                        submitNew(dom);
                    else
                        submitModification(dom);
                    break;
                case "Destroy":
                    todos.remove(Integer.parseInt(dom.getContent(id)));
                    displayTodos(dom);
                    break;
                case "Toggle":
                    toggle(dom, id);
                    break;
                case "All":
                    all(dom);
                    break;
                case "Active":
                    active(dom);
                    break;
                case "Completed":
                    completed(dom);
                    break;
                case "Clear":
                    clear(dom);
                    break;
                case "Edit":
                    edit(dom, id);
                    break;
                case "Cancel":
                    cancel(dom);
                    break;
                default:
                    throw new RuntimeException("No or unknown action !!!");
            }
        }
    
        public static void main(String[] args) {
            String dir;
    
            if ( System.getenv("EPEIOS_SRC") == null )
                dir = ".";
            else
                dir = "TodoMVC";
    
            launch("Connect", dir, GUI.DEFAULT, args);
    
            while (true)
                new TodoMVC();
        }
    }

    (non testé).

    La connaissance libre : https://zestedesavoir.com

  • # Il vaudrait mieux te mettre en contact avec quelqu'un qui connait Java

    Posté par  (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 10.

    Je te conseille de te rapprocher d'un développeur Java, au moins pour tes exemples de présentations, pour deux raisons :

    1. Parce qu'il existe déjà un outil qui fait ça, c'est GWT – et que donc tu y seras obligatoirement comparé.
    2. Parce que ton code ressemble tellement peu à du Java que tes exemples te desservent au lieu de te vendre.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Le scroll est devenu plus lent ? (Chrome-like)

    Posté par  (site web personnel, Mastodon) . En réponse au journal LinuxFr.org : seconde quinzaine de juillet 2018. Évalué à 2. Dernière modification le 01 août 2018 à 15:30.

    J'ignorais l'existence de cette propriété. Après avoir joué avec la démo de Mozilla, je te confirme que mon ressenti vient complètement de l'implémentation de scroll-behavior: smooth; sous Chrome-like quand il y a beaucoup à scroller (et donc c'est pas un problème de perfs, ce qui est le principal).

    C'est peut-être une habitude à prendre : LinuxFr est à ma connaissance le seul site que j'utilise à avoir des pages dans lesquels je fais des sauts aussi longs. Les autres ont soit de la pagination, soit du chargement au scroll, et dans les deux cas ça ne s'utilise pas pareil.

    La connaissance libre : https://zestedesavoir.com

  • # Le scroll est devenu plus lent ? (Chrome-like)

    Posté par  (site web personnel, Mastodon) . En réponse au journal LinuxFr.org : seconde quinzaine de juillet 2018. Évalué à 2.

    pas mal de petites modifications sur le site en ce moment, n'hésitez pas à me dire si vous voyez des choses bizarres, cassées ou qui vous semblent moins bien qu'avant

    J'ai l'impression que le scroll est devenu plus lent qu'avant, au moins sur les moteurs de rendus type Chromium.

    Cas de test :

    1. Trouver une page avec beaucoup de commentaires (comme celle-ci).
    2. Cliquer sur le lien [ qui renvoie au dernier commentaire par ordre chronologique.

    Comportement attendu : ça scrolle rapidement jusqu'au commertaire.

    Comportement obtenu : le scroll est assez lent, me semble-t-il plus lent qu'avant, surtout en début de scroll (c'est lent et ça accélère).

    Comportement observé sous Vivaldi 1.15.1147.55 (Stable channel) (64 bits) (moteur JS : V8 6.5.254.41) et Chromium 68.0.3440.7.

    Firefox 61.0.1 (64 bits) ne semble pas avoir ce souci.

    Ordinateur :

    • Linux Mint 19 Cinnamon à jour,
    • noyau 4.15.0-29-generic, Intel© Core™ i3-7100 CPU @ 3.90GHz × 2,
    • 16 Go de RAM,
    • carte graphique Advanced Micro Devices, Inc. [AMD/ATI] Oland GL FirePro W2100 avec les drivers libres.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: digital, vraiment ?

    Posté par  (site web personnel, Mastodon) . En réponse au journal Pollution numérique. Évalué à 5.

    Ça je suis d'accord, ma question portait vraiment sur les impressions de mails.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: digital, vraiment ?

    Posté par  (site web personnel, Mastodon) . En réponse au journal Pollution numérique. Évalué à 7.

    C'est encore fréquent les gens comme « Monique » ? Je pensais naïvement qu'avec l'habitude et les écrans plats qui explosent beaucoup moins les yeux que les écrans cathodiques, on en voyait de moins en moins.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Google fait du « beau travail » ?

    Posté par  (site web personnel, Mastodon) . En réponse au journal Google + Commission Européenne = KABOUM. Évalué à 3.

    Google n'utilise plus le « don't be evil ».

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Compte créé le 13 juillet...

    Posté par  (site web personnel, Mastodon) . En réponse au journal Tout ce qu’il faut savoir sur le langage PHP. Évalué à 2. Dernière modification le 18 juillet 2018 à 12:10.

    Je confirme, et la page en question liée arrive juste derrière.

    La connaissance libre : https://zestedesavoir.com

  • [^] # Re: Autre lien intéressant

    Posté par  (site web personnel, Mastodon) . En réponse au journal Tout ce qu’il faut savoir sur le langage PHP. Évalué à 8.

    Et surtout très daté en plus de sa mauvaise foi. PHP Sadness est plus intéressant à mon sens, parce que factuel et surtout maintenu à jour.

    La connaissance libre : https://zestedesavoir.com

  • # Pourquoi ce lien et maintenant ?

    Posté par  (site web personnel, Mastodon) . En réponse au journal Tout ce qu’il faut savoir sur le langage PHP. Évalué à 10.

    Pourquoi partager un lien qui a maintenant plus de huit ans et demie – une éternité en terme d'informatique ?

    Pour donner un repère temporel, quand l'article a été écrit, la version courante de PHP était la 5.2, il n'y avait ni trait ni espace de noms ni rien de plus moderne, et PHP 4 était déprécié depuis moins de 6 mois.

    La connaissance libre : https://zestedesavoir.com