Glandos a écrit 1215 commentaires

  • [^] # Re: À bas les roues en bois

    Posté par  . En réponse au journal Du chemin à emprunter pour les développeurs débutants vers un premier emploi... . Évalué à 10.

    Réinventer la roue est une part du processus pédagogique. Dans tous les apprentissages, on (re)fait des choses déjà faites des milliers de fois par les prédécesseurs. On apprend encore le calcul mental là où les calculateurs électroniques sont bien plus performants.

    Mais, revenons au développement des logiciels. Réinventer la roue, c'est nécessaire pour savoir une chose (en dehors de l'apprentissage profond d'une technique particulière) : quand est-ce qu'il ne faut pas réinventer la roue. J'ai vu des gens dans mon travail recoder des tables de hachage en Java ou en C#. J'ai vu trop de gens ne même pas imaginer que le problème qu'ils ont face à eux est un problème commun, forcément résolu ailleurs, avec un meilleur recul et plus d'expérience.

    Par contre, mettre dans son CV un truc qui montre qu'on a réinventé la roue, je ne sais pas si c'est vendeur en effet. La réflexion n'est pas terminée ;)

  • # Version web

    Posté par  . En réponse au lien Thunderbird est en bonne santé financière - 2.3 millions de donations en 2020, 15 développeurs. Évalué à 10.

  • # Traduction ?

    Posté par  . En réponse au lien L'Internet, c'est important, toute notre vie et nos activités s'y passent, mais c'est compliqué.. Évalué à 3.

    Le livre a l'air très bien, mais je ne vais pas l'acheter pour moi. Et s'il n'est qu'en anglais, alors je ne vais pas l'acheter du tout. Est-il possible de savoir si des traductions en français sont prévues ?

  • [^] # Re: Ouaiche

    Posté par  . En réponse au lien "Rust vs. Go: Why They’re Better Together". Évalué à 2.

    Je découvre Forth C'est… spécial. Et comme il le dit :

    It’s not for nothing that Forth has a reputation for being write-only.

  • [^] # Re: Nuisance sur la voie publique

    Posté par  . En réponse au lien L’Assemblée nationale s’attaque aux publicités lumineuses - numerama. Évalué à 4.

    Je viens de le terminer, et sisi, ça a un rapport. Il est à la limite de l'ésotérisme, ou plutôt, de la recherche de soi, mais y a quand même quelque chose dedans de très pertinent. Et surtout de très positif. Car contrairement à la pollution aux hydrocarbures qui mettra une centaine d'années à disparaître, la destruction de la couche d'ozone qui met quelques dizaines d'années à s'en remettre, la pollution lumineuse disparaît… instantanément.

    Je dois dire que j'étais déjà convaincu. J'ai grandi dans un endroit isolé, éclairé par les lumières du parking d'un immense hypermarché qui se reflétaient dans le ciel à 6 kilomètres de là. C'était nul. Depuis que j'ai passé l'âge de la terreur nocturne, je suis fan de l'obscurité nocturne. Je me brosse souvent les dents dans le noir, parce que c'est presque le dernier geste que je fais avant de me coucher, et que ça me repose déjà.

  • # Nuisance sur la voie publique

    Posté par  . En réponse au lien L’Assemblée nationale s’attaque aux publicités lumineuses - numerama. Évalué à 9.

    « Cette disposition porte atteinte au droit de la propriété en donnant aux maires le pouvoir d’intervenir sur l’aménagement intérieur des lieux privés que sont les magasins », ont argué les parlementaires.

    Ça, ça m'épate. Oui, évidemment que les lieux privés n'ont pas à être envahi par les autorités, mais là, c'est l'inverse : c'est l'aménagement des magasins qui envahit, par sa lumière, sur l'espace public. Donc, oui, on peut. On impose bien aux gens de ne pas laisser les fenêtres ouvertes quand ils font une soirée chez eux à cause du bruit. Pourquoi pas empêcher ceux qui font de la lumière ?

  • [^] # Re: Personnellement…

    Posté par  . En réponse au lien Vivre un retour à Windows. Évalué à 2.

    Non, je n'ai pas quatre mains. Des fois, j'ai des collègues qui viennent sur ma machine. Et on est deux dessus, en même temps. C'est pratique.

    Enfin, euh, oui, bon, c'était avant la pandémie ça. Là, ça fait longtemps que je suis … … … JE SUIS TOUT SEUUUUUL SUR MON CLAVIIIIEEEEEEERR

  • # Personnellement…

    Posté par  . En réponse au lien Vivre un retour à Windows. Évalué à 9.

    J'aurais du mal. Je trouve que Windows n'est pas du tout adapté pour une station de travail. Il faut paramétrer (=> enlever) trop de trucs pour que ça n'en fasse pas plus que ce qu'on veuille.

    Ah, et aussi, sur mon ordinateur portable, j'ai ma configuration X.org qui paramètre l'AZERTY pour le clavier intégré, et le BÉPO pour mon clavier externe. Les deux en même temps. Et ça, sous Windows…

  • # Explication du « moinssage »

    Posté par  . En réponse au lien Un groupe malicieux pense être à l’origine de l’incendie du centre d’OVH. Évalué à 6.

    Extrait :

    Nous avons remonté le flux numérique depuis un grille-pain connecté pour nous introduire jusqu’au data center d’OVH et déclencher un court-circuit, cela par la seule force de notre esprit, aidés seulement de quelques cartons de LSD. Mais les cartons étaient trop dosés, une fois à l’intérieur, on a fait n’importe quoi, et le feu s’est déclaré trop tôt – si toutefois la seule puissance de nos cerveaux défoncés peut causer de tels dommages, ce qu’on ne saura malheureusement jamais.

    Donc oui, c'est n'importe quoi. Mais euh, je ne sais pas pourquoi Reporterre s'amuse à publier ça d'ailleurs.

  • [^] # Re: tuyauteries en PVC, planché en bois, eau + électricité, câble non ignifugé ...

    Posté par  . En réponse au lien OVH et la protection incendie. Évalué à 4.

    Il s'agit en effet de RBX4, donc Roubaix, comme mentionné dans la légende de https://lafibre.info/ovh-datacenter/ovh-et-la-protection-incendie/msg80428/#msg80428

  • [^] # Re: Why not rely on app developer to handle security?

    Posté par  . En réponse au lien Le cauchemar de l'empaquetage: côté distrib. Évalué à 2.

    Et en cas de Heartbleed, tu recompiles tout ton OS. C'est quand même un fucking disadvantage pour moi.

  • [^] # Re: Tocard & esbroufe ?

    Posté par  . En réponse au journal OVH - Le nuage part en fumée ?. Évalué à 10.

    Mais déjà, mettre un DC à côté de sites Seveso laisse songeur.

    https://actu.fr/societe/toulouse-ce-site-seveso-situe-pres-des-habitations-inquietait-les-riverains-il-va-fermer_37464703.html

    Ça fait 20 ans que les habitants demandent à ce que ce site s'en aille. Donc moi, je préfère qu'il y ait un DataCenter à côté d'un site Seveso plutôt que les maisons des gens. Le DataCenter, c'est pas « grave ».

  • [^] # Re: et donc le salaire c'est une participation au bénéfice ?

    Posté par  . En réponse au message [Emploi][CDI][Toulouse] Développeur Web expérimenté équipe R&D. Évalué à 5.

    Corrigé, merci. Désolé, mais les gens qui postent ici (en l'occurrence, moi), ne sont clairement pas des professionnels des ressources humaines.

    Oui, bon, OK, l'argent, c'est quand même important :)

  • [^] # Re: Breveté aux USA, breveté partout ?

    Posté par  . En réponse au journal OCB serait-il toujours protégé par des brevets ?. Évalué à 4. Dernière modification le 05 mars 2021 à 15:03.

    Ainsi, on rigolera bien sur cette section : https://www.epo.org/law-practice/legal-texts/html/guidelines/f/g_ii_3_6.htm

    Les programmes d'ordinateur sont exclus de la brevetabilité en vertu de l'article 52(2)c) et (3) s'ils sont revendiqués en tant que tels. Cependant, conformément aux critères généralement applicables au titre de l'article 52(2) et (3) (G‑II, 2), l'exclusion ne s'applique pas aux programmes d'ordinateur qui présentent un caractère technique.

    Et en plus, ça ne parle même pas français : https://www.epo.org/law-practice/legal-texts/html/guidelines/f/g_ii_3_6_1.htm

    Tel est le cas, par exemple, d'un programme d'ordinateur qui définit une méthode destinée à commander un système de freinage antiblocage pour automobile, à détecter des émissions au moyen d'un appareil à rayons X, à comprimer des vidéos, à restaurer une image numérique déformée ou à crypter des communications électroniques (cf. G‑II, 3.3).

    Sérieusement, on dirait que les gens qui ont écrit ça ne savait pas de quoi ils parlaient.

  • [^] # Re: Factoriser

    Posté par  . En réponse au journal Schnorr aurait-il cassé RSA ?. Évalué à 3.

    C'est un produit dérivé de cette série de journaux. Il faut simplement intégrer le produit de ces développements comme le vecteur d'informations à la racine de la pensée LinuxFR. C'est une pensée complexe, mais très réelle, et pas imaginaire.

  • [^] # Re: Breveté aux USA, breveté partout ?

    Posté par  . En réponse au journal OCB serait-il toujours protégé par des brevets ?. Évalué à 9.

    Et en plus, j'arrive toujours pas à comprendre comment on peut valider le fait de poser un brevet sur une formule mathématique.

    Est-ce qu'on a le droit de me demander des royalties parce que j'exécute la suite de Fibonacci sur ma machine ?

    Bon, évidemment, le débat n'est jamais fermé, mais ce journal parle justement du fait que ça pourrait être mieux pour OCB :)

  • [^] # Re: Factoriser

    Posté par  . En réponse au journal Schnorr aurait-il cassé RSA ?. Évalué à 8.

    Tu es le premier à avoir fait la remarque, malgré le grand nombre de lecteurs. Je me demande si c'est un facteur aggravant.

  • # Réponse de la majorité municipale

    Posté par  . En réponse au journal L'espace artistique Mixart-Myrys et le hackerspace Tetalab en danger. Évalué à 3.

    Elle est disponible sur http://documents.toulouse.fr/AToulouse/atoulouse_mars2021/version_accessible/expression-politique/groupe-aimer-toulouse.html

    Bon, je la reproduis ici quand même, je ne sais pas trop si j'ai le droit, mais c'est un magazine municipale à vocation d'information publique :

    Mix’Arts : la sécurité des personnes avant tout
    Lors du Conseil Municipal du 29 janvier dernier, Archipel a combattu la fermeture des locaux de Mix’Art Myrys, collectif culturel, longtemps demeuré dans l’illégalité d’occupations illicites de bâtiments. La réalité est pourtant simple : l’utilisation de ses locaux actuels est dangereuse (stockage de produits inflammables, absence d’alarme incendie, absence de désenfumage du bâtiment, absence de vérification des installations technique…). Ce lieu mettait donc en danger les occupants et les visiteurs. L’Équipe municipale, pénalement responsable en cas d’incident, a pris ses responsabilités : elle l’a fait fermer au public. Or, Mix’Art Myrys a refusé les multiples propositions de rénovation formulées par la collectivité, prétendument « insuffisantes » … mais représentant 3 millions d’argent public ! Les critiques d’« Archipel », préférant fermer les yeux sur le danger de l’occupation actuelle, posent question. Elles interrogent sur l’existence d’un calcul politique commun à nos opposants et aux dirigeants de Mix’Art Myrys. En ce qui nous concerne, nous n’entendons pas politiser ce dossier et, jamais, nous ne transigerons avec la sécurité des Toulousains, qu’ils soient artistes ou non. Jamais !

  • [^] # Re: Quel est le problème ?

    Posté par  . En réponse au lien Le cauchemar de l'empaquetage: côté distrib. Évalué à 3.

    https://www.djangoproject.com/weblog/2020/feb/03/security-releases/ Donc oui, c'est possible.

    Ensuite : https://www.cvedetails.com/product/18211/Djangoproject-Django.html?vendor_id=10199

    Les failles XSS, c'est important aussi. Directory traversal, c'est pas joli non plus.

    Je ne blâme pas Django, je trouve qu'ils ont un tableau plutôt léger même. Mais c'est du python, et c'est possible.

    Le C et le C++ permettent des failles de type dépassement de mémoire, qui sont méchantes. Mais les langages interprétés contiennent leurs lots de failles, qui ne font pas vraiment partie du langage en lui-même, mais des droits avec lesquels ils s'exécutent sur la machine.

  • [^] # Re: Quel est le problème ?

    Posté par  . En réponse au lien Le cauchemar de l'empaquetage: côté distrib. Évalué à 3.

    Pour moi les problémes de sécurité sont uniquement avec des bibliothèques écritent en langage non safe (C/C++). Ce n'est pas le cas ?

    Bien sûr, ce n'est pas le cas. Il y a plein de bibliothèques écrites en Python qui ont des problèmes de sécurité. Par exemple, un backend d'un site web écrit en Django, qui n'échappe pas correctement des entrées utilisateurs, menant à une injection SQL.

    Il faut mettre à jour la bibliothèque. Et pas attendre que les gens qui en dépendent se réveillent.

  • [^] # Re: Distribution

    Posté par  . En réponse au lien Java sur le bureau: parce que les webapps, ça va bien 5 minutes. Évalué à 5.

    C'est à peu près ça. C'était un choix pertinent, il y a 10 ans. Aujourd'hui, la plateforme Web a gagné en fonctionnalités, et performances, et pour beaucoup de cas, c'est le meilleur choix pour l'utilisateur.

  • # Distribution

    Posté par  . En réponse au lien Java sur le bureau: parce que les webapps, ça va bien 5 minutes. Évalué à 4.

    Pour mon expérience, le dernier article (sur la distribution) était le plus intéressant.

    Notamment :

    Distributing applications on a couple of computers inside the same company is not an issue. A lot of products are available for automating the pushing of files onto computers. Issues might start to appear when you need to coordinate the deployment across different physical sites.

    Je ne suis pas tout à fait d'accord. Je travaille dans une petite équipe, plutôt indépendante, faisant partie d'un gros groupe, avec sa politique de distribution de logiciels. Nous, on fait les nôtres, sur le côté. C'est volontaire, et assumé, on est un peu électrons libres transversaux, pour mettre de l'huile dans les rouages quand il faut. Et bien sûr, il n'en faut pas trop non plus.

    Bref, donc on doit distribuer des logiciels. Et s'intégrer à « l'AppStore » du groupe, c'est difficile, voir pas désirable du tout, car nos logiciels ne doivent pas être installés par tout le monde.

    Pendant 10 ans (!), j'ai développé et maintenu deux applications Java/Swing, déployé avec JavaWebStart. J'ai trouvé plein de limites à Swing, et j'ai dû hacker des composants (faire de la pseudo-réflexivité dessus) pour arriver à mes fins. Par exemple, pour que le menu déroulant d'une combobox ne soit pas limité en largeur à la taille de la combobox, mais affiche le maximum d'informations :

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Insets;
    import javax.swing.JComboBox;
    import javax.swing.JList;
    import javax.swing.ListModel;
    import javax.swing.event.PopupMenuEvent;
    import javax.swing.event.PopupMenuListener;
    import javax.swing.plaf.basic.BasicComboPopup;
    
    /**
     * This is a workaround for the combobox popup, whose width is equal to the component width.
     * To display very large content, it's really annoying, so this listener resize the popup if necessary.
     */
    public class ComboBoxPopupResizerListener implements PopupMenuListener {
    
        private final JComboBox<?> comboBox;
    
        /**
         * Build the listener.
         * @param comboBox The combobox whose popup will be resized.
         */
        public ComboBoxPopupResizerListener(JComboBox<?> comboBox) {
            this.comboBox = comboBox;
        }
    
        @Override
        @SuppressWarnings("unchecked")
        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
            // Copy paste from http://forum.java.sun.com/thread.jspa?threadID=522572&messageID=2501520
            BasicComboPopup popup = (BasicComboPopup) this.comboBox.getUI().getAccessibleChild(this.comboBox, 0);//Popup
            if (popup == null) {
                return;
            }
            int preferredWidth = (int) Math.max(this.comboBox.getPreferredSize().getWidth(), this.comboBox.getWidth());
            Component comp = popup.getComponent(0);//JScrollPane
    
            // Compute height by rendering the first element
            JList<Object> popupList = popup.getList();
            ListModel<Object> popupListModel = popupList.getModel();
            int modelSize = popupListModel.getSize();
            int height;
            if (modelSize > 0) {
                // Fetch the insets to add to the rendered component
                Insets insets = popup.getInsets();
                modelSize = Math.min(modelSize, this.comboBox.getMaximumRowCount());
                height = (int) popupList.getCellRenderer()
                        .getListCellRendererComponent(popupList, popupListModel.getElementAt(0), 0, false, false)
                        .getPreferredSize().getHeight() * modelSize
                        + insets.bottom + insets.top;
            } else {
                height = (int) this.comboBox.getPreferredSize().getHeight();
            }
    
            popup.setPreferredSize(new Dimension(preferredWidth, height));
            popup.setLayout(new BorderLayout());
            popup.add(comp, BorderLayout.CENTER);
        }
    
        @Override
        public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
        }
    
        @Override
        public void popupMenuCanceled(PopupMenuEvent e) {
        }
    }

    C'est beau comme un camion avec des roues de vélo, mais je m'en suis servi partout.

    Ensuite JavaWebStart, c'est pas si beau et tout joli. C'est plein de bugs chiants, comme « tiens, je crois que le cache est pas à jour, mais faut lancer l'application deux fois pour que ça force la mise-à-jour, lalala ». On a dû plusieurs fois demander aux utilisateurs de supprimer le cache et de recommencer.
    La signature de l'application est compliquée aussi, mais ça, évidemment, c'est le problème de toute application. Le Web résout ça, en délégant cette partie au serveur, donc à l'administrateur système, et pas au développeur.

    Enfin, la sécurité des communications. En Swing, ben… on fait ce qu'on veut. C'est bien, mais il faut aussi réinventer la roue : transmission des informations via TLS, authentification, etc. En Web, c'est déjà dedans. Alors évidemment, quand on a besoin du TCP brut, ou pire, de l'UDP, c'est plus dur.

    Donc on est parti sur une réécriture en Web. Parce que ça marche, c'est « mature », ça se distribue facilement. Bien sûr, c'est pas tout rose. La multitude de frameworks est décourageante. La vitesse de dépréciation aussi. Mon application Swing, elle marche depuis 10 ans, même sur des ordinateurs récents. C'est solide, ça tient la route, ça se casse pas tout seul.

    Il y a beaucoup d'aspect des applications Web que je n'aime pas. C'est bloaté à mort, c'est souvent un gâchis de ressources monumentales. Pour beaucoup de choses, je préfère une application de bureau. Mais il ne faut pas renier pour autant les fabuleuses avancées de cette plateforme : le Web remplit beaucoup de cas d'utilisation aujourd'hui, pour la plus grande peine des utilisateurs de VisualBasic.

  • [^] # Re: Pinning

    Posté par  . En réponse au lien Le cauchemar de l'empaquetage: côté distrib. Évalué à 4.

    Non, le pinning, c'est pas une bonne chose.

    Les contraintes, oui. Par exemple, définir que marcel a besoin de libfoo >=2, <3, !2.2.1 ça peut se concevoir. Évidemment, ça ne marche que si libfoo utilise le système de version sémantique. Sinon, c'est la foire d'empoigne…

  • [^] # Re: Python

    Posté par  . En réponse au journal Découvrir Docker, Python, LLVM et Emscripten. Évalué à 4.

    Allez, on dégaine un iPython, c'est parti.

    In [4]: some_list = 'setanéstebnsetanustebnésatenastubnestpnesanuastnbtsnastbnstanstbnsteanutsenbstanstbnstaà' * 1000
    
    In [7]: %%timeit
       ...: 
       ...: list_a = []
       ...: list_b = []
       ...: 
       ...: for s in some_list:
       ...:     if s[0] == 'a':
       ...:         list_a.append(s)
       ...:     elif s[0] == 'b':
       ...:         list_b.append(s)
       ...: 
       ...: 
    6.08 ms ± 142 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [8]: %%timeit
       ...: 
       ...: list_a = [s for s in some_list if s.startswith('a')]
       ...: list_b = [s for s in some_list if s.startswith('b')]
       ...: 
       ...: 
    11.8 ms ± 159 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [10]: def starts_with_a(s):
        ...:     return s[0] == 'a'
        ...: 
        ...: def starts_with_b(s):
        ...:     return s[0] == 'b'
        ...: 
    
    In [11]: %%timeit
        ...: 
        ...: list_a = list(filter(starts_with_a, some_list))
        ...: list_b = list(filter(starts_with_b, some_list))
        ...: 
        ...: 
    10.4 ms ± 187 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [12]: %%timeit
        ...: generator_a = (s for s in some_list if s.startswith('a'))
        ...: generator_b = (s for s in some_list if s.startswith('b'))
        ...: 
        ...: 
    401 ns ± 1.17 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    In [13]: %%timeit
        ...: generator_a = (s for s in some_list if s.startswith('a'))
        ...: generator_b = (s for s in some_list if s.startswith('b'))
        ...: 
        ...: len(list(generator_a))
        ...: len(list(generator_b))
        ...: 
        ...: 
    12 ms ± 113 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [14]: len(some_list)
    Out[14]: 88000
    

    Sur une telle liste, moyennement grosse, les générateurs ont l'air d'aller légèrement plus vite. C'était un test rapide et sûrement pourrave.

  • # En gros

    Posté par  . En réponse au lien Comment Google se moque de la CNIL (Pixel de Tracking). Évalué à 9.

    17 clics pour ne pas être pisté. De multiples panneaux d'avertissements terrifiants.

    Au final : un dépôt forcé de cookies.