Note pour plus tard - The Zen of Python | Python.org

  • Préfère :
    • la beauté à la laideur,
    • l'explicite à l'implicite,
    • le simple au complexe
    • et le complexe au compliqué,
    • le déroulé à l'imbriqué,
    • l'aéré au compact.
  • Prends en compte la lisibilité.
  • Les cas particuliers ne le sont jamais assez pour violer les règles.
  • Mais, à la pureté, privilégie l'aspect pratique.
  • Ne passe pas les erreurs sous silence,
  • ... ou bâillonne-les explicitement.
  • Face à l'ambiguïté, à deviner ne te laisse pas aller.
  • Sache qu'il ne devrait [y] avoir qu'une et une seule façon de procéder,
  • même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais.
  • Mieux vaut maintenant que jamais.
  • Cependant jamais est souvent mieux qu'immédiatement.
  • Si l'implémentation s'explique difficilement, c'est une mauvaise idée.
  • Si l'implémentation s'explique aisément, c'est peut-être une bonne idée.
  • Les espaces de nommage ! Sacrée bonne idée ! Faisons plus de trucs comme ça.
  • Texte d'origine

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one-- and preferably only one --obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
  • Now is better than never.
  • Although never is often better than -right- now.
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • Troy Hunt: No, I Won't Link to Your Spammy Article

    Magnifique moyen de lutter contre les SPAMS qui demandent à apparaître dans ton blog:

    Chaque fois que tu reçois une demande de ce type, tu l'ajoutes à une liste d'item sur ta propre page avec le titre de la ressource mais pas son contenu ou son lien réel...

    Du coup, quand les gens vont chercher le lien en question, il y en aura qui aboutiront sur cette page et pas sur celle du spammeur... Mieux, à chaque fois que tu reçois ce type de demandes, tu tweetes un lien vers ta page mais avec le titre

    every time I receive spam of this nature I'm going to add an item to the list below. It will have the title of the resource you wanted me to link to, except... no link! Just the title. On a popular blog. So now when people search for [thing], they'll hopefully end up here rather than on the spammy article thus penalising you for your behaviour. And just to help my own SEO and awareness of your spammy behaviour, I'll tweet a link to this page with the title of your page each time it happens.

    Via https://sebsauvage.net/links/?oc35Wg

    AI bots (OpenAI ChatGPT et al) - comment les bloquer - Didier J. MARY (blog)

    Bon, il faut commencer à lutter contre les IA... en leur coupant l'accès à nos contenus.

    Je copicolle ici pour plus tard... Voyez le site pour plus de précisions (vraiment très bien expliqué)

    1. robots.txt

    👉 Rappel, il se met à la racine du site

    On y colle

    # AI crawlers
    User-agent: anthropic-ai
    User-agent: Bytespider 🆕
    User-agent: CCBot
    User-agent: ChatGPT-User
    User-agent: cohere-ai
    User-Agent: FacebookBot
    User-agent: Google-Extended
    User-agent: GPTBot
    User-agent: Omgilibot
    Disallow: /

    2. le header

    On y ajoute <meta name="robots" content="noai, noimageai">

    3. le fichier ai.txt

    Apparemment pas encore obligatoire mais qui pourrait le devenir.

    # Spawning AI
    # Prevent datasets from using the following file types
    
    User-Agent: *
    Disallow: *.txt
    Disallow: *.pdf
    Disallow: *.doc
    Disallow: *.docx
    Disallow: *.odt
    Disallow: *.rtf
    Disallow: *.tex
    Disallow: *.wks
    Disallow: *.wpd
    Disallow: *.wps
    Disallow: *.html
    Disallow: *.bmp
    Disallow: *.gif
    Disallow: *.ico
    Disallow: *.jpeg
    Disallow: *.jpg
    Disallow: *.png
    Disallow: *.svg
    Disallow: *.tif
    Disallow: *.tiff
    Disallow: *.webp
    Disallow: *.aac
    Disallow: *.aiff
    Disallow: *.amr
    Disallow: *.flac
    Disallow: *.m4a
    Disallow: *.mp3
    Disallow: *.oga
    Disallow: *.opus
    Disallow: *.wav
    Disallow: *.wma
    Disallow: *.mp4
    Disallow: *.webm
    Disallow: *.ogg
    Disallow: *.avi
    Disallow: *.mov
    Disallow: *.wmv
    Disallow: *.flv
    Disallow: *.mkv
    Disallow: *.py
    Disallow: *.js
    Disallow: *.java
    Disallow: *.c
    Disallow: *.cpp
    Disallow: *.cs
    Disallow: *.h
    Disallow: *.css
    Disallow: *.php
    Disallow: *.swift
    Disallow: *.go
    Disallow: *.rb
    Disallow: *.pl
    Disallow: *.sh
    Disallow: *.sql
    Disallow: /
    Disallow: *

    4.le .htaccess

    👉 Rappel, il se met à la racine du site

    On y ajoute

    RewriteCond %{HTTP_USER_AGENT} (anthropic-ai|Bytespider|CCBot|ChatGPT-User|FacebookBot|GPTBot|Omgilibot) [NC]
    RewriteRule ^ – [F]

    5.l'IP

    En bloquant ces adresses:

    20.9.164.0/24
    20.15.240.64/28
    20.15.240.80/28
    20.15.240.96/28
    20.15.240.176/28
    20.15.241.0/28
    20.15.242.128/28
    20.15.242.144/28
    20.15.242.192/28
    52.230.152.0/24
    Via https://sebsauvage.net/links/

    Notes perso JS : usage de fetch()

    Je me note ici pour une prochaine fois parce que fetch n'est pas forcément très intuitif...

    2 façons d'utiliser fetch :

    la plus tendance et élégante : en enchaînant les then()

    fetch("index.php", { method: 'POST', body: formData })
      .then((response)=>{
            // on attend l'arrivée de la réponse et on la traite
            return response.text(); // ou response.json();
      })
      .then((text)=>{
             // on attend la fin du traitement de la réponse  et on en traite le contenu
           console.log(text);
      });

    la plus lisible (?) : avec async et await

    En gros, on crée une fonction asynchrone pour pouvoir utiliser les await.

    const fetchAPI = async(URL) => {
        const response = await fetch(URL);  // on attend l'arrivée de la réponse 
        const data = await response.json();  // on attend la fin du traitement de la réponse
        console.log(data)
    }
    fetchAPI("https://jsonplaceholder.typicode.com/todos/1")

    CSS - 5t3ph@front-end.social - I'm not sure enough folks realize that :is()/:where(), and :not() can check _ancestor_ and _previous sibling_ conditions.p:is(h2 + *) = paragraphs that are directly after an h2p:not(blockquote *) = paragraphs that are not within blockquotesI've used these techniques to simplify what would otherwise be rather unmaintainable selectors or may have previously required additional conditional classes.https://codepen.io/5t3ph/pen/KKEmMXR

    Pas mal cette astuce ! On peut avoir des conditions qui prennent en compte un élément parent ou un élément frère pour cibler un élément...

    • p:is(h2 + *) : seulement les paragraphes directement après un H2
    • p:not(blockquote *) : les paragraphes ne se trouvant pas dans des blockquotes...

    Ça peut carrément simplifier certains cas !

    ✂Templatemaker ︎

    Plein de modèles de découpes et pliages - essentiellement des boîtes - avec un générateur qui permet de spécifier les dimensions.

    On peut imaginer de les importer ensuite dans un logiciel de découpe laser...

    Quelle touche utiliser pour accéder au BIOS UEFI de sa carte mère

    Pour mémoire

    • Asus : F2 ou Suppr
    • Gigabyte : Suppr ou F12
    • MSI (Micro-Star International) : Suppr
    • ASRock : F2 ou Suppr
    • Biostar : Suppr
    • EVGA : Suppr
    • Supermicro : Suppr
    • Intel : F2
    • NZXT : Suppr ou F2
    • Acer : F2 ou Suppr
    • Dell : F2 ou F12
    • HP (Hewlett-Packard) : F10 ou Échap
    • Lenovo : F2 ou F12
    • ASUS : F2 ou Suppr
    • MSI : F2 ou Suppr
    • Toshiba : F2
    • Sony VAIO : F2 ou F10
    • Samsung : F2 ou Échap
    • LG : F2 ou F12

    Retour sur quelques livres lus en 2023 - Chez Sammy

    Et voilà, grâce à Sammy, encore une liste de livres ... Mais quand vais-je parvenir à tout lire ?

    Heureusement que j'ai déjà lu Cien años de soledad... Même en faisant un arbre généalogique on se perd... mais quelle oeuvre !

    Pour ma part, j'ai fini quelques Carlos Sisí...

    Meme mon chat : un minouscule dump...

    Parce que les fêlés félins, parfois, c'est la chatastrophe...

    waiting bean meme «mon chat à cinq heure du matin» gay kermitt meme «mon chat  quand je ne me lève pas assez tôt» disapointed guy meme «mon chat quand je me redirige vers la chambre après être allé pisser» Anthony Adams Rubbing Hands meme «mon chat quand qqun se dirige vers la cuisine» meme heavy breathing «mon chat quand je mange un dessert à la chantilly» kombucha girl meme «des croquettes de deux jours vs de l'eau de vaisselle stagnante»/>
