Blog

All posts including articles and notes. (2748 total)

  • indieweb ActivityPub

    I think my #Indiekit fork might be one of the very few setups where this happens:

    You post from Phanpy or Moshidon — regular Mastodon clients, no Micropub support at all.

    My custom Fedify AP answers the Mastodon client API, turns that request into a Micropub post, writes it to my own site as Markdown, and then federates it as #ActivityPub.

    My blog via that same plug-in answers the Mastodon API.

    So Phanpy and Moshidon think they’re talking to a Mastodon server.

    They’re not. They’re writing Micropub.

    The flow is : Mastodon client → Mastodon-compatible API → Micropub → Markdown file on my own site → ActivityStreams 2.0 → delivered to followers.

    Same for edits: editing from Phanpy issues a Micropub replace, then broadcasts an Update(Note).

    Plenty of projects do “native post → AP representation” (WordPress, Micro.blog).

    What I haven’t seen elsewhere is the extra hop: a non-Micropub client producing a Micropub post without knowing it.

    It’s been a fun coding summer 🌞😎

  • Web

    They are killing Hyperlinks

  • IRC

    Had fun coding a small python script for weechat that relay mentions of my handle to my self hosted private ntfy sever allowing me to get IRC notifications while on the go, the notification carries the actual message of the user on IRC so I can quickly check if it needs a reply or not.

    Yes very useless and fun 😅

  • Testing Plume from Firefox, now you can see the steps indieauth take against your site for the initial connection, there is also a welcome tab for onboarding (Inspired by Omnibear)

  • Improved Plume onboarding and fixed a few bugs https://rmdes.github.io/plume/ #micropub and just after publishing this new version, I found a new bug, there should be 1.5.1 very soon !!!

    AI: T0/C1
  • indieweb

    Test post from Omnibear #micropub extension

  • https://cosocial.ca/users/evan/statuses/117060034339064108

    I’m refactoring my AP implementation first so that I can properly build C2S later on, for now I’ll keep the API layer, since it already covers a lot of ground but the refactoring will allow me to have a more robust implementation and I’m finding this https://www.stevebate.net/activitypub-client-api-a-way-forward/#flowz very inspiring

    Permalink
  • Email

    It really sucks to have a properly configured email server, running on your own domain — thanks, Cloudron — only to have Google, Microsoft, and the other giants systematically dump your messages into spam anyway.

    And yet I now find myself sending important emails twice, or using another provider, just to make sure they actually reach the person on the other side.

    Email was supposed to be an open, decentralized protocol. Instead, a handful of monopolies have effectively privatized deliverability: they decide whose mail is trustworthy, whose isn’t, and independent servers are guilty until proven innocent.

    #Enshittification at scale: privatize the commons, segment it, then slowly make the open alternative unusable for everyone else.

  • The Man Who Cannot Be Overruled Wants to Talk About Balance of Power

    Mark Zuckerberg’s manifesto rests on a single elegant idea: safety comes from distributing power so no one actor can impose their will. It’s a fine principle. It’s also the exact opposite of how he has run everything he has ever touched . Start with...

    Read more → AI: T1
  • Politique

    C’est horrible à dire, mais peut-être que lorsque nous en aurons assez de voir la nature et nos maisons partir en fumée, nous prêterons davantage attention aux rapports « alarmistes » du GIEC — qui, au fond, n’avaient rien d’alarmiste.

    Mais surtout, peut-être mettrons-nous enfin la question du dérèglement climatique au-dessus du « wokisme » et autres sottises. Car une chose est certaine : notre avenir sera marqué par les migrations climatiques — des êtres humains fuyant la sécheresse, les déserts agricoles, les inondations et autres phénomènes extrêmes.

    Le plus probable, malheureusement, est que l’extrême droite instrumentalise la question climatique pour faire avancer ses projets antimigratoires, transformant encore davantage l’Europe en une forteresse entourée d’épaves humaines : des personnes qui cherchent simplement une vie meilleure, là où celle-ci est encore possible.

  • coding

    A health check that reports “healthy” is not the same claim as “this loop is still running.” I spent a chunk of today’s session learning that distinction the hard way, on a bot whose only job is to relay earthquake alerts to Bluesky.

    The setup: a queue drain loop calls health.updateActivity() once at the top of every tick, before it checks whether there’s anything to post.

    If the queue is empty, it returns immediately after that call — fine, activity stays fresh. But if a post is in flight, a re-entrancy guard (if (queueRunning) return) sits before that activity call on every subsequent tick.

    So a post that hangs doesn’t just delay one tick — it silently stops the timestamp from ever updating again, while the health endpoint keeps reporting healthy right up until its own staleness threshold (10 minutes) is crossed.

    I caught it by taking two /health readings 42 seconds apart and noticing lastActivity hadn’t moved at all — not slow, frozen.

    Confirmed the mechanism by correlating a dedup file’s mtime with the exact freeze-and-recover window: a post to the Bluesky API had started, then sat there for ten minutes before some unrelated default finally aborted it.

    The actual bug was almost embarrassingly small: bskyHandler.ts and its fleet-mode equivalent both constructed the Bluesky API client with no request timeout at all.

    The RSS-fetching side of the same codebase already wrapped its fetches in one. Nobody had ported the pattern to the half that talks to Bluesky.

    Fix was an AbortController wrapped around the client’s fetch, 30 seconds, done.

  • indieweb

    Damn, stumbled on a black hole of the past, really sorry to all the blogs that interacted with mine circa 2016 and that I never replied to, I was in a huge Justice battle IRL and my site at the time was not giving me as much control and view over what’s happening than it is today, some of these replies I’m seeing now for the first time.

    There is also quite a few dead links that I never managed to recover from my server crash from around those years

  • https://calebhailey.com/s/1785099309000/

    Thanks for sharing RSC ! There is still a lot of work before I start to really enjoy using it as I envision but its been really fun to develop :)

    Permalink
  • micropub indieweb

    Cross-browser Micropub client extension. Post to your IndieWeb blog from any page.

    rmdes.github.io/plume/ - now with Draft support, right in your browser of choice !

  • https://rmendes.net/replies/2026/08/12/1bf11/

    I need to fix duplicate webmentions

    • 1 is coming from legit webmention
    • 2 is coming from fed.brid.gy

    I need to think about how to fix this

    Permalink
  • Test from Chromium based browser, Plume Micropub extension

  • Testing Plume from Firefox

  • https://srijan.ch/notes/2026-08-12-001

    I have looked at your Micropub plugin and then debugged the issues with claude and I think I found the problem, nothing to do on your side, it was really a bug on my side : https://github.com/rmdes/plume/releases I submitted version 1.3.1 to the extension stores, both should be available soon, you can always “developer” load it via the github release page if you don’t want to wait, let me know how it goes :)

    Permalink
  • https://srijan.ch/notes/2026-08-12-001

    Do you have access to your Kirby server logs ? would be interesting to check what’s the error precisely, have you looked at the dev console log when you attempt to add your site to the extension settings ? this would allow to gather a bit more information I suppose, another way would be to create a user for me, so that I can connect using it and launch mcp playwright debug in the process to understand what’s happening

    Permalink