Shared posts

12 Sep 02:52

Welcome to the Crusades, Episode 2: Taranto, 1096

Tom Roche

EXCELLENT, excepting that
1. the Crusades have ... kinda been done, podcast-wise
2. the episode notes claim to 'look especially at the Normans under Bohemond of Taranto' which /this/ episode does /not/: plenty of Normans, but they don't get to Bohemond until end of ep (Robert Guiscard is Big Norman in this ep), when Our Team says ~"we'll do Bohemond in ep#=4"

We've released the first two episodes of our standalone miniseries with the folks from We're Not So Different⁠. Get the rest of the episodes here!

The expedition begins to take shape. We continue to explore the fallout from Pope Urban II’s call for Crusade at the Council of Clermont, as lords from across France prepare to set off. We look especially at the Normans under Bohemond of Taranto, who will play an outsized role in the campaign to come and whose conquest of Sicily offers some insight into how that campaign would be conducted.

12 Sep 02:48

Welcome to the Crusades, Episode 1: Rome, 1095

In lieu of a typical AP episode this week, we're releasing the first two episodes of our standalone miniseries on the First Crusade with the crew from We're Not So Different⁠. Get the rest of the series here.

Our journey through the First Crusade starts where the Crusaders themselves did: in western Europe with Pope Urban II and the Council of Clermont. We discuss conditions in Latin Christendom in the late 11th century, what prompted the Pope’s call for Crusade, and how it was received by European nobles.

26 Jun 16:10

"Israel Has Walked Off a Cliff" - John Mearsheimer, Alexander Mercouris & Glenn Diesen

by The Duran
Tom Roche

Mearsheimer EXCELLENT as usual

"Israel Has Walked Off a Cliff" - John Mearsheimer, Alexander Mercouris & Glenn Diesen

26 Jun 02:16

Backstory to Assange's secret deal for freedom

Tom Roche

VERY EXCELLENT (if too brief: <19 min content) interview with author Andrew Fowler on the Julian Assange (/JA/) story c2010-2025, including

