• [^] # Mais il n'y a vraiment pas de quoi...

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

    Sommaire

    Salut !

    Salut !

    Je vais prendre le temps de te dire ce que je pense de ton approche :) Ça va peut être être rude, mais comprends bien que si je prends du temps pour écrire un commentaire c'est bien que je veux être constructif. De plus je distingue totalement ton travaille de la personne que tu es (c'est important). Mais il y a pas mal de choses à dire je trouve.

    Super ! Je n'attend que ça, des commentaires constructifs !

    Ton approche

    Background

    Tu connais le C++, tu vis le C++ en autarcie, tu nous explique à longueur de journée que les pratiques classiques comme les tests ne sont pas pour toi.

    Bon, on ne va pas reprendre cette discussion ici, mais je n'ai jamais dit que les tests ne sont pas pour moi. Tout ce que j'ai dit, c'est que, comme tout un chacun, je me sentirais bien mieux si je pouvais prendre le temps de soumettre mon code à des test, mais que, ce n'est pas, pour moi, en l'état actuel des choses, économiquement viable de passer du temps à écrire des tests. Peut-être qu'un jour, le temps que je gagne à ne pas écrire de tests sera significativement inférieur au temps que j'aurais gagné en soumettant mon code à ces tests. Ce jour-là, j'écrirais des tests. Quoiqu'il en soit, j'encourage tout un chacun à écrire des tests auxquels soumettre leur code.

    En informatique comme ailleurs affirmer que l'on est plus malin/différents/le cas à part, c'est se tromper.Tu as des centaines de milliers de personnes dans le monde qui après une cinquantaine d'années à tenter de construire une certaine qualité logicielle. Arriver et dédaigner leur travail, par un « bof c'est pour les autres », c'est forcément se tromper.

    Où ai-je affirmé de telles choses ? Le fait est que, moi, je n'ai absolument aucun problème avec les personnes qui ne codent pas uniquement en C++. Par contre, il semble que, parmi ces personnes, il y en a à qui cela pose un gros problème que je code uniquement en C++...

    On exerce une science dure, pour affirmer des choses il faut avoir des arguments autre que « je fais de la factorisation poussée » (personne d'autre ne factorise ?). De tout ce que tu nous as décrit ça "fonctionne" parce que tu es le seul à coder et que tu accepte de voir très tard les bugs (tu reconstruit les autres logiciels et tu teste s'il plantent).

    Si tu relis la partie que tu cites, tu constateras que j'ai explicitement parlé d'hypothèse, et que donc je reconnaissais implicitement que ce que j'avançais n'était peut-être pas la bonne explication. Quand aux bugs, je les découvre peut-être plus tard que si j'utilisais une batterie de tests, mais toutefois suffisamment tôt pour qu'ils ne gênent pas mes clients. Et c'est le plus important, non ? (Par contre, ton histoire de reconstruire les autres logiciels et de tester s'ils plantent, là, je n'ai pas trop compris...)

    Tu pars donc très très très mal : tu nous propose d'utiliser un code pas tester (yay !), mais pour quoi donc ?

    Je n'écris pas explicitement de code de test, mais je lance toutefois quand plusieurs fois même mon application au cours de son développement pour voir si elle se comporte correctement, et, en outre, sur plusieurs plate-formes (notamment GNU/Linux, macOS et Windows)...

    Objectif

    Tu ne sais faire que du C++, quelqu'un te demande de faire du web, tu fais du web en C++. Très bien. Mais la populace fais déjà du web avec un tas d'autres choses. Il va falloir nous donner une raison d'abandonner nos stack libres bien plus fiables que la tienne (dont le copyright est partagé, supporté par une communauté, testée, testée massivement,...).

    Pourquoi devrais-je donner une raison ? Je donne à tout un chacun le moyen de tester ma bibliothèque pour qu'il puisse se forger sa propre opinion à son propos. Après, libre à lui d'en rester à sa stack bien-aimée ad vitam æternam, peu me chaut...

    En plus du web, il existe un énorme paquet de techno qui apparaît. Ça signifie qu'il y a déjà énormément d'idées qui ont étaient essayée. D'autant que ça fais des années que ça dure !

    Euh... Soit ! Et ?

    Tu ne nous a pas donné d'autres arguments sur le pourquoi utiliser ta pile autre que c'est du C++ et c'est simple... oui mais.

    J'ai surtout donné un moyen, que j'ai essayé de rendre le plus simple possible, pour tout un chacun de l'essayer et ainsi de pouvoir se forger sa propre opinion... (oui, je sais, je me répète).

    Alternatives

    Tu n'a aucune idée de si c'est simple, tu en ai l'utilisateur-codeur et tu n'es même pas allé voir ce qui se fait ailleurs. On ne souffre pas la comparaison quand on en fait pas mais on va forcément la faire pour toi. Qu'est-ce que ça donne comparé à du CGI ? Qu'est-ce que ça donne face à Wt ? Pourquoi les gens choisiraient le code d'un développeur dans son garage (pas testé) par rapport à tout ce qui peut exister ailleurs ?

    Si, je suis allé voir ce qui se faisait ailleurs, mais cela ne me convenait pas. Et comme c'est déjà les principes de base qui ne me convenaient pas, je n'ai pas essayé, donc je suis particulièrement mal placé pour émettre une comparaison objective de ma bibliothèque avec l'existant. Et encore une fois, je n'essaie de convaincre personne d'utiliser ma bibliothèque...

    J'ai parlé de techno C++, mais alors j'ai pas de doute qu'en PHP, Java et JS c'est pire encore.

    Pas compris ce tu essayes d'exprimer, là...

    Finalement

    En vrai je ne sais pas pourquoi tu nous présente des plus ou moins portages dans d'autres langages, tu ne les utilise pas et tu n'explique pas en quoi les développeurs de ce langage gagneraient à utiliser ton code.

    Déjà, ce ne sont pas des portages, mais des bidings, c'est à dire que le cœur de la bibliothèque est le même, quelque soit le langage utilisé. Et, encore une fois, pourquoi j'essayerais de convaincre qui que ce soit par quelqu'argument que ce soit des qualités de ma bibliothèque s'il existe un moyen, que j'ai essayé de rendre le plus simple possible, de l'essayer (bis, ou plutôt, ter repetita) ? S'il n'est alors pas capable de se forger sa propre opinion, je ne peux rien pour lui...

    Pire encore, tu nous parle d'une bibliothèque C++, je sais pas ce qu'elle fais. Si je vais voir http://atlastk.org/ (pas de https ?), tu nous dis que c'est du C++ donc c'est rapide. Si tu ne le corrobore pas avec des benchmarks c'est du vent. Tu nous explique pas en quoi ta bibliothèque est performante. Quelle archi est-ce que tu utilise ? Comment-est-ce que tu t'assure que tes bindings restent performant ? Tu connais netty ? C'est ce qui permet à Java d'être performant sur le réseau, il faut vraiment avoir des arguments pour pouvoir dire qu'on est plus performant que ça.

    (Si, il y a du https, mais je ne force personne à l'utiliser.)

    Sérieux, tu veux vraiment que je développe, ou fasse développer, ma bibliothèque dans tous les langages disponibles juste pour pouvoir faire des benchmarks ?

    La bibliothèque étant à l'état de prototype, il est inutile de rentrer dans les détails techniques, vu que ces derniers ont de grandes choses de considérablement évoluer...

    Concernant le C++, je ne pense que beaucoup considère que ce soit un mauvais choix si on cherche à obtenir les meilleures performances possibles...

    La mise en œuvre

    D'un point de vu utilisateur

    Ton code nous montre du html dans des String. Donc on peut dire au revoir à la validation du html. On peut faire autrement ? Très bien montre nous et c'est là dessus qu'on évaluera si c'est facile ou pas.

    Comme j'ai dit dés l'introduction, je ne suis pas familier avec Java. Certaines fonctions prennent une String devant contenir du HTML, et j'ai donc créer le contenu de ces String à la main pour éviter d'avoir à installer un outil tiers (il y a peut-être un outil fournit en standard ; n'ayant pas cherché, je l'ignore), et cela fonctionne très bien. Maintenant, s'il y en a qui sont incapables d'écrire du code HTML valide à la main, libre à eu de passer par l'outil de leur choix...

    Tu nous montre aussi des manipulation de DOM, c'est affreux à utiliser... et c'est extrêmement lent ! C'est bien pour ça que toutes les techno utilisent un DOM virtuel... Aie...

    Les goûts et les couleurs...

    Perso., je préfère manipuler le DOM que de passer systématiquement par un moteur de template et de me farcir du MVC. Mais ça, c'est mon choix personnel, que je n'impose à personne.

    Et je rappelle que ce qui est présenté ici, comme indiqué dans l'introduction de ce journal, c'est un prototype, donc quelque chose de largement améliorable. Il est tout à fait possible qu'à partir d'une des prochaines version de cette bibliothèque s'appuie sur un DOM virtuel.

    D'un point de vu conception

    Si je regarde Atlas.jar c'est ta classe principale, hein ? Tu as des chemins codés en dur dans ton code... C'est pas une question de java, il n'y a pas de langage dans le quel c'est une bonne pratique...

    Les chemins en dur ne sont utilisés que dans mon environnement de développement. Si ma bibliothèque est installé en suivant la procédure indiquée dans ce journal, ces chemins ne sont pas utilisés.

    Tu lance des Threads non managés. Tu ne les nettoie pas. Ton code explose, c'est une garantie.
    D'après toi qu'est-ce qui est affiché par ce code ?
    java
    public void foo() {
    System.out.println("start");
    new Thread(() -> {
    try {
    Thread.sleep(1_000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("Hello");
    }).start();
    System.out.println("end");
    }

    Même si tu ne lançais un thread qu'à chaque connexion, ça exploserais à quelques dizaines de milliers de connexions. Le problème ce n'est pas que tu refuserais des connexions, mais bien que le serveur tombe à ce moment là...

    Encore une fois, la version présentée ici n'est qu'un prototype. Si une meilleure gestion des threads est requise, elle sera implémentée..

    Et je n'ai aucune idée de ce qui est affiché par ton code (et je m'en contrefiche un peu...).

    Tentons de voir s'il n'y a pas un truc que je rate dans ton code. Si je tente de lancer ton premier exemple :

    michel@MBA:/tmp/tmp.msaUgm9EXO % java -cp .:Atlas.jar Hello
    java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform!
     at java.awt.Desktop.checkActionSupport(Desktop.java:225)
     at java.awt.Desktop.browse(Desktop.java:381)
     at info.q37.xdhq.dom.DOM_DEMO.<init>(DOM_DEMO.java:154)
     at info.q37.xdhq.DOM.<init>(DOM.java:48)
     at info.q37.atlas.DOM.<init>(DOM.java:24)
     at info.q37.atlas.Atlas.<init>(Atlas.java:28)
     at Hello.<init>(Hello.java:3)
     at Hello.main(Hello.java:48)
    Exception in thread "Thread-0" java.lang.NullPointerException
     at info.q37.xdhq.DOM.getAction(DOM.java:62)
     at info.q37.atlas.Atlas.run(Atlas.java:38)
     at java.lang.Thread.run(Thread.java:748)
    

    Mais ça continue à s'exécuter, mais il n'écoute pas de port. Awt c'est une bibliothèque graphique, je ne sais pas ce que ça vient faire là, je pensais lancer un serveur web... Le code lance, une classe démo de ta bibliothèque ?...

    En fonctionnement normal, un serveur est effectivement lancé, mais ce fonctionnement, tel que la bibliothèque est codée, nécessite l'installation de code natif en local. Pour éviter cela, et, du coup, simplifier la procédure d'installation, le fonctionnement pas défaut ne lance pas de serveur.

    Je vais un peu plus loin. Tu tente silencieusement d'accéder à "http://atlastk.org/atlas.php?_token=c6f39490-1d1d-4e1d-9f21-b7eec4935e5d". Là ça commence à vraiment être mauvais tu piste potentiellement les gens qui utilisent ta techno...

    Je tente tellement silencieusement d'accéder à cette adresse qu'elle est normalement affichée en clair dans la console à partir de laquelle l'application est lancée... Mais elle ne s'est probablement pas affichée chez toi à cause du message d'erreur.

    Cette adresse est en fait celle à laquelle on doit se connecter avec un navigateur web pour accéder à l'application qui vient d'être lancée. Normalement, un navigateur pointant sur cette adresse est automatiquement lancé, mais ça échoue chez toi, peut-être parce que tu as lancé l'application dans un environnement sans interface graphique (quoique ce cas est normalement prévu).

    Quand à l'erreur, je pensais avoir traité le cas de figure où le lancement d'un navigateur n'est pas possible, mais apparemment pas. Normalement, dans ce cas de figure, un message est affiché dans la console invitant à ouvrir un navigateur à l'adresse que tu as relevée.

    Je passe sur une partie de ton message, car, malgré le message d'erreur, l'application fonctionne probablement. Il suffit de se connecter avec un navigateur web à l'adresse que tu as relevée (attention : elle change à chaque lancement de l'application). En tout cas merci pour le pointeur pour corriger le problème concernant le lancement d'un navigateur.

    Pour ma première partie :

    garde l'humilité d'aller voir ce qui se fait ailleurs

    Ne t'en fait pas, je regarde volontiers ce qui se fait ailleurs, non par humilité, mais par simple curiosité...

    si tu veux qu'on passe du temps à apprendre ton truc explique nous ce qu'il a de plus et être en C++ ça n'est pas une bonne raison (surtout si c'est pour tout coder en java)

    Entièrement d'accord, le fait d'être codé en C++ n'est absolument pas un critère en soi pour utiliser une bibliothèque (et je n'ai jamais prétendu le contraire), fût-ce à travers un binding Java ; en fait, ça serait même une raison de ne pas utiliser cette bibliothèque pour tout autre langage que le C++, compte tenu de l'inaptitude du gestionnaire de paquets de la plupart des langages (s'il existe !) à gérer correctement le déploiement de code natif. Mais, comme dit, avec la procédure d'installation telle que détaillée dans ce journal, il n'y a pas ce problème, puisque il n'y a pas de code natif qui est installé localement.
    Le seul but de ce journal, c'est de présenter un projet et de fournir un moyen simple de l'essayer. Si ce projet ne vous intéresse pas, il vous suffit de passer votre chemin (si possible, sans essayer de me convaincre de ne pas utiliser C++ pour faire du web ; ce n'est pas le sujet, et ça n'apporte absolument rien au débat). S'il vous intéresse, libre à vous de l'essayer, et de me faire remonter vos observations, que je lirais attentivement, via les commentaires.

    Et, encore une fois, tout n'est pas codé en Java. Ce qui est codé en Java, c'est uniquement un wrapper (en fait, c'est un peu plus qu'un simple wrapper).

    J'ai passé du temps a regarder ce que tu as fais et à rédiger mon commentaire (il est mieux construit au début qu'à la fin, mais c'est la fatigue), je sui réellement allé cherché ton code et j'ai tenté de le lancer. Comprends que si ton truc ne marche pas en y aillant passé environ 1h30 à 2h, c'est qu'il y a un vrai problème. Je connais le java et je peux aller voir ce qu'il s'y passe. J'aurais pu lancer n'importe quel hello world vu, angular, react, elm, python ou brainfuck en 10 minutes. En terme de qualité c'est très loin de ce que l'on peut attendre d'un truc qu'on voudrait réutiliser (dans un cadre professionnel ou pas).

    Désolé que tu y ai passé tout ce temps, alors que ça fonctionnait probablement dés le début... Et encore une fois, c'est indiqué dans le journal, ce qui est présenté ici, c'est un prototype, donc quelque chose qui est uniquement mis à disposition pour quiconque voudrait l'essayer, et absolument pas pour être utilisé dans un cadre professionnel...

    En tout cas, merci d'avoir pris le temps d'essayer ce logiciel, et de rédiger un commentaire qui soit plus constructif que la plupart de ceux que j'ai pu lire jusqu'à présent... Il me confirme que je suis vraiment pas doué en terme de communication...

    Zelbinium: pour la génération qui crée, pas celle qui scrolle...