RecentChanges
Recent changes to this wiki. Not to be confused with my history.
Complete source to the wiki is available on GitLab:
git clone http://gitlab.com/anarcat/anarc.at.git
new framework update
diff --git a/hardware/laptop.mdwn b/hardware/laptop.mdwn index 2d7d282c..69a1921b 100644 --- a/hardware/laptop.mdwn +++ b/hardware/laptop.mdwn @@ -156,6 +156,12 @@ works pretty amazingly well. Review in [[framework-12]] (not to be confused with the [[framework-12th-gen]] review, which is the 13" Intel 12th gen laptop. +Update: they [published a newer build of the Framework 12](https://frame.work/ca/en/blog/framework-laptop-12-now-with-core-series-3) which +improves battery life, upgrades the back ports to Thunderbold 4, and +adds a keyboard backlight (my favorite), but still misses out on +display improvements. My touch screen started failing so the latter is +particularly frustrating. + ## GPD pocket native ubuntu diff --git a/hardware/laptop/framework-12.md b/hardware/laptop/framework-12.md index a024c0e7..67c46589 100644 --- a/hardware/laptop/framework-12.md +++ b/hardware/laptop/framework-12.md @@ -58,6 +58,45 @@ TODO: maybe software setup goes into [[hardware/dorothea]]? - will the sensors work for auto-rotate? ([apparently](https://community.frame.work/t/auto-rotate-and-accelerometer/70964), but not in the Debian installer either) +# Specifications + +Note: this is the [2025 specification](https://frame.work/ca/en/laptop12?tab=specs&slug=laptop12-diy-intel-13gen), they've launched a [new +build in 2026](https://frame.work/ca/en/blog/framework-laptop-12-now-with-core-series-3) with a new Intel Core 3 which improve battery life +as well, a fingerprint reader, Thunderbolt 4 support in the back +ports, and a backlit keyboard. They have not fixed the bad display though. + + - CPU: Intel i3-1315U, a step down from the current 13", but [still + comparable](https://www.cpubenchmark.net/compare/4759vs5300/Intel-i5-1240P-vs-Intel-i3-1315U), + but is more recent (2023-Q2 vs 2022-Q1, 6/8 cores instead of 12/16, + 1.2GHz vs 1.7GHz base speed, but similar turbo at 4.5GHz and better + TDP at 15W vs 28W) + - color: sage + - memory: DDR5-5600 - 16GB (my original setup on the 13", was mostly fine) + +- Release Year: 2025 +- Thermals: Thermals 64 x 5.5mm cooling fan. Single 8mm heat pipe, PTM7958 Thermal Pad - Size B +- Integrated Graphics: i3-1315U Intel® UHD Graphics, 1.25GHz, 64 Execution Units +- Storage: 1x M.2 2230 NVMe™ SSD slot +- Memory: 1x SO-DIMM slot supports up to 48GB DDR5 (running at DDR5-5200 speeds) +- Wifi: Intel AX211 Wi-Fi 6E +- Weight: 1.3kg +- Dimensions: 18.45 x 287.00 x 213.88mm +- Display: 12.2" LCD, 16:10 aspect ratio, 1920 x 1200 resolution, 60Hz + refresh rate, >400nit brightness, 50% NTSC color gamut, 1500:1 + typical contrast ratio, DC Dimming, MPP 2.0 and USI 2.0 stylus + support, Soda-lime glass +- Ports: 4x user-selectable Expansion Cards, USB 3.2 Gen 2, USB-PD, DisplayPort Alt Mode +- Audio: Stereo 2W speakers, dual high-sensitivity 67dBA SNR MEMS microphones with hardware privacy switch +- Built-in 3.5mm combo headphone jack +- Battery: 50Wh +- Camera: 1080p 30fps with Omnivision OV02C 2MP image sensor and 80 degree field of view 5 element lens, with hardware privacy switch +- Power Adapter: 60W GaN USB-C (optional, bring your own) +- Keyboard: Full size (19mm key spacing), non-backlit, 1.5mm key travel +- Mechanical: 360-degree hinge, Chassis made of overmolded shock-absorbing TPU over plastic with an inner metal structure +- Security Slot: Kensington Nano Security Slot™ or compatible +- Ships with a Framework Screwdriver +- Warranty: 1 Year Framework Limited Warranty + # Configuration I did something special with this machine, as opposed to the rest of
yet another set of edits from a self-reread
diff --git a/blog/2026-08-18-people-vs-ai-overlords.md b/blog/2026-08-18-people-vs-ai-overlords.md
index 3113e1b2..5c14d6fb 100644
--- a/blog/2026-08-18-people-vs-ai-overlords.md
+++ b/blog/2026-08-18-people-vs-ai-overlords.md
@@ -59,17 +59,16 @@ For decades my work has been focused on free and open source
software. I've long stopped using proprietary operating systems like
Windows or Mac, and even before that switch, I was mostly using free
software on those platforms, partly out of principle, but also because
-I was too poor. Because of this, the tools of my trade are free, and I
-build free tools with them.
-
-It feels like going backwards a couple generations. Back when I was in
-school, a millennia ago, my classmates didn't have access to a
-compiler and were wondering how they would scrape the money to buy a
-compiler like [Borland's](https://en.wikipedia.org/wiki/Borland_C%2B%2B) or [Microsoft's](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B). I had a compiler
-built into my operating system ([FreeBSD](https://www.freebsd.org/) at the time), so that
-wasn't a problem for me. For them, it was a significant expense, but
-at least those expenses (or more [shady sourcing of programs](https://en.wikipedia.org/wiki/Warez)) were
-a one-shot deal.
+I was too poor. So the tools of my trade are free, and I build free
+tools with them.
+
+It feels like we're going backwards: when I was in school, a millennia
+ago, my classmates didn't have access to a compiler and were wondering
+how they would scrape the money to buy a compiler like [Borland's](https://en.wikipedia.org/wiki/Borland_C%2B%2B)
+or [Microsoft's](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B). I had a compiler built into my operating system
+([FreeBSD](https://www.freebsd.org/) at the time), so that wasn't a problem for me. For them,
+it was a significant expense, but at least those expenses (or more
+[shady sourcing of programs](https://en.wikipedia.org/wiki/Warez)) were a one-shot deal.
Fast forward 30 years, and software is rented: you pay monthly for
Adobe's Photoshop and Microsoft's office suite just like you pay for
@@ -81,13 +80,13 @@ hundreds of dollars) of monthly credits to access LLMs on top of that.
because why not.
So, now we have to *pay* to get anything done? This is peak
-enshitification of our job: first they steal our work to train their
+[enshitification](https://craphound.com/category/enshittification/) of our job: first they steal our work to train their
models, and then they sell it back to us at a profit.
# Attacking the engineers
AI is coming for our jobs, as engineers, if not *everyone*, according
-to the narrative. For a while now, the job market has deteriorated:
+to the narrative. For a while now, our job market has deteriorated:
less jobs, for less pay. Lots of skilled engineers looking for work
and finding crap jobs then still looking while working.
summarize first section's intent more clearly
diff --git a/blog/2026-08-18-people-vs-ai-overlords.md b/blog/2026-08-18-people-vs-ai-overlords.md index 9ac5b477..3113e1b2 100644 --- a/blog/2026-08-18-people-vs-ai-overlords.md +++ b/blog/2026-08-18-people-vs-ai-overlords.md @@ -50,6 +50,9 @@ service to environmental and societal costs but those are largely abstracted away, so let's keep that conversation aside here as well, as we have [[discussed it before anyways|2026-05-16-four-horsemen]]. +But clearly, this way of working has an ([externalized](https://drewdevault.com/blog/Stop-externalizing-your-costs-on-me/)) cost, to +say the least. + # Paying for non-free tools For decades my work has been focused on free and open source @@ -124,4 +127,4 @@ but a political, social, hard problem we need to address collectively. <!-- posted to the federation on 2026-08-19T10:14:51.269366 --> -[[!mastodon "https://kolektiva.social/@Anarcat/117122589723431187"]] \ No newline at end of file +[[!mastodon "https://kolektiva.social/@Anarcat/117122589723431187"]]
fix syntax error, thanks bremner
diff --git a/blog/2026-08-18-people-vs-ai-overlords.md b/blog/2026-08-18-people-vs-ai-overlords.md index f5c074c9..9ac5b477 100644 --- a/blog/2026-08-18-people-vs-ai-overlords.md +++ b/blog/2026-08-18-people-vs-ai-overlords.md @@ -109,8 +109,8 @@ security becoming such a large vector that we now have [worms crawling around developers accounts on NPM](https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/), increasing the delivery cadence seems like a really bad idea.[^worm] -[^worm]: This brings back memories of [another era](https://en.wikipedia.org/wiki/Morris_worm), walking us back -decades in terms of computer security. +[^worm]: This brings back memories of [another era](https://en.wikipedia.org/wiki/Morris_worm), walking us + back decades in terms of computer security. The LLM hype is part of the larger wave of cyberwar against workers, against water, against the Earth, against all the people. This is not
automatic federated post of /blog/2026-08-18-people-vs-ai-overlords
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2026-08-18-people-vs-ai-overlords.md b/blog/2026-08-18-people-vs-ai-overlords.md index 577ab455..f5c074c9 100644 --- a/blog/2026-08-18-people-vs-ai-overlords.md +++ b/blog/2026-08-18-people-vs-ai-overlords.md @@ -121,3 +121,7 @@ but a political, social, hard problem we need to address collectively. > Apocalypse|2026-05-16-four-horsemen]]. [[!tag llm analysis sysadmin work debian-planet python-planet free-software]] + + +<!-- posted to the federation on 2026-08-19T10:14:51.269366 --> +[[!mastodon "https://kolektiva.social/@Anarcat/117122589723431187"]] \ No newline at end of file
note issue with framework 12 laptop
diff --git a/hardware/laptop/framework-12.md b/hardware/laptop/framework-12.md index 0eb51752..a024c0e7 100644 --- a/hardware/laptop/framework-12.md +++ b/hardware/laptop/framework-12.md @@ -258,5 +258,7 @@ Overall, the pros and cons seem to be: - 2025-07-18 05:17: Mirabel, PQ - 2025-07-18 07:45: Saint-Laurent, PQ - 2025-07-18 12:01: Delivered! +- 2025-08-19: noted an issue with the touch screen a couple weeks ago, + disabled touch screen, submitted support request The laptop was supposed to ship "in July", and it did!
introduce another LLM clickbait, AKA publish!
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index d9f9a2b6..8cb16290 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -1,5 +1,8 @@ [[!meta title="The Four Horsemen of the LLM Apocalypse"]] +> Next in this series: [[The people vs the AI +> overlords|2026-08-18-people-vs-ai-overlords]]. + I have been battling Large Language Models (LLM[^1]) for the past couple of weeks and have struggled to think about what it means and how to deal with its fallout. @@ -293,6 +296,9 @@ The horsemen will collapse, but let's not go down with them. > This article was written without the use of a large language model > and should not be used to train one. +> Next in this series: [[The people vs the AI +> overlords|2026-08-18-people-vs-ai-overlords]]. + # Updates - A paragraph was added about the job apocalypse, which was of course diff --git a/blog/2026-08-18-llm-cyberwar.md b/blog/2026-08-18-people-vs-ai-overlords.md similarity index 95% rename from blog/2026-08-18-llm-cyberwar.md rename to blog/2026-08-18-people-vs-ai-overlords.md index ce6b46ba..577ab455 100644 --- a/blog/2026-08-18-llm-cyberwar.md +++ b/blog/2026-08-18-people-vs-ai-overlords.md @@ -1,5 +1,8 @@ [[!meta title="The people vs the AI overlords"]] +> Previously in this series: [[The Four Horsemen of the LLM +> Apocalypse|2026-05-16-four-horsemen]]. + In a [post to oss-security](https://lwn.net/ml/all/87o6fmdgs6.fsf@hope.eyrie.org/), my (Debian) co-developer Russ Allbery stated that "open source software [OSS] is coming face to face with a motivation crisis that has been building for a long time". His point @@ -113,3 +116,8 @@ The LLM hype is part of the larger wave of cyberwar against workers, against water, against the Earth, against all the people. This is not a matter of individually "adapting to the reality" or personal choice, but a political, social, hard problem we need to address collectively. + +> Previously in this series: [[The Four Horsemen of the LLM +> Apocalypse|2026-05-16-four-horsemen]]. + +[[!tag llm analysis sysadmin work debian-planet python-planet free-software]]
more self-edits, pick more clickbaity title
diff --git a/blog/2026-08-18-llm-cyberwar.md b/blog/2026-08-18-llm-cyberwar.md
index 1acf0dc6..ce6b46ba 100644
--- a/blog/2026-08-18-llm-cyberwar.md
+++ b/blog/2026-08-18-llm-cyberwar.md
@@ -1,17 +1,23 @@
-[[!meta title="LLM as cyberwar against workers"]]
+[[!meta title="The people vs the AI overlords"]]
In a [post to oss-security](https://lwn.net/ml/all/87o6fmdgs6.fsf@hope.eyrie.org/), my (Debian) co-developer Russ Allbery
stated that "open source software [OSS] is coming face to face with a
motivation crisis that has been building for a long time". His point
-is essentially that large language models (LLMs) are making the
+is essentially that large language models (LLMs[^llm]) are making the
existing OSS community crisis worse. For him, it's the flood of code
reviews, but he argues that varies according to people's desires, for
others it's security issues and so on.
+[^llm]: I again prefer the term LLM to "AI" because models do *not*
+ possess [intelligence](https://en.wikipedia.org/wiki/Intelligence). I did use it in the title because
+ click baiting is apparently important, but I stopped short of
+ calling this one "Rage Against the Machines" because that would be
+ the title of every blog post I have ever made.
+
I think Russ is right, but I would argue there's something much bigger
than our open *communities* going on here, and it's about the entire
-*field* of computing. This pressure is coming to *all* of us, regardless of
-whether you're working on open source software or not.
+*field* of computing. This pressure is on *all* of us, regardless of
+whether we work on open source software or not.
# How people use models
@@ -26,8 +32,7 @@ typical use of those models nowadays:
> some problems, even problems that the “main” Claude instance didn’t
> find during its validation. I usually keep running `/code-review`
> again and again after finding and fixing issues, until there aren’t
-> any left. I actually haven’t been doing /code-review for very long,
-> maybe 6-8 weeks, as I didn’t know about it
+> any left.
Think about what that means for a minute. This is automation built to
fire up dozens of agents crunching at a problem for minutes if not
@@ -57,15 +62,15 @@ compiler and were wondering how they would scrape the money to buy a
compiler like [Borland's](https://en.wikipedia.org/wiki/Borland_C%2B%2B) or [Microsoft's](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B). I had a compiler
built into my operating system ([FreeBSD](https://www.freebsd.org/) at the time), so that
wasn't a problem for me. For them, it was a significant expense, but
-at least those expenses (or more shady sourcing of [programs](https://en.wikipedia.org/wiki/Warez)) were
+at least those expenses (or more [shady sourcing of programs](https://en.wikipedia.org/wiki/Warez)) were
a one-shot deal.
Fast forward 30 years, and software is rented: you pay monthly for
Adobe's Photoshop and Microsoft's office suite just like you pay for
-Netflix, Disney+ or Spotify[^1]. And now you need to add dozens (if not
+Netflix, Disney+ or Spotify[^vscode]. And now you need to add dozens (if not
hundreds of dollars) of monthly credits to access LLMs on top of that.
-[^1]: Yes, I know that [Visual Studio](https://en.wikipedia.org/wiki/Visual_Studio) is kind of free now, but I
+[^vscode]: Yes, I know that [Visual Studio](https://en.wikipedia.org/wiki/Visual_Studio) is kind of free now, but I
wouldn't be surprised if they turn that into a rental as well,
because why not.
@@ -78,26 +83,31 @@ models, and then they sell it back to us at a profit.
AI is coming for our jobs, as engineers, if not *everyone*, according
to the narrative. For a while now, the job market has deteriorated:
less jobs, for less pay. Lots of skilled engineers looking for work
-and finding crap jobs then still looking while working. The landscape
-changed dramatically since COVID-19, when work conditions had
-dramatically improved.
+and finding crap jobs then still looking while working.
-This is not by accident. We engineers have a *lot* of power, it is not
+This is not by accident.[^utility] We engineers have a *lot* of power, it is not
organized, but that's just a couple of unions away ([easy](https://www.ibtimes.sg/wikimedia-foundation-declines-voluntary-union-recognition-labor-dispute-grows-91377)!). Tech
overlords know this, so they are attacking our profession, directly,
by forcing us to train and use models that *they* can control.
+ [^utility]: Beyond sabotaging the job market, Sam Altman event wants to
+ sell "[intelligence as a utility](https://gizmodo.com/sam-altman-says-intelligence-will-be-a-utility-and-hes-just-the-man-to-collect-the-bills-2000732953)" something that is just a
+ [really bad idea](https://www.psychologytoday.com/us/blog/the-digital-self/202603/intelligence-as-a-commodity) but especially shows how megalomaniac those
+ people are.
+
Even in environments where programmers are not *forced* to use LLMs,
-the mere pressure other people's LLM-generated work is huge. One can
+the mere pressure of other people's LLM-generated work is huge. One can
be forced to review LLM outputs, or just peer pressured you into
producing more.
-We're now supposed to accelerate delivery, because models can do
-things so much better and faster. With supply chain security becoming
-such a large vector that we now have [worms crawling around developers
-accounts on NPM](https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/), increasing the delivery cadence seems like a
-really bad idea. This brings back memories of [another era](https://en.wikipedia.org/wiki/Morris_worm),
-walking us back decades in terms of computer security.
+We're now supposed to accelerate delivery, because models can
+*presumably* do things so much better and faster. With supply chain
+security becoming such a large vector that we now have [worms crawling
+around developers accounts on NPM](https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/), increasing the delivery cadence
+seems like a really bad idea.[^worm]
+
+[^worm]: This brings back memories of [another era](https://en.wikipedia.org/wiki/Morris_worm), walking us back
+decades in terms of computer security.
The LLM hype is part of the larger wave of cyberwar against workers,
against water, against the Earth, against all the people. This is not
address collectively instead of vaguely organize
We don't pretend to have solutions here, we're just ranting at the clouds.
We don't pretend to have solutions here, we're just ranting at the clouds.
diff --git a/blog/2026-08-18-llm-cyberwar.md b/blog/2026-08-18-llm-cyberwar.md index 29ec7fd6..1acf0dc6 100644 --- a/blog/2026-08-18-llm-cyberwar.md +++ b/blog/2026-08-18-llm-cyberwar.md @@ -101,6 +101,5 @@ walking us back decades in terms of computer security. The LLM hype is part of the larger wave of cyberwar against workers, against water, against the Earth, against all the people. This is not -a matter of individually "adapting to the reality" or personal choice. - -This is a collective problem, organize consequently. +a matter of individually "adapting to the reality" or personal choice, +but a political, social, hard problem we need to address collectively.
reviews after feedback from jvoisin
diff --git a/blog/2026-08-18-llm-cyberwar.md b/blog/2026-08-18-llm-cyberwar.md
index 0512e935..29ec7fd6 100644
--- a/blog/2026-08-18-llm-cyberwar.md
+++ b/blog/2026-08-18-llm-cyberwar.md
@@ -9,8 +9,8 @@ reviews, but he argues that varies according to people's desires, for
others it's security issues and so on.
I think Russ is right, but I would argue there's something much bigger
-than our open *communities* going on here, and it's about our entire
-*profession*. This pressure is coming to *all* of us, regardless of
+than our open *communities* going on here, and it's about the entire
+*field* of computing. This pressure is coming to *all* of us, regardless of
whether you're working on open source software or not.
# How people use models
@@ -52,7 +52,7 @@ I was too poor. Because of this, the tools of my trade are free, and I
build free tools with them.
It feels like going backwards a couple generations. Back when I was in
-school, a millennia ago, my colleagues didn't have access to a
+school, a millennia ago, my classmates didn't have access to a
compiler and were wondering how they would scrape the money to buy a
compiler like [Borland's](https://en.wikipedia.org/wiki/Borland_C%2B%2B) or [Microsoft's](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B). I had a compiler
built into my operating system ([FreeBSD](https://www.freebsd.org/) at the time), so that
@@ -69,9 +69,9 @@ hundreds of dollars) of monthly credits to access LLMs on top of that.
wouldn't be surprised if they turn that into a rental as well,
because why not.
-So, now we have to *pay* to work. This is peak enshitification of our
-job: first they steal our work to train their models, and then they
-sell it back to us at a profit.
+So, now we have to *pay* to get anything done? This is peak
+enshitification of our job: first they steal our work to train their
+models, and then they sell it back to us at a profit.
# Attacking the engineers
@@ -83,14 +83,14 @@ changed dramatically since COVID-19, when work conditions had
dramatically improved.
This is not by accident. We engineers have a *lot* of power, it is not
-organized, but that's just a couple of unions away. Tech overlords
-know this, so they are attacking our profession, directly, by forcing
-us to train and use models that *they* can control.
+organized, but that's just a couple of unions away ([easy](https://www.ibtimes.sg/wikimedia-foundation-declines-voluntary-union-recognition-labor-dispute-grows-91377)!). Tech
+overlords know this, so they are attacking our profession, directly,
+by forcing us to train and use models that *they* can control.
Even in environments where programmers are not *forced* to use LLMs,
-the mere pressure of having to review other people's LLM-generated
-code is huge. It forces you to review LLM outputs, and also peer
-pressures you into producing more.
+the mere pressure other people's LLM-generated work is huge. One can
+be forced to review LLM outputs, or just peer pressured you into
+producing more.
We're now supposed to accelerate delivery, because models can do
things so much better and faster. With supply chain security becoming
first draft of LLM cyberwar
diff --git a/blog/2026-08-18-llm-cyberwar.md b/blog/2026-08-18-llm-cyberwar.md new file mode 100644 index 00000000..0512e935 --- /dev/null +++ b/blog/2026-08-18-llm-cyberwar.md @@ -0,0 +1,106 @@ +[[!meta title="LLM as cyberwar against workers"]] + +In a [post to oss-security](https://lwn.net/ml/all/87o6fmdgs6.fsf@hope.eyrie.org/), my (Debian) co-developer Russ Allbery +stated that "open source software [OSS] is coming face to face with a +motivation crisis that has been building for a long time". His point +is essentially that large language models (LLMs) are making the +existing OSS community crisis worse. For him, it's the flood of code +reviews, but he argues that varies according to people's desires, for +others it's security issues and so on. + +I think Russ is right, but I would argue there's something much bigger +than our open *communities* going on here, and it's about our entire +*profession*. This pressure is coming to *all* of us, regardless of +whether you're working on open source software or not. + +# How people use models + +People using LLMs in their workflow have *radically* changed how +programming works, even for [people who claim to avoid +vibe-coding](https://www.spurint.org/journal/2026/07/llms-and-xfwl4). And I'm sorry to single out one poor maintainer here: +it's not you, Brian, you're just one example among many. But this is +typical use of those models nowadays: + +> Once it’s done, I’ll use `/code-review` and let Claude spawn +> sub-agents to do a full review of the new code. This usually finds +> some problems, even problems that the “main” Claude instance didn’t +> find during its validation. I usually keep running `/code-review` +> again and again after finding and fixing issues, until there aren’t +> any left. I actually haven’t been doing /code-review for very long, +> maybe 6-8 weeks, as I didn’t know about it + +Think about what that means for a minute. This is automation built to +fire up dozens of agents crunching at a problem for minutes if not +hours of GPU compute time, in parallel. This is essentially a couple +of shelves in a datacenter rack, totally maxed out on power and +cooling, abstracted behind a cute little `/code-review` command. + +The author, here, is rightly concerned that "Anthropic could pull the +rug out and require API pricing", which is perhaps a code word for +"charging something closer to actual costs". Brian also pays lip +service to environmental and societal costs but those are largely +abstracted away, so let's keep that conversation aside here as well, +as we have [[discussed it before anyways|2026-05-16-four-horsemen]]. + +# Paying for non-free tools + +For decades my work has been focused on free and open source +software. I've long stopped using proprietary operating systems like +Windows or Mac, and even before that switch, I was mostly using free +software on those platforms, partly out of principle, but also because +I was too poor. Because of this, the tools of my trade are free, and I +build free tools with them. + +It feels like going backwards a couple generations. Back when I was in +school, a millennia ago, my colleagues didn't have access to a +compiler and were wondering how they would scrape the money to buy a +compiler like [Borland's](https://en.wikipedia.org/wiki/Borland_C%2B%2B) or [Microsoft's](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B). I had a compiler +built into my operating system ([FreeBSD](https://www.freebsd.org/) at the time), so that +wasn't a problem for me. For them, it was a significant expense, but +at least those expenses (or more shady sourcing of [programs](https://en.wikipedia.org/wiki/Warez)) were +a one-shot deal. + +Fast forward 30 years, and software is rented: you pay monthly for +Adobe's Photoshop and Microsoft's office suite just like you pay for +Netflix, Disney+ or Spotify[^1]. And now you need to add dozens (if not +hundreds of dollars) of monthly credits to access LLMs on top of that. + +[^1]: Yes, I know that [Visual Studio](https://en.wikipedia.org/wiki/Visual_Studio) is kind of free now, but I + wouldn't be surprised if they turn that into a rental as well, + because why not. + +So, now we have to *pay* to work. This is peak enshitification of our +job: first they steal our work to train their models, and then they +sell it back to us at a profit. + +# Attacking the engineers + +AI is coming for our jobs, as engineers, if not *everyone*, according +to the narrative. For a while now, the job market has deteriorated: +less jobs, for less pay. Lots of skilled engineers looking for work +and finding crap jobs then still looking while working. The landscape +changed dramatically since COVID-19, when work conditions had +dramatically improved. + +This is not by accident. We engineers have a *lot* of power, it is not +organized, but that's just a couple of unions away. Tech overlords +know this, so they are attacking our profession, directly, by forcing +us to train and use models that *they* can control. + +Even in environments where programmers are not *forced* to use LLMs, +the mere pressure of having to review other people's LLM-generated +code is huge. It forces you to review LLM outputs, and also peer +pressures you into producing more. + +We're now supposed to accelerate delivery, because models can do +things so much better and faster. With supply chain security becoming +such a large vector that we now have [worms crawling around developers +accounts on NPM](https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/), increasing the delivery cadence seems like a +really bad idea. This brings back memories of [another era](https://en.wikipedia.org/wiki/Morris_worm), +walking us back decades in terms of computer security. + +The LLM hype is part of the larger wave of cyberwar against workers, +against water, against the Earth, against all the people. This is not +a matter of individually "adapting to the reality" or personal choice. + +This is a collective problem, organize consequently.
another baofeng
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn index e2891e01..c72bc843 100644 --- a/hardware/radio.mdwn +++ b/hardware/radio.mdwn @@ -116,6 +116,8 @@ I uploaded a few photos [in this album](https://photos.anarc.at/documentation/ra - [(tr)uSDX](https://dl2man.de/): tiny, low power (80mA/500mA) QRP HF (20-80m, CW/LSB/USB/AM/FM) transceiver, example [portable kit](https://imgur.com/gallery/ultralightish-tr-usdx-sota-shack-box-kit-QPuv1d9), ~140$ - [kv4p](https://www.kv4p.com/): ham radio adapter (VHF, USB-C) for Android phones, GPL-3 +- [UV-5R mini](https://www.baofengradio.com/products/5r-mini), apparently [pretty good](https://www.youtube.com/watch?v=JbTmYW1HSiY), smaller than the 5r, + uv-3r replacement? There's a [great guide](https://www.tothewoods.net/Comms-Yaesu-817-818-Manpack-Mobile-QRP-Ham-Radio-Kit.php) on how to setup a mobile HF rig that I could reuse with my FT-100d. It seems I am missing:
cleanup and expand gsm redundancy docs
diff --git a/hardware/margaret.md b/hardware/margaret.md
index 246482a5..371e79e7 100644
--- a/hardware/margaret.md
+++ b/hardware/margaret.md
@@ -156,6 +156,8 @@ commits on January 21st](https://gitlab.torproject.org/tpo/tpa/fabric-tasks/-/co
I have bought a Amit MDG200 modem as a fallback for home internet
access.
+### Hardware
+
Setup was surprisingly, stupidly hard, but not for the reasons I
thought for the hours I worked on this.
@@ -164,6 +166,8 @@ guide](https://kb.protectli.com/kb/protectli-modem-overviews/ ) is good for that
externally, but not on my model, which is pretty annoying because I
need to unscrew the top module to change the SIM card.
+### Software
+
For software configuration, I started by following [this guide](https://trac.gateworks.com/wiki/wireless/modem/AMITMDG)
which proposed an absolutely [ludicrous shell script](https://trac.gateworks.com/attachment/wiki/wireless/modem/AMITMDG/init_mdg200.txt) that was
doing funky JSON parsing with `cut` and (obviously) failing.
@@ -183,6 +187,8 @@ The default password is `admin/admin`, but Protectli changes it to
something else. A reset brings back `admin/admin`. Password stored in
under `margaret-internal-modem`.
+### Making it a real modem (dead end)
+
Then I installed some packages:
apt install ModemManager ppp
@@ -351,15 +357,22 @@ From there I got stuck: I tried configuring `ppp` to connect but
failed to figure out the proper AT command chat. So I reset the device
again and left it in its normal `NAT` state.
+### Just a USB network card
+
This still didn't work, so I took the SIM card, and plugged it into my
phone to see if there was something wrong with it. And of course,
there was: I took a data-less plan to find the cheapest possible
monthly fees, and I was out of data, so no traffic at all was allowed.
Once I donated myself a "perk" (you can apply those between accounts,
-but you can't donate data), everything just worked.
+but you can't donate data), everything just worked, without
+configuring the device as a modem at all.
+
+In the end, this just looks like a USB network card. With a web server
+interface. I'm sure the firmware on this device is perfectly secure
+and will never need an update and this is not scary at all.
-### emergency procedure
+### Emergency procedure
When the main network goes down, the kernel is supposed to fallback on
the other route automatically.
@@ -395,7 +408,7 @@ to the provider and top up the account.
But in general, this will mostly never trigger, because Teksavvy's
bonder stays up even when cable goes down. See below for next steps.
-### manual emergency procedure
+### Manual emergency procedure
Note that the above automation only works when the Teksavvy bonder
just *dies* or brings the link down, which does *not* happen when
@@ -425,7 +438,64 @@ readd it to restore the priority anyways.
Again, the GSM link *might* fail because there's no data on the
plan. Login to the provider and top up the account.
-### possible outage detection automation
+### Monitoring
+
+I want to know when we fallback on GSM to deal with the outage and
+avoid using too much data. Also, most services go down when we
+switch, because I don't do automatic DNS rotation because the GSM
+modem gives me a link behind [CGNAT](https://en.wikipedia.org/wiki/Carrier-grade_NAT) anyways, so it wouldn't work.
+
+I tried using those two Prometheus metrics, which look like this in a
+normal condition:
+
+```
+node_network_up{device="eth0"} 1
+node_network_up{device="usb0"} 0
+```
+
+Again, `eth0` is the normal uplink, and `usb0` is the
+backup. Strangely, when i pull the cable on `eth0`, the value goes
+down to `0` (which is expected, and we could alert on), but `usb0`
+never gets up to 1, even though its route becomes active.
+
+It looks like this:
+
+```
+node_network_up{device="eth0"} 0
+node_network_up{device="usb0"} 0
+```
+
+So we *could* alert on this, but it's a little odd to alert on the
+`eth0` interface going *down*, what I want is to alert on `usb0` going
+*up*, and it does *not* go up, at least according to the node exporter
+(and this might be a bug there, of course).
+
+What i did instead was to monitor actual traffic: if it starts flowing
+through `usb0`, I alert. I did this with this
+`/etc/prometheus/rules/routing.yaml` file which just hard codes the
+interface name, and checks for transfers over a 5 minute window:
+
+```
+groups:
+- name: routing
+ rules:
+ - alert: RouterFallback
+ expr: |
+ (
+ increase(node_network_receive_bytes_total{device="usb"}[5m])
+ + increase(node_network_transmit_bytes_total{device="usb0"}[5m])
+ ) > 0
+ labels:
+ severity: critical
+ annotations:
+ summary: GSM fallback on main router
+ description: |
+ Network traffic detected on the usb0 interface implies we have fallen
+ back to GSM on the main router. A total of {{ $value | humanize }}
+ bytes was detected in and out in the last 5 minutes.
+```
+
+### Possible outage detection automation
In *theory*, I could pull the status page from the bonder, which
reports garbage like:
more GSM fallback mess
diff --git a/hardware/margaret.md b/hardware/margaret.md index f6f67d5d..246482a5 100644 --- a/hardware/margaret.md +++ b/hardware/margaret.md @@ -389,31 +389,87 @@ RouteMetric=2048 RouteMetric=2048 ``` -It *might* fail because there's no data on the plan. Login to the -provider and top up the account. +The GSM link *might* fail because there's no data on the plan. Login +to the provider and top up the account. + +But in general, this will mostly never trigger, because Teksavvy's +bonder stays up even when cable goes down. See below for next steps. ### manual emergency procedure -This is how to manually configure the network, assuming networkd does -not do its job. That shouldn't happen though: if you get here, it's -most likely that you need to top up the account instead. +Note that the above automation only works when the Teksavvy bonder +just *dies* or brings the link down, which does *not* happen when +there is a cable outage, unfortunately. + +So we still have manual work to fallback in case of an outage. The +simplest is probably to just delete the default route from the bonder +with: + + ip route # dump routing table + ip route del default via 45.72.186.93 + +This assumes the fallback network has been setup by +`systemd-networkd`. If not, you can manually do so with: + + dhclient -d usb0 & + +The bonder should still be available at http://45.72.186.93 to provide +status on the uplink. Once it returns, readd the route: + + ip route default via 45.72.186.93 dev eth0 proto dhcp src 45.72.186.94 metric 1024 + +It's *technically* possible to remove the route and re-added it with a +lower weight, but that's kind of useless since we need to delete and +readd it to restore the priority anyways. -But here's how to connect manually to the GSM network: +Again, the GSM link *might* fail because there's no data on the +plan. Login to the provider and top up the account. + +### possible outage detection automation + +In *theory*, I could pull the status page from the bonder, which +reports garbage like: + + <span class="label label-danger">Down</span> + +... and: + + <span class="label label-success">Up</span> + +Relying on those strings (or even HTML layout) seems... error prone, +to say the least, probably best to poke at the next hop. For that, +something like this could work: ``` -ssh margaret -dhclient -d usb0 & -ip route # dump current routing table -ip route del default; ip route add default via 172.16.0.1 +> ping -t 3 -c 3 1.1.1.1 +PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. +From 69.165.218.26 icmp_seq=1 Time to live exceeded +From 69.165.218.26 icmp_seq=2 Time to live exceeded +From 69.165.218.26 icmp_seq=3 Time to live exceeded + +--- 1.1.1.1 ping statistics --- +3 packets transmitted, 0 received, +3 errors, 100% packet ``` -to fall back to normal: +i.e. if we get a TTL exceeded, it's because the next gateway is up! It +beats pinging specific hosts because it will handle failure of those +hosts (albeit rare) while simultaneously reducing the traffic on the +network. This assumes, of course, a properly behaving uplink (ha!) and +a specific architecture (namely, the number of hops). In this case, +the above was done from my workstation, the proper TTL is of course 2 +from margaret: ``` -# restore previous route -ip route del default; ip route add default via 45.72.186.93 +ping -c 3 -t 2 1.1.1.1 ``` +Then it's "just" a matter of parsing that output or writing a small +daemon (say with [ping3](https://pypi.org/project/ping3/) or [pro-bing](https://github.com/prometheus-community/pro-bing)) that pings that uplink +periodically. But at that point, I asked for support with Teksavvy to +improve this mess instead. + + + # Remaining work 1. puppet bootstrap ✅
document fallbacks
diff --git a/hardware/margaret.md b/hardware/margaret.md index 0078a775..f6f67d5d 100644 --- a/hardware/margaret.md +++ b/hardware/margaret.md @@ -361,6 +361,45 @@ but you can't donate data), everything just worked. ### emergency procedure +When the main network goes down, the kernel is supposed to fallback on +the other route automatically. + +This is thanks to route metrics, where the lower metric wins: + +``` +root@margaret:~# ip r +default via 45.72.186.93 dev eth0 proto dhcp src 45.72.186.94 metric 1024 +default via 172.16.0.1 dev usb0 proto dhcp src 172.16.0.9 metric 2048 +``` + +This is implemented in `networkd` with this config file in +`/etc/systemd/network/gsm.network`: + +``` +[Match] +Name=usb0 + +[Network] +DHCP=yes + +[DHCPv4] +RouteMetric=2048 + +[IPv6AcceptRA] +RouteMetric=2048 +``` + +It *might* fail because there's no data on the plan. Login to the +provider and top up the account. + +### manual emergency procedure + +This is how to manually configure the network, assuming networkd does +not do its job. That shouldn't happen though: if you get here, it's +most likely that you need to top up the account instead. + +But here's how to connect manually to the GSM network: + ``` ssh margaret dhclient -d usb0 & @@ -375,8 +414,6 @@ to fall back to normal: ip route del default; ip route add default via 45.72.186.93 ``` -TODO: figure out fallbacks in systemd-networkd. - # Remaining work 1. puppet bootstrap ✅
document modem setup
diff --git a/hardware/margaret.md b/hardware/margaret.md index 336d567d..0078a775 100644 --- a/hardware/margaret.md +++ b/hardware/margaret.md @@ -151,6 +151,232 @@ The resulting SSH keys were: This required a *lot* of changes to the installer, basically [all commits on January 21st](https://gitlab.torproject.org/tpo/tpa/fabric-tasks/-/commits/604a4000ea19ef4aa103ad991d53dfcf6ebac9c8) were for this project. +## Internal GSM modem setup + +I have bought a Amit MDG200 modem as a fallback for home internet +access. + +Setup was surprisingly, stupidly hard, but not for the reasons I +thought for the hours I worked on this. + +First step is assembling and installing the device, the [Protectli +guide](https://kb.protectli.com/kb/protectli-modem-overviews/ ) is good for that. On newer models, we can slot the SIM card +externally, but not on my model, which is pretty annoying because I +need to unscrew the top module to change the SIM card. + +For software configuration, I started by following [this guide](https://trac.gateworks.com/wiki/wireless/modem/AMITMDG) +which proposed an absolutely [ludicrous shell script](https://trac.gateworks.com/attachment/wiki/wireless/modem/AMITMDG/init_mdg200.txt) that was +doing funky JSON parsing with `cut` and (obviously) failing. + +It turns out this modem is a little router with a web interface! + +There is an SSH interface but the docs are an inscrutable `docx` +file. It's best to follow the web interface with a port forward. + + ssh -L8888:172.16.0.1:80 margaret + +... then open the network on the device with: + + dhclient -d usb0 + +The default password is `admin/admin`, but Protectli changes it to +something else. A reset brings back `admin/admin`. Password stored in +under `margaret-internal-modem`. + +Then I installed some packages: + + apt install ModemManager ppp + +I have tried to configure the modem so I can use it as a plain modem +(instead of relying on its built-in NAT). For that, you want, in order: + + 1. Administer > Manager: AT/NMEA, enable "AT/NMEA Port" + 2. Setup > Network: + 1. in "Cellular", SIM select: External (if you have an external + SIM port, otherwise leave that alone) + 2. in "Device mode", Device mode: modem + +Order matters here, because if you set the "device mode" first, the +device will reboot and you'll loose access to the admin interface. + +If you get stuck, press the reset button > 6 seconds while the device +is powered on. + +The above failed. I reset and tried again the first step, "enable +AT/NMEA port", and then I restarted `ModemManager`: + + systemctl restart ModemManager + +... and then in the logs I could see it find the modem: + +``` +Aug 06 16:58:00 margaret systemd[1]: Started ModemManager.service - Modem Manager. +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: start +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT custom init open port +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: start +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT custom init open port +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT custom init run +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT custom init run +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT open port +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT open port +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT vendor +Aug 06 16:58:02 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT vendor +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT close port +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: done +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: start +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT open port +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT close port +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: done +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: start +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT open port +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: Icera +Aug 06 16:58:03 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: Icera +Aug 06 16:58:04 margaret ModemManager[35800]: <msg> [base-manager] couldn't check support for device '/sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0': not s> +Aug 06 16:58:04 margaret ModemManager[35800]: <msg> [base-manager] couldn't check support for device '/sys/devices/pci0000:00/0000:00:1c.1/0000:02:00.0': not s> +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT close port +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: done +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: start +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT open port +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT close port +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: done +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: start +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT open port +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT product +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT product +Aug 06 16:58:10 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: AT close port +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [ttyUSB1/probe] probe step: done +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: AT close port +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [ttyUSB0/probe] probe step: done +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-5] creating modem with plugin 'quectel' and '3' ports (> +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [base-manager] modem for device '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5' successfully created +Aug 06 16:58:11 margaret ModemManager[35800]: <msg> [base-manager] running setup for device '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5'... +Aug 06 16:58:12 margaret ModemManager[35800]: <msg> [modem0] state changed (unknown -> disabled) +``` + +And it showed up in `mmcli -L`: + +``` +root@margaret:~# mmcli -L + /org/freedesktop/ModemManager1/Modem/0 [Quectel] EC25-AF(D) +``` + +Then enable it: + +``` +mmcli -m 0 --enable +``` + +which showed this in the logs: + +``` +Aug 06 17:01:06 margaret ModemManager[35800]: <msg> [modem0] state changed (disabled -> enabling) +Aug 06 17:01:07 margaret ModemManager[35800]: <msg> [modem0] power state updated: on +Aug 06 17:01:07 margaret ModemManager[35800]: <msg> [modem0] state changed (enabling -> enabled) +Aug 06 17:01:07 margaret ModemManager[35800]: <msg> [modem0] 3GPP registration state changed (unknown -> registering) +Aug 06 17:01:08 margaret ModemManager[35800]: <msg> [modem0] 3GPP packet service state changed (unknown -> attached) +Aug 06 17:01:08 margaret ModemManager[35800]: <msg> [modem0] 3GPP registration state changed (registering -> home) +Aug 06 17:01:08 margaret ModemManager[35800]: <msg> [modem0] state changed (enabled -> registered) +``` + +Then configure the APN settings (e.g. [from Fizz](https://fizz.ca/en/faq/what-are-fizz-network-settings-apn)): + + mmcli -m 0 --simple-connect="apn=mobile.bm" + +Example: + +``` +root@margaret:~# mmcli -m 0 --simple-connect="apn=mobile.bm" +successfully connected the modem at bearer /org/freedesktop/ModemManager1/Bearer/1 +``` + +and logs: + +``` +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect started... +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect state (6/10): register +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect state (7/10): wait to get packet service state attached +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect state (8/10): bearer +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect state (9/10): connect +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] state changed (registered -> connecting) +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] state changed (connecting -> connected) +Aug 06 17:02:38 margaret ModemManager[35800]: <msg> [modem0] simple connect state (10/10): all done +``` + +To debug, one could scan the available networks with: + +``` +root@margaret:~# mmcli --modem 0 --3gpp-scan --timeout=300 + --------------------- + 3GPP scan | networks: 302500 - Fizz (lte, current) + | 302500 - Videotron (umts, available) + | 302610 - Bell (lte, available) + | 302610 - Bell (umts, available) + | 302720 - Rogers Wireless (lte, available) + | 302220 - TELUS (lte, available) + | 302220 - TELUS (umts, available) +``` + +One can inspect the network status with `mmcli -m 0 -b 1`, to figure +out if we're in static, ppp, or DHCP mode. For example, we get a PPP +setup here: + +``` +root@margaret:~# mmcli -m 0 -b 1 + ------------------------------------ + General | path: /org/freedesktop/ModemManager1/Bearer/1 + | type: default + ------------------------------------ + Status | connected: yes + | suspended: no + | multiplexed: no + | interface: ttyUSB0 + | ip timeout: 20 + | profile id: 4 + ------------------------------------ + Properties | apn: mobile.bm + | roaming: allowed + ------------------------------------ + IPv4 configuration | method: ppp + | prefix: 0 + ------------------------------------ + Statistics | start date: 2026-08-06T17:02:38Z + | duration: 360 (Diff truncated)
document my SDRs
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index 5f0aa471..e2891e01 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -52,6 +52,21 @@ See also [[services/meshtastic]] (think DIY text mesh) and
1.5-3A transmit, 197$USD
- [uBITX v6](https://www.hfsignals.com/index.php/ubitx-v6/): 10W HF, SSB/CW, SDR, arduino-based, GPL-3, 210$,
seems like the older version of the other two
+* SDRs:
+ - a generic RTL-SDR
+ - [Nooelec NESDR Nano 2+](https://www.nooelec.com/store/nesdr-nano2-plus.html) (US$38.95)
+ - [HackRF One Portapack H4M with Mayhem SDR](https://opensourcesdrlab.com/products/clifford-heath-hackrf-one-with-portapack-h4m?VariantsId=10177) (~240$USD,
+ technically "OpenSourceSDRLab Clifford Heath Type C R10+ Version
+ Black Color HackRF One with Mayhem Signature-Edition Portapack H4M
+ Software Defined Radio Kit"). Portable SDR with builtin firmware
+ (called [Mayhem](https://github.com/portapack-mayhem/mayhem-firmware)) which has tons of applications including
+ ADSB, FM, Bluetooth and much more. The Clifford Heath version
+ [fixes amplifier issues with the original Hack RF](https://www.reddit.com/r/hackrf/comments/1cnjgtq/why_is_there_really_no_info_on_the_clifford_heath/), also
+ considered the [PortaRF](https://opensourcesdrlab.com/products/portarf?VariantsId=10371) but it seemed weird as it has some AI
+ chips and doesn't reuse the HackRF One design, and worse, doesn't
+ have the amplifier protection of the Clifford Heath, see [this
+ review](https://youtu.be/LNKeIju5pRY) for other issues. 10-20mW, 20MHz bandwidth,
+ half-duplex, 8-bit ADC. Open source design.
* Tuner wiring kit:
* MFJ-941E - antenna tuner and switch [155$ at radioworld](http://radioworld.ca/product_info.php?products_id=2885)
* 100' of RG8 coax cabling [65$ at radioworld](http://radioworld.ca/product_info.php?cPath=73_394&products_id=6831)
syncthing upgrades
diff --git a/hardware/tablet/kobo-clara-hd.md b/hardware/tablet/kobo-clara-hd.md
index 04b380b9..1cb4cb9f 100644
--- a/hardware/tablet/kobo-clara-hd.md
+++ b/hardware/tablet/kobo-clara-hd.md
@@ -136,7 +136,7 @@ Here is how I installed and started Syncthing at first:
1. [Download the latest version for ARM](https://syncthing.net/downloads/)
2. extract the archive
- 3. copy the `syncthing` binary into `.../KOBOeReader/.adds/`
+ 3. copy the `syncthing` binary into `/mnt/onboard/.adds/syncthing`
4. login over SSH (see above on how to enable) with `-p 2222 -l root`
5. create the following directory: `~/.config/syncthing/` (which, i
think, is actually directly `/.config/syncthing/`, yes, straight
@@ -260,6 +260,20 @@ that issue, by flipping that value to `2`, but only on
*Android*. There's [this forum thread about it](https://forum.syncthing.net/t/why-default-modtimewindows-to-2-for-fat-only-on-android/16256), where I asked
about this, we'll see.
+### Manual upgrades
+
+Similarly the same as the [install](#install-syncthing):
+
+ 1. download and extract the latest archive
+ 2. mount the kobo in, say, `/mnt/onboard`
+ 3. backup the old version:
+
+ mv /media/sda/.adds/syncthing{,.old}
+
+ 3. copy the `syncthing` binary in place:
+
+ cp syncthing-linux-arm64-v2.1.0/syncthing /mnt/onboard/.adds
+
## Avoided tasks
This list wouldn't be complete without listing more explicitly the
@@ -294,4 +308,4 @@ Now maybe I'll have time to actually read a book...
<!-- posted to the federation on 2025-07-11T14:33:34.777083 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/114836033674441232"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/114836033674441232"]]
another day another matrix client
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index a10c50ed..af34230c 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -891,6 +891,8 @@ Other interesting clients:
Kotlin/Rust, Flatpak
- [Commet](https://commet.chat/): GUI, spaces, WebRTC, mobile/web/desktop, Dart
- [Cinny](https://cinny.in/): GUI, spaces, limited WebRTC (web only), web/desktop, Typescript
+ - [Tesseract](https://surakin.github.io/tesseract/): native GUI, spaces, multi-account, E2E, threads,
+ voice messages, no WebRTC, coded with Claude
[gomuks]: https://github.com/tulir/gomuks/
more matrix apps
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index 10a059ec..a10c50ed 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -882,10 +882,15 @@ and Android (through F-Droid).
Other interesting clients:
- - [ement.el](https://github.com/alphapapa/ement.el): Emacs clietn
+ - [ement.el](https://github.com/alphapapa/ement.el): Emacs client
- [gomuks][]: TUI, golang, E2E
- [iamb](https://iamb.chat/): TUI, threads, spaces, E2E, image previews, bell
notification, message redaction, multiple profiles, vim keybindings
+ - [tacit](https://fuchss.org/projects/tacit/): GUI, spaces
+ - [mages](https://github.com/mlm-games/mages): GUI, spaces, webRTC support, mobile/web/desktop,
+ Kotlin/Rust, Flatpak
+ - [Commet](https://commet.chat/): GUI, spaces, WebRTC, mobile/web/desktop, Dart
+ - [Cinny](https://cinny.in/): GUI, spaces, limited WebRTC (web only), web/desktop, Typescript
[gomuks]: https://github.com/tulir/gomuks/
@@ -934,6 +939,7 @@ there's still a good variety:
* [matrix-menu-bot](https://gitlab.com/ptman/matrix-menu-bot): a menu-based bot, derived from polls
* [postmoogle](https://gitlab.com/etke.cc/postmoogle): email gateway
* [cdj-matrix](https://lab.trax.im/matrix/cdj-to-matrix): bridge with [Class Dojo](https://classdojo.com/)
+ * [kazarma](https://gitlab.com/technostructures/kazarma/kazarma): bridge with Mastodon
One thing I haven't found an equivalent for is Debian's
[MeetBot](https://wiki.debian.org/MeetBot). There's an [archive bot](https://github.com/russelldavies/matrix-archive) but it doesn't have topics
backup creds reset procedure
diff --git a/services/backup.mdwn b/services/backup.mdwn
index 3eea2f0f..b075584e 100644
--- a/services/backup.mdwn
+++ b/services/backup.mdwn
@@ -896,16 +896,15 @@ essentially:
borgmatic init --encryption repokey --append-only
- You might need to save the password you type there in
- [systemd-creds][] with:
+ Then save the password you type there in [systemd-creds][] with:
- systemd-ask-password -n | systemd-creds encrypt - /etc/credstore.encrypted/borgmatic
+ systemd-ask-password -n | systemd-creds encrypt --name=borgmatic.pw - /etc/credstore.encrypted/borgmatic.pw
See the [upstream docs about creds for how that works](https://torsion.org/borgmatic/reference/configuration/credentials/systemd/).
Note that the `repokey` mode will need that key you just typed to
be unlocked. By default, above, it's stored on the server in
- `/etc/credstore.encrypted/borgmatic`, but you won't have access to
+ `/etc/credstore.encrypted/borgmatic.pw`, but you won't have access to
that, so save a copy of that password elsewhere. See also [my
twisted way of managing keyfiles which I should elaborate on
here](https://github.com/borgbackup/borg/discussions/9158).
@@ -932,6 +931,31 @@ essentially:
See also the [upstream startup guide](https://torsion.org/borgmatic/how-to/set-up-backups/).
+At some point I lost the capacity to decrypt that file because of
+an upgrade. The error was:
+
+ Jun 11 10:50:42 angela (sd-mkdcre[33998]: Failed to unseal secret using TPM2: Operation not permitted
+
+The solution was to restore the above keyfile backup by piping the
+secret into:
+
+ borg key import ssh://borg-angela@tubman.anarc.at/srv/borg/angela/ -
+
+... then creating a new secret, and piping it into:
+
+ borg key change-passphrase ssh://borg-angela@tubman.anarc.at/srv/borg/angela/
+
+... and again:
+
+ systemd-ask-password -n | systemd-creds encrypt --name=borgmatic.pw - /etc/credstore.encrypted/borgmatic.pw
+
+I also reset the host key with:
+
+ mv /var/lib/systemd/credential.secret /var/lib/systemd/credential.secret.bak
+ systemd-creds setup --tpm2-pcrs=0
+
+But I'm not sure that was necessary.
+
## References
Borg:
another bookmarking tool
diff --git a/services/bookmarks.mdwn b/services/bookmarks.mdwn index 318aed22..7638a978 100644 --- a/services/bookmarks.mdwn +++ b/services/bookmarks.mdwn @@ -68,6 +68,7 @@ Possible alternatives to zotero and/or wallabag include: * [inventaire](https://inventaire.io/) - book sharing/inventory app with an open data aspect * [jabref](http://www.jabref.org/) * [lesana](https://lesana.trueelena.org/), includes a [GTK](https://git.sr.ht/~fabrixxm/Collector) and [web interface](https://git.sr.ht/~fabrixxm/lesanaweb) + * [linkding](https://linkding.link/), bookie/delicious like * [papis](https://github.com/papis/papis) * [pubs](https://github.com/pubs/pubs) * [xapers](https://finestructure.net/xapers/)
updates on the apocalypse
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 43e610f4..d9f9a2b6 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -293,6 +293,39 @@ The horsemen will collapse, but let's not go down with them. > This article was written without the use of a large language model > and should not be used to train one. +# Updates + +- A paragraph was added about the job apocalypse, which was of course + under-estimate. + +- [Why Timnit Gebru was fired](https://www.tumblr.com/dreaminginthedeepsouth/817865966907228160/darren-oconnor-timnit-gebru-was-fired-from) is extremely important and + interesting. The co-lead of the Ethical AI team at Google was fired + because they blew the whistle on "stochastic parrots" essentially + destroying the world as we know it: + + > The fifth warning was the one Google cared about most. [...] + > + > The internet would become a place where the dominant voice was a + > statistical average of dominant voices, presented as a neutral + > assistant. + + The warnings from the paper are eerily similar to my horsemen: + + 1. predicted the hallucination (pestilence) + 2. bias amplification (war?) + 3. environmental cost (famine) + 4. un-auditable training corpus (death?) + 5. "centralize linguistic and cultural power in the hands of the + small number of companies" (conquest) + +- See also Tim Wu's "The Master Switch" [which says](https://scoat.es/@sean/116698778802881078): + + > The industry learned how to secure the enactment of seemingly + > innocuous and sensible regulations that nonetheless spelled doom + > for any rival. + + People claim [the same about Anthropic](https://cyberplace.social/@GossiTheDog/116698461313896106). + [[!tag llm analysis sysadmin copyleft copyright debian-planet python-planet internet linux security kernel software vulnerability free-software]]
cross reference LWN tag in blog index
This will make it more visible that I wrote more of those. It's
already linked below, but this is clearer.
This will make it more visible that I wrote more of those. It's
already linked below, but this is clearer.
diff --git a/blog.mdwn b/blog.mdwn
index 61f654f6..a04501fe 100644
--- a/blog.mdwn
+++ b/blog.mdwn
@@ -35,7 +35,7 @@ trail=yes
* [Remote presence tools for social distancing](https://anarc.at/blog/2020-03-15-remote-tools/) (2020)
* [On free speech at Puri.sm and Mastodon](https://anarc.at/blog/2019-05-13-free-speech/) (2019)
* [Blockchain et biométrie: un mélange dangereux](https://anarc.at/blog/2019-12-12-blockchain-biometrie/) (2019, français)
- * notable LWN articles:
+ * notable [LWN](https://anarc.at/tag/lwn/) articles:
* [Diversity, education, privilege and ethics in technology](https://anarc.at/blog/2018-05-26-kubecon-rant/)
(2018, 5 part series on KubeCon Europe 2018)
* [A look at terminal emulators](https://anarc.at/blog/2018-04-12-terminal-emulators-1/) (2018, 2 part series)
update social network numbers
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index f9a89adc..10a059ec 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -1226,6 +1226,34 @@ internet]]
Those are not the kind of numbers you just "need to convince a
brother or sister" to grow the network...
+ Update: The above numbers are, of course, from 2022. Here's a
+ new list, as of 2026-05-28, based mostly on [this 2025 report
+ from
+ statista](https://www.statista.com/statistics/272014/global-social-networks-ranked-by-number-of-users/)
+ unless otherwise noted:
+
+ * Facebook: 3.07 billion MAU ("may be out of date")
+ * WhatsApp: 3.00B
+ * Instagram: 3.00B
+ * YouTube: 2.58B ("ad reach")
+ * TikTok: 1.99B ("ad reach")
+ * WeChat: 1.41B
+ * Telegram: 1B
+ * Messenger: 942 million ("may be misrepresented")
+ * Snapchat: 932M
+ * Reddit: 765M
+ * Douyin: 728M
+ * Kuaishou: 715M
+ * Weibo: 588M
+ * Pinterest: 578M
+ * X: 557M ("ad reach")
+ * QQ: 532M
+ * Matrix: 200M "users" ([according to
+ Element](https://element.io/en)), was [60M in 2022](https://www.theregister.com/on-prem/2022/07/15/matrix-messaging-service-leaps-60-million-user-barrier/1562103)
+ * Signal: 70-100M users ([according to their CEO](https://tech-insider.org/signal-vs-telegram-2026/))
+ * Discord: 90M+ "daily active users" (according to
+ [discord.com](https://discord.com/company)), 150M MAU in 2024,
+ [according to Wikipedia](https://en.wikipedia.org/wiki/Discord)
<!-- posted to the federation on 2025-03-25T10:30:55.309320 -->
[[!mastodon "https://kolektiva.social/@Anarcat/114223549979121873"]]
gradia packaged in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md index 762e4eb3..6e8f4195 100644 --- a/software/desktop/wayland.md +++ b/software/desktop/wayland.md @@ -966,7 +966,8 @@ anyone freaks out, I already had to use GTK for proper clipboard support, so this isn't much of a stretch...) One thing I'm, missing is some review/annotation tool. [Satty](https://github.com/gabm/Satty) -provides a nice minimal wrapper like that. See also [Gradia](https://github.com/AlexanderVanhee/Gradia). +provides a nice minimal wrapper like that. See also [Gradia](https://github.com/AlexanderVanhee/Gradia) which +will likely ship in Debian 14 "forky". For now, I'm using whatever default image viewer I have configured (currently geeqie), one key feature is that it must support the "copy
mention distillation
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index c5753904..43e610f4 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -284,7 +284,7 @@ Go low tech. [Moore's law](https://en.wikipedia.org/wiki/Moore%27s_law) is dead, Patch your shit. [Go weird](https://anginedepoitrine.com/). -Refuse slop. Train your brain. +Refuse slop. Train your brain. [Refuse distillation](https://github.com/leilei926524-tech/anti-distill). The horsemen will collapse, but let's not go down with them.
job loss apocalypse might, after all, be upon us
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 3070174e..c5753904 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -109,6 +109,13 @@ yet to fully materialize. Regardless for engineers, the market feels tighter than it was a couple years ago, and everyone feels on edge that they will just have to learn to operate LLMs to keep their jobs. +Update: it turns out I was clearly too optimistic. Cisco is laying +off 4,000 or 5% of its staff in a [jolly announcement celebrating +a record $15.8 billion revenue](https://blogs.cisco.com/news/our-path-forward), and Meta will [lay off 8,000 or +10% of its workforce](https://www.nytimes.com/2026/04/23/technology/meta-layoffs.html), in [horrifying conditions](https://sfstandard.com/pacific-standard-time/2026/05/15/meta-employee-gets-real-horror-working-right-now/). See also the +[jobloss.ai tracker](https://jobloss.ai/) which counts 125,000 jobs lost since January +2025, as of May 2026. + Which brings us, of course, to Death. # Death: security and copyright @@ -290,4 +297,4 @@ The horsemen will collapse, but let's not go down with them. <!-- posted to the federation on 2026-05-16T19:59:05.822639 --> -[[!mastodon "https://kolektiva.social/@Anarcat/116586967566862470"]] \ No newline at end of file +[[!mastodon "https://kolektiva.social/@Anarcat/116586967566862470"]]
wayland software updates, introduce lsdisplay
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md index 0325e094..762e4eb3 100644 --- a/software/desktop/wayland.md +++ b/software/desktop/wayland.md @@ -1181,15 +1181,12 @@ case, they should be listed here: |--------------|---------------------------------------|-----------| | `arandr` | [nwg-displays][] | yes | | `autorandr` | [kanshi][] | yes | -| `xclock` | [wlclock][] | no | +| `xclock` | [wlclock][] | yes | | `xdotool` | [wtype][] | yes | | `xev` | [wev][], `xkbcli interactive-wayland` | yes | -| `xlsclients` | `swaymsg -t get_tree` | yes | +| `xlsclients` | [lswt][] or `swaymsg -t get_tree` | no | | `xprop` | [wlprop][] or `swaymsg -t get_tree` | no | -| `xrandr` | [wlr-randr][] | yes | - -[lswt][] is a more direct replacement for `xlsclients` but is not -packaged in Debian. +| `xrandr` | [wlr-randr][] or [lsdisplay][] | yes | `xkbcli interactive-wayland` is part of the `libxkbcommon-tools` package. @@ -1237,6 +1234,7 @@ makes it much easier to use. [nwg-displays]: https://github.com/nwg-piotr/nwg-displays [wlclock]: https://git.sr.ht/~leon_plickat/wlclock [shikane]: https://docs.rs/crate/shikane/latest +[lsdisplay]: https://github.com/AGuyMarc/lsdisplay # Other issues
more obs tweaks
diff --git a/services/radio.mdwn b/services/radio.mdwn index 9ebc7025..cd088b17 100644 --- a/services/radio.mdwn +++ b/services/radio.mdwn @@ -240,6 +240,12 @@ for example: The "Live stream key" from Peertube should be added as the "Stream key". I also set the Peertube stream to be "low latency". +The "Settings" available in the "controls" are saved as a "Profile" +named, in this case, `peertube.wtf`. This is separate from the "Scene +Collection", so you can use profiles to keep configurations for +different streaming backends (Peertube, Twitch, YouTube, whatever), +without having to rebuild your scene collection. + Then in "Audio", I disable the "desktop source" so that I have better control over the inputs (in order to avoid loops, for example, if I listen to some other stream, or leaks for example if i listen to @@ -254,7 +260,10 @@ the Jack input can easily get disconnected. The "JACK" output plugin in Audacious has a setting to pick the output port and that can be set to `OBS.*in_.*`. The problem with that is then you don't hear the audio yourself! But this can be fixed by patching that less important -output by hand in `qjackctl` or `qpwgraph`. +output by hand in `qjackctl` or `qpwgraph`. The "patchbay" feature +seems capable of restoring those automatically as well. Otherwise +there's `raysession` that has a more advanced setup including +automatically starting and patching apps. The final touch is to connect the second `capture_AUX1` ports into the OBS Mic/Aux input, because otherwise input is mono on a single channel
2026 is not fucking groundhog's day even though it feels like it
diff --git a/blog.mdwn b/blog.mdwn index 626ea5ac..61f654f6 100644 --- a/blog.mdwn +++ b/blog.mdwn @@ -97,7 +97,7 @@ more socially acceptable and less politically controversial. <!-- add it. yes, this is kind of silly. --> <!-- end copy-paste --> -## 2025 +## 2026 [[!inline pages=" (
rephrase one last todo
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 02b70e54..3070174e 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -171,11 +171,12 @@ deliberate, but it lacks meaning, intent, will. I have not been confronted with much slop, apart from the lobster Jesus or the yellow man atrocities, and particularly not in my -work. +work. But I see what it is doing to my profession: beyond +[vibe-coding](https://en.wikipedia.org/wiki/Vibe_coding), people are now [token-maxxing](https://www.forbes.com/sites/timkeary/2026/04/13/is-the-cult-of-tokenmaxxingjust-another-fad-or-the-new-normal/), and +[land-grabbing their colleagues](https://leehanchung.github.io/blogs/2026/04/05/the-ai-great-leap-forward/#let-a-hundred-skills-bloom). -TODO: rephrase. But I see what it is doing to my profession: I don't like -vibe-coded software, and don't like what it does to our communities, -or the fabric of software we live with. +I don't like what LLMs do to our communities, or the fabric of +software we live with. Software does not evolve in a void. It is a team effort, be it free software or a corporate product. Generations of humans have carefully
automatic federated post of /blog/2026-05-16-four-horsemen
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 9376afac..02b70e54 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -286,3 +286,7 @@ The horsemen will collapse, but let's not go down with them. > and should not be used to train one. [[!tag llm analysis sysadmin copyleft copyright debian-planet python-planet internet linux security kernel software vulnerability free-software]] + + +<!-- posted to the federation on 2026-05-16T19:59:05.822639 --> +[[!mastodon "https://kolektiva.social/@Anarcat/116586967566862470"]] \ No newline at end of file
creating tag page tag/llm
diff --git a/tag/llm.mdwn b/tag/llm.mdwn new file mode 100644 index 00000000..b99a28b5 --- /dev/null +++ b/tag/llm.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged llm"]] + +[[!inline pages="tagged(llm)" actions="no" archive="yes" +feedshow=10]]
gotta publish at some point
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 68fbc6ff..9376afac 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -4,7 +4,12 @@ I have been battling Large Language Models (LLM[^1]) for the past couple of weeks and have struggled to think about what it means and how to deal with its fallout. -[^1]: I prefer "LLM" to Artificial Intelligence term which they definitely aren't. +[^1]: I prefer "LLM" to Artificial Intelligence, as I don't consider + models to have "Intelligence" which goes far beyond the analytical + traits we train models for. Intelligence *requires* embodiment + and social interaction; machines lack the innate human skills of + empathy, feeling and care, which explains a lot of the evils + behind the current trends. Because the fight has come from many fronts, I've come to articulate this in terms of the [Four Horsemen of the Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse). @@ -17,9 +22,9 @@ this in terms of the [Four Horsemen of the Apocalypse](https://en.wikipedia.org/ # War: bot armies -Let's start with War. We've been battling bot armies crawling our -GitLab server [for a while](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42152). Bots crawl virtually infinite -endpoints on Git repositories (as opposed to downloading even an +Let's start with War. We've been battling bot armies for control of +our GitLab server [for a while](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42152). Bots crawl virtually infinite +endpoints on our Git repositories (as opposed to downloading an archive or shallow clone), including our fork of Firefox, Tor Browser, a massive repository. @@ -47,7 +52,7 @@ included, so a feeble cookie is no match for the massive bot armies. ## Side note on LLM "order of battle" We often underestimate the size of that army. The cloud was huge even -before AI, serving about two thirds of the web. Even larger swaths of +before LLMs, serving about two thirds of the web. Even larger swaths of clients like government and corporate databases have all moved to the cloud, in shared, but private infrastructure with massive spare capacity that is readily available to anyone who pays. @@ -65,10 +70,10 @@ Those companies can launch thousands, if not millions of fully functional web browsers at our servers. Computing power or bandwidth are not a limitation for them, our primitive infrastructure is. No one but hyperscalers can deal with this kind of load, and I suspect that -even them are having troubles of their own, as even [Google is -deploying extreme mechanisms in reCAPTCHA](https://www.androidauthority.com/google-recaptcha-play-services-requirement-3664806/). +they are also struggling, as even [Google is deploying extreme +mechanisms in reCAPTCHA](https://www.androidauthority.com/google-recaptcha-play-services-requirement-3664806/). -This is the largest scale attack on the internet since the [Morris +This is the largest attack on the internet since the [Morris worm](https://en.wikipedia.org/wiki/Morris_worm) but while [Robert Tappan Morris](https://en.wikipedia.org/wiki/Robert_Tappan_Morris) went to jail on a felony, LLM companies are celebrated as innovators and will soon be too big to fail.[^2] @@ -86,8 +91,7 @@ All that computing power doesn't come out of thin air: it needs massive amounts of hardware, power, and cooling. Earlier this year, I've heard from a colleague that their Dell -supplier refused to even provide a *quote* to them before -August. Dell! +supplier refused to even provide a *quote* before August. Dell! In February, [Western Digital's hard drive production for 2026 was already sold out](https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html). Hard drives essentially [doubled in price within @@ -100,10 +104,10 @@ But regular folks are facing real-life shortages as well, as stealing fresh water and energy from human beings to feed the war machine. -The actual job market apocalypse seems to have yet to materialize. But -for engineers, the market feels tighter than it was a couple years -ago, and everyone feels on edge that they will just have to learn to -operate LLMs to keep their jobs. +We've been scared of losing our jobs, but it seems that Apocalypse has +yet to fully materialize. Regardless for engineers, the market feels +tighter than it was a couple years ago, and everyone feels on edge +that they will just have to learn to operate LLMs to keep their jobs. Which brings us, of course, to Death. @@ -116,25 +120,24 @@ then, a few months later, everyone is [scrambling to deal with floods of good reports](https://lwn.net/Articles/1066581/). In the past two weeks, this culminated in a significant number of -highly critical security issues across multiple projects. Chained +critical security issues across multiple projects. Chained together, remote code execution vulnerabilities in [Nginx](https://depthfirst.com/nginx-rift) and [Apache](https://www.cve.org/CVERecord?id=CVE-2026-23918) and *two* local privilege escalations in the Linux kernel -([dirtyfrag](https://github.com/V4bel/dirtyfrag/) and [fragnesia](https://github.com/v12-security/pocs/tree/main/fragnesia#fragnesia)) essentially gave everyone with a -clue root access to any unpatched server to the web. +([dirtyfrag](https://github.com/V4bel/dirtyfrag/) and [fragnesia](https://github.com/v12-security/pocs/tree/main/fragnesia#fragnesia)) essentially gave anyone root access to any unpatched server to the web. -Just today, [another vulnerability dropped](https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn), which gives read +As I write this, [another vulnerability dropped](https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn), which gives read access to any file to a local user, compromising TLS and SSH private keys. -All those were released without any significant coordination while -people scrambled to mitigate. +All those vulnerabilities were released without any significant +coordination while people scrambled to mitigate. Many people [including Linus Torvalds](https://lwn.net/Articles/1072007/#Comments) are now considering issues discovered through LLMs to be essentially public. This puts [some debates about disclosure processes](https://lwn.net/Articles/1071499/) in perspective, to say the least. -But this is not merely the death of traditional coordinated disclosure +But this is not merely the death of the traditional coordinated disclosure process, the C programming language, or the Linux kernel: remember that those bots are trained on a large corpus of copyrighted material. Facebook has [trained their models on pirated books](https://www.theguardian.com/technology/2025/jan/10/mark-zuckerberg-meta-books-ai-models-sarah-silverman) and @@ -145,7 +148,7 @@ LLM outputs are not copyrightable](https://www.congress.gov/crs-product/LSB10922 With many people now vibe coding their way out of learning or remembering how computers work, is this the Death of Copyright? -And this, of course, brings us to the final horseman: Pestilence. +And that, of course, brings us to the final horseman: Pestilence. # Pestilence: slop @@ -153,20 +156,24 @@ There is a growing meme that programming is essentially over as we know it. That you can simply vibe-code applications from scratch and it's pretty good. -Maybe that is true. Most of my attempts at resolving any complex -problem with a LLM have often been faced with bizarre failures. [Some -worked surprisingly well.](https://gitlab.com/anarcat/scripts/-/blob/main/transmodify.py?ref_type=heads) +Maybe that's true. + +So far, most of my attempts at resolving any complex problem with a +LLM have often failed with bizarre failures. [Some worked surprisingly +well.](https://gitlab.com/anarcat/scripts/-/blob/main/transmodify.py?ref_type=heads) Maybe, of course, I am holding it wrong. I personally don't believe LLMs will ever be good enough to produce and maintain software at scale. They're surprisingly good at finding security flaws right now. But what I see is also a lot of -[Bullshit](https://en.wikipedia.org/wiki/Bullshit), with capital B. It's not lying: it does not "know" +[Bullshit](https://en.wikipedia.org/wiki/Bullshit), with a capital B. It's not lying: it does not "know" anything, so it *can't* lie. It's misleadingly cohesive and -meaningful, but it lacks meaning, intent, will. +deliberate, but it lacks meaning, intent, will. I have not been confronted with much slop, apart from the lobster Jesus or the yellow man atrocities, and particularly not in my -work. But I see what it is doing to my profession: I don't like +work. + +TODO: rephrase. But I see what it is doing to my profession: I don't like vibe-coded software, and don't like what it does to our communities, or the fabric of software we live with. @@ -187,8 +194,8 @@ LLM found an 0day in our slop" kind of stupid. # The fifth horsemen -Researching source for this article, I looked up the four horsemen and -found out they original seems to have been: +Researching for this article, I looked up the four horsemen and found +out they original seems to have been: - Famine - War @@ -217,23 +224,23 @@ The point is, there are actually five horsemen, and the fifth one is, in my opinion, Conquest. Those companies (and *not* "AI", mind you) are taking over the -worlds. There's a strong connection between the "post-truth" world -imposed on us by fascists like Trump and Putin. It's not an accident, -it's a power grab part of the [Californian Ideology](https://en.wikipedia.org/wiki/The_Californian_Ideology)[^3]. Just like -Airbnb broke housing, Uber destroyed the transportation and Amazon is -taking over hosting and retail, LLM companies are essentially trying +world. I sense a strong connection with the "post-truth" world imposed +on us by fascists like Trump and Putin. It's not an accident, it's a +power grab part of the [Californian Ideology](https://en.wikipedia.org/wiki/The_Californian_Ideology)[^3]. Just like Airbnb +broke housing, Uber destroyed the transportation and Amazon is taking +over retail and server hosting, LLM companies are essentially trying to take over if not everything, at least [Cognition](https://en.wikipedia.org/wiki/Cognition) as a whole. [^3]: Probably a good time to watch [All Watched Over by Machines of Loving Grace][]. -But those companies capitalizations (OpenAI and Nvidia in particular) +But the capitalization of those companies (OpenAI and Nvidia in particular) are so far beyond reason that their inevitable collapse will likely -lead to a global financial collapse of biblical proportion. +lead to a global financial collapse of biblical proportions. -Because they will inevitably fail like previous bubbles -- the dot -com, the ad scam, the blockchain scam, and now the LLM lie -- they are -built on. And when they fail, I hope it zips all the way back up to -the dot com and git me back my internet. +Because they will inevitably fail like previous bubbles they are built +on. And when they fail, I hope it zips all the way back through the +blockchain scam, the ad surveillance system, and the dot com then git +me back my internet. [All Watched Over by Machines of Loving Grace]: https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace_(TV_series) @@ -252,24 +259,24 @@ much that the only translators not replaced by LLMs right now are [interpreters](https://en.wikipedia.org/wiki/Language_interpretation), who translate vocally in real time. But interpreters are worried about their jobs as well. (Diff truncated)
typo
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 7574a90a..68fbc6ff 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -11,7 +11,7 @@ this in terms of the [Four Horsemen of the Apocalypse](https://en.wikipedia.org/ > Sound track: Metallica's [The Four Horsemen](https://www.metallica.com/songs/the-four-horsemen.html), preferably > [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.), but now I guess you [get -> on YouTube](https://www.youtube.com/watch?v=-zKOhVSERS8). +> it on YouTube](https://www.youtube.com/watch?v=-zKOhVSERS8). [[!toc levels=2]]
block bots
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 603cbaef..7574a90a 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -265,6 +265,8 @@ So this is a call to arms. Fight back. +Block bots. + Refuse slop. Train your brain.
horsemen: re-edit
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 365fdd12..603cbaef 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -1,109 +1,109 @@ [[!meta title="The Four Horsemen of the LLM Apocalypse"]] -I have been battling Large Language Models (LLM, a term I prefer to -the pretentious Artificial Intelligence term which they definitely -aren't) for the past couple of weeks and have struggled to think about -what it means and how to deal with its fallout. +I have been battling Large Language Models (LLM[^1]) for the past +couple of weeks and have struggled to think about what it means and +how to deal with its fallout. -I've come to articulate this in terms of the [Four Horsemen of the -Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse), as we've come under attack from many fronts. +[^1]: I prefer "LLM" to Artificial Intelligence term which they definitely aren't. -> Appropriate sound track: Metallica's [The Four Horsemen](https://genius.com/Metallica-the-four-horsemen-lyrics), -> preferably [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.). +Because the fight has come from many fronts, I've come to articulate +this in terms of the [Four Horsemen of the Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse). + +> Sound track: Metallica's [The Four Horsemen](https://www.metallica.com/songs/the-four-horsemen.html), preferably +> [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.), but now I guess you [get +> on YouTube](https://www.youtube.com/watch?v=-zKOhVSERS8). [[!toc levels=2]] # War: bot armies -Let's start with War. For a long time already, we've been battling bot -armies crawling our servers, mostly GitLab, where bots indiscriminately -and stupidly crawl virtually infinite endpoints to list directories, -read files, go back in history and run `diff` or `blame` on large -repositories. This includes our fork of Firefox, Tor Browser, a -massive repository. +Let's start with War. We've been battling bot armies crawling our +GitLab server [for a while](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42152). Bots crawl virtually infinite +endpoints on Git repositories (as opposed to downloading even an +archive or shallow clone), including our fork of Firefox, Tor Browser, +a massive repository. At first, we've tried various methods: [robots.txt](https://www.robotstxt.org/), blocking user -agents, and finally blocking entire misbehaving networks. Like many -others attempting to fend off the armies of War, it worked for a -while. But now they're back with a vengeance. Blocking entire networks -doesn't work: they come back some other way, typically through [shady -proxy networks](https://acid.vegas/blog/the-shady-world-of-ip-leasing/), which is kind of ironic considering we're -essentially running the largest proxy network of the world. - -Out of desperation, we've forced users to fetch and resend a cookie -when visiting our site, hoping this would tame some bots. The only way -to get a cookie is to visit a specific page, or run JavaScript, -essentially running a poor man's Anubis, considering it seems [bots -have broken Anubis anyways](https://social.anoxinon.de/@Codeberg/115033790447125787) and that it [does not really defend -against a well-funded attacker](https://lock.cmpxchg8b.com/anubis.html), something which [Pretix warned -against in 2025 already](https://behind.pretix.eu/2025/05/23/captchas-are-over/). +agents, and finally blocking entire networks. I [[wrote +asncounter|blog/2025-05-30-asncounter]]. It worked for a while. + +But now, blocking entire networks doesn't work: they come back some +other way, typically through [shady proxy networks](https://acid.vegas/blog/the-shady-world-of-ip-leasing/), which is kind +of ironic considering we're essentially running the largest proxy +network of the world. + +Out of desperation, we've forced users to [use cookies](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/0108-gitlab-cookie-and-javascript-enforcement) when +visiting our site. We haven't deployed [Anubis](https://anubis.techaro.lol/) yet, as we worry +that [bots have broken Anubis anyways](https://social.anoxinon.de/@Codeberg/115033790447125787) and that it [does not really +defend against a well-funded attacker](https://lock.cmpxchg8b.com/anubis.html), something which [Pretix +warned against in 2025 already](https://behind.pretix.eu/2025/05/23/captchas-are-over/). (We have a whole [discussion regarding those tools here](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42229).) -But even that, predictably, has failed: bots are, really, agents -nowadays and run a full web browser, JavaScript included, so a feeble -cookie is no match for the massive bot armies. +But even that, predictably, has failed. I suspect what we consider +bots are now really agents. They run full web browsers, JavaScript +included, so a feeble cookie is no match for the massive bot armies. ## Side note on LLM "order of battle" -We often underestimate the size of that army. The cloud is huge. It -was huge before AI, monopolizing effectively about two thirds of the -publicly facing sites in the world. There are large swaths of -processing power that are not in there like government and corporate -databases that have all moved to the cloud, in shared, but private -infrastructure that is readily available to anyone who pays. +We often underestimate the size of that army. The cloud was huge even +before AI, serving about two thirds of the web. Even larger swaths of +clients like government and corporate databases have all moved to the +cloud, in shared, but private infrastructure with massive spare +capacity that is readily available to anyone who pays. -Now AI has made the problem worse by dramatically expanding the -capacity of the "cloud". We now have state-sized data centers (in terms -of power usage) that dwarf any data centers that have been built -before. They have millions of cores, petabytes of memory, exabytes of -storage. +LLMs have made the problem worse by dramatically expanding the +capacity of the "cloud". We now have data centers that defy +imagination with [millions of cores](https://epoch.ai/data/data-centers), petabytes of memory, exabytes +of storage. -I think of how impressed I was to hear domestic 25 gigabit/s internet -connection in US municipal networks or Switzerland. That is nothing. +I thought that [25 gigabit residential internet in Switzerland](https://sschueller.github.io/posts/the-free-market-lie/) +could bring balance, but this is nothing compared to the scale of +those data centers. Those companies can launch thousands, if not millions of fully -functional web browsers our way. We have worked for years at this -point to automate web browsers for unit testing web apps, now they're -being abused for crawling. Computing resources is not an -issue. Bandwidth is not an issue. - -Our contents are hosted on retrograde, old school, single point of -failure, single (or even multiple) VMs that can't deal with that kind -of load. Anything but hyperscalers can deal with this kind of load, -and I suspect, even them are having troubles of their own. - -This is the largest scale attack on the internet since the Morris worm -but, contrary to that worm, they're not going to jail. They're -celebrated as innovators and will soon be too big to fail. +functional web browsers at our servers. Computing power or bandwidth +are not a limitation for them, our primitive infrastructure is. No one +but hyperscalers can deal with this kind of load, and I suspect that +even them are having troubles of their own, as even [Google is +deploying extreme mechanisms in reCAPTCHA](https://www.androidauthority.com/google-recaptcha-play-services-requirement-3664806/). + +This is the largest scale attack on the internet since the [Morris +worm](https://en.wikipedia.org/wiki/Morris_worm) but while [Robert Tappan Morris](https://en.wikipedia.org/wiki/Robert_Tappan_Morris) went to jail on a felony, +LLM companies are celebrated as innovators and will soon be too big to +fail.[^2] + +[^2]: It should be noted that Morris also happened to be one of the + founder of [Y Combinator](https://en.wikipedia.org/wiki/Y_Combinator) where he is in good company with + other techno-fascists like Peter Thiel, Sam Altman, and so + on. Crime, after all, pays. Which brings us to the second horsemen, famine. # Famine: shortages All that computing power doesn't come out of thin air: it needs -hardware, and a *lot* of it. Earlier this year, I've heard from a -colleague that their Dell supplier refused to even provide a *quote* -to them before August. Dell! In February, [Western Digital's hard -drive production for 2026 was already sold out](https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html). Hard drives would -essentially [doubled in price within a year](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42465), and some have now -tripled. A server quote we had in November was renewed recently and -*quadrupled*, going from 10 thousand to *FORTY* thousand dollars for -a single server. - -And that's just us privileged computer engineers. Real folks are -facing real-life shortages out there, as massive data centers are -being built at neck-breaking speed, stealing fresh water from actual -humans to feed the war machine. - -The actual job market apocalypse hasn't quite reached us just yet: it -seems there are *some* job losses, but nothing quite apocalyptic as -one would have expected so far. But I wouldn't be surprised if the job -market goes south, especially for white collar jobs. For engineers, -the trend has certainly been reversing for a while, something that -Google and other large corporations have been working hard on for -years, trying to train new engineers to flood the market with -initiatives like "summer of code" and so on. +massive amounts of hardware, power, and cooling. + +Earlier this year, I've heard from a colleague that their Dell +supplier refused to even provide a *quote* to them before +August. Dell! + +In February, [Western Digital's hard drive production for 2026 was +already sold out](https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html). Hard drives essentially [doubled in price within +a year](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42465), and some have now tripled. A server quote we had in +November has now *quadrupled*, going from 10 thousand to *FORTY* +thousand dollars for a single server. + +But regular folks are facing real-life shortages as well, as +[city-size data centers](https://www.theguardian.com/us-news/2026/may/13/utah-approves-datacenter-backlash) are being built at neck-breaking speed, +stealing fresh water and energy from human beings to feed the war +machine. + +The actual job market apocalypse seems to have yet to materialize. But +for engineers, the market feels tighter than it was a couple years +ago, and everyone feels on edge that they will just have to learn to +operate LLMs to keep their jobs. Which brings us, of course, to Death. @@ -122,36 +122,30 @@ together, remote code execution vulnerabilities in [Nginx](https://depthfirst.co ([dirtyfrag](https://github.com/V4bel/dirtyfrag/) and [fragnesia](https://github.com/v12-security/pocs/tree/main/fragnesia#fragnesia)) essentially gave everyone with a clue root access to any unpatched server to the web. -Just today, another "0-day" exploit dropped, [ssh-keysign-pwn](https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn), -which gives read access to any file to a local user on a Linux system, -compromising TLS and SSH private keys. (Diff truncated)
promote the butlerian jihad
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index cbb8c084..365fdd12 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -270,6 +270,8 @@ But I think this is where, ultimately, LLMs bring us. Towards collapse. So this is a call to arms. Fight back. Refuse slop, train your brain. The horsemen will collapse, but let's not go down with them. +[Butlerian Jihad](https://dune.fandom.com/wiki/Butlerian_Jihad). + > This article was written without the use of a large language model > and should not be used to train one.
two heading tweaks
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 0cf23f48..cbb8c084 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -11,7 +11,7 @@ Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse), as w > Appropriate sound track: Metallica's [The Four Horsemen](https://genius.com/Metallica-the-four-horsemen-lyrics), > preferably [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.). -[[!toc]] +[[!toc levels=2]] # War: bot armies @@ -44,7 +44,7 @@ But even that, predictably, has failed: bots are, really, agents nowadays and run a full web browser, JavaScript included, so a feeble cookie is no match for the massive bot armies. -# Side note on LLM "order of battle" +## Side note on LLM "order of battle" We often underestimate the size of that army. The cloud is huge. It was huge before AI, monopolizing effectively about two thirds of the @@ -277,4 +277,4 @@ brain. The horsemen will collapse, but let's not go down with them. <!-- posted to the federation on 2026-05-15T17:25:30.545241 --> -[[!mastodon "https://kolektiva.social/@Anarcat/116580701329940204"]] \ No newline at end of file +[[!mastodon "https://kolektiva.social/@Anarcat/116580701329940204"]]
spellcheck, add meta-note
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 6c9ef78c..0cf23f48 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -11,6 +11,8 @@ Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse), as w > Appropriate sound track: Metallica's [The Four Horsemen](https://genius.com/Metallica-the-four-horsemen-lyrics), > preferably [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.). +[[!toc]] + # War: bot armies Let's start with War. For a long time already, we've been battling bot @@ -30,7 +32,7 @@ essentially running the largest proxy network of the world. Out of desperation, we've forced users to fetch and resend a cookie when visiting our site, hoping this would tame some bots. The only way -to get a cookie is to visit a specific page, or run Javascript, +to get a cookie is to visit a specific page, or run JavaScript, essentially running a poor man's Anubis, considering it seems [bots have broken Anubis anyways](https://social.anoxinon.de/@Codeberg/115033790447125787) and that it [does not really defend against a well-funded attacker](https://lock.cmpxchg8b.com/anubis.html), something which [Pretix warned @@ -39,9 +41,11 @@ against in 2025 already](https://behind.pretix.eu/2025/05/23/captchas-are-over/) (We have a whole [discussion regarding those tools here](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42229).) But even that, predictably, has failed: bots are, really, agents -nowadays and run a full web browser, Javascript included, so a feeble +nowadays and run a full web browser, JavaScript included, so a feeble cookie is no match for the massive bot armies. +# Side note on LLM "order of battle" + We often underestimate the size of that army. The cloud is huge. It was huge before AI, monopolizing effectively about two thirds of the publicly facing sites in the world. There are large swaths of @@ -50,8 +54,8 @@ databases that have all moved to the cloud, in shared, but private infrastructure that is readily available to anyone who pays. Now AI has made the problem worse by dramatically expanding the -capacity of the "cloud". We now have state-sized datacenters (in terms -of power usage) that dwarf any datacenters that have been built +capacity of the "cloud". We now have state-sized data centers (in terms +of power usage) that dwarf any data centers that have been built before. They have millions of cores, petabytes of memory, exabytes of storage. @@ -84,11 +88,11 @@ to them before August. Dell! In February, [Western Digital's hard drive production for 2026 was already sold out](https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html). Hard drives would essentially [doubled in price within a year](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42465), and some have now tripled. A server quote we had in November was renewed recently and -*quadrupled*, going from 10 thousand to *FOURTY* thousand dollars for +*quadrupled*, going from 10 thousand to *FORTY* thousand dollars for a single server. And that's just us privileged computer engineers. Real folks are -facing real-life shortages out there, as massive datacenters are +facing real-life shortages out there, as massive data centers are being built at neck-breaking speed, stealing fresh water from actual humans to feed the war machine. @@ -181,8 +185,8 @@ understands. The idea of simply giving up on that understanding and delegating it to an unproven model is not only chilling, it feels just plain -stupid. Not stpud as in "Terminator" stupid, stupid as in "I can't get -inside the datacenter because the authentication system is +stupid. Not stupid as in "Terminator" stupid, stupid as in "I can't get +inside the data center because the authentication system is down". Except we're in a "the power plant doesn't reboot" or "their LLM found an 0day in our slop" kind of stupid. @@ -235,9 +239,9 @@ the ad scam, the blockchain scam, and now the LLM lie -- they are built on. And when they fail, I hope it zips all the way back up to the dot com and git me back my internet. -# The TOwer of Babel +# The Tower of Babel -While I'm off in the woodwords hallucinating (ha) on the Bible, I feel +While I'm off in the woods hallucinating (ha) on the Bible, I feel there's another sign that the apocalypse is coming. The [Tower of Babel](https://en.wikipedia.org/wiki/Tower_of_Babel) legend says that humans were trying to create @@ -247,7 +251,7 @@ and scatters the human race. This is what is happening to our human translators now. LLMs being, after all, Language Models, are of course excellent at translation work, up to a point the only sector not replaced by LLMs are -interpreters, who translate in realtime, over voice. But it's +interpreters, who translate in real-time, over voice. But it's generally felt that this will go away too. What's happening to translators is what they want to do to all of us, @@ -266,6 +270,9 @@ But I think this is where, ultimately, LLMs bring us. Towards collapse. So this is a call to arms. Fight back. Refuse slop, train your brain. The horsemen will collapse, but let's not go down with them. +> This article was written without the use of a large language model +> and should not be used to train one. + [[!tag draft]]
automatic federated post of /blog/2026-05-16-four-horsemen
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 964c9ca9..6c9ef78c 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -267,3 +267,7 @@ So this is a call to arms. Fight back. Refuse slop, train your brain. The horsemen will collapse, but let's not go down with them. [[!tag draft]] + + +<!-- posted to the federation on 2026-05-15T17:25:30.545241 --> +[[!mastodon "https://kolektiva.social/@Anarcat/116580701329940204"]] \ No newline at end of file
mesh hardware updates
diff --git a/services/meshtastic.md b/services/meshtastic.md index 27bd7fd4..1b5fb3f0 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -535,6 +535,14 @@ this is about 5$ each. I could have gotten batteries with the build (2$USD) but it makes shipping more complicated and expensive, so I went the quicker way. +Update: the batteries were bought from Addison. They're super tight. I +also got batteries for the Solar Node P1 from Abra, but they didn't +fit because I needed button-top batteries that I ended up ordering +from Mastervox. + +Update, 2026-04-17: ordered 10 heltec v3 kits to have devices to hook +up as bots or resell at foulab or for friends. + ## Other devices The devices listed here have been moved to the [local mesh hardware
wrap up a chute, still needs a review
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index 6662cc6d..964c9ca9 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -168,12 +168,9 @@ meaning. I have not been confronted with much slop, apart from the lobster Jesus or the yellow man atrocities, and particularly not that much in -my work. But I see what it is doing to my profession. I suspect the -deskilling aspect is real. But beyond that, I am truly concern by how - - -TODO: rephrase we are throwing crap at each other. - +my work. But I see what it is doing to my profession, and, frankly, I +don't like it. I don't like vibe-coded software, and don't like what +it does to our communities, or the fabric of software we live with. Software does not evolve in a void. It is a community effort, regardless of whether or not it is a community-based free software or @@ -188,3 +185,85 @@ stupid. Not stpud as in "Terminator" stupid, stupid as in "I can't get inside the datacenter because the authentication system is down". Except we're in a "the power plant doesn't reboot" or "their LLM found an 0day in our slop" kind of stupid. + +# The fifth horsemen + +Researching source for this article, I looked up the four horsemen and +found out they original seems to have been: + +- Famine +- War +- Death +- .. Conquest? + +I was surprised. I grew up thinking about the horsemen being Famine, +War, Pestilence, and Death. So I went back to [my original source](https://genius.com/Metallica-the-four-horsemen-lyrics) +which actually claims the horsemen are: + +``` +Time has taken its toll on you, the lines that crack your face. +Famine, your body, it has torn through, withered in every place. +Pestilence for what you've had to endure, and what you have put others through +Death, deliverance for you, for sure, now there's nothing you can do +``` + +So I guess that makes no sense either, which, fair enough, I shouldn't +rely on Metallica for theological references. Especially since that +song was originally called [Mechanix](https://en.wikipedia.org/wiki/Mechanix) and "about having sex at a +gas station". + +Anyways. + +The point is, there are actually five horsemen, and the fifth one is, +in my opinion, Conquest. + +Those companies (and *not* "AI", mind you) are taking over the +worlds. There's a strong connection and meaning between the +"post-truth" world imposed on us by fascists like Trump and +Putin. It's not an accident. It's a power grab. Just like AirBNB broke +hosting, Uber destroyed the taxi industry, Amazon taking over hosting +and retail, LLM companies are essentially trying to take over +everything. + +But OpenAI's and Nvidia's capitalizations are so far beyond reason +that their inevitable collapse will likely lead to a collapse of +finance similar or worse to the 2008 crash, or even the biblical 20th +century ones. + +Because they will inevitably fail, like previous bubbles -- the dot com, +the ad scam, the blockchain scam, and now the LLM lie -- they are +built on. And when they fail, I hope it zips all the way back up to +the dot com and git me back my internet. + +# The TOwer of Babel + +While I'm off in the woodwords hallucinating (ha) on the Bible, I feel +there's another sign that the apocalypse is coming. + +The [Tower of Babel](https://en.wikipedia.org/wiki/Tower_of_Babel) legend says that humans were trying to create +a big tower up to the sky and become god. God confounds their speech +and scatters the human race. + +This is what is happening to our human translators now. LLMs being, +after all, Language Models, are of course excellent at translation +work, up to a point the only sector not replaced by LLMs are +interpreters, who translate in realtime, over voice. But it's +generally felt that this will go away too. + +What's happening to translators is what they want to do to all of us, +of course. + +But what's more important to understand here is that this concretely +mean we will lose the human capacity, as a civilization, to translate +between each other. It is still an [open question](https://revues.imist.ma/index.php/JALCS/article/view/59018) whether the +remaining revision work for translators will be enough avoid +deskilling, but other research has shown that LLM use leads to +[cognitive decline](https://publichealthpolicyjournal.com/mit-study-finds-artificial-intelligence-use-reprograms-the-brain-leading-to-cognitive-decline/), [impacts critical thinking](https://dl.acm.org/doi/full/10.1145/3706598.3713778), and generally, +that [deskilling is a common outcome](https://publicera.kb.se/ir/article/view/47143). + +But I think this is where, ultimately, LLMs bring us. Towards collapse. + +So this is a call to arms. Fight back. Refuse slop, train your +brain. The horsemen will collapse, but let's not go down with them. + +[[!tag draft]]
finish first draft, missing a chute, a reread, and probably some more energy
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md index c0f6b73e..6662cc6d 100644 --- a/blog/2026-05-16-four-horsemen.md +++ b/blog/2026-05-16-four-horsemen.md @@ -151,3 +151,40 @@ And this, of course, brings us to the last horseman: Pestilence. # Pestilence: slop +There is a growing meme that programming is essentially over as we +know it. That you can simply vibe-code applications from scratch and +it's pretty good. + +Maybe that is true. Most of my attempts at resolving any complex +problem with a LLM have often been faced with bizarre failures. [Some +worked surprisingly well.](https://gitlab.com/anarcat/scripts/-/blob/main/transmodify.py?ref_type=heads) + +I personally don't believe LLMs will ever be good enough to produce +and maintain software at scale. They're surprisingly good at finding +security flaws right now. But what I see is also a lot of +[Bullshit](https://en.wikipedia.org/wiki/Bullshit), with capital B. It's not lying, it does not "know" +anything. It's misleadingly cohesive and meaningful, but it lacks +meaning. + +I have not been confronted with much slop, apart from the lobster +Jesus or the yellow man atrocities, and particularly not that much in +my work. But I see what it is doing to my profession. I suspect the +deskilling aspect is real. But beyond that, I am truly concern by how + + +TODO: rephrase we are throwing crap at each other. + + +Software does not evolve in a void. It is a community effort, +regardless of whether or not it is a community-based free software or +corporate product. Generations of humans have carefully built the +scaffolding of technology required for modern networks and software to +operate, in a convoluted contraption that no single human currently +understands. + +The idea of simply giving up on that understanding and delegating it +to an unproven model is not only chilling, it feels just plain +stupid. Not stpud as in "Terminator" stupid, stupid as in "I can't get +inside the datacenter because the authentication system is +down". Except we're in a "the power plant doesn't reboot" or "their +LLM found an 0day in our slop" kind of stupid.
4 horsemen
diff --git a/blog/2026-05-16-four-horsemen.md b/blog/2026-05-16-four-horsemen.md new file mode 100644 index 00000000..c0f6b73e --- /dev/null +++ b/blog/2026-05-16-four-horsemen.md @@ -0,0 +1,153 @@ +[[!meta title="The Four Horsemen of the LLM Apocalypse"]] + +I have been battling Large Language Models (LLM, a term I prefer to +the pretentious Artificial Intelligence term which they definitely +aren't) for the past couple of weeks and have struggled to think about +what it means and how to deal with its fallout. + +I've come to articulate this in terms of the [Four Horsemen of the +Apocalypse](https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse), as we've come under attack from many fronts. + +> Appropriate sound track: Metallica's [The Four Horsemen](https://genius.com/Metallica-the-four-horsemen-lyrics), +> preferably [downloaded from Napster around 2000](https://en.wikipedia.org/wiki/Metallica_v._Napster,_Inc.). + +# War: bot armies + +Let's start with War. For a long time already, we've been battling bot +armies crawling our servers, mostly GitLab, where bots indiscriminately +and stupidly crawl virtually infinite endpoints to list directories, +read files, go back in history and run `diff` or `blame` on large +repositories. This includes our fork of Firefox, Tor Browser, a +massive repository. + +At first, we've tried various methods: [robots.txt](https://www.robotstxt.org/), blocking user +agents, and finally blocking entire misbehaving networks. Like many +others attempting to fend off the armies of War, it worked for a +while. But now they're back with a vengeance. Blocking entire networks +doesn't work: they come back some other way, typically through [shady +proxy networks](https://acid.vegas/blog/the-shady-world-of-ip-leasing/), which is kind of ironic considering we're +essentially running the largest proxy network of the world. + +Out of desperation, we've forced users to fetch and resend a cookie +when visiting our site, hoping this would tame some bots. The only way +to get a cookie is to visit a specific page, or run Javascript, +essentially running a poor man's Anubis, considering it seems [bots +have broken Anubis anyways](https://social.anoxinon.de/@Codeberg/115033790447125787) and that it [does not really defend +against a well-funded attacker](https://lock.cmpxchg8b.com/anubis.html), something which [Pretix warned +against in 2025 already](https://behind.pretix.eu/2025/05/23/captchas-are-over/). + +(We have a whole [discussion regarding those tools here](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42229).) + +But even that, predictably, has failed: bots are, really, agents +nowadays and run a full web browser, Javascript included, so a feeble +cookie is no match for the massive bot armies. + +We often underestimate the size of that army. The cloud is huge. It +was huge before AI, monopolizing effectively about two thirds of the +publicly facing sites in the world. There are large swaths of +processing power that are not in there like government and corporate +databases that have all moved to the cloud, in shared, but private +infrastructure that is readily available to anyone who pays. + +Now AI has made the problem worse by dramatically expanding the +capacity of the "cloud". We now have state-sized datacenters (in terms +of power usage) that dwarf any datacenters that have been built +before. They have millions of cores, petabytes of memory, exabytes of +storage. + +I think of how impressed I was to hear domestic 25 gigabit/s internet +connection in US municipal networks or Switzerland. That is nothing. + +Those companies can launch thousands, if not millions of fully +functional web browsers our way. We have worked for years at this +point to automate web browsers for unit testing web apps, now they're +being abused for crawling. Computing resources is not an +issue. Bandwidth is not an issue. + +Our contents are hosted on retrograde, old school, single point of +failure, single (or even multiple) VMs that can't deal with that kind +of load. Anything but hyperscalers can deal with this kind of load, +and I suspect, even them are having troubles of their own. + +This is the largest scale attack on the internet since the Morris worm +but, contrary to that worm, they're not going to jail. They're +celebrated as innovators and will soon be too big to fail. + +Which brings us to the second horsemen, famine. + +# Famine: shortages + +All that computing power doesn't come out of thin air: it needs +hardware, and a *lot* of it. Earlier this year, I've heard from a +colleague that their Dell supplier refused to even provide a *quote* +to them before August. Dell! In February, [Western Digital's hard +drive production for 2026 was already sold out](https://www.techspot.com/news/111346-western-digital-hdd-production-capacity-2026-already-sold.html). Hard drives would +essentially [doubled in price within a year](https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42465), and some have now +tripled. A server quote we had in November was renewed recently and +*quadrupled*, going from 10 thousand to *FOURTY* thousand dollars for +a single server. + +And that's just us privileged computer engineers. Real folks are +facing real-life shortages out there, as massive datacenters are +being built at neck-breaking speed, stealing fresh water from actual +humans to feed the war machine. + +The actual job market apocalypse hasn't quite reached us just yet: it +seems there are *some* job losses, but nothing quite apocalyptic as +one would have expected so far. But I wouldn't be surprised if the job +market goes south, especially for white collar jobs. For engineers, +the trend has certainly been reversing for a while, something that +Google and other large corporations have been working hard on for +years, trying to train new engineers to flood the market with +initiatives like "summer of code" and so on. + +Which brings us, of course, to Death. + +# Death: security and copyright + +Our third horseman is one I did *not* expect a couple of months +ago. Back at FOSDEM, `curl`'s maintainer Daniel Stenberg famously +[complained about the poor quality of LLM-generated reports](https://lwn.net/Articles/1058266/) but +then, a few months later, everyone is [scrambling to deal with floods +of good reports](https://lwn.net/Articles/1066581/). + +In the past two weeks, this culminated in a significant number of +highly critical security issues across multiple projects. Chained +together, remote code execution vulnerabilities in [Nginx](https://depthfirst.com/nginx-rift) and +[Apache](https://www.cve.org/CVERecord?id=CVE-2026-23918) and *two* local privilege escalations in the Linux kernel +([dirtyfrag](https://github.com/V4bel/dirtyfrag/) and [fragnesia](https://github.com/v12-security/pocs/tree/main/fragnesia#fragnesia)) essentially gave everyone with a +clue root access to any unpatched server to the web. + +Just today, another "0-day" exploit dropped, [ssh-keysign-pwn](https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn), +which gives read access to any file to a local user on a Linux system, +compromising TLS and SSH private keys. + +All those were released without any significant coordination while +people scrambled to find mitigations. For the latter, there's +currently no known mitigation. + +Many ([including Linus Torvalds](https://lwn.net/Articles/1072007/#Comments)) are now considering such issues +to be a matter of immediate, public disclosure which puts [some old +debates about disclosure processes](https://lwn.net/Articles/1071499/) in perspective, to say the +least. + +I would certainly worry about sandboxing if I would be running agents +locally (which I most certainly am not), by the way. + +But this is not merely the death of traditional coordinated disclosure +process, the C programming language, the Linux kernel. + +Keep in mind those bots were (and are still) trained on a large corpus +of copyrighted material. Facebook has [trained their models on pirated +books](https://www.theguardian.com/technology/2025/jan/10/mark-zuckerberg-meta-books-ai-models-sarah-silverman) and [Nvidia has done deals with Anna's Archive](https://torrentfreak.com/nvidia-contacted-annas-archive-to-secure-access-to-millions-of-pirated-books/) to secure +access to large swaths of copyrighted material. The [US Congress seems +to think LLM outputs are not copyrightable](https://www.congress.gov/crs-product/LSB10922), like any other machine +outputs. + +With many people now vibe coding their way out of learning or +remembering how computers work, is this the Death of Copyright? + +And this, of course, brings us to the last horseman: Pestilence. + +# Pestilence: slop +
try to fix image scaling
diff --git a/services/radio.mdwn b/services/radio.mdwn index 509711e4..9ebc7025 100644 --- a/services/radio.mdwn +++ b/services/radio.mdwn @@ -267,7 +267,7 @@ face. It looks like that when streaming: -[[!img snap-20260513T165553.png]] +<a href="snap-20260513T165553.png"><img src="snap-20260513T165553.png" /></a> A good way to test streaming is, with ffmpeg:
switch to direct
diff --git a/services/radio/snap-20260513T165553.png b/services/radio/snap-20260513T165553.png deleted file mode 120000 index 7af2f99f..00000000 --- a/services/radio/snap-20260513T165553.png +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/Gx/Fz/SHA256E-s5212768--5dd9531699593f162a644136ca8d7e343587be08b3552d264308cf987c3548df.png/SHA256E-s5212768--5dd9531699593f162a644136ca8d7e343587be08b3552d264308cf987c3548df.png \ No newline at end of file diff --git a/services/radio/snap-20260513T165553.png b/services/radio/snap-20260513T165553.png new file mode 100644 index 00000000..b88e355a --- /dev/null +++ b/services/radio/snap-20260513T165553.png @@ -0,0 +1 @@ +/annex/objects/SHA256E-s5212768--5dd9531699593f162a644136ca8d7e343587be08b3552d264308cf987c3548df.png
note low latency setting
diff --git a/services/radio.mdwn b/services/radio.mdwn
index 1f639c82..509711e4 100644
--- a/services/radio.mdwn
+++ b/services/radio.mdwn
@@ -237,7 +237,8 @@ for example:
rtmp://peertube.wtf:1935/live
-The "Live stream key" from Peertube should be added as the "Stream key".
+The "Live stream key" from Peertube should be added as the "Stream
+key". I also set the Peertube stream to be "low latency".
Then in "Audio", I disable the "desktop source" so that I have better
control over the inputs (in order to avoid loops, for example, if I
update on radio work
We also import the jingles rendering that were mysteriously only
stored in the puppet repo.
We also import the jingles rendering that were mysteriously only
stored in the puppet repo.
diff --git a/services/radio.mdwn b/services/radio.mdwn
index 83c201a6..1f639c82 100644
--- a/services/radio.mdwn
+++ b/services/radio.mdwn
@@ -224,6 +224,61 @@ Fixed issues:
I have also filed a [WNPP bug](https://bugs.debian.org/926457) so the thing is (eventually)
packaged in Debian.
+# OBS
+
+I tried OBS studio to stream audio from my laptop, to Peertube and
+friends.
+
+It works!
+
+The key must be input into the "stream" settings each time. The trick
+is to create a "custom" source and add the Peertube URL as the server,
+for example:
+
+ rtmp://peertube.wtf:1935/live
+
+The "Live stream key" from Peertube should be added as the "Stream key".
+
+Then in "Audio", I disable the "desktop source" so that I have better
+control over the inputs (in order to avoid loops, for example, if I
+listen to some other stream, or leaks for example if i listen to
+voicemail), but keep the "Mic/Auxiliary audio" as is.
+
+Then everything happens in "scenes" which are basically audio/visual
+transitions between different contexts. In the basic scene, we add a
+"Jack Input Client", into which we'll plug in our audio player.
+
+This is more brittle than the default "desktop audio" setting, because
+the Jack input can easily get disconnected. The "JACK" output plugin
+in Audacious has a setting to pick the output port and that can be set
+to `OBS.*in_.*`. The problem with that is then you don't hear the
+audio yourself! But this can be fixed by patching that less important
+output by hand in `qjackctl` or `qpwgraph`.
+
+The final touch is to connect the second `capture_AUX1` ports into the
+OBS Mic/Aux input, because otherwise input is mono on a single channel
+
+I also add a background image, which I "Transform > Fit to screen".
+
+I configured a bunch of scenes like this with various track fallbacks
+and images, and even one with a webcam to scream, sorry stream my
+face.
+
+It looks like that when streaming:
+
+[[!img snap-20260513T165553.png]]
+
+A good way to test streaming is, with ffmpeg:
+
+ MOVIE=clip.mp4
+ KEY="REDACTED"
+ HOST="rtmp://peertube.wtf:1935/live/${KEY}"
+ ffmpeg -re -i "${MOVIE}" -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv ${HOST}
+
+The problem with using "just" ffmpeg is that it only streams a local
+file. What we want is open a JACK port and stream that. Ideally
+streaming the album covers as well, which is currently done manually.
+
Old design
==========
@@ -240,6 +295,12 @@ réguliers (à chaque 15 chansons).
Les détails de la configuration technique sont ci-bas.
+Update: I tried again liquidsoap on 2026-05-13 and was able to stream
+to RTMP AKA Peertube and friends. Unfortunately, the `input.jack`
+input was dropping samples so the resulting stream was spotty. Worse,
+it was either always on, or always off, so it didn't work to use it as
+a fallback.
+
<a href="radio-design.svg"><img src="radio-design.png" /></a>
Liquidsoap configuration
diff --git a/services/radio/.gitignore b/services/radio/.gitignore
new file mode 100644
index 00000000..c262b7bb
--- /dev/null
+++ b/services/radio/.gitignore
@@ -0,0 +1 @@
+passwords.liq.inc
diff --git a/services/radio/basic.liq b/services/radio/basic.liq
new file mode 100755
index 00000000..5f9c0ca8
--- /dev/null
+++ b/services/radio/basic.liq
@@ -0,0 +1,13 @@
+#!/usr/bin/liquidsoap
+
+#favorites = playlist.safe(reload_mode="watch", '~/Music/playlists/Favoris.m3u')
+#radio = rotate(weights = [5, 30, 1], [favorites, shuffle, jingles])
+emergency = single("/home/anarcat/src/puppet/site-modules/profile/files/icecast2/fallback-jingle.mp3")
+jack = input.jack(id="liquidsoap", fallible=true)
+# this fallback does nothing, as jack always succeeds, even if fully disconnected, and even with failible
+radio = fallback(track_sensitive=false, [jack, emergency])
+
+%include "passwords.liq.inc"
+
+# http.transport.secure_transport doesn't work in debian, seems like it's not compield with libssl or ocaml-tls
+output.icecast(%mp3, host="localhost", port=8000, password="#{password}", mount="radio.mp3", radio)
diff --git a/services/radio/fallback-jingle.mp3 b/services/radio/fallback-jingle.mp3
new file mode 100644
index 00000000..3f184a4b
--- /dev/null
+++ b/services/radio/fallback-jingle.mp3
@@ -0,0 +1 @@
+/annex/objects/SHA256E-s994930--5078f0e7b15b554b3dfd0efd1712309d4ee029cb9bd3f229afd5a2ca966e2d60.mp3
diff --git a/services/radio/fallback-jingle.ogg b/services/radio/fallback-jingle.ogg
new file mode 100644
index 00000000..4544e035
--- /dev/null
+++ b/services/radio/fallback-jingle.ogg
@@ -0,0 +1 @@
+/annex/objects/SHA256E-s867943--a725f65316b40106c01333e4a2de583fe8aa4870ec72f28c62d9ffdca149346f.ogg
diff --git a/services/radio/ffmpeg-shared-encoding.liq b/services/radio/ffmpeg-shared-encoding.liq
new file mode 100644
index 00000000..9cad6da4
--- /dev/null
+++ b/services/radio/ffmpeg-shared-encoding.liq
@@ -0,0 +1,28 @@
+# An audio source...
+audio = sine()
+
+# Encode it in mp3
+audio = ffmpeg.encode.audio(%ffmpeg(%audio(codec = "libmp3lame")), audio)
+
+# A video source, for instance a static image
+video = single("/home/anarcat/folipon.jpg")
+
+# Encode it in h264 format
+video = ffmpeg.encode.video(%ffmpeg(%video(codec = "libx264")), video)
+
+# Mux it with the audio
+stream = source.mux.video(video=video, audio)
+
+# Copy encoder for the rtmp stream
+enc = %ffmpeg(format = "flv", %audio.copy, %video.copy)
+
+%include "passwords.liq.inc"
+
+# above should include
+# key = "..."
+url = "rtmp://peertube.wtf:1935/live/#{key}"
+output.url(self_sync=true, url=url, enc, stream)
+
+# Send to YouTube
+#url = "rtmp://a.rtmp.youtube.com/live2/#{key}"
+#output.url(url=url, enc, stream)
diff --git a/services/radio/rtmp.liq b/services/radio/rtmp.liq
new file mode 100644
index 00000000..cf3d02ca
--- /dev/null
+++ b/services/radio/rtmp.liq
@@ -0,0 +1,27 @@
+# A video source: static image
+image = single("/home/anarcat/folipon.jpg")
+
+cam = input.v4l2()
+
+# Encode it in h264 format
+video = ffmpeg.encode.video(%ffmpeg(%video(codec = "libx264")), fallback([cam, image]))
+
+emergency = single("/home/anarcat/src/puppet/site-modules/profile/files/icecast2/fallback-jingle.mp3")
+
+jack = input.jack(id="liquidsoap", fallible=true, start=false)
+
+radio = fallback(track_sensitive=false, [jack, emergency])
+
+audio = ffmpeg.encode.audio(%ffmpeg(%audio(codec = "libmp3lame")), radio)
+
+stream = source.mux.video(video=video, audio)
+
+# Copy encoder for the rtmp stream
+enc = %ffmpeg(format = "flv", %audio.copy, %video.copy)
+
+%include "passwords.liq.inc"
+
+# above should include
+# key = "..."
+url = "rtmp://peertube.wtf:1935/live/#{key}"
+output.url(self_sync=true, url=url, enc, stream)
diff --git a/services/radio/snap-20260513T165553.png b/services/radio/snap-20260513T165553.png
new file mode 120000
index 00000000..7af2f99f
--- /dev/null
+++ b/services/radio/snap-20260513T165553.png
@@ -0,0 +1 @@
+../../.git/annex/objects/Gx/Fz/SHA256E-s5212768--5dd9531699593f162a644136ca8d7e343587be08b3552d264308cf987c3548df.png/SHA256E-s5212768--5dd9531699593f162a644136ca8d7e343587be08b3552d264308cf987c3548df.png
\ No newline at end of file
unlock all files, hopefully publishing them properly
diff --git a/blog/files/20101213.17.00-18.00.mp3 b/blog/files/20101213.17.00-18.00.mp3 deleted file mode 120000 index 48e331e9..00000000 --- a/blog/files/20101213.17.00-18.00.mp3 +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/69/8J/SHA256E-s28799104--4a95618e9fe1dcc1934f6a2219d5775c2806278248696ec26cd39c45a66d168a.00.mp3/SHA256E-s28799104--4a95618e9fe1dcc1934f6a2219d5775c2806278248696ec26cd39c45a66d168a.00.mp3 \ No newline at end of file diff --git a/blog/files/20101213.17.00-18.00.mp3 b/blog/files/20101213.17.00-18.00.mp3 new file mode 100644 index 00000000..b0133c19 --- /dev/null +++ b/blog/files/20101213.17.00-18.00.mp3 @@ -0,0 +1 @@ +/annex/objects/SHA256E-s28799104--4a95618e9fe1dcc1934f6a2219d5775c2806278248696ec26cd39c45a66d168a.00.mp3 diff --git a/blog/files/4032-1-report.mp3 b/blog/files/4032-1-report.mp3 deleted file mode 120000 index 706d4d31..00000000 --- a/blog/files/4032-1-report.mp3 +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/Vv/gk/SHA256E-s30073681--a3d21404046f96a333d2df643920362bc81f4ba03a33e00af9d48bd173bcc197.mp3/SHA256E-s30073681--a3d21404046f96a333d2df643920362bc81f4ba03a33e00af9d48bd173bcc197.mp3 \ No newline at end of file diff --git a/blog/files/4032-1-report.mp3 b/blog/files/4032-1-report.mp3 new file mode 100644 index 00000000..9c236a2f --- /dev/null +++ b/blog/files/4032-1-report.mp3 @@ -0,0 +1 @@ +/annex/objects/SHA256E-s30073681--a3d21404046f96a333d2df643920362bc81f4ba03a33e00af9d48bd173bcc197.mp3 diff --git a/blog/files/desautels201103091732_2.spx b/blog/files/desautels201103091732_2.spx deleted file mode 120000 index 2156b806..00000000 --- a/blog/files/desautels201103091732_2.spx +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/WJ/5q/SHA256E-s1945971--1c8edbe0448a3ae36a2964b916b44aa105466f35061a3837656cbcf2693c856c.spx/SHA256E-s1945971--1c8edbe0448a3ae36a2964b916b44aa105466f35061a3837656cbcf2693c856c.spx \ No newline at end of file diff --git a/blog/files/desautels201103091732_2.spx b/blog/files/desautels201103091732_2.spx new file mode 100644 index 00000000..e908def5 --- /dev/null +++ b/blog/files/desautels201103091732_2.spx @@ -0,0 +1 @@ +/annex/objects/SHA256E-s1945971--1c8edbe0448a3ae36a2964b916b44aa105466f35061a3837656cbcf2693c856c.spx diff --git a/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png b/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png deleted file mode 120000 index e050c461..00000000 --- a/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png +++ /dev/null @@ -1 +0,0 @@ -../../../.git/annex/objects/gm/6m/SHA256E-s3263545--1e006a069d239975b01aa08ed5e41056dbbbf882402316064a88b7ad516857a5.svg.png/SHA256E-s3263545--1e006a069d239975b01aa08ed5e41056dbbbf882402316064a88b7ad516857a5.svg.png \ No newline at end of file diff --git a/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png b/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png new file mode 100644 index 00000000..77cfde86 --- /dev/null +++ b/blog/files/images/2000px-iss027e036656-commented-20110608.svg_.png @@ -0,0 +1 @@ +/annex/objects/SHA256E-s3263545--1e006a069d239975b01aa08ed5e41056dbbbf882402316064a88b7ad516857a5.svg.png diff --git a/blog/files/montrealdaybreak_20110307_46292.mp3 b/blog/files/montrealdaybreak_20110307_46292.mp3 deleted file mode 120000 index 6b0e5472..00000000 --- a/blog/files/montrealdaybreak_20110307_46292.mp3 +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/z6/v1/SHA256E-s10857247--244505f759423c33a569c3fe1f4cfecad4f12c978b4828beea46872bcafab9c4.mp3/SHA256E-s10857247--244505f759423c33a569c3fe1f4cfecad4f12c978b4828beea46872bcafab9c4.mp3 \ No newline at end of file diff --git a/blog/files/montrealdaybreak_20110307_46292.mp3 b/blog/files/montrealdaybreak_20110307_46292.mp3 new file mode 100755 index 00000000..2237d6b7 --- /dev/null +++ b/blog/files/montrealdaybreak_20110307_46292.mp3 @@ -0,0 +1 @@ +/annex/objects/SHA256E-s10857247--244505f759423c33a569c3fe1f4cfecad4f12c978b4828beea46872bcafab9c4.mp3 diff --git a/services/radio/Fallback-fr.wav b/services/radio/Fallback-fr.wav deleted file mode 120000 index cc955395..00000000 --- a/services/radio/Fallback-fr.wav +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/Pf/04/SHA256E-s993176--11f92945e410c0c3dd7d7d32db3023366f071a1fbacc02ece63883d9e7a880ee.wav/SHA256E-s993176--11f92945e410c0c3dd7d7d32db3023366f071a1fbacc02ece63883d9e7a880ee.wav \ No newline at end of file diff --git a/services/radio/Fallback-fr.wav b/services/radio/Fallback-fr.wav new file mode 100644 index 00000000..a1f7a672 --- /dev/null +++ b/services/radio/Fallback-fr.wav @@ -0,0 +1 @@ +/annex/objects/SHA256E-s993176--11f92945e410c0c3dd7d7d32db3023366f071a1fbacc02ece63883d9e7a880ee.wav diff --git a/services/radio/Fallback.wav b/services/radio/Fallback.wav deleted file mode 120000 index 0dad6928..00000000 --- a/services/radio/Fallback.wav +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/JV/6J/SHA256E-s1058444--22c95ad2817bfa4c99d438701ceeadaee5e968fe46023e01263431fea27074b4.wav/SHA256E-s1058444--22c95ad2817bfa4c99d438701ceeadaee5e968fe46023e01263431fea27074b4.wav \ No newline at end of file diff --git a/services/radio/Fallback.wav b/services/radio/Fallback.wav new file mode 100644 index 00000000..60c7bf77 --- /dev/null +++ b/services/radio/Fallback.wav @@ -0,0 +1 @@ +/annex/objects/SHA256E-s1058444--22c95ad2817bfa4c99d438701ceeadaee5e968fe46023e01263431fea27074b4.wav diff --git a/services/radio/fallback-merge.aup b/services/radio/fallback-merge.aup deleted file mode 120000 index 2efa80d5..00000000 --- a/services/radio/fallback-merge.aup +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/8X/J3/SHA256E-s9607--97f59b31904386498ab1c48729b1d7953909dd96440b27a09da3cf2751fdfa8d.aup/SHA256E-s9607--97f59b31904386498ab1c48729b1d7953909dd96440b27a09da3cf2751fdfa8d.aup \ No newline at end of file diff --git a/services/radio/fallback-merge.aup b/services/radio/fallback-merge.aup new file mode 100644 index 00000000..ce34f71f --- /dev/null +++ b/services/radio/fallback-merge.aup @@ -0,0 +1 @@ +/annex/objects/SHA256E-s9607--97f59b31904386498ab1c48729b1d7953909dd96440b27a09da3cf2751fdfa8d.aup diff --git a/services/radio/fallback-merge.ogg b/services/radio/fallback-merge.ogg deleted file mode 120000 index 7ccf53ef..00000000 --- a/services/radio/fallback-merge.ogg +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/66/GJ/SHA256E-s867943--a725f65316b40106c01333e4a2de583fe8aa4870ec72f28c62d9ffdca149346f.ogg/SHA256E-s867943--a725f65316b40106c01333e4a2de583fe8aa4870ec72f28c62d9ffdca149346f.ogg \ No newline at end of file diff --git a/services/radio/fallback-merge.ogg b/services/radio/fallback-merge.ogg new file mode 100644 index 00000000..4544e035 --- /dev/null +++ b/services/radio/fallback-merge.ogg @@ -0,0 +1 @@ +/annex/objects/SHA256E-s867943--a725f65316b40106c01333e4a2de583fe8aa4870ec72f28c62d9ffdca149346f.ogg diff --git a/services/radio/fallback-merge.wav b/services/radio/fallback-merge.wav deleted file mode 120000 index 36977c46..00000000 --- a/services/radio/fallback-merge.wav +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/Q5/Mx/SHA256E-s10958380--1a7e8e70ab36fe5ced535cfd4b29a14ac5f8bc63d94978da26a848e2448f60f0.wav/SHA256E-s10958380--1a7e8e70ab36fe5ced535cfd4b29a14ac5f8bc63d94978da26a848e2448f60f0.wav \ No newline at end of file diff --git a/services/radio/fallback-merge.wav b/services/radio/fallback-merge.wav new file mode 100644 index 00000000..842944e2 --- /dev/null +++ b/services/radio/fallback-merge.wav @@ -0,0 +1 @@ +/annex/objects/SHA256E-s10958380--1a7e8e70ab36fe5ced535cfd4b29a14ac5f8bc63d94978da26a848e2448f60f0.wav diff --git a/services/radio/fallback-merge_data/e00/d00/e0000009.au b/services/radio/fallback-merge_data/e00/d00/e0000009.au deleted file mode 120000 index 29d2683f..00000000 --- a/services/radio/fallback-merge_data/e00/d00/e0000009.au +++ /dev/null @@ -1 +0,0 @@ -../../../../../.git/annex/objects/6z/2P/SHA256E-s1060956--59d83f3aea64713056d27ebb2ecd95e814370a838757dbeae87e57d958c927ea.au/SHA256E-s1060956--59d83f3aea64713056d27ebb2ecd95e814370a838757dbeae87e57d958c927ea.au \ No newline at end of file diff --git a/services/radio/fallback-merge_data/e00/d00/e0000009.au b/services/radio/fallback-merge_data/e00/d00/e0000009.au new file mode 100644 index 00000000..119d6775 --- /dev/null +++ b/services/radio/fallback-merge_data/e00/d00/e0000009.au @@ -0,0 +1 @@ +/annex/objects/SHA256E-s1060956--59d83f3aea64713056d27ebb2ecd95e814370a838757dbeae87e57d958c927ea.au diff --git a/services/radio/fallback-merge_data/e00/d00/e000005c.au b/services/radio/fallback-merge_data/e00/d00/e000005c.au deleted file mode 120000 index 2bfc607d..00000000 --- a/services/radio/fallback-merge_data/e00/d00/e000005c.au +++ /dev/null @@ -1 +0,0 @@ -../../../../../.git/annex/objects/vz/XK/SHA256E-s530500--cb45f323ccf46e29608d1e1e888e569e2249fde3188bf49669781715c0db7739.au/SHA256E-s530500--cb45f323ccf46e29608d1e1e888e569e2249fde3188bf49669781715c0db7739.au \ No newline at end of file diff --git a/services/radio/fallback-merge_data/e00/d00/e000005c.au b/services/radio/fallback-merge_data/e00/d00/e000005c.au new file mode 100644 index 00000000..1903b6f7 --- /dev/null +++ b/services/radio/fallback-merge_data/e00/d00/e000005c.au @@ -0,0 +1 @@ +/annex/objects/SHA256E-s530500--cb45f323ccf46e29608d1e1e888e569e2249fde3188bf49669781715c0db7739.au diff --git a/services/radio/fallback-merge_data/e00/d00/e00000c7.au b/services/radio/fallback-merge_data/e00/d00/e00000c7.au deleted file mode 120000 index c0ee0c01..00000000 --- a/services/radio/fallback-merge_data/e00/d00/e00000c7.au +++ /dev/null @@ -1 +0,0 @@ -../../../../../.git/annex/objects/69/xF/SHA256E-s1060956--b467664e20de077b5d45239ac2684c978f15189111c955fa85790f28c6887fcd.au/SHA256E-s1060956--b467664e20de077b5d45239ac2684c978f15189111c955fa85790f28c6887fcd.au \ No newline at end of file diff --git a/services/radio/fallback-merge_data/e00/d00/e00000c7.au b/services/radio/fallback-merge_data/e00/d00/e00000c7.au new file mode 100644 index 00000000..2843f8b1 --- /dev/null +++ b/services/radio/fallback-merge_data/e00/d00/e00000c7.au @@ -0,0 +1 @@ +/annex/objects/SHA256E-s1060956--b467664e20de077b5d45239ac2684c978f15189111c955fa85790f28c6887fcd.au diff --git a/services/radio/fallback-merge_data/e00/d00/e00002a6.au b/services/radio/fallback-merge_data/e00/d00/e00002a6.au deleted file mode 120000 index 9804232c..00000000 --- a/services/radio/fallback-merge_data/e00/d00/e00002a6.au +++ /dev/null (Diff truncated)
document new ham radio course
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn index 2ce14dbf..5f0aa471 100644 --- a/hardware/radio.mdwn +++ b/hardware/radio.mdwn @@ -259,6 +259,7 @@ resources. Si vous cherchez un guide d'étude, [ces flash cards](https://hamstud semblent très bien. * Manuals, courses + * [CLARES](https://www.clares.ca/en) - excellent course, videos * [Good overview](http://www.visi.com/~tneu/whatsham.html) * [Emergencyradio.ca online course](http://www.emergencyradio.ca/course/) * [tech manual](http://kb6nu.com/tech-manual/)
typo
diff --git a/software/zfs.md b/software/zfs.md index ed2e762e..2be20085 100644 --- a/software/zfs.md +++ b/software/zfs.md @@ -180,7 +180,7 @@ other drives. But as far as disk size and ratio calculation goes, it As a rule of thumb, a RAIDZ1 (so 1 spare), it's essentially like RAID-5. -The most important thingto know about RAID-Z is that the layout can't +The most important thing to know about RAID-Z is that the layout can't be changed after the pool creation. If you have 3 drives in your RAIDZ1 pool, you're stuck with 3 drives until you rebuild the pool (although you *can* add spares). Arrays *can* be grown in *size* by
another wayland gizmo
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md index e9b94a1a..0325e094 100644 --- a/software/desktop/wayland.md +++ b/software/desktop/wayland.md @@ -930,6 +930,10 @@ In the end, I am just using `swayidle` with a configuration based on Interestingly, damjan also has a [service for swaylock][] itself, although it's not clear to me what its purpose is... +There's also now a [wayland-pipewire-idle-inhibit](https://github.com/rafaelrc7/wayland-pipewire-idle-inhibit) package that +will keep screenlock from starting whem audio is playing, although I'm +not sure I want that. + [swayidle]: https://github.com/swaywm/swayidle [swaylock]: https://github.com/swaywm/swaylock [unlikely to be implemented upstream]: https://github.com/swaywm/sway/issues/2254
show locations for upload first
diff --git a/.well-known/openpgpkey/Makefile b/.well-known/openpgpkey/Makefile index 63f4c577..60848bf5 100644 --- a/.well-known/openpgpkey/Makefile +++ b/.well-known/openpgpkey/Makefile @@ -24,9 +24,6 @@ hu: ; fi upload: - gpg --keyserver keyring.debian.org --send-keys $(FINGERPRINT) - gpg --keyserver pgpkeys.eu --send-keys $(FINGERPRINT) - gpg --keyserver keys.openpgp.org --send-keys $(FINGERPRINT) @echo "Not covered:" @echo "# GitLab and GitHub accounts" @echo @@ -41,7 +38,12 @@ upload: @echo "last test with plain 'python-gitlab' CLI failed though" @echo gpg --export --export-options export-minimal -a $(FINGERPRINT) | wl-copy - @echo "key copied to clipboard" + @echo "key copied to clipboard, go paste it above" + @echo + @echo "uploading to keyservers..." + gpg --keyserver keyring.debian.org --send-keys $(FINGERPRINT) + gpg --keyserver pgpkeys.eu --send-keys $(FINGERPRINT) + gpg --keyserver keys.openpgp.org --send-keys $(FINGERPRINT) renew: gpg --quick-set-expire $(FINGERPRINT) $(NEXT_EXPIRE)
also resync openpgp-policy.toml file on updates
diff --git a/.well-known/openpgpkey/Makefile b/.well-known/openpgpkey/Makefile index fb314116..63f4c577 100644 --- a/.well-known/openpgpkey/Makefile +++ b/.well-known/openpgpkey/Makefile @@ -3,7 +3,7 @@ ADDRESS=anarcat@anarc.at FINGERPRINT=BBB6CD4C98D74E1358A752A602293A6FA4E53473 NEXT_EXPIRE=$(shell LANG=C date -d '+1 year' '+%Y-%m-%d') -TPO_KEYRING=~/src/tor/account-keyring/ +TPO_ROOT=~/src/tor all: warn hu upload @@ -40,10 +40,6 @@ upload: @echo "list, parse for fingerprint, delete, then upload" @echo "last test with plain 'python-gitlab' CLI failed though" @echo - @echo "# other locations" - @echo - @echo "- tor-puppet/openpgp-policy.toml" - @echo gpg --export --export-options export-minimal -a $(FINGERPRINT) | wl-copy @echo "key copied to clipboard" @@ -53,7 +49,11 @@ renew: upload-tpo: @echo "updating TPO keyring" - git -C $(TPO_KEYRING) pull - gpg --export --export-options export-minimal $(FINGERPRINT) > $(TPO_KEYRING)/torproject-keyring/anarcat-$(FINGERPRINT).gpg - git -C $(TPO_KEYRING) commit torproject-keyring/anarcat-$(FINGERPRINT).gpg - git -C $(TPO_KEYRING) push + git -C $(TPO_ROOT)/account-keyring/ pull + gpg --export --export-options export-minimal $(FINGERPRINT) > $(TPO_ROOT)/account-keyring/torproject-keyring/anarcat-$(FINGERPRINT).gpg + git -C $(TPO_ROOT)/account-keyring/ commit torproject-keyring/anarcat-$(FINGERPRINT).gpg + git -C $(TPO_ROOT)/account-keyring/ push + @echo "updating openpgp-policy.toml files" + sq-git policy sync --disable-keyservers --policy-file=$(TPO_ROOT)/tor-puppet/openpgp-policy.toml + git -C $(TPO_ROOT)/tor-puppet/ commit openpgp-policy.toml + git -C $(TPO_ROOT)/tor-puppet/ push
renew pgp key
diff --git a/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe b/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe index 34c381d8..adc79f13 100644 Binary files a/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe and b/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe differ
add jvoisin's swic
diff --git a/software/desktop/calibre.mdwn b/software/desktop/calibre.mdwn
index 49dc1e73..ef771a33 100644
--- a/software/desktop/calibre.mdwn
+++ b/software/desktop/calibre.mdwn
@@ -327,9 +327,10 @@ the database using SQLAlchemy. It does use calibre components to
convert books but it might be an interesting alternative to the web
interface shipped with Calibre.
-[AnthoLume][], [kavita][] (C#), [librum][] (dotnet), [storyteller][] [kiosk][], [readarr][] ("arr" stands for
-"aaargh C#/Windows again!") and [Ubooquity][] (... Java) are things as
-well, none of which are packaged in Debian. (What is it with e-book
+[AnthoLume][], [kavita][] (C#), [librum][] (dotnet), [storyteller][]
+[kiosk][], [readarr][] ("arr" stands for "aaargh C#/Windows again!"),
+[swic](https://dustri.org/b/swic-a-simple-web-interface-for-calibre.html) (golang, minimalist) and [Ubooquity][] (... Java) are things
+as well, none of which are packaged in Debian. (What is it with e-book
webservers being written in C#?!)
[readarr]: https://readarr.com/
@@ -687,4 +688,4 @@ conversation here or on your favorite Mastodon instance](https://social.weho.st/
<!-- posted to the federation on 2026-01-05T14:28:30.119170 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/115844140883320100"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/115844140883320100"]]
more ham hardware
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index 891f7b7b..2ce14dbf 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -90,6 +90,12 @@ I uploaded a few photos [in this album](https://photos.anarc.at/documentation/ra
### Modern
+- heard good things about the [Xiegu G90](https://www.radioddity.com/products/xiegu-g90-hf-transceiver): 0.5-30MHz HF SDR
+ transceiver, built-in tuner, 20W, detachable 1.8" LCD display with a 9-pin
+ serial port, 48KHz waterfall, USB/LSB/CW/CWR/AM/NFM (no FT8), CW
+ decoder, "overheats if used for a long time", 1.63kg 12 x4.5 x21cm
+ (case only), 14 x 5.2 x 25cm (with handles), VHF connector,
+ powerpole connector
- [QMX](https://qrp-labs.com/qmx.html): low power QRP transceiver HF 20-80M, SDR / CW, packet,
*not* voice
- [(tr)uSDX](https://dl2man.de/): tiny, low power (80mA/500mA) QRP HF (20-80m,
@@ -118,6 +124,8 @@ that we might want to learn from. In particular, it ships:
#### Antennas
+ - [field antenna, 7-54MHz, telescopic V](https://www.hgeek.com/collections/ham-radio-antennas/products/hamgeek-p-esa-7-54mhz-dipole-antenna-portable-shortwave-antenna), needs a 3m stand for 7M
+ - [log periodic direction finding antenna kit](https://www.hgeek.com/collections/ham-radio-antennas/products/hamgeek-hg1723-0-5ghz-6ghz-pcb-log-periodic-antenna-for-uav-positioning-wifi-direction-finding), 500MHz-6GHz
- [Diamond X700HNA VHF/UHF antenna](https://www.dxengineering.com/parts/dmn-x700hna) that got the [reticulum guy
really excited](https://unsigned.io/articles/2024_05_16_Are_We_There_Yet.html)
- [CHA MPAS 2.0](https://chameleonantenna.com/products/cha-mpas-modular-portable-antenna-system-2-0): fancy multi-band "mobile" HF antenna, but
@@ -167,6 +175,7 @@ now completely useless.
* [GPS Central](https://www.gpscentral.ca/amateur-radio.html)
* [dx engineering](https://www.dxengineering.com/)
* [dxcanada.ca](https://dxcanada.ca/)
+ * [ham geek](https://www.hgeek.com/)
* [eBay](http://shop.ebay.com/Fixed-/163857/i.html)
* [local](http://www.raqi.ca/~ve2bzl/)
framework made a new laptop
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn index 802a9323..6cef9e3d 100644 --- a/hardware/keyboard.mdwn +++ b/hardware/keyboard.mdwn @@ -588,6 +588,11 @@ A friend recommended the [Rechteck](https://www.boardsource.xyz/products/Rechtec A bit too small for my taste, but nice looking. +## Framework + +[Framework](https://frame.work) made a [wireless keyboard and mouse combo](https://frame.work/ca/en/blog/previewing-the-framework-wireless-touchpad-keyboard). Not yet +available as of April 2026. + # Mini / travel keyboards Those are useful for the media station or traveling on the road with a diff --git a/hardware/laptop.mdwn b/hardware/laptop.mdwn index de54d1eb..2d7d282c 100644 --- a/hardware/laptop.mdwn +++ b/hardware/laptop.mdwn @@ -96,6 +96,20 @@ Review: * [Phoronix](https://www.phoronix.com/review/framework-13-amd/6), AMD - "fantastic choice for Linux users" * [rtings](https://www.rtings.com/laptop/reviews/framework/laptop-13-2023) +#### Pro + +Framework rebuilt their 13" laptop series with improvements like: + +- longer battery life (20h?) +- Intel® Core™ Ultra Series 3 processor with LPCAMM2 memory or AMD AI 300 +- CNC-milled case (making it more rigid) +- new 700 display with touch screen +- newer Dolby atmos speaker module on the sides instead of front +- other keyboard color keys +- haptic touchpad +- mostly backwards-compatible +- black chassis + ### 16" Framework just (2023-03-23) just announced a whole bunch of new stuff:
stopped using tabarray, it has huge memory leaks
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 8dab1adc..c67884c7 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -68,18 +68,30 @@ I am testing those and they might make it to the top list once I'm happy:
tabs](https://addons.mozilla.org/en-US/firefox/addon/snoozetabs/) (no deb, [source](https://github.com/bwinton/SnoozeTabs#readme)) for this as well.
* [Clean URLs](https://docs.clearurls.xyz/) (no deb, [source](https://github.com/ClearURLs/Addon)) - remove garbage in URLs
* [Display anchors](https://addons.mozilla.org/en-US/firefox/addon/display-_anchors/) (no deb, [source](https://github.com/Rob--W/display-anchors))
- * Firefox [Multi-account containers][] (no deb, [source](https://github.com/mozilla/multi-account-containers/)) - kind of
- useful to separate work/private stuff and generally keep cross-site
- surveillance under control. I was also using "Container Tab Groups"
- (AKA "TabArray") but this had [data loss issues](https://github.com/menhera-org/TabArray/issues/457). That extension
- was very useful to "hide a container", but the builtin extension
- also provides that feature, just with a bunch more clicks.
+ * Firefox [Multi-account containers][] (no deb, [source](https://github.com/mozilla/multi-account-containers/)) - kind
+ of useful to separate work/private stuff and generally keep
+ cross-site surveillance under control. I was also using "Container
+ Tab Groups" (AKA "TabArray") but this had [data loss issues](https://github.com/menhera-org/TabArray/issues/457) and
+ [horrible memory leaks](https://github.com/menhera-org/TabArray/issues/631). That extension was very useful to "hide
+ a container", but the builtin extension also provides that feature,
+ just with a bunch more clicks.
- builtin: extension button -> click ">" on the right container -> "Hide this
container"
- tabarray: right-click on tab and "hide this container" See
[Hide/Show container more accessible (#755)](https://github.com/mozilla/multi-account-containers/issues/755), [Show only this
container option (#1662)](https://github.com/mozilla/multi-account-containers/issues/1662), and [Some options are hard to access
- from the container list (#2089)](https://github.com/mozilla/multi-account-containers/issues/2089).
+ from the container
+ list (#2089)](https://github.com/mozilla/multi-account-containers/issues/2089).
+ One feature TabArray was giving me was the "stickiness" of the "new
+ tab" functionality, which would open new tabs in the same container
+ as the current tab. Instead of that, I used the
+ [KazuAlex/firefox-new-tab-page-container](https://github.com/KazuAlex/firefox-new-tab-page-container) which forces a
+ pop-up. The two extensions that supposedly add the "stickiness"
+ ([Sticky Containers](https://addons.mozilla.org/en-US/firefox/addon/sticky-containers/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=collection) and [Sticky Window Containers](https://addons.mozilla.org/en-US/firefox/addon/sticky-window-containers/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=collection)) both
+ fail to work here. So I ended up just using the "default container"
+ for everything but certain exceptions and things just work: tabs
+ open in that default container by default.
+
Containers are rendered mostly irrelevant by the "first party
isolation" features shipped with Firefox 87 (also known as [total
cookie protection](https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/)), my primary use case for those containers is
promote popup window, i use it all the time
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 91e5c959..8dab1adc 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -31,6 +31,9 @@ I have those extensions installed and use them very frequently:
[source](https://github.com/shgysk8zer0/awesome-rss)) - replace the [Live bookmarks removal](https://support.mozilla.org/en-US/kb/live-bookmarks-migration)
* [uBlock Origin][] ([[!debpkg webext-ublock-origin desc="debian
package"]], [source](https://github.com/gorhill/uBlock)) - making the web sane again
+ * [Popup window](https://addons.mozilla.org/en-US/firefox/addon/popup-window/) (no deb, [source](https://github.com/ettoolong/PopupWindow)) - open the link in a
+ pop-up, useful to have an "app-like" window for a website (I use
+ this for videoconferencing in a second tab)
* [Readeck](https://readeck.org/en/extension) (no deb, [source](https://codeberg.org/readeck/browser-extension)), read-it later service,
replacing Wallabag
* [URL to QR Code](https://addons.mozilla.org/en-US/firefox/addon/url-to-qrcode/?src=search) - (no debian package, [source](https://github.com/smoqadam/url-to-qrcode-firefox-addon)) after
@@ -93,9 +96,6 @@ I am testing those and they might make it to the top list once I'm happy:
* [Link hints][] (no deb, [source](https://github.com/lydell/LinkHints/)) - nice and simple alternative
to full-scale keyboard driven interface like [tridactyl][], see the
[keybindings](#keybindings) section below
- * [Popup window](https://addons.mozilla.org/en-US/firefox/addon/popup-window/) (no deb, [source](https://github.com/ettoolong/PopupWindow)) - open the link in a
- pop-up, useful to have an "app-like" window for a website (I use
- this for videoconferencing in a second tab)
[tridactyl]: https://github.com/tridactyl/tridactyl
[builtin Firefox shortcuts]: https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly
stopped using browserpass
I don't feel comfortable with the extension having access to my gpg
keyring like this.
I don't feel comfortable with the extension having access to my gpg
keyring like this.
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 429a021a..91e5c959 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -23,11 +23,6 @@ or have used in the past.
I have those extensions installed and use them very frequently:
- * [browserpass-ce](https://addons.mozilla.org/en-US/firefox/addon/browserpass-ce/) ([[!debpkg webext-browserpass desc="debian
- package"]], [source](https://github.com/browserpass/browserpass)) - super fast access to my passwords. use
- some magic mumble-jumble message passing thing which feels a bit
- creepy. possible alternative: [passff](https://github.com/passff/passff#readme), no Debian package,
- [872773](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872773).
* [Cookie AutoDelete](https://addons.mozilla.org/en-US/firefox/addon/cookie-autodelete/) (no Debian package, [908285](http://bugs.debian.org/908285),
[source](https://github.com/Cookie-AutoDelete/Cookie-AutoDelete)) - clear long-term identities for all sites except a
few, too bad it does not sync with uBlock/uMatrix ([issue
@@ -155,6 +150,11 @@ hard to use or simply irrelevant.
* [adblock plus](https://addons.mozilla.org/fr/firefox/addon/1865) - now selling ads! replaced with ublock
* [Addons compatibility reporter](https://addons.mozilla.org/en-US/firefox/addon/add-on-compatibility-reporter/) - useless since Firefox 57 /
Quantum, as incompatible extensions are just *disabled*
+ * [browserpass-ce](https://addons.mozilla.org/en-US/firefox/addon/browserpass-ce/) ([[!debpkg webext-browserpass desc="debian
+ package"]], [source](https://github.com/browserpass/browserpass)) - super fast access to my passwords. use
+ some magic mumble-jumble message passing thing which feels a bit
+ creepy. has Debian package, felt uncomfortable with my browser
+ having access to my OpenPGP keyring
* [Debian buttons](https://icedeb.ktnx.net/) didn't work for me as it requires buttons, so I
made a simple [bookmarks folder](https://salsa.debian.org/debian/debian-bookmarks-shortcuts) instead
* [firebug](https://addons.mozilla.org/firefox/1843/) - somewhat built-in
replace wallabag with readeck
see https://anarc.at/blog/2026-03-05-wallabako-retirement/
see https://anarc.at/blog/2026-03-05-wallabako-retirement/
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 302bc2ab..429a021a 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -36,6 +36,8 @@ I have those extensions installed and use them very frequently:
[source](https://github.com/shgysk8zer0/awesome-rss)) - replace the [Live bookmarks removal](https://support.mozilla.org/en-US/kb/live-bookmarks-migration)
* [uBlock Origin][] ([[!debpkg webext-ublock-origin desc="debian
package"]], [source](https://github.com/gorhill/uBlock)) - making the web sane again
+ * [Readeck](https://readeck.org/en/extension) (no deb, [source](https://codeberg.org/readeck/browser-extension)), read-it later service,
+ replacing Wallabag
* [URL to QR Code](https://addons.mozilla.org/en-US/firefox/addon/url-to-qrcode/?src=search) - (no debian package, [source](https://github.com/smoqadam/url-to-qrcode-firefox-addon)) after
removing another alternative that was proprietary spyware (!! see
below), I found about 6 different alternatives (this one and
@@ -43,9 +45,6 @@ I have those extensions installed and use them very frequently:
people??) This is the most popular, reviews are mostly positive,
seems to be working offline, has a free license, and source is
available. Super simple too.
- * [Wallabager][] (no debian package, [source](https://github.com/wallabag/wallabagger)) - to YOLO a bunch
- of links in a pile outside my web browser that I can read offline
- thanks to [Wallabako](https://gitlab.com/anarcat/wallabako/)
[Wallabager]: https://addons.mozilla.org/en-US/firefox/addon/wallabagger/
[uMatrix]: https://addons.mozilla.org/firefox/addon/umatrix/
@@ -204,6 +203,9 @@ hard to use or simply irrelevant.
(basically only the sites which you really want a long-term
identity on, whereas you had to unblock cookies from a lot more
sites just to get things to work at all in uMatrix)
+ * [Wallabager][] (no debian package, [source](https://github.com/wallabag/wallabagger)) - to YOLO a bunch
+ of links in a pile outside my web browser that I can read offline
+ thanks to [Wallabako](https://gitlab.com/anarcat/wallabako/), switched to Readeck
* [Wayback machine](https://addons.mozilla.org/en-US/firefox/addon/wayback-machine_new/) (no deb, [source](https://github.com/internetarchive/wayback-machine-chrome)?) - i also have
bookmarklets, but this could work better! Unfortunately, it doesn't
work with other archival sites like archive.is or Google's
found out about dxcanada.ca
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn index 808f8664..6e6c7dd2 100644 --- a/hardware/radio.mdwn +++ b/hardware/radio.mdwn @@ -148,6 +148,7 @@ now completely useless. * [Universal Radio](https://www.universal-radio.com/) * [GPS Central](https://www.gpscentral.ca/amateur-radio.html) * [dx engineering](https://www.dxengineering.com/) + * [dxcanada.ca](https://dxcanada.ca/) * [eBay](http://shop.ebay.com/Fixed-/163857/i.html) * [local](http://www.raqi.ca/~ve2bzl/)
more GAS
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index 6e6c7dd2..891f7b7b 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -18,18 +18,61 @@ See also [[services/meshtastic]] (think DIY text mesh) and
* [Yaesu FT-60R](https://www.yaesu.com/indexVS.cfm?cmd=DisplayProducts&encProdID=6EC43B29CEF0EC2B4E19BB7371688B7F)
* [Quansheng UV-K5](https://qsfj.com/products/3002): similar to baofeng UV-5R, but more hackable,
see [custom firmware](https://github.com/nikant/kamilsss655-uv-k5-firmware-custom-nkk?tab=readme-ov-file), [also](https://whosmatt.github.io/uvmod/)
-* Transceiver: Yaesu FT-100D, bought around 600$ on ebay in 2010
+ - [Retevis RT3S](https://www.retevis.com/products/rt3s-dual-band-dmr-radio-non-gps-built-in-gps), rebranded version of the [Tyt MD-UV 380](https://www.tyt888.com/pro_info147.html):
+ DMR/analog, UHF/VHF, 5W, 3000 channels, color LCD, AES encryption,
+ 8 hours recording. biggest downside is lack of USB-C plug.
+
+ bought straight from the retevis.com for 115$CAD, also considered
+ [bigupdagets](https://ca.bigupgadgets.com/retevis-rt3s-136-174mhz-400-480mhz-3000ch-handheld-dmr-digital-two-way-radio-walkie-talkie-06-0151960) (140$CAD) [fleetwood](https://www.fleetwooddp.com/products/retevis-rt3s-dual-band-dmr-gps-amateur-ham-radio), and
+ [unclemikesoutdoors.ca](https://unclemikesoutdoors.ca/products/retevis-rt3s-dual-band-dmr-gps-amateur-ham-radio) (150$CAD).
+
+ hoping i can use one of this to program it, because chirp can't:
+ [editcp](https://www.farnsworth.org/dale/codeplug/editcp/), [dmrconfig](https://github.com/OpenRTX/dmrconfig), [qdmr](https://github.com/hmatuschek/qdmr?tab=readme-ov-file), might be flashable with a
+ custom firmware like [OpenRTX](https://openrtx.org/#/), unclear how well it works.
+* Transceiver:
+ - Yaesu FT-100D, bought around 600$ on ebay in 2010
+ - i bought *two* from [HF Signals](https://www.hfsignals.com/), my main challenge for
+ adoption was the BNC connectors (I have everything in PL259, maybe
+ a [simple adapter like this](https://addison-electronique.com/en/uhf-female-to-bnc-male-adaptor.html) or [this BNC male to UHF SO239
+ female adapter](https://www.radioworld.ca/product/con-210/bnc-male-uhf-female-adapter) (2.99$), [signalstuff also has more expensive
+ ones](https://signalstuff.com/products/so239-bncm/), i ended up buying from dxengineering... the radios I
+ have are:
+ - [sBITX](https://www.sbitx.net/): 25W, 80-10m, 10W on 20-10m, receive 500KHz-30MHz, idle
+ 600mA, xmit 9A, SSB/CW/CW-Reverse/FT8/FLdigi, 7" touch screen
+ display, built-in mic and speaker, on-screen keyboard, 4 memories
+ per band, A/B VFOs, [N1MM](https://n1mmwp.hamdocs.com/)-style logger, real time clock, HDMI
+ output, WAV recording, QRZ.com lookups, telnet/BBS (RBN/DX
+ clusters), can be powered off RC/drone batteries with the XT60
+ connector, BNC connector, web interface, [sbitx v3](https://www.hfsignals.com/index.php/sbitx-v3/) and others
+ can apparently [run Debian!](https://www.cybertec-postgresql.com/en/the-debian-conference-2025-in-brest/), [open source](https://github.com/afarhan/sbitx), 10"x6"x2",
+ 4lbs, 430$USD
+ - [zBitx](https://www.hfsignals.com/index.php/zbitx/): 5W HF, 80-10m, CW/SSB/FreeDV/FT8/SSTV, 480×320 touch
+ screen, 156mm x 80mm x 35mm, 250g, 410g with 2x18650 LiPO
+ batteries, same software as the sBitx, 6V-9V PSU, 300mA standby,
+ 1.5-3A transmit, 197$USD
+ - [uBITX v6](https://www.hfsignals.com/index.php/ubitx-v6/): 10W HF, SSB/CW, SDR, arduino-based, GPL-3, 210$,
+ seems like the older version of the other two
* Tuner wiring kit:
* MFJ-941E - antenna tuner and switch [155$ at radioworld](http://radioworld.ca/product_info.php?products_id=2885)
* 100' of RG8 coax cabling [65$ at radioworld](http://radioworld.ca/product_info.php?cPath=73_394&products_id=6831)
* PL259 connectors [4$ at radioworld](http://radioworld.ca/product_info.php?cPath=73_394&products_id=3244)
* VHF/UHF meter: [workman 50$](http://www.ebay.com/itm/SWR-Power-500-Watt-METER-120-500-MHz-UHF-VHF-Ham-Radio-w-RG8X-Jumper-/380424888249) ([17 reviews: 3.5/5](http://www.eham.net/reviews/detail/3905))
* Ferrites: ~40$ + 24$ customs fees (PN: 2643167851 from [IBS electronics](http://www.ibselectronics.com/search_r.asp?mfgpn=2643167851))
+ * some sort of powerpole adapter for the FT-100d, maybe [this thing
+ from Powererx](https://powerwerx.com/radio-power-cable-yaesu-kenwood-icom)? i ended up buying a power supply from Addison,
+ a kit from dxengineering and cutting/crimping a bunch of stuf
+ * i also bought a smaller (but not small enough) power supply from dxeng
* Antennas
* MAP-G5RV 1/2 - G5RV 50' dipole antenna (10-40m) [85$ at radioworld](http://radioworld.ca/product_info.php?manufacturers_id=121&products_id=7788)
* [S&K Open Stub J-Pole Antenna](https://signalstuff.com/product/signal-staff-osj/) (OSJ) from [Signalstuff.com](https://signalstuff.com/),
can be mounted on a mast *or* a camera tripod *or* even hanged from
a tree! (60$USD)
+ * [Palomar PAL-OCF4010-100](https://palomar-engineers.com/catalog/Best-Off-Center-Fed-Dipole-Antenna-40-6-Meters-100-500-1-5KW-5KW-PEP-POTA-Field-Day-FREE-shipping-in-USA-p153923527) (165$CAD)
+ - the [Chameleon OCF-40](https://www.dxengineering.com/parts/cha-ocf-40) seems like a good portable option, is
+ easier to setup than my G5RV, nice carrying pouch, designed to be
+ lifted by the middle instead of the ends, something I should
+ really do with my G5RV in the field anyways. works great, but not
+ on 80m
* DIY copper J-pole
* Mag-mount VHF antenna (spec missing)
* Books:
@@ -38,7 +81,8 @@ See also [[services/meshtastic]] (think DIY text mesh) and
* ARRL Handbook 2011, Softcover: 49.95$USD
* ARRL Antenna Book: 44.95$USD
-Total rig cost so far: 1242.60$ (not counting the quad project below)
+Total rig cost originally: 1242.60$ (not counting the quad project
+below, the new HF Signals stuff, and the handhelds
I uploaded a few photos [in this album](https://photos.anarc.at/documentation/radio/#/0).
@@ -46,26 +90,6 @@ I uploaded a few photos [in this album](https://photos.anarc.at/documentation/ra
### Modern
-- [HF Signals](https://www.hfsignals.com/) have built tons of awesome open hardware kits and
- products, my main challenge for adoption are the BNC connectors (I
- have everything in PL259, maybe a [simple adapter like this](https://addison-electronique.com/en/uhf-female-to-bnc-male-adaptor.html) or
- [this BNC male to UHF SO239 female adapter](https://www.radioworld.ca/product/con-210/bnc-male-uhf-female-adapter) (2.99$), which i
- might already have, [signalstuff also has more expensive ones](https://signalstuff.com/products/so239-bncm/)
- - [sBITX](https://www.sbitx.net/): 25W, 80-10m, 10W on 20-10m, receive 500KHz-30MHz, idle
- 600mA, xmit 9A, SSB/CW/CW-Reverse/FT8/FLdigi, 7" touch screen
- display, built-in mic and speaker, on-screen keyboard, 4 memories
- per band, A/B VFOs, [N1MM](https://n1mmwp.hamdocs.com/)-style logger, real time clock, HDMI
- output, WAV recording, QRZ.com lookups, telnet/BBS (RBN/DX
- clusters), can be powered off RC/drone batteries with the XT60
- connector, BNC connector, web interface, [sbitx v3](https://www.hfsignals.com/index.php/sbitx-v3/) and others
- can apparently [run Debian!](https://www.cybertec-postgresql.com/en/the-debian-conference-2025-in-brest/), [open source](https://github.com/afarhan/sbitx), 10"x6"x2",
- 4lbs, 430$USD
- - [zBitx](https://www.hfsignals.com/index.php/zbitx/): 5W HF, 80-10m, CW/SSB/FreeDV/FT8/SSTV, 480×320 touch
- screen, 156mm x 80mm x 35mm, 250g, 410g with 2x18650 LiPO
- batteries, same software as the sBitx, 6V-9V PSU, 300mA standby,
- 1.5-3A transmit, 197$USD
- - [uBITX v6](https://www.hfsignals.com/index.php/ubitx-v6/): 10W HF, SSB/CW, SDR, arduino-based, GPL-3, 210$,
- seems like the older version of the other two
- [QMX](https://qrp-labs.com/qmx.html): low power QRP transceiver HF 20-80M, SDR / CW, packet,
*not* voice
- [(tr)uSDX](https://dl2man.de/): tiny, low power (80mA/500mA) QRP HF (20-80m,
@@ -79,8 +103,6 @@ could reuse with my FT-100d. It seems I am missing:
* a [Condor pack insert](https://condoroutdoor.com/va7-pack-insert.html)
* a [Bienno LiFePO4 battery](https://www.bioennopower.com/collections/lifepo4-batteries-for-communication-equipment-ham-radio) - smaller, lighter and safer than SLA
batteries
- * some sort of powerpole adapter for the FT-100d, maybe [this thing
- from Powererx](https://powerwerx.com/radio-power-cable-yaesu-kenwood-icom)?
That guy also made an [emcomm kit guide](https://www.tothewoods.net/Comms-vehicle-emergency-communications-EMCOMM-kit.php) (emergency communications)
that we might want to learn from. In particular, it ships:
@@ -108,10 +130,6 @@ that we might want to learn from. In particular, it ships:
which would be a little tighter but still fits (cf. 2025B p. 58),
also [available at Radioworld](https://www.radioworld.ca/product/palomar-bullet4006100/end-fed-ocf-antenna-system-100w-55-feet-40-6-meters-including-warc-bands) but inexplicably much more
expensive (230$CAD)
- - the [Chameleon OCF-40](https://www.dxengineering.com/parts/cha-ocf-40) seems like a good portable option, would
- be easier to setup than my G5RV, nice carrying pouch, designed to
- be lifted by the middle instead of the ends, something I should
- really do with my G5RV in the field anyways
- the [Alpha Delta Parallel Dipole DX-EE](https://www.dxengineering.com/parts/alf-dx-ee) is interesting because
"40ft overall", but a different design than the above EFHW and OCF,
lots of wires!
document experiments with the heltec kit
diff --git a/services/meshtastic.md b/services/meshtastic.md index f5a43b8c..27bd7fd4 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -458,6 +458,25 @@ reflash and try a "full erase", it worked in my case. This is a neat case: small and handy, but without display or battery. Probably the cheapest kit out there. +## Heltec v4 WiFi LoRa 32 Expansion Kit + +I ordered the [Heltec v4 WiFi LoRa 32 Expansion Kit, 50-60USD](https://heltec.org/project/wifi-lora-32-v4-expansion-housing/) +(52$USD) as a small basic kit, 5 of them, to bootstrap a mesh in a +friendly village. I expected something like "case, battery and OLED +display you connect to with your phone" but this is much more. There's +a 18650 battery, sure, but the case is really nice, and the antenna +looks long enough to be good. + +But the *display* is pretty awesome. This is a color TFT display with +a touch screen, which makes this a standalone device to rival things +like the T-Deck, as you can pull up a keyboard to type full messages. + +Just be careful: don't flash it on the current (`2.7.20.6658ec2-alpha`) +firmware, as the display will stop working. If you do, you need to +reflash with the [upstream firmware](https://resource.heltec.cn/download/WiFi_LoRa_32_V4/firmware/Touch) (currently +`firmware-heltec-v4-tft-2.7.20.1116217.factory.bin`) while erasing the +device to restore the display. + ## Other owned devices I also own those devices, but have not written a thorough review:
meshtastic: progress update on the t-echo, meshcore and solar
diff --git a/services/meshtastic.md b/services/meshtastic.md index 51cde087..f5a43b8c 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -343,6 +343,16 @@ This means the RAK has 1.8x the T-Echo battery life even though it has a much larger (and heavier) battery (3200mAh vs 850mAh), specifically 3.8 times larger. +Also, the USB-C charge controller is weird: if you plug it in a modern +charger, it just doesn't pick up the charge. You **must** plug it in a +**legacy** 5 volt USB-A charger for the charge to work, which is +pretty annoying because I'm more and more standardizing on USB-C here. + +Finally, I tested Meshcore on that thing and didn't see any +relays. Worse, the firmware seems to use more power than the +Meshtastic one, although I can't tell for sure. It has that neat +feature that the backlight turns on when you tap the top "button". + ## SenseCAP Solar Node P1 The [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html) looks *really* nice: outdoors @@ -359,6 +369,13 @@ time, because otherwise Meshtastic was spending a couple of seconds probing for a device, at least in the shipped firmware (2.6.9) which *does* work with the current app. +I was surprised to see the machine boot up with minimal of indirect +sunlight. Unfortunately, without batteries, it can't actually send +messages out right now. I've tried slotting in batteries but it turns +out it's better to actually *charge* those 18650 before you put them +in solar equipment: that way, the solar only needs to top off +batteries instead of bringing them up for nothing. + Next up on this one is outdoors endurance tests while, unfortunately, spring is coming (so no winter test yet, sorry).
2026 order: fix indentation on the heltec section
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 876bdd99..51cde087 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -484,9 +484,9 @@ ordered a bunch more devices to examine, test, and give away.
- [XIAO nRF52840 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-nRF52840-Wio-SX1262-Kit-for-Meshtastic-p-6400.html): even tinier, nRF52840,
Semtech SX1262, NFC, BT, -40°C ~ 65°C, 22 x 21 x 17.8mm
- Heltec: $327.90 ($289.40USD + 38.50 shipping)
- - [Heltec v4 pre-built kit, 50-60USD](https://heltec.org/project/wifi-lora-32-v4-expansion-housing/) (52$), 5 of them, to bootstrap a
- mesh in a friendly village
- - [HELTEC v4](https://heltec.org/project/wifi-lora-32-v4/) with a display (20$), a test board for the above
+ - [Heltec v4 pre-built kit, 50-60USD](https://heltec.org/project/wifi-lora-32-v4-expansion-housing/) (52$), 5 of them, to bootstrap a
+ mesh in a friendly village
+ - [HELTEC v4](https://heltec.org/project/wifi-lora-32-v4/) with a display (20$), a test board for the above
- **Total**: 640,14USD or about 900CAD + 27CAD customs for 11 devices
or 620 for 9, or 70$CAD each, if you discount the more expensive
stuff (the solar and pager)
draft notes on meshcore
diff --git a/services/meshcore.md b/services/meshcore.md new file mode 100644 index 00000000..fba0b0ea --- /dev/null +++ b/services/meshcore.md @@ -0,0 +1,33 @@ +Flash the T-Echo with the [web flasher](https://flasher.meshcore.co.uk/). There's a "put in DFU +mode" button that doesn't work: it turns into a checkmark, but then +the drive doesn't show up. I had to manually hit the reset button +twice. Then I hit the "flash" button but it flashed directly in the +browser, while I was expecting to download the image and move it to +the drive. + +Before flashing, I backed up the meshtastic configuration with: + + ~/Documents/backups/meshtastic$ meshtastic --export-config > acho.yaml + +Tried the [open app](https://github.com/zjs81/meshcore-open) which made me go through [Obtainium](https://obtainium.imranr.dev/) which +was my first successful round-trip through that particular app store. + +Bluetooth pairing didn't work at first, the PIN dialog didn't show +up.. worked after a couple of retries. + +Once started, I did not see anything. There's a nice "privacy mode" in +the settings, which are generally more intuitive than Meshtastic. + +Then i tried Liam Cottle's proprietary app that is [suggested in the +apps list](https://meshcore.co.uk/apps.html). Its "radio presets" is more visible than in the open +app, so I was able to set it + +The (proprietary) app has a couple of nice features: + + - real time noise floor graph + - awesome "line of sight" built-in app to show elevation profiles + between two points on the map (!) + - also awesome "antenna coverage" which does essentially the + equivalent of a "site planner" but right there in the app + +Everything else is relatively similar with the open app, at first glance.
battery life tests over
diff --git a/services/meshtastic.md b/services/meshtastic.md index 32a00587..876bdd99 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -332,10 +332,16 @@ brittle, however, but I suspect it might be flyable on a drone. There's a [InkHUD](https://meshtastic.org/docs/configuration/device-uis/inkhud/) interface that Meshtastic is developing. I'm not sure how it differs from the standard one. -Next step is to do a battery test with the Wispocket, which started -at 2026-03-16T20:53. As of 22:47, the T-Echo is already down to 79% -battery vs 92% for the Wispocket, but to be fair the Wispocket has a -much larger (and heavier) battery (3200mAh vs 850mAh). +I compared the battery of the T-Echo with the RAK WisMesh +Pocket. Between 2026-03-16T20:53 and 2026-03-18T10:38 (so 37h45m), the +devices went from full to 55% for the RAK and 18% for the T-Echo. This +gives an estimated remaining time for the RAK of 46h8m, so a total run +time of 3 days, 11h and 53min or 83h53m. At this rate, the T-Echo has 9h26m +left, with a total 47h11 m. + +This means the RAK has 1.8x the T-Echo battery life even though it has +a much larger (and heavier) battery (3200mAh vs 850mAh), specifically +3.8 times larger. ## SenseCAP Solar Node P1
updates on the t1000 brick
diff --git a/services/meshtastic.md b/services/meshtastic.md index 8f4eb6dc..32a00587 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -192,11 +192,19 @@ device, but know that those are the functions of the main button: | Press three times | Switch on/off the GPS | - | | Press and hold for 5s | Power off | Falling melody | +### Bricked + Update: at the moment, the T1000-E is essentially bricked. I think I failed to do a wipe correctly and it just loops on the boot loader -until it runs out of battery. I have found the device much more -difficult to debug than other platforms, and don't encourage getting -one for development at least, if at all. +until it runs out of battery. + +I have found the device much more difficult to debug than other +platforms, and don't encourage getting one for development at least, +if at all. + +And yes, I did managed to [get in DFU mode](https://wiki.seeedstudio.com/sensecap_t1000_e/#device-stuck-in-boot-loop) and reflash the +firmware, I even tried to [flash the bootloader](https://wiki.seeedstudio.com/sensecap_t1000_e/#device-bricked), it never +recovered. ### Fun story
fixed another kit
diff --git a/services/meshtastic.md b/services/meshtastic.md
index be14a6be..8f4eb6dc 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -363,7 +363,7 @@ Flashing through Chrome works as it seems to be able to kick the
device over to DFU mode from the serial port, which makes me think
this is something we should add to reflashtic.
-### XIAO ESP32S3 & Wio-SX1262 Kit
+## XIAO ESP32S3 & Wio-SX1262 Kit
The [XIAO ESP32S3 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-ESP32S3-for-Meshtastic-LoRa-with-3D-Printed-Enclosure-p-6314.html) is... something else. It
doesn't look like it comes flashed with Meshtastic. Here's what the
@@ -421,8 +421,11 @@ E (495) boot: No bootable app partitions in the partition table
...
```
-So it seems this is essentially not functional and I can't recommend
-it for Meshtastic.
+But that's because the partition table was incorrect. If that happens,
+reflash and try a "full erase", it worked in my case.
+
+This is a neat case: small and handy, but without display or
+battery. Probably the cheapest kit out there.
## Other owned devices
@@ -463,7 +466,7 @@ ordered a bunch more devices to examine, test, and give away.
be used with only two batteries?
- [XIAO ESP32S3 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-ESP32S3-for-Meshtastic-LoRa-with-3D-Printed-Enclosure-p-6314.html): tiny, cheap, - 40℃ ~ 100℃,
WiFi 2.4GHz, BLE 5.0 / Mesh, reset/boot button, 22x23x57mm, 37g,
- exposed GPIO ports, 20$, to see if it has a battery
+ exposed GPIO ports, no battery, 20$
- [XIAO nRF52840 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-nRF52840-Wio-SX1262-Kit-for-Meshtastic-p-6400.html): even tinier, nRF52840,
Semtech SX1262, NFC, BT, -40°C ~ 65°C, 22 x 21 x 17.8mm
- Heltec: $327.90 ($289.40USD + 38.50 shipping)
notice river's awesome work
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md index fd9e1e83..e9b94a1a 100644 --- a/software/desktop/wayland.md +++ b/software/desktop/wayland.md @@ -186,7 +186,11 @@ Other options include: * [MagoWC][]: tiling, scrolling, tagging, * [niri][]: scrolling, paper-vm like, Rust, not in Debian ([1065355][]) * [Qtile][]: tiling, extensible, Python, in Debian since trixie ([1015267][]) - * [river][]: Zig, stackable, tagging, not in Debian ([1006593][]) + * [river][]: Zig, stackable, tagging, not in Debian ([1006593][]), + now built as a framework where "window managers" can be built on + top, including about [*fifteen* new window managers already](https://codeberg.org/river/wiki/src/branch/main/pages/wm-list.md), + including: tiling, stacking, scrolling, dynamic, + xmonad-like-in-rust, emacs-based... * [smithay][], and many derivatives: Rust, not in Debian * [velox][]: inspired by xmonad and dwm, not in Debian * [vivarium][]: inspired by xmonad, not in Debian
move more links to the lora.reseaulibre.ca site
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 6ce7e8ab..be14a6be 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -575,45 +575,31 @@ well.
to Meshtastic!)
- HiveMQ public broker: `broker.hivemq.com`, see [their documentation](https://www.hivemq.com/mqtt/public-mqtt-broker/)
-# Relays
-
-- [Matrix](https://github.com/geoffwhittington/meshtastic-matrix-relay)
-- [IRC](https://github.com/AkitaEngineering/Meshtastic-IRC)
-
-# Maps
-
-- <https://meshmap.net/>
-- <https://meshtastic.liamcottle.net/> (AKA <https://meshmap.app/>)
-- <https://site.meshtastic.org/>
-- [Canada mesh map](https://map.mt.gt/)
-
# Links
- <https://www.meshtastic.org/>
-- [LWN review][] (2025)
-- [Another meshtastic guide](https://anarchosolarpunk.substack.com/p/encryptedcomms)
-
-[LWN review]: https://lwn.net/Articles/1009782/
+- <https://lora.reseaulibre.ca/> - where most of the doc that was here
+ migrated
# Fellow meshes
-- [Canadaverse mesh wiki](https://wiki.mt.gt/)
-- [meshtQuebec (Telegram group)](https://t.me/meshtQuebec)
+Those are meshes I am particularly paying attention to, because
+they're friends or they are technically amazing:
+
- [Puget Mesh](https://pugetmesh.org/): Seattle area, they have their own [MQTT server](https://pugetmesh.org/meshtastic/#mqtt-and-maps)
and [map](https://meshtastic.davekeogh.com/), lots of interesting [projects and software](https://pugetmesh.org/meshtastic/#member-projects),
- including a [weekly net](https://pugetmesh.org/meshtastic/#weekly-net), updates:
+ ([AREDN](https://www.arednmesh.org/)) including a [weekly net](https://pugetmesh.org/meshtastic/#weekly-net), updates:
- 2026-02-21: 4997 meshtastic nodes
- Q1 2026: "building out Meshcore", according to the [meshcore
map](https://meshcore.co.uk/map.html), there's around 1300 nodes in the area, [1472 according to
this other map](https://analyzer.letsmesh.net/map)
- May 2025: experimented with ShortFast
- 2025-03-26: 2274 meshtastic nodes
-- [mtnme.sh](https://mtnme.sh/): Tenessee
-- [nyme.sh](https://nyme.sh/): New York city
-- [upstatemesh.org](https://www.upstatemesh.org/): "Capital district" (Albany, NY)
-- [NHMesh](https://nhmesh.com/): New Hampshire, though [their map](https://nhmesh.live/) shows mostly meshcore in Boston
+- [Austin Mesh](https://www.austinmesh.org/): US Texas [weirdos](https://en.wikipedia.org/wiki/Keep_Austin_Weird), moving to Meshcore as well,
+ [flying drones](https://www.austinmesh.org/devices/#aerial) and [kites](https://www.austinmesh.org/learn/kite-nodes-for-mesh-networking/) and [DIY solar kits](https://www.austinmesh.org/devices/#solar), excellent
+ documentation
-See also the [official list of local groups](https://meshtastic.org/docs/community/local-groups/).
+See also the [Réseau Libre neighbours](https://lora.reseaulibre.ca/references/neighbours/).
# Alternative LoRa networks
a bunch of stuff shipped already, quick review
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 88ca3c34..6ce7e8ab 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -294,6 +294,136 @@ the range, because as it is now it's not great. Apparently, there's an
on-board [ipex connector](https://github.com/Xinyuan-LilyGO/T-Deck/issues/20), so I'd just need a IPEX/SMA connector
and a [LoRa antenna](https://meshtastic.org/docs/hardware/antennas/#community-favorites).
+The device was donated to a family member.
+
+## T-Echo
+
+The [T-Echo](https://lilygo.cc/products/t-echo-meshtastic?variant=52153213190325) is an interesting device: e-ink, tiny, NRF5280
+circuit, 53$USD
+
+Built-in firmware is too old for the Android app.
+
+Chrome-based flasher works well. Reflashtic works, but i had to
+specify the mountpoint because it is named `TECHOBOOT` and not
+`T-ECHO`:
+
+ ./reflashtic.py --interactive --mountpoint /media/anarcat/TECHOBOOT/
+
+The top-left button is the "reset" button, which I find a little
+counter-intuitive: I was expecting it to be a "confirm" button, and
+the "reset" button to be less accessible. But it works: double-click
+that button and it goes in DFU mode.
+
+I left the GPS enabled but configured the node to not send its
+position in the LongFast channel for privacy reasons.
+
+The device is pretty neat: it's *tiny* and light, much lighter than
+the Wispocket, while also being more compact. It feels a little more
+brittle, however, but I suspect it might be flyable on a drone.
+
+There's a [InkHUD](https://meshtastic.org/docs/configuration/device-uis/inkhud/) interface that Meshtastic is developing. I'm not
+sure how it differs from the standard one.
+
+Next step is to do a battery test with the Wispocket, which started
+at 2026-03-16T20:53. As of 22:47, the T-Echo is already down to 79%
+battery vs 92% for the Wispocket, but to be fair the Wispocket has a
+much larger (and heavier) battery (3200mAh vs 850mAh).
+
+## SenseCAP Solar Node P1
+
+The [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html) looks *really* nice: outdoors
+solar-powered relay with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3
+power buttons, 5 LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/).
+At 70$USD, it's cheaper than its RAK wireless equivalent.
+
+I first thought I could power it with only two 18650 batteries, but
+that doesn't seem like it.
+
+Flashing it with reflashtic was also straightforward, the mountpoint
+is `XIAO-BOOT`. I marked the GNSS as `NOT_PRESENT` to speed up boot
+time, because otherwise Meshtastic was spending a couple of seconds
+probing for a device, at least in the shipped firmware (2.6.9) which
+*does* work with the current app.
+
+Next up on this one is outdoors endurance tests while, unfortunately,
+spring is coming (so no winter test yet, sorry).
+
+## XIAO nRF52840 & Wio-SX1262 Kit
+
+The [XIAO nRF52840 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-nRF52840-Wio-SX1262-Kit-for-Meshtastic-p-6400.html) is the smallest LoRa +
+Bluetooth kit I have ever seen. At 8mm × 22mm × 23mm, it's a little
+larger (but way spikier) than my thumb.
+
+It ships with a Meshtastic 2.6.2.31c0e8f firmware, and I was able to
+flash it from the Chrome app. There *is* an extremely tiny "RST"
+button that allows it to flip to DFU, but I didn't find it until after
+trying out the web flasher.
+
+Flashing through Chrome works as it seems to be able to kick the
+device over to DFU mode from the serial port, which makes me think
+this is something we should add to reflashtic.
+
+### XIAO ESP32S3 & Wio-SX1262 Kit
+
+The [XIAO ESP32S3 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-ESP32S3-for-Meshtastic-LoRa-with-3D-Printed-Enclosure-p-6314.html) is... something else. It
+doesn't look like it comes flashed with Meshtastic. Here's what the
+serial port looks like when you click the button twice:
+
+```
+I (147784) NimBLE: GAP procedure initiated: advertise;
+I (147784) NimBLE: disc_mode=2
+I (147784) NimBLE: adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=0 adv_itvl_max=0
+I (147784) NimBLE:
+
+I (148894) NimBLE: GAP procedure initiated: stop advertising.
+```
+
+According to upstream, this is the "LoRa single-channel gateway
+firmware". It seems like the web flasher is able to flash a "community
+maintained" firmware, but that actually fails to boot with a loop on:
+
+```
+ESP-ROM:esp32s3-20210327
+Build:Mar 27 2021
+rst:0x3 (RTC_SW_SYS_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
+Saved PC:0x403cdd11
+SPIWP:0xee
+mode:DIO, clock div:1
+load:0x3fce3810,len:0x178c
+load:0x403c9700,len:0x4
+load:0x403c9704,len:0xcbc
+load:0x403cc700,len:0x2da0
+entry 0x403c9914
+I (26) boot: ESP-IDF v5.2.1-dirty 2nd stage bootloader
+I (26) boot: compile time Nov 28 2024 14:14:32
+I (26) boot: Multicore bootloader
+I (30) boot: chip revision: v0.2
+I (34) boot.esp32s3: Boot SPI Speed : 80MHz
+I (38) boot.esp32s3: SPI Mode : DIO
+I (43) boot.esp32s3: SPI Flash Size : 8MB
+I (48) boot: Enabling RNG early entropy source...
+I (53) boot: Partition Table:
+I (57) boot: ## Label Usage Type ST Offset Length
+I (64) boot: 0 nvs WiFi data 01 02 00009000 00006000
+I (71) boot: 1 phy_init RF data 01 01 0000f000 00001000
+I (79) boot: 2 factory factory app 00 00 00010000 00177000
+I (86) boot: End of partition table
+I (91) esp_image: segment 0: paddr=00010020 vaddr=3c170020 size=6dd68h (449896) map
+I (180) esp_image: segment 1: paddr=0007dd90 vaddr=3fc99e70 size=02288h ( 8840) load
+I (182) esp_image: segment 2: paddr=00080020 vaddr=42000020 size=168534h (1475892) map
+I (450) esp_image: segment 3: paddr=001e855c vaddr=3fc9c0f8 size=061a8h ( 25000) load
+I (456) esp_image: segment 4: paddr=001ee70c vaddr=40374000 size=15e68h ( 89704) load
+I (476) esp_image: segment 5: paddr=0020457c vaddr=50000000 size=00004h ( 4) load
+I (476) esp_image: segment 6: paddr=00204588 vaddr=600fe000 size=0002ch ( 44) load
+E (482) esp_image: Image length 2049504 doesn't fit in partition length 1536000
+E (490) boot: Factory app partition is not bootable
+E (495) boot: No bootable app partitions in the partition table
+...
+```
+
+So it seems this is essentially not functional and I can't recommend
+it for Meshtastic.
+
## Other owned devices
I also own those devices, but have not written a thorough review:
@@ -323,9 +453,10 @@ ordered a bunch more devices to examine, test, and give away.
- [T-Lora Pager](https://lilygo.cc/products/t-lora-pager-meshtastic?variant=52332073386165), an alternative to the T-Deck with a bigger
keyboard and likely better antennas, 94.39$USD
- [T-Echo](https://lilygo.cc/products/t-echo-meshtastic?variant=52153213190325), tiny handheld, to test the e-ink battery life
- alongside a NRF5280 circuit, 53$USD
+ alongside a NRF5280 circuit, 53$USD (shipped in a week, separately
+ from above)
- Seeed studio: $134.36 ($101.29$USD + 33.07USD shipping + CAD 27.21
- customs)
+ customs, order shipped in a week!)
- [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 70$USD, outdoors solar-powered relay
with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3 power buttons, 5
LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/), apprently can
fix price on the solar kit, the 90$ one is the pro on
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 9200aeeb..88ca3c34 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -326,7 +326,7 @@ ordered a bunch more devices to examine, test, and give away.
alongside a NRF5280 circuit, 53$USD
- Seeed studio: $134.36 ($101.29$USD + 33.07USD shipping + CAD 27.21
customs)
- - [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 90$USD, outdoors solar-powered relay
+ - [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 70$USD, outdoors solar-powered relay
with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3 power buttons, 5
LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/), apprently can
be used with only two batteries?
fix some reticulum links
diff --git a/services/meshtastic.md b/services/meshtastic.md index 05e32357..9200aeeb 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -488,7 +488,7 @@ See also the [official list of local groups](https://meshtastic.org/docs/communi - <https://mycelium-mesh.net/> (dead?) - [Reticulum](https://github.com/markqvist/Reticulum), talks over LoRa but also packet radio, WiFi, i2p, - etc, see [sidebande](https://github.com/markqvist/Sideband?tab=readme-ov-file), [meshchat](https://lib3.net/wallabag/view/56011), [nomadnet](https://github.com/markqvist/NomadNet). update, Feb + etc, see [sidebande](https://github.com/markqvist/Sideband), [meshchat](https://github.com/liamcottle/reticulum-meshchat), [nomadnet](https://github.com/markqvist/NomadNet). update, Feb 2026: Reticulum silently [switched to a in-house, non-free license in April 2025](https://github.com/markqvist/Reticulum/commit/e7daceec820850d397e6bf9aa585ef7222977891) and ultimately become "private source", where the GitHub repository is a "[public mirror](https://github.com/markqvist/Reticulum/blob/master/MIRROR.md)" but development "happens
better link for tdeck offline maps
diff --git a/services/meshtastic.md b/services/meshtastic.md index 73b6b886..05e32357 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -287,7 +287,7 @@ All in all, this is a pretty amazing machine and one of the rare systems that allows communication without any other external device (like a phone or computer), which is really great. The new UI is fantastic, and you even have a rudimentary map showing remote nodes -with [offline maps](https://www.reddit.com/r/meshtastic/comments/1j1chem/meshtastic_26_map_tiles_with_higher_zoom_levels/) +with [offline maps](https://www.jeffgeerling.com/blog/2025/adding-gps-and-grid-maps-my-meshtastic-t-deck/) One improvement I want to do is to add an external antenna to increase the range, because as it is now it's not great. Apparently, there's an
explain how to flash the tdeck
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 6a75c157..73b6b886 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -243,11 +243,27 @@ actually performed the following upgrades so far:
- stock to 2.6.0.f7afa9a ("pre-release")
- [2.6.0.f7afa9a to 2.6.2.31c0e8f](https://github.com/meshtastic/firmware/compare/v2.6.0.f7afa9a...v2.6.2.31c0e8f) (second to last "alpha",
2.6.3.640e731 is latest as of 2025-03-27)
+- 2.7.15 beta (current "stable") switches to a more bare bones "TUI"
+ interface that works across all firmware, but you can switch to the
+ nicer "MUI" interface by holding the cursor in what i remember to be
+ the settings screen. I don't remember how to switch *back*.
I have tried flashing at 115200 at first but 921600 seems to work fine
too over USB. USB-C to USB-C does *not* work though, I need a USB-C to
USB-A cable, bizarrely.
+To flash the device, one needs to:
+
+ 1. power it off
+ 2. hold down the middle, black pointer ball
+ 3. switch on the power (the flip switch on the right)
+ 4. connect the USB cable
+ 5. release the middle ball once the USB device comes up
+
+You will know it works when it shows up as a "Product: USB JTAG/serial
+debug unit" instead of "Espressif Systems LilyGO T-Deck (16 MB FLASH,
+8 MB PSRAM)".
+
I couldn't use the GPS at first, and [filed an issue](https://github.com/Xinyuan-LilyGO/T-Deck/issues/78) which was
promptly fixed: you need to enable it: from the UI, hold the "pin"
logo in the main screen, this will turn on GPS and reboot. Same with
move apps to lora.rl
diff --git a/services/meshtastic.md b/services/meshtastic.md index 8096db27..6a75c157 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -348,8 +348,15 @@ and printed or bought, see [this list](https://meshtastic.org/docs/category/encl # Software +This section was mostly emptied in favor of the [reseaulibre software +docs](https://lora.reseaulibre.ca/references/software/), see there for updates. + ## Flashing special firmware +Update: this is kept for historical purposes, but this has, sadly, +changed... You can now update use alpha releases without entering a +secret code. + There are special "technical preview" or "pre-release" firmware available at <https://flasher.meshtastic.org> but only after you enter the [Konami code](https://flasher.meshtastic.org/#) (yes, really), which is, of course: @@ -369,51 +376,6 @@ thing). Note that you can also [flash firmware](https://meshtastic.org/docs/getting-started/flashing-firmware/) without a web UI, but the flasher web UI is still useful to download the right firmware. -## Mobile apps - -There's also an [Android app](https://meshtastic.org/docs/category/android-app/), also [shipped on F-Droid](https://f-droid.org/packages/com.geeksville.mesh/). - -And yes, there's also an [iOS app](https://meshtastic.org/docs/software/apple/installation/). - -Note that those won't work without a LoRa transmitter, to which you -typically connect over Bluetooth. - -## Linux - -There's a [commandline client and Python library](https://github.com/meshtastic/python) that can be used -to talk to devices. There's even a rudimentary [GTK client](https://gitlab.com/kop316/gtk-meshtastic-client). Both -are packaged in Debian. - -- TUIs - - [contact](https://github.com/pdxlocations/contact) (messaging) - - [connect](https://github.com/pdxlocations/connect) (LoRa-less client) - -- [reflashtic](https://gitlab.com/anarcat/scripts/-/blob/main/reflashtic.py?ref_type=heads): batch flashing tool I wrote, derived from work a - friend did on a similar bash script - -- [puget mesh](https://pugetmesh.org/) has a [bunch of interesting projects](https://pugetmesh.org/meshtastic/#member-projects): - - - [meshing-around](https://github.com/SpudGunMan/meshing-around): "BBS" like functionality, ping, weather alerts, - shell commands, games, quizzes, messaging, testing - - - [aprstastic](https://github.com/afourney/aprstastic): APRS gateway - - - [meshfirmware](https://github.com/mikecarper/meshfirmware): "automatic" flasher, see also my reflashtic above - -- [TC2-BBS-mesh](https://github.com/TheCommsChannel/TC2-BBS-mesh): mail, channel directory, stats, fortune - -- [Frozen BBS](https://github.com/kstrauser/frozenbbs): another BBS, rust - -- [hops](https://github.com/morria/hops): bot from [nyme.sh](https://nyme.sh/) - -## Monitoring - -- <https://dash.mt.gt/> -- <https://github.com/cordelster/mesh-metrics/> -- <https://github.com/artiommocrenco/meshtastic-prometheus-exporter> -- <https://github.com/tcivie/meshtastic-metrics-exporter> -- [Meshmonitor](https://meshmonitor.org/): maps, analytics, traceroutes, triggers - # MQTT Meshtastic devices can typically connect to a [MQTT](https://en.wikipedia.org/wiki/MQTT) gateway or
more shipping dance
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 4b7aa67b..8096db27 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -308,7 +308,8 @@ ordered a bunch more devices to examine, test, and give away.
keyboard and likely better antennas, 94.39$USD
- [T-Echo](https://lilygo.cc/products/t-echo-meshtastic?variant=52153213190325), tiny handheld, to test the e-ink battery life
alongside a NRF5280 circuit, 53$USD
-- Seeed studio: $134.36 ($101.29$USD + 33.07USD shipping)
+- Seeed studio: $134.36 ($101.29$USD + 33.07USD shipping + CAD 27.21
+ customs)
- [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 90$USD, outdoors solar-powered relay
with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3 power buttons, 5
LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/), apprently can
@@ -322,15 +323,17 @@ ordered a bunch more devices to examine, test, and give away.
- [Heltec v4 pre-built kit, 50-60USD](https://heltec.org/project/wifi-lora-32-v4-expansion-housing/) (52$), 5 of them, to bootstrap a
mesh in a friendly village
- [HELTEC v4](https://heltec.org/project/wifi-lora-32-v4/) with a display (20$), a test board for the above
-- **Total**: 640,14USD or about 900CAD for 11 devices or 620 for 9, or
- 70$CAD each, if you discount the more expensive stuff (the solar and
- pager)
+- **Total**: 640,14USD or about 900CAD + 27CAD customs for 11 devices
+ or 620 for 9, or 70$CAD each, if you discount the more expensive
+ stuff (the solar and pager)
I did *not* get the [LoRa antenna](https://www.seeedstudio.com/RF-Explorer-LoRa-Fiberglass-Antenna-Kit-902-930MHz-5-8dBi-800mm-p-5275.html) (10$USD) because it was adding a
whopping 70$ in shipping fees.
I'll need to find 18650 batteries for the Heltec devices. I assume
-this is about 5$ each.
+this is about 5$ each. I could have gotten batteries with the build
+(2$USD) but it makes shipping more complicated and expensive, so I
+went the quicker way.
## Other devices
mention we need to source batteries for the heltec build
diff --git a/services/meshtastic.md b/services/meshtastic.md index 82923a72..4b7aa67b 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -329,6 +329,9 @@ ordered a bunch more devices to examine, test, and give away. I did *not* get the [LoRa antenna](https://www.seeedstudio.com/RF-Explorer-LoRa-Fiberglass-Antenna-Kit-902-930MHz-5-8dBi-800mm-p-5275.html) (10$USD) because it was adding a whopping 70$ in shipping fees. +I'll need to find 18650 batteries for the Heltec devices. I assume +this is about 5$ each. + ## Other devices The devices listed here have been moved to the [local mesh hardware
clarify hardware section, update the t1000-e status
diff --git a/services/meshtastic.md b/services/meshtastic.md index ba7b5e22..82923a72 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -138,14 +138,13 @@ mode relatively easily. # Hardware -Below are some Meshtastic-compatible devices I found interesting. +Below are some Meshtastic-compatible devices I have personally tested +and own. Those are mostly taken from [official device list](https://meshtastic.org/docs/hardware/devices/), which you should consult for recommendations, particularly on chipset tradeoffs (e.g. ESP32 uses more battery, but is cheaper). -I explain below some tests I've made with various devices. - ## SenseCAP Card Tracker T1000-E The [SenseCAP Card Tracker T1000-E](https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html) is a neat little device: @@ -193,6 +192,12 @@ device, but know that those are the functions of the main button: | Press three times | Switch on/off the GPS | - | | Press and hold for 5s | Power off | Falling melody | +Update: at the moment, the T1000-E is essentially bricked. I think I +failed to do a wipe correctly and it just loops on the boot loader +until it runs out of battery. I have found the device much more +difficult to debug than other platforms, and don't encourage getting +one for development at least, if at all. + ### Fun story I lost that device one day! I had put it on top of a doorframe on the
audio interfaces updates
diff --git a/hardware/audio.mdwn b/hardware/audio.mdwn
index f771b0e8..e0d8ac0d 100644
--- a/hardware/audio.mdwn
+++ b/hardware/audio.mdwn
@@ -255,6 +255,11 @@ jacks.
24-bit / 192 kHz, "direct monitoring", phantom, 111dB dynamic
range, 1kg, 130 x 174 x 53 mm, [3d mount](https://www.thingiverse.com/thing:6753373), [289$ L&M](https://www.long-mcquade.com/252196/Pro-Audio-Recording/Audio-Interfaces-DAW-Controllers/Universal-Audio/Volt-2-USB-Interface.htm)
+Update: I'm using a Scarlett 2i2. It generally works, with some quirks
+(i've had disconnect problems, but they seem to have resolved itself).
+
+Also interested the [Snowsky echo mini](https://www.fiiocanada.ca/products/snowsky-echo-mini) for phone-less audio listening.
+
# Setup
Our final setup would look something like this:
zfs: tpm cryptsetup
diff --git a/software/zfs.md b/software/zfs.md
index 3c8d042a..ed2e762e 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -72,7 +72,18 @@ with standard LUKS instead of ZFS encryption:
The above will not ask you for any passphrase, but will make the
disks unrecoverable in case the on-disk keys are lost.
- TODO: use a TPM2 device instead, see [`systemd-cryptenroll`](https://wiki.archlinux.org/title/Systemd-cryptenroll)
+ This is with a TPM setup:
+
+ for disk in sde1 sdd1 ; do
+ systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/$disk
+ systemd-cryptsetup attach crypt_dev_$disk /dev/$disk none tpm2-device=auto
+ echo crypt_dev_$disk UUID=$(lsblk -n -o UUID /dev/$disk | head -1) none tpm2-device=auto,discard | tee -a /etc/crypttab
+ done
+
+ This is barely tested, see [`systemd-cryptenroll`](https://wiki.archlinux.org/title/Systemd-cryptenroll) for where
+ this comes from. In particular, the `--tpm2-pcrs=7` might break on
+ firmware upgrades, see [Trusted_Platform_Module#PCR_policies](https://wiki.archlinux.org/title/Trusted_Platform_Module#PCR_policies)
+ and [Talk:Systemd-cryptenroll](https://wiki.archlinux.org/title/Talk:Systemd-cryptenroll) in the Arch wiki as well.
4. Create the pool:
meshtastic: restore some hardware notes, order a bunch more junk
diff --git a/services/meshtastic.md b/services/meshtastic.md index 4efc381a..ba7b5e22 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -273,6 +273,57 @@ the range, because as it is now it's not great. Apparently, there's an on-board [ipex connector](https://github.com/Xinyuan-LilyGO/T-Deck/issues/20), so I'd just need a IPEX/SMA connector and a [LoRa antenna](https://meshtastic.org/docs/hardware/antennas/#community-favorites). +## Other owned devices + +I also own those devices, but have not written a thorough review: + +- [WisMesh Pocket V2](https://store.rakwireless.com/products/wismesh-pocket): GNSS, 1.3" OLED, acceleration sensor, power + button, 3200mAh battery, USB-C powered, battery lasts for days, good + device, good range, a bit expensive (100$) +- [WishMesh Solar Repeater Mini](https://store.rakwireless.com/products/wishmesh-meshtastic-solar-repeater-mini): solar, battery, mast-mountable, + lived on my roof for a while but fell down a meter and got shaken + up: water inside and antenna unscrewed, survived, still in operation + in a window (100USD) +- [RAK19003 base kit](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit?variant=43884035113158), test kit for the above (28$) +- [WisMesh Ethernet Gateway](https://store.rakwireless.com/products/wismesh-ethernet-gateway): no battery, no solar ([might be + convertible](https://forum.rakwireless.com/t/ethernet-gateway-with-batteries-solar/14601), but ethernet and PoE, note that [HTTP-based + management not possible](https://github.com/meshtastic/firmware/issues/2908), so configuration still has to go + through Bluetooth, but monitoring is possible over MQTT, and of + course the gateway receives and relays messages over + LoRa/Meshtastic! waiting for time to deploy and hook up to + monitoring + +## 2026 order + +The above was ordered and tested in 2025. In 2026, I did it again and +ordered a bunch more devices to examine, test, and give away. + +- Lilygo: $177.88USD (147$USD + 30$USD shipping) + - [T-Lora Pager](https://lilygo.cc/products/t-lora-pager-meshtastic?variant=52332073386165), an alternative to the T-Deck with a bigger + keyboard and likely better antennas, 94.39$USD + - [T-Echo](https://lilygo.cc/products/t-echo-meshtastic?variant=52153213190325), tiny handheld, to test the e-ink battery life + alongside a NRF5280 circuit, 53$USD +- Seeed studio: $134.36 ($101.29$USD + 33.07USD shipping) + - [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 90$USD, outdoors solar-powered relay + with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3 power buttons, 5 + LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/), apprently can + be used with only two batteries? + - [XIAO ESP32S3 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-ESP32S3-for-Meshtastic-LoRa-with-3D-Printed-Enclosure-p-6314.html): tiny, cheap, - 40℃ ~ 100℃, + WiFi 2.4GHz, BLE 5.0 / Mesh, reset/boot button, 22x23x57mm, 37g, + exposed GPIO ports, 20$, to see if it has a battery + - [XIAO nRF52840 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-nRF52840-Wio-SX1262-Kit-for-Meshtastic-p-6400.html): even tinier, nRF52840, + Semtech SX1262, NFC, BT, -40°C ~ 65°C, 22 x 21 x 17.8mm +- Heltec: $327.90 ($289.40USD + 38.50 shipping) + - [Heltec v4 pre-built kit, 50-60USD](https://heltec.org/project/wifi-lora-32-v4-expansion-housing/) (52$), 5 of them, to bootstrap a + mesh in a friendly village + - [HELTEC v4](https://heltec.org/project/wifi-lora-32-v4/) with a display (20$), a test board for the above +- **Total**: 640,14USD or about 900CAD for 11 devices or 620 for 9, or + 70$CAD each, if you discount the more expensive stuff (the solar and + pager) + +I did *not* get the [LoRa antenna](https://www.seeedstudio.com/RF-Explorer-LoRa-Fiberglass-Antenna-Kit-902-930MHz-5-8dBi-800mm-p-5275.html) (10$USD) because it was adding a +whopping 70$ in shipping fees. + ## Other devices The devices listed here have been moved to the [local mesh hardware
move hardware guide to mtl mesh website
diff --git a/services/meshtastic.md b/services/meshtastic.md index 14177aee..4efc381a 100644 --- a/services/meshtastic.md +++ b/services/meshtastic.md @@ -1,6 +1,10 @@ After reading this [LWN review][] and being poked a few times by friends, I started playing around with [meshtastic](https://meshtastic.org/). +> Note: I have started a whole [website for the Montreal mesh +> project](https://lora.reseaulibre.ca/) and will progressively migrate at least some content +> from here to there. + [[!toc levels=3]] # Range @@ -271,64 +275,11 @@ and a [LoRa antenna](https://meshtastic.org/docs/hardware/antennas/#community-fa ## Other devices -Those are currently in testing, I'll write more about them as I find -the time: - -- [WisMesh Pocket V2](https://store.rakwireless.com/products/wismesh-pocket): GNSS, 1.3" OLED, acceleration sensor, power - button, 3200mAh battery, USB-C powered, 100$ -- [WisMesh Solar Repeater](https://store.rakwireless.com/products/wismesh-meshtastic-solar-repeater): solar, battery, mast-mountable, unclear - if it can be setup without solar and if it supports MQTT/ethernet, - 300$, SenseCAP Solar Node P1 (below) might be sturdier and cheaper -- [WishMesh Solar Repeater Mini](https://store.rakwireless.com/products/wishmesh-meshtastic-solar-repeater-mini): solar, battery, mast-mountable, - cheaper, 100$ -- [WisMesh Ethernet Gateway](https://store.rakwireless.com/products/wismesh-ethernet-gateway): no battery, no solar, but ethernet - and PoE, [asked about converting this to solar](https://forum.rakwireless.com/t/ethernet-gateway-with-batteries-solar/14601), seems like a - project but possible, [HTTP-based management not possible](https://github.com/meshtastic/firmware/issues/2908), so - configuration still has to go through Bluetooth, but monitoring is - possible over MQTT, and of course the gateway receives and relays - messages over LoRa/Meshtastic! -- the [RAK19003 base kit](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit?variant=43884035113158) is also nice. it's more expensive (28$, - *without* a case), but a case [can be printed](https://www.printables.com/model/286664-rak19003-micro-case-for-meshtastic) but it's tricky - because there are many (83!) design files in there, useful if you - already order from RAK wireless and need extra kits and know your - way around DIY builds. you need to also buy: - - 4 × M3x20mm socket head cap screws ([this kit](https://abra-electronics.com/hardware/metric-hardware-kits/nuts/sc-h-m-ss-kit-m2-m3-m4-stainless-steel-hex-socket-cap-head-screws-washers-nuts-assortment-kit-1080pcs.html) covers this and - the nuts) - - 4 × M3 nuts - - 2 × M2.5 screws (*not* part of the above kit, [length unclear](https://www.printables.com/model/286664-rak19003-micro-case-for-meshtastic/comments/2516182), - [here are M2.5x6mm](https://abra-electronics.com/hardware/metric-hardware-round-phillips-head-screws/1968p-machine-screw-m2.5-6mm-length-phillips-25-pack.html) or [this kit](https://abra-electronics.com/hardware/metric-hardware-kits/screws-bolts/repair-kit-for-eyeglasses-watches-screws-and-nuts-caps-m1m2m2.5-stainless.html)) - - 1 × battery ([Amazon](https://www.amazon.com/gp/product/B091FKGW8H), possibly the same as [Abra](https://abra-electronics.com/batteries-holders/batteries-polymer-lithium-ion/1578-ada-lithium-ion-polymer-battery-37v-500mah-1578-ada.html), - optional?) - - there's also an optional [battery cutoff switch](https://www.amazon.com/gp/product/B086L2GPGX), couldn't find - an [equivalent on Abra](https://abra-electronics.com/electromechanical/switches/pushbutton-switches/) - -Those I haven't tested yet as I haven't laid hand on them: - -- [SenseCAP Solar Node P1](https://www.seeedstudio.com/SenseCAP-Solar-Node-P1-for-Meshtastic-LoRa-p-6425.html): 90$USD, outdoors solar-powered relay - with 4x18650 batteries, nRF4840, GNSS, BT 5.0, 3 power buttons, 5 - LEDs, USB-C for debug, [recommended by nyme.sh](https://nyme.sh/faq/) -- [T-Echo](https://lilygo.cc/products/t-echo-lilygo): e-ink display, GPS, BT 5.0, no wifi, only three - buttons, NFC, 850mAh battery, temperature/pressure sensor, 55$ -- [T-Beam Supreme](https://lilygo.cc/products/t-beam-supreme?variant=43067944173749): 1.3" OLED display, 18650 battery socket, - magnetometer, 2.4GHz WiFi, BLE 5, GNSS, no case, 52$, the [T-Beam - SoftRF](https://lilygo.cc/products/t-beam-softrf?variant=43170158477493) is similar but without a display and cheaper, 30$ -- [T-Deck Pro](https://lilygo.cc/products/t-deck-pro): 3.1" e-ink touch screen, 4G module, WiFi 2.4GHz, - BLE 5, GPS, TF Card, mic, speaker, keypad, see also the [T5 e-paper - s3 pro](https://lilygo.cc/products/t5-e-paper-s3-pro) -- Seeedstudio [XIAO ESP32S3 & Wio-SX1262 Kit](https://www.seeedstudio.com/XIAO-ESP32S3-for-Meshtastic-LoRa-with-3D-Printed-Enclosure-p-6314.html): tiny, cheap, - 40℃ ~ - 100℃, WiFi 2.4GHz, BLE 5.0 / Mesh, reset/boot button, 22x23x57mm, - 37g, exposed GPIO ports, unclear if has a battery, 20$ -- the [HELTEC v3](https://heltec.org/project/wifi-lora-32-v3/) might be a more reliable bet as it's listed more - prominently in Meshtastic docs, also 20$ with the case (but no - battery, and battery doesn't fit in the case), they also have an - [eink dev board](https://heltec.org/project/vision-master-e290/) -- [Muzi](https://muzi.works/) has builds on top of the Heltec, e.g. [this H2T](https://muzi.works/products/h2t-complete-device-heltec-t114-with-gps-running-meshtastic) made - with a Heltec T114, [this R1 Neo](https://muzi.works/products/r1-neo-complete-meshtastic-device) is similar to the WisMesh - Pocket, but smaller, better sealed, but more expensive -- [Lamp hack](https://hackaday.io/project/194509-harbor-breeze-meshtastic-hack) -- [Antennas](https://meshtastic.org/docs/hardware/antennas/) vary as well -- Power is a whole other question, see [power consumption - measurements](https://meshtastic.org/docs/hardware/solar-powered/measure-power-consumption/) and [old reseaulibre power notes](https://wiki.reseaulibre.ca/documentation/power/) +The devices listed here have been moved to the [local mesh hardware +review guide](https://lora.reseaulibre.ca/guides/hardware/). + +Power is a whole other question, see [power consumption +measurements](https://meshtastic.org/docs/hardware/solar-powered/measure-power-consumption/) and [old reseaulibre power notes](https://wiki.reseaulibre.ca/documentation/power/) Devices without cases typically have 3D designs that can be downloaded and printed or bought, see [this list](https://meshtastic.org/docs/category/enclosures/).
fix typos, some spotted by claude-code
used this in a loop until it started spewing out useless
recommendations:
llm -m claude-opus-4.5 -s 'review for typos, gross errors, keep it really short, without praise' < 2026-03-05-wallabako-retirement.md
used this in a loop until it started spewing out useless
recommendations:
llm -m claude-opus-4.5 -s 'review for typos, gross errors, keep it really short, without praise' < 2026-03-05-wallabako-retirement.md
diff --git a/blog/2026-03-05-wallabako-retirement.md b/blog/2026-03-05-wallabako-retirement.md index 284329c9..4dde4fdc 100644 --- a/blog/2026-03-05-wallabako-retirement.md +++ b/blog/2026-03-05-wallabako-retirement.md @@ -20,11 +20,17 @@ better out there. I have switched away from [Wallabag](https://wallabag.org/) to [Readeck](https://readeck.org/)! And I'm also tired of maintaining "modern" software. Most of the -recent commits on Wallabag are [renovate-bot](https://gitlab.com/renovate-bot-anarcat). This feels futile +recent commits on Wallabako are from [renovate-bot](https://gitlab.com/renovate-bot-anarcat). This feels futile and pointless. I guess it *must* be done at some point, but it also -feels we went wrong somewhere there. Maybe [Filippo Valsord](https://filippo.io/) is +feels we went wrong somewhere there. Maybe [Filippo Valsorda](https://filippo.io/) is right and one should [turn dependabot off](https://words.filippo.io/dependabot/). +I did consider porting Wallabako to Readeck for a while, but there's a +[perfectly fine Koreader plugin](https://github.com/iceyear/readeck.koplugin) that I've been pretty happy to +use. I was worried it would be slow (because the Wallabag plugin *is* +slow), but it turns out that Readeck is fast enough that this doesn't +matter. + # Moving from Wallabag to Readeck Readeck is pretty fantastic: it's fast, it's lightweight, everything @@ -32,7 +38,7 @@ Just Works. All sorts of concerns I had with Wallabag are just gone: [questionable authentication](https://github.com/wallabag/wallabag/issues/2800), [questionable API](https://github.com/wallabag/wallabag/issues/2859), [weird bugs](https://github.com/wallabag/wallabag/issues/6532), mostly gone. I am still looking for [multiple tags filtering](https://github.com/wallabag/wallabag/issues/1197) but I have a much better feeling about Readeck than -Wallabag: it's written in Golang and under activ development. +Wallabag: it's written in Golang and under active development. In any case, I don't want to throw shade at the Wallabag folks either. They did [solve most of the issues I raised with them](https://github.com/wallabag/wallabag/issues?q=involves%3Aanarcat) and @@ -41,8 +47,8 @@ thousands of articles for a long time! It's just time to move on. The migration from Wallabag was impressively simple. The importer is well-tuned, fast, and just works. I wrote about the import in [this -issue](https://codeberg.org/readeck/readeck/issues/1119), but it took about 20 minutes to import essentially all the -articles, and another 5 hours to refresh all the contnts. +issue](https://codeberg.org/readeck/readeck/issues/1119), but it took about 20 minutes to import essentially all +articles, and another 5 hours to refresh all the contents. There are minor issues with Readeck which I have filed (after asking!): @@ -54,13 +60,13 @@ There are minor issues with Readeck which I have filed (after asking!): But overall I'm happy and impressed with the result. -I'm also a mix of happy and sad at letting go of my first (and only, +I'm also both happy and sad at letting go of my first (and only, so far) Golang project. I loved writing in Go: it's a clean language, fast to learn, and a beauty to write parallel code in (at the cost of a rather obscure runtime). It would have been *much* harder to write this in Python, but my -experience in Golang help me think about how to write more parallel +experience in Golang helped me think about how to write more parallel code in Python, which is kind of cool. The [GitLab project](https://gitlab.com/anarcat/wallabako/) will remain publicly accessible, but archived,
automatic federated post of /blog/2026-03-05-wallabako-retirement
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2026-03-05-wallabako-retirement.md b/blog/2026-03-05-wallabako-retirement.md index d266d2a3..284329c9 100644 --- a/blog/2026-03-05-wallabako-retirement.md +++ b/blog/2026-03-05-wallabako-retirement.md @@ -70,3 +70,7 @@ stewardship for this project, [contact me](https://anarc.at/contact/). Thanks Wallabag folks, it was a great ride! [[!tag wallabako debian-planet python-planet]] + + +<!-- posted to the federation on 2026-03-05T22:05:36.672330 --> +[[!mastodon "https://kolektiva.social/@Anarcat/116180014625645863"]] \ No newline at end of file
retiring wallabako
diff --git a/blog/2026-03-05-wallabako-retirement.md b/blog/2026-03-05-wallabako-retirement.md new file mode 100644 index 00000000..d266d2a3 --- /dev/null +++ b/blog/2026-03-05-wallabako-retirement.md @@ -0,0 +1,72 @@ +[[!meta title="Wallabako retirement and Readeck adoption"]] + +Today I have made the tough decision of retiring the [Wallabako](https://gitlab.com/anarcat/wallabako/) +project. I have rolled out a final (and trivial) 1.8.0 release which +fixes the uninstall procedure and rolls out a bunch of dependency +updates. + +[[!toc]] + +# Why? + +The main reason why I'm retiring Wallabako is that I have completely +stopped using it. It's not the first time: for a while, I wasn't +reading Wallabag articles on my Kobo anymore. But I had started +working on it again [about four years ago](https://anarc.at/blog/2022-05-06-wallabako-1.4.0-released/). Wallabako itself is +about to turn 10 years old. + +This time, I stopped using Wallabako because there's simply something +better out there. I have switched away from [Wallabag](https://wallabag.org/) to +[Readeck](https://readeck.org/)! + +And I'm also tired of maintaining "modern" software. Most of the +recent commits on Wallabag are [renovate-bot](https://gitlab.com/renovate-bot-anarcat). This feels futile +and pointless. I guess it *must* be done at some point, but it also +feels we went wrong somewhere there. Maybe [Filippo Valsord](https://filippo.io/) is +right and one should [turn dependabot off](https://words.filippo.io/dependabot/). + +# Moving from Wallabag to Readeck + +Readeck is pretty fantastic: it's fast, it's lightweight, everything +Just Works. All sorts of concerns I had with Wallabag are just gone: +[questionable authentication](https://github.com/wallabag/wallabag/issues/2800), [questionable API](https://github.com/wallabag/wallabag/issues/2859), [weird +bugs](https://github.com/wallabag/wallabag/issues/6532), mostly gone. I am still looking for [multiple tags +filtering](https://github.com/wallabag/wallabag/issues/1197) but I have a much better feeling about Readeck than +Wallabag: it's written in Golang and under activ development. + +In any case, I don't want to throw shade at the Wallabag folks +either. They did [solve most of the issues I raised with them](https://github.com/wallabag/wallabag/issues?q=involves%3Aanarcat) and +even accepted [my pull request](https://github.com/wallabag/wallabag/pull/7849). They have helped me collect +thousands of articles for a long time! It's just time to move on. + +The migration from Wallabag was impressively simple. The importer is +well-tuned, fast, and just works. I wrote about the import in [this +issue](https://codeberg.org/readeck/readeck/issues/1119), but it took about 20 minutes to import essentially all the +articles, and another 5 hours to refresh all the contnts. + +There are minor issues with Readeck which I have filed (after asking!): + +- [add justified view for articles](https://codeberg.org/gollyhatch/eckard/issues/19) (Android app) +- [more metadata in article display](https://codeberg.org/gollyhatch/eckard/issues/20) (Android app) +- [show the number of articles in the label browser](https://codeberg.org/readeck/readeck/issues/1126) +- [ignore duplicates](https://codeberg.org/readeck/readeck/issues/73#issuecomment-11025251) (Readeck will happily add duplicates, whereas + Wallabag at least *tries* to deduplicate articles -- but often fails) + +But overall I'm happy and impressed with the result. + +I'm also a mix of happy and sad at letting go of my first (and only, +so far) Golang project. I loved writing in Go: it's a clean language, +fast to learn, and a beauty to write parallel code in (at the cost of +a rather obscure runtime). + +It would have been *much* harder to write this in Python, but my +experience in Golang help me think about how to write more parallel +code in Python, which is kind of cool. + +The [GitLab project](https://gitlab.com/anarcat/wallabako/) will remain publicly accessible, but archived, +for the foreseeable future. If you're interested in taking over +stewardship for this project, [contact me](https://anarc.at/contact/). + +Thanks Wallabag folks, it was a great ride! + +[[!tag wallabako debian-planet python-planet]]
update on nuphy after moderate use
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn index eac26f77..802a9323 100644 --- a/hardware/keyboard.mdwn +++ b/hardware/keyboard.mdwn @@ -175,6 +175,20 @@ The whole point of this was to try to get a scroll lock key to work. I haven't figured it out. I did find their [layout manual](https://cdn.shopifycdn.net/s/files/1/0268/7297/1373/files/NuPhy_Air75_V2_Q_A.pdf?v=1692772705) and the [quick guide](https://cdn.shopify.com/s/files/1/0268/7297/1373/files/NuPhy_Air75_V2_Quick_Guide.pdf?v=1696498123) but it doesn't seem to support those extra keys. +Ultimately, I bound the <kbd>meta k</kbd> key to `input type:keyboard +xkb_switch_layout next` (I don't use `focus left`) which worked for +the immediate fix. + +Update, 2026-03-02: I am using this keyboard more as I set it up with +a travel rack (a [Roost v3 Plus](https://www.therooststand.com/collections/roost-laptop-stand/products/roost-v3-plus-laptop-stand-copy)) and use it while working away +from home, paired with the Nuphy (because it's small). The first day +was fine, and it worked great (although it made me realize how loud it +is!), but during the second day, the keyboard seemed to hang about +half a dozen times. It would just get stuck on a key and keep sending +the same key over and over, as if I was holding it down. I have to +turn the keyboard off and then back on to fix this. Furthermore, it +looks like newer Nuphy keyboards [do *not* ship with QMK](https://github.com/qmk/qmk_firmware/pull/22751#issuecomment-3455721189). + ### Other reviews rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136) and outlined:
another sss hack
diff --git a/blog/secrets-recovery.md b/blog/secrets-recovery.md index 1fdcbee1..489f34c6 100644 --- a/blog/secrets-recovery.md +++ b/blog/secrets-recovery.md @@ -61,6 +61,7 @@ to review: https://news.ycombinator.com/item?id=37534615 128-bit metal punch card backup https://volution.ro/pckb/ +https://git.joeyh.name/index.cgi/gpg.git/tree/README.sss <!-- posted to the federation on 2025-06-01T23:04:28.772798 --> [[!mastodon "https://kolektiva.social/@Anarcat/114611550199170060"]]
update: anarc.at now at mythic beasts
diff --git a/services/dns.mdwn b/services/dns.mdwn
index 37e64614..009ffe8f 100644
--- a/services/dns.mdwn
+++ b/services/dns.mdwn
@@ -99,15 +99,17 @@ présentement:
simplement quitter / ignorer
* mythic-beasts: découvert que c'est un revendeur OpenSRS, donc moins
- intéressant, coûteux, mais trusted... pour l'instant un seul
- domaine là, à migrer vers OpenSRS?
+ intéressant, coûteux, mais trusted...
* OpenSRS: reste ~70$USD de crédit, intéressant parce que très
puissant, mais pas sûr que je veux être revendeur, j'aurais
probablement jamais le débit (1000 *nouveaux* par an!) pour avoir
des rabais, mais somme toute assez bon: DNSSEC fonctionnel, API,
comptes revendeurs, etc, autre problème: pas de facturation
- automatique sur VISA, il faut débiter manuellement
+ automatique sur VISA, il faut débiter manuellement. vraiment trop
+ compliqué.
+
+ * porkbun: pas cher, mais la [gestion multi-user](https://kb.porkbun.com/article/242-subaccounts-vs-authorized-users) st pas super
À considérer, sinon:
@@ -121,14 +123,13 @@ présentement:
Situation actuelle:
* opensrs: test account created, hosted: `debian-policy.info`
- (2025-10-15), not sure I want to keep, could be just for `anarc.at`
- * mythic beasts: idem, to be closed, hosted: `alterne.ca`
- (2025-09-11), maybe keep for `anarc.at` and close OpenSRS because
- it's too complicated?
+ (2025-10-15), way too complicated, to close, probably alongside
+ debian-policy.info
+ * mythic beasts: kept for `anarc.at`
* porkbun: `orangeseeds.net` `orangeseeds.org` (transfer started
2023-12-19), `vichama.ca` (2024-05-17)
- * gandi: `reseaulibre.ca` (2024-04-28), `anarc.at` (2024-09-06),
- `insomniaque.org` (2029-04-28)
+ * gandi: `reseaulibre.ca` (2024-04-28), `insomniaque.org`
+ (2029-04-28)
## Secondaires
.at lock is not specific to gandi
diff --git a/services/dns.mdwn b/services/dns.mdwn index 088a2f85..37e64614 100644 --- a/services/dns.mdwn +++ b/services/dns.mdwn @@ -65,7 +65,7 @@ n'y sont pas listés. | dnssimple.com | 14.50USD | 14.00USD | 16.00USD | 16.00CAD | 18.00USD | 21.60USD | also hosting, support for [RFC 8078][] | | dynadot.com | 11.99USD | 10.99USD | 11.99USD | 9.99USD | 13.25USD | 17.99USD | hosted wikileaks, blocked in india for cybersquatting | | easydns.com | 19.00USD | 19.00USD | 15.00USD | 12.53USD | 24.00USD | 26.00USD | 12.52USD = 15.00CAD, also hosting | -| gandi.net | 23.99USD | 24.99USD | 24.99USD | 24.99CAD | 29.99USD | 39.99USD | pas de transfer lock .at, [vendus][], prix explosés | +| gandi.net | 23.99USD | 24.99USD | 24.99USD | 24.99CAD | 29.99USD | 39.99USD | [vendus][], prix explosés | | glauca.digital | 22.34USD | 27.58USD | 30.09USD | 28.80CAD | 22.05EUR | 28.74USD | excellent API, support for [RFC 7344][] and [RFC 8078][] | | infomaniak.com | 12.23EUR | 14.70USD | 13.36USD | 14.86USD | 14.70USD | 20.06USD | 2,40 € / year extra for domain privacy, requires identity check | | joker.com | 16.99USD | 16.88USD | 18.67USD | N/A | 15.99USD | 28.80USD | |
cross-reference the ss article
diff --git a/blog/2026-02-18-iproute2.md b/blog/2026-02-18-iproute2.md index 41dbc465..ee3aac53 100644 --- a/blog/2026-02-18-iproute2.md +++ b/blog/2026-02-18-iproute2.md @@ -17,6 +17,9 @@ package to `net-tools` the new `iproute2`, about 10 years late: | `route del ROUTE` | `ip route del ROUTE` | `ip r d ROUTE` | remove `ROUTE` (e.g. `default`) | | `netstat -anpe` | `ss --all --numeric --processes --extended` | `ss -anpe` | list listening processes, less pretty | +Note that I wrote a [[whole +article|blog/2023-03-10-listening-processes]] about the latter. + # Another trick Also note that I often alias `ip` to `ip -br -c` as it provides a @@ -98,4 +101,4 @@ hilarious. <!-- posted to the federation on 2026-02-18T11:30:55.082264 --> -[[!mastodon "https://kolektiva.social/@Anarcat/116092584255984978"]] \ No newline at end of file +[[!mastodon "https://kolektiva.social/@Anarcat/116092584255984978"]]
another test
diff --git a/blog/list-tags.sh b/blog/list-tags.sh index 01f3d83e..b07d4ca5 100644 --- a/blog/list-tags.sh +++ b/blog/list-tags.sh @@ -1,2 +1,3 @@ #! /bin/sh + grep -P -h '(?<!\\)\[\[!tag' *.mdwn | sed 's/\[\[!tag//g;s/\]\]//g;s/"//g;s/ /\n/g' | sort | grep . | uniq -c | sort -n
yolo commit to test hook
diff --git a/blog.mdwn b/blog.mdwn index b46f05bf..626ea5ac 100644 --- a/blog.mdwn +++ b/blog.mdwn @@ -434,4 +434,5 @@ quick=yes * 2005-2015: [Blog Drupal](https://web.archive.org/web/20150209161332/http://anarcat.koumbit.org/) * 2005: [Pseudo-blog wiki](http://wiki.koumbit.net/TheAnarcatBlog) * 2003-2004: [Blog de l'Insomniaque](http://insomniaque.org/blog/5.html) + </div>
Revert "automatic federated post of /blog"
This reverts commit 82161a80d6f3ac6ac7ca22e56991a242338a04bf.
This reverts commit 82161a80d6f3ac6ac7ca22e56991a242338a04bf.
diff --git a/blog.mdwn b/blog.mdwn index 820ac066..b46f05bf 100644 --- a/blog.mdwn +++ b/blog.mdwn @@ -435,7 +435,3 @@ quick=yes * 2005: [Pseudo-blog wiki](http://wiki.koumbit.net/TheAnarcatBlog) * 2003-2004: [Blog de l'Insomniaque](http://insomniaque.org/blog/5.html) </div> - - -<!-- posted to the federation on 2026-02-23T14:39:17.330821 --> -[[!mastodon "https://kolektiva.social/@Anarcat/116121636514747968"]] \ No newline at end of file
automatic federated post of /blog
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
Command: ['/usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py', '--post-receive', '--base-url', 'https://anarc.at/']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog.mdwn b/blog.mdwn index b46f05bf..820ac066 100644 --- a/blog.mdwn +++ b/blog.mdwn @@ -435,3 +435,7 @@ quick=yes * 2005: [Pseudo-blog wiki](http://wiki.koumbit.net/TheAnarcatBlog) * 2003-2004: [Blog de l'Insomniaque](http://insomniaque.org/blog/5.html) </div> + + +<!-- posted to the federation on 2026-02-23T14:39:17.330821 --> +[[!mastodon "https://kolektiva.social/@Anarcat/116121636514747968"]] \ No newline at end of file
Archival link:
The above link creates a machine-readable RSS feed that can be used to easily archive new changes to the site. It is used by internal scripts to do sanity checks on new entries in the wiki.
Created .
Edited .