<img src= drake meme «vomir sur la pelouse vs entrer, aller dans le salon et vomir sur la moquette»

    Et en cadeau...

    SVG images are accepted but not sanitized · Issue #38 · berthubert/trifecta · GitHub

    Ménon... Mais dites-moi que c'est pas vrai...

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">
      <circle cx="250" cy="250" r="210" fill="#fff" stroke="#000" stroke-width="8"/>
      <script type="text/javascript">alert(1);</script>
    </svg>

    Donc, si on colle du JS dans un SVG, le JS serait exécuté à l'affichage de l'image ?!

    Je teste ci-dessous avec l'exemple donné sur la page...

    omg.svg

    Sur mon site, l'image s'affiche normalement sans exécuter le code... par contre, si on ouvre l'image dans un autre onglet...

    Comment c'est possible de laisser un truc pareil dans la nature ?!

    Via https://sebsauvage.net/links/

    MediaRecorder : Bienvenue dans IE6/7/8

    En ce moment je bosse sur l'appli de documents/exercices que j'utilise en cours (cf https://warriordudimanche.net/article1686/lappli-documents-que-jai-codee-pour-taf pour mémoire).

    J'implémente toute une nouvelle rubrique et de nouveaux items afin de couvrir le spectre de l'expression orale de façon simple en ajoutant une sorte de labo de langue simplifié.En gros, je veux que le gamin puisse travailler à l'écoute de mots modèles mais également qu'il puisse s'enregistrer et se réécouter simplement et quelque soit le support...

    Les frontend qui me lisent voient de suite où ça va couiller (merci les copaines)

    Et oui, j'ai codé un truc qui fonctionne très bien, relativement propre et simple, facile à utiliser... sous Firefox, opera, vivaldi, chromium et sous Android.

    Hélas, ma solution utilise l'API MediaRecorder qui semble présenter des difficultés sous certains navigateurs, vous devinez lesquels...

    J'ai testé sur safari (enfin epiphany passque j'ai pas d'apple sous la pogne, tu te doutes...) et ça refuse de fonctionner, vu que MediaRecorder y est bloqué pour nôôôtre saicuritay...

    J'ai ensuite testé sur Edge avec mon portable et ça n'a pas fonctionné... toutefois, quand j'ai installé le deb d'Edge sur mon linux ⬇⬇⬇ ...

    Parfois, la vie vous envoie   des épreuves, vous savez...

    ...là, ça a fonctionné... Mais si ça marche, ça doit venir de Linux et pas de Edge (mauvaise foi inside )

    Donc en gros, on revient à des soucis de compatibilité avec le nouvel IE ?! (ouelcome to aoueur fanne tasse tique taïme meuchine !)

    Nous voila   revenus aux   joies d'Internet   Explorer ?!

    Pourtant, canIuse me dit que ça devrait fonctionner, même sous Safari:

    Capture du 2024-01-19 12-02-36.png

    Bon, avec le navigateur à la pomme, il y a bien une manip à faire dans la configuration avancée pour les devs qui pourrait débloquer la situation mais je me vois mal demander ça à des élèves qui éprouvent déjà des difficultés non négligeables à discerner la barre d'adresse ou qui peinent - la sueur au front - à taper une majuscule sans passer par la touche de verrouillage...

    Allez bouffer   vos morts   micro$oft   et apple
    Beut ouate        iz ze   solouchonne ?

    Donc, là, pour le moment, rien à faire dans l'immédiat pour utiliser simplement MediaRecorder avec safari ou Edge... j'ai donc opté pour une «solution» temporaire: en cas d'absence de l'API, j'ajoute une classe spécifique et je disable les recorders de la page, puis j'affiche un message d'avertissement avec des liens vers des navigateurs compatibles (firefox et forks en tête)...

    Après, j'ai bien trouvé un polyfill qui pourrait faire le job ( https://github.com/ai/audio-recorder-polyfill ) mais je ne l'ai pas testé, c'est un peu lourd à installer et pis... c'est pas moi qui l'ai fait...

    Si quelqu'un/e a une idée... je prends...

    (...)

    La nouvelle ministre de l'Education justifie son choix du privé en critiquant l'école publique

    Connasse.

    J'attendais vraiment rien de ce remaniement mais ils réussissent à décevoir quand même...

    Ils ne se cachent même plus...

    Autant remettre au goût du jour une vanne de Coluche en l'adaptant à l'éducation nationale : "Ne vous inquiétez pas, l'année dernière était très dure, la prochaine sera pire"

    Allez bien bouffer vos morts bande de baltringues.

    5 extraits CSS que tout développeur front-end devrait connaître en 2024

    Il y a de ces trucs en CSS quand même...

    Quelques notes perso ici...

    :has()

    styler le parent en fonction du nombre d'enfants

    Pour modifier une grid par exemple...

    main:has(> :nth-child(5)) {…}

    styler un élément selon l'état d'une checkbox

    Pour appliquer un darkmode

    html:has(#dark-mode:checked) {…}

    styler un form dont au moins un des items est invalide

    form:has(:user-invalid) .error {
      display: block;
    }

    L'imbrication CSS

    Et moi qui pensais que ce n'était réservé qu'à des sass & consorts !

    Voilà qui permettra de mieux organiser le code et le rendre plus lisible...

    /*AVANT*/
    .nesting {
      color: hotpink;
    }
    .nesting > .is {
      color: rebeccapurple;
    }
    .nesting > .is > .awesome {
      color: deeppink;
    }
    /* MAINTENANT*/
    .nesting {
      color: hotpink;
    
      > .is {
        color: rebeccapurple;
    
        > .awesome {
          color: deeppink;
        }
      }
    }

    [EDIT] Par contre, ce n'est pas forcément supporté par les navigateurs pas à jour... https://caniuse.com/css-nesting

    text-wrap:balance

    en gros, pour rendre plus homogène un texte sur plusieurs lignes... Attention, pas pour un texte de plus de 10 lignes apparemment.

    via https://bookmarks.ecyseo.net/?DunHiA

    Contre-tribune de 2500 artistes | Cerveaux Non Disponibles

    C’est l’inversion des rôles où le bourreau (le « monstre », l’homme, pas du tout sacré, mais juste obscène) se place en victime, avec l’aide de ses ami.e.s. Comme toujours dans les affaires de violences sexistes et sexuelles à l’égard des femmes, la « présomption d’innocence » pour l’agresseur sonne comme une « présomption de mensonge » pour les femmes qui témoignent contre lui.

    1.jpeg

    C'est tellement ça... Ce gros porc de Depardieu fait des dégâts partout où il va depuis 40 ans, tripote, viole, insulte, bave, tient des propos outrageux et insupportables, convoite des fillettes le tout impunément et sous le regard complaisant d'un monde répugnant. Pire, quand - ENFIN - il commence à avoir quelques emmerdements bien légitimes, une poignée d'«artistes» nauséabonds viennent cracher au visage des victimes pour défendre ce bourreau.

    Quand cette ordure sera condamnée, j'espère qu'on entendra plus jamais parler de ces personnalités et qu'elles vont retourner à l'oubli dont elles n'auraient jamais dû sortir et qu'elles crèveront seules, dans leur coin, comme la bande de tâches insupportables qu'elles sont.

    Merci aux 2500 personnes qui, par leur nombre écrasant, viennent contrebalancer l'insupportable complicité de ces prédatophiles, Macron en tête.

    Que la justice fasse son travail. Mais nous devons également faire le nôtre. Celui de soutenir les victimes et de ne pas laisser tranquilles des agresseurs, des violeurs, des oppresseurs. Qu’ils ne puissent plus penser qu’ils peuvent agir en toute impunité, et parfois même en étant récompensés et glorifiés.

    2.jpeg

    Amen !

    P.S.: cher lecteur, si tu penses mettre un quelconque commentaire sous cet article pour «tempérer», «apporter de la nuance», défendre la «présomption d'innocence» ou quoi que ce soit qui minimise la culpabilité de cette ordure ou des gens qui prennent la parole pour le défendre, ne te fatigue pas: je n'ai aucune envie de te lire...

    Respecte mes datas - Découvrez ce qu'ils savent sur vous - UFC Que Choisir

    Le journal du geek nous explique comment lutter contre le démarchage téléphonique avec un nouvel outil : respectemesdatas.fr...

    Petite minute de cynisme

    En gros, tu t'inscris pour éviter que ton numéro ne finisse dans les fichiers des démarcheurs car tu notifies ainsi ton refus de figurer dans l'annuaire public... ça me rappelle deux trois trucs mais quoi...?! Mais si, des machins qui n'ont pas marché déjà... (liste rouge, bloctel toussa...) parce que:

    1. les démarcheurs s'en foutent
    2. les démarcheurs ne me semblent JAMAIS punis quand ils s'en foutent
    3. les démarcheurs s'en foutent (comment ça je l'ai déjà dit?!)
    4. les démarcheurs s'en tapent que tu leurs demande d'où ils ont le numéro: ils te raccorchent à la gueule et un collègue te rappelle dans la journée.
    5. ils en ont tellement rien à foutre qu'une fois sur deux ils te raccrochent au pif sans même prendre la peine de te parler.
    6. de toutes façons, ils ont de plus en plus de robots qui composent les numéros à la suite sans même s'emmerder à avoir des listes...

    Et si on était taquin, un peu ?!

    Puisque respectemesdatas.fr semble s'ériger en outil ultime contre la fuite de données personnelles, on va regarder ça de plus près...

    Noscript et ublock origin sont dans un bateau

    Capture du 2023-12-23 12-34-09.png
    Capture du 2023-12-23 12-34-00.png

    Et les gars, si vous êtes vraiment à la recherche d'un moyen d'éviter la fuite de données des utilisateurs, j'ai une ou deux idées à vous proposer, parce que là, c'est difficile de vous prendre au sérieux...

    Your Smart TV Knows What You’re Watching – The Markup

    Pour le jour où je devrais changer ma télé, vu que c'est presque impossible de trouver autre chose que ces merdes de smartTV...

    Donc, il y a des manipulations à faire pour éviter - ou limiter - l'action d'espionnage de votre télé... (ça me rappelle une blague de Coluche dans laquelle il disait qu'en Russie ils avaient aussi la télé mais que c'est ELLE qui vous regarde... #LOLouPas)

    pour les autres marques : https://www.tomsguide.com/how-to/stop-your-snooping-smart-tv-how-to-turn-off-data-collection-for-every-brand

    Sinon [merci Seb ! ] on peut utiliser les DNS de blocage de DNSForge.de :

    IPv4: 176.9.93.198 IPv4: 176.9.1.117 IPv6: 2a01:4f8:151:34aa::198 IPv6: 2a01:4f8:141:316d::117

    Sinon, spapossible de simplement pas la connecter à un réseau ?! (bon, après c'est sûr que pour netflix, spa'super...)

    Via https://sebsauvage.net/links/
    Fil RSS des articles de cette catégorie