jtremesay a écrit 362 commentaires

  • # Détails

    Posté par  (site web personnel) . En réponse au lien Scadaplayer: un outil pour visualiser sous forme de tableau de bord les données SCADA d'une éolienne. Évalué à 4. Dernière modification le 21 décembre 2023 à 19:49.

    J'voulais faire un truc rigolo avec un canvas HTML5, du vanilla typescript, et des données d'une vraie éolienne (R80711 du parc La Haute Borne de Engie)

  • [^] # Re: not new

    Posté par  (site web personnel) . En réponse au lien Découverte du théorème de Pythagore sur une tablette antérieure de 1000 ans à Pythagore. Évalué à 3.

  • [^] # Re: et moi et moi et moi…

    Posté par  (site web personnel) . En réponse au journal L'avis des daltoniens. Évalué à 4.

    anecdote rigole. Les étoiles de la 8ème colonne utilisent exactement les même couleurs que celles de la 4ème, mais grâce à la petite bordure noire, on les discrimine vachement mieux du fond. #discriminationPositive

  • # Contexte

    Posté par  (site web personnel) . En réponse au lien Workaround pour jouer à Cyberpunk 2077 Liberty Phantom sans Gog Galaxy. Évalué à 2.

    Suite a un petit foirage des devs, le DLC acheté sur GOG fait crashé le jeu au démarrage si GOG Galaxy n'est pas aussi lancé. Hors, GOG Galaxy n'est toujours pas disponible sous Linux…

    Il est à noter que la version de base du jeu marche très bien sous seule. IL semblerait que la version Steam marche aussi très bien.

    N'est concerné que le DLC acheté via GOG.

  • [^] # Re: Ça me parait léger

    Posté par  (site web personnel) . En réponse au lien Stop using Brave Browser - OSnews. Évalué à 6.

    Il est à noter que le site existait avant qu’il n’aille travailler chez Brave et qu’il n’a jamais caché cette information
    https://github.com/privacytests/privacytests.org/issues/166#issuecomment-1599996563

  • [^] # Re: actualiser..

    Posté par  (site web personnel) . En réponse au journal petit topo des messageries sécurisées, et leurs alternatives. Évalué à 5.

    j'ai crée la page et importé le journal dedans
    https://linuxfr.org/wiki/clients-de-messagerie-instanee

  • [^] # Re: Deltachat

    Posté par  (site web personnel) . En réponse au journal petit topo des messageries sécurisées, et leurs alternatives. Évalué à 3.

    mais si vous êtes tous chez gmail, je suis sûr que ça marche très bien :)

  • # Deltachat

    Posté par  (site web personnel) . En réponse au journal petit topo des messageries sécurisées, et leurs alternatives. Évalué à 10.

    Client de messagerie instantané basé sur le mail. Tu as déjà un compte email quelque part ? Félicitation, tu as un compte Deltachat. Tes amis ont une adresse email ? Félicitation, ils ont déjà un compte Deltachat. Et vu que vous êtes déjà tous sur Deltachat, autant ditcher les autres messageries :)

    Le chiffrement est assuré par autocrypt.

    https://delta.chat/

    PAR CONTRE, comme c’est basé sur le mail, ben vous aurez les mêmes emmerdes qu’avec le mail. Genre tes messages bloqués par le fournisseur de mail de ta pote parce que l’IP de ton fournisseur a fini dans une liste Spamhaus :(

  • [^] # Re: Question sérieuse : à quel degré le mot "Gimp" est-il péjoratif/offensant en anglais ?

    Posté par  (site web personnel) . En réponse au lien Une nouvelle initiative pour forker/renommer GIMP. Évalué à 6. Dernière modification le 31 juillet 2023 à 18:23.

    Est-ce que ce duo parent/enfant ne peut pas être utilisé ?

    Souvent, non.

    Parent/enfant sert plutôt à indiquer comment ils sont crées alors que master/slave indiquent leurs relation dans le traitement des données.

    Mais par chance, selon le contexte, on a d’autres paires de mots qui peuvent marcher. Notamment :

    • manager / worker
    • primary / replica, dans le cadre des serveurs de bases de données
    • jtremesay / les juniors, dans le cadre du taf (aucun de mes juniors n’a été maltraité lors de la rédaction de cette blague nulle)
  • [^] # Re: Dommage cette licence non libre

    Posté par  (site web personnel) . En réponse au journal Django + Jupyter Lab = ❤️. Évalué à 3.

    Arf, toutes mes plus plates excuses alors !

    Pas de soucis :)

    Ça n'a pas du aider la rédaction et j'aurais pu la fermer du coup. Je plaide coupable, vaut mieux écrire quand on y est disposé.

    Boarf. Au moins comme ça on a résolu le problème juridique du snippet. Parce que comme tu l'as dit, le but est avant tout que ça puisse servir à d'autre. Ça m'aurait bien fait gagner 2 semaines de prototypage si j'avais pu tomber sur mon journal quand j'ai dû dev ça pour le taf :D

  • [^] # Re: Dommage cette licence non libre

    Posté par  (site web personnel) . En réponse au journal Django + Jupyter Lab = ❤️. Évalué à 4.

    Comment dire… J’ai vu ton commentaire hier, mais je n’ai répondu qu’aujourd’hui, le temps que l’envie de te traiter de tout un tas de nom d’oiseaux redescende suffisamment.

    Car même si tu as parfaitement raison sur le fond, tout comme barmic<, j’ai trouvé la forme très violente. Sur le coup, j’ai même cru que c’était zenitram qui me répondait :-/

  • [^] # Re: Dommage cette licence non libre

    Posté par  (site web personnel) . En réponse au journal Django + Jupyter Lab = ❤️. Évalué à 2.

    Parce qu'il trouvait cette idée de licence marrante ? Que ça blague tombe à l'eau c'est une chose, mais faut souffler un peu.

    J’ai surtout lu le texte de la licence trop vite. Je pensais que c’était une MIT avec une blague en plus. Je n’avais pas réalisé que la manière dont c’était écrit ajoutait une contrainte forte et rendait le code non libre.

    Si tu veux être rigoriste s'il n'avait mis aucune licence ce serait le droit d'auteur qui s'appliquerait et qui serait ce qu'il y a de plus restrictif

    Non. Comme le journal lui même est sous licence CC BY-SA, sans mention contraire, le code inclu dans le journal aurait aussi été sous CC BY-SA. (IANAL)

  • [^] # Re: Dommage cette licence non libre

    Posté par  (site web personnel) . En réponse au journal Django + Jupyter Lab = ❤️. Évalué à 2.

    Tu as raison sur le fond. Voici le même code sous licence MIT.

    # Copyright 2023 Jonathan Tremesaygues
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to deal
    # in the Software without restriction, including without limitation the rights
    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    # copies of the Software, and to permit persons to whom the Software is
    # furnished to do so, subject to the following conditions:
    #
    # The above copyright notice and this permission notice shall be included in all
    # copies or substantial portions of the Software.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    # SOFTWARE.
    from importlib import import_module
    from typing import Awaitable, Optional
    from asgiref.sync import sync_to_async
    from jupyter_server.auth import IdentityProvider
    from jupyter_server.auth.identity import User as JUser
    from jupyter_server.base.handlers import JupyterHandler
    from django.conf import settings
    from django.contrib import auth
    from django.contrib.auth.models import User as DUser
    
    # https://jupyter-server.readthedocs.io/en/latest/operators/security.html#jupyter_server.auth.IdentityProvider
    class DjangoIdentityProvider(IdentityProvider):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            # C'est vraiment la méthode recommandée par Django pour charqer le bon
            # moteur de session >_<
            # https://docs.djangoproject.com/en/4.2/topics/http/sessions/#using-sessions-out-of-views
            self.SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
    
        # https://jupyter-server.readthedocs.io/en/latest/operators/security.html#jupyter_server.auth.IdentityProvider.get_user
        async def get_user(self, handler: JupyterHandler) -> Optional[JUser] | Awaitable[Optional[JUser]]:
            # `get_user` est utilisé dans un contexte async mais Django préfère un 
            # contexte sync pour parler avec la db. Et le SessionStore par défaut 
            # utilise la db. Pis de toute façon faudra accéder à la DB pour charger
            # l'utilisateur.
            # https://docs.djangoproject.com/en/4.2/topics/async/
            return await sync_to_async(self._get_user)(handler)
    
        def _get_user(self, handler: JupyterHandler) -> Optional[JUser]:
            # Essaye de récupérer le session id dans les cookies
            if (cookie_entry := handler.request.cookies.get(settings.SESSION_COOKIE_NAME)) is not None:
                # Charge la session correspondante
                session = self.SessionStore(session_key=cookie_entry.value).load()
    
                # Essaye de récupérer l'user id correspondant
                if (user_id := session[auth.SESSION_KEY]) is not None:
                    try:
                        # Essaye de charger l'utilisateur correspondant 
                        user = DUser.objects.get(pk=user_id)
                    except DUser.DoesNotExist:
                        # Utilisateur non trouvé
                        pass
                    else:
                        # Est-ce que l'utilisateur est un admin?
                        if user.is_staff:
                            # L'utilisateur actuel est bien connecté et est un admin!
                            # Crée un Jupyter user à partir du Django user
                            return JUser(username=user.username)
    
            # Impossible d'authentifier l'utilisateur
            return None
  • [^] # Re: Je ne sais pas trop comment j’ai foiré ma veille technologique à ce point,

    Posté par  (site web personnel) . En réponse au lien NGINX Universal Web App Server. Évalué à 3.

    Il n’a pas l’air d’avoir une configuration dynamique des vhosts basé sur les labels docker, qui est la raison pour laquelle j’avais ditché nginx en faveur de traefik.

    Exemple avec traefik:

    services:
    
      traefik:
        image: "traefik:v2.10"
        container_name: "traefik"
        ports:
          - "80:80"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
    
      whoami:
        image: "traefik/whoami"
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.whoami.rule=Host(`whoami.jtremesay.org`)"

    Exemple avec nginx-proxy:

    services:
      nginx-proxy:
        image: nginxproxy/nginx-proxy
        ports:
          - "80:80"
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
      whoami:
        image: "traefik/whoami"
        expose:
          - "8000"
        environment:
          - VIRTUAL_HOST=whoami.jtremesay.org
          - VIRTUAL_PORT=8000
  • [^] # Re: Je ne sais pas trop comment j’ai foiré ma veille technologique à ce point,

    Posté par  (site web personnel) . En réponse au lien NGINX Universal Web App Server. Évalué à 2.

    Je découvre aussi nginx-proxy et acme-companion
    https://github.com/nginx-proxy/acme-companion
    https://github.com/nginx-proxy/nginx-proxy

    Qui me permettraient de remplacer traefik dans mes stacks. Pas que j'aime pas traefik, il fait le taf. Mais je suis sentimentalement attaché à nginx, et je suis triste d'avoir arrêté de l'utilisé parce que moins pertinant dans mes stacks cloud.

  • # Précision sur les notebook

    Posté par  (site web personnel) . En réponse au journal Django + Jupyter Lab = ❤️. Évalué à 6.

    Il faut utiliser le kernel "Django Shell-Plus" pour exécuter vos notebooks.

    De plus, le notebook est exécuté dans un contexte asynchrone. Ce qui rend relou la réutilisation de ton vieux code synchrone.

    Si tu ne veux pas te prendre la tête, voila un boilerplate à utiliser dans le notebook pour simplifier tout ça :

    from asgiref.sync import sync_to_async
    from django.contrib.auth.models import User
    
    @sync_to_async
    def main():
        # Ton code synchrone ici
        print(User.objects.all())
    
    await main()

    Tu peux aussi utiliser Numpy et matplotlib pour faire de jolis graphs.

  • # Je ne sais pas trop comment j’ai foiré ma veille technologique à ce point,

    Posté par  (site web personnel) . En réponse au lien NGINX Universal Web App Server. Évalué à 6.

    mais je découvre avec 6 ans de retard que NGINX a son propre serveur d’application.

  • # Synopsys

    Posté par  (site web personnel) . En réponse au lien Synopsys: "Let’s Talk Licenses: Beware the Beerware License". Évalué à 2.

    Je trouve ça rigolo qu'une énorme boite sérieuse comme Synopsys prenne le temps de faire l'analyse juridique d'une licence potache comme la Beerware.

  • [^] # Re: incomparable

    Posté par  (site web personnel) . En réponse au journal [société] France, la République aveugle ?. Évalué à 10.

    car l'interdiction en France de faire des stats sur ce sujet empêche les chercheurs d'étudier les problème

    Fake news. Dans certains cas, il est possible de faire de la stat en ce sens:

    Dans le commentaire de sa décision, le Conseil constitutionnel précise aussi que la statistique publique (l'Insee et les services statistiques ministériels) peut réaliser des études sur la mesure de la diversité des origines des personnes, de la discrimination et de l'intégration en se fondant sur des données objectives, comme le nom, l'origine géographique ou la nationalité antérieure à la nationalité française.

    Pour autant les données objectives ne sont pas les seules qui peuvent être utilisées dans les études statistiques. Le Conseil constitutionnel indique que des données subjectives, telles celles fondées sur le « ressenti d'appartenance » peuvent aussi être recueillies dans des enquêtes statistiques, et utilisées dans les études en découlant.

    Dans les deux cas, la statistique publique doit demander l'avis du Conseil national de l'information statistique (Cnis), déclarer l’enquête à la Commission nationale de l'informatique et des libertés (Cnil) et obtenir, si cela est nécessaire, son autorisation (article 25 de la loi de 1978). Comme toutes les données recueillies par la statistique publique, les données collectées dans ce cadre sont anonymisées et soumises au secret statistique (loi de 1951 sur l'obligation, la coordination et le secret en matière de statistiques).

    https://www.insee.fr/fr/information/2108548

    Article sur le blog de l’Insee: Oui, la statistique publique produit des statistiques ethniques
    Panorama d’une pratique ancienne, encadrée et évolutive

  • [^] # Re: mailo propose aussi du Nextcloud ?

    Posté par  (site web personnel) . En réponse au lien Migration de Gandi Mail vers Mailo en utilisant son domaine perso. Évalué à 2.

    ça n'a pas l'air d'être du nextcloud, et ça n'a pas l'air de pouvoir se mettre derrière son propre nom de domaine. Mais j'ai pas creusé plus que ça vu que je n'en ai pas l'usage

  • [^] # Re: Premier obstacle

    Posté par  (site web personnel) . En réponse au lien Migration de Gandi Mail vers Mailo en utilisant son domaine perso. Évalué à 5.

    Je suppose que ça veut dire faire une manip côté Gandi et aller éditer les trucs que je ne touche jamais par crainte de tout péter ?

    C'est ça, il faut aller modifier les enregistrement DNS.
    Procédure chez Gandi : https://docs.gandi.net/fr/noms_domaine/operations_courantes/enregistrements_dns.html#modifier-les-enregistrements-dns-pour-un-seul-domaine

    Si tu as peur de faire une connerie, passe le configurateur de Gandi en mode avancé. Il va te donner toute ta config sous forme d'un fichier texte que tu peux facilement sauvegarder et restaurer.

    Fonctionnellement, il s'agit d'indiquer aux clients du DNS que les mails envoyés à example.tld sont dorénavant pris en charge par Mailo et plus par Gandi ?

    En gros, c'est ça.

    Tu vas ajouter une ligne du genre @ IN TXT "mailo=arandomstring" pour prouver à Mailo que tu es l'admin du domaine (tu pourras la supprimer une fois la procédure terminée)

    Ensuite, tu as une ligne du genre @ IN MX 10 mx.mailo.com. pour indiquer à quel serveur de mail tes correspondant devront t'écrire.

    Et enfin 2 ou 3 autres lignes pour indiquer que les serveurs de Mailo sont autorisés à envoyer des mails en ton nom (protection contre le SPAM).

  • [^] # Re: NXI == next inpact ?

    Posté par  (site web personnel) . En réponse au journal NXI, "youtubé?" // les echos... "j'en entends qui disent....". Évalué à 6.

    c’est pas en réaction à Nexity et son cours désastreux ? NXI

  • [^] # Re: Correction

    Posté par  (site web personnel) . En réponse au journal Les banques et l'authentification à deux facteurs. Évalué à 3.

  • [^] # Re: Correction

    Posté par  (site web personnel) . En réponse au journal Les banques et l'authentification à deux facteurs. Évalué à 3.

    Certes, mais j'ai quand même des doutes. Ces derniers temps, on entend souvent la formulation « personne porteuse de handicap ». Ça sonne très correct, mais ça me semble avoir exactement le même sens que « personne handicapée » : la personne a un handicap rattaché à son corps.

    Par la suite, je vais utiliser la définition de handicap selon La loi pour l’égalité des droits et des chances, la participation et la citoyenneté des personnes handicapées du 11 février 2005 :

    « Constitue un Handicap, toute limitation d'activité ou restriction de participation à la vie en société subie dans son environnement par une personne en raison d’une altération substantielle, durable ou définitive d’une ou plusieurs fonctions physiques, sensorielles, mentales, cognitives ou psychiques, d'un polyhandicap ou d'un trouble de santé invalidant. »

    La définition insiste bien sur le fait que le handicap n'est pas rattaché à la personne ou à son corps (qualité intrinsèque) mais une conséquence des limitations de son environnement (qualité extrinsèque).

    Le changement sémantique permet d'induire une amélioration position de la vision de ses personnes (l'écriture inclusive ne passe pas que par cette horreur de point médian). On passe de "elles sont handicapées, c'est triste, faudrait peut-être faire quelchose pour eux" à "elles sont en situation de handicap, c'est révoltant, il faut faire la révolution communiste libertaire et vivre dans la société que le camarade Kropot nous a proposé !"

    Et deuxième doute, dans un environnement correctement adapté, par exemple, pour les handicaps moteurs, dans une ville avec des plans inclinés, des rampes, des ascenseurs partout où il faut monter et descendre, et avec des gens qui réagissent de façon appropriée, dirais-tu d'une personne en fauteuil qu'elle n'est pas en situation de handicap ? Si oui, très bien, sinon, il va falloir réviser l'idée que le handicap vient de la non adaptation de la société.

    Oui, je pense que dans une société suffisamment adaptée à chacun, il n'y aurait plus ou peu de personne en situation de handicap. Mais je suis un doux rêveur

    Je vais essayer d'émettre une série d'arguments et d'expériences de pensée pour illustrer cette idée.

    Déjà, prenons mon cas. Je commence à avoir une vue de merde. J'en suis handicapé. Mais depuis que je me suis enfin motivé à aller chez l’ophtalmo, je vois suffisamment bien pour ne plus être impacté.

    Maintenant, imagine quelqu'un qui a perdu une jambe. Y'en a un à la salle de grimpe. Malgré sa jambe de bois, il grimpe bien mieux que moi. Ouais, le mec a eu un accident de vie. Mais malgré ça, y'a rien qui justifie de l'appeler handicapé. Il a trouvé un moyen de supprimer ce qui le mettait dans sa situation de handicap et maintenant c'est juste un Camille comme toi ou moi.

    Du coup, pour le fauteuil roulant ou autre, même principe. Si on trouve le moyen de supprimer tout ce qui les met en situation de handicap, ça ne serait plus des handicapés. Ça sera juste des gens qui profitent pleinement de la vie. Ouais, ils ne pourront probablement pas gagner la médaille d'or au saut en hauteur. Mais tu sais quoi ? Moi non plus.

    Maintenant, prend Gandalf. Ses exploits nous montre qu'il n'est pas handicapé. Pourtant, chaque fois qu'il est dans un trou de Hobbit dans la Conté, avec son 1m80, il est en situation de handicap. Si il devait passer le restant de ses jours là bas, il souffrait comme souffre une personne en fauteuil dans notre société actuelle. Mais dans un autre contexte, il va bien et déchire du poney. La notion de handicap est relative à une situation, pas à la personne.

    Le Nexus VI file la métaphore avec des extra-terrestres qui devraient cohabiter avec nous.

    Et y'a Camille Casey Reeves qui explique comment GTK4 et Wayland handicap son usage de l'outil informatique là où avant il pouvait moulait sur le bouchot comme toi et moi.

    Personnellement, vous allez peut-être trouver ça encore pire, mais j'ai tendance à utiliser le terme d'invalide, tout simplement parce que c'est le contraire de valide qui est le contraire de handicapé, et que c'est aussi un terme utilisé officiellement. Donc ne comprenant pas bien les enjeux terminologiques, en l'utilisant je suis sûr de ne pas me tromper plus que la rédaction de pas mal de trucs officiels eux-mêmes.

    Alors en fait, invalide est la qualification administrative des Camilles dont la capacité à se faire exploiter par le capital est entravé par leur situation de handicap.

    "Invalidité: Une maladie ou un accident d'origine non professionnelle peut entraîner une réduction de la capacité de travail. Pour compenser la perte de salaire, des allocations existent pour les salariés du secteur privé comme pour les agents de la fonction publique."

    Je n'invente rien.

    Tout ça pour dire que "personne en situation de handicap" plutôt que "personne handicapé" c'est juste un upgrade sémantique afin qu'on arrête de les voir comme les handicapés qu'ils ne sont pas.

  • [^] # Re: Le Pire et Avenir

    Posté par  (site web personnel) . En réponse au lien Des parlementaires européens rejettent la loi sur la restauration de la nature. Évalué à 10.

    je propose une minute de silence en l’honneur de tous les devs annonymes qui ont choisi d’implémenter un soft paywall facilement contournable pour les power users plutôt que un hard paywall