+ Manning Wikileaks, esp Collateral Murder
+ US-Sweden-UK plot against JA for his "crime" of exposing the crimes of their empire, but ...
- unfortunately doesn't mention what mostly got JA done, which was exposing the US Corporate Democrats' fixing the 2016 US presidential election (esp the Democrats primary)
+ /much/ too briefly mentions the sexcrime libel with which JA was smeared for a decade, but fortunately mentions the [report](https://spcommreports.ohchr.org/TMResultsBase/DownLoadPublicCommunicationFile?gId=24838) (archived [here](http://web.archive.org/web/20250618221957/https://spcommreports.ohchr.org/TMResultsBase/DownLoadPublicCommunicationFile?gId=24838)) by [Nils_Melzer](https://en.wikipedia.org/wiki/Nils_Melzer#Assessment_of_Julian_Assange%27s_confinement) that utterly crushes the Swedish sex smear
+++++ in Melzer report (above): skip starting bureaucratese to bottom of p2, read at least to end of p12
+ the 2024 deal to free JA (Rudd and Albanese vs Biden and the US deepstate)
+ Assange's legacy esp for global journalism

A year ago this week Julian Assange was released from prison after a 14-year fight for freedom. Assange accepted a guilty plea of conspiring to obtain and disclose classified U.S. documents in exchange for being returned home to Australia. But how did this deal come about and what happened in the lead-up to his return home? Journalist Andrew Fowler shares the inner-dealings and joins the dots on the backstory of the negotiations to release Assange.

  • Guest: Andrew Fowler - journalist and author of The Most Dangerous Man in the World: Julian Assange and his secret White House deal for freedom
  • Producer: Sarah Allely
25 Jun 19:13

NYC fiscal crisis: canonizing Felix once again

by Doug Henwood
Tom Roche

Felix Rohatyn, Lazard Freres, Municipal Assistance Corporation--BURN IN HELL

I’ve got a review on The Nation‘s site of a new documentary on the NYC fiscal crisis, co-directed and -produced by Michael Rohatyn, son of the chief imposer of austerity 50 years ago, Felix Rohatyn. It was one of the opening battles of the class war from above, and the role of liberals like Felix in engineering it should never be forgotten.

25 Jun 02:19

E215 - Tracking Think Tanks w/ Ben Freeman and Nick Cleveland-Stout

Tom Roche

VERY EXCELLENT

Subscribe now to skip the ads and get more content.

Ben Freeman and Nick Cleveland-Stout from the Quincy Institute join the program to talk about their Think Tank Funding Tracker, a repository that tracks funding from foreign governments, the U.S. government, and Pentagon contractors to the top 50 think tanks in the United States over the past five years. The group discusses think tanks’ role in the “military-intellectual” complex, what specific foreign funders like the UAE and UK might be looking to influence, why certain governments like Ukraine and China gave little to no money, the lack of transparency among individuals working in sectors like journalism and government who also work with think tanks, the utilization (and under-utilization) of the Foreign Agents Registration Act, how to restructure the order so that expertise isn’t limited to these kinds of institutions, and how to make think tanks more democratically accountable in the meantime. 


Read the Quincy Institute's brief on their project, “Big Ideas and Big Money: Think Tank Funding in America.”

24 Jun 18:12

Irreal: Making TRAMP Faster

by Irreal

One of Emacs’ really nice features is TRAMP. It allows you to edit files on a remote system and otherwise interact with that system as if you were working on your local machine. The problem with it is that it can sometimes be slow, even unusably so.

Troy Hinckley over at Core Dumped has a very interesting post on making TRAMP faster. Oddly, almost everything he does is merely adjusting settings. He writes a bit of code to implement caching but even that is minimal.

Hinckley’s post is long and complicated because he explains what he’s doing and why it works. He’s spent a lot of time profiling and researching how TRAMP works. That’s nice because it means that he’s not just trying things to see if they work.

This is a short post because rather than simply listing the things that Hinckley did without explaining the reasons for them, I’m going to send you over to his post to get the full story. If you’ve tried using TRAMP but found it too slow for your particular workflow, take a look at Hinckley’s post. His changes are easy to implement so you can try them out without a lot of effort.

Happily, my use of TRAMP mostly involves the local network or remotes connected with a high speed network so I usually don’t experience these slowdowns. Even so, it’s probably worth implementing his changes.

24 Jun 16:46

Peter Povinec: Fault-tolerant Org Links

by Peter Povinec

I’m sure many Org users have experienced this: you reorganize your notes, maybe renaming a file or moving a section to a different Org file, and a few weeks later you open a link in another note only to be greeted by an unexpected prompt: “No match - create this as a new heading?”. Org tries to be helpful, even creating a new buffer for the non-existent file, assuming all along that you are creating a wiki and normally insert in your text links to targets that don't exist yet. But what if that is not your use-case? What if, instead of popping a new buffer and disrupting your flow, you want to be told that you got a broken link (knowing full well that the link target exists somewhere)? Then you can utter an expletive and carry on reading whatever you were reading, or try to find the intended target and fix the link.

Broken Org links are an unfortunate fact of life when your files and headings change over time. In my case, I kept stumbling on dead links in my org notes that have been curated for decades and survived multiple moves between cloud storage providers, note management systems (remember remember.el?), and other reorgs. I am not a big fan of spending a lot of time migrating my files and rewiring everything proactively. I wished for an Org setup that would detect a broken link and fix it right there and then, as I tried to follow it. In a sense, I wished for Org links to be fault-tolerant. At the same time, I didn't want a heavy solution, with its own consistency and maintenance burden, like globally unique Org Ids or a custom database.

I created a small set of tools to help detect and repair broken links in my Org files on the fly. My Org Link Repair code consists of three little helpers:

  • A checker hook /org-test-file-link that intercepts broken links before Org tries to apply its built-in 'nonexistent target' logic.
  • A transient menu /olr-transient to provide a quick interface for automated and manual broken link recovery tasks.
  • An interactive repair mode /olr-manual-mode that guides a user through fixing broken links one by one.

Together, these additions make it much easier to stay on top of link rot in my notes without altering how I normally create and use Org links. Let’s look at each part and how they work together in practice.

A side note on the UX: One of my design goals was to guide the user to perform the needed actions without relying on their familiarity with Org Link Repair flow. I expect this flow to be exercised rarely enough that even a user who has done it before is not expected to remember key bindings or the steps to repair their broken link. The code should try to make the process seamless and straightforward.

The helpers that I show are meant as a starting point and can be adapted or extended. I implemented detection of broken file links and a manual (user-assisted) repair strategy, because file links were the ones breaking for me and the manual strategy is the most general (the correct target file may be in an abandoned Google drive, an encrypted file bundle, or anywhere). Other link types could be tested and different repair strategies could be implemented, including a fully automated strategy, if the likely target file location is known, or can be easily searched for. Even web links could be handled similarly: detect broken links to web pages that have disappeared, and rewrite them to use a web archive (like the Wayback machine).

If you can’t prevent links from breaking, at least make them easy to find and fix.

Catching Broken Links

The first thing to do is to change the value of org-link-search-must-match-exact-headline from its default setting of query-to-create. That eliminates the wiki-centric query to create a new heading when following a broken link. But it doesn't prevent Org from popping a new buffer for a link pointing to a nonexistent file name. To suppress that, we need to do a bit more work.

Luckily Org developers provided the org-open-at-point-functions hook which makes it straightforward to intercept the link opening flow and detect a broken link due to non-existent file early. Here is my interceptor that checks for broken file links and bails out with a user error on non-existent files. It could be expanded to handle other link types and other broken link scenarios. Note that the error message tells the user what key binding to use to initiate the link repair.

(custom-set-variables '(org-link-search-must-match-exact-headline t))

(defun /org-test-file-link ()
  "Check if the file link target file exists before following it."
  (let ((ctx (org-element-context)))
    (when (and (eq (org-element-type ctx) 'link)
               (string= (org-element-property :type ctx) "file"))
      (let ((file (org-element-property :path ctx)))
        ;; If the file exists, return nil to let org-open-at-point continue
        (if (not (file-exists-p file))
            (user-error (concat "Target file not found; Use "
                                (substitute-command-keys "\\[/olr-transient]")
                                " to repair link to %s") file))))))

(add-hook 'org-open-at-point-functions #'/org-test-file-link)

A Transient Menu for Link Repair Tasks

I am using Emacs’ Transient library (the same engine behind Magit’s menus) to create a one-stop menu for all Org Link Repair activities. The command /olr-transient is a prefix command that, when invoked, pops up a transient menu with several relevant actions. This spares me from memorizing multiple separate commands or key bindings. I just hit one key sequence to get the menu, then select what I need. Here’s my initial definition of the transient menu:

(transient-define-prefix /olr-transient ()
  "Transient menu for Org Link Repair."
  [:description "Org Link Repair transient: fix your broken links\n\n"
   ["Test/Repair"
    ("l" "Lint all links in the buffer" /org-lint-links :transient nil)
    ("m" "Manually find the new target" /olr-manual-mode :transient nil)]
   ["Display/Navigate"
    ("n" "Next link" org-next-link :transient t)
    ("p" "Previous link" org-previous-link :transient t)
    ("d" "Display toggle" org-toggle-link-display :transient t)]
   ["Other"
    ("q" "Quit" transient-quit-one :transient nil)]])

(global-set-key (kbd "<f2> <return>") #'/olr-transient)

The manual repair strategy is the only one offered for now. The menu also offers linting the links in the current buffer (I have a customized version of the built-in org-lint for that), link navigation and display toggling commands.

Using a transient menu here feels like overkill for just a few commands, but I anticipate adding more link-related utilities over time. Even now, it’s nice to have a single “hub” for link management. I don’t use it every day, but when I suspect there might be broken links, I know where to go. It’s also convenient when a broken link does pop up unexpectedly. I can quickly bring up this menu and choose to repair it on the spot.

Manual Repair Strategy — Guided Link Fixing

This is the most general strategy which is why I implemented it first. The tradeoff is that it relies on the user knowing where the intended link target is and navigating to it. I found that I usually remember what happened to my abandoned Org files, even after years of not visiting them. I can usually recover them from an old archive, or one of my no-longer-used Dropbox accounts.

The strategy implements a global minor mode and a set of functions to initiate the repair flow and to complete it. When the user chooses to use this strategy, the code remembers the current location (the location of the broken link) and activates the /olr-manual-mode minor mode while the user is free to do whatever they need to locate the correct target org file and a headline. A mode line lighter provides a visual clue that the repair flow is in progress. Once the target has been located, the user would hit C-c C-c to complete the repair, which will interpret the current point as the intended link target. The code will replace the broken link at the starting location with the new link. The user is free to abandon the flow at any time with C-c C-k.

Here is my code:

;; 
;;; Org Link Repair - Manual (user-assisted) Strategy
;; 
(defvar /olr-manual-marker nil
  "Marker pointing at the original (broken) link.")

(defvar /olr-manual-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "C-c C-c") #'/olr-manual-complete)
    (define-key map (kbd "C-c C-k") #'/olr-manual-abort)
    map)
  "Keymap for `/olr-manual-mode'.")

(easy-menu-define /olr-manual-mode-menu /olr-manual-mode-map
  "Menu for OLR Manual Mode"
  '("OrgLinkRepairManualMode"
    ["Complete" /olr-manual-complete t]
    ["Abort" /olr-manual-abort t]))

(define-minor-mode /olr-manual-mode
  "Global minor mode for Org Link Repair manual strategy.
When enabled, the marker pointing at the link at point is saved.  The user
is expected to navigate to where the link should be pointing at and call
`/olr-manual-complete' to repair the link, or `/olr-manual-abort' to cancel.
Attempting to enable this minor mode outside an Org-mode derivative, or
if the point is not at an Org link will fail with a user error."
  :lighter " LinkRepair"
  :global t

  (if (not /olr-manual-mode)
      (setq /olr-manual-marker nil)
    (unless (derived-mode-p 'org-mode)
      (user-error "Not in an Org buffer"))
    (unless (eq (org-element-type (org-element-context)) 'link)
      (user-error "Not at an Org link"))
    (setq /olr-manual-marker (point-marker))
    (message
     (substitute-command-keys
      "Manual link repair mode initiated.  Navigate to intended link target,
press \\[/olr-manual-complete] to complete, or \\[/olr-manual-abort] to abort."
      ))))

(defun /olr-manual-complete ()
   "Complete Org Link Repair by replacing the broken link at saved marker
with a new link targeted at point.
The user is expected to have navigated to the location of the new link target.
This function will call `org-store-link', then use `org-insert-all-links' to
replace the broken link, location of which was saved by `/olr-manual-mode'."
  (interactive)
  (org-store-link nil t)
  (unless (and /olr-manual-marker (marker-position /olr-manual-marker))
    (error "OrgLinkRepair: Lost marker to the original link location"))
  (switch-to-buffer (marker-buffer /olr-manual-marker))
  (goto-char (marker-position /olr-manual-marker))
  (/olr-manual-mode -1)
  (let* ((oldctx (org-element-context))
         (oldstart (org-element-property :begin oldctx))
         (oldend (org-element-property :end oldctx))
         oldlink newlink)
    ;; Delete the old link at point
    (when (and oldstart oldend)
      (setq oldlink (buffer-substring oldstart oldend))
      (delete-region oldstart oldend))
    ;; Insert the new link
    (org-insert-all-links 1 "" "")
    (let* ((newctx (org-element-context))
           (newstart (org-element-property :begin newctx))
           (newend (org-element-property :end newctx)))
      (goto-char newstart)
      (setq newlink (buffer-substring newstart newend)))
    ;; Notify the user: audibly+visibly (hopefully after auto-revert messages)
    (ding)
    (run-with-idle-timer
     0.2 nil
     (lambda () (message (concat "Modified buffer by replacing link %s with %s."
                            "\nSave the buffer to keep changes!")
                    oldlink newlink)))))

(defun /olr-manual-abort ()
  "Abort manual Org Link Repair."
  (interactive)
  (unless (and /olr-manual-marker (marker-position /olr-manual-marker))
    (error "OrgLinkRepair: Lost marker to the original link location"))
  (switch-to-buffer (marker-buffer /olr-manual-marker))
  (goto-char (marker-position /olr-manual-marker))
  (/olr-manual-mode -1)
  ;; Notify the user
  (message "Org Link Repair aborted."))

Limitations and Next Steps

Not a Complete Solution: This toolkit currently provides early interception for broken file links only. It could be extended to catch other link types if doing it early would be beneficial. For example opening web links may pop a browser window, which is annoying if we could know ahead of time that it will fail. The manual repair strategy will work for any link type, as long as it is supported by org-store-link. Again, not for web links opened in a browser.

Manual Effort: While the repair mode makes fixing easier, it’s still a manual process. I have to find the new targets or decide to remove links. There’s room for automation, e.g. suggesting likely new locations for a file (perhaps by searching for a filename in a known directory). At the moment, I actually prefer the manual control, but smarter suggestions could speed things up.

Workflow UX: I experimented with making a nicer user experience during the manual link repair workflow. I wanted to make it visually clear that the user is in the workflow and is expected to either complete it or abort it. The global minor mode lighter in the mode line doesn't seem to be enough. I tried sticking a header-line at the top, displaying a banner message and key bindings to complete/abort, but it was not reliable, and didn't look great either. I have some other ideas to try, but if you have a suggestion please let me know.

Despite these limitations, the gain in convenience has been huge for me. I can freely rename files or reorganize headings, knowing that if I forget to update a reference, Emacs will help me catch it later. And fixing it is straightforward. This is a relatively small addition to my Emacs config (just a few dozen lines of Elisp), but it solves an annoying real problem that used to steal time and momentum. And by the way, I do have LLM generated test cases for this code (see my previous blog post).

Enjoy the malleability of Emacs and the freedom it gives you!

Discuss this post on Reddit.

22 Jun 05:22

Radio War Nerd EP 531 — What's The Matter With Germany? feat. James Jackson

by mail@yashalevine.com (Gary Brecher)
Tom Roche

excellent--not as good as Corner Späti, but if you're not following CS, this is a decent introduction to German politics today

Co-hosts John Dolan & Mark Ames
21 Jun 19:41

117: Check Maté, with Aaron Maté

Tom Roche

EXCELLENT--no Matt Lieb (which decreases overall humor) but Brother Aaron (think Brother Mouzone but Jewish intellectual) brings the thinx

With Matt on assignment, Daniel is joined by Producer Adam and brother of the pod, journalist Aaron Maté to survey mysteriously shrouded Israeli weapons demonstrations, the purported expertise of the New York Times Editorial Board, and fittingly for an episode with 100% more Canadians than normal: a thorough investigation of things you can’t do on television (if hasbarists are watching).

Please support Doctors Without Borders: https://www.doctorswithoutborders.org/

To read Aaron's writing visit the Grayzone: https://thegrayzone.com/

See Francesca Fiorentini and Matt Lieb August 28 in Houston, TX: https://bit.ly/mattfranhtx

Subscribe to the Patreon https://www.patreon.com/badhasbara

What’s The Spin playlist: https://spoti.fi/4kjO9tL

Subscribe/listen to Bad Hasbara wherever you get your podcasts.

Spotify https://spoti.fi/3HgpxDm

Apple Podcasts https://apple.co/4kizajt



Support this podcast at — https://redcircle.com/bad-hasbara/donations

Privacy & Opt-Out: https://redcircle.com/privacy
20 Jun 22:40

Dead Ringers: Ep1. Greta, Trump and Eau de Farage

Tom Roche

SKIP! starts bad (not /just/ not funny, but /objectionably/ bad), and is rather consistently unfunny (which is IMHO rather unusual for 'Dead Ringers') thereafter

The Dead Ringers team are back to train their vocal firepower on the week’s news with an armoury of impressive impressions.

This week: Greta Thunberg floats her boat at Rachel Reeves, Trump and Elon couple up on Love Island, and Gary Lineker tries something new.

Cast: Jan Ravens, Jon Culshaw, Jess Robinson, Kieran Hodgson and Duncan Wisbey.

The episode was written by: Nev Fountain and Tom Jamieson, Laurence Howarth, Edward Tew, Tom Coles, Rob Darke, Sophie Dickson, Toussaint Douglas, Jon Holmes, Nicky Roberts, Jennifer Walker, Phoebe Butler, David Whitehead, Rachel E. Thorn, and Davina Bentley.

Created by Bill Dare Producer: Jon Holmes Executive Producer: Richard Morris Production Co-ordinator: Caroline Barlow

20 Jun 22:37

Live from the UK

Tom Roche

excellent, consistently amusing

Live from the UK brings you the best comedy talent from around the country, all from the comfort of your own headphones.

Stand up legend Angela Barnes talks to Glasgow about their swearing, Newcastle about their love of getting starkers on holiday, and Manchester about the rude origins of their city's name.

She brings you acts from all of these places and more, covering topics as far and wide as heatwaves, Gazza, hen dos and the George Foreman grill. How many shows can say that?

This week you can hear;

Mark Nelson at The Stand, Glasgow Louise Young at The Stand, Newcastle Hayley Ellis at the Frog and Bucket, Manchester and headliner Josh Pugh at the Glee Club, Birmingham

Additional Material by Eve Delaney

Recorded by Sean Kerwin and David Thomas Sound design by David Thomas Production Coordinator: Sarah Nicholls Executive Producer: Pete Strauss

Produced by Gwyn Rhys Davies. A BBC Studios Audio Production for Radio 4.

An EcoAudio Certified Production.

20 Jun 17:03

Irreal: Running All Code Blocks In An Org Subtree

by Irreal

If you’ve been around the Emacs technical community for a while, you know that Sacha Chua—despite being the mother of a young daughter—is an ever present and incredibly productive member of that community. One of the ways she manages that is by automating as much of her work as she can.

In a recent post she shows one such bit of automation. As almost every Org mode user knows, you can add executable code blocks to an Org file that can be executed to perform various actions, usually—but not always—altering the text of the Org file in some way. In the example that Chua gives, calendar entries are parsed and used to build crontab entries to perform certain actions in a timely manner. Chua gives the details here.

You can check out her code at the post but the aspect I want to focus on is her use of Property ID for an Org subtree. For her purposes, the ID can be used to execute every code block In the subtree. That means that she can mix various languages to build her crontab entry but execute them all with a single call to build the entry. That’s pretty neat.

The other, perhaps more useful, thing you can do with a Property ID is set an anchor point for the subtree if you export it to HTML. For example if you have a document with several subtrees—a blog post, say—that you want to publish to the Web you can have any or all of those subtrees directly addressable through a URL because the Property ID sets an anchor point for the subtree. That’s a really handy thing to know.

18 Jun 15:38

Thanos Apollo: Major update for Gnosis: 0.5.0 release

by Thanos Apollo
Tom Roche

[Gnosis](https://thanosapollo.org/projects/gnosis/) is [spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition) (think flashcard-quizing for learning) for Emacs

Gnosis just got a major update with this new release. With the long promised support of org-mode being added along with support for linking notes to org-gnosis nodes.

Org Mode Support

After hacking on org-gnosis and gaining a better understanding of how org-mode works, I decided to use org-mode for creating and exporting gnosis notes.

Notes, no matter their note type, will now be as follows:

Cloze type example.

* Thema                      :pharmacology:antimicrobials:penicillin:
:PROPERTIES:
:GNOSIS_ID: NEW
:GNOSIS_TYPE: cloze
:END:
** Keimenon 
What is the treatment for Actinomyces infection?

Penicillin

** Hypothesis 
- drug type

** Answer 
- Penicillin

** Parathema 
Sulfonamides → Nocardia
Actinomyces → [[id:680ca944-8ee9-4513-92d6-25696ee01f48][Penicillin]] 
(treatment is a SNAP)

Note that anki-like syntax is still supported for clozes.

MCQ example


* Thema                                                            :clinical:
:PROPERTIES:
:GNOSIS_ID: NEW
:GNOSIS_TYPE: mcq
:END:
** Keimenon 
A 60-year-old man comes to the physician with chills, nausea, and
diffuse muscle aches for 3 days. His niece had similar symptoms 2
weeks ago and H3N2 influenza strain was isolated from her respiratory
secretions. He received his influenza vaccination 2 months ago. His
temperature is 38.5°C. A rapid influenza test is
positive. Which of the following mechanisms best explains this
patient's infection despite vaccination?

** Hypothesis 
- Random point mutations within viral genome
- Complementing with functional viral proteins
- Exchange of viral genes between chromosomes
- Reassortment of viral RNA segments
- Acquisition of viral surface proteins

** Answer 
- Random point mutations within viral genome

** Parathema 
Random point mutations within the viral genome are responsible for
antigenic drift, which creates a new virus strain.

Each note is a thema consisting of the following components:

  • Keimenon; The main text or question.
  • Hypothesis; Assumptions/hints for the text to guide to the right answer
    • For example this is used as hints for cloze type or as choices in MCQs
  • Answer; The correct response or solution to the keimenon.
  • Parathema; expansion of keimenon, that can include links to e.g org-gnosis topics or even files, serving as a way to link org-gnosis topics to current thema.

Optionally, you can use also add tags for each note.

Notes/themas can have multiple hypotheses and answers (depending on their type), separated by gnosis-export-separator, which defaults to "\n-" (a new line followed by a dash).

Support for exporting decks

Support for exporting decks as org files via gnosis-export-deck has been added.

Support for org-gnosis notes

With this update org-gnosis is finally part of gnosis. The goal is not to just have a spaced repetition tool, but an all-in-one learning tool.

With this new update you can do reviews for specific org-gnosis topics.

  • Use M-x gnosis-review-topic to select a topic from your org-gnosis notes to review all linked themas.
  • You can link a thema to an org-gnosis topic by adding an org id link to either the parathema (recommended) or keimenon, using M-x org-gnosis-insert.

Future versions will further expand on this functionality.

Deprecated support for images

  • Image support will be rewritten in the next minor version
    • Support to display file links of images will be added.

Deprecated support for y-or-n notes

With this update your current y-or-n notes will be converted into MCQ type, with “Yes” & “No” choices.

18 Jun 00:46

943 - The Tehran Offensive feat. Séamus Malekafzali (6/16/25)

Tom Roche

VERY EXCELLENT analysis and humor

Seamus joins us to discuss last week’s “preemptive” Israeli strike on Iran, the damage done to Iranian command and infrastructure, Iran’s retaliation, America’s potential involvement. We also look at Trump’s big birthday Parade, one of the most pathetic & hilarious spectacles of American Military prowess any of us have ever seen.  Read Seamus on the attacks in the Intercept: https://theintercept.com/staff/seamus-malekafzali/Read Seamsu go long on the Axes of Resistance for Parapraxis: https://www.parapraxismagazine.com/articles/axes-of-resistanceSubscribe to Seamus’ Substack: https://www.seamus-malekafzali.com/ New merch for the summer up at https://chapotraphouse.store/
17 Jun 16:27

Australia to negotiate defence agreement with EU at G7

Tom Roche

/very/ skippable

Whilst Australia is not a G7 member, Prime Minister Anthony Albanese is in Canada for the annual G7 summit for a number of "sideline" talks, including a face-to-face with US President Donald Trump, where AUKUS will be on the agenda. Australia will also hold formal negotiations on joining a new defence agreement with the European Union, as The Guardian Australia's Tom McIlroy reports. 

  • Guest: Tom McIlroy, Chief Political Correspondent 7.30
17 Jun 16:27

Early Māori were kūmara farmers, not just hunter-gatherers

Tom Roche

excellent

Kumara or sweet potato originally comes from South America, but how did it become one of the national foods of Aotearoa New Zealand?  The Polynesians that first settled New Zealand around 1300 were thought to just be hunter-gatherers and only later turn to farming. But archaeologists have used new research technology to prove the Maori arrived with plans and sophisticated techniques for growing kumara, and even started off in the cooler climate of the South Island. 

  • Guest: Professor Ian Barber from the University of Otago led research that used granules of kumara starch to establish the date and place kumara was first grown by Maori in New Zealand
16 Jun 19:04

Brought to you by Coinbase

by The Späti Boys
Tom Roche

Ciarán+Nick spittin fiya, VERY EXCELLENT, esp trashing the egregious Mathias Döpfner

14 Jun 18:26

Israel's war on Iran was made in USA: Trump supported attacks, while faking peace talks

Tom Roche

more VERY EXCELLENT analysis from Norton

Israel attacked Iran in an aggressive act of war. The US government supported the strikes, providing intelligence and planning with Netanyahu. Donald Trump cynically used nuclear negotiations with Tehran as cover, as he oversaw the joint US-Israeli operation. Ben Norton reviews the evidence. VIDEO: https://www.youtube.com/watch?v=o0s7O8RU9V0 Topics 0:00 USA supported Israeli attacks 1:38 Trump's fake "peace talks" with Iran 3:13 USA provided Israel intelligence 3:49 Trump gave Israel green light 5:07 US military helped Israel 6:01 Marco Rubio's lies 6:40 Israel: unsinkable US aircraft carrier 7:15 Netanyahu is an American 8:07 USA arms Israel 8:45 USA protects Israel at UN 9:37 ICC charges Netanyahu 10:34 Trump threatens Iran 12:41 Trump's 60 day deadline 13:37 Iran nuclear deal (JCPOA) 15:24 Lessons from Libya 17:24 Israel's nuclear weapons 18:37 Nuclear weapon free zone 19:20 Alliance with apartheid South Africa 20:26 Germany condemns Iran 21:37 Western neo-colonialism 22:20 France's Macron criticizes Iran 23:07 Iranian civilian victims 24:11 Human shields 27:29 US & Israel: imperial bullies 28:44 Iran hits back 29:13 US military aid to Israel 29:55 Outro
13 Jun 20:57

The News Quiz: Ep 8. Musk and Trump Break Up

Tom Roche

amusing--not great, but amusing, and at least as good as one could expect from a relatively-underpowered cast (though Athena Kugblenu reliably delivers a chuckle or 2)--end to NQ series 117

Andy Zaltzman is joined by Glenn Moore, Felicity Ward, Athena Kugblenu and Marie Le Conte to break down the week in news. The panel discuss Musk and Trump's messy break up, getting Britain ready for a war and why children shouldn't be trusted to do town planning.

Written by Andy Zaltzman.

With additional material by: Eve Delaney, Jade Gebbie, Cameron Loxdale and Alexandra Haddow. Producer: Pete Strauss Executive Producer: Richard Morris Production Coordinator: Jodie Charman Sound Editor: Marc Willcox

A BBC Studios Audio Production for Radio 4

13 Jun 19:47

6/11/25: Jon Stewart Shreds Stephen A, Greta Thunberg Reveals Israel Kidnapping Details, AI LA Video Goes Viral

Tom Roche

pretty good ep until surprisingly stupid final seg with alleged "AI expert" Taren Stinebrickner-Kauffman

Krystal and Emily discuss Jon Stewart shreds Stephen A, Greta Thunberg reveals Israel kidnapping details, AI LA video goes viral in dystopian preview.

 

Taren Stinebrickner-Kauffman: https://x.com/TarenSK 

 

To become a Breaking Points Premium Member and watch/listen to the show AD FREE, uncut and 1 hour early visit: www.breakingpoints.com

Merch Store: https://shop.breakingpoints.com/

See omnystudio.com/listener for privacy information.

12 Jun 18:49

When Media Tell Us Who ‘Won’ a Latin American Election, Start to Ask Questions

by John Perry
Tom Roche

EXCELLENT dissection of the latest US-empire-made fail-state, Ecuador

 

AP: Daniel Noboa is reelected Ecuador’s president by voters weary of crime

AP (4/13/25) attributes Ecuadorian President Daniel Noboa’s re-election to “voters weary of crime”—even though murders rose sharply under his administration.

Elections in Latin America are often controversial. While many countries in the Global North regularly shuffle between parties offering alternating versions of neoliberalism, voting in Central and South America often offers starker contrasts: An anti-imperialist candidate in the mold of Venezuela’s Hugo Chávez might be up against a neoliberal such as Brazil’s Jair Bolsonaro. It could hardly be otherwise, in a region with the world’s biggest gap between the richest and poorest.

North American and European corporate media are conscious of this complexity, but rarely convey it to their readers, instead issuing reports that lack sufficient context or history. Washington’s influence on their messaging—as if the media had their own Monroe Doctrine—is never far below the surface, especially when it comes to reporting political turning points such as elections. Doubts about the results, or questions about outside influence, can be set aside if the outcome fits the consensus narrative, especially if it is endorsed by a White House spokesperson, or a surrogate body like the Organization of American States (OAS).

Ecuador provides an example. Its President Daniel Noboa, son of the country’s richest landowner, began his second term of office on May 25. He was declared victor by a huge margin in a run-off election on April 13, even though his opponent, leftist Luisa González, virtually tied with him in the first round in February.

According to the corporate media, Noboa’s victory was clear-cut, the reasons for it were obvious and there was little reason to question the outcome. The Washington Post (4/13/25) headlined “President Who Declared War on Ecuador’s Drug Gangs Is Reelected.” The Wall Street Journal (4/13/25) said “Ecuador Re-Elects Leader Fighting War on Gangs Smuggling Cocaine to US.” The New York Times (4/13/25) proclaimed that “Ecuador’s President Wins Re-Election in Nation Rocked by Drug Violence.” The headlines were so similar they might have been modeled on the agency story from the Associated Press (4/13/25): “Daniel Noboa Is Reelected Ecuador’s President by Voters Weary of Crime.”

Linking the election to the war on drugs added a useful North American perspective. And, of course, this could be strengthened by reminding readers that Noboa is an ally of Donald Trump, as the Post, Journal and Times duly did.

‘Increasingly authoritarian’

NYT: Ecuador’s President Wins Re-election in Nation Rocked by Drug Violence

The New York Times (4/13/25) dismissed candidate Luisa González as someone “largely seen as the representative of the former president” Rafael Correa, who is condemned for his “authoritarian tendencies.”

Had González won instead, she would have become Ecuador’s first female president (aside from Rosalía Arteaga, who was president for two days in 1997). However, all three outlets felt it necessary to remind readers of her dangerous link to former President Rafael Correa, known for “antagonizing the United States,” as the Post put it. The Times patronizingly suggested she would be Correa’s “handpicked successor,” or even “the representative of the former president, a divisive figure in Ecuador” (emphasis added), who (the Post claimed) “grew increasingly authoritarian” before he left office in 2017.

This grossly inverts history. Arguably, Ecuador “grew increasingly authoritarian” after Correa’s presidency (FAIR.org, 8/17/20). His party, and three others, were banned in 2020. This decision was later reversed, but then both Correa and his vice president, Jorge Glas, were convicted of corruption, in what appeared to be obvious cases of “lawfare,” based on evidence from a source funded by the US National Endowment for Democracy.

Correa fled to Belgium, where he was granted asylum. Glas spent five years in prison and, seriously ill and facing new charges after Noboa first took office in late 2023, was granted asylum by Mexico. He never managed to leave Quito, because Noboa had him violently abducted from Mexico’s embassy and thrown into prison, in a clear breach of international law (London Review of Books, 4/9/24).

Five years of escalating violence

Correa had successfully reduced violence in Ecuador, making it one of Latin America’s safest countries. Progress was reversed under successive neoliberal governments, beginning with President Lenín Moreno. Victims have included several political figures, but the most egregious incident occurred only five months ago under Noboa’s presidency, when a group of soldiers captured, tortured and then murdered four children in Ecuador’s second city, Guayaquil (El Pais, 5/5/25).

Ecuador Murder Statistics

Source: Primicias (5/21/25), based on Ecuadorian police data for the first four months of each year.

Violence continues to escalate, despite Noboa’s promises to tackle it. The first four months of 2025 saw a 58% increase in homicides, compared with the same period in 2024 (see chart), turning Ecuador into the most dangerous country in the Americas. Much violence is related to drug trafficking, with Ecuador now “an open funnel for cocaine exports and money laundering” under recent right-wing governments (London Review of Books, 4/30/25). Despite being part of the problem, Noboa maintained that only he could solve it, offering to adopt the hardline policies for which El Salvador’s President Nayib Bukele has become famous.

Ecuador’s contested ballot

After the media chorus of welcome for Noboa, it seems almost churlish to ask if he really won a clean election. Yet while Foreign Policy (4/17/25) said his win was “not surprising,” it certainly did surprise many commentators. It is instructive to review the evidence, starting with the first round of the elections and ending with the results of the final round.

February’s first round could hardly have been closer, with Noboa gaining 44.17% of the votes, barely ahead of González with 44.00% (see table), a difference of only 16,746 votes. Turnout was 82%. The result suggested that opinion polls were exaggerating Noboa’s popularity, since for the preceding month they had given him a comfortable average lead.

A third candidate, representing the largest Indigenous party, garnered 5.25%, and was obliged to drop out ahead of the final top-two round two months later. This candidate would later support González, but smaller Indigenous parties would favor Noboa.

Comparison of first-round and second-round voting in the 2025 Ecuadorian presidential election.

Source: Wikipedia.

The electoral campaign period saw a series of illegal moves on Noboa’s part. He refused to step down temporarily, as required constitutionally. Instead he suspended his vice-president, Verónica Abad, ignoring a court ruling that she should temporarily replace him and shut her office (Financial Times, 1/18/25). A right-wing rival was barred from standing, and Ecuadorians in Venezuela were denied the vote while their compatriots elsewhere were not.

Noboa’s massive social media campaign was allegedly financed from public funds (La Calle, 10/22/24); troll centers were established to attack his opponent (Pandemia Digital, 2/3/25). Bonuses costing over $500 million were paid to hundreds of thousands of poor Ecuadorians from public funds (Primicias, 3/28/25); CEPR’s Mark Weisbrot dubbed this “vote buying,” at an estimated $475 each. Noboa was photographed with Trump, Ecuador’s Washington embassy having paid at least $165,000 for the opportunity (People’s Dispatch, 4/6/25).

Like El Salvador’s Bukele, Noboa enhances his powers by declaring states of emergency. Prior to the poll on April 13, he declared one that covered the capital and several urban centers which González had won in the first round, intimidating voters and allowing unannounced searches (CBS News, 4/12/25). On election day, machine gun–bearing soldiers were posted at polling stations. Even so, two exit polls showed a close result, one indicating a win by González. During the count, images were posted of voting sheets published by the Noboa-manipulated electoral council that were invalid because they were unsigned.

‘Impossible’ result

The April 13 results were extraordinary, awarding Noboa victory by a full 11.25 percentage points. They gave Noboa 1.3 million more votes than he won in the first round, while González gained only 160,000. This happened despite the first-round tie, González’s endorsement by the leading Indigenous candidate, opinion polls slightly favoring her, two close exit polls and a much smaller difference (2 percentage points) between the two candidates’ parties in the simultaneous vote for the National Assembly.

Former President Rafael Correa wrote in his X account:

Ecuadorian people: You know that, unlike our adversaries, we have always accepted the opponent’s victory when it has been clean. This time it is NOT. Statistically, the result is IMPOSSIBLE.

González’s requests for recounts were twice rejected by the judicial bodies governing the election, in a series of decisions demonstrating bias in Noboa’s favor. Several leftist presidents, such as Colombia’s Gustavo Petro and Mexico’s Claudia Sheinbaum, endorsed González’s protests, and the latter refused to recognize Noboa’s presidency.

Truthout: Ecuador’s President Emulates El Salvador’s Bukele as He Builds Ties With Trump

Truthout (5/2/25): “President Noboa carried out one of the dirtiest and unequal campaigns in memory—relying on fake news, vote buying and threats.”

A week after the poll, Denver University Professor Francisco Rodríguez published a statistical comparison of the result in Ecuador with 31 other recent Latin American run-off elections. He concluded that Ecuador’s was “not normal,” and “deviates sharply from regional experience.” He said he was not claiming fraud, but was calling for careful scrutiny.

Ecuadorian political sociologist Franklin Ramírez Gallegos went further in Truthout (5/2/25): “These were absolutely unequal, opaque, fraudulent elections,” he said. Within a few days of the election, there were reports of Noboa’s opponents being persecuted, and of a “blacklist” naming more than 100 people to be tracked down.

None of the US corporate media suggested the election was problem-free. But where, for example, they reported that González had claimed fraud, they qualified this by saying she did so “without presenting evidence” (Washington Post, 4/13/25). They also repeated Noboa’s phony counterclaims of irregularities (AP, 4/13/25). Reassurances by electoral observers from the OAS and US State Department were duly cited (Reuters, 4/14/25).

Framing Latin American elections

NYT: ‘There Could Be a War’: Protests Over Elections Roil Bolivia

The New York Times (10/23/19) shows highly selective skepticism over Latin American electoral results.

The OAS has a 70-year history of bending to Washington’s whim when judging elections. Media reliance on its verdicts, despite—or really because of—its close alignment with US interests, speaks to the wider problem of media reporting of Latin American elections. Here are just three further examples—of many.

In 2019, the unsubstantiated findings by OAS observers of faults in the presidential election in Bolivia were swallowed wholesale by corporate media (FAIR.org, 11/18/19). The New York Times, citing the OAS’s “withering assessment” (10/23/19), quickly scorned the “highly fishy vote” (11/11/19) which extended the presidency of leftist Evo Morales. It turned out not to be fishy at all, but before the truth emerged, Morales had resigned, faced likely assassination and fled to Mexico. Morales’s forced resignation by Bolivia’s rightist-aligned military was called a “coup” by Argentina and Mexico.

The year before, when Bolsonaro won the election in Brazil while his principal opponent, Luiz Inácio Lula da Silva, was imprisoned (later to be released, post-election), the Times published 37 relevant articles, but not one examined the falsity of the charges. Reporting from Brazil, journalist Brian Mier (FAIR.org, 3/8/21) observed that this “helped normalize” Bolsonaro’s victory and “opened the door for a neofascist/military takeover of Brazil.”

In Honduras in 2013, after the neoliberal candidate Juan Orlando Hernández had “all the ducks lined up for a fraudulent election” (London Review of Books, 11/21/13), the Washington Post (11/26/13) produced a scurrilous editorial claiming that his victory had avoided a dictatorship. Instead, it created one: Hernández won two fraudulent elections, was extradited on drug charges after leaving office, and is now in a US prison.

After the dubious victory

Since the election, Noboa has been busy in pursuing the “blacklisted” political opponents who tried to stand in his way. A few days before his May 25 investiture, dubious charges were pressed against former presidential candidate Andrés Arauz. It was Arauz who published the images of invalid voting sheets on April 13—to no avail, as they were ignored not only by the electoral authorities, but by the observers from the OAS and European Union.

Noboa’s big if highly questionable victory will strengthen his hand in creating a permanent and violent security state. Blackwater’s founder Erik Prince was hired in April to help him in the task. Two new military bases, one of them in the Galápagos Islands, have been offered to the US, in defiance of a prohibition on foreign bases in Ecuador’s constitution—a prohibition that the National Assembly rescinded this month at Noboa’s request.

On April 30, the Defense and interior ministers were pictured in El Salvador, inspecting Bukele’s notorious CECOT prison (Infobae, 4/30/25). Presumably these are the first steps in delivering the promise, made in Noboa’s short and vacuous speech at the investiture last month, to “rescue” Ecuador.

12 Jun 17:25

Big Tech’s Monopoly Money

Tom Roche

EXCELLENT, tho unfortunately Arjun Singh says it's his last LT

There’s a new evil genius on Capitol Hill, one that privacy experts warn could empower tech billionaires like Elon Musk and Mark Zuckerberg to issue their own private currencies. The Senate is poised to pass the GENIUS Act, which would give so much free rein to such “stablecoins” that it could destabilize the rest of the economy.

Today on Lever Time, Arjun Singh sits down with Lever reporter Luke Goldstein to understand the GENIUS Act, how it could turn Big Tech companies into unregulated banks, and why this should be a concern for the rest of us.

You can read Luke’s full story on the GENIUS Act and the future of “ZuckBucks” here.

Learn more about your ad choices. Visit megaphone.fm/adchoices

12 Jun 16:37

Jon Stewart on the LA ICE Protests and Trump's Escalating Response | Stephen A. Smith

Tom Roche

EXCELLENT but unusual for DSEE: good-but-not-great Jon Stewart openers (not bad, but we've grown accustomed to better from JS), more-usually a replacement-level bit from Jordan Klepper ... but then follows an unskippably-excellent with Stephen A. Smith. Note that, as usual with SAS, it's only excellent if one doesn't {listen too closely to, think too much about} what he's saying--just flow with the preaching, which IMHO is quite amusing (and /does/ have some legitimately-meaningful bits).

Jon Stewart examines chaos in the MAGA-verse, as escalating ICE raids in Los Angeles erupt in protests, Stephen Miller hunts for nonviolent immigrants, Elon plays the Epstein card on Trump, and the Trump-Elon alpha male war reveals itself as a sensitive baby feud.

Stephen A. Smith, bestselling author & host of “The Stephen A. Smith Show,” sits down with Jon to discuss why he would rather be a hellraiser than an elected official, how politicians have divided and contributed to the demise of this country, and why the messenger matters in politics. Smith, who recently signed a 5-year contract with ESPN and a multi-year deal with SiriusXM, also discussed a comment he made about Jalen Brunson that Stewart considers “an impeachable offense,” their ride-or-die love of the Knicks, and the reason the Buffalo Bills may be at fault for Trump’s presidency.

See omnystudio.com/listener for privacy information.

Learn more about your ad choices. Visit podcastchoices.com/adchoices

12 Jun 15:10

Bulgaria to enter EUROZONE trap

by The Duran
Tom Roche

excellent on Romania geopolitics as well as Bulgaria

Bulgaria to enter EUROZONE trap

12 Jun 15:09

Ep. 223: The Empire Strikes First, Part II — 'Abundance' Pablum as Counter to Left Populism

Tom Roche

VERY EXCELLENT demolition of Abundance as just the latest Corporate Democrat rebrand of austerity+identity+empire

"Can Democrats Learn to Dream Big Again?," wonders Samuel Moyn in the New York Times. "The Democrats Are Finally Landing on a New Buzzword. It's Actually Compelling," argues Slate staff writer Henry Grabar. "Do Democrats Need to Learn How to Build?," asks Benjamin Wallace-Wells in The New Yorker.

For the past few months, news and editorial rooms have been abuzz with talk about a new, grand vision for the Democratic Party: abundance. Abundance, according to its media promoters—chiefly NYT's Ezra Klein and The Atlantic's Derek Thompson—is a political agenda that espouses the creation of more of everything we need: housing, education, jobs, and energy, to name a few examples. To accomplish this, we are told, we must aim to eliminate bureaucratic red tape that has for so long bogged down production, innovation, and capital's innate capacity and desire to provide a better, more abundant life.

It's an alluring promise—if suspiciously vague and devoid of class politics: obviously, doing more good things is better than doing fewer good things, right? Who can argue with this generic premise? Who wouldn't want to support an agenda that's effectively the Do Good Things Agenda?

Scratch the surface, however, and what one finds it isn't just a folky, common sense treatise against red tape, but something more sinister and dishonest, something more slick and shallow. What one gets is a standard entryist strategy that begins with a so-vague-it's-incontestable hook—illogical or corrupt regulations are bad—the quickly pivots into a Silicon Valley flattering, and often Silicon Valley funded, political agenda, a narrative designed to blame inequality and our objectively broken political system on too much regulation and "bureaucracy" rather than there being too much power in the hands of an elite few.

What one gets, in other words, is a counter to left populism. What one gets is the latest attempt to reheat neoliberalism as something fresh, innovative and able to excite the voting base.

Last week, in Part I of a two-part series we're calling "The Empire Strikes First," we discussed the Democrats' post-2024 apologia, propped up by scapegoats ranging from trans people to "economic headwinds" to Harris actually being too far left.

On this episode, Part II of the series, we explore what comes next: the 2028 Democratic strategy and the so-called abundance agenda that is increasingly shaping it. We'll examine how Democratic media influencers and policymakers use lofty, seemingly progressive rhetoric to rehabilitate and re-sell the same old neoliberal deregulation, privatization, and austerity narrative that got us here in the first place, and ensure that no left-wing movement—that could, god forbid, require a meaningful change in the party—get in their way.

Our guests are the Revolving Door Project's Kenny Stancil and Henry Burke.

12 Jun 14:02

Armin Ronacher: Agentic Coding Recommendations

Tom Roche

VERY INTERESTING

There is currently an explosion of people sharing their experiences with agentic coding. After my last two posts on the topic, I received quite a few questions about my own practices. So, here goes nothing.

Preface

For all intents and purposes, here's what I do: I predominently use Claude Code with the cheaper Max subscription for $100 a month [1]. That works well for several reasons:

  • I exclusively use the cheaper Sonnet model. It's perfectly adequate for my needs, and in fact, I prefer its outputs over the more expensive Opus model.
  • I optimize my tool usage to be token efficient. I avoid screenshots and browser interactions wherever possible. More on that later.

My general workflow involves assigning a job to an agent (which effectively has full permissions) and then waiting for it to complete the task. I rarely interrupt it, unless it's a small task. Consequently, the role of the IDE — and the role of AI in the IDE — is greatly diminished; I mostly use it for final edits. This approach has even revived my usage of Vim, which lacks AI integration.

One caveat: I expect this blog post to age very poorly. The pace of innovation here is insane; what was true a month ago barely holds true today. That's why I'm sticking to concepts I believe have staying power.

If you want to a small session of me working on an Open Source library with it, I have a recording you can watch.

The Basics

I disable all permission checks. Which basically means I run claude --dangerously-skip-permissions. More specifically I have an alias called claude-yolo set up. Now you can call that irresponsible and there are definitely risks with it, but you can manage those risks with moving your dev env into docker. I will however say that if you can watch it do its thing a bit, it even works surprisingly well without dockerizing. YMMV.

MCP. This is a term you cannot avoid. It basically is a standardized protocol to give agents access to more tools. Honestly: at this point I barely use it, but I do use it. The reason I barely use it is because Claude Code is very capable of just running regular tools. So MCP for me is really only needed if I need to give Claude access to something that finds too hard to use otherwise. A good example for this is the playwright-mcp for browser automation. I use it because I haven't found anything better yet. But for instance when I want my agent to poke around in my database, I just uses whatever it finds to be available. In my case it loves to use psql and that's more than good enough.

In general I really only start using MCP if the alternative is too unreliable. That's because MCP servers themselves are sometimes not super reliable and they are an extra thing that can go wrong. Trying to keep things very simple. My custom tools are normal scripts that it just runs.

Choice Of Language

I've evaluated agent performance across different languages my workload, and if you can choose your language, I strongly recommend Go for new backend projects. Several factors strongly favor Go:

  • Context system: Go provides a capable copy-on-write data bag that explicitly flows through the code execution path, similar to contextvars in Python or .NET's execution context. Its explicit nature greatly simplifies things for AI agents. If the agent needs to pass stuff to any call site, it knows how to do it.
  • Test caching: Surprisingly crucial for efficient agentic loops. In Rust, agents sometimes fail because they misunderstand cargo test's invocation syntax. In Go, tests run straightforwardly and incrementally, significantly enhancing the agentic workflow. It does not need to figure out which tests to run, go does.
  • Go is sloppy: Rob Pike famously described Go as suitable for developers who aren't equipped to handle a complex language. Substitute “developers” with “agents,” and it perfectly captures why Go's simplicity benefits agentic coding.
  • Structural interfaces: interfaces in Go are structural. If a type has the methods an interface expects, then it conforms. This is incredibly easy for LLMs to “understand”. There is very little surprise for the agent.
  • Go has low eco-system churn: Go's entire ecosystem embraces backwards compatiblity and explicit version moves. This greatly reduces the likelihood of AI generating outdated code — starkly contrasting JavaScript's fast-moving ecosystem for instance.

For comparison, Python — my initial choice — often poses significant challenges. Agents struggle with Python's magic (eg: Pytest’s fixture injection) or complex runtime challenges (eg: wrong event loop when working with async), frequently producing incorrect code that even the agentic loop has challenges resolving. Python also has practical performance problems. I don't mean that it writes slow code, i mean that the agent loop is really slow. That's because the agent loves to spawn processes and test scripts, and it can take quite a while for the interpreter to boot up and initialize the entire application.

On the frontend I settled on tailwind, react with tanstack's query and router as well as vite. I'm not amazingly happy with it, but I found it better than the alternatives. Tailwind and vite are great, no complaints there. Tanstack's file based router does not make me super happy. In parts because it likes to have dollar signs in the file names and those really like to confuse the agent. For instance it's quite common that it tries to edit $param.tsx but it edits the file .tsx instead because it to confused by shell interpolation. It's a minor thing, but a very annoying thing.

Tools, Tools, Tools

Regardless of language, effective tooling is paramount. Key rules:

  • Anything can be a tool. A shell script can be a tool, an MCP server can be a tool, a log file can be a tool. If the agent can interact or observe it, it counts.
  • Tools need to be fast. The quicker they respond (and the less useless output they produce) the better. Crashes are tolerable; hangs are problematic.
  • Tools need to be user friendly! Tools must clearly inform agents of misuse or errors to ensure forward progress.
  • Tools need to be protected against an LLM chaos monkey using them completely wrong. There is no such things as user error or undefined behavior!
  • Tools need to provide the right debuggability and observability.

Example: I place critical tools into a Makefile. A make dev command starts my services via a process manager. I made two key changes to what I normally do:

  1. I had to protect the process manager against being spawend a second time when it's already running. I use a fork of shoreman which writes a pidfile. When spanwed a second time it errors and logs “services already running”. Why does that matter? Because the agent sometimes does not know if the server is already running and otherwise happily spawns it a second time resulting in two version of the service bound to the same port.
  2. I am not only printing the output to my terminal, I'm also always logging it to a file. This allows the agent to read the log file to diagnose what's happening.

Here an example agentic interaction that demonstrates this rather well:

⏺ Great! The formatting looks good. Now let me run the development server to test the
   dynamic onboarding:

⏺ Bash(make dev)
  ⎿  Error: error: services are already running
     make: *** [dev] Error 1

⏺ The development server is already running. Let me check the logs to see the frontend URL:

⏺ Bash(make tail-log)
  ⎿ 01:06:55 backend    | Starting server on localhost:8080
    01:07:39 backend    | [Running: sh -c 'cd backend && go run cmd/server/main.go serve']
    01:07:39 backend    | Starting server on localhost:8080
    08:45:34 backend    | "GET http://localhost:8080/api/users/me HTTP/1.1" from 127.0.0.1:61804 - 200
    39.252666ms
    … +96 lines (ctrl+r to expand)

⏺ Perfect! I can see the frontend is running on http://localhost:3000/ and the latest changes
   have been hot-reloaded. Let me test the dynamic onboarding functionality using playwright:

In general logging is super important. For instance my app currently has a sign in and register flow that sends an email to the user. In debug mode (which the agent runs in), the email is just logged to stdout. This is crucial! It allows the agent to complete a full sign-in with a remote controlled browser without extra assistence. It knows that emails are being logged thanks to a CLAUDE.md instruction and it automatically consults the log for the necessary link to click.

Does it count as a tool? In my book it does.

It's All About Speed

Agentic coding's inefficiency largely arises from inference cost and suboptimal tool usage. Let me reiterate: quick, clear tool responses are vital. What we did not talk about yet is that some tools are "emergent," temporarily written by agents themselves. Quick compilation and execution significantly boost productivity of the agent. So how can we help it?

With the right instructions it must be possible for the AI to create a new tool, by following existing conventions very quickly. This is necessary because you want the AI to write some new code, and run it. There is a big difference in the quality and speed of the flow, if that tool takes 3ms to run vs it compiles for 5 seconds and then needs another minute to boot and connect to database and kafka broker and 100 lines of nonsensical log output.

If your stuff is indeed slow, then consider vibe-coding a daemon that you can dynamically load stuff into. As an example Sentry takes too long to reload code and it takes too long to restart. To trial some agentic coding there my workaround was a module that watches a file system location and just imports and executes all python modules placed there, then writes the outputs into a log it can cat. That's not perfect, but it was a significant help for the agent to evaluate some basic code in the context of the application.

Balancing log verbosity is crucial: informative yet concise logs optimize token usage and inference speed, avoiding unnecessary costs and rate limits. If you cannot find the balance, provide some easy to turn knobs for the AI to control.

In an idea setup you get useful log output as a natural byproduct of the agent writing code. Getting observability from the first shot of code generation beats writing code, failing to run it and only then going back to a debug loop where debug information is added.

Stability and Copy/Paste

Stable ecosystems are what you really want. LLMs are great with Go and they love to use Flask, because those are quite stable ecosystems with little churn. The same thing is true for your codebase. The AI likes to leave all kinds of breadcrumbs lying around when writing code that can turn into confusion later. For instance I have seen the agents leave useful comments about why it chose one path over another. If you nilly-willy let the AI upgrade libraries where some of those decisions no longer make sense, you now might have the AI continue making a now outdated pattern.

In theory this should be the same for agents and humans, but the reality is that agents make upgrades so “cheap” that it's tempting to just let the AI do it and see if tests still pass. I do not find this to be a successful path at all. Be even more conservative about upgrades than before.

Likewise with AI I strongly prefer more code generation over using more dependencies. I wrote about why you should write your own code before, but the more I work with agentic coding, the more I am convinced of this.

Write Simple Code

Simple code significantly outperforms complex code in agentic contexts. I just recently wrote about ugly code and I think in the context of agents this is worth re-reading. Have the agent do “the dumbest possible thing that will work”.

  • Prefer functions with clear, descriptive and longer than usual function names over classes.
  • Avoid inheritance and overly clever hacks.
  • Use plain SQL. I mean it. You get excellent SQL out of agents and they can match the SQL they write with the SQL logs. That beats them min-maxing your ORM's capabilities and getting lost in the SQL output in a log.
  • Keep important checks local. You really want to make sure that permission checks are very clear to the AI, and that they are taking place where it AI can see it. Hiding permission checks in another file or some config file will amost guarantee you that the AI will forget to add permission checks in when adding new routes.

Make It Parallelizable

Agents aren't exceptionally fast individually, but parallelization boosts overall efficiency. Find a way to manage shared states like the file system, databases, or Redis instances so that you can run more than one. Avoid them, or find a way to quickly segment stuff out.

Your initial shared state is just the file system and a second check-out will do. But really I don't have an amazing solution yet. There are some good initial attempts. For instance one of the tools to watch is container-use. It's an MCP server that instructs Claude or other agents to run their experiments entirely in Docker.

Then there are tools like Cursor's background agents and Codex which are moving this entire stuff into CI which will be interesting. So far, I don't this is working for me yet, but let's see again in a month.

Learn To Refactor

Agentic coding alters refactoring priorities. Agents handle tasks effectively until project complexity surpasses some manageable thresholds. Too big here is defined by the total amount of stuff that it has to consider. So for instance you can vibe code your frontend together for a while, but eventually you reach the point where you absolutely need to tell it to make a component library. Why? Because if the total tailwind class mess is splitered across 50 files you will find it very hard to get the AI to make redesigns or extract components without major regressions.

An agentic workflow encourages good code maintenance and refactoring at the right moment. You don't want to do it too early and you definitely do not want to do it too late.

What Next?

Agentic coding is rapidly evolving, and my workflow today may look dramatically different tomorrow. What's clear though is that integrating agents into your development process can unlock significant productivity gains. I encourage you to keep experimenting. The tools and techniques will evolve, but the core principles — simplicity, stability, observability and smart parallelization — will remain essential.

Ultimately, the goal is not just to leverage agents to write code faster, but to write better, more maintainable, and resilient code. Already today the code looks nothing like the terrible slop from a few months ago. Stay adaptable, and happy coding!

[1] This is not an advertisment for Claude Code. It's just the agent I use at the moment. What else is there? Alternatives that are similar in their user experiences are OpenCode, goose, Codex and many others. There is also Devin and Cursor's background agents but they work a bit different in that they run in the cloud.
11 Jun 16:11

*UNLOCKED* Is Germany's Israel consensus finally shifting? w/ Hanno Hauenstein

by Spaßbremse
Tom Roche

excellent

**UNLOCKED premium episode 40, now available for all listeners. Support us here: ⁠⁠⁠⁠⁠⁠⁠https://www.patreon.com/spassbremse⁠**

Germany's material and rhetorical support of Israel has long been unyielding, even in the face of genocide charges from international organizations and other European countries' growing condemnations of it's conduct in Gaza. However, in the last few weeks, a growing chorus of German politicians and media figures have begun to finally criticism Israel. Is something finally changing?

To answer, Ted speaks to German journalist Hanno Hauenstein (@hahauenstein), a rare media figure with actual expertise in the region and an important voice of reason in Germany's (to date virtually non-existent) Israel debate. They discuss the history of pro-Israel Staatsräson, the radicalization of the concept after October 7, and why the conversation might be now changing.

Read Hanno's Substack here: https://hannohauenstein.substack.com/

Listen to our episode with Daniel Marwecki (which we reference multiple times) here: https://creators.spotify.com/pod/show/spassbremse/episodes/52---Whitewashing-and-Statebuilding-German-Israeli-relations-wDaniel-Marwecki-e2dgpn5/a-aaovn89

Follow Spaßbremse on Twitter (⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠@spassbremse_pod⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠). Music by ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠Lee Rosevere⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠. Art by Franziska Schneider. Edited by Nick.

Support us on Patreon here: ⁠⁠⁠⁠⁠https://www.patreon.com/spassbremse

11 Jun 14:32

Gaza is Silicon Valley’s Beta Test for Global Repression, w/ Yasha Levine

Tom Roche

EXCELLENT though truncated--starts weak but gets much better

The internet wasn’t made to set us free. It was designed to surveil, suppress, and control.


On this episode of Dispatches, Rania Khalek speaks with journalist and author Yasha Levine to expose how Big Tech became the digital arm of empire.


From AI-generated kill lists in Gaza to Silicon Valley billionaires coding the future of authoritarianism, this is techno-fascism in real time.


Elon Musk works with the Pentagon. Peter Thiel builds tools for ICE. Mark Zuckerberg scrubs dissent while currying favor with Trump.


Gaza isn’t an exception, it’s a prototype. A beta test for how to rule the world through algorithm, surveillance, and automation.


Watch the full episode and support the show at:


🔥 https://www.patreon.com/BreakthroughNews 


11 Jun 14:14

941 - Sister Number One feat. Aída Chávez (6/9/25)

Tom Roche

EXCELLENT

We’re joined by The Nation’s Aída Chávez for her report from WelcomeFest, the abundapalooza dedicated to staking the technocratic claim for the future of the Democratic party. We review the fairly directionless and unenthusiastic vibes of the centrist shindig, but also discuss the explosion of police violence during protests against ICE in Los Angeles over the weekend. All leading us to ask, what exactly do these people think “power” is, and when is it “right” to exercise it? Read Aída’s dispatch from WelcomeFest for The Nation: https://www.thenation.com/article/politics/welcomefest-dispatch-centrism-abundance/ Donate to the Jordan Breen sports journalism scholarship fund - https://gofund.me/837f326c New merch for the summer up at https://chapotraphouse.store/