jtremesay a écrit 362 commentaires

  • [^] # Re: 1er jour

    Posté par  (site web personnel) . En réponse au journal Advent of code 2024. Évalué à 2. Dernière modification le 03 décembre 2024 à 19:48.

    maintenant je suis curieux. Une raison de ne pas utiliser gawk ? Pas de sectarisme de ma part, j'utilise très peu awk et je me contente d'utiliser celui installé par défaut :D

  • [^] # Re: réponse 4

    Posté par  (site web personnel) . En réponse au journal le défi du challenge : qu'affiche ce code. Évalué à 3.

    d'après mon interprétation de la doc pour del ("Deletion of a name removes the binding of that name from the local or global namespace, depending on whether the name occurs in a global statement in the same code block."), je pense qu'on peux voir del bla comme un sucre syntaxique pour del locals()["bla"]

    E.g.:

    >>> a = 1
    >>> a
    1
    >>> locals()
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1}
    >>> del locals()["a"]
    >>> a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
  • # réponse 4

    Posté par  (site web personnel) . En réponse au journal le défi du challenge : qu'affiche ce code. Évalué à 10.

    d'après la doc, 8.4.1 except clause :

    When an exception has been assigned using as target, it is cleared at the end of the except clause. This is as if

    except E as N:
       foo

    was translated to

    except E as N:
        try:
            foo
        finally:
            del N

    This means the exception must be assigned to a different name to be able to refer to it after the except clause. Exceptions are cleared because with the traceback attached to them, they form a reference cycle with the stack frame, keeping all locals in that frame alive until the next garbage collection occurs.

  • [^] # Re: 1er jour

    Posté par  (site web personnel) . En réponse au journal Advent of code 2024. Évalué à 5. Dernière modification le 01 décembre 2024 à 13:30.

    En vrai, une fois que t'as le prototype python, c'est assez facile de faire la version awk

    (désolé, y'a pas de balise spoiler)

    {
        left_list[NR] = $1
        right_list[NR] = $2
    }
    
    END {
        asort(left_list)
        asort(right_list)
    
        distance = 0
        for (i = 1; i <= NR; i++) {
            d = left_list[i] - right_list[i]
            if (d < 0) {
                d = -d
            }
            distance += d
        }
        print distance
    }
    $ cat dataset_exemple.txt
    3   4
    4   3
    2   5
    1   3
    3   9
    3   3
    $ awk -f day1.awk dataset_exemple.txt
    11
  • # c'est la faute du standard c

    Posté par  (site web personnel) . En réponse au lien Les pipes, les buffers et les données perdues. Évalué à 3.

    d'après cette réponse sur stackoverflow

  • # underhanded c contest 2015

    Posté par  (site web personnel) . En réponse au journal Le retour des Apple IIe.. Évalué à 3.

    Ça me rappel un peu l'épreuve 2015 du C Underhanded Contest

    http://www.underhanded-c.org/#summary

  • [^] # Re: Bientôt un nouveau fork ?

    Posté par  (site web personnel) . En réponse au lien K1 Acquires MariaDB. Évalué à 3.

    Le fond d’investissement K1 a racheté MariaDB Corporation Ab, l’entreprise à but lucratif qui s’occupe du développement de la version propriétaire et premium de MariaDB.

    La version opensource de MariaDB continue à être géré par la MariaDB Foundation comme précédemment.

  • # Premier commentaire

    Posté par  (site web personnel) . En réponse au lien [LWN] Judge dismisses majority of GitHub Copilot copyright claims (Developer). Évalué à 7.

    Je me permet de republier ici le premier commentaire de l’article qui a l’air de dire que les gens de LWN/Developer ont compris l’annonce à l’envers.

    I found the linked article lacking in detail, and found what appears to be a copy of the opinion in [1]. The opinion is not as described in the one-paragraph summary quoted above.

    According to the opinion, the plaintiffs originally had three claims:

    1. A DMCA claim under 17 USC 1202(b). My casual read of that law is that applying it to AI training is, at best, a real stretch. Judge Tigar dismissed this claim because the plaintiffs did not adequately allege that Copilot's outputs are both identical to the originals and also long enough that they might plausibly be subject to copyright protection. This particular section of copyright law only covers cases where you have an identical copy, so the plaintiffs lose because they didn't allege an identical copy (with enough specificity - they did cite a study claiming that maybe some of the time LLMs might output verbatim copies of large amounts of text, but the judge found that too speculative).
    2. A contract claim against "all defendants"[2] alleging breach of contract under open source licenses. Tigar refused to dismiss this claim, because OpenAI tried to argue that they should've sued for copyright infringement instead, and the judge ruled that the plaintiffs can sue either way they want, so the claim stands (for now, anyway). There was also some minor wrangling over whether OpenAI should be dismissed as a defendant with respect to Copilot allegedly being in breach of contract, since they do not fully control Copilot (Tigar said no).
    3. A claim against GitHub that I frankly do not understand very well. I would need to read the plaintiff's briefs to see what they were trying to argue. Anyway, Tigar basically said that breach of contract, by itself, does not entitle you to various other kinds of money damages that the plaintiffs were apparently trying to get out of GitHub, so this claim was dismissed.

    So Judge Tigar left only one claim standing, which alleges a breach of contract, specifically of the open-source licenses at issue in this case. As for "unlawfully trained on their work" - well, that's the plaintiff's side of the story, but we won't know if it's true until we get a ruling on that exact claim. One possible source of confusion is that the one remaining count does separately allege that both Copilot and Codex breached these contracts, so maybe you could describe that as "two claims" (but the judge's opinion mostly does not phrase it that way). OTOH, separating "breach of contract" from "open-source license violation" makes no sense at all because those are exactly the same thing in this case.

    Here's the thing: Claim (2) is arguably the most important claim, because it is the claim that goes to the heart of the matter (whether AI training violates open source licenses). Claim (1) is frankly kind of a weird argument, since section 1202 as a whole is really about prohibiting media piracy, by the means of prohibiting users from hiding the fact that a given file is copyrighted (e.g. from hosting providers), and that just isn't a good fit for what GitHub was allegedly doing. I do not fully understand claim (3), but it looks like it has more to do with the amount of damages than with the plaintiff's overall case.

    The other question I have is why the plaintiffs chose to sue under contract law instead of copyright law. Even though the judge determined they were allowed to do that, it seems strange. Copyright law gets you statutory damages and various equitable remedies (up to and including impoundment and destruction of the infringing material). Contract law is somewhat favorable to "efficient breach" and may not get you nearly as much if you win. It is possible that this is tangled up with their attempt to get extra damages out of GitHub - if so, then I'm not sure where their lawyers go from here, but they may want to amend their complaint again.

  • [^] # Re: Espace kernel ?

    Posté par  (site web personnel) . En réponse au lien Fiasco CrowdStrike : Microsoft persiste et signe, tout est la faute de l’Europe . Évalué à 7.

    Grave. T’imagines si la NSA faisait "un module de sécurité" à faire tourner dans notre noyal préféré ? #ohwait

  • [^] # Re: pas libre, que en location ?

    Posté par  (site web personnel) . En réponse au journal 8th wonderland : un flim à revoir. Évalué à 3.

    en attendant que tu trouves l’achat de tes rêves, voila de quoi patienter. https://www.youtube.com/watch?v=ynzGANe4530

  • [^] # Re: Lien logique pourtant de mon point de vue

    Posté par  (site web personnel) . En réponse au journal Linuxfr sous les drapeaux. Évalué à 2.

    Sans troll aucun, pour moi les deux sont vraiment similaires. (…) J'imagine plus le Logiciel Libre sans LGBTQ+

    Mention spéciale aux communautés ArchLinux et Nixos <3 (I use Arch btw, mais j’ai toujours pas commandé mes chaussettes de développeur)

  • # "c’est de l’idéologie seulement quand je suis contre"

    Posté par  (site web personnel) . En réponse au journal Linuxfr sous les drapeaux. Évalué à 10.

    J'aimerais pouvoir parler de linuxfr sans avoir à me référer à LGBT ou MRAP ou Trotsky ou Proudhon, enfin à aucune idéologie en vigueur ou à venir

    Pourtant, ça ne te dérange pas de venir mouler sur linuxfr qui a un but idéologique clairement indiqué dans ses statuts ("Elle a également pour objet la promotion des systèmes d'exploitation Unix, basés sur le noyau Linux en particulier, et de logiciels libres.").

    Alors que bon, des gens qui contribuent bénévolement à des projets Libres afin d’enrichir les communs, ça m’a l’air de ressembler très fort à de l’idéologie communiste.

    À défaut de Proudhon, je vais citer du Louis Blanc parce qu’il résume assez bien ma relation au Logiciel Libre : « De chacun selon ses moyens, à chacun selon ses besoins ».

    Alors, Nal, je te le demande, tu crois vraiment que c'est nécessaire, ou même bienvenu, de lier linuxfr à un mouvement politique et bien spécifique ?

    Oui.

  • # scam

    Posté par  (site web personnel) . En réponse au journal Alternatives au Web : WebX un concurrent de Gemini ?. Évalué à 3.

    Prétend être une alternative à WWW/HTTP ("An alternative to the World Wide Web (http(s)://)"). Est littéralement HTTP, avec juste une indirection via leur "DNS" (juste un web service) centralisé. Cf cette fonction qui s’occupe de faire la "résolution" des urls en buss:// et de récupérer la ressource sous-jacente via HTTP.

    Le "serveur dns" est interrogeable , mais il ne me répond que des erreurs 500 :( (la doc de l’API)

  • [^] # Re: Ça dépend

    Posté par  (site web personnel) . En réponse au journal j'aime bien l'auto-complétion par IA (Github Copilot). Évalué à 2.

    ah ben moi je trouve au contraire que c'est plutôt de préférence pour les seniors. c'est des bons outils qui te font gagner du temps si tu sais ce que tu veux faire et si ça te sort le code que tu aurais écrit en économisant de la frappe clavier.

    C’est aussi mon avis de vieux con. Ça me fait un peu peur de le laisser entre les mains des plus juniors. Mais pour l’instant chez nous ça va.

  • [^] # Re: Avec Ruby et Java

    Posté par  (site web personnel) . En réponse au journal j'aime bien l'auto-complétion par IA (Github Copilot). Évalué à 3.

    J'ai aussi cru voir une autre solution nommée "codeium", quelqu'un utilise et a une opinion sur son utilité?

    Je viens de mettre mon alternant sur le coup.
    https://codeium.com/

  • [^] # Re: Classe à la con

    Posté par  (site web personnel) . En réponse au journal j'aime bien l'auto-complétion par IA (Github Copilot). Évalué à 3.

    Pour info il y a une façon succincte de déclarer des attributs valorisés depuis le constructeur en Typescript, en ajoutant le mot clé correspondant à la visibilité devant l'argument :

    Oh. Merci ! Note à moi meme : lire la doc des langage que j'utilise.

  • [^] # Re: Clairement, ce type de lien appelle à un journal, avec une opinion.

    Posté par  (site web personnel) . En réponse au lien The Case Against Rocky Linux. Évalué à 4.

    Y'a un petit bouton pour changer la langue de l'article.

  • # France cul

    Posté par  (site web personnel) . En réponse au journal La publicité sur Radio France - podcasts, direct et appli. Évalué à 10.

  • # jssg

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 4.

    Jusque là, jssg était hébergé dans le dépot de mon site.

    Pour simplifier la réutilisation par autrui, je lui ai crée un dépôt dédié.

    J'ai viré l'intégration de vite/typescript pour simplifier le truc.

    Du contenu d'exemple a été fourni sous la très libérale licence CC0.

    Have fun!

  • [^] # Re: Je vais regarder ça, ça m'intéresse bien...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 3.

    J'ai regardé tardivement et le fait que ce soit une techno Django a induit ma réflexion en erreur.

    Tkt, moi aussi ça m'a pas mal perturbé pendant le dev.

    "Alors si je fais comment ça ça m'arrangera beaucoup pour l'écriture du contenu mais ça va me niquer les perfs sur la prod. réalisation wait, y'aura pas de code sur la prod, j'mef des perfs !"

  • [^] # Re: Je vais regarder ça, ça m'intéresse bien...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 3.

    (ce serait probablement différent avec AGPL qui donnerait plus de contrainte : là, il faudrait certainement redistribuer les sources aux gens qui visitent le site et ça serait très contraignant).

    Ben je ne suis pas sûr. La licence AGPL a vraiment été pensé pour les logiciels de type services avec lequel l'utilisateur final interagis, ce qui n'est pas le cas de JSSG dans son usage normal. (tu PEUX l'utiliser en mode serveur pour dev comme une app Django normale, mais ce n'est pas recommandé de l'utiliser en prod pour ça)

    Par contre, en effet, si le générateur de site statique est destiné à être utilisé par d'autres gens, le séparer du contenu d'un site en particulier paraîtrait plus malin.

    Pour l'instant, c'est avant tout pour mon usage perso.

    J'en ai parlé ici pour faire un retour d'expérience de «oui, aussi con que puisse paraître l'idée, il est possible et même facile de faire un générateur static avec Django, et voilà comment j'ai fait» parce que je sais qu'il y a toujours quelqu'un d'intéressé par mes expérimentations idiotes.

    Les templates, si pas spécifique au site de Jonathan, c'est un moins cool en NC en revanche en effet. Pas d'utilisation commerciale, ça veut dire pas d'utilisation sur un site commercial. J'ai énormément de mal avec le NC, au delà du fait que ce n'est pas libre, son champ d'application est potentiellement très large. C'est plus ou moins du code que personne ne peut réutiliser. Aussi bien, "pas d'utilisation sur un site commercial" pourrait vouloir dire "pas d'utilisation sur un site". Potentiellement, il suffit de vendre un t-shirt ou un mug via le site pour que ça ne marche plus.

    Les templates sont spécifique à mon site. Mais il est vrai que je les avais foutu dans la base de code du générateur pour me simplifier la vie, ce qui peut porter à confusion.

    Hier soir, j'ai extrait tout mon contenu perso du générateur; il ne devrait plus y avoir de problème de contamination par la CC-BY-NC-SA.

  • [^] # Re: Je vais regarder ça, ça m'intéresse bien...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 7.

    (dernière version connue qui marche)

    ça nécessite Django 5 (et donc visiblement python 3.10) ; c'est un frein. A priori en mettant comme dépendance Django 4.2.9 ça semble opérationnel.

    C'est une dépendance faible à Django 5. J'ai pinné sur les dernières versions disponibles. Mais vu que je n'utilise rien de spécifique à la 5, ça devrait assez bien tourner avec la 4.

    il y a des migrations et une base SQLite. Je ne m'y attendais pas (c'est pas fondamentalement un problème)

    euh… non ? Enfin, ça fait toujours très plaisir à django que tu fasses ./manage.py migrate avant le ./manage.py runserver. Mais sinon, je n'ai pas de migrations et je n'utilise pas la db.

    je ne connais pas vite, je m'attendais à ne pas avoir besoin de la partie "js" pour une utilisation basique mais ça plante directement avec une erreur 500, ce qui est perturbant.

    pour mon cas d'usage, ça m'arrange d'avoir le front géré par Vite plutôt que par Django. Et ouais, Django grogne quand npm run vite n'est pas lancé.

    Tu peux désactiver ça en ne chargeant pas l'app django_vite_plugin .

    Faudra aussi remplacer dans les templates les {% vite 'bla' %} par des `{% static 'bla' %}

    C'est d'autant plus perturbant que le debug est désactivé par défaut

    C'est géré par la var env DJANGO_DEBUG qui doit être à true pour activer le debug :

    DJANGO_DEBUG=true ./manage.py
    

    Si tu as direnv d'installé, la variable est appliquée automatiquement qrace à ça ce fichier. (et en plus, il crée et charge automatiquement le venv. N'est-ce pas magnifique ?)

    la licence est problématique pour l'usage que j'envisage (sites pro algoo) :

    Comme indiqué par raphj ("Tu vas faire tourner le code GPL chez toi (sur ton ordi de dev, dans la CI ou sur le serveur), et pas chez les gens qui visitent le site. Tu peux tout à fait l'étendre ou l'adapter sans jamais devoir redistribuer les modifications parce que l'outil reste de ce fait interne."), je ne pense pas que la GPL soit bloquante pour que vous pussiez utiliser et modifier le générateur.

    ce qui peut m'intéresser ce sont aussi les templates de base qui sont si j'ai bien compris sous licence CC-BY-NC-SA. Je ne peux donc pas partir de ces templates pour faire un site professionnel : je dois réécrire le code.

    effectivement, les templates font plus partis du contenus que du générateur et seraient donc plutôt sous CC-BY-NC-SA. Mais honnêtement, je ne suis pas sûr qu'il y ai assez de truc dedans pour que ça qualifie pour une véritable protection de ma propriété intellectuelle.

    Au pire, cadeau, 2 templates sous licence Unlicense :

    page.html :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ object.title }}</title>
    </head>
    <body>
        <h1>{{ object.title }}</h1>
        {{ object.content_md|safe }}
    </body>
    </html>

    post.html :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ object.title }}</title>
    </head>
    <body>
        Publié le {{ object.timestamp|date:"Y-m-d" }}.
    
        <h1>{{ object.title }}</h1>
        {{ object.content_md|safe }}
    </body>
    </html>

    J'imagine que le sujet de la licence est lié au fait que la techno (le moteur JSSG) et le contenu éditorial sont dans un repo unique.

    ouais. À la base, c'était le dépôt du site lui même. Pis j'ai fini par y ajouter le générateur quand j'ai vu que je ne trouvais pas mon bonheur parmis les outils existant.

    l'intégration des métadonnées dans les contenus directement (j'avais prototypé qqchose de similaire il y a quelques temps mais je n'étais pas allé au bout de la démarche - ce que tu as fait)

    J'ai rien inventé, j'ai volé l'idée chez Hugo

    J'imagine très aisément ce changement de licence en séparant le repo "moteur JSSG" (avec un squelette de site qui serait neutre) et le repo "site" (ton site) ; je ne sais pas si c'est qqchose qui t'intéresse et/ou que tu es prêt à faire

    J'ai réorganisé le dépot pour déplacer tout mon contenu perso en dehors du sous dossier jssg pour faciliter la réutilisation par autrui.

    À terme, le générateur finira probablement dans son propre dépot. Mais pour l'instant, ça m'était plus simple de faire un mono-dépot.

    (et dans tous les cas, les licences que tu as choisies pour le moteur et pour les templates sont peut-être bien réfléchies et que tu ne souhaites pas les modifier).

    Semi-réfléchi. Par défaut, j'ai une politique de «j'ai pas de problème à coder gratuitement pour enrichir les bien communs, mais j'ai pas envie que quelqu'un puisse se faire des montagnes de fric en privatisant mes conneries».

    Ou comme le dit raphj, «Tout le monde ne veut pas faciliter la tâche des éditeurs de logiciels propriétaires gratuitement / dans leur temps libre».

  • [^] # Re: Je vais regarder ça, ça m'intéresse bien...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 5.

    C'est plus vaste que ça … Je vais jeter un coup d'œil et je te redis.

    j'accepte les abonnements galae start en pourboire ;)

    Tu gères les meta,opengraph etc comme méta données ?

    "oui et non". Non parce que je n'utilise pas ce genre de chose.

    Mais oui vu que chaque document peut contenir des meta-data et être accesible dans les templates

    Genre là je défini le title de la page en utilisant le document courant.

    Du coup, dans ton ma_page.md :

    ---
    title: ma page
    bidule: machin
    ---
    
    hello moto

    et dans ton base.html :

    <meta property="og:title" content="{{ object.title }} " />
    <meta property="og:url" content="{% url 'page' object.slug %}" />
    <meta property="og:bidule" content="{{ object.meta.bidule }}" />
  • [^] # Re: Je me demande si...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 4.

    Il faut le bon dosage. Ça demande des années de pratique pour le trouver !

  • [^] # Re: Je vais regarder ça, ça m'intéresse bien...

    Posté par  (site web personnel) . En réponse au lien Ivre, il crée un générateur de sites statiques avec 300 lignes de python et django. Évalué à 2. Dernière modification le 05 janvier 2024 à 18:00.

    jssg propulsant galae ? :)

    en théorie, tu dois pouvoir faire des extends/block dans les .md, mais j'ai pas testé.