steph1978 a écrit 3568 commentaires

  • [^] # Re: Jour 4

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 4 (+2/-0).

    Très bon jour.

    Première partie en one shot, sans passer par l'exemple ; deuxième partie en 1 essai ; en moins de 10 minutes.

    Je suis passé par des sets, très facile à manipuler en python et plutôt efficaces en perf.

    Voici le code, un peu refactoré pour tenir en 6 lignes:

    rolls0 = rolls = {(i,j) for i,line in enumerate(open(0)) for j,c in enumerate(line) if c == '@'}
    l = 999999999
    while len(rolls)<l:
        l = len(rolls)
        rolls = {(x,y) for (x,y) in rolls 
            if 3<sum(((x+dx,y+dy) in rolls)
                for (dx,dy) in [(0,-1),(1,0),(0,1),(-1,0),(1,1),(-1,-1),(1,-1),(-1,1)])}
        print(len(rolls0)-len(rolls))

    Cela prend 16MB de RAM et 0.7s de CPU.

  • # dommage

    Posté par  . En réponse au lien Minio ferme les portes. Évalué à 3 (+1/-0).

    C'était un produit déjà compliqué à l'époque. La migration v2 vers v3 avait été très pénible. Et là on peut constater qu'ils prennent un virage très entreprise donc plus vraiment intéressant pour du selfhosting.

    Va falloir que je me trouve un autre object storage …

  • [^] # Re: Jour 3

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0). Dernière modification le 03 décembre 2025 à 19:26.

    c'est moins rapide […] que celle en 12 passes.

    C'est normal, parce que l'étape retirer c2 de cells est coûteuse car il faut créer une nouvelle structure de données à chaque fois.

    Alors qu'une boucle (ou de la récursivité) sur une même structure de données, ça ne coûte pas très cher.

  • [^] # Re: Jour 3

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0).

    Voici le code, 11 lignes, refactoré pour traiter les deux parties en une fois:

    def findmax(bank,n):
        if n>=len(bank): return bank
        if n==0: return ""
        m = max(bank[:len(bank)-n+1])
        i = bank.find(m)
        return m + findmax(bank[i+1:], n-1)
    ans1 = ans2 = 0
    for bank in open(0).read().strip().split('\n'):
        ans1 += int(findmax(bank,2))
        ans2 += int(findmax(bank,12))
    print(ans1, ans2)
  • # Jour 3

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0).

    Difficile de départager ces trois premiers jours en terme de difficulté. On est peut être sur un "hockey stick" et on attend le point d'inflexion, peut être demain.

    Ce jour, première partie en one shot, sans passer par l’exemple 😎. Pour la deuxième partie, j'ai un peu ratatouillé sur les conditions d'arrêt de ma fonction récursive 😩 et perdu un peu de temps.

    Pour les curieux (ou masochiste), je mets le code dans le commentaire en dessous.
    Vous pouvez le fermer en appuyant sur [-] pour éviter le spoil.

  • [^] # Re: XSLT, ça alors

    Posté par  . En réponse au journal Démerdifier le web avec Unmerdify et Offpunk. Évalué à 10 (+8/-0).

    Ça, ça veut dire que le navigateur ne fera plus la transformation XSTL lui-même.
    Il y a eu un monde dans lequel un producteur de contenus envoyait son contenu sous format XML, peu importe lequel, et une feuille de style XSLT et le navigateur faisait la transformation - et le rendu si possible, c'est-à-dire si la transformation produisait du XHTML.

    Mais ça ne veut pas dire que XSLT est déprécié en tant que tel. Tu peux toujours le faire dans une extension pour transformer sur XHTML en un autre XHTML. C'est l'idée ici.

  • [^] # Re: XSLT, ça alors

    Posté par  . En réponse au journal Démerdifier le web avec Unmerdify et Offpunk. Évalué à 9 (+7/-0). Dernière modification le 02 décembre 2025 à 12:19.

    HTML n'ayant pas fondamentalement changé ces dernières années, il y a peu de raison que XSLT ne fonctionne plus.

    Ce qui a probablement beaucoup changé, c'est que le DOM est produit par du JavaScript côté client.

    Mais si tu es dans un navigateur, il suffit d'attendre qu'il ait exécuté le JS pour travailler sur le DOM résultant.

    En fait, le gros intérêt d'utiliser XSLT dans le moteur, c'est de pouvoir utiliser des XPath dans les fichiers de configuration.

  • [^] # Re: Jour 2

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0).

    Je mets le code, même si je ne lui trouve rien d'intéressant:

    def is_invalid_p1(n):
        s = str(n)
        m = len(s) // 2
        return s[:m] == s[m:]
    
    def chunk_str(s, l):
        for i in range(0, len(s), l):
            yield s[0+i:l+i]
    
    def is_invalid_p2(n):
        s = str(n)
        l = len(s)
        for m in range(1,1+(l//2)):
            if (l%m) == 0:  # if str can be chunked equally
                a = chunk_str(s,m)
                b = chunk_str(s,m)
                next(b)
                if all(u==v for (u,v) in zip(a,b)):
                    return True
        return False
    
    ans1 = ans2 = 0
    for line in open(0).read().split(','):
        f, t = line.split("-")
        f = int(f)
        t = int(t)
        for i in range(f, t+1):
            if is_invalid_p1(i):
                ans1 += i
            if is_invalid_p2(i):
                ans2 += i
    print(ans1, ans2)

    (C'est dans ces moments que j'aimerai que linuxfr supporte le details/summary).

  • # Jour 2

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0).

    Jour que j'ai trouvé plus facile que le précédent, mais plus laborieux.

    J'ai blêmi en voyant une énoncée avec des "ranges" car j'ai un très mauvais souvenir d'un problème d'intersection de range ; mais il n'en est rien ici.

    J'ai aussi pensé qu'on aurait un problème de passage à l'échelle pour la partie 2 ; mais il n'en est rien non plus.

    Patience, ce sera pour la prochaine :)

  • [^] # Re: Jour 1

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 2 (+0/-0).

    Je m'étais fait un petit dessin ; ça m'a aidé.
    À l'inverse, retourner le cadran pour se retrouver systématiquement sur le cas "sens des aiguilles d'une montre" (="R") m'a paru une gymnastique plus compliquée.

  • [^] # Re: démerdifier linuxfr??

    Posté par  . En réponse au journal Démerdifier le web avec Unmerdify et Offpunk. Évalué à 5 (+3/-0).

    Exact mais je ne visite pas toujours en mode connecté. En particulier au boulot. Alors que j'ai toujours ublock 😉

  • [^] # Re: Jour 1

    Posté par  . En réponse au journal Advent of Code 2025. Évalué à 3 (+1/-0).

    o/

    Premier jour facile. J'ai même pas pensé à brut-forcer la partie deux. Si j'avais galéré sur un cas limite, je l'aurai fait. Mais là c'est passé du premier coup.

    En réorganisant un peu le code, la solution aux deux parties en 9 lignes :

    ans1 = ans2 = 0
    pos = new_pos = 50
    for line in open(0):
        t,q = divmod(int(line[1:]), 100)
        new_pos += q if line[0] == "R" else -q
        ans2 += t + ((pos>0 and new_pos<=0) or new_pos>=100)
        pos = new_pos = new_pos % 100
        ans1 += (pos == 0)
    print(ans1, ans2)
  • [^] # Re: démerdifier linuxfr??

    Posté par  . En réponse au journal Démerdifier le web avec Unmerdify et Offpunk. Évalué à 4 (+2/-0).

    Le contenu qui reste en haut sur la page d'accueil. Pour moi, ça prend de la place et je l'ai la plupart du temps déjà lu. Je ne sais pas comment ça s'appelle mais dans la CSS, c'est "phare".

  • [^] # Re: démerdifier linuxfr??

    Posté par  . En réponse au journal Démerdifier le web avec Unmerdify et Offpunk. Évalué à 4 (+2/-0).

    Pour ma part, j'utilise ublock0 pour supprimer le "phare" et les avatars.

  • [^] # Re: Ready Media / minidlna

    Posté par  . En réponse au journal lecture vidéo sur réseau local. Évalué à 3 (+2/-1).

    Pour celle/celui qui a jugé mon commentaire précédent "inutile", je vais compléter.

    Avoir 130 dépendances n'est pas un soucis en soit si cela peut se résoudre par un apt install ou équivalent. Mais

    1/ même dans ce cas, ça prend pas mal de place (j'ai un SSD interne de 32GB).

    2/ dans Debian, c'est la version 1.3.0 qui est packagée alors que la 1.3.3 est sortie.

    3/ si je veux l'installer sur un système pour lequel le paquet n'existe pas, je dois passer par la case compilation et là c'est for 1..130; do ./configure; echo install missing deps; done

  • [^] # Re: Ready Media / minidlna

    Posté par  . En réponse au journal lecture vidéo sur réseau local. Évalué à 2 (+2/-2).

    Cela a fait partie des candidats que j'ai regardé.

    Mais j'ai été un peu refroidi par ses 132 dépendances : ux-vdso, jpeg, id3tag, sqlite3, avformat, avutil, exif, FLAC, vorbis, ogg, c, z, m, avcodec, xml2, bz2, gme, openmpt, chromaprint, bluray, gnutls, rabbitmq, srt-gnutls, ssh-gcrypt, zmq, va-drm, va, va-x11, vdpau, X11, drm, mfx, OpenCL, b64/ld-linux-x86-64, swresample, vpx, webpmux, webp, lzma, aribb24, dav1d, opencore-amrwb, rsvg-2, gobject-2, glib-2, cairo, zvbi, snappy, aom, codec2, gsm, mp3lame, opencore-amrnb, openjp2, opus, shine, speex, theoraenc, theoradec, twolame, vo-amrwbenc, vorbisenc, x264, x265, xvidcore, icuuc, stdc++, gcc_s, mpg123, vorbisfile, fontconfig, freetype, udfread, p11-kit, idn2, unistring, tasn1, nettle, hogweed, gmp, ssl, crypto, gcrypt, gpg-error, gssapi_krb5, bsd, sodium, pgm-5, norm, Xext, Xfixes, xcb, soxr, png16, cairo-gobject, gdk_pixbuf-2, gio-2, pangocairo-1, pango-1, ffi, pcre, pixman-1, xcb-shm, xcb-render, Xrender, numa, pthread, icudata, expat, uuid, brotlidec, krb5, k5crypto, com_err, krb5support, md, Xau, Xdmcp, gomp, gmodule-2, mount, selinux, pangoft2-1, harfbuzz, fribidi, thai, brotlicommon, keyutils, resolv, blkid, pcre2-8, graphite2, datrie ; dixit ldd.

  • [^] # Re: par rapport à DLNA

    Posté par  . En réponse au journal lecture vidéo sur réseau local. Évalué à 3 (+1/-0).

    Si je comprends bien la page wikipedia, DLNA utilise, entre autre, UPnP-AV.

  • [^] # Re: RPython du coup ?

    Posté par  . En réponse au lien Les développeurs principaux de CPython proposent d'intégrer Rust afin d'améliorer la sécurité. Évalué à 2 (+0/-0).

  • # payé par l'argent public

    Posté par  . En réponse au lien La malbouffe, un coût colossal pour la société. Évalué à 2 (+0/-0).

    Donc les industriels et leur pantins s'en moquent

  • [^] # Re: ça fait quoi le "moyennage" ?

    Posté par  . En réponse au journal Un timelapse avec ffmpeg. Évalué à 2 (+0/-0).

    L'OP est mieux placé pour répondre mais en attendant…

    L'interpolation ça va ajouter images alors le fait de moyenner doit en retirer, non ?

  • [^] # Re: Pardonnez mon inculture SVP mais ... C'est quoi in timelapse ?

    Posté par  . En réponse au journal Un timelapse avec ffmpeg. Évalué à 6 (+6/-2).

    respect des autres utilisateurs

    Dans ton premier commentaire, tu demandes la signification d'un terme. C'est parfaitement légitime.

    Mais tu critiques l'auteur en lui reprochant de ne pas avoir anticipé ton besoin éclaircissement, et ça ce n'est pas faire preuve de beaucoup de respect.

  • # ça fait quoi le "moyennage" ?

    Posté par  . En réponse au journal Un timelapse avec ffmpeg. Évalué à 10 (+9/-0).

    Pourquoi on prend plein/trop d'images pour ensuite les "moyenner" ?

    Pourquoi ne pas prendre juste le bon nombre d'images pour le timelapse ?

  • [^] # Re: un exemple de la vraie vie

    Posté par  . En réponse au journal bake : scripter en bash à la « makefile ». Évalué à 4 (+2/-0).

    bash -e -u est une bonne pratique.

    Et dans ce cas, pour explicitement ignorer une erreur, si la commande ne le permet pas (pas d'option quiet), au lieu de

                set +e
                rm out/*
                set -e

    j'aime bien

                rm out/* || true

    Ça fait moins de lignes, donc moins de risque d'erreurs, du style, inverser les "+" et "-", oublier une des deux lignes, au hasard celle qui stop après une erreur.

  • # je sais pas

    Posté par  . En réponse au lien Firefox AI Window : la nouvelle enchi... anshit... oh et puis zut. Mofo fuck you!. Évalué à 6 (+4/-0).

    D'un côté, je suis contre le fait de mettre un réacteur nucléaire derrière chaque onglet de navigateur.

    D'un autre côté, pour avoir du résumé ou de la traduction, il y a des petits modèles qui font très bien le taf de manière relativement sobre ; peut être même utilisable en locale.

    Après on va reprocher à Mozilla de pas faire ce qu'il faut pour être à niveau des autres navigateurs. J'ai l'impression qu'ils font au mieux / au moins pire.

  • [^] # Re: titre

    Posté par  . En réponse au journal Vulnérabilités multiples dans sudo-rs. Évalué à 4 (+2/-0).

    Je crois que c'est le principe d'une "disclosure".

    On annonce une faille après l'avoir corrigé de manière à ce que les utilisateurs fassent l'upgrade; et que ce soit pas juste la fête aux pirates.

    Je ne vois donc rien de choquant dans la formulation. Ça veut dire : "il y des failles dans votre sudo-rs, il est urgent de lire le détail pour savoir quoi faire".

    Si tu trouves des articles qui emploient ta formulation versus celle de l'OP, je veux bien les pointeurs.