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.
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.
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.
Ç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).
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.
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.
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.
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 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.
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.
Ê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.
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 :
packagetodomvc;/* 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/>.*/importinfo.q37.atlas.Atlas;importinfo.q37.atlas.DOM;importinfo.q37.atlas.GUI;importinfo.q37.xdhq.XDH;importjava.util.ArrayList;importjava.util.List;importjava.util.ListIterator;classTodo{publicbooleancompleted;publicStringlabel;Todo(Stringlabel,booleancompleted){this.completed=completed;this.label=label;}Todo(Stringlabel){this(label,false);}}classTodoMVCextendsAtlas{privateBooleanexclude;privateintindex=-1;privateList<Todo>todos;privateintitemsLeft(){return(int)todos.stream().filter(todo->!todo.completed).count();}privateStringescape(Stringtext){returntext.replace("&","&").replace("\"",""").replace("<","<").replace(">",">");}privateStringpush(Todotodo,intid,Stringxml){returnxml+"<Todo"+" id=\""+id+"\""+" completed=\""+todo.completed+"\">"+escape(todo.label)+"</Todo>\n";}privatevoiddisplayCount(DOMdom,intcount){Stringtext="";switch(count){case0:break;case1:text="1 item left";break;default:text=count+" items left";break;}dom.setContent("Count",text);}privatevoidhandleCount(DOMdom){intcount=itemsLeft();if(count!=todos.size())dom.disableElement("HideClearCompleted");elsedom.enableElement("HideClearCompleted");displayCount(dom,count);}privatevoiddisplayTodos(DOMdom){Stringxml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<XDHTML>\n<Todos>\n";ListIterator<Todo>li=todos.listIterator();while(li.hasNext()){intindex=li.nextIndex();Todotodo=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);}privatevoidsubmitNew(DOMdom){Stringcontent=dom.getContent("Input");dom.setContent("Input","");if(!"".equals(content.trim())){todos.add(0,newTodo(content));displayTodos(dom);}}privatevoidsubmitModification(DOMdom){intindex=this.index;this.index=-1;Stringcontent=dom.getContent("Input."+index);dom.setContent("Input."+index,"");if(!"".equals(content.trim())){todos.set(index,newTodo(content,todos.get(index).completed));dom.setContent("Label."+index,escape(content));dom.removeClasses(newString[][]{{"View."+index,"hide"},{"Todo."+index,"editing"}});}else{todos.remove(index);displayTodos(dom);}}privatevoidtoggle(DOMdom,Stringid){intindex=Integer.parseInt(id);Todotodo=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);elsehandleCount(dom);}privatevoidall(DOMdom){exclude=null;dom.addClass("All","selected");dom.removeClasses(newString[][]{{"Active","selected"},{"Completed","selected"}});dom.disableElements(newString[]{"HideActive","HideCompleted"});}privatevoidactive(DOMdom){exclude=true;dom.addClass("Active","selected");dom.removeClasses(newString[][]{{"All","selected"},{"Completed","selected"}});dom.disableElement("HideActive");dom.enableElement("HideCompleted");}privatevoidcompleted(DOMdom){exclude=false;dom.addClass("Completed","selected");dom.removeClasses(newString[][]{{"All","selected"},{"Active","selected"}});dom.disableElement("HideCompleted");dom.enableElement("HideActive");}privatevoidclear(DOMdom){todos.removeIf(todo->todo.completed);displayTodos(dom);}privatevoidedit(DOMdom,Stringid){Stringcontent=dom.getContent(id);index=Integer.parseInt(content);dom.addClasses(newString[][]{{"View."+content,"hide"},{id,"editing"}});dom.setContent("Input."+content,todos.get(index).label);dom.focus("Input."+content);}privatevoidcancel(DOMdom){intindex=this.index;this.index=-1;dom.setContent("Input."+index,"");dom.removeClasses(newString[][]{{"View."+index,"hide"},{"Todo."+index,"editing"}});}publicTodoMVC(){System.out.println("Connection detected...");todos=newArrayList<>();}publicvoidhandle(DOMdom,Stringaction,Stringid){switch(action){case"Connect":dom.headUp(XDH.readAsset("HeadDEMO.html"));dom.setLayout("",XDH.readAsset("Main.html"));dom.focus("Input");dom.disableElements(newString[]{"HideActive","HideCompleted"});displayTodos(dom);break;case"Submit":if(index==-1)submitNew(dom);elsesubmitModification(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:thrownewRuntimeException("No or unknown action !!!");}}publicstaticvoidmain(String[]args){Stringdir;if(System.getenv("EPEIOS_SRC")==null)dir=".";elsedir="TodoMVC";launch("Connect",dir,GUI.DEFAULT,args);while(true)newTodoMVC();}}
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.
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 :
Trouver une page avec beaucoup de commentaires (comme celle-ci).
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.
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.
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.
[^] # Re: Montre ton code
Posté par SpaceFox (site web personnel, Mastodon) . En réponse au journal Prototypage d'applications web. Évalué à 7.
Le schéma est indispensable à cause de ça :
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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (site web personnel, Mastodon) . En réponse au journal Freenaute, ton mot de passe d'abonné est stocké en clair chez Free. Évalué à 3.
Oh, que oui. Y compris des trucs invraisemblables. Je te laisse chercher ce MD5
290b284d9e401b0a1b25ddb281cf5bf0
ou ce SHA-1b19e461aeaba1172b26b552471f56405e1928d17
.La connaissance libre : https://zestedesavoir.com
[^] # Re: Une faille de sécurité européenne
Posté par SpaceFox (site web personnel, Mastodon) . En réponse au journal RGPD, retrait de toutes les listes de MailJet. Évalué à 9.
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 SpaceFox (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 SpaceFox (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 4.
À peu près dans l'ordre :
toto
alors que tu as un champ nommétoto
dans la classe, c'est que si dans la méthode tu utilisestoto
tu vas utiliser la variable locale, alors que dans toutes les autres méthodes de la classe si tu utilisestoto
tu vas utiliser le champ (this.
est facultatif en Java).Integer
est effectivement plus lourd queint
. 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 SpaceFox (site web personnel, Mastodon) . En réponse au journal Du développement full-stack en Java. Évalué à 6.
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 :
new String()
en Java. En fait, je n'en vois aucune.if
de test, ou alors on les commente – j'imagine que c'est la même chose en C++ ?new
.Integer
) pour ça. Depuis Java 5 (2004) le boxing et l'unboxing (conversion classes enveloppes ↔ types primitifs) sont automatiques.xml
fonctionne normalement depuis Java 1.0.if (a == b) { X() } else { Y() }
et nonif (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++.Map
…La connaissance libre : https://zestedesavoir.com
# Chrome-like, Firefox : les blocs de code sont 1,1x trop gros
Posté par SpaceFox (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èglefont-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 SpaceFox (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 SpaceFox (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.
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.
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 :
main.java
mais ne contient pas de classe publique qui s'appellemain
.new String("…")
.int index = this.index;
?!index
avec des variables localesindex
.while
ligne 197 par exemple, ou tout le bloc de if / else if à partir de la ligne 230).if ( false ) {
!?main
lanceException
, ce qu'il ne devrait pas faire, et en plus rien dans ton code ne déclare que cetteException
devrait être lancée.info.q37.xdhq.XDH.readAsset
).escape
que tu as réinventé, etc.index
de la classeTodoMVC
pourrait être nullable pour gérer le cas particulier au lieu d'utiliser la valeur spécifique -1.push
tu modifies ton paramètrexml
.handleCount
tu as unelse
sur une condition négative qui active un truc qui s'appelleHideBidule
. Au final ça fait quoi ?TODO MVC
mais n'est pas du tout du MVC ?!System.out
, l'import de packages complets ou le manque d'accolades.Rien qu'en re-présentant le code correctement, ça donnerait quelque chose comme :
(non testé).
La connaissance libre : https://zestedesavoir.com
# Il vaudrait mieux te mettre en contact avec quelqu'un qui connait Java
Posté par SpaceFox (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 :
La connaissance libre : https://zestedesavoir.com
[^] # Re: Le scroll est devenu plus lent ? (Chrome-like)
Posté par SpaceFox (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 SpaceFox (site web personnel, Mastodon) . En réponse au journal LinuxFr.org : seconde quinzaine de juillet 2018. Évalué à 2.
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 :
[
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 :
La connaissance libre : https://zestedesavoir.com
[^] # Re: digital, vraiment ?
Posté par SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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 SpaceFox (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