🏡


to read (pdf)

  1. I don't want your PRs anymore
  2. JitterDropper | OALABS Research
  3. DomainTools Investigations | DPRK Malware Modularity: Diversity and Functional Specialization
  4. EXHIB: A Benchmark for Realistic and Diverse Evaluation of Function Similarity in the Wild
  5. Neobrutalism components - Start making neobrutalism layouts today

  1. May 05, 2026
    1. 🔗 BarutSRB/OmniWM OmniWM v0.4.8.1 release

      New and improved

      • Introduced the typed WMRuntime foundation for epoch-stamped window-manager transactions, shared snapshot publication, and safer command/effect routing.
      • Moved workspace session reconciliation, IPC support helpers, and orchestration planning into Zig kernels.
      • Added reliability transcript replay/golden coverage for fullscreen replacement, Niri focused removal, monitor rebinding, frame-write recovery, IPC races, authorization boundaries, floating child stacking, and Dwindle gestures.
      • Improved monitor identity persistence, display-id rebinding, workspace assignment, and multi-monitor behavior.
      • Switched settings persistence toward canonical TOML and improved live reload for editor save patterns.
      • Improved release/build reliability with Zig 0.16.0 support, bundled compiler-rt for x86_64 cross-compiles, stripped Zig cache from release bundles, and universal OmniWM plus omniwmctl binaries.
      • Included the bundled IPC/CLI tool, omniwmctl, for shell and scripting workflows.

      Fixes

      • Fixed window bleed across workspaces and columns.
      • Fixed Electron window detection by augmenting SLS misses with CGWindowList.
      • Fixed AX attribute resolution so AXValue error wrappers do not look like resolved attributes.
      • Fixed trackpad crash behavior on Dwindle workspaces and improved column-scroll landing on Niri.
      • Fixed multi-monitor mouse warp behavior.
      • Fixed workspace moves for floating windows, hidden floating-window restoration, and new windows opening on a moved app workspace.
      • Stabilized native fullscreen restore, Niri viewport scrolling, Niri focused-removal recovery, and hidden placement across monitor boundaries.
      • Fixed Quake terminal resize boundaries and reduced unnecessary full CGSWindowList scans during Quake terminal screen detection.
      • Fixed status item visibility and off-screen status item recovery.
      • Hardened trackpad gesture finalization and event tap teardown on app shutdown.
      • Skipped border work when borders are disabled.

      Documentation and project updates

      • Updated architecture, IPC/CLI, contribution, verification, and release-gate documentation.
      • Added GPL-2.0-only SPDX headers.
      • Added new contributors and sponsors.
      • Removed stale diagnostic tracing infrastructure.
      • Removed the stale docs/RELIABILITY-MIGRATION.md dependency from release checks and contributor guidance.

      Verification

      • Added and expanded tests for runtime routing, layout graph preservation, AX activation recovery, workspace/session reducers, IPC behavior, kernel ABI ownership, transcript replay, CLI completion, and release gates.
      • make release-check passes with SwiftLint at 0 serious violations, direct-mutation enforcement passing, transcript coverage passing, kernel ABI checks passing, the Swift test suite passing, and universal release products verified.
    2. 🔗 r/reverseengineering Reverse-engineering the 1998 Ultima Online demo server rss
    3. 🔗 r/york Looking for a tenant to take over my old house rss

      Looking for a tenant to take over my old house | Hello all, hoping this doesn’t count as commercial spam and can stay up as I know people sometimes come on here looking for housing. I’ve just bought a house (hooray, adulthood!) and in an effort to not have to pay the rest of my tenancy on my old house, the landlord’s agreed we can be released from the tenancy early if they can find a new tenant. (Renters right act has come in just too late to help us out, unfortunately) It’s a 2 bed mid-terrace in Heworth about a 20 min walk and even shorter cycle to the city centre. It’s the nicest rental property I’ve ever had, and I’ve had a few. It’s a good size, in generally decent condition, has a garage and a parking space and a little courtyard. I can promise I didn’t leave any disastrous messes or unpaid bills there! Shoot me a message if you have the kind of questions letting agents won’t answer!! If you’re interested give them a call via the details on Rightmove, I don’t think they’ve had much interest which surprises me submitted by /u/hollyviolet96
      [link] [comments]
      ---|---

    4. 🔗 sacha chua :: living an awesome life La semaine du 27 avril au 3 mai rss

      lundi 27 avril

      J'ai ajouté la capacité de naviguer en temps réel à mon paquet subed.el. C'était déjà très pratique pour ajouter les chapitres à la transcription de ma conversation avec John Wiegley et Karthik Chikmagalur. Elle a besoin d'une petite modification pour convertir les notes que j'avais prises pendant la conversation.

      J'ai emmené ma fille à son cours de gymnastique. Il y avait un remplaçant. Je suis ravie de voir que le remplaçant a porté un masque KN-95 sans demander.

      Je me suis organisé avec ma mère pour installer l'app BDO Pay sur mon téléphone.

      J'ai préparé les éléments pour coudre mon chapeau comme le chapeau que j'avais cousu pour ma fille.

      mardi 28

      J'ai emmené ma fille à Adventure Alley pour jouer avec ses amies. C'était un peu cher, mais ma fille s'est amusée, donc ce n'est pas un problème si nous allons là-bas de temps en temps.

      mercredi 29

      L'écran de remplacement est arrivé au magasin Apple, donc je vais aller là-bas demain.

      J'ai réécrit une partie de la page EmacsNewbie sur l'EmacsWiki.

      Ma fille a cousu mon chapeau.

      Sur Stardew Valley, nous avons acheté un cochon et un mouton. Nous avons mis à niveau le poulailler en un grand poulailler et nous avons ajouté une cuisine à notre maison.

      jeudi 30

      J'ai été ravie en discutant avec Prot sur l'expérience de l'éditeur Emacs pour les débutants.

      Mon mari, ma fille, et moi avons fait du vélo avec son amie et le père de son amie.

      Sur Stardew, ma fille a remarqué que j'ai accidentellement acheté une vache que j'appelle Chèvre au lieu de la chèvre que j'ai prévu d'acheter pour le centre communautaire. Oups! Elle s'est très amusée et elle m'a demandé, quand j'achète finalement une chèvre, si je pouvais l'appeler Vache. Les animaux seront très confus, et moi aussi. Je l'ai quand même fait.

      vendredi 1er mai

      L'école avait un remplaçant et elle n'a pas voulu y assister, donc j'ai prévenu l'école de son absence et nous avons fait un compromis entre ses devoirs et des jeux.

      Nous sommes allées au Stockyards pour acheter des tissus pour son maillot de bain. Elle a trouvé les deux couleurs qu'elle voulait, mais il ne restait qu'un yard d'une couleur. Il faudra que nous planifions soigneusement. Nous avons acheté des fils chez Michaels. Elle a aussi acheté une boîte de mochi puffs chez Marry Me Mochi.

      Elle a cousu des coutures sur mon chapeau.

      samedi 2

      Pour le petit-déjeuner, ma fille a préparé une grande omelette en utilisant six œufs. On s'est régalés.

      Ma fille était grincheuse parce que j'ai attiré son attention sur son agitation et elle a senti que j'étais sur son dos.

      Le magasin Apple n'a pas pu réparer l'écran de ma tablette, donc il l'a remplacé par une nouvelle tablette pour une petite somme. L'Apple Pencil était finalement lié à ma garantie AppleCare+, mais malheureusement, il était en rupture de stock partout en ville, donc il fallait que j'attende pendant environ une semaine.

      Une fois rentrée, j'ai trouvé que ma fille s'était calmée. Elle et moi avons joué à Duplo, ce qui est aussi un produit LEGO, mais plus grand que la normale. Je les ai utilisés pour montrer à ma fille des concepts mathématiques comme les permutations et les combinaisons.

      dimanche 3

      Mon mari et moi avons fait du vélo au centre-ville avec ma fille dans mon vélo cargo. Ma fille et moi avons essayé le mochi chez Kibo (c'était délicieux) avant de continuer chez MEC pour chercher une nouvelle gourde pour remplacer celle que j'ai perdue. Elle n'a rien vu qui lui plaisait. Nous avons aussi acheté un mannequin en bois pour faciliter des prototypes pour coudre et des crayons d'aquarelle pour les explorer.

      Une fois rentrés, mon mari a fait cuire un pain de levain qu'il donnera au père de l'amie de notre fille, suite à leur conversation vendredi. Ma fille et moi avons travaillé sur le plan de faire son maillot de bain. Elle a voulu une robe qui a un corsage cache-cœur et une jupe à ourlet tulipe. Pour le dos, elle a voulu des bretelles croisées avec un petit dos goutte.

      J'étais fatiguée, donc j'ai fait une sieste. Ma fille est venue me réveiller. J'ai remarqué que mes yeux étaient très secs, donc elle a négocié de m'apporter des gouttes pour les yeux et elle me les a administrées pour 25 cents.

      You can e-mail me at sacha@sachachua.com.

    5. 🔗 sacha chua :: living an awesome life La semaine du 13 au 19 avril rss

      lundi 13

      Ma fille a séché les cours toute la journée. Elle a dit qu'elle était fatiguée. Elle est restée à la maison au lieu d'aller à son cours de gymnastique.

      J'ai configuré obs-websocket pour lancer et arrêter la diffusion en direct depuis Emacs.

      Il faisait très beau, donc je me suis assise dehors et j'ai lu la configuration d'Emacs de tecosaur. Non seulement sa configuration était très détaillée, mais elle était aussi magnifiquement mise en page.

      J'ai préparé mon bulletin d'information sur Emacs pendant que je diffusais en direct.

      Le glacier était toujours fermé, donc nous avons acheté de la crème glacée au supermarché à la place.

      À l'heure du coucher, ma fille a dit qu'elle aurait aimé rester une enfant. Elle a dit qu'elle aimait bien KidSpark, qui est réservé aux enfants jusqu'à 10 ans.

      mardi 14

      Ma fille a suivi son cours. Après l'école, nous avons fait du vélo au parc pour jouer avec ses amies, qui en faisaient aussi.

      J'ai continué à améliorer obs-websocket pour gérer mon direct depuis Emacs. J'ai aussi réécrit mon correctif pour l'opération « sentence-at-point » sur Org Mode.

      J'étais fatiguée et j'avais un peu mal à la tête.

      mercredi 15

      Ma fille s'est réveillée tard, mais elle a participé à son cours toute seule.

      J'ai mis à jour mon OBS pour ajouter socialstream.ninja via une source navigateur. Maintenant, je peux afficher les commentaires et je peux envoyer un message depuis Emacs sur YouTube.

      J'ai travaillé un peu comme consultante. Le design du profil avait besoin d'une petite correction.

      Ma fille et moi avons joué à Stardew Valley.

      Mon mari avait une course près du Musée des beaux-arts de l'Ontario. Ma fille était heureuse de sécher les cours l'après-midi parce que l'école avait une remplaçante. J'ai emmené ma fille là-bas et nous avons passé du temps à essayer les activités au musée et à dessiner sur nos tablettes.

      Après le dîner, nous nous sommes entraînées à peindre des yeux avec des aquarelles.

      jeudi 16

      J'avais rendez-vous avec Protesilaos pour l'informer de mes progrès depuis notre conversation précédente et lui poser mes nouvelles questions. J'ai fait fonctionner mon code pour lancer ma vidéo à partir d'un horodatage et j'ai écrit une fonction pour calculer la conversion entre l'heure réelle et le temps écoulé.

      Ma fille et moi avons joué à la Play-Doh, au sungka (un jeu traditionnel philippin), et aux charades.

      vendredi 17

      J'ai révisé les sous-titres de ma conversation avec Prot d'hier. J'ai ajouté deux fonctions pour gérer l'étiquette d'interlocuteur quand on divise ou fusionne des sous-titres. J'ai aussi programmé trois conversations sur Emacs et j'ai publié les événements sur YouTube et sur mon site grâce à d'autres fonctions. J'ai aussi modifié ma bibliothèque pour publier mon site afin qu'elle n'inclue pas les fichiers privés.

      J'ai travaillé sur nos impôts.

      Ma fille s'est réveillée toute seule ce matin, à temps pour le petit-déjeuner, notre routine matinale, et son interrogation de mathématiques à l'école. Mais elle a séché les cours l'après-midi et elle s'est assise tout l'après-midi contre sa porte. Au lieu de se détendre, elle s'est davantage braquée contre moi. Je ne sais pas quoi faire dans cette situation.

      samedi 18

      Pour le petit-déjeuner, j'ai préparé des crêpes avec le reste de la crème fouettée. Il reste juste un peu de la créme, donc je n'ai pas pu fouetter dans le mélanger. J'ai fouetté à la main. J'ai aussi utilisé la crème fouettée congelée que j'avais faite il y a plusieurs mois. Je les ai mangé avec des pêches et de la mangue. C'était parfait.

      Lire la configuration lettrée d'Emacs de tecosaur me rend jaloux de sa mise en page, donc j'ai passé du temps en ameliorant l'export de ma configuration. C'est très long. Le PDF est 736 pages. Seule la table de matières est 15 pages. Je veux ajouter plus de commentaires et implementer plus d'exports LaTeX pour mes types de liens.

      Ma fille était grincheuse contre moi du matin, mais l'après-midi, elle a réapparu et elle a voulu passer du temps avec moi.

      Nous avons joué à Minecraft pour essayer les nouveaux cubes de soufre. Nous avons généré un Warden et lui avons donné un cube qui nous donnaient un bloc de champignon. Le Warden s'amusait avec le cube.

      Nous avons joué avec Play-Doh. Je l'ai étalé très finement et nous l'avons coupé à beaucoup de pièces. Elle les a tressé. Elle a voulu essayer une tresse couronne, donc j'ai tressé ses cheveux.

      Pour le dîner, nous avons préparé des sushis.

      Nous avons joué encore à Stardew Valley Expanded. Nous avons bien progressé dans les paquets du centre communautaire, même si j'ai oublié d'obtenir l'engrais de centre communautaire après la Fête des Œufs pour accélerer les fraises. Tant pis.

      Ma fille a pratiqué son vocabulaire français en racontant l'histoire de la famille d'Eevee.

      dimanche 19

      Ma fille s'est réveillée à 8h00 aujourd'hui. Elle trouve que c'est plus facile de se réveiller quand il n'y a pas école. Il est bon que je n'avait pas commencé une diffusion en direct.

      Ma fille et moi sommes allées aux Stockyards à vélo pour acheter des tissus pour coudre un chapeau d'été. Elle avait fait du lèche-vitrine mais elle n'en avait pas trouvé un qui lui convenait, donc nous devons le faire nous-même. Elle a choisi du tissu jaune Pokémon. Elle a aussi voulu de la laine pour faire du crochet une couverture.

      Nous avons mangé du Panda Express pour le déjeuner. Le repas enfant m'a suffi.

      Je l'ai déposée à la maison et j'ai apporté des donations au Goodwill en faisant le grand ménage. J'ai aussi fait les courses. Une fois que je suis rentrée, ma fille m'a montré fièrement qu'elle a fait les lits comme un hôtel.

      Nous avons joué à Stardew Valley Expanded après le dîner. L'été a commencé. Je pense que je dois planter plus de doubeurre pour le paquet récoltes de qualité qui demande 5 récoltes de qualité or.

      You can e-mail me at sacha@sachachua.com.

    6. 🔗 sacha chua :: living an awesome life La semaine du 20 au 26 avril rss

      lundi 20 avril

      Ma fille s'est réveillée tôt de façon autonome, donc nous avons terminé notre routine matinale. Mais elle a été déconcertée quand son mot de passe n'a pas fonctionné pour se connecter à l'école. Je l'ai aidée et elle a assisté à ses cours. Je pensais qu'elle allait bien, mais une fois que je suis allée la voir pendant la récré, j'ai trouvé qu'elle était grincheuse. Elle a encore séché les cours.

      À mon grand étonnement, après la pause déjeuner et un petit moment de jeu, elle participait à l'école.

      Quelques points :

      • Comme tout le monde, elle a des jours avec et des jours sans. Quand elle a mal au corps, tout est dur.
      • Nous savons que les cours collectifs ne lui conviennent pas pour le moment. C'est une expérience pour obtenir des données.
      • Ce n'est pas la fin du monde. Peut-être que l'école est plus indulgente que je ne le pense. Je peux leur laisser dire quand il y a un vrai problème. C'est possible que ce ne soit pas un problème.
      • C'est très difficile (peut-être impossible) d'aider une personne qui ne veut pas être aidée, particulièrement car une partie de sa résistance est due à son désir d'autonomie.
      • Harceler est inutile et inefficace. Si j'essaie d'utiliser la punition, je lui rends la tâche plus difficile pour choisir elle-même une bonne façon de procéder.
      • Si elle veut quelque chose de différent, nous pouvons trouver quelque chose de différent.
      • Donc je dois gérer mes propres émotions et être solidaire. Je dois avoir confiance dans le fait qu'elle veut un bon résultat pour elle-même. Elle peut le gérer ou elle peut demander de l'aide. Si je reste zen, c'est plus facile pour elle de demander de l'aide.

      mardi 21

      Je pense que j'ai trouvé un moyen de me protéger contre les accidents pendant une diffusion en direct. Si je diffuse avec un délai vers une autre instance d'OBS, je peux interrompre le flux une fois que je remarque quelque chose que je partage accidentellement.

      J'ai aussi écrit une fonction pour formater les événements dans le format Org Mode pour exporter vers le format iCalendar.

      J'ai répondu à des courriels, dont un en français. J'ai mis à jour les entrées de mon agrégateur Planet Emacslife. Je l'ai modifié pour utiliser toujours l'IPv4 et interpréter correctement les corps des articles.

      Pour la soulager de son ennui, j'ai aidé ma fille à travailler sur des fiches d'exercices mathématiques pour les élèves de 6ème, qu'elle a pu accomplir avec de petites astuces. Elle était très fière parce que c'était plus intéressant que ses devoirs.

      Après l'école, j'ai emmené ma fille au parc pour jouer avec toutes ses meilleures amies. Elles s'amusaient tellement que d'autres enfants ont voulu se joindre à elles, ce qui a rendu l'endroit trop bruyant pour ma fille, qui s'est déplacée au bac à sable pour jouer au calme. Une fois que les autres enfants sont partis, ma fille a retrouvé ses amies.

      Ma fille a redécouvert les attrape-soleil et elle en a peint quelques-uns avec des peintures acryliques. Elle a voulu une peinture verte, mais nous n'en avions pas, donc elle a mélangé de la peinture bleue et de la peinture jaune pour en faire.

      Elle a aussi discuté de son idée pour un petit mannequin pour présenter des prototypes de robes. Nous avons cherché des options en ligne, mais tous les produits étaient trop chers ou ne convenaient pas à ma fille. Nous allons peut-être acheter un petit mannequin chez Ikea.

      J'étais un peu fatiguée.

      mercredi 22

      J'ai écrit quelques articles pour annoncer mes diffusions en direct.

      J'ai proposé à ma fille de travailler sur des mathématiques plus complexes ensemble, mais elle n'avait pas besoin de mon aide aujourd'hui.

      Après l'école, ma fille et moi avons fait du vélo au parc. Nous étions en avance pour notre rendez-vous avec ses amies, donc nous avons joué dans l'aire de jeu près de la rue qui a un grand bac à sable. J'ai apporté les jouets de sable, ce qui a permis à ma fille de simuler une pâtisserie. Après avoir joué, nous sommes allées à l'autre aire de jeu en pente. Nos amies étaient en retard, mais ce n'était pas un problème. Il y avait d'autres amies, et une fois qu'elles ont dû partir, nous avons joué aux balançoires jusqu'à ce que nos autres amies arrivent. Il faisait beau et un peu chaud. Ma fille a mangé deux sucettes glacées au yaourt, à la fraise, et au miel qu'elle a préparées hier soir, et elle les a offertes à ses amies.

      Ses amies sont venues à pied. Ma fille a voulu les accompagner sur le chemin du retour, donc nous sommes toutes allées à pied. J'ai accroché son vélo au mien grâce au sac Bakkie, et j'ai poussé mon vélo pendant qu'elles marchaient.

      Une de ses amies est tombée et elle a eu mal au genou. Elle a hurlé. Ma fille a offert un bandage Pokémon. Elle a encore hurlé, ce qui était trop bruyant pour ma fille qui commençait aussi à pleurer. Elles ont eu besoin de quelques moments avant qu'elles ne se calment.

      J'étais étonnée que ma fille ait voulu accompagner ses amies presque jusque chez elles. Eh bien, le soleil brillait et je peux toujours emmener ma fille si elle devient trop fatiguée.

      Pour le dîner, mon mari a préparé des escalopes de poulet.

      jeudi 23

      J'ai travaillé comme consultante.

      J'ai emmené ma fille au parc Dufferin Grove pour jouer là-bas. Une fois arrivée, elle a vu que ses meilleures amies sont occupées à jouer avec une fille qui est en désaccord avec ma fille, donc ma fille a décidé de jouer plutôt avec moi ou avec son père, qui nous a rejoints à vélo. Elle a joué sur la balançoire et le toboggan. Elle a aussi joué dans le sable avec d'autres enfants.

      À la maison, nous avons fait des bulles géantes.

      vendredi 24

      J'ai eu une merveilleuse conversation avec John Wiegley et Karthik Chikmagalur sur le flux de travail de John pour gérer ses tâches sur Emacs et sur Org Mode.

      Ma fille était un peu grincheuse parce que j'étais occupée avec ma conversation et son père était occupé à préparer le dîner. Une fois que j'étais disponible, elle a voulu jouer à un jeu de dominos que nous avons déjà donné il y a plus d'une année. Elle a été déçue, puis elle a décidé de faire un jeu similaire en utilisant LEGO. Elle s'est amusée.

      J'ai accidentellement fait tomber mon Apple Pencil et il s'est cassé.

      samedi 25

      Je suis allée au magasin Apple pour essayer de remplacer mon Apple Pencil et de réparer l'écran de ma tablette sur la garantie AppleCare+. Je n'ai rien obtenu. Ils n'avaient pas les pièces en stock pour la réparation de l'écran, donc le technicien les a commandées et il va me notifier une fois qu'elles seraient arrivées. Il a trouvé que mon Apple Pencil n'est pas inclus dans la garantie AppleCare+ automatiquement même si je l'avais acheté en même temps que ma tablette. Le technicien m'a dit que j'ai besoin d'appeler l'assistance Apple pour lier mon Apple Pencil à la garantie AppleCare+, ce qui a pris 35 minutes à résoudre. Une fois que j'ai fini, le technicien est déjà passé à un autre client. C'était très occupé au magasin, et je n'ai pu reprendre mon rendez-vous. Si je voulais faire un autre rendez-vous, il m'aurait fallu attendre plus d'une heure et demie. J'étais surstimulée, donc j'ai choisi de rentrer.

      Ma fille a voulu jouer à Stardew Valley avec moi. C'étaient les derniers jours avant l'automne. Elle a commencé à détruire ses arbustes de myrtilles. Quand je lui ai demandé ce qu'elle faisait, elle est partie furieuse parce qu'elle a senti que j'étais sur son dos. J'ai présenté mes excuses, et je l'ai aussi informée que les myrtilles ont une récolte de plus exactement à la fin de la saison. Elle ne le savait pas.

      dimanche 26

      J'ai écrit une petite fonction pour sauvegarder une capture d'écran à la position actuelle dans la vidéo et l'ajouter avec un horodatage au sous-titre actuel, ce qui facilite l'inclusion des images à l'article. Karthik et moi avons discuté du traitement de la vidéo.

      Il faisait très beau, donc ma fille et moi avons fait du vélo jusqu'au Corktown Commons pour la première fois. Elle s'est très amusée sur les toboggans. Nous avons aussi fait plusieurs gâteaux de sable dans le bac à sable, grâce aux quelques conteneurs que j'ai apportés.

      Après le dîner, ma fille a voulu jouer à Stardew Valley avec moi. Elle m'a demandé si c'est acceptable si elle vend quelques minerais d'or. Je lui ai demandé ce qu'elle voulait faire, quel est son but… Elle est devenue grincheuse et elle s'en est allée. Je me suis rendu compte qu'elle voulait peut-être faire de l'espace dans son inventaire, ce qui peut aussi être résolu avec un coffre, ce que j'avais d'ailleurs prévu de faire. Bien, elle doit développer sa propre autorégulation. Elle est finalement revenue de sa chambre et elle m'a demandé un câlin parce que son nez lui fait mal, pauvre chérie. Nous avons fait la routine du soir avec des larmes.

      You can e-mail me at sacha@sachachua.com.

    7. 🔗 r/Leeds Childfree people of Leeds? rss

      Heya! Random one, but are there many childfree people in Leeds on here?

      I’ve been thinking about setting up a Discord or something just to chat, maybe find people for games or last-minute plans, but not sure if there’d actually be much interest. I'd probably make it for people around my age, like 25+ year olds or something

      For me personally it feels like a lot of social stuff ends up revolving around kids/schedules and it’d be nice to have a space that’s a bit more flexible, and to also have conversations that don't involve how Timmy shat his pants in Morrisons cafe

      Would anyone be up for something like that? I'm up for making one and sending some invites out - or if this space already exists please do let me know so I can get involved!

      EDIT - I’m gonna make a server - if you want an invite leave a comment/send me a dm :)

      submitted by /u/amzlrr
      [link] [comments]

    8. 🔗 r/york Let's talk about York's hidden past! rss

      Hey r/york!

      We're Uncomfortable York, an academic-led tour organisation focusing on the underrepresented stories and people that make up the UKs favourite cities.

      On our tour we talk about the lived experience of diverse individuals living and working in York across its 2000 years of history. We also examine York's connections to the world as a seat of power from the Roman Empire to a manufacturing hub for the chocolate industry.

      We've taken to Reddit to ask some important questions:

      • Do you feel represented in York's heritage landscape?

      • What topics, themes, people, periods, etc. would you like to see examined with a more critical eye?

      If you're interested in checking out our work feel free to head over to our website!

      submitted by /u/Uncomfortable_Tours
      [link] [comments]

    9. 🔗 r/LocalLLaMA Gemma 4 MTP released rss

      Blog post:

      https://blog.google/innovation-and-ai/technology/developers-tools/multi- token-prediction-gemma-4/

      MTP draft models:

      https://huggingface.co/google/gemma-4-31B-it-assistant

      https://huggingface.co/google/gemma-4-26B-A4B-it-assistant

      https://huggingface.co/google/gemma-4-E4B-it-assistant

      https://huggingface.co/google/gemma-4-E2B-it-assistant

      This model card is for the Multi-Token Prediction (MTP) drafters for the Gemma 4 models. MTP is implemented by extending the base model with a smaller, faster draft model. When used in a Speculative Decoding pipeline, the draft model predicts several tokens ahead, which the target model then verifies in parallel. This results in significant decoding speedups (up to 2x) while guaranteeing the exact same quality as standard generation, making these checkpoints perfect for low-latency and on-device applications.

      submitted by /u/rerri
      [link] [comments]

    10. 🔗 r/reverseengineering Inside Faxanadu series — deep dive into how this NES title works rss
    11. 🔗 r/reverseengineering EMBA v2.0.1 with interactive firmware dependency map available - Check it out and let us know what you are missing rss
    12. 🔗 r/Yorkshire Glorious day along the Wall rss

      Glorious day along the Wall | A bit rainy & windy, but still a brilliant day out. submitted by /u/TitanicDays
      [link] [comments]
      ---|---

    13. 🔗 r/Leeds Favorite spot to read books? rss

      Im new in the city and looking for any recommendations where I can just chill out, have tea or coffee and read a book. I really enjoyed Sonder and Sociable Folk. Any other similar spots?

      submitted by /u/nimblebaroness
      [link] [comments]

    14. 🔗 r/Leeds Is this “d” an upside down “P” on the Leeds sign? rss
    15. 🔗 r/york Why didn't they take this rss

      Why didn't they take this | York recycling bin men left this ? York council are a bloody joke (or they would be if the fact they provide such a shitty service and waste OUR money) submitted by /u/DarkBytes
      [link] [comments]
      ---|---

    16. 🔗 r/york The Doom Stone in the Crypt at York Minster rss

      The Doom Stone in the Crypt at York Minster | ⚔️ Beneath the floor of York Minster lies one of the most chilling reminders of medieval England’s belief in death and judgement: The Doom Stone. Carved over 800 years ago, this fragment was once part of a great tympanum above a church doorway. Its original paint and detailed imagery warned every visitor of the Last Judgement – heaven or hell, salvation or damnation. In this film, we explore the stone, the medieval mindset that created it, and how faith shaped the lives and deaths of all who passed beneath it. Featuring rare imagery of medieval Doom paintings, manuscripts, and iconography, this short documentary brings the forgotten stone and its message back into the light. There is NO AI Imagery in this Film, and all Motion Graphics were created by hand. Step into the shadows of England’s past. 00:00 The Doom Stone Beneath York Minster
      00:50 What is the Doom Stone?
      02:30 Medieval Last Judgement Explained
      03:55 Heaven & Hell
      04:50 Fear of Death and Judgement
      6.00 Conclusion – A Warning in Stone submitted by /u/The_Black_Banner_UK
      [link] [comments]
      ---|---

    17. 🔗 r/Yorkshire Mornings like this are all I need❤️‍🩹 rss

      Mornings like this are all I need❤️‍🩹 | submitted by /u/Coffee000Oopss
      [link] [comments]
      ---|---

    18. 🔗 r/york Struggling to find a place for 3 sharers/2 households rss

      Me and my partner and a friend of ours are looking for a place to live within the next month or so. I keep telling letting agents that me and my partner are long-term dating and we count as two households, but for some reason they still consider it 3 sharers and any advice I find online just says "say two of you are dating so it counts as two households" which we don't need to lie about because we are actually dating. Does anyone know what areas that have a decent commute to the city centre would be more ok with that?? Two of us are students but one of us is graduating in the next month so student accomodation isn't possible. Really not sure what to do.

      submitted by /u/Rainecats
      [link] [comments]

    19. 🔗 r/reverseengineering Copy.fail: Why Internal LLMs Are Non-Negotiable for Security rss
    20. 🔗 tomasz-tomczyk/crit Windows pre-release 1 (PR #459) release

      Pre-release Windows binaries for testing the windows-wsl-support branch (PR #459).

      This release is not published to Homebrew and is not a stable release. It exists so reviewers can test Windows + WSL support without merging the PR.

      Install

      1. Download the matching binary below (crit-windows-amd64.exe for most machines, crit-windows-arm64.exe for ARM64).
      2. Rename it to crit.exe.
      3. Drop it on your PATH.
      4. Run crit in a git repo with changed files.

      Linux/macOS binaries are included for convenience but the supported install path on those platforms remains Homebrew (brew install tomasz- tomczyk/tap/crit).

    21. 🔗 backnotprop/plannotator v0.19.8 release

      Follow @plannotator on X for updates


      Missed recent releases? Release | Highlights
      ---|---
      v0.19.7 | Codex Stop-hook plan review, Codex skills, sidebar auto-close, file tree context menu
      v0.19.6 | Non-blocking Pi browser sessions, agent picker dropdown for OpenCode, annotate-last file resolution fix
      v0.19.5 | All-files diff view, clickable code file paths, server-side hide whitespace, non-ASCII path support
      v0.19.4 | All-files diff type, code file viewer, hide whitespace, quick-settings popover
      v0.19.3 | Configurable feedback messages, hide merged PRs in stacked PR selector
      v0.19.2 | Stacked PR review, source line numbers in feedback, diff type dialog re-show, ghost dot removal, docs cleanup
      v0.19.1 | Hook-native annotation, custom base branch, OpenCode workflow modes, quieter plan diffs, anchor navigation
      v0.19.0 | Code Tour agent, GitHub-flavored Markdown, copy table as Markdown/CSV, flexible Pi planning mode, session-log ancestor-PID walk
      v0.18.0 | Annotate focus & wide modes, OpenCode origin detection, word-level inline plan diff, Markdown content negotiation, color swatches
      v0.17.10 | HTML and URL annotation, loopback binding by default, Safari scroll fix, triple-click fix, release pipeline smoke tests
      v0.17.9 | Hotfix: pin Bun to 1.3.11 for macOS binary codesign regression
      v0.17.8 | Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish


      What's New in v0.19.8

      v0.19.8 is a UI infrastructure release. Nine PRs introduce a 49-theme gallery with matched syntax highlighting, a declarative keyboard shortcut system, smart code-file path validation in plans, and several reliability fixes for remote sessions and the code review editor. One PR comes from a first-time contributor.

      49 Themes with Matched Syntax Highlighting

      The entire color system is now themeable. Settings includes a new Theme tab with 49 editor-grade themes ported from the VS Code ecosystem — dark, light, and dual-mode options including Tokyo Night, Nord, One Dark Pro, Poimandres, Everforest, Vesper, and more. Each theme pairs its UI palette with a matched syntax highlighting scheme, so code blocks in plan and code review render with consistent colors.

      A preview mode lets you cycle through themes without committing: the selected theme applies instantly, and clicking away or pressing Escape reverts to your saved choice. Theme preference persists in cookies and travels across sessions on the same machine.

      Keyboard Shortcut Registry

      Plan review and code review now have a declarative keyboard shortcut system. Shortcuts are defined as scopes (annotation toolbar, comment popover, file tree, AI panel, etc.) with platform-aware bindings — Cmd on macOS, Ctrl elsewhere. Double-tap and hold modifiers are supported for power-user workflows.

      The system auto-generates a reference page on the marketing site at build time, so documentation stays in sync with code without manual maintenance. A help modal (press ?) surfaces all available shortcuts in context.

      Smart Code-File Path Validation

      When plans reference file paths (e.g., src/components/App.tsx), Plannotator now validates them against the actual project tree. Paths that exist get clickable links to a code file viewer. Ambiguous paths (multiple matches) show a picker. Missing paths display a subtle indicator so you know the reference is stale or wrong before approving the plan.

      Resolution is fuzzy — it handles relative paths, paths missing a leading directory, and common shorthand. The validation batches requests to avoid hammering the filesystem on large documents. This works across plan mode, annotate mode, and linked docs.

      Remote Session URL Notifications for OpenCode and Pi

      Remote users on OpenCode and Pi previously couldn't see the Plannotator URL when running over SSH or in containers. The server would start, but the URL was only passed to the browser-open function, which silently fails in headless environments.

      Both plugins now explicitly surface the URL through their native notification APIs: client.app.log() for OpenCode and ctx.ui.notify() for Pi. The URL appears in the TUI/UI regardless of whether a browser actually opens.

      Ghost Session Detection for /plannotator-last

      Running /clear in Claude Code creates a new session log file, but the previous file remains on disk without a registered session ID. When plannotator last resolved the most recent log by modification time, it would find the ghost file instead of the active session, causing it to always show the same stale message.

      The fix checks whether a candidate log's session ID is registered in Claude Code's session metadata. Unregistered (ghost) files from /clear are skipped, and the resolver falls through to the next candidate. This restores correct behavior for users who clear their session mid-conversation.

      Additional Changes

      • Stop diff list re-rendering on every comment keystroke. The code review annotation toolbar's form state was lifting re-renders into the entire diff view, causing visible jank when typing comments. Moved toolbar state into an isolated component with imperative communication back to the parent. (#660 by @backnotprop)
      • bun link support for local development. Contributors can now run bun link in a checkout to get a global plannotator command pointing at the local source. A thin Node wrapper in bin/plannotator.js spawns Bun with the source entrypoint. (#656 by @codythatsme)
      • plannotator-setup-goal skill. A new Claude Code skill that scaffolds project goals from a markdown template using plannotator annotate --gate for interactive review. Includes an OpenAI agent YAML definition and a Python scaffold script. (#665 by @backnotprop)
      • Co-authors and community contributors on homepage. The marketing site's contributor strip now pulls from a broader list including co-authors from commit trailers and community members who've contributed through issues, discussions, and feedback. (#662 by @backnotprop)

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: Run /plugin in Claude Code, find plannotator , and click "Update now".

      OpenCode: Clear cache and restart:

      rm -rf ~/.bun/install/cache/@plannotator
      

      Then in opencode.json:

      {
        "plugin": ["@plannotator/opencode@latest"]
      }
      

      Pi: Install or update the extension:

      pi install npm:@plannotator/pi-extension
      

      What's Changed

      • feat(ui): shortcut registry foundation by @backnotprop in #652
      • fix(ui): smart resolution + existence-validation for code-file paths by @backnotprop in #654
      • feat: add bun link support for local CLI development by @codythatsme in #656
      • fix(review): stop diff list re-rendering on every comment keystroke by @backnotprop in #660
      • fix(session-log): detect ghost sessions from /clear to resolve correct log by @backnotprop in #661
      • feat(marketing): include co-authors and community contributors on homepage by @backnotprop in #662
      • fix(remote): notify URL in remote mode for OpenCode and Pi by @backnotprop in #663
      • feat(ui): 49 themes with matched syntax highlighting + preview mode by @backnotprop in #664
      • feat(skills): add plannotator-setup-goal skill by @backnotprop in #665

      New Contributors

      Contributors

      @codythatsme contributed bun link support for local development (#656), making it straightforward for contributors to test against a live source checkout without rebuilding the compiled binary. First contribution to the project.

      Community members whose reports drove fixes in this release:

      Full Changelog : v0.19.7...v0.19.8

    22. 🔗 r/Harrogate Bilton Triangle Development rss

      Hi all, I remember a while ago there being so chat regarding developing the Bilton triangle farmers field for housing. Is anyone aware of any updates? Thanks!

      submitted by /u/Leading_Roof407
      [link] [comments]

  2. May 04, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-05-04 rss

      IDA Plugin Updates on 2026-05-04

      Activity:

    2. 🔗 r/Leeds Coffee / Drinks meet up… join us! rss

      After the previous thread of someone looking to meet people, I thought what a perfect reason to create a meet up.

      I think these days it can be hard to meet new people. even when you have friends it’s always nice to meet new people and find people who want to do things, try things, go places.

      I’ve created a WhatsApp group, so can banter / chat in there and then arrange the date and time for the first meet up. It’ll be cool as well for that group to be used to organise other meet ups, walks, activities.

      I’m happy to host the first one, welcome and chat to everyone as they walk in. These things can be awkward, but thankfully I’ve been involved with events and language exchanges so know to make them run smoothly.

      I’m fortunate to have a cafe (also sells pints and alcohol too…) I’d be more than happy to use the space, and I’ll even throw in a free drink for everyone and some nibbles.

      If you want to join, send me a DM and I’ll send the WhatsApp group chat!

      submitted by /u/No_Kitchen1337
      [link] [comments]

    3. 🔗 r/york Any gaming communities? rss

      Hi everyone I’m Chloe, M24 recently moved to York from Cornwall. Beautiful city and the people are extremely friendly, I was just wondering if anyone knows of any gaming communities in the area for people perhaps my age - I’m struggling to make friends and would love to make friends with some fellow gamers, or if anyone individual would have room for one more in their circle I’d be happy to join

      I usually play a wide variety of games so anything works for me

      submitted by /u/Chloeallloving
      [link] [comments]

    4. 🔗 obra/superpowers v5.1.0 release

      Removals

      • Legacy slash commands removed/brainstorm, /execute-plan, and /write-plan are gone. They were deprecated stubs that did nothing but tell the user to invoke the corresponding skill. Invoke superpowers:brainstorming, superpowers:executing-plans, and superpowers:writing-plans directly instead. (#1188)
      • superpowers:code-reviewer named agent removed — the agent was the plugin's only named agent and was used by exactly two skills, while every other reviewer/implementer subagent in the repo dispatches general-purpose with a prompt template alongside its skill. The agent's persona and checklist have been merged into skills/requesting-code-review/code-reviewer.md as a self-contained Task-dispatch template. Anyone dispatching Task (superpowers:code-reviewer) should switch to Task (general-purpose) with the prompt template instead. (PR #1299)
      • Integration sections removed from skills — these were a legacy of the time before agents had native skills systems and didn't help with steering.

      Worktree Skills Rewrite

      using-git-worktrees and finishing-a-development-branch now detect when the agent is already running inside an isolated worktree and prefer the harness's native worktree controls before falling back to git worktree. Behavior was TDD-validated and cross-platform-checked across five harnesses. (PRI-974, PR #1121)

      • Environment detection — both skills check GIT_DIR != GIT_COMMON before doing anything; if already in a linked worktree, creation is skipped entirely. A submodule guard prevents false detection.
      • Consent before creating worktreesusing-git-worktrees no longer creates worktrees implicitly; the skill asks the user first. Fixes #991 (subagent-driven-development was auto-creating worktrees without consent).
      • Native tool preference (Step 1a) — when the harness exposes its own worktree tool (e.g. Codex), the skill defers to it. The user's stated preference is respected when expressed.
      • Provenance-based cleanupfinishing-a-development-branch only cleans up worktrees inside .worktrees/ (created by superpowers); anything outside is left alone. Fixes #940 (Option 2 was incorrectly cleaning up worktrees), #999 (merge-then-remove ordering), and #238 (cd to repo root before git worktree remove).
      • Detached HEAD handling — the finishing menu collapses to two options when there is no branch to merge from.
      • Hardcoded/Users/jesse paths in skill examples replaced with generic placeholders. (#858, PR #1122)

      Contributor Guidelines for AI Agents

      Two new sections at the top of CLAUDE.md (symlinked to AGENTS.md) speak directly to AI agents. An audit of the last 100 closed PRs against this repo showed a 94% rejection rate driven by AI-generated slop: agents that didn't read the PR template, opened duplicates, fabricated problem descriptions, or pushed fork- or domain-specific changes upstream.

      • Pre-submission checklist — read the PR template, search for existing PRs, verify a real problem exists, confirm the change belongs in core, and show the human partner the complete diff before submitting.
      • What we will not accept — third-party dependencies, "compliance" rewrites of skill content, project-specific configuration, bulk PRs, speculative fixes, domain-specific skills, fork-specific changes, fabricated content, and bundled unrelated changes.
      • New harness PRs require a session transcript — most past new-harness integrations copied skill files or wrapped with npx skills instead of loading the using-superpowers bootstrap at session start. The acceptance test ("Let's make a react todo list" must auto-trigger brainstorming in a clean session) and a complete transcript are now required.

      Codex Plugin Mirror Tooling

      New sync-to-codex-plugin script mirrors superpowers into the OpenAI Codex plugin marketplace as prime-radiant-inc/openai-codex-plugins. Path/user- agnostic so any team member can run it. (PR #1165)

      • Clones the fork fresh into a temp directory per run, regenerates overlays inline, and opens a PR; auto-detects upstream from the script's own location and preflights rsync/git/gh auth/python3.
      • --bootstrap flag for first-time setup; EXCLUDES patterns anchored to source root; assets/ excluded.
      • Mirrors CODE_OF_CONDUCT.md; drops the agents/openai.yaml overlay.
      • Seeds interface.defaultPrompt in the mirrored plugin.json. (PR #1180 by @arittr)
      • Codex plugin files are committed to the source repo so the sync script uses canonical versions; Codex marketplace metadata is preserved.

      OpenCode

      • Bootstrap content cached at module levelgetBootstrapContent() was calling fs.existsSync + fs.readFileSync + frontmatter regex on every agent step (the experimental.chat.messages.transform hook fires on every step in OpenCode's agent loop). Now read once, cached for the session lifetime, with a null sentinel for the missing-file case. 15 regression tests cover cache behavior, fs call counts, the injection guard, the missing-file sentinel, and cache reset. (Fixes #1202)
      • Integration tests modernized.
      • Install caveats clarified in the README.

      Code Review Consolidation

      requesting-code-review is now self-contained: the persona, checklist, and dispatch template live in skills/requesting-code-review/code-reviewer.md and the skill dispatches Task (general-purpose) directly. (PR #1299)

      • Single source of truth — the persona/checklist that previously lived in both agents/code-reviewer.md and the skill's placeholder template (and drifted independently) is now one file.
      • subagent-driven-development follows suit — its code-quality-reviewer-prompt.md now dispatches Task (general-purpose) instead of the named agent.
      • Behavioral test addedtests/claude-code/test-requesting-code-review.sh plants real bugs (SQL injection, plaintext password handling, credential logging) into a tiny project and asserts the dispatched reviewer flags every planted issue at Critical/Important severity and refuses to approve the diff.
      • Codex and Copilot workaround docs trimmed — the "Named agent dispatch" sections in references/codex-tools.md and references/copilot-tools.md documented how to flatten a named agent into a generic dispatch. With no named agents shipping, the workaround is unnecessary; both sections were dropped.

      Subagent-Driven Development

      • No more pause every 3 tasks — the "review after each batch (3 tasks)" cadence in requesting-code-review (originally for executing-plans) was leaking into subagent-driven-development. Replaced with "each task or at natural checkpoints" plus an explicit continuous-execution directive.
      • SDD integration test now runs its assertions — three independent bugs caused the test to silently bail before printing any verification results: an unresolved .. segment in the working-dir path, a set -euo pipefail interaction with find | sort | head -1 (SIGPIPE on the producer killed the script), and a missing --plugin-dir on the claude -p invocation that caused the test to load the installed plugin instead of the working tree. All three fixed; six verification tests now actually run against a real end-to-end SDD run.

      Cursor

      • Windows SessionStart hook routed through run-hook.cmd instead of invoking the extensionless session-start script directly. Fixes Windows opening the file in an editor instead of running it. Also removed an accidental UTF-8 BOM from hooks-cursor.json.

      Gemini CLI

      • Subagent dispatch mapping — Gemini's Task dispatch now maps to @agent-name / @generalist, with parallel subagent dispatch documented for independent tasks.

      Skills

      • Terminology cleanups across skill content.

      Documentation & Install

      • Factory Droid installation instructions added to README.
      • Quickstart install links in README. (PR #1293 by @arittr)
      • Codex plugin install guidance updated. (PR #1288 by @arittr)
      • Codexwait mapping corrected to wait_agent in the tools reference.
      • Install order reorganized ; Codex install instructions cleaned up.
      • Removed vestigialCHANGELOG.md in favor of RELEASE-NOTES.md as the single source. (PR #1163 by @shaanmajid)
      • Discord invite link fixed; release announcements link and a detailed Discord description added to the Community section.

      Community

      • @shaanmajid — vestigial CHANGELOG.md removal (PR #1163)
      • @arittr — README quickstart install links (#1293), Codex plugin install guidance (#1288), sync-to-codex-plugin interface.defaultPrompt seed (#1180)
    5. 🔗 r/wiesbaden Ein Wiesbadener baute die erste Guillotine rss
    6. 🔗 r/Yorkshire Spotted in Guernica, Spain rss

      Spotted in Guernica, Spain | submitted by /u/hillboy286
      [link] [comments]
      ---|---

    7. 🔗 r/Leeds Cars constantly parked in cycle lanes / Cycle Superhighway – anything actually being done? rss

      Just wanted to see if anyone else has had this issue or knows what can actually be done about it.

      I’ve started using the cycle lanes and Cycle Superhighway a lot more recently and honestly really like them – I’ve ended up replacing most of my car journeys around Leeds with cycling.

      The problem is there are constantly cars parked in the cycle lanes, especially along the superhighway, which kind of defeats the point and often forces you out into traffic or onto the pavement.

      I’ve already emailed the council and CityConnect about it a few times but never seem to get a response.

      Is there a better way to report this? Or anyone specific that actually deals with enforcement? Just feels a bit pointless having the infrastructure if it’s not kept clear.

      submitted by /u/_testingdude
      [link] [comments]

    8. 🔗 r/reverseengineering Reverse-engineering Final Fantasy X (PS3) trophy system with Ghidra rss
    9. 🔗 r/Yorkshire Yorkshire, Yorkshire! Spotted in Downtown Toronto rss

      Yorkshire, Yorkshire! Spotted in Downtown Toronto | submitted by /u/Del_213
      [link] [comments]
      ---|---

    10. 🔗 r/york Pointless Anti terrorism barriers being pointless rss

      Pointless Anti terrorism barriers being pointless | Now I don't mind there being barriers into the city. I really don't. But what I do mind is that they seem to be open at 5pm on a Saturday - when the city is still rammed with people, and you've got taxis, flying down Parliament street. Which is full of kids on bikes and tourists. Coney Street is packed, and cars are coming down every 30 seconds. What the hell was the point? They are literally open at the worst possible time. submitted by /u/FoxyStoat444
      [link] [comments]
      ---|---

    11. 🔗 r/LocalLLaMA White House Considers Vetting A.I. Models Before They Are Released rss
    12. 🔗 sacha chua :: living an awesome life Emacs Chat 21: Amin Bandali rss

      I chatted with Amin Bandali about Emacs and life.

      View it via the Internet Archive, watch/comment on YouTube, read the transcript online, download the transcript, or e-mail me your thoughts!

      Links:

      Chapters

      • 0:11 Introduction: Amin Bandali, software developer and free software activist
      • 1:06 Aspects of life: notetaking, editing, multiple
      • 3:03 Configuration: keeping things simple
      • 5:03 user-lisp-directory, site-lisp if you're using an older Emacs
      • 6:35 Organizing configuration into modules
      • 7:49 early-init
      • 9:09 ring-bell-function
      • 9:41 performance optimizations
      • 10:27 user-lisp
      • 11:16 ignoring byte compilation warnings
      • 11:58 init-file-debug = –debug-init
      • 12:56 Core
      • 13:57 no longer using bandali-configure; scoping errors, timing execution
      • 17:06 Why not use use-package
      • 18:39 Defining multiple keybindings
      • 19:48 doric-oak uses emphasis instead of colours
      • 20:52 global font scaling instead of the local ones
      • 21:39 display-fill-column-indicator
      • 22:57 emacsclient for EDITOR and VISUAL
      • 23:38 fundamental-mode-hook
      • 24:25 indicate-buffer-boundaries
      • 26:38 enabling and disabling commands
      • 27:42 package-review-policy
      • 28:58 getting the Info files from the Emacs source directory
      • 29:46 recentf, adding directories
      • 31:41 Scrolling
      • 32:36 auto revert
      • 33:16 Repeat mode
      • 34:53 EXWM
      • 38:05 Audio setup
      • 39:15 keymaps for launching different applications
      • 39:55 bandali-call-interactively-insert
      • 42:29 workspaces
      • 43:50 ZSA Voyager split keyboard, super x as a single key
      • 46:28 Keybindings
      • 48:08 Media buttons
      • 49:45 exwm-input-simulation-keys!
      • 51:43 exwm: managing floating windows
      • 53:13 exwm: application-specific local simulation keys
      • 54:09 binding C-q to exwm-input-send-next-key
      • 54:31 Renaming buffers
      • 55:38 dunst for notifications
      • 56:55 exwm xsettings and responding to screen configuration changes
      • 59:03 Slowly getting back into Org mode
      • 1:00:01 chat notes
      • 1:00:54 Mode line
      • 1:01:50 display-buffer-alist
      • 1:02:24 TRAMP slowness, maybe disabling VC detection?
      • 1:03:42 eat
      • 1:05:09 TRAMP completion
      • 1:06:55 ffs: form feed slides, ^L
      • 1:09:36 Speaker notes

      Transcript

      Transcript

      0:00 Introduction: Amin Bandali, software developer and free software activist

      Sacha: Let me do the thing. Go live. Let's check in. Alright, hello. This is Emacs Chat 21 coming back after a decade of not doing it, so... And today I've got Amin Bandali who's a... Is it seven years now that we've been doing EmacsConf together?

      Amin: I think so. Since fall 2019. Yeah.

      Sacha: Yeah, yeah, yeah, yeah. But of course you also do a whole lot of other things. I was looking through your Emacs configuration and there's like translation and other stuff in there. So would you like to start off with a brief introduction of who you are and how and why you use Emacs?

      Amin: Yeah, sure. Yeah, first of all, hello, everyone. Sorry if I'm looking to the side. This is a new setup. My laptop, which has my webcam, is there, but my main display is here. So I might be looking to the side from time to time. But yeah, that aside, hello.

      1:05 Aspects of life: notetaking, editing, multiple

      Amin: Yeah, I'm Amin Bandali. I've been, I think, using Emacs since 2014 or 15, so I guess more than a decade now. I'm a software engineer by day, or software developer, slash programmer, slash computing scientist. I'm also a free software activist. I volunteer on a lot of free software projects as well, which Sacha mentioned. I do things around GNU. I volunteer with FSF. I'm a Debian developer, so I try to maintain some packages in Debian. I try to help run EmacsConf from time to time. Hopefully this year I will be much more present. But yeah, that's that. So I first got into using Emacs, I guess, as a programmer tool, like as a text editor. But I've since then kind of integrated it into a lot of other aspects of my life. And I do much more with it, as I'm sure a lot of us do. Yeah, so I use it for kind of note-taking, just any writing, editing purposes. in multiple natural and programming languages. Reading and sending email for chatting via IRC. All of that good stuff.

      Sacha: This is the sort of thing that isn't immediately obvious from your configuration. I know you've got your Gnus setup in there and you've got your ERC setup in there, but sometimes when newcomers are trying to figure out, okay, there are all these packages, but how do I use them to get stuff done? That's one of the reasons why we want to do this Emacs chat, so that maybe you can show us some of the cool stuff. We are live, but if you accidentally show something personal, let me know and I can kill the stream within 10 seconds and I think then we can be like, okay, we'll just flush that out and then come back once we've hidden the top secret plans for taking over the world, that sort of thing. Sounds good. Where do we want to start?

      3:00 Configuration: keeping things simple

      Amin: I'm happy to do it however you like. I can either share my screen, pull up my configuration. Yeah, okay, so let's do that.

      Sacha: Yeah. If you share your screen sometimes, I think what we did ages ago was we just started walking through the configuration and then sometimes people say, oh yeah, that's really interesting. Let's go and demonstrate that so that people can get a sense of how this actually works. And there were some things in your configuration that I had no idea, like what is FFS? There's like no package. I couldn't find any information about it. But yeah, so your config, if you want to go ahead and share your screen while I Fill the air with hand-waving. Admin's config tends to be more on the minimalist side. I think you mostly rely on built-in things with a couple of external packages. You don't even use use-package at all. It's all run-at-idle-time to delay the startup of various things, and then it's all vanilla Emacs as you can get for loading and configuring things.

      Amin: Yeah, pretty much, yeah. Yeah, so before I continue, quick note, Sacha, if you can make me presenter because I don't have access to share my screen.

      Sacha: Oh, that would be important, yes. Hang on a second. Let me see. Okay, here we go. Make presenter. I might as well promote you to moderator while we're at it. There you go. You should now have magic powers.

      Amin: Thanks. Let's see.

      Sacha: It's a good thing we're practicing this before EmacsConf so I remember how all this stuff works.

      Amin: Yep, for sure. Okay, let's see. I think I got it now. Can you see my screen?

      Sacha: Yes, I can see your screen.

      Amin: Okay, excellent. Let's see. Okay.

      4:58 user-lisp-directory, site-lisp if you're using an older Emacs

      Amin: Yeah, so as Sacha mentioned at the moment, my config is kind of very minimalist and kind of conservative by design, in part because I tend to work on a lot of different machines, whether it's for work or volunteering or whatever, and I prefer to use Emacs if I can. So I want my config to be fairly self-contained so I can easily either git clone or rsync it over. Yeah. To keep it simple, I was using package.el for a while for installing and managing my packages, which I don't keep in my configs repository. But then I decided to switch over to very manual package management with the awesome new feature user-lisp-directory of the next upcoming Emacs release, which basically you can give it a subdirectory in your .emacs.d or .config/emacs. And then it'll go through all the Emacs Lisp files recursively, byte compile them, native compile them, all that good stuff, and add them to the load path. And for people who are using existing or older releases of Emacs, there's also site-lisp by Philip Kaludercic, which is kind of the... I guess first implementation of what later became user-lisp and built into Emacs. So you can make it conditional and fall back to site-lisp if you want to be able to use user-lisp on older Emacs but still have your configuration be usable. Yeah, anyway.

      6:32 Organizing configuration into modules

      Amin: So I've experimented with like a couple different ways of managing my configurations like single giant init file of like four or five thousand lines which I know is actually not very large by comparison to I think like someone like Sacha's configuration and also like You know, split into multiple different files, which has its own benefits. And I've kind of actually converged to the approach that Prot uses. If you actually take a look at my configuration file, you see I've drawn a lot of inspiration from Prot switches. Having a literate single file configuration, which then all of the Emacs LISPs source blocks get tangled to individual files. So I can maintain a single source of truth and edit it all in one place, but then also easily be able to share individual pieces to people if they want. So yeah, that's kind of the general approach. And I can dive right in.

      Sacha: Yeah, that's definitely the structure that I've also stolen from Prot. And I like the way that you're Your heading names are all long and descriptive, and you've got everything broken down in detail. So yeah, go ahead and walk us through it, please.

      Amin: Yeah, sure. Let's see.

      7:45 early-init

      image from video 00:08:00.067Amin: So that's a brief introduction, and then I have an early init section for doing the early init file. There's a couple of subheadings here. Actually, let me enlarge the font size a little bit to make it more legible. OK, great. I do a couple of things here like disabling package at startup because I don't use package as I mentioned. I manually install and update my packages as git submodules in my configurations repository.

      image from video 00:08:15.567Amin: I set load-prefer-newer to t to make sure that I never load any stale code. For example, I might edit some Emacs Lisp file by hand and forget to byte compile or native compile it. And this tells Emacs to basically just use the version of these three variants that's the most recent. Yeah. Nothing super fancy here.

      image from video 00:08:35.700Amin: I turn off a couple of things that I find a little bit distracting, like the menu bar or toolbar. Although I do say here that for people who are new to Emacs, they're actually super helpful. Sure, it's a little bit of visual clutter, but in the beginning, it's really, really helpful to help you orient yourself of what mode you're in, what tools do you have available in your disposal. And even someone who's been using Emacs for more than 10 years, I also use it sometimes when I'm like... just starting to use a new mode. So yeah, good stuff.

      9:06 ring-bell-function

      Sacha: I was very amused by the comment on the... "I don't like getting jumpscared out of my chair." You turned off the bell.

      Amin: Yeah, because that actually used to happen when I first started using Emacs. Like when I would, I don't know, I don't even remember when it bells or rings, but Maybe if you like quit like with C-g or like try to backspace into like delete where there's no more characters to delete so it rings a bell and it's very like can be jarring so yeah I turn that off.

      9:40 performance optimizations

      image from video 00:09:56.367Sacha: Yeah, and then you've got a whole bunch of things where you set some variables to nil temporarily to make it faster, so that's in your startup in garbage collection.

      Amin: Exactly. Empirically, there is no hard and fast science behind this. I experimented over the years. I'm pretty sure I believe the default, for example, the garbage collection con threshold is about eight megabytes. I tried increasing that a little bit to see how much If I increase it to what point will it make my startup faster? And I found this 30 megabytes or mibibytes to be kind of a sweet spot. So I bumped that up. And then after Emacs has finished initializing, in the after-init-hook, I just restored the defaults.

      10:25 user-lisp

      image from video 00:10:51.900Amin: And then, yeah, this is the bit with the user-lisp-directory that I was talking about. Awesome stuff. So you can basically designate a directory. For example, in my configuration, it's just a lisp directory. And then on startup, Emacs will go through and byte compile, native-compile if necessary, and then add all of that stuff to the load path automatically. So you get that. Yeah, and then this is the bit about site-lisp that I was talking about. So if you want to use user-lisp, but you're still using older Emacs versions that you maintain, you need to maintain backward compiling in your config. This is how you do it, for example. So you just yeah, add it to load-path, require it and then call prepare-user-lisp. That's about it.

      11:14 ignoring byte compilation warnings

      Sacha: I'm picking up that tip about using the ignore directories. I'm getting by with just ignoring all of the byte compilation output, but it would be nice to just say, you know, that stuff is test. I don't need to worry about it.

      Amin: Right, right. Thanks. Yeah, I was also doing that. I actually have it as a comment to suppress warning types, like by compilation, but I was... I plan on working on some packages, whether my own or others, and it would still be helpful to get those warnings, so I keep them enabled. It's still a bit annoying. I still get some of them when I launch emacs but I don't restart or launch emacs as frequently so it's pretty bearable.

      11:55 init-file-debug = --debug-init

      image from video 00:12:00.400Amin: Yeah, and then I have the main init file. And there's not much in it. It's just the debug-on-error and debug-on-quit. So the debug-on-error thing, I set it to the value of init-file-debug. And if you look at that, the help for this variable, basically if you pass or launch Emacs with --debug-init, this variable will be true. So yeah.

      Sacha: I did not know that. Cool.

      Amin: Yeah, it's pretty helpful. I think, if I'm not mistaken, I took this from John Wiegley's .emacs, but I can't remember for sure. It's been years. Yeah, it's pretty nice. And then here, I just set my name and email address. And very early I set a custom file to keep all of that stuff separate from my .emacs. I don't want it mixing in.

      12:53 Core

      image from video 00:13:03.467Amin: And then pretty much the only other thing that's in my main init file is just to require and load these different modules or packages of my configuration. I have these as actual packages or as actual features. They provide themselves. And that's just something that I've found straightforward enough to do. I know, for example, Prot uses a dual approach. He has some of his configuration that's more readily usable, available as actual packages. And then the other ones, it's just Emacs Lisp code. It's not actual packages. But for me, I just keep it simple. Everything has packages and that's about that.

      Sacha: Fantastic. Let's dive into some of those configuration modules.

      Amin: Sure, let's see. Yeah, so this there's this like core thing which is kind of included gets included in all of my other files.

      13:53 no longer using bandali-configure; scoping errors, timing execution

      image from video 00:14:27.533Amin: I wrote a bandali-configure macro shamelessly based on prot-emacs-configure which is what Prot uses and it basically is a way of kind of similar to use package for like wrapping a bunch of relevant like Emacs Lisp code all together. It has the benefit, if you use it, if there is an error in that block or in the body basically, then it won't crash everything. That body will just get ignored and we display an error. And that's also the main reason that Prot uses it. The one thing that I added extra to mine, which I took with inspiration from Echelle Yaron's ESY slash init step, is to wrap it up in basically time the execution of each of these blocks, which can be pretty helpful to help you see, okay, which part of my configuration is particularly slow. Usage examples. I just have it here. You can either basically pass it like a symbol like thing or you can also pass in a string as the first argument. And this is what will be displayed when you display a list of the evaluation times for all of these blocks in your configuration.

      image from video 00:15:22.133Amin: Yeah, and then I have a neat little function here like configure-report-times that will report these times, whether in the order that it's encountered them, or you can have it sort by fastest to slowest, slowest to fastest, blah blah blah.

      Sacha: You mentioned you're no longer using this. Is it because you wanted it to be easier to copy and paste your code? What got you to shift back to the regular vanilla type of configuration?

      Amin: Right, as neat as it is, I didn't find it super useful. For one thing, because I don't add or remove a ton of stuff to my Emacs configuration regularly, so if there is an error, it wouldn't cause an issue for the rest of my configuration. I didn't really find that very useful. And then my other potential concern is that the way I was structuring things, I would put all of the configuration, let's say for GNU, in one of these blocks. But I wanted to be able to break that down into, for example, Org Mode sections more easily. So far, I just decided to not use it. I know I could technically break those down into smaller blocks, but I haven't done that yet.

      Sacha: Ihor says, this configure macro looks a lot like good old use package, which you're not even using in the rest of your config. And I hear you about wanting to be able to split things into smaller blocks with more explanations in between them. So in my config, yeah, sure, I've got the use-package there to do the ensure and all that stuff. But I also have with-eval-after-load because I still want, you know, the links and the screenshots in between.

      17:02 Why not use use-package

      Amin: Right. Yeah, exactly. use-package is awesome. I have used that in the past, especially when I was using the straight.el package manager. It pairs nicely with it. But yeah, since then, I found it a little bit like too magical for my tastes, kind of along the lines of declaring an init file bankruptcy at some point I really wanted to understand every single line that I have in my Emacs configuration. And at the time, I didn't know a whole lot about macros or wasn't very well-versed with them. So I just ditched it in favor of simply using, as you mentioned, with-eval-after-load. And then that causes all that code to be basically delayed, not evaluated immediately, but when that package is loaded. And then as to when to pull that package in, depending on if I want it right from the get-go of my Emacs starts, then I would require it. Otherwise, I add this, as you also mentioned earlier, this kind of timer thing where if Emacs is idle for, I don't know, 0.2 seconds or 0.4 seconds, then go ahead and require this package.

      Sacha: Ihor has a tip in the chat. Of course, Ihor has an Org way to do this. He uses use-package whatever config and then he has a noweb reference to the Babel blocks. Then he just says :tangle no on the source blocks so that they don't actually get repeated. Anyway, you can look at it later when you go through. I'll send you the comments or whatever. But show us how you're actually configuring things since you're not using this.

      18:37 Defining multiple keybindings

      image from video 00:18:55.133Amin: Then I just have another quick macro thingy here, bandali-define-keys, which wraps around Emacs's define-key. It affords me the convenience of defining multiple key bindings, and Prot's version of this (I think it's prot-emacs-keybind, or something like that) he imposes the limitation that the keys should be valid strings that can be passed to the =kbd= function, which is very fair and valid, but I wanted to not impose that, to keep the flexibility of using define-key directly. The consequences of that, as we can see, is we can pass in the old representation of key bindings, like the vector or whatever syntax, which Prot's doesn't support by choice, whereas mine does. Let's see. For example, let's look at the Bandali theme, which is all about... The appearance, I guess, of Emacs.

      19:45 doric-oak uses emphasis instead of colours

      image from video 00:19:45.900Amin: Yeah, so I just have a conditional block where, you know, if you're in a graphical environment, I'll just go ahead and load Prot's Doric themes, specifically Doric Oak, which is what we're seeing right now. I'm using, it's very beautiful, it's very subtle, and it uses emphasis, bolding and stuff to draw your eye to something instead of using a million different colors, which I find pretty nice. Yeah, and then for example here I set up some fonts. I use this Sahel font for Persian and Arabic text. I set a color emoji font here and this is like we get a kind of preview of what I do. It's like with-eval-after-load faces and then blah blah blah.

      Sacha: Ihor would like to point out that with-eval-after-load is also a macro that calls another macro. So I'm just going to mention it because it's there. These are your fonts. This is your theme. This is great because everyone always asks, what theme is this? What font is this? All right.

      20:49 global font scaling instead of the local ones

      image from video 00:20:59.967Sacha: I like your text scaling tweaks that you're just about to go into. You've changed the global mappings.

      Amin: Yeah, yeah, yeah. And I actually took this from Prot as well. And it makes a lot more sense. So by default, this, C-x C-+, -, blah, blah, blah, it only scales the text for the current buffer only. But in newer version of Emacs, in Emacs 29, they also added commands to adjust this globally, including the mode line and all that stuff, which is usually what I want, for example, in this presentation or when I'm sharing my screen right now. It scales everything up globally. So yeah, I just swapped these to be the default, and then I add keybinds for the just local variants in case I need to use that. Yep.

      21:37 display-fill-column-indicator

      Amin: And then here I have display-fill-column-indicator. I don't know, maybe this is just me, but sometimes I'm kind of OCD about keeping my text lined up at exactly, for example, the 70 characters column. I care a lot about that, especially if I'm writing code or text that I want to also visually look nice. And I enable this. And let's see, I enable it for prog-mode. So yeah, I guess if I, for example, do this... This little thin line that we see here, that's the display filler column indicator. I used to have it globally enabled, but then I found that a bit too much, so I just enable it with a hook in the modes that I want.

      Sacha: Yeah, and the theme makes it very subtle. It's just there as a reminder, don't go beyond this line. You can if you really want to, but just try not to.

      Amin: Yeah, exactly. And then my essentials... This is where I configure a lot of key behaviors of Emacs, all built-in stuff for the most part, or things that are key to my workflows. For example, I always want to start with a scratch buffer.

      22:53 emacsclient for EDITOR and VISUAL

      image from video 00:22:53.767Amin: Start the Emacs server if it's not running. And this is very useful, very helpful so that then you can call into an existing Emacs process with Emacs client and have it edit a file. I don't use it for anything fancy just yet. I believe Prot also mentioned in his video with you, Sacha, that he uses it for things like org-capture to spawn a new buffer in his existing Emacs session and things like that. You can do pretty cool things with it. But yeah, I just use it for being able to easily use my Emacs as editor and visual text editors. So yeah, this sets that up.

      23:37 fundamental-mode-hook

      image from video 00:23:42.200Amin: Adding a fundamental mode hook. Again, I took this from Prot.

      Sacha: I was surprised by that because I was like, oh, there isn't a fundamental-mode-hook? Okay, that makes sense now.

      Amin: Right, right. Yeah, there isn't a fundamental-mode-hook by design. But I still, in the past, have found that I wanted that. For example, for this display-fill-column-indicator, when I had it enabled everywhere, I was like, it would be nice if I could at least disable it for fundamental mode. And at the time, I didn't have this. I added this just recently. So if I decide to go back to using something globally, but I don't want it in fundamental-mode, then I can disable it using this. Yeah, and then some standard stuff like I prefer spaces and a tab with four characters.

      24:23 indicate-buffer-boundaries

      image from video 00:22:02.433Amin: Visually indicate buffer boundaries. This is a little bit hard to see right now, but here at the bottom left

      image from video 00:22:02.433Amin: you see a little down arrow

      image from video 00:24:33.800Amin: and then the little top arrow. And... Let's see if I can.

      Sacha: Oh!

      image from video 00:24:43.167Amin: And also here, for example, when it all fits in the view.

      Sacha: Huh, that is cool. I was looking at that. What does it do? And so that tells you, you can still scroll up or you can still scroll down, and you don't have to look at the scroll bar to see where you are. It just says there's more there.

      Amin: Yeah, exactly. Yeah. And it also helps distinguish when there's a newline character at the end of the file or not. So here in this buffer, there is.

      image from video 00:25:10.533Amin: But if I delete that, you see this indicator here changed shape. But if I go back and add the new line again. So yeah, that's also been very helpful for me because I added configuration files and some of these pieces of software are sensitive to having a new line at the end of the file. So yeah, it's very helpful and useful for that.

      Sacha: I would not have guessed that from the very short line in your config that turns that on. It's one line, setq-default indicate-buffer-boundaries 'left, and yet it adds this nice little nuance to the way that fringe looks.

      Amin: Right. Yeah, absolutely. Perhaps I should expand more on it at some point later to explain these things. But yeah, just this one line.

      Sacha: May I recommend screenshots?

      Amin: Yes, you may, for sure. Yeah, I will definitely do that as well, because I'm also a bit of a visual person. I like seeing screenshots and videos, so yeah I'll take that to heart and do that for my own configuration as well.

      Sacha: When I post this, I'll probably... I figured out how to have the transcripts and then screenshots embedded into my transcript. I'll generate it automatically from the subtitle file. Our EmacsConf transcripts are going to get so fancy next year. But you can pull those screenshots and drop them into your config. It'll be great.

      Amin: Nice. Yeah, for sure. Sounds good.

      26:36 enabling and disabling commands

      image from video 00:26:36.433Amin: And then here, I just enabled some of these commands that are disabled by default. So yeah, it's useful, especially narrow-to-page, for example, or narrow-to-region. These are commands where Emacs disables them by default so that newcomers don't accidentally hit them and get very confused by what just happened. It doesn't disable them for good. It just basically prompts you for confirmation. Are you sure you want to run this command? I'm sure, at least about these commands. So I just enabled them. And then something like, for example, overwrite-mode, which I never use and I don't want to accidentally enable. I just put it disabled so that if I do accidentally hit the keys, which might be, I don't know, something insert or whatever, then it will prompt me to make sure that I meant to do that.

      Sacha: That reminds me, I should probably turn that off for myself and then you get a whole new keyboard shortcut you can use too.

      Amin: Right, yeah. Let's see.

      27:37 package-review-policy

      image from video 00:27:37.900Amin: Yeah, I have just one line setting for package.el. In Emacs 31, we will be getting a package review policy which is very helpful. So if you do use package.el for installing packages from GNU ELPA, NonGNU ELPA, MELPA or whatever else, you can enable this, and then whenever you update your packages, you'll get a diff of what changed in this new revision of the package that you're downloading and you're about to enable. And you can presumably say yes or at least see what's going on, which I find helpful.

      Sacha: But you're not using packages, you mentioned, so you're just checking everything out and then you're just git pulling whenever you feel like it.

      Amin: Yeah, so right now I'm using git pulls and git submodules, very manual. I put this here because I think it's generally a very welcome change and awesome new feature that I want to spread the word about. So maybe someone who's looking at my config, they use package and that's perfectly fine. So this is just here to spread the word about it mainly, I guess. And if I start using package at some point myself in the future, then I will have this enabled. Let's see.

      28:52 getting the Info files from the Emacs source directory

      image from video 00:28:52.800Amin: Very quickly, here I extend Info-directory-list. I like to, at least on some of my machines, use Emacs that I built from source directly in the source repository of Emacs. Just after doing make, I don't run make install, even though it's very easy to do that. You can install to a custom location by providing dash dash prefix when you're configuring Emacs. Sometimes I just find it more convenient for me to not do that and just run make and then exit and reopen Emacs. And for that kind of a setup, I just extend the info directory list to include the info subdirectory of the Emacs source repository so that the built-in Emacs info manuals will be available to me.

      29:45 recentf, adding directories

      image from video 00:29:46.600Amin: And then I use recentf for tracking recent revisited files. I bind it to C-c f r e for me to get a pop-up completion for visiting a recent file, it has completion. So if I hit TAB here, for example, we can see some of these files or directories that I visited recently.

      Sacha: I see. And then you're adding the directory to it. So what does that let you do? Because I'm assuming you're already in there in the directory. But how does that change your recentf?

      Amin: Right. So I need to think to remember this, but I think the point of this was that if I open a project in VC or in Dired, then I would like that directory to also get added to my recentf files list, because I think by default, recentf only includes files, not directories.

      Sacha: You're in it, you start up Magit or whatever, and then you move on to something else, but you want to be able to easily go back to it.

      Amin: Yeah, for example, I like to keep my recently visited directories in recentf as well. Because that's one of the main ways I jump between projects and stuff, even though there is literally a built-in Emacs project mode, which I still use. The only thing that I have here is... I don't want to add my home directory to the recently visited list, so the only thing that this function does is to skip that if I'm opening the home directory. That's about it.

      31:38 Scrolling

      image from video 00:32:10.933Amin: And then here I configure mouse and scrolling behavior. So I want Emacs to scroll very gently, one line at a time. I think the default is that when you reach the end of the page, it'll jump half a page down and then recenter. I don't remember default behavior because I don't use it very much, but yeah, this basically makes it very predictable. For example, when I reach the edge of the page here and I press C-n, it'll only scroll one line at a time, instead of jumping and then doing something like this.

      Sacha: Oh yeah, mine does! Mine doesn't do that, so it does that jumping thing. I see what you mean here. Interesting.

      Amin: Yeah, so you can tweak that with scroll conservatively and then scroll preserve screen position, I believe.

      32:28 auto revert

      image from video 00:32:37.733Amin: Yeah, and then I use autorevert, which is pretty helpful. So this will have Emacs watch, for example, files that are open in your buffers. And if they change on disk, Emacs will automatically refresh the buffer so that you get the latest version. The cool thing is you can press undo in one of these files that's been autoreverted so that you get the revision that was there right before the change. So I've used that sometimes as well.

      Sacha: Yeah, and sometimes autofollow also is nice for log files and things like that. But yeah, autoreverting is great.

      Amin: Yeah, for sure.

      33:14 Repeat mode

      image from video 00:33:14.067Amin: Repeat mode is something that I've only recently started using, especially with my Emacs EXWM setup, using Emacs as my window manager. For example, if I hit C-x o, we see here in the echo area where it says repeat with o or capital O. So I can now only press o instead of saying C-x o, C-x o to do that multiple times. Keymaps that have support for this basically indicate that they want to be repeatable can declare that. And then once you invoke one of the keys in those keymaps, then you can repeat it with just that single character. And for example, for my setup, I have that with my EXWM workspace switching keys. So I can easily go to the next and previous workspaces, many of them at a time by just pressing P and N instead of doing the shortcut multiple times.

      Sacha: And actually, if you don't mind jumping ahead, the EXWM part of your config is fairly complex, and I think not a lot of people have a lot of experience seeing EXWM in action. And I don't know whether you're comfortable sharing you switching around to different workspaces, but if that is something that you can do, how are you doing all this awesomeness? I'm still too scared to use EXWM myself. Stability. But that's a me problem, not an EXWM problem.

      34:51 EXWM

      image from video 00:35:26.600Amin: Yeah, EXWM was pretty awesome. I used it back in 2018, '19 for a while, and then I kind of moved on to Sway and Wayland. But I don't know. It's something that I feel like once you try it, you want to keep going back to it. So recently, this past month or so, I decided to give it an earnest try and try to actually address any pain points that I've noticed. So it's much more usable for me now, and I'm sticking with it for now. I'm not a Wayland hater, but I'm just saying, at least for now, I'm using EXWM. And I'm happy to talk about it.

      Sacha: OK, what do you love about your setup for that one?

      Amin: EXWM?

      Sacha: Yeah, yeah. Like, you're doing a lot of rename buffers. Yeah, yeah, yeah.

      Amin: Right. Yeah, let me think. There's a couple of things. So, for the longest time, my Emacs EXWM configuration used super key as a prefix, which is the Windows [key] or the one with the logo, basically, to switch workspaces, launch applications and such. And at least the way that EXWM is right now, it doesn't... Like the way you have to add those global key bindings and kind of slows down the EXWM startup. And I had many such key bindings.

      image from video 00:36:16.467Amin: So one thing that I did kind of recently is to define a prefix map here, like bandali-prefix-exwm-map. So I bind all of the keys and commands that I want here, and then this helps me really minimize what I'm telling EXWM, which is here. For example, this is how you set global keys with EXWM, and I just point it to my prefix map. C-c x and then any of those letters and functions that we saw. That's kind of annoying. I still use the super key here, but I have it s-x and s-,. On the left-hand side of my keyboard, X is right next to super, so I can hit it in one go with one motion almost as a single key with these two fingers. On the right side of my keyboard, I don't have a super key, but I have a control key that I remapped to super. On the right side, I do s-, with these two fingers. It's still very convenient for me to invoke those commands. And pairing this up with repeat mode, as we can see just here, actually, then I can hit s-, and then P, N, or H, J, K, L many times to switch workspaces or shift focus to different windows and stuff without having to hit that kind of annoying s-x or s-, repeatedly. Yeah.

      Sacha: That sounds really cool. I should look into that. Sorry, quick aside.

      38:03 Audio setup

      Sacha: @blaiseutube would like to compliment you on your awesome audio setup. It sounds like you're in the room with him. Apparently, I sound like I'm on speakerphone, but your audio setup is top-notch, apparently. But that looks like a Blue Yeti, so I have to find out what's going on. what microphone are you using?

      Amin: It is indeed a Blue Yeti.

      Sacha: Yeah, yeah. So I just have to ask him for okay, what kind of boom mic? Anyway, we'll do that all offline because it's not Emacs related.

      Amin: Yeah, it's just the Blue Yeti. Yeah, I turned down the gain. I used to have gain higher, but then it picks up more noise from around the room or around the house. So I turned down the gain a lot and then I get close to the mic so that it only captures my voice. Okay.

      Sacha: I'm gonna need the boom. Otherwise, I'm squished into that corner. All right. So you were doing repeat-map before I said oh, let's talk about EXWM because you've got cool stuff there.

      Amin: Yeah, and I can continue talking about the EXWM. There's a lot here.

      39:10 keymaps for launching different applications

      Amin: I have, let's see, s-, SPC. I bind it to async-shell-command to use as my simple, little, dmenu-thing for launching applications.

      image from video 00:39:11.767Amin: Some of these things, like browsers, I still do them frequently enough, and I use different browser profiles. So I just define a new keymap so I can basically one-shot launch Chromium or Firefox in a specific browser or an incognito window and such. So yeah, I just do s-x b and then, for example, c to launch Chromium and all that stuff. So I found this pretty convenient.

      39:49 bandali-call-interactively-insert

      image from video 00:40:57.567Amin: Speaking of key bindings, before I get down this, let's see if I can find... C-c h. I think this is just before my EXWM setup. I'm pretty proud of this. I love this. It really goes to show how awesome Emacs is and extensible it is. Let's see. So as we know, these various help commands and describe commands are under C-h prefix. But some of them are not bound. for example, find-library or describe-face. Some of these I use pretty frequently. I was really having trouble coming up with descriptive-enough keybindings or short-enough keybindings for all of them. I put some of them here, for example, like C-c f l for find library. But I can't do that for all of them. What I did was just do C-c h a or C-c h d. What this will do is basically, if I show that, It basically opens up M-x, fills in describe-, and then I can just type, for example, face, and that's it. So it basically opens up the minibuffer for me, pre-fills it with the string that I want, and I can type what is it that I'm looking for. And I found this to be better than trying to bind a million different keyboard things for describe this and that, apropos this and that, find this and that. So yeah and the way that we do that is to just use a minibuffer-with-setup hook, and you just have a little lambda to insert the string that you give it, and then you invoke it.

      Sacha: Yeah, this is pretty cool. When I saw that in your config, I was like, I'm going to steal that. Pre-filling the minibuffer but still letting you do stuff with it, it's such a powerful thing, not just for completing the command itself, but even for when you're using the command, but you want to do something with the input before. You don't want to do it all the way, send it in and submit right away. You want to actually do something with it after you insert it. So great tip.

      Amin: Yeah. Thanks. Yeah, it's pretty useful. It's pretty nice. Yeah. And then back to the Emacs or EXWM stuff. So before I had, I used to yeah, sorry, go ahead.

      Sacha: Sorry. I forgot whether I was muted or unmuted.

      Amin: Okay, no worries.

      42:26 workspaces

      image from video 00:42:56.600Amin: For the longest time, I had 10 default EXWM workspaces on startup, and that can slow things down a little bit. So I found that okay, I don't really use all 10 workspaces always. So I set it to five. So I get five workspaces initially. But I still bind keys here. Like if we go down. Let's see. Here. So here, I define those keys for all the way from, let's say, from 0 to 9 for all 10. And then if I try to switch to a workspace that doesn't exist, then EXWM will just go ahead and create it for me. Yeah, so I found that pretty cool. You can create workspaces on the fly. Yeah.

      Sacha: Yeah, and I saw that it moves your current window there, too. So that's just like, OK. Let's move it to workspace number two or whatever. Very cool.

      Amin: Yeah, yeah, yeah. I have keys or convenience keys for moving some window to some workspace. Yeah, it's nice. Let's see. Let's see. Yeah. So these are just made key bindings. I use hjkl here for switching windows.

      43:46 ZSA Voyager split keyboard, super x as a single key

      image from video 00:45:46.167Amin: I also have a ZSA Voyager split ergonomic keyboard. I can basically customize it infinitely. For example, I don't really have a super key on the first layer. What I have is a key that will do the s-x thingy, basically my prefix. So that's the last missing piece is that if I'm at home and if I have this keyboard with me, then I just hit one key and then that's it. I'm in my prefix. But even if not, on the laptop, the s-x or the super comma are still easy enough for me to hit it with one hand.

      Sacha: Now I'm jealous and I definitely want to assign my prefixes to their own keys. Very tempting. I've started using the numpad because my laptop has one. I only use the numpad rarely, but we all need more keys.

      Amin: Yeah, ergonomic keyboards are pretty nice, especially these ones. For example, the ZSA ones where you can put QMK on it, the QMK firmware. You can define keys in a C file. I can actually show that. Let's see... QMK Firmware, Keyboards, ZSA, Voyager, Bandali, and then keymap.c.

      Sacha: Is this in your repository somewhere?

      Amin: Right. It's in a different repository, but it's still on git.kelar.org next to my configs repository. You can find this as well, but if I go smaller... Yeah, you can define keys here and have different layers, like the base layer. And then you can define a key to switch between different layers and put some of the keys there anyway. So yeah, it's a whole rabbit hole in and of itself. Prot also uses a split ergonomic keyboard. It really does help if you're typing for long periods of time. I actually had these for a while, and I wasn't using them too much, but I started slowly getting some pain in my wrists and here. So I was like, okay, I have the keyboard. Might as well put it to good use, and I've started using it.

      46:26 Keybindings

      image from video 00:46:53.767Sacha: Okay, so most of your keyboard shortcuts come off that kind of s-x or C-c something, and then you have a long prefix sequence, and you just remember everything or you use your... pre-fill some of it and then fill in the rest of the command.

      Amin: Pretty much all my window management related keys are on this s-x prefix that I'm showing here. And then I have a few other ones which I think I showed earlier. Is it this one? Anyway, I bind a few general keys outside of the s-x thing, like C-c e i. For example, I have C-c e e for eval-last-sexp. I do that a lot, so it's easy to hit that. Making frames or deleting frames

      Sacha: I love how Emacs uptime is something you use frequently enough that you have a keyboard shortcut for it.

      Amin: Yeah, of course. I mean, I'm sometimes curious to see how long has my Emacs session been running. To continue with the EXWM stuff, let's see. This is just some keybindings I define here. It's all Emacs Lisp, right? It's amazing. You can mapc over whatever sequence and create keybindings like that. Only with Emacs we can do things like that. I just love it. Let's see.

      48:05 Media buttons

      image from video 00:48:36.200Amin: I still keep these three other keys for raising and lowering the volume and toggling mute off of that prefix and just directly on my keyboard, hitting it directly in the exwm-input-global-keys because I do that very, very frequently. But I also have scripts that I can invoke. I should do keycast. So yeah, I can invoke the prefix with semicolon. I can set my volume here, adjust it here, type in what volume I want, or with the single quote, I can enter a value for the screen brightness. I like these things to be exact depending on the lighting in the room. I have preferred brightness values of 50 or 12 or 10 that I manually adjust. I guess it's a poor man's version of having something with a light sensor that can pick up and adjust automatically. I do it manually. Yeah. Sorry, you just muted yourself again.

      Sacha: You're just probably this close to writing the Emacs Lisp that takes your webcam image and then adjusts your light. But I think Prot was also saying he likes to do the lighting changes manually as well because warmer colors versus cooler colors and all of that stuff. Anyway, so you have all these buttons that EXWM listens to and it can launch various things for. That's a lot of things.

      Amin: Yeah, those are pretty cool.

      49:43 exwm-input-simulation-keys!

      image from video 00:50:08.267Amin: EXWM has this lovely feature called input simulation keys where You can basically use it to bring Emacs key bindings to other applications like Firefox or whatever. And yeah, it's mind blowing when you try it for the first time. for example, I bind C-b to just hit the left arrow on the keyboard. And it does that. So I can define all of these commands that I'm using or used to using in Emacs. So I can get them in Firefox or other applications as well. Realistically, it's mostly Firefox. It's the only other program that I spend any reasonable amount of time outside of Emacs.

      Sacha: Let me point out this very important one that you have there. Under selection, cut, copy, paste, I see a control W. Input simulation keys. So this is for all the people who have accidentally closed their browser tab while trying to copy text. This is how you solve that problem. Use EXWM and use EXWM input simulation keys and you don't have to accidentally close your browser tabs again. @blaiseutube asks, hey, what about time since last save? Or do you have some kind of autosave magic? you know, in reference to the uptime thing, right? You have this thing that shows you...

      Amin: I don't think I have anything for autosave, but I have this habit of... I save everything pretty regularly. Yeah, so I've never really needed that feature, but I'm sure Emacs has something where you can, at the very least, just very dumb, simple implementation of has it been idle for one minute, then just do a save buffer. You can roll your own. But I don't have anything.

      Sacha: All right. I'm getting really tempted now to try out EXWM, even if it's just for those global keyboard remapping things.

      51:39 exwm: managing floating windows

      image from video 00:51:43.100Sacha: How is it for windows that you've got to have floating? I feel like it's very good at handling tiling things, but how is it for sometimes the apps kind of really want the floating window?

      Amin: Right, yeah, so you can toggle any window to be floating or not, and you can also — actually, we're just looking at it here. EXWM manage configurations, to match on the instance name or the class name of a window that you can get from `xprop`, to automatically make that tiling. For example, if I do my prefix and then capital T, it launches a floating terminal for me here. And if I go back to where I set it up, I just launch Xterm with the name argument. This is where it can set the instance. And I just put any string you can want, like floating, for example. And then here in my configuration, I just check that if the instance name is floating, then I'll go ahead and float the window. Simple as that.

      Sacha: All right. This is starting to look exceedingly tempting. Lol, I save everything regularly, so he's one of those people who compulsively hit C-x C-s.

      Amin: Yeah, I do that a lot. I don't know. It's just me. But, yeah. Yeah. And then, I don't know. EXWM is awesome.

      53:11 exwm: application-specific local simulation keys

      image from video 00:53:11.000Amin: You can also put local simulation keys, application-specific simulation keys, depending on, the application, terminals, for example, or, Zathura. This is a PDF viewer. To have application-specific custom key bindings, how cool is that? For example, if I'm in Xterm or something like the Mate terminal, hitting C-c C-c twice basically, it'll just send the C-c key to the terminal. Because one thing with EXWM is that you can set it to capture a couple of Emacs prefixes, like C-x or C-c. So the application by default doesn't see it because Emacs captures it. But this is one of those mechanisms by which you can send a key through. Let's see.

      54:04 binding C-q to exwm-input-send-next-key

      Amin: The other thing is, you can set it like EXWM inputs send next key. So the default is C-c C-q, but I just bind it to C-q, and I, for example, can do C-q C-t to send C-t to the underlying application. So that's the other thing. Yeah, and then let's see.

      54:28 Renaming buffers

      image from video 00:55:05.333Amin: So this thingy here, I enable EXWM and I add this rename hook and all it does is basically to add the window titles to the buffer that I can see on the mode line. But as long as it's within a certain reasonable length, like for example, I have 25 characters. If it's longer than that, it will just put dot dot dot. So yeah, that's all the purpose of that. Let's see, for example, if I launch Xterm, it appears there. The perfect example is actually here on the right-hand side. On the mode line, we see Firefox, ESR, Emacs, Comp Chat. It's a bit long, so it just puts the dot dot dot there. So that's all that does.

      Sacha: Yeah, now being able to use Emacs to manage the tiling of these things instead of my having to fiddle with alt-dragging things to snap nicely into buffers. Yes, very cool stuff. EXLDM. Gotta try it.

      Amin: Yeah, for sure. Yeah, let's see.

      55:36 dunst for notifications

      image from video 00:55:36.300Amin: Here I launch Dunst if the executable is installed for getting notifications in ESWM. I think there's at least one or two Emacs specific packages that implement a simple notification daemon or backend so that Emacs itself can handle that. But I found Dunst good enough for my use cases coming from I3, Sway, like tiling window manager background. I just reuse that. So yeah, I just start a process, keep a handle of it in this dunst process variable here. And this thing I discovered recently, it's cool. using set-process-query-on-exit-flag, you can basically have Emacs not ask you if you want to exit Emacs if that process is still running. It'll just kill it without confirming with you. So just a little convenience.

      Sacha: That is also cool. Just a heads up, I have about 15 minutes before the kiddo runs out because she'll be done with school then. Even just the EXWM part and other things that you've shown us in the config have been super awesome. But are there other things in the next 15 minutes that you would love to show people so that they can see how it works in practice?

      56:54 exwm xsettings and responding to screen configuration changes

      image from video 00:57:13.733Amin: One thing I'll just mention, EXWM, one more thing, and then I'll go check. I think this is kind of recent: EXWM xsettings, and this allows you to dynamically at runtime change some of these things that you would normally set in an X resources file, like fonts. These kinds of settings were especially commonplace back when Wayland wasn't a thing or wasn't very popular. You would set some of these font settings there. With EXWM xsettings, you can do this dynamically, and what's awesome about that is it also lets you hook into, for example, if your screen configuration changes, if you plug in a monitor or unplug it, then you can run whatever `xrandr` command to set it up and also adjust those settings. The main thing I use it for is to change the DPI setting. The thing with X11 or Xorg is, unfortunately, there's no per-monitor DPI. There's one global DPI. But I found that on my high-DPI laptop screen, if I set the resolution to 1920x1080 instead of the full resolution, then the default DPI of 96 works just fine with my external monitor as well. All this little hook does, by calling into this function, is: if I'm plugging in my external monitor, lower the resolution and lower the DPI, and if I unplug it, go back to the high thing. I just love this.

      Sacha: That's great. We're definitely not going to demonstrate that because plugging in and unplugging monitors is not a good thing for screen sharing, but that sounds really cool. When things change, you can actually get your system to adapt to the changes for you.

      Amin: Yeah, it's lovely. Let's see. There's so much more to talk about.

      58:59 Slowly getting back into Org mode

      Amin: I'm slowly getting back into Org Mode again. For the longest time, I didn't use it and I just used Markdown for my website as well. But I found that it's kind of limited. For example, I was using a Markdown implementation that was written in C and I can't easily customize it. Whereas with Org, I can hook into or create my custom HTML back-end that's a derivative of ox-html, even if I don't necessarily like the defaults or the settings for ox-html. I just recently started writing a new back-end called bhtml for Bandali HTML. It's just a boilerplate. I don't have much there yet, but that's the idea.

      Sacha: I love how you can hook into all of these different aspects of Emacs and get it to do exactly what you want.

      Amin: Yeah, so that's cool. Let's see.

      59:58 chat notes

      image from video 01:00:16.067Amin: I have written some things about the prompt for this meeting. Yeah, so I talked about that stuff briefly. Minibuffer setup. Things that I love about my setup is that it's kind of portable, simple. People can easily copy things from it if they want. It's kind of self-contained. And that was kind of a big thing a while back when I wanted to use my configurations on a couple of work machines. And these don't have direct outbound internet access. So I couldn't do things like installing packages with Elpa because that's done over HTTP. So yeah, I use submodules now. I recently began documenting my setup, very much inspired by Prot and Sacha and others.

      1:00:52 Mode line

      Amin: The things that I'm looking forward to tweaking next is the mode line. This is basically the default mode line of Emacs. A couple versions ago, they added a setting for compacting the mode line, which improves a lot of the extraneous whitespace in it, which is great. It's still... There's too much information. If you use multiple windows or even especially if you use EXWM all of those things like the date or like the battery get repeated in all of the windows, so I'm looking forward to doing my mode line in such a way that for example, it shows most of those things. And Prot actually has an excellent video about that where he shows how you can create your own custom mode line.

      Sacha: I've also been tempted to start using the header line too because that's another thing that you can put information in.

      Amin: Right, yep, header-line is awesome.

      1:01:49 display-buffer-alist

      Sacha: Yeah, the display-buffer-alist is particularly powerful because you're combining it with EXWM, so it'd be interesting to see how you can manage windows and applications and stuff.

      Amin: Especially, just like how we saw in today's video call and also a call that I had with Prot recently. For example, if I open a describe-variable or something, it'll by default use the right area of the screen right now where our video is. So it reuses that. So I'm also looking forward to reading more about and configuring display-buffer-alist.

      1:02:23 TRAMP slowness, maybe disabling VC detection?

      Amin: I'd like to figure out some TRAMP slowness. I recently tried using it again. It's awesome. You can seamlessly open files, SSH into other machines and edit files there. But I don't know. It's kind of slow. So I want to see aside from the latency, you know, the physical limit of the latency because of the distance. Is there anything slowing it down? I think I read in the Tramp FAQ that maybe trying to disable VC mode or VC detection for remote connections might help speed it up, or at least having it do only Git, for example, because by default, Emacs' VC has support for Mercurial, CVS, SVN, Git, RCS even.

      Sacha: Anything anyone has ever wanted to use in the last 40 years. Here we go. I saw in your chat config actually that you were doing something with the SSH configs and I'd never come across that. So I was like, oh, that's something I should look into later.

      Amin: I don't remember the specifics, but it's all out there. Feel free to look into it.

      1:03:39 eat

      Amin: Especially with this EXWM setup, I still use Xterm sometimes and I have the Emacs EAT terminal, which is a terminal emulator written in Emacs Lisp. If I launch it right now, it's awesome. It actually is very powerful and it's a properly capable terminal emulator. It just can be a little bit slow. It is slower than xterm, but it's still a lot faster than whatever Emacs has built in. So this is pretty cool. But yeah, I don't want to use it a lot. And I kind of started testing, delegating more things or using more async-shell-command to just basically open this prompt and then do whatever I want. anyway.

      Sacha: I've also heard things about Ghost TTY. Anyway, so that's another thing to look into. Yes, so @Paniash47 says, "With Emacs 31, there's a new variable where you can hide the minor modes in the mode line." @pkal says it's mode-line-collapse-minor-modes. And @Paniash47 also says, "I personally use the Minions package by Tarsius, and it has some nice features in addition to the built-in features." So other people are tinkering around with their mode lines as well.

      Amin: Yeah, it's pretty cool. And then I don't know, I think maybe you touched on something a couple of minutes ago that I was going to go back to, but I forget.

      1:05:07 TRAMP completion

      Sacha: Tramp SSH completion out of your configs. I was like, there's a Tramp sconfig in here that I've never used. And that sounded interesting. Yeah, tramp-parse-sconfig.

      Amin: Ah, right, right, right. Yeah.

      Sacha: Which, of course, we're not going to let go because it's private stuff, but yeah.

      Amin: Right. Yeah, you're welcome to try this. I'm pretty sure, actually, I took this from the Tramp manual itself. And it's one of those things where it's set and forget, I don't remember. But yeah, it's here. There was something else that I also wanted to show, but I forget. Let me see if looking at the outlines will remind me or if I will see it.

      Sacha: And that's one of the things I love about literate configuration is, you know, just kind of look at the structure and skim it and try to find something with keywords and ordered lists and all that stuff.

      Amin: Right. Yup. Exactly.

      Sacha: Oh, and you know, people will have access to your full configuration because it is in your repository and you have that lovely HTML expert for it as well. So if you, uh, if, if people want to follow up, they can go through that at length. At some point, you're going to add some more screenshots and possibly even video clips to it. so that's there you at git.kelar.org

      image from video 01:06:34.567Amin: This is my configurations repository. If you go here to treeview .emacs.d, this is the org file. I also export all of those individual components into this lisp subdirectory. All that stuff is here. The QMK thingy that was mentioned.

      1:06:54 ffs: form feed slides, ^L

      image from video 01:08:15.933Amin: Oh, I wanted to mention FFS. Okay, I'll do that as well. Yeah, what's up with that?

      Sacha: I was trying to find information. It was like, there's no package. It's not what is this thing?

      Amin: It's FormFeed Slides and it's going to soon be a package. I was actually talking to Prot about it and I'm hoping to submit it for inclusion in GNU ELPA within, I don't know, the next couple of weeks. It's basically very similar to Prot's Logos package. Turns out we both had the same kind of idea at the exact same time in 2022, and we both used it for our LibrePlanet 2022 presentations. Of course, Prot being the diligent person that he is, he polished his work, documented it, put it on GNU ELPA. I still haven't gotten around to doing it yet, but better late than never. Yeah, let's see. I can maybe show a quick demonstration of that. So let's see. Let's see. Anyway, so if I go to my website sources and net-beyond-web. So I had the LibrePlanet talk a couple years ago. So what FFS is basically, it looks for a particular character in this case, or the default case, it's the page delimiter, ^L, which you can insert by hitting C-q C-l. It basically then designates each of these areas as one slide. So, very, very simple slideshow that you don't even have to use Org or outline or any other major or minor mode. If I launch ffs, by default, it's in a mode where it binds a couple of convenience keys, like p and n, to go into the next and previous slide. You can hit e to edit a slide, similar to Org source, and then make your changes and all of that. And then you can start a presentation by hitting s.

      image from video 01:08:58.767Amin: It has hooks for, for example, bumping up the font size or whatever, hiding the mode line. I can toggle the mode line by hitting M here. Let's see. I can also toggle the cursor, to make the cursor visible or not. So, yeah. And then I'm just hitting P and N.

      Sacha: Very simple, very minimalist. You have a file, you've got page markers, and that's all you got.

      Amin: Yeah, pretty much. And then...

      1:09:34 Speaker notes

      Amin: The neat thing that it has that I also liked implementing at the time is it has a speaker notes feature.

      image from video 01:09:47.767Amin: So you can designate a file as being the speaker notes where it has the same structure separators with ^L. But you can type your notes over here, whatever. And you can basically open these in two different windows or two different frames on separate displays. And then in whichever one of those you advance the slides, like p n n, it also does the other one.

      Sacha: That's brilliant. I was looking for a way to do that so I can pretend to know what I'm talking about when I have something on screen, but I can just read my notes or even just remember what points I wanted to make. So this is great. You have speaker notes. You've got the main screen. They can be in two different frames. You can have your frame that you're sharing and your frame that you're not sharing that has all of your cheat sheets. Excellent. And on that note, in about one minute, the kid is going to come running out and want to have snack and all that stuff. Thank you so much for walking through parts of your config. There is more. And so everyone who wants to find out more can go check out your setup. I have a great many things that I want to try out, starting from EXWM to little things like figuring out a boom mic setup because apparently your audio setup is making me very jealous. Yes, thank you for doing this. I'm going to post the transcript and the chapters. I have a chapter every minute. It's going to be a long time. But it was good. Lots of cool stuff. Thank you again.

      Amin: Sounds great. And yeah, you're very welcome. And thank you so much for having me as well, Sacha. I'm very delighted to be here, especially, I think, just by chance. I think I'm the first person who you're doing this with after the long hiatus. So that's an extra honor for me. But yeah, it's been fun. I could go on for hours. I'm sure we both could. This has been fun.

      Sacha: If we wanted to go on for hours, Prot has more flexible scheduling, so he can chat with people for two hours and stuff, and you already have conversations going on with him. But I unfortunately have a small mammal who's 10 years old and loves me very much, and likes to not let me concentrate for very long. But thank you everyone for joining. Thank you for the chat. And thank you also, stream, for all the interesting questions. I will send you all the information and update the post. And we'll see you all on Thursday. I've got another chat. All of a sudden, all these Emacs chats are going to happen. Thanks. Oh, and you said you're happy to be on the hook for doing another EmacsConf this year, right?

      Amin: Yes. You can hold me to that. There will be another EmacsConf and I will be active in it.

      Sacha: Alright then, I'm going to end that broadcast. Thanks everyone, bye!

      Amin: Thank you, bye bye!

      Chat

      • sachactube: This is a test message
      • sachactube: Getting ready for Emacs Chat 21 with Amin Bandali, https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/
      • JacksonScholberg: Yo
      • sachactube: Yo yo yo, we are live!
      • IhorRadchenkoyantar92: … and the list can continue until the end of the stream? :)
      • IhorRadchenkoyantar92: do you compile those packages?
      • sachactube: Automatically compiled by prepare-user-lisp because of user-lisp-directory, I think
      • IhorRadchenkoyantar92: makes sense
      • IhorRadchenkoyantar92: this configure macro looks a lot like good old use-package
      • IhorRadchenkoyantar92: I just do (use-package foo :config ) and then :tangle no in actual src block
      • IhorRadchenkoyantar92: what is funny, with-eval-after-load is itself a macro
      • sachactube: hahaha, it's much smaller though
      • IhorRadchenkoyantar92: not smaller at all! Because there is recursion with-eval-after-load (macro) -> eval-after-load (also macro!)
      • IhorRadchenkoyantar92: hmm. wrong
      • IhorRadchenkoyantar92: ok. let me not do two things at the same time
      • blaiseutube: yay, I made it!
      • blaiseutube: screenshots and also asciicinema
      • blaiseutube: asciinema ?
      • blaiseutube: whatever
      • sachactube: and gif-screencast
      • blaiseutube: nice
      • blaiseutube: Sacha, your mic volume is just a bit lower than his so it's a bit harder (for me) to hear you.
      • sachactube: Hmm, let me try turning my dial, let's see if this next one is better
      • blaiseutube: better, I think
      • blaiseutube: it's also that Amin has an awesome microphone. The result sounds like Amin is in the room with me and we are both listening to you on speakerphone. it's not terrible
      • blaiseutube: we're all friends her
      • blaiseutube: here
      • sachactube: I think we have the same mic, but he has an awesome setup, so I'm going to bug him for tips =D
      • paniash47: Hello there! Nice to see this chat. :)
      • blaiseutube: yes, low gain and close mic is good. Sacha if prefer to avoid a boom, you can use a microphone with a tight pattern and increase gain. LMK if you want to unleash my inner audio engineer.
      • sachactube: oooh. my mic is right next to my laptop though, so I'm not sure I can get away from the typing noises
      • sachactube: I'll just have to get cozy with y'all
      • blaiseutube: mini buffet is an underrated superpower. I think Kakoune adopted that also
      • blaiseutube: helpful for a11y and users with sequential processing/ ADHD issues
      • blaiseutube: (I noticed that the comments are recorded so I'm trying to add value 🥴)
      • paniash47: Split keyboards make sense with vanilla keybindings. I'd like to switch but moving from evil is difficult :(
      • sachactube: much appreciated!
      • blaiseutube: what about "time since last save" or do you have some auto save magic?
      • blaiseutube: 🤯
      • blaiseutube: emacs all the things
      • blaiseutube: LOL, "I save everything regularly" …so he's one of those people.
      • paniash47: I think with emacs 31, there's a new variable where you can hide the minor modes in the modeline
      • pkal_: mode-line-collapse-minor-modes
      • paniash47: I personally use the minions package by tarsius (Magit author) and it has some nice features in addition to the built-in feature.
      • paniash47: ghostel is the package :)
      • blaiseutube: BRB

      Find more Emacs Chats or join the fun: https://sachachua.com/emacs-chat

      You can comment on Mastodon or e-mail me at sacha@sachachua.com.

    13. 🔗 r/reverseengineering [CrackMe] PyVMP v6 : The Fortress. I dare you to break it (again x2). rss
    14. 🔗 r/wiesbaden Gutes Lokal und Fußball schauen rss

      Hallo zusammen,

      ich hoffe die Frage passt hier:

      Ich bin am Mittwoch geschäftlich in Wiesbaden und suche ein Lokal, in dem man Abends gut essen gehen, aber auch das Champions League Rückspiel anschauen kann.

      Vielen lieben Dank für eure Tipps.

      submitted by /u/Julansda
      [link] [comments]

    15. 🔗 sacha chua :: living an awesome life From David Dimagid: What we talk about when we talk about recommending Emacs packages rss

      David Dimagid wrote this post for Emacs Carnival May 2026: "May I recommend…". Here it is!

      Someone recently said on emacs-devel that they'd like to talk about recommending ELPA packages. Someone else said we should first ask what "recommending" actually means. RMS opened a thread asking that very question. It's still open, and you can follow it there (ELPA: to curate or not to curate).

      I think we could apply Rich Hickey's technique here and start by looking up the definition of "recommend" in the dictionary. I invite everyone to do so with whatever dictionary you have at hand and to trust your definitions.

      Now, we could evaluate ELPA packages for recommendation based on whether they complement or improve functionality already present in the core. For example, diff-hl by Dmitry Gutov. Its description says:

      diff-hl-mode highlights uncommitted changes on the side of the window, allows you to jump between and revert them selectively. In buffers controlled by Git, you can stage and unstage the changes.

      That last feature —staging partial hunks— is missing from VC, and diff-hl adds it seamlessly. We could say diff-hl complements the core.

      Then there are major mode packages, like csv-mode, markdown-mode, cobol-mode, and so on. They add functionality that doesn't exist in the core. They have no direct equivalent. We could call them standalone packages.

      Now consider another excellent package, like diff-hl, that depends only on the core: expreg, by Yuan Fu, the region expansion package. With a single key, it expands the region based on context. The core already offers this through sexp movement commands, but not with a single keybinding — you need several. Some will prefer the native core way; others will prefer the package. We could say expreg improves or, depending on how you look at it, duplicates the core's functionality.

      So, in my opinion, package recommendations should be structured around their relationship with the Emacs core. I believe the best-regarded ELPA packages should be those that encourage users to use what the core already offers, first and foremost, and then try those packages because they extend a feature the core lacks or complement it. This would also help more people discover lesser-known core features, increase bug reports, and, over time, bring more contributors to Emacs. That way, the Emacs community could have a package repository it can trust for as long as Emacs exists. Perhaps the person who wrote Elfeed would have known about Newsticker and would have contributed to that package instead. Perhaps if we recommended what Emacs already offers, the Elisp we write would be Elisp of and for Emacs.

      If you e-mail me your comments, I can forward them to David!

      You can e-mail me at sacha@sachachua.com.

    16. 🔗 sacha chua :: living an awesome life Emacs Carnival May 2026: "May I recommend..." rss

      It's May and I like puns, so I'm going to suggest "May I recommend…" as our Emacs Carnival theme this month, building on lively conversations about people's favourite packages on lobste.rs, Reddit, and Hacker News. Let's go beyond packages and talk workflows, tips, practices, perspectives… whatever you'd recommend!

      It was pretty nice having a wiki page that people could edit without needing to wait for me, so if you write about this topic, feel free to and add your link. If you run into problems doing that, please e-mail me and I can add the link for you.

      People have already started sharing their recommendations:

      I'll also do a round-up post at the end of the month so that it shows up in people's RSS feeds.

      Looking forward to seeing what y'all recommend!

      You can e-mail me at sacha@sachachua.com.

    17. 🔗 r/Leeds Loneliness rss

      Damn the loneliness, after 9-5 all i can do is get some beers. There is nothing much to do , no one to talk to. Anyone who has been in my shoes - advice how did you get better ? I migrated here in March.

      submitted by /u/FarziiHu
      [link] [comments]

    18. 🔗 r/Yorkshire River Nidd rss

      River Nidd | The river at Little Ribston; unexpectedly beautiful. But then, it’s Yorkshire. submitted by /u/Inevitable-Debt4312
      [link] [comments]
      ---|---

    19. 🔗 r/wiesbaden Umzug -> Internetanbieter? rss

      Da ich in 2 Monaten nach Wiesbaden ziehe und ja, auch wenn das oft keinen wirklichen Stadtbezug hat: Welcher Anbieter bereitet am wenigsten Kopfschmerzen und ist preislich sowie Servicetechnisch absolut empfehlenswert?

      Adressencheck ist schon durchgeführt. Es kommen alle gängigen Anbieter in Frage.

      Danke Euch! :-)

      submitted by /u/allroundurso
      [link] [comments]

    20. 🔗 r/Yorkshire More Whitby! rss
    21. 🔗 r/Leeds Both Queens Court and The Bridge have closed down in absolutely devastating news for the LGBTQ+ Scene in leeds rss
    22. 🔗 r/reverseengineering [WIP] Resolve indirect calls in Binary Ninja with DynamoRIO instrumentation rss
    23. 🔗 sacha chua :: living an awesome life 2026-05-04 Emacs news rss

      Thanks to everyone who shared their thoughts on the April 2026 Emacs Carnival theme of Newbies and Starter Kits. Check out that post to see all the entries people have shared so far. I enjoyed chatting with Prot about the topic, and he shared some defaults that even experienced users have been trying out. The carnival theme for May 2026 is "May I recommend…". Looking forward to reading your posts!

      Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

      You can e-mail me at sacha@sachachua.com.

    24. 🔗 r/LocalLLaMA Llama.cpp MTP support now in beta! rss

      Llama.cpp MTP support now in beta! | Happy to report that llama.cpp MTP support is now in beta, thanks to Aman (and all the others that have pushed the various issues in the meantime). This has the potential to actually get merged soon-ish. Currently contains support for Qwen3.5 MTP, but other models are likely to follow suit. Between this and the maturing tensor-parallel support, expect most performance gaps between llama.cpp and vLLM, at least when it comes to token generation speeds, to be erased. submitted by /u/ilintar
      [link] [comments]
      ---|---

    25. 🔗 r/Yorkshire Taking the long way round. I could wander these dry stone wall paths forever and still find a new view to admire rss
    26. 🔗 r/reverseengineering IDA-MCP Is Now RE-MCP With Ghidra Support rss
    27. 🔗 @malcat@infosec.exchange [#Malcat](https://infosec.exchange/tags/Malcat) 0.9.14 is out! mastodon

      #Malcat 0.9.14 is out!

      This is a maintenance build, with some bonuses:

      ● AccessDB parsing
      ● RAR unpacking
      ● UPX (static) unpacking
      ● Improved __noreturn detection
      ● ... and as usual, up-to-date signature, constants and Kesakode DBs.

      Happy reversing!

    28. 🔗 r/reverseengineering Reverse-engineered the BLE protocol of the LuckPrinter-SDK family of thermal pocket printers (DP-L1S) — Python CLI + Web Bluetooth client + full command reference rss
    29. 🔗 r/york My favourite therapeutic loop💫 I could walk this a thousand times and never get bored🥹 rss

      My favourite therapeutic loop💫 I could walk this a thousand times and never get bored🥹 | submitted by /u/Coffee000Oopss
      [link] [comments]
      ---|---

    30. 🔗 r/Harrogate Recommendations for someone to lay a shed base in Harrogate? rss

      Hi all,

      Looking for a bit of help/recommendations.

      I need to get a shed base put in at the bottom of my garden and I’m weighing up either concrete or paving slabs. It’s not a massive job, but I want it done properly so it’s solid and lasts.

      Does anyone know someone reliable in the Harrogate area who could take this on? Ideally someone you’ve used yourself and would recommend.

      Thanks in advance

      submitted by /u/Logical_Yogurt_520
      [link] [comments]

    31. 🔗 r/LocalLLaMA it's time to update your Gemma 4 GGUFs rss
    32. 🔗 r/reverseengineering /r/ReverseEngineering's Weekly Questions Thread rss

      To reduce the amount of noise from questions, we have disabled self-posts in favor of a unified questions thread every week. Feel free to ask any question about reverse engineering here. If your question is about how to use a specific tool, or is specific to some particular target, you will have better luck on the Reverse Engineering StackExchange. See also /r/AskReverseEngineering.

      submitted by /u/AutoModerator
      [link] [comments]

    33. 🔗 r/Yorkshire Whitby rss

      Whitby | submitted by /u/Phil-pot
      [link] [comments]
      ---|---

    34. 🔗 Stavros' Stuff Latest Posts Adding a feature to a closed-source app rss
      Who needs source code?

      I use Audiobookshelf (abbreviated ABS) for all my legal audiobooks that I bought legally, and I really like it. I also use the Smart Audiobook Player (abbreviated SABP) Android app, which I also bought (leg

    35. 🔗 Rust Blog Rust is participating in Outreachy rss

      The Rust Project has been building up a good history of participating in various open-source mentorship programs, including Google Summer of Code for three years (including this year) and previously OSPP. We're happy to announce that this year we are also participating in Outreachy starting in the May 2026 cohort.

      Each of these mentorship programs has different criteria for eligibility depending on who they target and the motivations of the program. Outreachy provides internships in open source, to people from any background who face underrepresentation, systemic bias, or discrimination in the technical industry where they are living. You can learn more about the Outreachy program on their website.

      What is Outreachy and how is it different than Google Summer of Code

      Outreachy is similar to Google Summer of Code (GSoC) in some aspects, but different in others. First off, unlike GSoC, Outreachy interns first apply to the overall program and only then can apply to specific communities. Second, while oftentimes GSoC applicants submit various contributions prior to their application, Outreachy has a dedicated period where contributions are not just optional, but required. Finally, Outreachy applicants submit an application similar to GSoC applications and communities pick interns based on those applications and the interns' contributions. Outreachy has two internship periods per year, one running from May to August (in which we are currently participating) and one from December to March.

      The other major difference between Google Summer of Code and Outreachy is the source of intern stipends. For GSoC, Google graciously covers contributor stipends and overhead. For Outreachy, communities instead cover the interns' stipends and overhead.

      We are mentoring 4 interns for the May 2026 cohort

      Because of limited funding availability and mentoring capacity, the Rust Project decided to select four interns for mentorship. We'll briefly share these projects below.

      Calling overloaded C++ functions from Rust

      Ajay Singh has been selected, mentored by teor, Taylor Cramer, and Ethan Smith.

      This project aims to implement an experimental feature for calling overloaded C++ functions from Rust, and to begin testing that feature in a few representative use cases.

      Code coverage of the Rust compiler at scale

      Akintewe Oluwasola has been selected, mentored by Jack Huey.

      This project aims to develop the workflows to run and analyze code coverage of the compiler at the scale of the entire compiler test suite and on ecosystem crates detected by crater. The hope is to be able to detect when the compiler is inadequately tested, both within the compiler and in the ecosystem, and to build tools to do continuous analysis on this.

      Fuzzing the a-mir-formality type system implementation

      Tunde-Ajayi Olamiposi has been selected, mentored by Niko Matsakis, Rémy Rakic, and tiif.

      This project aims to implement fuzzing for a-mir- formality, an in-progress model for Rust's type and trait system. The goal is to generate programs in order to identify rules with underspecified semantics in a-mir-formality.

      Improve the security of GitHub Actions of the Rust Project

      oghenerukevwe Sandra Idjighere has been selected, mentored by Marco Ieni and Ubiratan Soares.

      This project aims to improve the security of GitHub Actions workflows of the repositories owned by the Rust Project. It will develop tools and workflows, integrating with existing software, to analyze Github repositories and detect if they follow the best security practices, fix existing issues, and ensure that good security practices are followed in the future.

      What's next

      Over the next 3 months, the interns will work closely with their mentors to make progress on their projects. When the internship period is over, we'll write another blog post to share the results! See you then!

      We also want to thank all the people that submitted applications and made contributions. It was quite tough to decide which applicants to select. Hopefully we will participate in Outreachy again in the future and there are other opportunities to participate. We also very much welcome you to stick around and continue being involved - there is a ton of places in the Rust Project with opportunities to be involved.

    36. 🔗 Julia Evans Links to CSS colour palettes rss

      A while back I decided to stop using Tailwind for new projects and to just write vanilla CSS instead.

      But one thing I missed about Tailwind was the colour palette (here as CSS). If I wanted a light blue I could just use blue-100 and if I didn't like it maybe try blue-200 or blue-50. I'm not very good with colours so it makes a big difference to me to have a reasonable colour palette that somebody who is better at colour than me has thought about.

      But I'm also a little tired of those Tailwind colours, so I asked on Mastodon today what other colour palettes were out there. And then a friend said they wanted links to those colour palettes, so here's a blog post so my friend can see them, and all the rest of you too :)

      my favourites

      The ones I liked the most were:

      more colour palettes

      colourscheme generators

      Folks also linked to a bunch of colour palette generators

      I've always found these types of generators too hard to use but maybe one day I will get better enough at colour that I'm able to use a colour palette generator successfully so I'll leave those links there anyway.

      and more colour tools:

      • colorhexa has some info about colorblindness

      oklch

      Generative colors with CSS gives an example of how to use the oklch CSS function to dynamically generate colors.

    37. 🔗 exe.dev Dev, Test, Prod: Choose One, Two, or Three rss

      Venn diagram showing Dev, Test, and Prod overlapping with exe.dev in the
center

      Industry-wide, we often develop our software in three distinct environments. Perhaps your laptop is a Mac; your CI system is hosted GitHub Actions, and your prod is k8s.

      Three-in-One

      For some use cases, you need not bother with the complexity; use one exe.dev vm for all three. A blog, a dashboard, a link shortener, a bot, and so on: these work well with the environments collapsed. Add features by asking Shelley to do so. Set up continuous deployment by asking Shelley to poll every hour. Use git for a backup if it calls for it. Voila!

      Our internal tools sport an "Edit with Shelley" ribbon. They either point straight to the "vm.shelley.exe.xyz" domain, or link to exe.dev/new with a pre-filled prompt and pre-filled tags, just like the link here.

      Edit with Shelley

      Just Dev

      Use an exe.dev vm (or many) to work on your software. Set up the GitHub integration (docs) to make cloning easy. Some people work serially. Some people work using multiple worktrees on one vm. Some people have one vm per task or project. Clone your VMs using ‘cp’ or configure them using setup scripts.

      Using remote VMs opens up the convenience of mobile, opportunities for sharing, not to mention isolation from your other projects.

      Seesaw balancing customization against
convenience

      Why now? Many, many companies have tried remote development before. There is an entire graveyard of failed startups in this space. The big difference is agents. If your development is increasingly chat-based, the old arguments about getting your environment and dot-rc files just right fade away. The convenience of starting a task from your phone overwhelms the decades-old bashrc file and finely crafted PS1. As a bonus, you get the ability to share with your co-workers. Pull requests are so yesterday; send them a link to a working demo instead.

      Just Test

      Exe.dev VMs are a great place to riff on an idea. Perhaps you want to explore a particular open source project. Or you want to do some data analysis and share it with your co-workers? Or prototype your next idea? Or find your flakes by running your tests over and over again. Or let loose Shelley, our agent, on your app with its built-in browser? Or send off a security review. Or even just run a GitHub Actions runner.

      Because you pick what access you want to give your VMs, and because they’re persistent, exe.dev VMs are great places to test stuff out.

      Just Prod

      You can host real, production software in exe. We support custom domains with a bit of DNS configuration (docs).

      If you’re incredulous that this is a good idea, the entirety of Stack Overflow ran on just a few machines. Reach out to us if you want to enlarge your VM as far as modern hardware can go.

      Private, Internal, or Public

      Once you build it, you'll want to share it. You can keep it to yourself, and that's the default. Or you can share it with your team or with share links. Or you can share it publically. Sharing a VM's website is as easy as sharing any other online doc.

    38. 🔗 Armin Ronacher Content for Content’s Sake rss

      Language is constantly evolving, particularly in some communities. Not everybody is ready for it at all times. I, for instance, cannot stand that my community is now constantly "cooking" or "cooked", that people in it are "locked in" or "cracked." I don't like it, because the use of the words primarily signals membership of a group rather than one's individuality.

      But some of the changes to that language might now be coming from … machines? Or maybe not. I don't know. I, like many others, noticed that some words keep showing up more than before, and the obvious assumption is that LLMs are at fault. What I did was take 90 days' worth of my local coding sessions and look for medium-frequency words where their use is inflated compared to what wordfreq would assume their frequency should be. Then I looked for the more common of these words and did a Google Trends search (filtered to the US). Note that some words like "capability" are more likely going to show up in coding sessions just because of the nature of the problem, so the actual increase is much more pronounced than you would expect.

      You can click through it; this is what the change over time looks like. Note that these are all words from agent output in my coding sessions that are inflated compared to historical norms:

      Loading word trend chart…

      The interactive word trend chart requires JavaScript.

      Something is going on for sure. Google Trends, in theory, reflects words that people search for. In theory, maybe agents are doing some of the Googling, but it might just be humans Googling for stuff that is LLM-generated; I don't know. This data set might be a complete fabrication, but for all the words I checked and selected, I also saw an increase on Google Trends.

      So how did I select the words to check in the first place? First, I looked for the highest-frequency words. They were, as you would expect, things like "add", "commit", "patch", etc. Then I had an LLM generate a word list of words that it thought were engineering-related, and I excluded them entirely from the list. Then I also removed the most common words to begin with. In the end, I ended up with the list above, plus some other ones that are internal project names. For instance, habitat and absurd, as well as some other internal code names, were heavily over-represented, and I had to remove those. As you can see, not entirely scientific. But of the resulting list of words with a high divergence compared to wordfreq, they all also showed spikes on Google Trends.

      There might also be explanations other than LLM generation for what is going on, but I at least found it interesting that my coding session spikes also show up as spikes on Google Trends.

      The Rise of LLM Slop

      The choice of words is one thing; the way in which LLMs form sentences is another. It's not hard to spot LLM-generated text, but I'm increasingly worried that I'm starting to write like an LLM because I just read so much more LLM text. The first time I became aware of this was that I used the word "substrate" in a talk I gave earlier this year. I am not sure where I picked it up, but I really liked it for what I wanted to express and I did not want to use the word "foundation". Since then, however, I am reading this word everywhere. This, in itself, might be a case of the Baader–Meinhof phenomenon, but you can also see from the selection above that my coding agent loves substrate more than it should, and that Google Trends shows an increase.

      We have all been exposed to LLM-generated text now, but I feel like this is getting worse recently. A lot of the tweet replies I get and some of the Hacker News comments I see read like they are LLM-generated, and that includes people I know are real humans. It's really messing with my brain because, on the one hand, I really want to tell people off for talking and writing like LLMs; on the other hand, maybe we all are increasingly actually writing and speaking like LLMs?

      I was listening to a talk recording recently (which I intentionally will not link) where the speaker used the same sentence structure that is over- represented in LLM-generated text. Yes, the speaker might have used an LLM to help him generate the talk, but at the same time, the talk sounded natural. So either it was super well-rehearsed, or it was natural.

      Engage and Farm

      At least on Twitter, LinkedIn, and elsewhere, there is a huge desire among people to write content and be read. Shutting up is no longer an option and, as a result, people try to get reach and build their profile by engaging with anything that is popular or trending. In the same way that everybody has gazillions of Open Source projects all of a sudden, everybody has takes on everything.

      My inbox is a disaster of companies sending me AI-generated nonsense and I now routinely see AI-generated blog posts (or at least ones that look like they are AI-generated) being discussed in earnest on Hacker News and elsewhere.

      Genuine human discourse had already been an issue because of social media algorithms before, but now it has become incredibly toxic. As more and more people discover that they can use LLMs to optimize their following, they are entering an arms race with the algorithms and real genuine human signal is losing out quickly. There are entire companies now that just exist to automate sending LLM-generated shit and people evidently pay money for it.

      Speed Should Kill

      If we take into account the idea that the highest-quality content should win out, then the speed element would not matter. If a human-generated comment comes in 15 minutes after a clanker-generated one, but outperforms it by being better, then this whole LLM nonsense would show up less. But I think that LLM- generated noise actually performs really well. We see this plenty with Open Source now. Someone builds an interesting project, puts it on GitHub and within hours, there are "remixes" and "reimplementations" of that codebase. Not only that, many of those forks come with sloppy marketing websites, paid- for domains, and a whole story on socials about why this is the path to take.

      I have complained before that Open Source is quickly deteriorating because people now see the opportunity to build products on top of useful Open Source projects, but the underlying mechanics are the same as why we see so much LLM slop. Someone has a formed opinion (hopefully) at lunch, and then has a clanker-made post 3 minutes later. It just does not take that much time to build it. For the tweets, I think it's worse because I suspect that some people have scripts running to mostly automate the engagement.

      And surely, we should hate all of this. These low-effort posts, tweets, and Open Source projects should not make it anywhere. But they do! Whatever they play into, whether in the algorithms or with human engagement, they are not punished enough for how little effort goes into them.

      Friction and Rate Limiting

      That increases in speed and ease of access can turn into problems is a long- understood issue. ID cards are a very unpopular thing in the UK because the British are suspicious of misuse of a central database after what happened in Nazi Germany. Likewise the US has the Firearm Owners Protection Act from 1986, which also bans the US from creating a central database of gun owners. The gun-tracing methodologies that result from not having such a database look like something out of a Wes Anderson movie. We have known for a long time that certain things should not be easy, because of the misuse that happens.

      We know it in engineering; we know it when it comes to governmental overreach. Now we are probably going to learn the same lesson in many more situations because LLMs make almost anything that involves human text much easier. This is hitting existing text-based systems quickly. Take, for instance, the EU complaints system, which is now buckling under the pressure of AI. Or take any AI-adjacent project's issue tracker. Pi is routinely getting AI-generated issue requests, sometimes even without the knowledge of the author.

      Trust Erosion and Gaslighting

      I know that's a lot of complaining for "I am getting too many emails, shitty Twitter mentions, and GitHub issues." I really think, though, that now that we know that it's happening, we have to change how we interact with people who are increasingly automating themselves. Not only do they produce a lot of shitty slop that we all have to sit through; they are also influencing the world in much more insidious ways, in that they are influencing our interactions with each other. The moment I start distrusting people I otherwise trust, because they have started picking up LLM phrasing, it erodes trust all over society.

      You also can't completely ban people for bad behavior, because some of this increasingly happens accidentally. You sending Polsia spam to me? You're dead to me. You sending me an AI-generated issue request and following up with an apology five minutes later? Well, I guess mistakes happen. Yet, in many ways, what is going on and will continue to go on is unsettling.

      I recently talked with my friend Ben who said he forced someone to call him to continue a conversation because he was no longer convinced he was talking to a human.

      Not all of us have been exposed to the extreme cases of this yet, but I had a handful of interactions in which I questioned reality due to the behavior of the person on the other side. I struggle with this, and I consider myself to be pretty open to new technologies and AI in particular. But how will my children react to stuff like this? My mother? I have strong doubts that technology is going to solve this for us.

      Suggestions for Change

      The reason I don't think technology is going to solve this for us is that while it can hide some spam and label some generated text, it won't fix us humans. What is being damaged here are social interactions across the board: the assumption that when someone writes to you, there is a person on the other side who has put some care into the interaction. I would rather have someone ghost me or reject me than send me back some AI-generated slop.

      Change has to start with awareness and an unfortunate development is that LLMs don't just influence the text we read and they influence the text we write, even when we don't use them. Given the resulting ambiguity, we need to become more aware of how easily we can turn into energy vampires when we use agents to back us up in interactions with others. Consider that every time someone reads text coming from you, they will increasingly have to make a judgment call if it was you, an LLM, or you and an LLM that produced the interaction. Transparency in either direction, when there is ambiguity, can help great lengths.

      When someone sends us undeclared slop, we need to change how we engage with them. If we care about them, we should tell them. If we don't care about them, we should not give them visibility and not engage.

      When it comes to creating platforms and interfaces where text can be submitted, we need to throw more wrenches in. The fact that it was cheap for you to produce does not make it cheap for someone else to receive, and we need to find more creative ways to increase the backpressure. GitHub or whatever wants to replace it, will have a lot to improve here and some of which might be going against its core KPIs. More engagement is increasingly the wrong thing to look at if you want a long term healthy platform.

      Whatever we can do to rate-limit social interactions is something we should try: more in-person meetings, more platforms where trust has to be earned, and maybe more acceptance that sometimes the right response is no response at all.

      And as for AI assistance on this blog, I have an AI transparency disclaimer for a while. In this particular blog post I used Pi as an agent to help me generate the dynamic visualization and I used to write the code to analyze and scrape Google Trends.

    39. 🔗 Ampcode News GPT-5.5 In Deep rss

      GPT-5.5 now powers Amp's deep mode.

      It is a better coding agent than GPT-5.4: more steerable, more interactive, and better at staying inside constraints.

      More Agent-Shaped

      GPT-5.5 is better at the actual agent loop: read enough code, make the change, verify it, explain what happened. Whereas with GPT-5.4, prompts often had to spell out the process.

      With GPT-5.5 we found it's best to clearly describe the outcome and put the rules and repeatable steps into the guidance files and tools.

      If the task is vague, it can still solve the wrong problem cleanly. Good prompts matter more, not less.

      Reasoning Effort

      With GPT-5.5 we lowered deep's default effort from high to medium (deep²).

      Do not assume higher reasoning is always better: in our eval, GPT-5.5 high cost more than medium and performed worse.

      xhigh (deep³) is for cases where maximum quality matters more than cost.

      As before, you can toggle the thinking effort directly in the CLI with Opt+D (Alt+D), cycling through low (deep), medium, and xhigh.

      How To Use It

      The most important guideline to follow: tell GPT-5.5 what success looks like.

      A few patterns have worked well for us:

      • Give it the outcome and the constraints. Example: “Refactor transcript caching into a separate module. Keep the public API unchanged. Perf logging should only run behind this env var. Cache growth should be capped. Run the focused tests and typecheck.”
      • Give it a way to prove the fix. Example: “This CLI focus bug should be verified in the actual CLI, not just by inspection. Reproduce it interactively, check focus state, then run the focused test.”
      • Use it for planning when the shape of the fix is unclear. Example: “Analyze this protocol deadlock. Is it an infrastructure bug, a protocol bug, or something the client must recover from? Propose 2–3 options with tradeoffs and pseudo-code. Do not implement yet.”

      Update Amp to the latest version by running amp update and you're ready to go.

      Model Card

      We wrote up the full GPT-5.5 model card with evals, reasoning guidance, prompt changes, and caching/ZDR caveats.

  3. May 03, 2026
    1. 🔗 r/york Why does The Shambles make such a big thing out of Harry Potter? rss
    2. 🔗 r/reverseengineering GitHub - 03DSmoothie/minecraft-cpp-versions: Minecraft recoded in C++ (multiple versions) rss
    3. 🔗 r/LocalLLaMA AMD Strix Halo refresh with 192gb! rss

      AMD Strix Halo refresh with 192gb! | Looks like the next strix halo, the Gorgon halo 495 max will have more then 128gb! I already bought a strix halo mini forms couple months ago since the 2026 refesh rumors was not interesting. Was not planning on getting another till 2027 with the bigger refresh, and linking them together. But was planning to add an external gpu for running smaller dense models for now till 2027. Cpu, gpu rumor was smaller improvements. Heard nothing about more memory. But idk having 320gb of memory will allow running some of these newer huge moe models... maybe I drop external gpu thoughts for now. Of course rumors for now need to wait. For those who have not bought one yet, a single 192gb would mean running all these recent 122b models at q8 with fullish context! submitted by /u/mindwip
      [link] [comments]
      ---|---

    4. 🔗 r/LocalLLaMA One bash permission slipped... rss

      One bash permission slipped... | How? It kept getting chained bash commands wrong, with wrong escapes. So it created many bad directories, and tried "fixing" its mistake. It offered to run a large bash command, with rm -rf inside, and stupid me missed it. I'm glad I push everything often. But the disruption is massive. FAQ:

      • No, I don't run this on my personal computer. It's an isolated proxmox VM for coding with LLMs.

      submitted by /u/TheQuantumPhysicist
      [link] [comments]
      ---|---

    5. 🔗 r/Leeds Wand and Tankard at St John's Centre rss

      After walking past several times and being confused as to what the place actually is (thought it was for kids), today I approached the owner/manager. Wand and Tankard is an outside pub/beer garden that adjoins Merrion Gardens. Anyone can basically go, order drinks and chill out in the cabins or garden they have. Inside the St John's Centre is the Hole in Wand (Indoor golf). Felt a bit sorry for the guys today as they had 3 great buskers on, a seemingly good bar concept, yet was nearly empty.

      submitted by /u/Puzzleheaded_Bunch44
      [link] [comments]

    6. 🔗 r/Yorkshire Whitby, moody version rss
    7. 🔗 r/Yorkshire Now and then rss
    8. 🔗 r/reverseengineering Automated RASP Bypass with Frida + AI Agent | nutcracker & aipwn demo rss
    9. 🔗 r/york love this place! rss
    10. 🔗 r/york Which pubs have darts boards in York? rss

      I’m hoping to organise a darts pub crawl for a friend’s birthday around York but I don’t know many pubs that have boards (the white horse and the old bank are the only two I’ve seen). Do you have any recommendations?

      submitted by /u/ZealousidealRange269
      [link] [comments]

    11. 🔗 r/Yorkshire Whitby Beach rss
    12. 🔗 r/Yorkshire Whitby Harbour rss
    13. 🔗 r/Yorkshire Pen-y-ghent. rss

      Pen-y-ghent. | Took the morning i did the yorkshire 3 peaks. Probably one of the best photos I've taken. submitted by /u/Pearls_of_Rizzdom
      [link] [comments]
      ---|---

    14. 🔗 r/reverseengineering Please critique my reverse engineering ctf platform. It is meant for beginners but I would like input from serious reverse engineers. It is functionally done but I need criticism for further refinements, thank you! rss
    15. 🔗 r/wiesbaden Nachbar möchte sein Auto verkaufen. Wer möchte es bzw. an wen wendet man sich? rss

      Hi,

      meine Nachbarn ziehen zurück nach Amerika und verkaufen ihr deutsches Auto. Sie kennen sich damit nicht so aus und ich ehrlicherweise auch nicht so, da ich nie ein Auto besessen habe. Ich würde ihnen aber gerne helfen.
      Es handelt sich dabei um einen gut gepflegten Hyundai i10 mit 30.000km drauf. Ist 3 oder 4 Jahre alt, hat 49 kW (früher waren das die PS, oder?) und soll für 10.000 Euro verkauft werden in ca. 2 Monaten.

      Wo inseriert man das in Wiesbaden, um einen lokalen Käufer zu finden? Kann man das einfach einem guten Autohaus geben? Was wäre ein gutes Autohaus?

      submitted by /u/Individual-Handle676
      [link] [comments]

    16. 🔗 r/Leeds Who would be responsible for these stairs, Whitehall Rd leading to the canal? Is it the council or the canal trust, rss

      Earlier today a lady in front of me slipped and fell forwards on these stairs, normally not an issue other than the fact these stairs are rusted asf with sharp jagged edges. She cut her hand pretty bad, I had to take her to my apartment around the corner to clean her hand up and then put her in an uber to the hospital for what will definitely be a few stitches.

      This area is really busy now, with all the new apartments and offices nearby, surely about time they replace this staircase.

      It’s covered in rust, most of the metal grates are broken and full of sharp jagged edges, and it’s slippery asf when wet.

      I was hoping to write to who owns it, along with a few pictures of the ladies hand, a threat of liability and compensation might also help them have a bit of urgency. However I can’t work out if this is the canal trust or the council who would be responsible for this. Any help appreciated. Thanks.

      submitted by /u/MiserableSandwich36
      [link] [comments]

    17. 🔗 r/Leeds Name of band at the corn exchange 02/05/2026 rss

      Did anyone catch the name of this band that were playing outside the corn exchange yesterday?

      They were killing it but the wind made their sign blow over so I have no idea who they are!

      Thankyou /Leeds

      submitted by /u/baldursbae
      [link] [comments]

    18. 🔗 r/Yorkshire Sheffield's Reform Candidate Who Was Told R*cists Not Wanted Here Has A Dumb Idea: Scrap Clean Air! rss
    19. 🔗 Register Spill Joy & Curiosity #84 rss

      No big intro today. No time. I have to tweak some orbs, there's a big release coming.

      • Evan Phoenix: Agile in the Age of AI. There's so much in there and it's all really good. Highly recommended.

      • This is one of the most interesting analyses of What's Going On With Software Right Now that I've read in recent weeks: "To be a little less vague, I suspect that we're likely (not certain, but likely) to be entering into a period of unprecedented software degradation, and we're going to be seeing an increasing frequency of outages like this across many high profile products. But IMO the cause is actually not just the-one-thing-that-everyone-is-always-talking-about, it's a number of things that have all been bubbling away at just below critical levels for a long time.[…]" You know this joke about the fish and the water, right: old fish asks young fishes "morning! how's the water?" and the young fish are confused and ask "what's water?" It's easy (and probably not that wrong) to point at AI and declare it the cause of every change we see, but I think it's equally likely that only now that we're out of the ZIRP-era do we see what ZIRP has actually done to this industry.

      • Ghostty Is Leaving GitHub: "It's not a fun place for me to be anymore. I want to be there but it doesn't want me to be there. I want to get work done and it doesn't want me to get work done. I want to ship software and it doesn't want me to ship software. I want it to be better, but I also want to code. And I can't code with GitHub anymore. I'm sorry. After 18 years, I've got to go. I'd love to come back one day, but this will have to be predicated on real results and improvements, not words and promises." The times they are a-changing. Don't forget to read Mitchell's comment here. I don't have the time right now to spell out how much GitHub means to me, but I can safely say that without GitHub I wouldn't have the life I have today. And for many, many years I thought working at GitHub would be the best job in the world.

      • This chart made the rounds and kinda said the record straight: "I don't work on reliability & scaling at GitHub, but the people who do aren't bad at their jobs. They're dealing with unprecedented scale from agents. It's easy to shit on GitHub from the outside if you're not in charge of 30X-ing capacity within a few months. Have some grace."

      • I found Armin's commentary on the whole GitHub situation to be very good: Before Github. This, for example: "GitHub is currently losing some of what made it feel inevitable. Maybe that's just the life and death of large centralized platforms: they always disappoint eventually. Right now people are tired of the instability, the product churn, the Copilot AI noise, the unclear leadership, and the feeling that the platform is no longer primarily designed for the community that made it valuable. Obviously, GitHub also finds itself in the midst of the agentic coding revolution and that causes enormous pressure on the folks over there. But the site has no leadership! It's a miracle that things are going as well as they are." (Sidenote: I can't be the only one who's never used the word 'forge' before and now sees it everywhere as if there had been a big "this is the new word we're going to use now" memo going around.)

      • Mat Duggan on the GitHub he'd build if he were "rich like a man who owns a submarine he's never been inside. Rich like a man whose third wife has a skincare line. Tech-titan rich -- the kind of money that buys you a compound in Wyoming and the confidence to wear the same gray t-shirt to congressional testimony." Doesn't look like what I'd envisioned but some of the points are very interesting, especially this one: "My local copy of the repo should be a representation of the entire repo, not just the code. I should be able to approve a PR from the same VCS I use to check in the code. I should be able to go through my issues by looking through local files." It's kinda funny that over the last decade git and GitHub haven't really merged. It's always been repository here and rest over there.

      • Highly, highly, highly recommend you read this piece by Kevin Kelly on Our Uncertain Uncertainties: "In other words, we have a sustained, extended period of uncertainty. Not just a few years, but a decade or more. As AI continues to progress, rather than resolving our perplexity, it expands it. So for the next 10-15 years we have perpetual, continuous, severe uncertainty. This is a burdensome weight because people hate uncertainty more than bad news. […] what should we do about it? The most effective response to this multi-layered persistent uncertainty is not to seek impossible stability, but to cultivate radical adaptability and radical optionality. Give up on having a reliable prediction of what happens next. Instead cultivate multiple scenarios of what could happen, and endeavor with each of them to maximize your options. Goals should be considered as disposable hypotheses, constantly ready to be discarded and replaced by better-fitting concepts later on." As much as I don't like to say it, I think it's true. I think the last 30 years will look incredibly calm compared to the next 10. But hey, when the going gets tough, the tough get going, right? Or as the Hunter S. Thompson quote goes that I had pinned to me teenage bedroom wall: when the going gets weird, the weird turn pro.

      • My friend Tomas Senart is looking for a founding engineer to work with him on Perfloop. I worked with Tomas for many years at Sourcegraph, he's a true hardcore programmer, incredibly high agency (probably came out of the womb with his sleeves rolled up), and has a great sense of humor. Also: I trust him blindly to order sushi for me whenever we go out. If you're into AI and systems programming and performance optimizations: talk to him!

      • Had you asked me, when I started this newsletter, whether I'd ever link to something in the National Catholic Register, I probably would've laughed and said "What? What is that? What's in there? Why would I link to it?" But now we're here and I think this is one of the best things I've read on AI and education, or actually: education in general, in a long, long time: Reparing the Ruins: Why AI Can't Replace Education. Listen to this: "Education worthy of the name has always understood this. Its end is not the delivery of content, however accurate. It is the formation of persons capable of judgment, attention and intellectual honesty. That formation requires a genuine encounter with difficulty -- the friction of a hard text, the resistance of a problem that does not yield quickly, the discomfort of revising what one believed. It requires embodiment as much as intellect: reading slowly, speaking in one's own voice, accepting the cost of standing behind one's words. A person does not become capable of truth by managing information alone. Wisdom is formed in contact with reality, not in its simulation." Amen.

      • Big oof: "Copy Fail is a straight-line logic flaw -- it needs neither. The same 732-byte Python script roots every Linux distribution shipped since 2017."

      • The West Forgot How to Make Things. Now It's Forgetting How to Code: "Five to ten years from now, we'll need senior engineers. People who understand systems end to end, who can debug distributed failures at 2 AM, who carry institutional knowledge that exists nowhere in the codebase. Those engineers don't exist yet because we're not creating them. The juniors who should be learning right now are either not being hired or developing what a DoD-funded workforce study calls "AI-mediated competence." They can prompt an AI. They can't tell you what the AI got wrong. It's Fogbank for code. When juniors skip debugging and skip the formative mistakes, they don't build the tacit expertise. And when my generation of engineers retires, that knowledge doesn't transfer to the AI."

      • This was delicious. Daniel Lemire "created something I call the SIMD Quad algorithm" which beats binary search due to parallelism. Essentially: divide your list into blocks of 16 elements, then divide the list of blocks into quarters, check independently which quarter must contain your target (which CPU can optimize), do that until you end up with a single block, then check all 16 elements at once. Slick!

      • Very interesting (but maybe a bit shallow) profile of Mistral in Forbes. This is brutal: "But Mistral has slipped ever further behind in leader­boards ranking AI performance. It's so bad that Mistral's best model would lose in a face-off against a version of Anthropic's Claude that was released nine months earlier, per one popular benchmark. Worse, it's also bested by a new crop of open-weight models from Chinese startup DeepSeek and tech giant Alibaba." But there is a But: "But Mensch bets that a smaller, cheaper model made in Europe is better suited for governments and global companies than an American closed-source LLM with far more horsepower. Plus, it's too risky for serious Western companies to depend on Chinese models, says Mistral investor Jeannette zu Furstenberg of venture fund General Catalyst. The strat­egy has worked to the tune of $200 million in revenue in 2025. And Mensch says Mistral is on track to start making around $80 million monthly by December" Very interesting. But (another one), as a European myself, I have to say that I can't stand it anymore when European tech companies pitch their product with what essentially boils down to: "at least we're not [US company]." Yeah, the product might be worse, yeah, it doesn't work as well as the other thing, but hey, at least we're not …, at least we don't store your data in the US, at least … As a colleague of mine once said about a similar sounding marketing campaign by Opera, the browser company from twenty years ago, in which it essentially said "at least we don't track you": that's not what a winner would say.

      • 3 constraints before I build anything. This was fascinating, because my first reaction was: yes, constraints #1 and #2 are right, but what does #3 even mean? But now, re-reading it, I think that even #2 can be argued. And, hey, #1 too, actually. It is interesting though that they all have some value and I'd definitely say it's three things to consider before building anything, but [turning around and pointing at the choir behind me: now everybody!] it depends.

      • Why fat tailed costs emerge at scale: "I find that analysis of AI business models consistently underestimates the impact of unit economics. When people say AI startups face margin squeeze, they point to external competitors or monopolistic GPU pricing as contributing factors. But it seems that the internal resource variance would still exert pressure, even if there was only one LLM provider and chips were abundant." We'll probably never get it, but an in-depth blog post by one of the inference providers or model houses on exactly this would be very interesting.

      • Hell yes: "I like art that feels like it was made by a free person. I like to see how a person chooses things. I like art before it gets noted and workshopped and homogenized. I like art that preserves the rough edges of the person. Polish can be taught, so it's less interesting to me than that which can't be. I like when I can sense how someone really talks, feels, and thinks. I mean consciously so, but also unconsciously so. Every choice communicates. Even the 'errors.' I embrace the errors." That's why I like to listen to live music a lot. As our admin on the Led Zeppelin bootleg forum in 2007 said: "They always bit off more than they could chew -- and then chewed it."

      • Very, very interesting: Inside macOS window internals: how SkyLight enables multi-cursor background agents.

      • Zed 1.0 is out! Congratulations!

      • CorridorKey: "When you film something against a green screen, the edges of your subject inevitably blend with the green background. This creates pixels that are a mix of your subject's color and the green screen's color. Traditional keyers struggle to untangle these colors, forcing you to spend hours building complex edge mattes or manually rotoscoping. [...] I built CorridorKey to solve this unmixing problem. You input a raw green screen frame, and the neural network completely separates the foreground object from the green screen. For every single pixel, even the highly transparent ones like motion blur or out-of-focus edges, the model predicts the true, un-multiplied straight color of the foreground element, alongside a clean, linear alpha channel. It doesn't just guess what is opaque and what is transparent; it actively reconstructs the color of the foreground object as if the green screen was never there." Crazy that his even works without a green screen.

      • So, Henrick Johansson, this Twitter European VC parody account that often hit a bit too close to home is… real?! No, that can't be, right? So my theory is: it started as a parody account, but then Comp AI took over the account, changed the avatar to this actor's image, and now uses it to run ads for compliance while keeping the parody going. Anyone know more?

      • Staring at walls to improve focus and productivity. I don't know, man. On one hand: whew, wow, wow. On the other: if it works? On the third: it's meditating

      • Beautiful: I just learned I only have months to live.

      Yes, these lines are drawn by hand (well: mouse). Each one. Every time. Yes, that got you, didn't it? Here's where you can subscribe:

    20. 🔗 r/reverseengineering "AccountDumpling": Hunting Down the Google-Sent Phishing Wave Compromising 30,000+ Facebook Accounts rss
    21. 🔗 HexRaysSA/plugin-repository commits sync repo: +1 release rss
      sync repo: +1 release
      
      ## New releases
      - [BinSync](https://github.com/binsync/binsync): 5.15.0
      
    22. 🔗 r/LocalLLaMA Qwen3.6-27B vs Coder-Next rss

      Qwen3.6-27B vs Coder-Next | Burned about 20 hours of side-by-side compute on my two RTX PRO 6000 Blackwells trying to get a definitive answer on which of these two models was clearly better. As with many things in life, after many tokens and kWhs later the answer was "it depends." These models in the aggregate are actually crazy well matched against each other — scoring similarly overall across a wide range of tests and scenarios, hitting and missing on different things, failing and succeeding in different ways. Across the 4 cells I ran at N=10, Coder-Next 25/40 ships, 27B-thinking 30/40 — statistically tied with overlapping Wilson CIs. On the face of that, it kind of makes sense. 27B is a later-gen dense model that's high on thinking. Coder-Next has roughly 3x the parameters to work with but only activates 3B at a time as it works. Depending on what you're trying to do, either could be the correct choice. Kind of interestingly, 27B with thinking disabled was the most consistent shipper of work — 95.8% across the full 12-cell grid at N=10 (Wilson 95% [90.5%, 98.2%]). Same model weights as 27B-thinking, just --no-think. A side-by-side hand-graded read on the both-ship cells found substantive output is preserved; the difference is verbosity of reasoning prose, not output decisions. The "thinking-trace as loop substrate" mechanism turned out to be real — the documented word-trim loop on doc-synthesis halves with no-think (4/10 → 2/10). 3.6-35B-A3B pretty much fell flat on its face so often for tasking that it didn't seem worth carrying on to keep comparing against the other two. Folder kept as failure-mode evidence. I tossed a lot of crazy stuff at these models over the course of a few days and kept my two GPUs very warm and very busy in the process. I jumped into this mainly because, for lack of a better term, I felt like the traditional benchmarks were being gamed. So I wanted to just chuck these guys in the dirt and abuse them and see what happened. Give them tasks they could win, tasks where they were essentially destined to fail, study how they won and failed and what that looked like. The most lopsided single result: Coder-Next 0/10 on a live market-research task where 27B was 8/10 (Wilson 95% [0%, 27.8%] for the Coder-Next collapse, reproducible). Inverse: Coder-Next ships 10/10 on bounded business-memo and doc-synthesis tasks at 60–100x lower cost-per-shipped-run than either 27B variant. Same models, very different shapes of "good at." There's a ton of data, I tried to make it easy to sort through, and right now this is all pretty much just about thoroughly comparing these two models. Either way, I'm sleepy now. Let me know your thoughts or if you have any questions, and the repo is below. I'll talk more about this when I'm not looking to pass out lol. https://github.com/Light-Heart-Labs/MMBT-Messy-Model-Bench-Tests submitted by /u/Signal_Ad657
      [link] [comments]
      ---|---

    23. 🔗 matklad Minimal Viable Zig Error Contexts rss

      Minimal Viable Zig Error Contexts

      May 3, 2026

      fn process_file(io: Io, path: []const u8) !void {
          errdefer log.err("path={s}", .{path});
      
          const fd = try Io.Dir.cwd().openFile(io, path, .{});
          defer fd.close(io);
      
          // ...
      }
      

      Out of the box, Zig provides minimal and sufficient facilities for error handlingstrongly-typed error codes. Error reporting is left to the user. Idiomatic solution is to pass a Diagnostics out parameter (“sink”) to materialize human-readable strings as needed.

      Diagnostics pattern works well for “production” code, but for more script-y code it adds too much friction relative to the default option of a plain try fallible(), which of course gives a less than ideal message on failure:

      λ zig build
      error: FileNotFound
      ~/.cache/zig/p/../lib/std/Io/Threaded.zig:4866:35: 0x1044126c7 in dirOpenFilePosix (fail)
                              .NOENT => return error.FileNotFound,
                                        ^
      ~/.cache/zig/p/../lib/std/Io/Dir.zig:578:5: 0x104347d8b in openFile (fail)
          return io.vtable.dirOpenFile(io.userdata, dir, sub_path, options);
          ^
      ~/fail/main.zig:10:16: 0x10443da5f in f (fail)
          const fd = try Io.Dir.cwd().openFile(io, path, .{});
                     ^
      ~/fail/main.zig:6:5: 0x10443db47 in main (fail)
          try process_file(io, "data.txt");
          ^
      

      Error trace is helpful, but knowing which file is the problem is even more so.

      The first attempt at finding a middle ground between fully-fledged diagnostics sink pattern and a plain try is something like this:

      const fd = dir.openFile(io, path, .{}) catch |err| {
          log.err("failed to open file '{s}': {t}", .{path, err});
          return err;
      }
      

      Unsatisfactory. The friction is high, you need to come up with a reasonably- sounding error message, the “happy path” of the code is obscured, and you need to repeat this for every fallible operation.

      A worse-is-better version of the above code is

      errdefer log.err("path={s}", .{path});
      const fd = try dir.openFile(io, path, .{});
      

      That is, just log error context as key=value pairs, guarded by errdefer. The result is not pretty, but passable:

      λ zig build
      error: path=./data.txt
      error: FileNotFound
      ~/.cache/zig/p/../lib/std/Io/Threaded.zig:4866:35: 0x1044126c7 in dirOpenFilePosix (fail)
                              .NOENT => return error.FileNotFound,
                                        ^
      ~/.cache/zig/p/../lib/std/Io/Dir.zig:578:5: 0x104347d8b in openFile (fail)
          return io.vtable.dirOpenFile(io.userdata, dir, sub_path, options);
          ^
      ~/fail/main.zig:10:16: 0x10443da5f in f (fail)
          const fd = try Io.Dir.cwd().openFile(io, path, .{});
                     ^
      ~/fail/main.zig:6:5: 0x10443db47 in main (fail)
          try process_file(io, "data.txt");
          ^
      

      The friction is reduced a lot:

      • No need to come up with any error messages beyond existing variable names.
      • No need to change any of the trys.
      • The context is set per-block. If a function does several fallible operations on a file, the path needs to be specified only once.
      • The context is “telescopic” every function in the call-stack can add its own context.

      There’s one huge drawback though — the error message is logged, even if the error is subsequently handled. This is especially important in Zig 0.16, where cancelation (serendipitous-success) is a possible error for any IO-ing operation, and which is intended to be handled, rather than reported.


      Generalizing:

      • Happy path adds context to all operations in-progress.
      • Errors materialize current context.

      This does feel like a better error management strategy than decorating errors individually, when they happen. I wonder which language features facilitate this style?

      This article https://goldstein.lol/posts/error-progress/ rather convincingly argues that the answer might be “none”?

  4. May 02, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-05-02 rss

      IDA Plugin Updates on 2026-05-02

      New Releases:

      Activity:

      • binsync
      • Flare-On
      • python-elpida_core.py
        • 571d10f5: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T23:57Z
        • b2c8810a: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T23:36Z
        • 61258e7c: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T23:19Z
        • 5f377075: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T22:57Z
        • 39919049: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T22:36Z
        • d7ebf47a: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T22:19Z
        • e20890db: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T21:58Z
        • 81067ca3: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T21:39Z
        • 00fa11cc: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T21:21Z
        • 2a31da83: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T20:59Z
        • 72ab2d30: [HERMES-ROUTED] Phase 3 routing artifact 2026-05-02T20:39Z
    2. 🔗 r/LocalLLaMA I made a visualizer for Hugging Face models rss

      I made a visualizer for Hugging Face models | I built hfviewer.com, a small tool for visually exploring Hugging Face model architectures. You can paste a Hugging Face URL and get an interactive visualization of the architecture, which can make it easier to understand how different models are structured and compare them at a glance. Here is the recent Qwen3.6-27B model as an example: https://hfviewer.com/Qwen/Qwen3.6-27B And here is a side-by-side view of the Gemma 4 family: https://hfviewer.com/family/gemma-4 Feel free to try it out and give me feedback on how it can be improved! :) submitted by /u/Course_Latter
      [link] [comments]
      ---|---

    3. 🔗 r/Yorkshire Goathland is one heck of a beauty village.... rss

      Goathland is one heck of a beauty village.... | submitted by /u/leodis95
      [link] [comments]
      ---|---

    4. 🔗 r/Yorkshire Seabirds at Bempton Cliffs rss
    5. 🔗 backnotprop/plannotator v0.19.7 release

      Follow @plannotator on X for updates


      Missed recent releases? Release | Highlights
      ---|---
      v0.19.6 | Non-blocking Pi browser sessions, agent picker dropdown for OpenCode, annotate-last file resolution fix
      v0.19.5 | All-files diff view, clickable code file paths, server-side hide whitespace, non-ASCII path support
      v0.19.4 | All-files diff type, code file viewer, hide whitespace, quick-settings popover
      v0.19.3 | Configurable feedback messages, hide merged PRs in stacked PR selector
      v0.19.2 | Stacked PR review, source line numbers in feedback, diff type dialog re-show, ghost dot removal, docs cleanup
      v0.19.1 | Hook-native annotation, custom base branch, OpenCode workflow modes, quieter plan diffs, anchor navigation
      v0.19.0 | Code Tour agent, GitHub-flavored Markdown, copy table as Markdown/CSV, flexible Pi planning mode, session-log ancestor-PID walk
      v0.18.0 | Annotate focus & wide modes, OpenCode origin detection, word-level inline plan diff, Markdown content negotiation, color swatches
      v0.17.10 | HTML and URL annotation, loopback binding by default, Safari scroll fix, triple-click fix, release pipeline smoke tests
      v0.17.9 | Hotfix: pin Bun to 1.3.11 for macOS binary codesign regression
      v0.17.8 | Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish
      v0.17.7 | Fix "fetch did not return a Response" error in OpenCode web/serve modes


      What's New in v0.19.7

      v0.19.7 brings Codex plan review to Plannotator. Four PRs, two from first-time contributors, extend full plan review support to OpenAI's Codex CLI and add Codex-callable skills for review, annotate, and annotate-last. Two UX improvements for the plan and code review editors round out the release.

      Codex Plan Review via Stop Hook

      Plannotator now intercepts Codex plan submissions through Codex's Stop hook system. When Codex proposes a plan, the hook extracts the plan from the agent's rollout transcript, opens Plannotator in the browser, and lets you review, annotate, and approve or deny exactly as you would with Claude Code. Denying sends structured feedback back to Codex with continuation instructions, so the agent revises and resubmits.

      The implementation parses Codex's output format to find the latest plan content, handles both fresh plans and revised resubmissions, and supports the full Plannotator feature set: version history, plan diff, archive, and annotation. All three install scripts (install.sh, install.ps1, install.cmd) now configure Codex hooks automatically during installation when a Codex config directory is detected.

      The release pipeline also gained smoke tests that exercise the compiled binary's server startup across plan review, code review, and annotate subcommands, catching integration failures before artifacts are published.

      Codex Skills for Review, Annotate, and Last

      Codex's app interface doesn't accept ! shell commands in chat, which made invoking Plannotator awkward. This PR adds three OpenAI-compatible skill definitions under apps/skills/ that make Plannotator callable via $plannotator-review, $plannotator-annotate, and $plannotator-last directly from the Codex app.

      Each skill instructs the agent to run the Plannotator command, wait for the browser session to complete, and then act on the returned feedback without requiring an extra follow-up message from the user. This closes a workflow gap where Codex would receive annotation feedback but sit idle until explicitly prompted to continue.

      Additional Changes

      • Auto-close sidebar when TOC is empty. Documents with no level 1-3 headings (common in annotate and annotate-last sessions) no longer force-open the Table of Contents sidebar. The collapsed sidebar strip remains accessible for manual opening, and the preference resets when the document changes. Archive and annotate-folder modes are unaffected. (#651 by @backnotprop)
      • Right-click to copy path or filename in file tree. The code review file tree now has a context menu on each file row with "Copy path" (repo-relative), "Copy filename", and "Copy full path" options. Full path resolves against the active worktree or agent CWD and is hidden in PR-review mode where files aren't on local disk. (#650 by @backnotprop)

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: Run /plugin in Claude Code, find plannotator , and click "Update now".

      OpenCode: Clear cache and restart:

      rm -rf ~/.bun/install/cache/@plannotator
      

      Then in opencode.json:

      {
        "plugin": ["@plannotator/opencode@latest"]
      }
      

      Pi: Install or update the extension:

      pi install npm:@plannotator/pi-extension
      

      What's Changed

      New Contributors

      Contributors

      @ivanov17andrey authored the Codex Stop- hook plan review integration (#577), bringing full plan review support to a new agent platform. The PR included Codex session parsing, install script updates across all three platforms, CI smoke tests, a reproducible E2E test harness, and documentation updates. First contribution to the project.

      @leoreisdias added Codex skill definitions (#644) that bridge the gap between Codex app's UI and Plannotator's shell-based invocation. Also a first contribution.

      Community members who requested Codex support:

      Full Changelog : v0.19.6...v0.19.7

    6. 🔗 r/Leeds Charity scam around city centre “Educate and empower “ rss

      Idk if u guys have noticed but every few days theres a group of guys in blue jackets with educate and empower written on them that stop us asking for donations for special needs kids. It sounds super fishy to me as the council guy has stopped them often asw and they dont have any proof to show where the money we give them is going to and the website( https://educateempower.net )they show is really basic asw and just feels like a bunch of lies. Have you guys encountered them?

      Edit: people from other cities dmed me asw and said its happening there asw so
      im tagging the relevant cities.

      submitted by /u/Historical_Ad9327
      [link] [comments]

    7. 🔗 r/Yorkshire Scarborough Appreciation Post rss
    8. 🔗 r/reverseengineering How to build .NET obfuscator - Part II rss
    9. 🔗 r/Leeds Peregrine Falcoln babies are here! rss

      Im not sure if everybody in Leeds already knows this, but peregrine falcons have been nesting at Uni of Leeds Parkinson Building since 2018 on and off, and theres a live webcam feed on the University website!

      A few days ago, I saw she was sitting on about 4 eggs, and yesterday I saw babies!!

      Id encourage everyone to have a look, it's such a wholesome part of Leeds for me ♥️

      Hope links are allowed! https://sustainability.leeds.ac.uk/our- work/biodiversity/university-of-leeds-peregrines/peregrine-camera-2/

      submitted by /u/Kazekageshinobigaara
      [link] [comments]

    10. 🔗 sacha chua :: living an awesome life May 14: Sacha, Prot, and Philip Kaludercic Talk Emacs: Newcomer Experience rss

      Philip Kaludercic wanted to continue the conversation from YE24: Sacha and Prot Talk Emacs - Newbies/Starter Kits. He's spent a lot of time thinking about this as one of the main contributors to newcomers-presets, so there'll probably be much to cover!

      (America/Toronto -0400) = Thu May 14 1030H EDT / 0930H CDT / 0830H MDT / 0730H PDT / 1430H UTC / 1630H CEST / 1730H EEST / 2000H IST / 2230H +08 / 2330H JST

      We'll probably talk about:

      • Emacs 31 or Emacs 32 directions towards improving the newcomer experience
      • How the newcomers presets fits into the bigger picture
      • Documentation and guides
      • How to get more feedback from newbies (virtual focus group? mailing list? office hours?)
      • Informal community resources
      • Other things we can do to help

      Related links:

      You can e-mail me at sacha@sachachua.com.

    11. 🔗 r/LocalLLaMA Bruh rss

      Bruh | Do reporting bots even do anything? submitted by /u/Icy_Butterscotch6661
      [link] [comments]
      ---|---

    12. 🔗 r/Leeds Feeling lonely in Leeds rss

      Hi guys, I’m 23M and feeling a bit lonely in Leeds this weekend. I don’t really know anyone my own age here and with it being a long bank holiday, I’m starting to feel it a bit.

      Is there anything going on or anything you’d recommend for someone in my position so I’m not just sat at home? Appreciate any suggestions, thank you.

      submitted by /u/Solid_Antelope902
      [link] [comments]

    13. 🔗 sacha chua :: living an awesome life June 4: Emacs Chat with Ben Zanin (@gnomon@mastodon.social) rss

      On June 4, I'll chat with Ben Zanin about Emacs and life.

      (America/Toronto -0400) = Thu Jun 4 1030H EDT / 0930H CDT / 0830H MDT / 0730H PDT / 1430H UTC / 1630H CEST / 1730H EEST / 2000H IST / 2230H +08 / 2330H JST

      This session will be recorded, and I'll update this blog post with notes.

      You can add the iCal for upcoming Emacs Chat episodes to your calendar. https://sachachua.com/topic/upcoming-emacs-chats.ics

      Find more Emacs Chats or join the fun: https://sachachua.com/emacs-chat

      You can e-mail me at sacha@sachachua.com.

    14. 🔗 r/wiesbaden Kaiser Friedrich Therme rss

      Hat jemand den Kaiser Friedrich Therme ab besucht, kann mir sagen, wie es dort ist?

      Erwarte ich, dass alle völlig nackt sind, ohne die ganze Zeit ein Handtuch zu tragen, wie es in Friedrichsbad ist, oder ist es anders?

      submitted by /u/Neither-Garage-876
      [link] [comments]

    15. 🔗 r/reverseengineering libghidra - SDK for automating Ghidra from Python, Rust, and C++ rss
    16. 🔗 r/Yorkshire Richmond Mayfest off to a sunny start rss
    17. 🔗 r/reverseengineering Release: Open-source CAN bus reverse engineering suite tailored for offline ML signal decoding, MitM injection, and UDS analysis. rss
    18. 🔗 r/LocalLLaMA We are finally there: Qwen3.6-27B + agentic search; 95.7% SimpleQA on a single 3090, fully local rss

      LDR maintainer here. Thanks to the strong support of r/LocalLLaMA community LDR got very far. I haven't reported in a while because I thought I was not ready for another prominent post in one of the leading outlets of Local LLM research.

      But I think the LDR community finally there again. I think it is finally time to report again.

      Setup

      • RTX 3090, 24GB
      • Ollama backend (qwen3.6:27b)
      • LDR's langgraph_agent strategy — LangChain create_agent() with tool-calling, parallel subtopic decomposition, up to 50 iterations
      • LLM grader: qwen3.6:27b self-graded (I have used opus to review examples and it generally only underestimates accuracy)

      Benchmarks (fully local LLM with web search)

      Model | SimpleQA | xbench-DeepSearch
      ---|---|---
      Qwen3.6-27B | 95.7% (287/300) | 77.0% (77/100)
      Qwen3.5-9B | 91.2% (182/200) | 59.0% (59/100)
      gpt-oss-20B | 85.4% (295/346) | –

      sample size is small, but the benchmarks were not rerun multiple times and you can see from the other rows that this is unlikely just chance. Full leaderboard: https://huggingface.co/datasets/local-deep-research/ldr- benchmarks

      Important framing — these are agent + search scores, not closed- book

      However, also note that these are similar benchmarks results to Perplexity Deep Research (93.9%), tavily (93.3%) etc. [Tavily forces the LLM to answer only from retrieved docs (pure retrieval test). Perplexity Deep Research is an end-to-end agent and discloses no grader or sample size. ]

      Even if our results where only 90% it would already be a great success.

      Also I can confirm from using it daily that these results feel consistent with my performance on random querries I do for daily questions.

      Caveats:

      • SimpleQA contamination risk on newer base models is real
      • LLM-judge noise + Sampling error
      • bench-DeepSearch is in chinese so an advantage for the chinese qwen models
      • No BrowseComp / GAIA numbers yet - But I also dont believe we are good at this benchmark yet. I will have to run some benchmarks to verify the current state

      The thing that surprised me:

      Results seem to track tool-calling quality more than raw size for local deep research. The langgraph_agent strategy hammers the model with multi- iteration tool calls, parallel subagent decomposition, and structured output — exactly the axis where the newer Qwen generations have improved most. Hypothesis only; if anyone wants to design an ablation we'd love the data.

      Some cool LDR features that I want to additionally highlight:

      • Journal Quality System (shipped v1.6.0) - academic source grading using OpenAlex, DOAJ. I haven't seen this anywhere else in the open-source deep-research space.
      • Per-user SQLCipher AES-256 DB (PBKDF2-HMAC-SHA512, 256k iterations) — admins can't read your data at rest. No password recovery; we don't hold the keys.
      • Zero telemetry. no telemetry, no analytics, no tracking.
      • Cosign-signed Docker images with SLSA provenance + SBOMs.
      • MIT licensed. Everything open source

      Repo: https://github.com/LearningCircuit/local-deep-research

      Happy to share strategy configs, help reproduce the Qwen runs

      Thanks to all the academic and other open source foundational work that made this repo possible.

      submitted by /u/ComplexIt
      [link] [comments]

    19. 🔗 tomasz-tomczyk/crit v0.10.4 release

      What's Changed

      Resizable sidebars

      The file-tree panel and the comments panel both have drag handles on their inner edge. Widths persist across runs (consolidated into a single crit- settings cookie alongside the other UI prefs).

      General

      Internal refactors

      • chore(deps-dev): bump eslint from 10.2.1 to 10.3.0 by @dependabot in #416
      • chore(deps-dev): bump stylelint from 17.9.0 to 17.9.1 by @dependabot in #417

      Full Changelog : v0.10.3...v0.10.4

    20. 🔗 r/Leeds Recomended neighbourhoods? rss

      Hello, single 35yrs female looking to move to leeds for first time. Where should i be looking to rent?

      I will be working in the city centre but want a cute pretty neighbourhood with amenities.

      Rent £1000pm max

      Thanks!

      submitted by /u/Comfortable_Bat_9447
      [link] [comments]

    21. 🔗 r/york Lgbtq football team- rss

      Im moving to york soon and im thinking of setting up an LGBTQ football team/league.

      Start of small and just try get enough people to have a kick about a week.
      If we can grow it then make smaller 7 a-side teams and get a league going?

      Would anyone be interested if i get the ball rolling?

      submitted by /u/Total_Bed_3882
      [link] [comments]

    22. 🔗 r/LocalLLaMA Qwen3.6-27B at 72 tok/s on RTX 3090 on Windows using native vLLM (no WSL, no Docker), portable launcher and installer rss

      Qwen3.6-27B at 72 tok/s on RTX 3090 on Windows using native vLLM (no WSL, no Docker), portable launcher and installer | The angle here is native Windows, no WSL. Simple installation, open source, no telemetry. Not selling or promoting anything: https://github.com/devnen/qwen3.6-windows-server Numbers (RTX 3090, Windows 10): - 72 tok/s short prompt - 64.5 tok/s long prompt (~25k tokens) - 53.4 tok/s at 127k ctx (single GPU) - 160k ctx on PP=2 (2×3090 GPUs) Honestly, these aren't r/LocalLLaMA records. Community has hit 80–82 tok/s on a 3090 with TurboQuant 3-bit KV, and 160 tok/s on a 5090 on Linux. My launcher and patched vLLM closes that gap on Windows. Simple installation: 1. Download qwen3.6-windows-server-portable-x64.zip from the Release 2. Unzip anywhere. No admin, no pip, no Python required 3. Double-click start.bat, pick a snapshot, hit Enter 4. OpenAI-compatible endpoint at http://127.0.0.1:5001/v1 I had to build a patched vLLM fork for Windows to fix a few issues and make this work. I am including a portable launcher that ships the prebuilt wheel. First run installs the bundled vLLM wheel + deps into the embedded Python (~5–15 min, one-time), then offers to auto-download the Lorbus AutoRound INT4 quant from HuggingFace if you don't already have it. Subsequent launches skip straight to the TUI. Tested on Windows 10 + 2× RTX 3090 with the Lorbus AutoRound INT4 quant. Should work on any Ampere or Ada card (3090, 4090, A6000). Won't work on Pascal, Turing, Arc, or AMD. I have a similar launcher and a patched vLLM for Linux with some very competitive numbers, but it is still a work in progress. If you're on a 3090, 4090, or A6000 on Windows, give it a spin and post your numbers. Full details, patches, benchmarks, and config snapshots: https://github.com/devnen/qwen3.6-windows-server RTX 50-series (Blackwell) update: the bundled wheel doesn't ship sm_120 kernels, so 50-series cards fail at boot today. SystemPanic just shipped vllm-windows v0.20.0 with CUDA 13 + Blackwell, so it's fixable. I need to rebase my patches onto it before a 50-series build can ship. submitted by /u/One_Slip1455
      [link] [comments]
      ---|---

    23. 🔗 r/LocalLLaMA A Dark-Money Campaign Is Paying Influencers to Frame Chinese AI as a Threat rss

      A Dark-Money Campaign Is Paying Influencers to Frame Chinese AI as a Threat |

      Build American AI, a nonprofit linked to a super PAC bankrolled by executives at OpenAI and Andreessen Horowitz, is funding a campaign to spread pro-AI messaging and stoke fears about China.

      So Local LLM is important .... always! Need to support who giving us more Open source & weights. Last month, Half of the open models came from there only. submitted by /u/pmttyji
      [link] [comments]
      ---|---

    24. 🔗 r/Leeds Comic & Gaming stores in Leeds centre. rss

      I used to be a regular in Leeds but aside from a couple of quick stops I haven't had a good wander in maybe fifteen years so whilst I can still find my way around I have no idea what's there.

      My sister asked me late last night if I could take my nephew into town for Free Comic Book Day as she's working so I was wondering if anybody could give me a list of comic and gaming stores in the city centre.

      Thanks!

      submitted by /u/RetroSquadDX3
      [link] [comments]

    25. 🔗 backnotprop/plannotator v0.19.6 release

      Follow @plannotator on X for updates


      Missed recent releases? Release | Highlights
      ---|---
      v0.19.5 | All-files diff view, clickable code file paths, server-side hide whitespace, non-ASCII path support
      v0.19.4 | All-files diff type, code file viewer, hide whitespace, quick-settings popover
      v0.19.3 | Configurable feedback messages, hide merged PRs in stacked PR selector
      v0.19.2 | Stacked PR review, source line numbers in feedback, diff type dialog re-show, ghost dot removal, docs cleanup
      v0.19.1 | Hook-native annotation, custom base branch, OpenCode workflow modes, quieter plan diffs, anchor navigation
      v0.19.0 | Code Tour agent, GitHub-flavored Markdown, copy table as Markdown/CSV, flexible Pi planning mode, session-log ancestor-PID walk
      v0.18.0 | Annotate focus & wide modes, OpenCode origin detection, word-level inline plan diff, Markdown content negotiation, color swatches
      v0.17.10 | HTML and URL annotation, loopback binding by default, Safari scroll fix, triple-click fix, release pipeline smoke tests
      v0.17.9 | Hotfix: pin Bun to 1.3.11 for macOS binary codesign regression
      v0.17.8 | Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish
      v0.17.7 | Fix "fetch did not return a Response" error in OpenCode web/serve modes
      v0.17.6 | Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix


      What's New in v0.19.6

      v0.19.6 ships 3 PRs closing 4 long-standing issues. Two changes stand out: Pi browser sessions are now fully async, so review and annotation commands no longer lock the chat while the UI is open; and OpenCode gets a visible agent picker on the Approve button, replacing the buried Settings-only agent switch. A fix for annotate-last mode rounds out the release.

      Non-Blocking Browser Sessions for Pi

      Every Plannotator command in Pi that opens a browser — plan review, code review, annotation, and annotate-last — previously blocked the chat session until the browser tab was closed. The chat input was locked the entire time. If the review server crashed, or the user simply forgot to close the tab, the Pi session hung indefinitely with no way to recover except restarting.

      This release rewrites the Pi browser session lifecycle from the ground up. All four browser-based flows now return control to the chat immediately after opening the browser. Users can continue working, ask follow-up questions, or start entirely new tasks while the review UI stays open in a separate tab. When the user submits feedback, approves a plan, or closes the browser, the decision is forwarded back into the Pi session automatically.

      The implementation introduces a BrowserDecisionSession abstraction that wraps the server lifecycle, browser launch, and decision forwarding into a single async pattern. Each session tracks its own state and cleanup, so multiple review sessions can coexist without interfering. A stop() mechanism ensures sessions are cleaned up even if the browser tab is abandoned, preventing zombie server processes.

      This also required extracting assistant message parsing into a dedicated module (assistant-message.ts) and building a session state tracker (current-pi-session.ts) to correctly scope tool availability and saved state across the new async boundaries.

      Agent Picker Dropdown for OpenCode

      OpenCode users can now select which agent to switch to directly from a split Approve button, without opening Settings. The button label shows exactly what will happen: "Approve → Build", "Approve → Orchestrator", or just "Approve" when switching is disabled. Click the chevron to see all available agents from the OpenCode API, plus a "No switch" option that prevents any agent mode change on approval.

      Before this change, agent switching was controlled by a setting buried in the Plannotator Settings panel. Most users didn't know it existed. The default was "Build", which meant every plan approval silently switched the CLI to Build mode. Users running Orchestrator workflows, Sisyphus mode, or custom agent topologies would find their agent unexpectedly changed after approving a plan.

      The "No switch" option also changes the approval prompt itself. When selected, the "approved with notes" message no longer includes "Proceed with implementation," letting the current agent decide its own next step. This is particularly useful for planning-only workflows where approval shouldn't trigger immediate implementation.

      Non-OpenCode origins (Claude Code, Gemini CLI, Copilot CLI) are completely unaffected and continue using the standard Approve button.

      Fix Code File and Linked Doc Resolution in Annotate-Last Mode

      When annotating the last assistant message (plannotator last or /plannotator-annotate last), clicking a code file path or linked document returned a 404. The annotate-last mode sets filePath to the literal string "last-message", which was passed through as a filesystem base directory for resolving relative paths. The server tried to resolve files against "last- message" as a directory, which doesn't exist.

      The fix guards both the code file popout and linked doc URL builders to skip non-path values and fall back to the project root. Normal file and folder annotation are unaffected since those use real filesystem paths.


      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: Run /plugin in Claude Code, find plannotator , and click "Update now".

      OpenCode: Clear cache and restart:

      rm -rf ~/.bun/install/cache/@plannotator
      

      Then in opencode.json:

      {
        "plugin": ["@plannotator/opencode@latest"]
      }
      

      Pi: Install or update the extension:

      pi install npm:@plannotator/pi-extension
      

      What's Changed

      • feat(pi): make browser review and annotation sessions async by @backnotprop in #645
      • feat(opencode): agent picker dropdown on Approve button by @backnotprop in #648
      • fix(ui): code file and linked doc resolution in annotate-last mode by @backnotprop in #647

      Community

      Four issues drove the agent picker feature, all from users who were surprised or frustrated by invisible agent switching:

      Full Changelog : v0.19.5...v0.19.6

    26. 🔗 Probably Dance Apple is Holding my Pictures Hostage Until I Accept Their New Terms of Service rss

      It started off a few months ago, when my iPad suddenly couldn't play videos any more that it had recorded. It would show the first frame, but hitting the play button wouldn't do anything. I googled around but couldn't find anything. I had recently installed an update, so I figured I'll just wait for the next update to fix things.

      But the next update didn't fix things, and it turns out the reason is actually a little dystopian: Apple has deleted my local copies of my videos and will only give them back if I sign their new terms of service.

      You may have noticed that the preview pictures in the video above are often blurry. Soon after this, the pictures on my iPad also started looking oddly blurry. Eventually we noticed a little info icon next to the pictures that, when tapped, says "Unable to Load Photo. An error occured while loading a higher quality version of this photo."

      What is it talking about? Why would the thumbnail load but the full picture doesn't? But at least this is a message I can google for. I need to change the "iCloud -> Photos" settings to "Download and Keep Originals."

      I never paid for Apple's iCloud service so I am a little surprised that not only were my pictures uploaded, the local copy was deleted. Here is a picture of the storage in my iPad:

      See that yellow bar for "Photos"? It's almost not there because my local photos were almost all deleted.

      This scared me. I knew I should have backed these up… Google said I should go to the "iCloud" settings but those are grayed out, untappable:

      Since I never paid for iCloud, this is not too surprising, but what do I do now? I start by installing updates. That doesn't help, but eventually I find the right spot:

      So I agreed to the new terms of service. And as soon as I do, my videos are back. I immediately turn on the setting to keep a local copy of all my photos and videos.

      Are they Allowed to Do this?

      I obviously didn't read the new terms of service before accepting them. They're long. I asked Claude if they say anything about holding my pictures hostage, but there is no clear sentence saying they can withhold the content when they update their terms of service. They only say that they can

      1. change the terms of service with 30 days notice (Section I.E, "Changing the Service")
      2. terminate my service if I violate the agreement (Section VII.B, "Termination by Apple")
      3. ban me if my use of the service "intentionally or unintentionally threatens Apple’s ability to provide the Service" (Section I.C, "Limitations on Use")
      4. take "steps" they believe are "reasonably necessary or appropriate" to enforce compliance with any part of the agreement. (Section V.E, "Access to Account and Content")
      5. may remove the service "for indefinite periods of time", or cancel the service "in accordance with the terms of this agreement" (Section IX, "DISCLAIMER OF WARRANTIES; LIMITATION OF LIABILITY")

      Number 1 happened, they didn't do number 2 or number 3 here. Number 4 might apply superficially, because they want to force me to sign the new agreement, but I didn't break any terms of the version of the agreement that I actually agreed to. But maybe none of that actually matters because number 5 says they are free to not provide the service anyway. But on the other hand "in accordance with the terms of the agreement" should mean that they're limited by the previous terms (though I'm not a lawyer).

      So neither Claude nor me sees anything here that says they can block access to my videos until I sign the new terms of service. In particular the "Access to Account or Content" section is really weak, which makes me think they're not allowed to block me from my own videos.

      In theory.

      In practice I signed the new agreement like everyone else, because what's supposed to happen if they do something that they're not allowed to do according to their own agreement? That's just how this works. The agreement limits me, not them.

      So What Evil Thing Happened Here?

      It's hard to say which act exactly led to this dystopian setting where a company can make a copy of your picture, delete the originals, put a new agreement in front of you, and force you to agree to it in order to get your pictures back. But what exactly is the evil thing? Every individual step was not so bad:

      • They upload the pictures to iCloud even though I didn't sign up.
        • They always give you 5GB for free so might as well use them to have a backup of your photos. That's probably a good thing to do, because people (like me) are irresponsible and don't do backups on their own.
      • They delete local pictures by default.
        • This is probably very useful for people who have lots of online storage, more than they have space on their iPad.
      • They don't allow you to use iCloud if you don't agree to the new Terms of Service.
        • What else are you supposed to do? According to their own agreement they probably have to still provide access to the pictures, but that seems hard.
      • Repeatedly force you to agree to new Terms of Service that are too long for any sane person to read
        • South Park did an episode about this, but the new terms of service are probably not bad and they probably made changes for a reason.
      • Ship a locked down device where you can't run arbitrary software and regularly have to install updates and which automatically does weird things like the above.
        • Yeah there's definitely a bit of "Stallman was right" here. In particular I probably would have done backups already if I could run my normal backup software on there. But that's a terminal app and I don't think I can ssh onto an iPad.

      I don't know. None of these are really evil. I can see good people doing these things for not bad reasons. And nothing really bad happened here. I just had to tap "I Agree" to some agreement that I didn't read. But it sure doesn't feel good. I thought you'd at least get a warning before buying the device: "This device may delete your pictures. We'll make a copy and promise to give them back as long as you agree to all future terms of service."

      Also what's the lesson for me personally, if I want to not be evil? Which of the above things should I refuse to do? Every individual step isn't so bad. I guess you have to notice the patterns, notice when other people think what you're doing is bad (FSF, South Park), and then actually take that seriously, not just dismiss it…

      And what should Apple do? Obviously they should allow access to the pictures and videos even if I haven't signed the new agreement. That small step would move them from "dystopian" back into good territory. But I do notice that they have already walked into a part of the good territory where it's very narrow and small missteps move you into bad areas…

      Will this change my behavior in any way? I already don't buy most apple products, precisely for the "walled garden" reason. I have this iPad and that's it. I'll try to not buy more.

    27. 🔗 Julia Evans Testing Vue components in the browser rss

      Hello! One of my long term projects on here is figuring out how to write frontend Javascript without using Node or any other server JS runtime.

      One issue I run into a lot in my frontend JS projects is that I don't know how to write tests for them. I've tried to use Playwright in the past, but it felt slow and unwieldy to be starting these new browser processes all the time, and it involved some Node code to orchestrate the tests.

      The result is that I just don't test my frontend code which doesn't feel great. Usually I don't update my projects much either so it doesn't come up that much, but it would be nice to be able to make changes with more confidence! So a way to do frontend testing that I like has been on my wishlist for a long time.

      idea: just run the tests in the browser tab

      Alex Chan wrote a great post a while back called Testing JavaScript without a (third-party) framework in response to one of my previous posts in this series that explained how to write a tiny unit-testing framework that runs in a page in browser.

      I loved this post at the time, but it only talked about unit testing and I wanted to write end-to-end integration tests for my Vue components, and I didn't know how to do that.

      So when I was talking to Marco the other day and he said something like "you know, you can just run tests for your Vue components in the browser", I thought "hey, I should try that again!!!"

      I just did all of this yesterday so certainly there's a lot to improve but I wanted to write down a few things I noticed about the process before I forget.

      This was a bit tricky for me because the Vue site usually assumes that you're using Node as part of your build process in some way (there's a lot of "step 1: npm install THING), and I didn't want to use Node/Deno/etc. But it turned out to not be too complicated.

      The project I'm going to talk about testing is this zine feedback site I wrote in 2023.

      the test framework: QUnit

      I used QUnit. It worked great but I don't have anything interesting to say about how it works so I'll leave it at that. I think that Alex's "write your own test framework" approach would have worked too. I followed these directions.

      I did appreciate that QUnit has a "rerun test" button that will only rerun 1 test. Because there are so many network requests in my tests, having a way to run just 1 test makes it a lot less confusing to debug the test.

      step 1: set up the component for testing

      The first thing I needed to do was get my Vue components set up in the test environment.

      I changed my main app to put all my components in window._components, kind of like this:

      const components = {
        'Feedback': FeedbackComponent,
        ...
      }
      window._components = components;
      

      Then I was able to write a mountComponent function which does basically exactly the same thing my normal main app does (render a tiny template with the component I want to use). The only differences are:

      1. I can optionally pass some some extra data to use as its props.
      2. It mounts the component to a temporary invisible div which will get removed from the DOM after the test is done. The div is positioned off the page (position: absolute; top: -10000, ...) so you can't see it.

      Here's what using the mountComponent function looks like:

      const {div} = mountComponent(
        '<Page :feedbacks="feedbacks" id=2 />',
        {feedbacks: [testFeedback]},
      );
      

      and here's the code for it:

      function mountComponent(template, data) {
        const app = Vue.createApp({
          template: template,
          data: () => data,
        })
        for (const [c, v] of Object.entries(window._components)) {
          app.component(c, v);
        }
        const div = document.getElementById('qunit-fixture')
                   .appendChild(document.createElement('div'));
        return div;
      }
      

      The result is a div where I can programmatically click, fill in form data, check that the right content appears, etc.

      step 2: add some fixture data

      Because I was writing end-to-end integration tests to make sure my client JS worked properly with my server, I needed to have some test data in my database. So I wrote ~25 lines of SQL to set up some test data in my database, and added an endpoint to my dev server to run the SQL to reset the test data to a known state.

      async function reset() {
          return fetch('/api/reset_test_data', {method: "POST"})
      }
      

      Then I just run await reset() at the beginning of any test that needs the test data.

      My reset() function actually doesn't always totally reset everything which is kind of bad, but it was workable to start with and can always be improved.

      step 3: a basic test

      Here's what a basic test looks like! Basically we're rendering the div and make sure it contains some approximately correct data.

      QUnit.test('renders feedback content', async function (assert) {
        const {div} = mountComponent(
          '<Page :feedbacks="feedbacks" id=2 image=2 page_hash=2 />',
          {feedbacks: [testFeedback]},
        );
        assert.ok(div.textContent.includes('loved this section'));
      })
      

      Those are all the basic pieces! Now here are a few issues I ran into along the way

      waiting for parts of the page to render

      I have a lot of network requests in my tests, and it takes time for them to finish and for the Vue code to do what it has to do with the results and update the DOM.

      I think we all learned a long time ago that putting random sleep() calls in your tests and hoping that the timings are right is slow and flaky and extremely frustrating, so I needed a different way.

      As far as I can tell the normal way to deal with this is to figure out a way to tell from the DOM whether it's okay to proceed or not. Like "if this button is visible, we can ".

      So I wrote a little waitFor() function that polls every 20ms to see if a condition has finished yet. It times out after 2 seconds.

      Here's what using it looks like:

      QUnit.test("click item", async function (assert) {
        const {div} = mountComponent(
          '<Feedback zine_id="test123" image_width="800px" />',
          {});
        const item = await waitFor(() => div.querySelector('.feedback-item'));
        item.click();
        // rest of test goes here... 
      })
      

      It looks like there are a lot of implementations of this concept out there and they're all better thought-through than mine. (from a quick Google: qunit- wait-for, playwright expect.poll)

      figuring out the right thing to wait for is not straightforward

      In some cases I thought I'd identified the right thing to wait for in the DOM ("just wait for this textarea to appear!') but it turned out that because of some internal details of how my program works, actually I needed to wait for something else later on which was hard to pin down.

      I ended up changing one of my components to add some random value to the DOM when it was finished an important action (like data-this-thing-is- ready=true) which didn't feel great.

      My best guess is that the right way to fix this kind of test issue is a refactor that also makes the app more reliable for the users: if there's an element in the DOM that isn't actually ready for the user to interact with, maybe I shouldn't be displaying it yet!

      adding some CSS classes to identify things (but is that right?)

      I ended up adding a few classes to HTML elements that I needed to find in the tests, either because I needed to click on them or wait for them to appear in the DOM.

      I might want to change this approach later - frontend testing frameworks seem to suggest avoiding using CSS classes and instead using something like getByRole or as a last resort something like a data- testid. Feels like there's a way to make the app more accessible and easier to test at the same time.

      filling out forms is tricky

      To fill out a form, I can't just set the value, I also need to dispatch an event to tell Vue that the element has changed. For example, checkbox and textarea need different kinds of events.

      textarea.value = 'banana banana banana';
      textarea.dispatchEvent(new Event('input'));
      
      
      
      checkbox.checked = true;
      checkbox.dispatchEvent(new Event('change'));
      

      This is kind of annoying and it made me realize why I might want to use some kind of UI testing library, for example:

      test coverage

      I want to have an idea of what my test coverage was, and it turns out that Chrome actually has a built-in code coverage feature for JS and CSS!

      My JS is bundled into a file called bundle.js with esbuild, so I could just look at bundle.js and see which lines weren't covered.

      The process was a little finicky: I had to turn off sourcemaps in the Chrome devtools to get this to work, and there's a specific not super obvious series of actions I have to do in order to see the coverage data.

      this was so fun!

      As usual with these posts I've never really worked as a frontend or backend developer (other than for myself!) and I feel like I'm constantly learning how to do super basic tasks.

      I really had a blast doing this. My frontend projects always feel so fragile because they're untested, and maybe one day I'll have a test suite I'm confident in!

      Some things I'm still thinking about:

      • While writing this post I found this frontend testing library called Testing Library that has a lot of guidelines for how to write tests that are very different from my initial ideas. I experimented with rewriting everything to use Testing Library and it felt pretty good, so we'll see how that goes. They distribute a .umd.js file that works without Node.
      • I'm not sure how I feel about not having a way to run these tests on the command line at all. Maybe there's a simple way to work primarily in the browser but have an way to run them in CI too if I want?