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
cert renewals
diff --git a/services/mail.mdwn b/services/mail.mdwn
index 2023e662..dd4ce5c7 100644
--- a/services/mail.mdwn
+++ b/services/mail.mdwn
@@ -1236,6 +1236,36 @@ be able to send mail. Test with:
 
     mail -s test anarcat@example.com < /dev/null
 
+### Renewing a key
+
+Renewing the cert:
+
+    cd /etc/ssl/ca
+    openssl ca --config openssl.cnf -days 365 -in req/tubman.anarc.at.csr -out certs/tubman.anarc.at.crt
+
+Updating fingerprints (copy-paste from above):
+
+    rm /etc/postfix/client-certs-fingerprints
+    for cert in certs/* ; do 
+        printf "%s %s\n" "$(
+            openssl x509 -in $cert -noout -pubkey |
+                openssl pkey -pubin -outform DER |
+                openssl dgst -sha256 -c |
+                sed 's/.*= //'
+            )" $cert >> /etc/postfix/client-certs-fingerprints
+    done
+    postmap /etc/postfix/client-certs-fingerprints
+
+Telling dovecot:
+
+    openssl ca -config openssl.cnf  -gencrl  > crl.pem
+    cat cacert.pem crl.pem > cacrl.pem
+    service dovecot restart
+
+Then copy the `.crt` file back to the client.
+
+TODO: does reload work too?
+
 ### Easy-RSA CA notes
 
 I tested building a CA with easy-rsa but ended up not using it because
@@ -1332,7 +1362,7 @@ meaningful regression.
 
 ### Remaining work
 
- * TODO: renewals, switch to easyrsa fully?
+ * TODO: switch to easyrsa fully?
  * TODO: generate and distribute certs with Puppet
 
 ## Todo

ratings update
diff --git a/hardware/camera.mdwn b/hardware/camera.mdwn
index f51ffcba..fb113909 100644
--- a/hardware/camera.mdwn
+++ b/hardware/camera.mdwn
@@ -147,6 +147,7 @@ and here is my progress:
 - 2025-03-17: 17172 (-600)
 - 2025-04-??: 16919 (-200)
 - 2025-04-08: 16797 (-120)
+- 2025-04-11: 16572 (-125 rated, +68 added and rated)
 
 Inventaire
 ==========

fix why not matrix links
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index 2caa12af..04e0cf9f 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -85,9 +85,9 @@ that servers try to continuously merged. And as such it's actually
 *really hard* to delete past history. Even with expiration enabled,
 that's advisory for other servers *and* some room parameters (like
 join/part/bans) *must* be kept forever. See [this lengthy discussion
-for details][why-not-matrix].
+for details][Why Not Matrix].
 
-[why-not-matrix]: https://telegra.ph/why-not-matrix-08-07
+[Why Not Matrix]: https://telegra.ph/why-not-matrix-08-07
 
 ## GDPR in the federation
 
@@ -366,7 +366,7 @@ ago (see [the IRC history](https://en.wikipedia.org/wiki/Internet_Relay_Chat#His
 
 Update: it's much worse than I imagined. Abuse is *really* easy on
 Matrix, with simple attacks like flood-joining permanently crippling
-rooms. According to [Why Not Matrix][why-not-matrix] this is a problem that's been
+rooms. According to [Why Not Matrix][] this is a problem that's been
 known for years, a fundamental design flaw that's barely acknowledged,
 but usually swept under the rug by Matrix people.
 
@@ -1158,7 +1158,7 @@ course.
 
 This one is more damning and makes me reconsider using Matrix at
 all. I encourage anyone who is planning to do anything serious with
-Matrix to take a long, deep look at [why not matrix][].
+Matrix to take a long, deep look at [Why Not Matrix][].
 
 It certainly gave me food for thought. As a basic example: I have sent
 myself an attachment over FluffyChat from my phone, in a (failed)
@@ -1220,4 +1220,4 @@ internet]]
 
 
 <!-- posted to the federation on 2025-03-25T10:30:55.309320 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/114223549979121873"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/114223549979121873"]]

more backlog
diff --git a/hardware/camera.mdwn b/hardware/camera.mdwn
index 5dca8f21..f51ffcba 100644
--- a/hardware/camera.mdwn
+++ b/hardware/camera.mdwn
@@ -135,6 +135,19 @@ A list of "number of photos per camera" can be built with:
 But Darktable also shows this now, by selection "camera" in the
 "Collections" module.
 
+## Rating backlog
+
+In early March 2025, I realized I had built a *huge* backlog of
+unrated images. I have [written a script](https://discuss.pixls.us/t/batch-copying-ratings-in-group/48874) to fix ratings on image
+groups, but that only brought me from 17875 to 17172, only about 700
+images, or 4% of the work. I'm hoping to process 500 images per week,
+and here is my progress:
+
+- 2025-03-16: 17875
+- 2025-03-17: 17172 (-600)
+- 2025-04-??: 16919 (-200)
+- 2025-04-08: 16797 (-120)
+
 Inventaire
 ==========
 

more radio gear
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index 1b64c9df..01e6d866 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -80,6 +80,11 @@ that we might want to learn from. In particular, it ships:
  * the radio's manual
  * a bandplan
 
+More stuff:
+
+ - [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)
+
 ### Old stuff
 
 * <del>VHF/UHF SWR meter</del> Got a workman, above

setup a proper "microformats2 representative h-card" for fed.brid.gy
This should make my posts appear slightly cleaner in federated posts,
assuming they will pull from the root.
diff --git a/index.mdwn b/index.mdwn
index 2d4c7d63..e81bd4bd 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -3,7 +3,10 @@
 <!-- do not count headings on frontpage -->
 <span /><div class="nocount">
 
-<img src="folipon.jpg" align="right" />
+<span class="h-card">
+  <a class="u-url" rel="me" href="https://kolektiva.social/@Anarcat"></a>
+  <img class "u-photos" src="folipon.jpg" align="right" />
+</span>
 
 Je suis un analyste informatique et social. J'examine, débugge et arrange les systèmes, particulièrement informatiques, parce que la société c'est plus compliqué. 
 
@@ -54,5 +57,4 @@ Tous les wikis ont un [[bac à sable|SandBox]], donc lui aussi.
 
 <small>*Ceci est mon wiki. Il y en a beaucoup comme ça mais celui là c'est le [mien](https://en.wikipedia.org/wiki/Full_Metal_Jacket).*</small>
 
-<a rel="me" href="https://kolektiva.social/@Anarcat"></a>
 </div>

add waybg, more details about background setters
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 91324c7e..bde50dd2 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1062,12 +1062,15 @@ how many things you were using are tightly bound to X.
    figure out something that does, like feh, a random shuffle.
    [swaybg][] just loads a *single* image, duh. [oguri][] might be a
    solution, but unmaintained, [used here][], not in
-   Debian. [waypaper](https://github.com/anufrievroman/waypaper), [wpaperd](https://github.com/danyspin97/wpaperd), [wallutils][] and [swww](https://github.com/LGFae/swww) ([ITP](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1084753)) are other option, also not in
+   Debian. [waypaper](https://github.com/anufrievroman/waypaper), [dnkl/wbg](https://codeberg.org/dnkl/wbg) (no support for per-output
+   background), [wpaperd](https://github.com/danyspin97/wpaperd) ([RFP](https://bugs.debian.org/1091891)), [wallutils][] ([RFP](https://bugs.debian.org/1091890)) and
+   [swww](https://github.com/LGFae/swww) ([ITP](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1084753)) are other option, also not in
    Debian. [azote][] is now in Debian and seems like a good
-   alternative. [hyprpaper](https://wiki.hyprland.org/Hypr-Ecosystem/hyprpaper/) is in Debian and works in Sway, but has
-   a clunky configuration file, with only one image at a time. In
+   alternative, but the UX is confusing and just delegates to
+   swaybg. [hyprpaper](https://wiki.hyprland.org/Hypr-Ecosystem/hyprpaper/) is in Debian and works in Sway, but has a
+   clunky configuration file, with only one image at a time. In
    theory, it can load other images through IPC, but that only works
-   through hypr's IPC mechanism. 
+   through hypr's IPC mechanism.
    
    For now I just don't have a wallpaper, the background is a solid
    gray, which is better than Xorg's default (which is whatever crap

update from sliger
diff --git a/hardware/server/marcos/v3.md b/hardware/server/marcos/v3.md
index 1048bf85..e5eddec5 100644
--- a/hardware/server/marcos/v3.md
+++ b/hardware/server/marcos/v3.md
@@ -106,6 +106,12 @@ which depths are apparently "600 mm (23.62 in), 800 mm (31.50 in) or
 1,010 mm (39.76 in)", and I'd target the shorter depths. The [rack I'm
 targeting](https://www.startech.com/en-us/server-management/4postrack15u) shrinks down to 22" (and up to 44"), for example.
 
+Update: seems like it's either the CX4712 or the CX3702, but which
+doesn't have direct fan. They say it has decent airflow, but it could
+be an issue for my warm drives. They're working on a 12-drive
+top-loaded 4U case that would be 17" deep that might pre-order in May
+with shipping in June, so maybe I'll wait for that.
+
 ## Local rackmount suppliers
 
 Those are interesting [local suppliers of Gigabyte servers](https://www.gigabyte.com/ca/WheretoBuy/Enterprise?ck=130):

new supernote and framework things
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index 50813067..8e3bda71 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -336,15 +336,16 @@ that's designed to be a "phone monitor" but that also runs Android
 
 ## Supernote
 
-https://supernote.com/
+<https://supernote.com/>
 
 interesting devices, "paperlike", no backlight, handwriting
 recognition, mark/review system, PDF annotations, wacom pen,
 dropbox/drive backups, screencast support, USB transfer, no backlight.
 (.xps) formats".
 
-10.3" device replacement "in development", for now 7.3" device
-available ([Supernote Nomad](https://supernote.com/products/supernote-nomad)) for 300$USD:
+### Nomad (2023)
+
+The [Supernote Nomad](https://supernote.com/products/supernote-nomad) was releaed in 2023 for 300$USD:
 
 - 191.85 mm x 139.2 mm x 6.8 mm
 - 266g
@@ -354,7 +355,8 @@ available ([Supernote Nomad](https://supernote.com/products/supernote-nomad)) fo
 - MicroSD card support
 - CPU: RK3566 Quad-Core 1.8 GHz
 - battery: 2700 mAh
-- Android 11
+- Android 11, likely without proper source code release, relatively
+  closed ecosystem
 - USB-C 2.0, support Charger/Earphone/OTG
 - Wi-Fi 2.4 GHz + 5 GHz, 802.11a/b/g/n/ac
 - Bluetooth 5.0
@@ -364,6 +366,36 @@ available ([Supernote Nomad](https://supernote.com/products/supernote-nomad)) fo
 
 Seems repairable, see [this teardown video from the company](https://www.youtube.com/watch?v=d2X0c3MprAM).
 
+### Manta (2024)
+
+The [Supernote Manta](https://supernote.com/pages/supernote-manta) was released in 2024 for 460$USD:
+
+- 251.3 mm x 182.6mm x 6.0mm, 375g
+- 10.7" display, 300PPI, 1920 × 2560, palm rejection
+- 32GB on-board storage
+- MicroSD card support
+- 3600mAh replaceable battery
+- RK3566 Quad-Core 1.8GHz CPU, replaceable motherboard, 4GB RAM
+- top USB-C charging port (works through folio)
+- WiFi 2.4 & 5 GHz
+- Bluetooth 5
+- no frontlight
+- replaceable pen holder
+- dual touch sidebars
+- Android 11, probably without source code release, apparently [can be
+  sideloaded](https://www.reddit.com/r/Supernote/comments/1bfz4o0/how_to_sideloading_on_a6_x2_guide/) with F-Droid and other APKs, but not trivial
+- format supports: Note (.note), PDF, EPUB, Word, Text (.txt), PNG,
+  JPG, BMP, WebP, CBZ, FB2 and XPS, and integration with Kindle app
+  which supports MOBI and other formats
+- offline handwriting recognition
+- ships a screwdriver
+- [screen mirroring](https://support.supernote.com/en_US/Tools-Features/1791924-screen-mirroring)
+- [desktop app](https://support.supernote.com/en_US/Tools-Features/supernote-partner-app-for-desktop), only for Mac and Windows for now, Linux "in
+  development", no source code visible
+- [mobile app](https://support.supernote.com/en_US/Tools-Features/1753209-supernote-partner-app-for-mobile) only for iOS and Google Play, no source code visible
+- [file transfer methods](https://support.supernote.com/organizing/transfer-files) include "Cloud" (their own, dropbox,
+  google drive), email, USB, web over wifi and "direct transfer"
+
 # Tablets
 
 Tablets are basically like ebook-readers, except they use a normal,
@@ -372,6 +404,13 @@ direct sunlight. It's also not good for your eyes and your sleep, but
 those are generally cheaper and more powerful than ebook readers
 because the technology is more common.
 
+## 2025 update
+
+Framework is pushing out a "2 in 1", a 12" laptop that flips backwards
+to make a tablet with a pen. They call it the [Laptop 12](https://frame.work/ca/en/laptop12), very
+little known about it for now, pre-orders should open in April 2025 in
+theory, so I'm waiting on that.
+
 ## 2024 update
 
 Right now, I am considering a new tablet since I bricked the Samsung

marcos: more hardware replacement research
diff --git a/hardware/server/marcos/v3.md b/hardware/server/marcos/v3.md
index 2af3614a..1048bf85 100644
--- a/hardware/server/marcos/v3.md
+++ b/hardware/server/marcos/v3.md
@@ -1,10 +1,63 @@
 
 # Requirements
 
-- at least 16TB of storage after RAID-1 (so 32TB)
-- 32GiB RAM (current marcos swaps at 16GiB)
-- 8 CPU cores is fine, v2 has 10 cores and is mostly idle
-- low noise (not fully silent, noctua fans are fan)
+[Posted the following on r/homelab](https://www.reddit.com/r/homelab/comments/1jnug3v/advice_for_a_modest_nashome_server/):
+
+> Hi,
+> 
+> First time poster, long time home lab builder.
+> 
+> I'm looking at building a new rackmount server for the home, specs are:
+> 
+> - at least 16TB of storage after RAID-1 (so 32TB), keeping the current 4x8TiB, ideally with room for expansion, at least one 8TiB spare
+> - 32GiB RAM (current has 1.3GiB in swap with 16GiB onboard)
+> - 8 CPU cores is fine, v2 has 10 cores and is mostly idle
+> - low noise (not fully silent, noctua fans are fine)
+> - low power (not sure how much power is in use now)
+> - some remote management, some standard like IPMI or serial is best, would tolerate HDMI with a NanoKVM
+> - rackmount (4U, max 21" depth, ideally 3U and less than 20" depth), must fit a [a 4-post rack like this](https://www.startech.com/en-us/server-management/4postrack15u) 
+> - 2000-5000$CAD budget (1500-3500$USD)
+> 
+> I currently have a [CSE-733TQ-500B][] Supermicro case with a 
+> [ASUS PRIME X470-PRO][] board, 16GB of Kingston memory and a AMD Ryzen 5 2600x. I'm not happy with that build:
+> 
+> - the box is huge (20" x 17" x 7", tower)
+> - yet the 4 SATA drives are all crammed together in this tiny enclosure
+> - the 2600x doesn't have a GPU, so i had to use an extra GPU card
+> - the OOB management is non-existent: I tried setting up a serial adapter to get the BIOS over serial but got garbage
+> 
+> The enclosure issue is a huge problem. Even with only the first two 8TB Ironwolf drives in there, they reach 46°C and 51°C, with the 4 drives, it burns up to 55°C and 61°C. There's essentially no cooling there, fully enclosed.
+> 
+> Because of [this post](https://mtlynch.io/budget-nas/#25-year-update), I'm considering a Sliger case, possibly a
+> [CX3701](https://www.sliger.com/products/rackmount/3u/cx3701/) (3U, 10 x 3.5" drive slots), but I worry about cooling:
+> how can those 10 slots possibly cool down without a fan? So I'm also
+> looking at the [CX4712](https://www.sliger.com/products/rackmount/storage/cx4712/) (4U, 10 x 3.5" + 2 x 5.25"), which has room
+> for cooling fans for the drives. I like the upgradability through the
+> 5.25" slots as I'm bound to pivot to SSDs eventually, possibly in the
+> lifetime of this build, but perhaps that's overkill.
+> 
+> The Sliger cases also seem expensive to me, and have free shipping
+> only to the US (I'm in Canada).
+> 
+> Ideally, I'd keep the current board to save on costs, but I feel it's
+> close to EOL anyways (it's 5 year old), so I wouldn't mind building
+> from scratch. Wondering if I need mITX or mATX or a full ATX
+> build. Worried about finding a board with enough SATA connectors or
+> messing with incompatible expansion cards.
+> 
+> Considering staying with AMD, but open to other opinions. I like the
+> low-power, so also considering Ampere.
+> 
+> RAID is software (ZFS), OS is Debian (of which I am a developer).
+> 
+> I'm sparing you the absolutely horrid view of the two-post rack right
+> now: building this server would be a good step in the right direction
+> in cleaning all this up.
+> 
+> Thoughts? Thanks!
+> 
+> [CSE-733TQ-500B]: https://www.supermicro.com/en/products/archive/chassis/SC733TQ-500B
+> [ASUS PRIME X470-PRO]: https://www.asus.com/us/Motherboards/PRIME-X470-PRO/
 
 # Research
 
@@ -19,12 +72,15 @@ rackmount servers is an option?
 
 ### Sliger
 
-[Michael Lynch](https://mtlynch.io/) built a [budget NAS in 2022](https://mtlynch.io/budget-nas/) and updated it in
-2024 to this [Sliger 2U trayless case](https://www.sliger.com/products/rackmount/3u/cx3701/) with room for 10x3.5"
-drives, 4x2.5" SSD mounts, two 120mm exhaust fans, for 340$, about the
-price of my original Supermicro case. It's a Mini-ITX build though,
-and I have a full-sized ATX board, which he regretted because of
-limited expansion:
+[Michael Lynch](https://mtlynch.io/) built a [budget NAS in 2022](https://mtlynch.io/budget-nas/) with the [Fractal
+Node 304](https://www.fractal-design.com/products/cases/node/node-304/Black/), a clever 6 x 3.5" drive mITX case (yes, it must be
+*crammed* in there). (Sold by [Canada Computers at 155$](https://www.canadacomputers.com/en/small-form-factor-mini-itx-cases/57560/fractal-design-node-304-black-usb3-0-mini-itx-dtx-case-fd-ca-node-304-bl.html).)
+
+He updated it in 2024 to this [Sliger 3U trayless case](https://www.sliger.com/products/rackmount/3u/cx3701/) with room
+for 10x3.5" drives, 4x2.5" SSD mounts, two 120mm exhaust fans, for
+340$, about the price of my original Supermicro case. It's a Mini-ITX
+build though, and I have a full-sized ATX board, which he regretted
+because of limited expansion:
 
 > If I were to do this over again, I would have bought a rack-mounted
 > chassis that has slots for six to eight 3.5" hard drives and a
@@ -34,4 +90,37 @@ limited expansion:
 I asked sliger for a spec. I think those cases look amazing, and
 probably the next build.
 
+From what I gathered from reviews, they are seen as too expensive for
+the build quality, but I kind of like the design. It's really bare
+though: no power supply, backplace, essentially nothing. An
+alternative I've found on reddit is [Chenbro](https://www.chenbro.com/en-US).
+
+They seem to have trouble finding me a case that's 23" while still
+providing cooling for the drives. They typically send me towards
+Icydock type solutions, in which case I could just slot a [FatCage](https://global.icydock.com/product_65.html)
+into my existing 5.25" slot ([189$USD at B&H](https://www.bhphotovideo.com/c/product/1214435-REG/icy_dock_mb155sp_b_fatcage_5_bay_ez_tray_backplane.html/specs)).
+
+They *do*have the [CX4712](https://www.sliger.com/products/rackmount/storage/cx4712/) but it's 25" deep, 2" deeper than the
+current server. I'd like to keep this within the [19" rack size](https://en.wikipedia.org/wiki/19-inch_rack)
+which depths are apparently "600 mm (23.62 in), 800 mm (31.50 in) or
+1,010 mm (39.76 in)", and I'd target the shorter depths. The [rack I'm
+targeting](https://www.startech.com/en-us/server-management/4postrack15u) shrinks down to 22" (and up to 44"), for example.
+
+## Local rackmount suppliers
+
+Those are interesting [local suppliers of Gigabyte servers](https://www.gigabyte.com/ca/WheretoBuy/Enterprise?ck=130):
+
+- [Asi](https://www.asipartner.com/canada/)
+- [Canada Computers](https://www.canadacomputers.com/en/837/servers-server-components)
+- [Cloud Ninjas](https://cloudninjas.com/)
+- [Elco systems](https://elcosystems.com/) (no online pricing)
+- [International Computing Concepts](https://www.icc-usa.com/)
+
+Other providers:
+
+- <http://www.atic.ca/> built marcos v2, still no HTTPS?!
+
+## Other reviews
 
+- [2024: Best CPU + Motherboard combo for your NAS build](https://nascompares.com/2024/02/09/the-best-m-itx-cpumotherboard-combo-for-your-nas-build-2024-edition/)
+- [DIY NAS: 2025 edition](https://blog.briancmoses.com/2024/11/diy-nas-2025-edition.html)

clarify which keyboard i got
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 6ba77a6d..739dbb53 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -171,7 +171,8 @@ Note that there's also the "Max" series which, according to rtings:
 > raw performance. The K Max boards also have more layers of internal
 > acoustic material.
 
-Update: I bought this keyboard! It's a little weird: the top-right
+Update: I bought this keyboard, specifically the [Keychron K1 Max with
+RGB backlight (hot-swappable)](https://www.keychron.com/products/keychron-k1-max-qmk-via-wireless-custom-mechanical-keyboard?variant=40779459002457)! It's a little weird: the top-right
 three keys are "screenshot", "siri" and "change the LED colors" which
 seems *really* superfluous. Thankfully, Keychron provides a [git
 repo](https://github.com/Keychron/qmk_firmware) with their firmware and [clear instructions for the K1

add redirect for ham, mostly for myself
I had recreated my whole am radio wiki page ugh.
diff --git a/services/ham.md b/services/ham.md
new file mode 100644
index 00000000..fdcf8e39
--- /dev/null
+++ b/services/ham.md
@@ -0,0 +1 @@
+[[!redirect hardware/radio]]

start working on the new marcos
We make an entirely new page, v3, for the new build, so that we don't
have to move stuff out of the marcos namespace again.
diff --git a/hardware/server/marcos.mdwn b/hardware/server/marcos.mdwn
index eb94ad3b..90b4ef95 100644
--- a/hardware/server/marcos.mdwn
+++ b/hardware/server/marcos.mdwn
@@ -16,616 +16,12 @@ Marcos est mon serveur principal, ainsi nommée en l'honneur du
 Voir aussi la documentation de [[maintenance|services]], en
 particulier [[services/mail]] et [[services/backup]].
 
-[[!toc levels=3]]
+Marcos had many incarnations and each is tracked in its own page
+because otherwise tracking history here gets messy:
 
-# Specification
-
- * Case: [CSE-733TQ-500B][] ([300$][]), incl. 80+ bronze 500W PSU,
-   4x3.5" hotswap bays, 2x5.25" bays, 1x3.5" bay, 7" (4U) x 20.9" x
-   16.8" or 178 x 531 x 427mm (WxDxL), 17Kg ([manual][])
- * Motherboard: [ASUS PRIME X470-PRO][]: [187$][] (AM4/PGA 1331 ATX
-   12"x9.6" 6 SATA Intel® I211-AT chipset, [detailed specs][])
- * Memory: Kingston KSM26ED8/16ME (16GB RAM): [114$][]
- * [AMD Ryzen 5 2600][] - replaced with a [2600x](http://www.atic.ca/index.php?page=details&psku=196096) at same cost (no
-   GPU, 6 cores, 95W 3.4GHz): [287$][]
- * Total: 889$CAD
-
- [manual]: https://www.supermicro.com/manuals/chassis/Mid-tower/SC733.pdf
-
-The server is also backed by a UPS, a [APC 1500VA BX1500m](https://www.apc.com/ca/en/product/BX1500M/apc-back-ups-1500-compact-tower-1500va-120v-avr-lcd-10-nema-outlets-5-surge/).
-
-[CSE-733TQ-500B]: https://www.supermicro.com/en/products/archive/chassis/SC733TQ-500B
-[300$]: http://www.atic.ca/index.php?page=details&psku=63796
-[ASUS PRIME X470-PRO]: https://www.asus.com/us/Motherboards/PRIME-X470-PRO/
-[187$]: http://www.atic.ca/index.php?page=details&psku=196101
-[detailed specs]: https://www.asus.com/us/Motherboards/PRIME-X470-PRO/specifications/
-[Kingston KSM26ED8/16ME]: 
-[114$]: http://www.atic.ca/index.php?page=details&psku=211327
-[AMD Ryzen 5 2400G]: http://www.atic.ca/index.php?page=details&psku=191280
-[AMD Ryzen 5 2600]: http://www.atic.ca/index.php?page=details&psku=196095
-[287$]: http://www.atic.ca/index.php?page=details&psku=196095
-
-# Hardware maintenance
-
-See [[hardware/server/marcos/v1]] for the initial setup notes. Those
-are kept only for historical reference, as the machine was rebuilt
-with new hardware in 2020.
-
-See [[services/backup]] for backup and drive replacement procedures.
-
-## 2025 disk growth
-
-Switched to ZFS on 2025-02-10 to add two new 8TiB drives because LVM
-was refusing to add a new RAID-1 array to the VG because of different
-block size (old disks are 512 logical / 4096 physical, new disks are
-4k/4k). The actual error from `vgextend` was:
-
-```
-Devices have inconsistent logical block sizes (512 and 4096).
-```
-
-There is apparently the solution of using `allow_mixed_block_sizes`
-but that seemed [really unsafe](https://unix.stackexchange.com/a/676537/30227)).
-
-The [[software/zfs]] page has the goods on how the pool was created,
-with a normal LUKS encryption under it to avoid trouble with ZFS
-encryption.
-
-The `rsync` took 2d9 h40m, or 57h40m. Resync took 1h5m.
-
-Interestingly, zstd compression didn't give us any significant gain in
-disk capacity:
-
-```
-root@marcos:/home/anarcat# df   /mnt /srv
-Sys. de fichiers       blocs de 1K    Utilisé Disponible Uti% Monté sur
-/dev/mapper/vg_hdd-srv  7512681384 7276294760  161208316  98% /mnt
-tank/srv                7667172736 7240802944  426369792  95% /srv
-```
-
-But you'll note that the ZFS dataset gives us more room than ext4, for
-some reason:
-
-```
-root@marcos:/home/anarcat# df -h  /mnt /srv
-Sys. de fichiers       Taille Utilisé Dispo Uti% Monté sur
-/dev/mapper/vg_hdd-srv   7,0T    6,8T  154G  98% /mnt
-tank/srv                 7,2T    6,8T  407G  95% /srv
-```
-
-... 250GiGB! Note sure where that's coming from, but the capacity is larger.
-
-The old disk array wasn't yet added to the ZFS pool: for that the
-drives need to be reformatted, encrypted, and re-added to the pool.
-
-Update: this is causing heating issues. Turns out the
-[CSE-733TQ-500B][] Supermicro case can't handle the heat at all in the
-hotswap drive block. I will have to either replace the entire case (!)
-or move drives around in there. Not great. See the [silent
-rackmounts](#silent-rackmounts) for next steps.
-
-## 2024 Fan replacement
-
-From the 2020 replacement, the server has always been away, either in
-a basement or a closet, and its noisy stock fan didn't really
-matter. But now it's moved inside the office and damn that thing is
-noisy. It's noisy when *idle* and sounds like a hair drier when it
-spins up. So, it's got to go.
-
-I've heard good things from friends about [Noctua](https://noctua.at), so let's go
-with that. My previous "gold standard" was the stock Intel fan that
-came with the [[v1]], which, according to this [old review](https://silentpcreview.com/lga775-low-profile-heatsink-roundup/) ranges
-from 14 to 26dBa in noise.
-
-Noctua seems to be Amazon sellouts, but they have products at
-memoryexpress.com and NewEgg, so I guess I'll try Memory Express
-now. Out of [their Noctua selection](https://www.memoryexpress.com/Category/CoolingCPU?FilterID=26b78891-590d-2259-fa23-6e925f4e75eb&Sort=Price), their cheapest fan
-[compatible with my CPU](https://ncc.noctua.at/cpus/model/AMD-Ryzen-5-2600X-1010) is the [NH-D9L](https://noctua.at/en/nh-d9l/) if I read all of this
-right, at 80$ + tax + 13$ purolator shipping. The [specification](https://noctua.at/en/nh-d9l/specification)
-on that is:
-
- * dimensions: 110 x 95 x 95 mm (531 g)
- * NSPR*: 88
- * kit:
-   * NF-A9 PWM premium fan
-   * NA-RC7 Low-Noise Adaptor (L.N.A.)
-   * NT-H1 high-grade thermal compound
-   * SecuFirm2™ Mounting Kit
-   * Fan-clips for second NF-A9
-   * Noctua Metal Case-Badge
- * fan ([Noctua NF-A9 PWM](https://noctua.at/en/products/fan/nf-a9-pwm.html)):
-   * 400-2000RPM
-   * max noise: 22.8db(A)
-   * stops at 0% PWN
-
-There's a big asterisk with Noctua which is that they don't follow the
-TDP (Thermal Design Power) rating and instead have their own NSPR
-([Noctua Standard Performance Rating](https://noctua.at/en/noctua-standardised-performance-rating)). So who knows what that "88"
-stands for. In their compatibility table, it's rated as "low
-turbo/overclocking headroom", which is fine by me: I haven't done
-"overclocking" in decades at this point.
-
-The sink is also [compatible with the board](https://ncc.noctua.at/motherboards/model/ASUS-Prime-X470-Pro-4796), apparently, so
-presumably I don't need to worry about pins, voltage, or actually
-knowing WTF I am doing, in general, which is reassuring but probably
-wrong.
-
-The other concern is fitting the fan in the case. There's a case
-compatibility chart but my case isn't there. The closest is the
-[Supermicro-SuperChassis-743T-500B-1842](https://ncc.noctua.at/cases/model/Supermicro-SuperChassis-743T-500B-1842) but that one is 25.5" x
-17.8" x 7" while mine is 7" (4U) x 20.9" x 16.8". But really, both are
-7" where it matters, which is 168mm, which is plenty of room for a
-110mm fan.
-
-Interestingly though, it marks the 158mm [U12S](https://noctua.at/en/nh-u12s) as "insufficient
-clearance" while the [C14S](https://noctua.at/en/nh-c14s), at 115-142mm supposedly fits. Its fan
-([NF-A14-PWM](https://noctua.at/en/nf-a14-pwm)) is less interesting for me: it's much noisier at
-24.6db(A).
-
-I have also considered:
-
- * [NH-U12S](https://noctua.at/en/nh-u12s/specification): 22.4db(A), slightly quieter, but much bigger, marked
-   as not fitting in the Supermicro (158mm)
- * [NH-D12L](https://noctua.at/en/nh-d12l/specification): 22.6dB(A) but much larger dissipation power (148 vs
-   88 for the D9L), not available at MemoryExpress, more expensive
-   ([115$ at amazon](https://www.amazon.ca/dp/B09TB5KJ5V), [newegg](https://www.newegg.ca/p/13C-0005-002A0))
- * [NH-U9S](https://noctua.at/en/nh-u9s/): 22.8dB(A), slightly more powerful, not at
-   MemoryExpress, more expensive ([75$ at amazon](https://www.amazon.ca/dp/B00TBHYYFK), [NH-D9L is
-   70$](https://www.amazon.ca/Noctua-NH-D9L-Premium-Cooler-NF-A9/dp/B00QCEWTAW))
-
-Update: I ordered the NH-D9L and installed it and immediately realized
-the problem was actually not the CPU fan, but the board fan, which is
-spec'd at 45dB. That fan is a weird construction that has a 92x25mm
-fan inside an enclosure that directs the airflow, see [FAN-0076L4](https://store.supermicro.com/us_en/92mm-fan-0076l4.html)
-for the detailed specs. I asked Supermicro if they had a better
-replacement fan, and so far they just keep pointing me at that fan. So
-I asked Noctua if [their fans](https://noctua.at/en/products/fan) would fit.
-
-## 2020 Replacement
-
-In 2020, hardware for marcos was swapped out into a new box.
-
-The machine has 4x3.5" hotswap drives so there's plenty of room for
-expansion *and* it should be easier to replace drives when they
-fail. Here's the inventory of drives.
-
-Currently in marcos:
-
- * `Samsung SSD 850 EVO 500GB`: 465GiB
- * `Seagate HDD IronWolf 8TB ST8000VN004-2M21`: 7.3TiB
- * `Seagate HDD IronWolf 8TB ST8000VN0022-2EL112`: 7.3TiB
- * `Western Digital Green 3TB WDC_WD30EZRX-00D8PB0`: 2.7TiB (external
-   "WD My Drive" backup drive)
-
-There should also be spare drives in the office which could be used to
-create RAID-1 arrays of those. I believe there should be:
-
- * Crucial SSD 500GB (dead)
- * 4TB backup WD green
-
-Unfortunately it looks like my old HDD inventory is too old to provide
-a good replacement strategy. We could get:
-

(Diff truncated)
cleanup ham gear
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index f6d4698b..1b64c9df 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -42,21 +42,21 @@ I uploaded a few photos [in this album](https://photos.anarc.at/documentation/ra
 
 ## Stuff to buy next
 
-* <del>VHF/UHF SWR meter</del> Got a workman, above
-  * [Daiwa CN-801V](http://www.universal-radio.com/catalog/meters/2140.html) 150$ 140-525 MHz.	20/200 Watts ([5 reviews: 4.2/5](http://www.eham.net/reviews/detail/7378))
-  * [the bird 43](http://www.universal-radio.com/catalog/meters/1739.html) 85$ (but only one way at a time) 200-500 MHz.	    50 Watts ([39 reviews: 4.5/5](http://www.eham.net/reviews/detail/7378))
-* <del>Cabling</del> - got plenty of spare cable now that my main
-  setup was destroyed
-  * 100' of RG8 cabling
-* [Call those guys?](http://www.paratonnerres.qc.ca/produits.html)
-* <del>J146/440 - dual band VHF/UHF antenna (2m-70cm) [40$ at radioworld](http://radioworld.ca/product_info.php?cPath=73_191_193&products_id=886)</del> /!\ backorder
-* <del>MFJ-260C - 300W dummy load  0-150Mhz dry [50$ at radiowrodl](http://radioworld.ca/product_info.php?products_id=8098)</del> built into the tuner now
-- [(tr)uSDX](https://dl2man.de/), example [portable kit](https://imgur.com/gallery/ultralightish-tr-usdx-sota-shack-box-kit-QPuv1d9)
-- [kv4p](https://www.kv4p.com/)
-- UV-K5, [custom firmware](https://github.com/nikant/kamilsss655-uv-k5-firmware-custom-nkk?tab=readme-ov-file), [also](https://whosmatt.github.io/uvmod/)
-- [QMX](https://qrp-labs.com/qmx.html)
-- [uBITX v6](https://www.hfsignals.com/index.php/ubitx-v6/)
-- [sBITX](https://www.sbitx.net/)
+### Modern
+
+- [sBITX](https://www.sbitx.net/): 80-20m (receive 500KHz-30MHz, 25W), SSB, CW, FT8,
+  packet, SDR, 400$ with a raspi kit, 10"x6"x2", 4lbs, back-order as
+  of 2025-03-29, but [should be back in stock "in a month" so in
+  March](https://groups.io/g/BITX20/message/115582?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Acreated%2C%2Csbitx%20out%20of%20stock%2C20%2C2%2C0%2C111139360)
+- [uBITX v6](https://www.hfsignals.com/index.php/ubitx-v6/): 10W HF, SSB/CW, SDR, arduino-based, GPL-3, 210$ for
+  kit
+- [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,
+  CW/LSB/USB/AM/FM) transceiver, example [portable kit](https://imgur.com/gallery/ultralightish-tr-usdx-sota-shack-box-kit-QPuv1d9), ~140$
+- [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/)
+- [kv4p](https://www.kv4p.com/): ham radio adapter (VHF, USB-C) for Android phones, GPL-3
 
 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:
@@ -80,6 +80,18 @@ that we might want to learn from. In particular, it ships:
  * the radio's manual
  * a bandplan
 
+### Old stuff
+
+* <del>VHF/UHF SWR meter</del> Got a workman, above
+  * [Daiwa CN-801V](http://www.universal-radio.com/catalog/meters/2140.html) 150$ 140-525 MHz.	20/200 Watts ([5 reviews: 4.2/5](http://www.eham.net/reviews/detail/7378))
+  * [the bird 43](http://www.universal-radio.com/catalog/meters/1739.html) 85$ (but only one way at a time) 200-500 MHz.	    50 Watts ([39 reviews: 4.5/5](http://www.eham.net/reviews/detail/7378))
+* <del>Cabling</del> - got plenty of spare cable now that my main
+  setup was destroyed
+  * 100' of RG8 cabling
+* [Call those guys?](http://www.paratonnerres.qc.ca/produits.html)
+* <del>J146/440 - dual band VHF/UHF antenna (2m-70cm) [40$ at radioworld](http://radioworld.ca/product_info.php?cPath=73_191_193&products_id=886)</del> /!\ backorder
+* <del>MFJ-260C - 300W dummy load  0-150Mhz dry [50$ at radiowrodl](http://radioworld.ca/product_info.php?products_id=8098)</del> built into the tuner now
+
 I did a review of [[FmTransmitter]]s a long time ago that is probably
 now completely useless.
 
@@ -177,9 +189,12 @@ Je collecte ici des bons sites au sujet du ham radio.
   * [certification pour licence canadienne](http://www.ic.gc.ca/eic/site/smt-gst.nsf/fra/h_sf01709.html)
   * [Exams at the Last HOPE](http://wiki.hope.net/index.php/TLH_Amateur_Radio_License_Exams)
 * Clubs
+  * [Radio Amateur Canada](http://www.rac.ca/)
   * [Montreal Amateur Radio Club](http://www.marc.qc.ca/) - Dorval est. 1932, mostly english and west-island-ish
   * [Rive sud](http://www.ve2clm.ca/)
-  * [Radio Amateur Canada](http://www.rac.ca/)
+  * [VE2UMS](https://ve2ums.ca/) (Montréal et banlieues)
+  * [VE2CWQ](https://www.ve2cwq.ca/) ("CanWarn", emergency net and first responders)
+  * [Packet Québec](https://groups.io/g/PacketQuebec/)
   * [Radio Amateur Estrie](https://www.ve2rae.com/) (VA2RAE), ils ont un repeater sur le Mt
     Orford!  ([VE2TA](https://www.repeaterbook.com/repeaters/callResult.php?call=VE2TA&status_id=%25), 147.3300 +0.6 MHz, [YSF](https://www.repeaterbook.com/repeaters/callResult.php?call=VE2TA&status_id=%25), but "fusion
     mode" should work in analog)
@@ -187,6 +202,17 @@ Je collecte ici des bons sites au sujet du ham radio.
   * [RepeaterBook](https://www.repeaterbook.com/), e.g. [all quebec repeaters](https://www.repeaterbook.com/repeaters/Display_SS.php?state_id=CA10)
   * [RadioReference.com](https://www.radioreference.com/), repeaters, but also other frequencies
   * [Reseaux au quebec selon VA2RAE](https://www.ve2rae.com/reseaux.pdf)
+  * [Réseau VE2CWQ](https://www.ve2cwq.ca/reseau/) (VHF/UHF/packet)
+  * [Réseau VE2UMS](https://ve2ums.ca/reseau.php) (VHF/echolink/DMR)
+  * 80m:
+    - 3.7450 MHz (LSB) Réseau VE2CAA (dimanche matin)
+    - 3.7500 MHz (LSB) Réseau VE2CAA (Urgences Amériques)
+    - 3.7750 MHz (LSB) Réseau VE2CWQ (Canwarn 1er tour, français?)
+    - 3.7800 MHz (LSB) Réseau RHFQ (Réseau HF du Québec, Sécurité Civile)
+    - 3.7870 MHz (LSB) Professional Loafers (PL Net, anglais?)
+  * 40m
+    - 7.1200 MHz (LSB) VE2CWQ (Canwarn 2e tour, français?)
+  	- 7.1250 MHz (LSB) VE2AQC (Réseau RAQI, français?)
 * Other documentation
   * [IRLP](http://www.irlp.net/) -  Internet Radio Linking Project - using the internet to link stations
   * [Call sign lookup](http://hamcall.net/call)
@@ -225,3 +251,4 @@ This needs to be merged into [[Software]]
   * [predict](http://packages.debian.org/predict) and [predict](http://packages.debian.org/predict)-gsat - console only, doesn't bring much the gorgeous visuals of DebianPackage:gpredict
 
 ... others to follow, there's a whole [hamradio section](http://packages.debian.org/sid/hamradio/) in debian.
+

make readable
diff --git a/recette/porc-romarin-porto.md b/recette/porc-romarin-porto.md
index 6c36601e..43fc77d6 100644
--- a/recette/porc-romarin-porto.md
+++ b/recette/porc-romarin-porto.md
@@ -1,7 +1,3 @@
----
-geometry: margin=3cm
----
-
 # Filets de porc au romarin et sauce au porto 
 
 ## Ingredients
@@ -60,42 +56,4 @@ Ajouter le jus dans la sauce Porto.
 
 Arroser de sauce.
 
-\pagebreak
-
-## Tofu addendum
-
-```
-Antoine Beaupré <anarcat@orangeseeds.org> (2024-01-07) (inbox sent)
-Date: Sun, 07 Jan 2024 16:07:25 -0500
-From: Antoine Beaupré <anarcat@orangeseeds.org>
-To: Nick Ackerley <ea610@ncf.ca>
-Subject: Re: Tofu
-
-On 2024-01-06 10:49:00, Nick Ackerley wrote:
-> Hi Antoine!
->
-> Can you share your amazing not-pork-tofu recipe with me?
->
-> Sad you weren't able to visit with Rachel et al., this time. Maybe next?
-
-It would have been great to hang out indeed! But I took a rain check and
-visited other friends up north, but really mostly alone, taking a break
-from the family has been kind of great, to be frank. :) Hopefully we can
-make this ride soon enough again, now that it seems the boys handle it
-much better!
-
-Here's the pork-based recipe, from my mom. Replace tofu with pork,
-obviously, but after the marinade, i kind of just wing it: if you can
-fry the tofu on a BBQ that's good, oven can be good as well, best would
-probably be an air frier. For heapmas, i just fried the green onions
-with oil, fried the tofu until it's almost charred, then deglazed with
-the port and vineager, then added all the marinade and reduced until it
-was yum yummy.
-
--- 
-The odds are greatly against you being immensely smarter than everyone\
-else in the field. If your analysis says your terminal velocity is
-twice the speed of light, you may have invented warp drive, but the
-chances are a lot better that you've screwed up.
-- Akin's Laws of Spacecraft Design
-```
+Note: voir aussi [[tofu-romarin-porto]].

meshtastic: scalablity issues, alternatives, hardware
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 9807afa9..687f495b 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -24,6 +24,65 @@ The [site planner](https://site.meshtastic.org/) can help you show what you *sho
 see. Combine with one of the [maps](#maps), you should get a good idea of
 what you *should* be seeing.
 
+# Scalability
+
+I have serious concerns about the scalability of the Meshtastic
+algorithm. It is basically "rebroadcast everything you get, up to
+three hops" and while they are pretty good at "marketing" it, my hunch
+is that this won't scale to a dense, thousand-node busy network,
+especially since everything (including direct messages) is on a common
+carrier.
+
+@nullagent has a [long rant about this on Mastodon](https://partyon.xyz/@nullagent/113861754522594610) that confirms
+my hunch and made me write this section. A few quotes:
+
+> Floodfill can't scale.
+>
+> That's the core issue with meshtastic. 
+>
+> All the nodes repeat what they hear, kinda like "the people's mic"
+> at a protest. This strategy is great if we all want to hear ONE
+> person's speech across a whole crowd.
+>
+> But try the people's mic with 10's hundreds or thousands of
+> different bi-directional conversations and things get messy.
+>
+> We're all shouting to hear and expecting the person next to us to
+> repeat. But all they hear is noise and very rarely a few words here
+> & there
+
+> I -frequently- run out of hops NOT network!
+> 
+> The broadcast algo eats up all the hops in the core downtown and
+> rarely makes it out the otherside with low hop limit or even with
+> the max
+
+More concerning is his criticism of the core team culture:
+
+> The project is run in the usual tech-bro seeming ways and are rude
+> ass fuck to new comers with less experience / platform than I who've
+> made the -same- observations about floodfill's limits.
+> 
+> The core team is dying on the hill of the shitiest routing algo
+> possible because they I guess don't want to read anything about
+> routing research.
+> 
+> Bruh... I worked in a networking research lab in the early 2000's,
+> almost every excuse this team has made is bullshit.
+>
+> So when I have spent time and money learning an open source project,
+> encouraged friends to also go learn and spend money.... and then the
+> core team is rude as fuck to them when they have polite and honest
+> feedback.... yea fuck that noise.
+>
+> Meshtastic is gonna fail on the same dumb hill as many tech-bro led
+> projects, fighting their community over dumbshit.
+>
+> It's a perfectly fine toy of a project to learn LoRa but please know
+> better is possible and we don't have to deal with these assholes.
+
+He points at Meshcore and Reticulum as possible replacements.
+
 # Hardware
 
 Below are some Meshtastic-compatible devices I found interesting.
@@ -71,6 +130,16 @@ Make sure you [configure the device](https://wiki.seeedstudio.com/sensecap_t1000
 environment sensors and a neat trick to find the device if lost, see
 below.
 
+Note that the [intro guide](https://wiki.seeedstudio.com/t1000_e_intro/) has crucial information about the
+device, but know that those are the functions of the main button:
+
+| Button action         | Description               | Buzzer         |
+|-----------------------|---------------------------|----------------|
+| Press once            | Power on                  | Rising melody  |
+| Press twice           | Update node/location info | -              |
+| Press three times     | Switch on/off the GPS     | -              |
+| Press and hold for 5s | Power off                 | Falling melody |
+
 ### Fun story
 
 I lost that device one day! I had put it on top of a doorframe on the
@@ -110,10 +179,22 @@ The [T-Deck Plus](https://lilygo.cc/products/t-deck-plus-1) is another unique pl
 The "meshtastic" firmware that comes with it is just bad, definitely
 not worth paying for. There's a "pre release" "technical preview"
 (2.6.0.f7afa9a) that is *much* better (see below), although writing
-this I have just noticed than the 2.6.3 "alpha" release.
+this I have just noticed than the 2.6.3 "alpha" release. I have
+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)
+
+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.
 
 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 in the Meshtastic app.
+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
+wifi, one row below: hold the wifi icon and it will turn on WiFi and
+reboot.
 
 There seems to be an issue with the remote control interface: I have
 found that I need to reboot in "programming mode" to get access to the
@@ -123,9 +204,21 @@ recent one and it didn't work. It could be a conflict with WiFi as
 well. [According to the Meshtastic docs though](https://meshtastic.org/docs/software/meshtastic-ui/#bluetooth-programming-mode), it's just the way
 it is.
 
+Note that the device works as normal in programming mode: it's just
+the user interface that's different, but it otherwise receives, relays
+and sends packets fine, which is useful if you wan to do a [range
+test](https://meshtastic.org/docs/overview/range-tests/).
+
 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.
+(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/)
+
+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
+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 devices
 
@@ -136,6 +229,9 @@ Those I haven't tested yet:
 - [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)
 - [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
@@ -153,11 +249,23 @@ Those I haven't tested yet:
   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$, they also have an [eink
-  dev board](https://heltec.org/project/vision-master-e290/)
+  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/)
 - 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), useful if you
-  already order from RAK wireless and need extra kits
+  *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)3)
+  - 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/)
 - [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
@@ -339,3 +447,4 @@ 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)
+- [Meshcore](https://github.com/ripplebiz/MeshCore), similar to Meshtastic, but different routing algorithm

research gear for heating issues with marcos
diff --git a/hardware/server/marcos.mdwn b/hardware/server/marcos.mdwn
index a38c1afb..eb94ad3b 100644
--- a/hardware/server/marcos.mdwn
+++ b/hardware/server/marcos.mdwn
@@ -22,7 +22,7 @@ particulier [[services/mail]] et [[services/backup]].
 
  * Case: [CSE-733TQ-500B][] ([300$][]), incl. 80+ bronze 500W PSU,
    4x3.5" hotswap bays, 2x5.25" bays, 1x3.5" bay, 7" (4U) x 20.9" x
-   16.8" or 178 x 531 x 427mm (WxDxL), 17Kg ([manual](https://www.supermicro.com/manuals/chassis/Mid-tower/SC733.pdf))
+   16.8" or 178 x 531 x 427mm (WxDxL), 17Kg ([manual][])
  * Motherboard: [ASUS PRIME X470-PRO][]: [187$][] (AM4/PGA 1331 ATX
    12"x9.6" 6 SATA Intel® I211-AT chipset, [detailed specs][])
  * Memory: Kingston KSM26ED8/16ME (16GB RAM): [114$][]
@@ -30,6 +30,8 @@ particulier [[services/mail]] et [[services/backup]].
    GPU, 6 cores, 95W 3.4GHz): [287$][]
  * Total: 889$CAD
 
+ [manual]: https://www.supermicro.com/manuals/chassis/Mid-tower/SC733.pdf
+
 The server is also backed by a UPS, a [APC 1500VA BX1500m](https://www.apc.com/ca/en/product/BX1500M/apc-back-ups-1500-compact-tower-1500va-120v-avr-lcd-10-nema-outlets-5-surge/).
 
 [CSE-733TQ-500B]: https://www.supermicro.com/en/products/archive/chassis/SC733TQ-500B
@@ -96,6 +98,12 @@ tank/srv                 7,2T    6,8T  407G  95% /srv
 The old disk array wasn't yet added to the ZFS pool: for that the
 drives need to be reformatted, encrypted, and re-added to the pool.
 
+Update: this is causing heating issues. Turns out the
+[CSE-733TQ-500B][] Supermicro case can't handle the heat at all in the
+hotswap drive block. I will have to either replace the entire case (!)
+or move drives around in there. Not great. See the [silent
+rackmounts](#silent-rackmounts) for next steps.
+
 ## 2024 Fan replacement
 
 From the 2020 replacement, the server has always been away, either in
@@ -494,6 +502,8 @@ Update: FreeNAS is now called [TrueNAS](https://www.truenas.com/) and they have
 cases now, checkout their [TrueNAS mini](https://www.truenas.com/truenas-mini/) boxes. Their 4-bay hotswap
 thing starts at 1000$.
 
+Update: According to servethehome.com, the TrueNAS mini is too noisy.
+
 ## Pine 64
 
 They have SBCs of course -- that's how they started -- but also a neat
@@ -529,6 +539,32 @@ getting out of scope, but:
 
 https://protectli.com/
 
+## Silent rackmounts
+
+- [SilentPC 2u Xeon server](https://silentpc.com/servers/2u-rack-mount-server): 2245$, 3 x 3.5" drives. Not great.
+- [eRacks QUIET2](https://eracks.com/products/quiet-systems/QUIET2/): 1400$, 3 x 3.5", still not enough drives
+- [QuietPC 2U Breeze D5](https://www.quietpc.com/sys-2u-rackmount-i17): 1600$CAD+, 4 x 3.5"?
+
+[Reddit recommended Dell R270 in 2022](https://www.reddit.com/r/homelab/comments/vdultt/recommendations_for_quietish_1u2u_server/), maybe using normal
+rackmount servers is an option?
+
+### Sliger
+
+[Michael Lynch](https://mtlynch.io/) built a [budget NAS in 2022](https://mtlynch.io/budget-nas/) and updated it in
+2024 to this [Sliger 2U trayless case](https://www.sliger.com/products/rackmount/3u/cx3701/) with room for 10x3.5"
+drives, 4x2.5" SSD mounts, two 120mm exhaust fans, for 340$, about the
+price of my original Supermicro case. It's a Mini-ITX build though,
+and I have a full-sized ATX board, which he regretted because of
+limited expansion:
+
+> If I were to do this over again, I would have bought a rack-mounted
+> chassis that has slots for six to eight 3.5" hard drives and a
+> motherboard with either multiple PCI slots or at least eight SATA
+> ports.
+
+I asked sliger for a spec. I think those cases look amazing, and
+probably the next build.
+
 ## Other SoC boards
 
 There are many SoC boards that could be used to create a device from
@@ -588,8 +624,6 @@ needs to be double-checked.
 
 ## Other builds
 
-See also <https://mtlynch.io/budget-nas/>.
-
 At work, we built two rescue hosts with the PC engines boards, right
 before they went EOL. I documented a bunch of alternatives, see [this
 list](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/apu#apu-eol-and-alternatives).
diff --git a/services/wifi.mdwn b/services/wifi.mdwn
index 6232ace0..3a1ac74b 100644
--- a/services/wifi.mdwn
+++ b/services/wifi.mdwn
@@ -123,6 +123,8 @@ ever since.
    (45$)](https://www.canadacomputers.com/product_info.php?cPath=38_944&item_id=066549) could hold the routers, but is back-ordered, so maybe
    [this deeper shelf](https://www.canadacomputers.com/product_info.php?cPath=38_944&item_id=144628) (16" 44lbs) could do it, and this [18U
    rack](https://www.canadacomputers.com/product_info.php?cPath=38_944&item_id=166475) is quite interesting, 385$
+ * [Startech have their own racks shop](https://www.startech.com/en-us/server-management/racks), the [15U looks more
+   interesting](https://www.startech.com/en-us/server-management/4postrack15u) (300$USD) because smaller, so more headroom
  * [recyborg sometimes has racks](https://recyborg.com/?s=rack&post_type=product&type_aws=true) and [gigabit switches](https://recyborg.com/?s=gigabit&post_type=product&type_aws=true)
 
 Some other home lab had the following recommendations:

more ham radio notes
diff --git a/hardware/radio.mdwn b/hardware/radio.mdwn
index 669a1d3d..f6d4698b 100644
--- a/hardware/radio.mdwn
+++ b/hardware/radio.mdwn
@@ -5,10 +5,12 @@ I also volunteered at [CKUT](https://ckut.ca/) for a while, but I didn't have ti
 commit long term. It was still a pretty awesome experience. See
 [[communication]] for more details on that side.
 
+See also [[services/meshtastic]] (think DIY text mesh) and
+[[services/radio]] (think jukebox).
+
 [[!toc levels=3]]
 
-Hardware
-========
+# Hardware
 
 * Hand helds:
   * Baofeng UV-3R MKII radio (<50$)
@@ -38,8 +40,7 @@ Total rig cost so far: 1242.60$ (not counting the quad project below)
 
 I uploaded a few photos [in this album](https://photos.anarc.at/documentation/radio/#/0).
 
-Stuff to buy next
------------------
+## Stuff to buy next
 
 * <del>VHF/UHF SWR meter</del> Got a workman, above
   * [Daiwa CN-801V](http://www.universal-radio.com/catalog/meters/2140.html) 150$ 140-525 MHz.	20/200 Watts ([5 reviews: 4.2/5](http://www.eham.net/reviews/detail/7378))
@@ -82,8 +83,7 @@ that we might want to learn from. In particular, it ships:
 I did a review of [[FmTransmitter]]s a long time ago that is probably
 now completely useless.
 
-Stores
-------
+## Stores
 
  * [Radioworld](https://radioworld.ca/)
  * [Universal Radio](https://www.universal-radio.com/)
@@ -92,18 +92,20 @@ Stores
  * [eBay](http://shop.ebay.com/Fixed-/163857/i.html)
  * [local](http://www.raqi.ca/~ve2bzl/)
 
-Quad antenna project
-====================
+# Quad antenna project
 
-I am working on building a new antenna. It is based on [this design](http://www.hamuniverse.com/n1uue2el1011quad.html), which uses a mix of PVC pipes and fiberglass rods, except I adapt it to a 20m antenna and replace the PVC with aluminium for solidity. It should be possible to take the antenna apart and rebuild it if necessary.
+I was working on building a new antenna. It was based on [this design](http://www.hamuniverse.com/n1uue2el1011quad.html), which uses a mix of PVC pipes and fiberglass rods, except I adapted it to a 20m antenna and replace the PVC with aluminium for solidity. It should be possible to take the antenna apart and rebuild it if necessary.
 
 <figure> 
 <img src="Quad-sketch0001.jpg" alt="Hand-drawn sketch of a Quad antenna" />
 <figcaption>Sketch of my antenna</figcaption>
 </figure>
 
-Parts list
-----------
+I have mostly lost the parts to this and it's now just an old crazy
+project that never materialized. I'm keeping it here for future
+reference and to inspire other people to do crazy things like this.
+
+## Parts list
 
 ### Mast
 
@@ -145,8 +147,7 @@ Notes:
 
 Current blocker(s): Waiting for parts to be shipped and for the rain to stop.
 
-Discarded approaches
---------------------
+## Discarded approaches
 
 Those parts were considered during the design phase but were discarded for various reasons.
 
@@ -161,8 +162,7 @@ Those parts were considered during the design phase but were discarded for vario
 
 I had a lot of problems finding proper parts (pipes, raw materials like wiring and so on) in Montreal, which made building the antenna quite tricky, as a lot of things needed to be ordered online, which raised the overall costs because of shipping.
 
-Références
-==========
+# Références
 
 Je collecte ici des bons sites au sujet du ham radio.
 
@@ -180,6 +180,13 @@ Je collecte ici des bons sites au sujet du ham radio.
   * [Montreal Amateur Radio Club](http://www.marc.qc.ca/) - Dorval est. 1932, mostly english and west-island-ish
   * [Rive sud](http://www.ve2clm.ca/)
   * [Radio Amateur Canada](http://www.rac.ca/)
+  * [Radio Amateur Estrie](https://www.ve2rae.com/) (VA2RAE), ils ont un repeater sur le Mt
+    Orford!  ([VE2TA](https://www.repeaterbook.com/repeaters/callResult.php?call=VE2TA&status_id=%25), 147.3300 +0.6 MHz, [YSF](https://www.repeaterbook.com/repeaters/callResult.php?call=VE2TA&status_id=%25), but "fusion
+    mode" should work in analog)
+* Frequency lists:
+  * [RepeaterBook](https://www.repeaterbook.com/), e.g. [all quebec repeaters](https://www.repeaterbook.com/repeaters/Display_SS.php?state_id=CA10)
+  * [RadioReference.com](https://www.radioreference.com/), repeaters, but also other frequencies
+  * [Reseaux au quebec selon VA2RAE](https://www.ve2rae.com/reseaux.pdf)
 * Other documentation
   * [IRLP](http://www.irlp.net/) -  Internet Radio Linking Project - using the internet to link stations
   * [Call sign lookup](http://hamcall.net/call)
@@ -187,35 +194,34 @@ Je collecte ici des bons sites au sujet du ham radio.
   * [US Ham bands](http://www.arrl.org/FandES/field/regulations/bands.html)
   * [Family_Radio_Service](https://en.wikipedia.org/wiki/Family_Radio_Service) - intéressant pour commencer, comme le CB mais plus puissant et sans interférence, pas cher, j'ai acheté un [cobra FRS](http://radioworld.ca/product_info.php?cPath=161_381&products_id=5790)
 
-Software
-========
+# Software
 
 This needs to be merged into [[Software]]
 
 * the oracles
-  * http://packages.debian.org/gpredict
-  * http://packages.debian.org/minimuf - allows you to compute the WikiPedia:MUF depending on salar activity and so on, but has an unusuable interface (you need to enter a series of digits... how about a GUI?!)
-  * http://packages.debian.org/gcb - calculates the right angle for your antenna
-  * http://packages.debian.org/xplanet - can show azimuthal projections of the earth on your background, screensaver or window - I use this in myxsession:
+  * [gpredict](http://packages.debian.org/gpredict)
+  * [minimuf](http://packages.debian.org/minimuf) - allows you to compute the WikiPedia:MUF depending on salar activity and so on, but has an unusuable interface (you need to enter a series of digits... how about a GUI?!)
+  * [gcb](http://packages.debian.org/gcb) - calculates the right angle for your antenna
+  * [xplanet](http://packages.debian.org/xplanet) - can show azimuthal projections of the earth on your background, screensaver or window - I use this in myxsession:
     xplanet -latitude 45.5 -longitude -73.66 -wait 60 -label -projection azimuthal -fork -radius 90
 * testing tools
-  * http://packages.debian.org/ibp - very useful for training to receive distant comms: show you which beacon is active when, with a map: `ibp FN35EM`
+  * [ibp](http://packages.debian.org/ibp) - very useful for training to receive distant comms: show you which beacon is active when, with a map: `ibp FN35EM`
 * packet:
-  * http://packages.debian.org/gmfsk - for packet radio
-  * http://packages.debian.org/fldigi - also looks interesting and fairly complete, not tested
-  * http://packages.debian.org/gpsk31, DebianPackage:linpsk, DebianPackage:phaseshift - same?
-  * http://packages.debian.org/fbb - mailboxes?
+  * [gmfsk](http://packages.debian.org/gmfsk) - for packet radio
+  * [fldigi](http://packages.debian.org/fldigi) - also looks interesting and fairly complete, not tested
+  * [gpsk31](http://packages.debian.org/gpsk31), DebianPackage:linpsk, DebianPackage:phaseshift - same?
+  * [fbb](http://packages.debian.org/fbb) - mailboxes?
 * programming:
   * [Chirp](https://chirp.danplanet.com/) ([Debian](https://tracker.debian.org/pkg/chirp)) - programming radios
 * to be tested:
-  * http://packages.debian.org/grig - can control your radio from your computer
-  * http://packages.debian.org/splat 
-  * http://packages.debian.org/wwl
-  * http://packages.debian.org/wsjt
-  * http://packages.debian.org/xastir
-  * http://packages.debian.org/xwota
-  * http://packages.debian.org/xdemorse
+  * [grig](http://packages.debian.org/grig) - can control your radio from your computer
+  * [splat](http://packages.debian.org/splat) 
+  * [wwl](http://packages.debian.org/wwl)
+  * [wsjt](http://packages.debian.org/wsjt)
+  * [xastir](http://packages.debian.org/xastir)
+  * [xwota](http://packages.debian.org/xwota)
+  * [xdemorse](http://packages.debian.org/xdemorse)
 * dismissed:
-  * http://packages.debian.org/predict and http://packages.debian.org/predict-gsat - console only, doesn't bring much the gorgeous visuals of DebianPackage:gpredict
+  * [predict](http://packages.debian.org/predict) and [predict](http://packages.debian.org/predict)-gsat - console only, doesn't bring much the gorgeous visuals of DebianPackage:gpredict
 
 ... others to follow, there's a whole [hamradio section](http://packages.debian.org/sid/hamradio/) in debian.

remove services/ham, already imported
diff --git a/services/ham.md b/services/ham.md
deleted file mode 100644
index 9d0ceaec..00000000
--- a/services/ham.md
+++ /dev/null
@@ -1,200 +0,0 @@
-I am
-[anarcat](http://web.archive.org/web/20190209012421/https://wiki.koumbit.net/TheAnarcat).
-I just passed my basic qualitification in Canada, with honors (so I can
-operate HF), yay! I am now AKA VA2ANK. -- **TheAnarcat** 21:50, 10 October
-2010 (CDT)
-
-[[!toc levels=3]]
-
-# My rig
-
-  * Transceiver: 
-    * Yaesu FT-100D - [499$ on ebay](http://web.archive.org/web/20190209012421/http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=180565016542&ssPageName=STRK:MEWNX:IT) \- actual price: ~570$ (to be verified)
-  * Antennas and gizmos at radioworld, first pass: 
-    * MFJ-941E - antenna tuner and switch [155$ at radioworld](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=2885)
-    * MAP-G5RV 1/2 - G5RV 50' dipole antenna (10-40m) [85$ at radioworld](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?manufacturers_id=121&products_id=7788)
-    * ~~J146/440 - dual band VHF/UHF antenna (2m-70cm)[40$ at radioworld](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_191_193&products_id=886)~~ /!\ backorder
-    * 100' of RG8 coax cabling [65$ at radioworld](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&products_id=6831)
-    * ~~MFJ-260C - 300W dummy load 0-150Mhz dry[50$ at radiowrodl](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=8098)~~ built into the tuner now
-    * 3 PL259 connectors [4$ at radioworld](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&products_id=3244)
-    * Total, incl. shipping: 452.35$
-  * Ferrites: ~40$ + 24$ customs fees (PN: 2643167851 from [IBS electronics](http://web.archive.org/web/20190209012421/http://www.ibselectronics.com/search_r.asp?mfgpn=2643167851))
-  * A shitload of PL259 connectors, usually around 2$ each
-  * Documentation: 
-    * [Canadian Amateur Radio Basic Qualification Study Guide](http://web.archive.org/web/20190209012421/http://www.coaxpublications.ca/): 40$
-    * [The RAC Operating Manual](http://web.archive.org/web/20190209012421/https://www.rac.ca/store/operating-manual.htm): 42$ (note: i didn't find this one really useful)
-    * 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)
-
-I uploaded a few photos [in this
-album](http://web.archive.org/web/20190209012421/http://photos.anarcat.koumbit.org/main.php?g2_itemId=4619).
-
-## New quad antenna project
-
-I am working on building a new antenna. It is based on [this
-design](http://web.archive.org/web/20190209012421/http://www.hamuniverse.com/n1uue2el1011quad.html),
-which uses a mix of PVC pipes and fiberglass rods, except I adapt it to a 20m
-antenna and replace the PVC with aluminium for solidity. It should be possible
-to take the antenna apart and rebuild it if necessary.
-
-### Parts list
-
-[![](/web/20190209012421im_/http://www.amateur-radio-
-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/400px-Quad-
-sketch0001.jpg)](/web/20190209012421/http://www.amateur-radio-
-wiki.net/index.php?title=File:Quad-sketch0001.jpg)
-
-[](/web/20190209012421/http://www.amateur-radio-
-wiki.net/index.php?title=File:Quad-sketch0001.jpg "Enlarge")
-
-A sketch of my antenna
-
-Mast:
-
-| Part                | Amount | Where          | Weight   | Price  | Notes                                                                                                                                                           |
-|---------------------|--------|----------------|----------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| tripod              | 1      | addison        | ?        | 45.56$ | ~2' x 2'                                                                                                                                                        |
-| 3m steel pole       | 1      | downstairs     | ?        | 0$     | to connect the boom and tripod, 1-1¼"                                                                                                                           |
-| sandbags            | 3      | home depot     | 30kg ea. | 10.76$ | one per leg                                                                                                                                                     |
-| plywood             | 3'x4'  | attic          | ?        | 0$     | ~~1' x 2' used for the beam/pole fitting~~ \- found some                                                                                                        |
-| Mast clamps (1"3/4) | 4      | hardware store | ?        | 4.92$  | to connect the boom with the mast, bigger mast, 1.23¢ ea                                                                                                        |
-| Mast clamps (1"3/8) | 2      | hardware store | ?        | 1.60$  | to connect the boom with the mast, 80¢ ea                                                                                                                       |
-| guy rope            | 2x100' | hardware store | ?        | 63.98$ | to secure the mast, using poplypropylene/nylon rope, each line should support around 300lbs of pressure, enough for the 500lbs of pressure with a 90mph wind    |
-
-Antenna and accessories  
-
-| Part               | Amount  | Where                                                                                                                                                      | Weight  | Price                        | Notes                                                                                                            |
-|--------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|------------------------------|------------------------------------------------------------------------------------------------------------------|
-| 1" hose clamps     | 8       | home depot                                                                                                                                                 | ?       | ?                            | to tie the antenna line to the spreaders                                                                         |
-| tie wraps, small   | 100     | hardware store                                                                                                                                             | ?       | 3.09$                        | to tie the antenna line to the spreaders                                                                         |
-| 2"½ hose clamps    | 19      | hardware store                                                                                                                                             | ?       | 26.41$                       | to tie-up the boom together (2), the spreaders to the spider (8) and the spreaders themselves (8), +spare (1)    |
-| 8"x½" plastic tube | 1       | home depot                                                                                                                                                 | ~0      | 0$                           | for spreader/wire attachment - found some                                                                        |
-| 15' 1¼" fiberglass | 8       | [mgs4u.com](http://web.archive.org/web/20190209012421/http://www.mgs4u.com/fiberglass-cubical-quad-spreaders.htm) (type 1)                                 | 17.6lbs | ~160$ - actual: 255$CAD (!!) | 4.4lbs ea, unit price 19.80$                                                                                     |
-| Clamps             | 10-pack | [dxengineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=1868&PLID=161&SecID=129&DeptID=36&PartNo=DXE-CPC-375)  | ~0      | 14.95$                       | to secure the feedline                                                                                           |
-| 4m aluminium boom  | 2       | [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=5107&PLID=364&SecID=136&DeptID=43&PartNo=DXE-AT1492)  | 2.5lbs  | 24.90$                       |                                                                                                                  |
-| 500' of wiring     | 1       | [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=2012&PLID=159&SecID=77&DeptID=40&PartNo=DXE-ANTW-500) | N/A     | 74.95$                       | only parts of this will be used (120' to be more precise)                                                        |
-| U clamps and bolts | 4       | ~~home depot~~ [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                           | ~0      | 0$                           | included in the beam/pole fitting                                                                                |
-| boom/pole plate    | 1       | [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                                          | ?       | 45$ + 30$ shipping           | need to drill holes, includes reinforcement pole                                                                 |
-| spider             | 2       | [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                                          | 2.3lbs  | 70$USD                       | 14oz ea. 40$/ea, seems strong and sturdy, and Rick helped me through email, let's try!                           |
-
-Antenna (parts in shipping)  
-
-Nothing!  
-
-Antenna (parts to order)  
-
-| Part           | Amount | Where          | Weight | Price | Notes                   |
-|----------------|--------|----------------|--------|-------|-------------------------|
-| more sandbags? | 3      | hardware store | ?      | ?     | to attach the tower?    |
-  
-Total planned price: ~373.77$
-
-Total planned weight: ~25lbs++ - not including 180lbs of sandbags, the pole
-and tripod.
-
-### Notes
-
-  * Gauge: 10-16 AWG is okay (see [AWG](http://web.archive.org/web/20190209012421/http://en.wikipedia.org/wiki/American_wire_gauge), that is 1.2-2.5mm or 1/10" - 1/20"), and can be insulated, according to [this page](http://web.archive.org/web/20190209012421/http://n6ach.com/calc/quad.html)
-  * Using welding wire is a good idea, as the [lightning bolt quad](http://web.archive.org/web/20190209012421/http://www.qsl.net/w3df/quad2/quad.html) uses
-  * I was suggested [Dubo](http://web.archive.org/web/20190209012421/http://www.dubo.qc.ca/) for electric supplies
-
-### Current blocker(s)
-
-Waiting for parts to be shipped and for the rain to stop.
-
-### Discarded approaches
-
-Those parts were considered during the design phase but were discarded for
-various reasons.
-
-| Part                   | Amount     | Where                                                                                                                                              | Price                                         | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                 |
-|------------------------|------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| welding wire aluminium | 270' spool | [canadian tire](http://web.archive.org/web/20190209012421/http://www.canadiantire.ca/AST/browse/6/Tools/WeldingSoldering/AccessoriesRodsWire.jsp)? | ?                                             | example: [Aluminium 5356 MIG alloy](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx) \- too hard to find                                                                                                                                                                                                                                   |
-| ~~4m 1"PVC~~           | 1          | home depot                                                                                                                                         | ?                                             | according to Rick, this could create interference                                                                                                                                                                                                                                                                                                                                                                                     |
-| ~~5-way 1"PVC conn.~~  | 2          | [creativeshelters.com](http://web.archive.org/web/20190209012421/http://www.creativeshelters.com/Fittings/PVC-Structure-Fitting.aspx)              | 3.08$                                         | couldn't order, they don't accept canadian zip codes, and shipping is 30$ anyways, and I don't trust PVC                                                                                                                                                                                                                                                                                                                              |
-| ~~1"x½" copper pipe~~  | 8          | home depot                                                                                                                                         | ~5$                                           | we'll use tie-wraps instead for spreader/wire attachment                                                                                                                                                                                                                                                                                                                                                                              |
-| ~~8m ½"PVC~~           | 4          | home depot                                                                                                                                         | ?                                             | PVC pipes are too flexible to hold properly, we need fiberglass                                                                                                                                                                                                                                                                                                                                                                       |
-| ~~AUG 12 copper wire~~ | 44.4m      | ???                                                                                                                                                | 29.32$ (addison?) 48.64$ pour 2x12 22m (dubo) | ~~addison doesn't have bare wire, and[dubo](http://web.archive.org/web/20190209012421/http://www.dubo.qc.ca/) only has bare up to 8 gage, too big (it's mainly for grounds)~~ copper wire never comes bare, and i may have better luck finding mig soldering wire like [Aluminium-5356](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx)   |
-  
-I had a lot of problems finding proper parts (pipes, raw materials like wiring
-and so on) in Montreal, which made building the antenna quite tricky, as a lot
-of things needed to be ordered online, which raised the overall costs because
-of shipping.
-
-# Références
-
-Je collecte ici des bons sites au sujet du ham radio.
-
-  * Manuals, courses 
-    * [Good overview](http://web.archive.org/web/20190209012421/http://www.visi.com/~tneu/whatsham.html)
-    * [Emergencyradio.ca online course](http://web.archive.org/web/20190209012421/http://www.emergencyradio.ca/course/)
-    * [tech manual](http://web.archive.org/web/20190209012421/http://kb6nu.com/tech-manual/)
-    * [HAM Radio primer](http://web.archive.org/web/20190209012421/http://www.baproducts.com/ham.htm) \- un peu vieux (14 ans!) dit que son kit a coûté 1000$
-  * Hardware 
-    * [hardware guide](http://web.archive.org/web/20190209012421/http://batlabs.com/) \- motorola
-  * Exams 
-    * [certification pour licence canadienne](http://web.archive.org/web/20190209012421/http://www.ic.gc.ca/eic/site/smt-gst.nsf/fra/h_sf01709.html)
-    * [Exams at the Last HOPE](http://web.archive.org/web/20190209012421/http://wiki.hope.net/index.php/TLH_Amateur_Radio_License_Exams)
-  * Clubs 
-    * [Montreal Amateur Radio Club](http://web.archive.org/web/20190209012421/http://www.marc.qc.ca/) \- Dorval est. 1932, mostly english and west-island-ish
-    * [Rive sud](http://web.archive.org/web/20190209012421/http://www.ve2clm.ca/)
-    * [Radio Amateur Canada](http://web.archive.org/web/20190209012421/http://www.rac.ca/)
-  * Other documentation 
-    * [IRLP](http://web.archive.org/web/20190209012421/http://www.irlp.net/) \- Internet Radio Linking Project - using the internet to link stations
-    * [Call sign lookup](http://web.archive.org/web/20190209012421/http://hamcall.net/call)
-    * [Available call signs in Canada](http://web.archive.org/web/20190209012421/http://www.rac.ca/acl/)
-    * [US Ham bands](http://web.archive.org/web/20190209012421/http://www.arrl.org/FandES/field/regulations/bands.html)
-    * [Wikipedia:Family_Radio_Service](http://web.archive.org/web/20190209012421/http://en.wikipedia.org/wiki/Family_Radio_Service "wikipedia:Family Radio Service") \- intéressant pour commencer, comme le CB mais plus puissant et sans interférence, pas cher, j'ai acheté un [cobra FRS](http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=161_381&products_id=5790)
-
-## Software
-
-This needs to be merged into
-[Software](/web/20190209012421/http://www.amateur-radio-
-wiki.net/index.php?title=Software "Software")
-
-  * the oracles 
-    * [http://packages.debian.org/gpredict](http://web.archive.org/web/20190209012421/http://packages.debian.org/gpredict)
-    * [http://packages.debian.org/minimuf](http://web.archive.org/web/20190209012421/http://packages.debian.org/minimuf) \- allows you to compute the WikiPedia:MUF depending on salar activity and so on, but has an unusuable interface (you need to enter a series of digits... how about a GUI?!)
-    * [http://packages.debian.org/gcb](http://web.archive.org/web/20190209012421/http://packages.debian.org/gcb) \- calculates the right angle for your antenna
-    * [http://packages.debian.org/xplanet](http://web.archive.org/web/20190209012421/http://packages.debian.org/xplanet) \- can show azimuthal projections of the earth on your background, screensaver or window - I use this in myxsession: `xplanet -latitude 45.5 -longitude -73.66 -wait 60 -label -projection azimuthal -fork -radius 90`
-  * testing tools 
-    * [http://packages.debian.org/ibp](http://web.archive.org/web/20190209012421/http://packages.debian.org/ibp) \- very useful for training
-      to receive distant comms: show you which beacon is active when,
-      with a map `ibp FN35EM`
-  * packet: 
-    * [http://packages.debian.org/gmfsk](http://web.archive.org/web/20190209012421/http://packages.debian.org/gmfsk) \- for packet radio
-    * [http://packages.debian.org/fldigi](http://web.archive.org/web/20190209012421/http://packages.debian.org/fldigi) \- also looks interesting and fairly complete, not tested
-    * [http://packages.debian.org/gpsk31](http://web.archive.org/web/20190209012421/http://packages.debian.org/gpsk31), DebianPackage:linpsk, DebianPackage:phaseshift - same?
-    * [http://packages.debian.org/fbb](http://web.archive.org/web/20190209012421/http://packages.debian.org/fbb) \- mailboxes?
-  * to be tested: 
-    * [http://packages.debian.org/grig](http://web.archive.org/web/20190209012421/http://packages.debian.org/grig) \- can control your radio from your computer
-    * [http://packages.debian.org/splat](http://web.archive.org/web/20190209012421/http://packages.debian.org/splat)
-    * [http://packages.debian.org/wwl](http://web.archive.org/web/20190209012421/http://packages.debian.org/wwl)
-    * [http://packages.debian.org/wsjt](http://web.archive.org/web/20190209012421/http://packages.debian.org/wsjt)
-    * [http://packages.debian.org/xastir](http://web.archive.org/web/20190209012421/http://packages.debian.org/xastir)
-    * [http://packages.debian.org/xwota](http://web.archive.org/web/20190209012421/http://packages.debian.org/xwota)
-    * [http://packages.debian.org/xdemorse](http://web.archive.org/web/20190209012421/http://packages.debian.org/xdemorse)
-  * dismissed: 
-    * [http://packages.debian.org/predict](http://web.archive.org/web/20190209012421/http://packages.debian.org/predict) and [http://packages.debian.org/predict-gsat](http://web.archive.org/web/20190209012421/http://packages.debian.org/predict-gsat) \- console only, doesn't bring much the gorgeous visuals of DebianPackage:gpredict
-
-... others to follow, there's a whole [hamradio
-section](http://web.archive.org/web/20190209012421/http://packages.debian.org/sid/hamradio/)
-in debian.
-
-# Stuff to buy next
-
-  * VHF/UHF SWR meter 
-    * [Daiwa CN-801V](http://web.archive.org/web/20190209012421/http://www.universal-radio.com/catalog/meters/2140.html) 150$ 140-525 MHz. 20/200 Watts ([5 reviews: 4.2/5](http://web.archive.org/web/20190209012421/http://www.eham.net/reviews/detail/7378))
-    * [workman 50$](http://web.archive.org/web/20190209012421/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://web.archive.org/web/20190209012421/http://www.eham.net/reviews/detail/3905))
-    * [the bird 43](http://web.archive.org/web/20190209012421/http://www.universal-radio.com/catalog/meters/1739.html) 85$ (but only one way at a time) 200-500 MHz. 50 Watts ([39 reviews: 4.5/5](http://web.archive.org/web/20190209012421/http://www.eham.net/reviews/detail/7378))
-  * Handhelds: 
-    * Baofeng UV-3R MKII radio (<50$) avec cable de prog ou UV-5R
-  * Cabling: 
-    * 100' of RG8 cabling

(Diff truncated)
tweak markdown formatting
diff --git a/services/ham.md b/services/ham.md
index 67b223d2..9d0ceaec 100644
--- a/services/ham.md
+++ b/services/ham.md
@@ -4,17 +4,7 @@ I just passed my basic qualitification in Canada, with honors (so I can
 operate HF), yay! I am now AKA VA2ANK. -- **TheAnarcat** 21:50, 10 October
 2010 (CDT)
 
-## Contents
-
-  * 1 My rig
-    * 1.1 New quad antenna project
-      * 1.1.1 Parts list
-      * 1.1.2 Notes
-      * 1.1.3 Current blocker(s)
-      * 1.1.4 Discarded approaches
-  * 2 Références
-    * 2.1 Software
-  * 3 Stuff to buy next
+[[!toc levels=3]]
 
 # My rig
 
@@ -60,34 +50,43 @@ wiki.net/index.php?title=File:Quad-sketch0001.jpg "Enlarge")
 
 A sketch of my antenna
 
-Mast  
----  
-Part  |  Amount  |  Where  |  Weight  |  Price  |  Notes   
-tripod  |  1  |  addison  |  ?  |  45.56$  |  ~2' x 2'   
-3m steel pole  |  1  |  downstairs  |  ?  |  0$  |  to connect the boom and tripod, 1-1¼"   
-sandbags  |  3  |  home depot  |  30kg ea.  |  10.76$  |  one per leg   
-plywood  |  3'x4'  |  attic  |  ?  |  0$  |  ~~1' x 2' used for the beam/pole fitting~~ \- found some   
-Mast clamps (1"3/4) |  4  |  hardware store  |  ?  |  4.92$  |  to connect the boom with the mast, bigger mast, 1.23¢ ea   
-Mast clamps (1"3/8) |  2  |  hardware store  |  ?  |  1.60$  |  to connect the boom with the mast, 80¢ ea   
-guy rope  |  2x100'  |  hardware store  |  ?  |  63.98$  |  to secure the mast, using poplypropylene/nylon rope, each line should support around 300lbs of pressure, enough for the 500lbs of pressure with a 90mph wind   
+Mast:
+
+| Part                | Amount | Where          | Weight   | Price  | Notes                                                                                                                                                           |
+|---------------------|--------|----------------|----------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| tripod              | 1      | addison        | ?        | 45.56$ | ~2' x 2'                                                                                                                                                        |
+| 3m steel pole       | 1      | downstairs     | ?        | 0$     | to connect the boom and tripod, 1-1¼"                                                                                                                           |
+| sandbags            | 3      | home depot     | 30kg ea. | 10.76$ | one per leg                                                                                                                                                     |
+| plywood             | 3'x4'  | attic          | ?        | 0$     | ~~1' x 2' used for the beam/pole fitting~~ \- found some                                                                                                        |
+| Mast clamps (1"3/4) | 4      | hardware store | ?        | 4.92$  | to connect the boom with the mast, bigger mast, 1.23¢ ea                                                                                                        |
+| Mast clamps (1"3/8) | 2      | hardware store | ?        | 1.60$  | to connect the boom with the mast, 80¢ ea                                                                                                                       |
+| guy rope            | 2x100' | hardware store | ?        | 63.98$ | to secure the mast, using poplypropylene/nylon rope, each line should support around 300lbs of pressure, enough for the 500lbs of pressure with a 90mph wind    |
+
 Antenna and accessories  
-Part  |  Amount  |  Where  |  Weight  |  Price  |  Notes   
-1" hose clamps  |  8  |  home depot  |  ?  |  ?  |  to tie the antenna line to the spreaders   
-tie wraps, small  |  100  |  hardware store  |  ?  |  3.09$  |  to tie the antenna line to the spreaders   
-2"½ hose clamps  |  19  |  hardware store  |  ?  |  26.41$  |  to tie-up the boom together (2), the spreaders to the spider (8) and the spreaders themselves (8), +spare (1)   
-8"x½" plastic tube  |  1  |  home depot  |  ~0  |  0$ |  for spreader/wire attachment - found some   
-15' 1¼" fiberglass  |  8  |  [mgs4u.com](http://web.archive.org/web/20190209012421/http://www.mgs4u.com/fiberglass-cubical-quad-spreaders.htm) (type 1)  |  17.6lbs  |  ~160$ - actual: 255$CAD (!!)  |  4.4lbs ea, unit price 19.80$   
-Clamps  |  10-pack  |  [dxengineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=1868&PLID=161&SecID=129&DeptID=36&PartNo=DXE-CPC-375) |  ~0  |  14.95$  |  to secure the feedline   
-4m aluminium boom  |  2  |  [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=5107&PLID=364&SecID=136&DeptID=43&PartNo=DXE-AT1492) |  2.5lbs  |  24.90$  |   
-500' of wiring  |  1  |  [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=2012&PLID=159&SecID=77&DeptID=40&PartNo=DXE-ANTW-500) |  N/A  |  74.95$  |  only parts of this will be used (120' to be more precise)   
-U clamps and bolts  |  4  |  ~~home depot~~ [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/) |  ~0  |  0$  |  included in the beam/pole fitting   
-boom/pole plate  |  1  |  [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/) |  ?  |  45$ + 30$ shipping  |  need to drill holes, includes reinforcement pole   
-spider  |  2  |  [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/) |  2.3lbs  |  70$USD  |  14oz ea. 40$/ea, seems strong and sturdy, and Rick helped me through email, let's try!   
+
+| Part               | Amount  | Where                                                                                                                                                      | Weight  | Price                        | Notes                                                                                                            |
+|--------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|------------------------------|------------------------------------------------------------------------------------------------------------------|
+| 1" hose clamps     | 8       | home depot                                                                                                                                                 | ?       | ?                            | to tie the antenna line to the spreaders                                                                         |
+| tie wraps, small   | 100     | hardware store                                                                                                                                             | ?       | 3.09$                        | to tie the antenna line to the spreaders                                                                         |
+| 2"½ hose clamps    | 19      | hardware store                                                                                                                                             | ?       | 26.41$                       | to tie-up the boom together (2), the spreaders to the spider (8) and the spreaders themselves (8), +spare (1)    |
+| 8"x½" plastic tube | 1       | home depot                                                                                                                                                 | ~0      | 0$                           | for spreader/wire attachment - found some                                                                        |
+| 15' 1¼" fiberglass | 8       | [mgs4u.com](http://web.archive.org/web/20190209012421/http://www.mgs4u.com/fiberglass-cubical-quad-spreaders.htm) (type 1)                                 | 17.6lbs | ~160$ - actual: 255$CAD (!!) | 4.4lbs ea, unit price 19.80$                                                                                     |
+| Clamps             | 10-pack | [dxengineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=1868&PLID=161&SecID=129&DeptID=36&PartNo=DXE-CPC-375)  | ~0      | 14.95$                       | to secure the feedline                                                                                           |
+| 4m aluminium boom  | 2       | [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=5107&PLID=364&SecID=136&DeptID=43&PartNo=DXE-AT1492)  | 2.5lbs  | 24.90$                       |                                                                                                                  |
+| 500' of wiring     | 1       | [DX engineering](http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=2012&PLID=159&SecID=77&DeptID=40&PartNo=DXE-ANTW-500) | N/A     | 74.95$                       | only parts of this will be used (120' to be more precise)                                                        |
+| U clamps and bolts | 4       | ~~home depot~~ [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                           | ~0      | 0$                           | included in the beam/pole fitting                                                                                |
+| boom/pole plate    | 1       | [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                                          | ?       | 45$ + 30$ shipping           | need to drill holes, includes reinforcement pole                                                                 |
+| spider             | 2       | [Rick Adams](http://web.archive.org/web/20190209012421/http://www.rickadams.net/)                                                                          | 2.3lbs  | 70$USD                       | 14oz ea. 40$/ea, seems strong and sturdy, and Rick helped me through email, let's try!                           |
+
 Antenna (parts in shipping)  
+
 Nothing!  
+
 Antenna (parts to order)  
-Part  |  Amount  |  Where  |  Weight  |  Price  |  Notes   
-more sandbags?  |  3  |  hardware store  |  ?  |  ?  |  to attach the tower?   
+
+| Part           | Amount | Where          | Weight | Price | Notes                   |
+|----------------|--------|----------------|--------|-------|-------------------------|
+| more sandbags? | 3      | hardware store | ?      | ?     | to attach the tower?    |
   
 Total planned price: ~373.77$
 
@@ -109,14 +108,14 @@ Waiting for parts to be shipped and for the rain to stop.
 Those parts were considered during the design phase but were discarded for
 various reasons.
 
-Part  |  Amount  |  Where  |  Price  |  Notes   
----|---|---|---|---  
-welding wire aluminium  |  270' spool  |  [canadian tire](http://web.archive.org/web/20190209012421/http://www.canadiantire.ca/AST/browse/6/Tools/WeldingSoldering/AccessoriesRodsWire.jsp)?  |  ?  |  example: [Aluminium 5356 MIG alloy](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx) \- too hard to find   
-~~4m 1"PVC~~ |  1  |  home depot  |  ?  |  according to Rick, this could create interference   
-~~5-way 1"PVC conn.~~ |  2  |  [creativeshelters.com](http://web.archive.org/web/20190209012421/http://www.creativeshelters.com/Fittings/PVC-Structure-Fitting.aspx) |  3.08$  |  couldn't order, they don't accept canadian zip codes, and shipping is 30$ anyways, and I don't trust PVC   
-~~1"x½" copper pipe~~ |  8  |  home depot  |  ~5$  |  we'll use tie-wraps instead for spreader/wire attachment   
-~~8m ½"PVC~~ |  4  |  home depot  |  ?  |  PVC pipes are too flexible to hold properly, we need fiberglass   
-~~AUG 12 copper wire~~ |  44.4m  |  ???  |  29.32$ (addison?) 48.64$ pour 2x12 22m (dubo)  |  ~~addison doesn't have bare wire, and[dubo](http://web.archive.org/web/20190209012421/http://www.dubo.qc.ca/) only has bare up to 8 gage, too big (it's mainly for grounds)~~ copper wire never comes bare, and i may have better luck finding mig soldering wire like [Aluminium-5356](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx)  
+| Part                   | Amount     | Where                                                                                                                                              | Price                                         | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+|------------------------|------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| welding wire aluminium | 270' spool | [canadian tire](http://web.archive.org/web/20190209012421/http://www.canadiantire.ca/AST/browse/6/Tools/WeldingSoldering/AccessoriesRodsWire.jsp)? | ?                                             | example: [Aluminium 5356 MIG alloy](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx) \- too hard to find                                                                                                                                                                                                                                   |
+| ~~4m 1"PVC~~           | 1          | home depot                                                                                                                                         | ?                                             | according to Rick, this could create interference                                                                                                                                                                                                                                                                                                                                                                                     |
+| ~~5-way 1"PVC conn.~~  | 2          | [creativeshelters.com](http://web.archive.org/web/20190209012421/http://www.creativeshelters.com/Fittings/PVC-Structure-Fitting.aspx)              | 3.08$                                         | couldn't order, they don't accept canadian zip codes, and shipping is 30$ anyways, and I don't trust PVC                                                                                                                                                                                                                                                                                                                              |
+| ~~1"x½" copper pipe~~  | 8          | home depot                                                                                                                                         | ~5$                                           | we'll use tie-wraps instead for spreader/wire attachment                                                                                                                                                                                                                                                                                                                                                                              |
+| ~~8m ½"PVC~~           | 4          | home depot                                                                                                                                         | ?                                             | PVC pipes are too flexible to hold properly, we need fiberglass                                                                                                                                                                                                                                                                                                                                                                       |
+| ~~AUG 12 copper wire~~ | 44.4m      | ???                                                                                                                                                | 29.32$ (addison?) 48.64$ pour 2x12 22m (dubo) | ~~addison doesn't have bare wire, and[dubo](http://web.archive.org/web/20190209012421/http://www.dubo.qc.ca/) only has bare up to 8 gage, too big (it's mainly for grounds)~~ copper wire never comes bare, and i may have better luck finding mig soldering wire like [Aluminium-5356](http://web.archive.org/web/20190209012421/http://www.harrisproductsgroup.com/en/Products/Alloys/Welding/Aluminum-Alloy/Alloy-5356-MIG.aspx)   |
   
 I had a lot of problems finding proper parts (pipes, raw materials like wiring
 and so on) in Montreal, which made building the antenna quite tricky, as a lot
@@ -158,21 +157,11 @@ wiki.net/index.php?title=Software "Software")
     * [http://packages.debian.org/gpredict](http://web.archive.org/web/20190209012421/http://packages.debian.org/gpredict)
     * [http://packages.debian.org/minimuf](http://web.archive.org/web/20190209012421/http://packages.debian.org/minimuf) \- allows you to compute the WikiPedia:MUF depending on salar activity and so on, but has an unusuable interface (you need to enter a series of digits... how about a GUI?!)
     * [http://packages.debian.org/gcb](http://web.archive.org/web/20190209012421/http://packages.debian.org/gcb) \- calculates the right angle for your antenna
-    * [http://packages.debian.org/xplanet](http://web.archive.org/web/20190209012421/http://packages.debian.org/xplanet) \- can show azimuthal projections of the earth on your background, screensaver or window - I use this in myxsession:
-
-    
-    
-      xplanet -latitude 45.5 -longitude -73.66 -wait 60 -label -projection azimuthal -fork -radius 90
-    
-
+    * [http://packages.debian.org/xplanet](http://web.archive.org/web/20190209012421/http://packages.debian.org/xplanet) \- can show azimuthal projections of the earth on your background, screensaver or window - I use this in myxsession: `xplanet -latitude 45.5 -longitude -73.66 -wait 60 -label -projection azimuthal -fork -radius 90`
   * testing tools 
-    * [http://packages.debian.org/ibp](http://web.archive.org/web/20190209012421/http://packages.debian.org/ibp) \- very useful for training to receive distant comms: show you which beacon is active when, with a map
-
-    
-    
-      ibp FN35EM
-    
-
+    * [http://packages.debian.org/ibp](http://web.archive.org/web/20190209012421/http://packages.debian.org/ibp) \- very useful for training
+      to receive distant comms: show you which beacon is active when,
+      with a map `ibp FN35EM`
   * packet: 
     * [http://packages.debian.org/gmfsk](http://web.archive.org/web/20190209012421/http://packages.debian.org/gmfsk) \- for packet radio
     * [http://packages.debian.org/fldigi](http://web.archive.org/web/20190209012421/http://packages.debian.org/fldigi) \- also looks interesting and fairly complete, not tested

convert to markdown from the HTML version
diff --git a/services/ham.html b/services/ham.html
deleted file mode 100644
index 476215e8..00000000
--- a/services/ham.html
+++ /dev/null
@@ -1,407 +0,0 @@
-<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><p>I am <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/https://wiki.koumbit.net/TheAnarcat">anarcat</a>. I just passed my basic qualitification in Canada, with honors (so I can operate HF), yay! I am now AKA VA2ANK. -- <strong class="selflink">TheAnarcat</strong> 21:50, 10 October 2010 (CDT)
-</p>
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
-<ul>
-<li class="toclevel-1 tocsection-1"><a href="#My_rig"><span class="tocnumber">1</span> <span class="toctext">My rig</span></a>
-<ul>
-<li class="toclevel-2 tocsection-2"><a href="#New_quad_antenna_project"><span class="tocnumber">1.1</span> <span class="toctext">New quad antenna project</span></a>
-<ul>
-<li class="toclevel-3 tocsection-3"><a href="#Parts_list"><span class="tocnumber">1.1.1</span> <span class="toctext">Parts list</span></a></li>
-<li class="toclevel-3 tocsection-4"><a href="#Notes"><span class="tocnumber">1.1.2</span> <span class="toctext">Notes</span></a></li>
-<li class="toclevel-3 tocsection-5"><a href="#Current_blocker.28s.29"><span class="tocnumber">1.1.3</span> <span class="toctext">Current blocker(s)</span></a></li>
-<li class="toclevel-3 tocsection-6"><a href="#Discarded_approaches"><span class="tocnumber">1.1.4</span> <span class="toctext">Discarded approaches</span></a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toclevel-1 tocsection-7"><a href="#R.C3.A9f.C3.A9rences"><span class="tocnumber">2</span> <span class="toctext">Références</span></a>
-<ul>
-<li class="toclevel-2 tocsection-8"><a href="#Software"><span class="tocnumber">2.1</span> <span class="toctext">Software</span></a></li>
-</ul>
-</li>
-<li class="toclevel-1 tocsection-9"><a href="#Stuff_to_buy_next"><span class="tocnumber">3</span> <span class="toctext">Stuff to buy next</span></a></li>
-</ul>
-</div>
-
-<h1><span class="mw-headline" id="My_rig">My rig</span></h1>
-<ul><li> Transceiver:
-<ul><li> Yaesu FT-100D - <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;item=180565016542&amp;ssPageName=STRK:MEWNX:IT">499$ on ebay</a> - actual price: ~570$ (to be verified)</li></ul></li>
-<li> Antennas and gizmos at radioworld, first pass:
-<ul><li> MFJ-941E - antenna tuner and switch <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=2885">155$ at radioworld</a></li>
-<li> MAP-G5RV 1/2 - G5RV 50' dipole antenna (10-40m) <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?manufacturers_id=121&amp;products_id=7788">85$ at radioworld</a></li>
-<li> <del>J146/440 - dual band VHF/UHF antenna (2m-70cm) <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_191_193&amp;products_id=886">40$ at radioworld</a></del> /!\ backorder</li>
-<li> 100' of RG8 coax cabling <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&amp;products_id=6831">65$ at radioworld</a></li>
-<li> <del>MFJ-260C - 300W dummy load  0-150Mhz dry <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=8098">50$ at radiowrodl</a></del> built into the tuner now</li>
-<li> 3 PL259 connectors <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&amp;products_id=3244">4$ at radioworld</a></li>
-<li> Total, incl. shipping: 452.35$</li></ul></li>
-<li> Ferrites: ~40$ + 24$ customs fees (PN: 2643167851 from <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.ibselectronics.com/search_r.asp?mfgpn=2643167851">IBS electronics</a>)</li>
-<li> A shitload of PL259 connectors, usually around 2$ each</li>
-<li> Documentation:
-<ul><li> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.coaxpublications.ca/">Canadian Amateur Radio Basic Qualification Study Guide</a>: 40$</li>
-<li> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/https://www.rac.ca/store/operating-manual.htm">The RAC Operating Manual</a>: 42$ (note: i didn't find this one really useful)</li>
-<li> ARRL Handbook 2011, Softcover: 49.95$USD</li>
-<li> ARRL Antenna Book: 44.95$USD</li></ul></li>
-<li> Total rig cost so far: 1242.60$ (not counting the quad project below)</li></ul>
-<p>I uploaded a few photos <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://photos.anarcat.koumbit.org/main.php?g2_itemId=4619">in this album</a>.
-</p>
-<h2><span class="mw-headline" id="New_quad_antenna_project">New quad antenna project</span></h2>
-<p>I am working on building a new antenna. It is based on <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.hamuniverse.com/n1uue2el1011quad.html">this design</a>, which uses a mix of PVC pipes and fiberglass rods, except I adapt it to a 20m antenna and replace the PVC with aluminium for solidity. It should be possible to take the antenna apart and rebuild it if necessary.
-</p>
-<h3><span class="mw-headline" id="Parts_list">Parts list</span></h3>
-<div class="thumb tright"><div class="thumbinner" style="width:402px;"><a href="/web/20190209012421/http://www.amateur-radio-wiki.net/index.php?title=File:Quad-sketch0001.jpg" class="image"><img alt="" src="/web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/400px-Quad-sketch0001.jpg" width="400" height="527" class="thumbimage" srcset="/web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/600px-Quad-sketch0001.jpg 1.5x, /web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/800px-Quad-sketch0001.jpg 2x"></a>  <div class="thumbcaption"><div class="magnify"><a href="/web/20190209012421/http://www.amateur-radio-wiki.net/index.php?title=File:Quad-sketch0001.jpg" class="internal" title="Enlarge"></a></div>A sketch of my antenna</div></div></div>
-<table class="wikitable">
-<caption>
-</caption>
-<tbody><tr>
-<th colspan="6">Mast
-</th>
-</tr></tbody><caption>
-</caption>
-<tbody><tr><th> Part               </th>
-<th> Amount </th>
-<th> Where </th>
-<th> Weight </th>
-<th> Price </th>
-<th> Notes
-</th></tr>
-<tr>
-<td> tripod             </td>
-<td> 1    </td>
-<td> addison    </td>
-<td>&nbsp;? </td>
-<td> 45.56$ </td>
-<td> ~2' x 2'
-</td></tr>
-<tr>
-<td> 3m steel pole      </td>
-<td> 1    </td>
-<td> downstairs </td>
-<td>&nbsp;? </td>
-<td> 0$ </td>
-<td> to connect the boom and tripod, 1-1¼"
-</td></tr>
-<tr>
-<td> sandbags           </td>
-<td> 3    </td>
-<td> home depot </td>
-<td> 30kg ea. </td>
-<td> 10.76$ </td>
-<td> one per leg
-</td></tr>
-<tr>
-<td> plywood            </td>
-<td> 3'x4' </td>
-<td> attic </td>
-<td>&nbsp;? </td>
-<td> 0$ </td>
-<td> <s>1' x 2' used for the beam/pole fitting</s> - found some
-</td></tr>
-<tr>
-<td> Mast clamps (1"3/4)</td>
-<td> 4 </td>
-<td> hardware store </td>
-<td>&nbsp;? </td>
-<td> 4.92$ </td>
-<td> to connect the boom with the mast, bigger mast, 1.23¢ ea
-</td></tr>
-<tr>
-<td> Mast clamps (1"3/8)</td>
-<td> 2 </td>
-<td> hardware store </td>
-<td>&nbsp;? </td>
-<td> 1.60$ </td>
-<td> to connect the boom with the mast, 80¢ ea
-</td></tr>
-<tr>
-<td> guy rope           </td>
-<td> 2x100' </td>
-<td> hardware store </td>
-<td>&nbsp;? </td>
-<td> 63.98$ </td>
-<td> to secure the mast, using poplypropylene/nylon rope, each line should support around 300lbs of pressure, enough for the 500lbs of pressure with a 90mph wind
-</td>
-</tr></tbody><caption>
-</caption>
-<tbody><tr><th colspan="6">Antenna and accessories
-</th>
-</tr></tbody><caption>
-</caption>
-<tbody><tr><th> Part               </th>
-<th> Amount </th>
-<th> Where </th>
-<th> Weight </th>
-<th> Price </th>
-<th> Notes
-</th></tr>
-<tr>
-<td> 1" hose clamps        </td>
-<td> 8    </td>
-<td> home depot </td>
-<td>&nbsp;? </td>
-<td>&nbsp;? </td>
-<td> to tie the antenna line to the spreaders
-</td></tr>
-<tr>
-<td> tie wraps, small   </td>
-<td> 100 </td>
-<td> hardware store </td>
-<td>&nbsp;? </td>
-<td> 3.09$ </td>
-<td> to tie the antenna line to the spreaders
-</td></tr>
-<tr>
-<td> 2"½ hose clamps    </td>
-<td> 19 </td>
-<td> hardware store </td>
-<td>&nbsp;? </td>
-<td> 26.41$ </td>
-<td> to tie-up the boom together (2), the spreaders to the spider (8) and the spreaders themselves (8), +spare (1)
-</td></tr>
-<tr>
-<td> 8"x½" plastic tube </td>
-<td> 1    </td>
-<td> home depot </td>
-<td> ~0 </td>
-<td>  0$</td>
-<td> for spreader/wire attachment - found some
-</td></tr>
-<tr>
-<td> 15' 1¼" fiberglass </td>
-<td> 8    </td>
-<td> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.mgs4u.com/fiberglass-cubical-quad-spreaders.htm">mgs4u.com</a> (type 1) </td>
-<td> 17.6lbs </td>
-<td> ~160$ - actual: 255$CAD (!!)  </td>
-<td> 4.4lbs ea, unit price 19.80$
-</td></tr>
-<tr>
-<td> Clamps     </td>
-<td> 10-pack </td>
-<td> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=1868&amp;PLID=161&amp;SecID=129&amp;DeptID=36&amp;PartNo=DXE-CPC-375">dxengineering</a> </td>
-<td> ~0 </td>
-<td> 14.95$ </td>
-<td> to secure the feedline
-</td></tr>
-<tr>
-<td> 4m aluminium boom  </td>
-<td> 2     </td>
-<td>  <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=5107&amp;PLID=364&amp;SecID=136&amp;DeptID=43&amp;PartNo=DXE-AT1492">DX engineering</a> </td>
-<td> 2.5lbs </td>
-<td> 24.90$ </td>
-<td>
-</td></tr>
-<tr>
-<td> 500' of wiring     </td>
-<td> 1     </td>

(Diff truncated)
import my ham radio wiki homepage from archive.org after destruction
Source: http://web.archive.org/web/20190208232135/https://www.amateur-radio-wiki.net/index.php?title=User:TheAnarcat&action=edit
diff --git a/services/ham.html b/services/ham.html
new file mode 100644
index 00000000..476215e8
--- /dev/null
+++ b/services/ham.html
@@ -0,0 +1,407 @@
+<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><p>I am <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/https://wiki.koumbit.net/TheAnarcat">anarcat</a>. I just passed my basic qualitification in Canada, with honors (so I can operate HF), yay! I am now AKA VA2ANK. -- <strong class="selflink">TheAnarcat</strong> 21:50, 10 October 2010 (CDT)
+</p>
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#My_rig"><span class="tocnumber">1</span> <span class="toctext">My rig</span></a>
+<ul>
+<li class="toclevel-2 tocsection-2"><a href="#New_quad_antenna_project"><span class="tocnumber">1.1</span> <span class="toctext">New quad antenna project</span></a>
+<ul>
+<li class="toclevel-3 tocsection-3"><a href="#Parts_list"><span class="tocnumber">1.1.1</span> <span class="toctext">Parts list</span></a></li>
+<li class="toclevel-3 tocsection-4"><a href="#Notes"><span class="tocnumber">1.1.2</span> <span class="toctext">Notes</span></a></li>
+<li class="toclevel-3 tocsection-5"><a href="#Current_blocker.28s.29"><span class="tocnumber">1.1.3</span> <span class="toctext">Current blocker(s)</span></a></li>
+<li class="toclevel-3 tocsection-6"><a href="#Discarded_approaches"><span class="tocnumber">1.1.4</span> <span class="toctext">Discarded approaches</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-7"><a href="#R.C3.A9f.C3.A9rences"><span class="tocnumber">2</span> <span class="toctext">Références</span></a>
+<ul>
+<li class="toclevel-2 tocsection-8"><a href="#Software"><span class="tocnumber">2.1</span> <span class="toctext">Software</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-9"><a href="#Stuff_to_buy_next"><span class="tocnumber">3</span> <span class="toctext">Stuff to buy next</span></a></li>
+</ul>
+</div>
+
+<h1><span class="mw-headline" id="My_rig">My rig</span></h1>
+<ul><li> Transceiver:
+<ul><li> Yaesu FT-100D - <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;item=180565016542&amp;ssPageName=STRK:MEWNX:IT">499$ on ebay</a> - actual price: ~570$ (to be verified)</li></ul></li>
+<li> Antennas and gizmos at radioworld, first pass:
+<ul><li> MFJ-941E - antenna tuner and switch <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=2885">155$ at radioworld</a></li>
+<li> MAP-G5RV 1/2 - G5RV 50' dipole antenna (10-40m) <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?manufacturers_id=121&amp;products_id=7788">85$ at radioworld</a></li>
+<li> <del>J146/440 - dual band VHF/UHF antenna (2m-70cm) <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_191_193&amp;products_id=886">40$ at radioworld</a></del> /!\ backorder</li>
+<li> 100' of RG8 coax cabling <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&amp;products_id=6831">65$ at radioworld</a></li>
+<li> <del>MFJ-260C - 300W dummy load  0-150Mhz dry <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?products_id=8098">50$ at radiowrodl</a></del> built into the tuner now</li>
+<li> 3 PL259 connectors <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://radioworld.ca/product_info.php?cPath=73_394&amp;products_id=3244">4$ at radioworld</a></li>
+<li> Total, incl. shipping: 452.35$</li></ul></li>
+<li> Ferrites: ~40$ + 24$ customs fees (PN: 2643167851 from <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.ibselectronics.com/search_r.asp?mfgpn=2643167851">IBS electronics</a>)</li>
+<li> A shitload of PL259 connectors, usually around 2$ each</li>
+<li> Documentation:
+<ul><li> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.coaxpublications.ca/">Canadian Amateur Radio Basic Qualification Study Guide</a>: 40$</li>
+<li> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/https://www.rac.ca/store/operating-manual.htm">The RAC Operating Manual</a>: 42$ (note: i didn't find this one really useful)</li>
+<li> ARRL Handbook 2011, Softcover: 49.95$USD</li>
+<li> ARRL Antenna Book: 44.95$USD</li></ul></li>
+<li> Total rig cost so far: 1242.60$ (not counting the quad project below)</li></ul>
+<p>I uploaded a few photos <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://photos.anarcat.koumbit.org/main.php?g2_itemId=4619">in this album</a>.
+</p>
+<h2><span class="mw-headline" id="New_quad_antenna_project">New quad antenna project</span></h2>
+<p>I am working on building a new antenna. It is based on <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.hamuniverse.com/n1uue2el1011quad.html">this design</a>, which uses a mix of PVC pipes and fiberglass rods, except I adapt it to a 20m antenna and replace the PVC with aluminium for solidity. It should be possible to take the antenna apart and rebuild it if necessary.
+</p>
+<h3><span class="mw-headline" id="Parts_list">Parts list</span></h3>
+<div class="thumb tright"><div class="thumbinner" style="width:402px;"><a href="/web/20190209012421/http://www.amateur-radio-wiki.net/index.php?title=File:Quad-sketch0001.jpg" class="image"><img alt="" src="/web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/400px-Quad-sketch0001.jpg" width="400" height="527" class="thumbimage" srcset="/web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/600px-Quad-sketch0001.jpg 1.5x, /web/20190209012421im_/http://www.amateur-radio-wiki.net/images/thumb/7/70/Quad-sketch0001.jpg/800px-Quad-sketch0001.jpg 2x"></a>  <div class="thumbcaption"><div class="magnify"><a href="/web/20190209012421/http://www.amateur-radio-wiki.net/index.php?title=File:Quad-sketch0001.jpg" class="internal" title="Enlarge"></a></div>A sketch of my antenna</div></div></div>
+<table class="wikitable">
+<caption>
+</caption>
+<tbody><tr>
+<th colspan="6">Mast
+</th>
+</tr></tbody><caption>
+</caption>
+<tbody><tr><th> Part               </th>
+<th> Amount </th>
+<th> Where </th>
+<th> Weight </th>
+<th> Price </th>
+<th> Notes
+</th></tr>
+<tr>
+<td> tripod             </td>
+<td> 1    </td>
+<td> addison    </td>
+<td>&nbsp;? </td>
+<td> 45.56$ </td>
+<td> ~2' x 2'
+</td></tr>
+<tr>
+<td> 3m steel pole      </td>
+<td> 1    </td>
+<td> downstairs </td>
+<td>&nbsp;? </td>
+<td> 0$ </td>
+<td> to connect the boom and tripod, 1-1¼"
+</td></tr>
+<tr>
+<td> sandbags           </td>
+<td> 3    </td>
+<td> home depot </td>
+<td> 30kg ea. </td>
+<td> 10.76$ </td>
+<td> one per leg
+</td></tr>
+<tr>
+<td> plywood            </td>
+<td> 3'x4' </td>
+<td> attic </td>
+<td>&nbsp;? </td>
+<td> 0$ </td>
+<td> <s>1' x 2' used for the beam/pole fitting</s> - found some
+</td></tr>
+<tr>
+<td> Mast clamps (1"3/4)</td>
+<td> 4 </td>
+<td> hardware store </td>
+<td>&nbsp;? </td>
+<td> 4.92$ </td>
+<td> to connect the boom with the mast, bigger mast, 1.23¢ ea
+</td></tr>
+<tr>
+<td> Mast clamps (1"3/8)</td>
+<td> 2 </td>
+<td> hardware store </td>
+<td>&nbsp;? </td>
+<td> 1.60$ </td>
+<td> to connect the boom with the mast, 80¢ ea
+</td></tr>
+<tr>
+<td> guy rope           </td>
+<td> 2x100' </td>
+<td> hardware store </td>
+<td>&nbsp;? </td>
+<td> 63.98$ </td>
+<td> to secure the mast, using poplypropylene/nylon rope, each line should support around 300lbs of pressure, enough for the 500lbs of pressure with a 90mph wind
+</td>
+</tr></tbody><caption>
+</caption>
+<tbody><tr><th colspan="6">Antenna and accessories
+</th>
+</tr></tbody><caption>
+</caption>
+<tbody><tr><th> Part               </th>
+<th> Amount </th>
+<th> Where </th>
+<th> Weight </th>
+<th> Price </th>
+<th> Notes
+</th></tr>
+<tr>
+<td> 1" hose clamps        </td>
+<td> 8    </td>
+<td> home depot </td>
+<td>&nbsp;? </td>
+<td>&nbsp;? </td>
+<td> to tie the antenna line to the spreaders
+</td></tr>
+<tr>
+<td> tie wraps, small   </td>
+<td> 100 </td>
+<td> hardware store </td>
+<td>&nbsp;? </td>
+<td> 3.09$ </td>
+<td> to tie the antenna line to the spreaders
+</td></tr>
+<tr>
+<td> 2"½ hose clamps    </td>
+<td> 19 </td>
+<td> hardware store </td>
+<td>&nbsp;? </td>
+<td> 26.41$ </td>
+<td> to tie-up the boom together (2), the spreaders to the spider (8) and the spreaders themselves (8), +spare (1)
+</td></tr>
+<tr>
+<td> 8"x½" plastic tube </td>
+<td> 1    </td>
+<td> home depot </td>
+<td> ~0 </td>
+<td>  0$</td>
+<td> for spreader/wire attachment - found some
+</td></tr>
+<tr>
+<td> 15' 1¼" fiberglass </td>
+<td> 8    </td>
+<td> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.mgs4u.com/fiberglass-cubical-quad-spreaders.htm">mgs4u.com</a> (type 1) </td>
+<td> 17.6lbs </td>
+<td> ~160$ - actual: 255$CAD (!!)  </td>
+<td> 4.4lbs ea, unit price 19.80$
+</td></tr>
+<tr>
+<td> Clamps     </td>
+<td> 10-pack </td>
+<td> <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=1868&amp;PLID=161&amp;SecID=129&amp;DeptID=36&amp;PartNo=DXE-CPC-375">dxengineering</a> </td>
+<td> ~0 </td>
+<td> 14.95$ </td>
+<td> to secure the feedline
+</td></tr>
+<tr>
+<td> 4m aluminium boom  </td>
+<td> 2     </td>
+<td>  <a rel="nofollow" class="external text" href="http://web.archive.org/web/20190209012421/http://www.dxengineering.com/Parts.asp?ID=5107&amp;PLID=364&amp;SecID=136&amp;DeptID=43&amp;PartNo=DXE-AT1492">DX engineering</a> </td>
+<td> 2.5lbs </td>
+<td> 24.90$ </td>
+<td>
+</td></tr>
+<tr>
+<td> 500' of wiring     </td>
+<td> 1     </td>

(Diff truncated)
try to fix calendes listing
diff --git a/communication/photo.mdwn b/communication/photo.mdwn
index 6b57bcd3..40ed1379 100644
--- a/communication/photo.mdwn
+++ b/communication/photo.mdwn
@@ -42,4 +42,4 @@ Calendrier
 J'ai fait un projet élaboré de calendrier regroupant mes meilleures
 photo de l'année, incluant montage et impression, voir:
 
-[[!map pages="page(calendes/*)"]]
+[[!map pages="page(communication/photo/calendes/*)"]]

meshtastic: more notes
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 0b85923f..9807afa9 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -1,4 +1,5 @@
-I started playing around with [meshtastic](https://meshtastic.org/).
+After reading this [LWN review][] and being poked a few times by
+friends, I started playing around with [meshtastic](https://meshtastic.org/).
 
 [[!toc levels=3]]
 
@@ -274,7 +275,7 @@ like forward-secrecy, authentication, or integrity, see the
 threat vector as, for example, if someone knows you wrote "hi" to a
 channel, even if they don't have the encryption key, they can replay
 that "hi" by sending the exact same encrypted packet. Security is
-hard.
+hard. It seems like [Reticulum does this better](https://reticulum.network/crypto.html).
 
 Nodes often transmit other telemetry like GPS location, temperature,
 and other sensors, by default. GPS location precision can be reduced
@@ -314,15 +315,25 @@ mode relatively easily.
 - <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/>
-- [Canada mesh map](https://map.mt.gt/)
-- [Canadaverse mesh wiki](https://wiki.mt.gt/), there's also a [Telegram group for Quebec](https://t.me/meshtQuebec).
-- [LWN review](https://lwn.net/Articles/1009782/) (2025)
+- [LWN review][] (2025)
 - [Another meshtastic guide](https://anarchosolarpunk.substack.com/p/encryptedcomms)
 
+[LWN review]: 
+
+# Fellow meshes
+
+- [Canadaverse mesh wiki](https://wiki.mt.gt/)
+- [meshtQuebec (Telegram group)](https://t.me/meshtQuebec)
+- [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/), 2274 nodes as of  2025-03-26
+
+See also the [official list of local groups](https://meshtastic.org/docs/community/local-groups/).
+
 # Alternative LoRa networks
 
 - <https://mycelium-mesh.net/> (dead?)

another sanoid alternative from debian-social
diff --git a/software/zfs.md b/software/zfs.md
index 83e625d8..3542e583 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -490,6 +490,19 @@ package](https://github.com/Gregy/znapzend-debian). It is written in Perl.
 
 [zelta](https://github.com/bellhyve/zelta) is written in Awk. Incomplete, ran with [zfsnap](https://github.com/zfsnap/zfsnap).
 
+### zfs-autobackup
+
+[zfs-autobackup](https://github.com/psy0rz/zfs_autobackup):
+
+ - Python
+ - v3.3 Dec 2024
+ - 14 contributors
+ - compression
+ - (re-)encryption support
+ - rate-limiting
+ - debug/dry-run mode
+ - progressive thinning
+
 ### Other DIY solutions
 
 twb (`#debian-til`) wrote [cyber-zfs-backup](https://github.com/cyberitsolutions/cyber-zfs-backup). It's short (~300

fun with lost devices
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 857eba67..0b85923f 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -66,6 +66,30 @@ Only downside is it requires a phone, but it's a great device to start
 with as you can just shove it outside for three days and see what you
 pick up.
 
+Make sure you [configure the device](https://wiki.seeedstudio.com/sensecap_t1000_e/#configure-the-parameters): this will bring you
+environment sensors and a neat trick to find the device if lost, see
+below.
+
+### Fun story
+
+I lost that device one day! I had put it on top of a doorframe on the
+second floor to get better range, but when i came back at lunch, it
+wasn't there! I looked around on the floor, couldn't find it... but my
+phone could reach it over Bluetooth, so it was still around somewhere!
+
+So i followed the [upstream guide](https://wiki.seeedstudio.com/sensecap_t1000_e/#configure-the-parameters) to setup the sensors, which
+includes a setting to use the "buzzer" to make sounds when new
+messages are received. So I started sending messages to the card from
+another Meshtastic device (the T-Deck+), which made the thing "buzz",
+and I could hear it!
+
+It wasn't on the second floor anymore though. After about 2 minutes
+and 10 "ping" messages sent, I found it! It had fallen two floors
+down, in the basement stairwell, and here it was ringing... phew!
+
+Seems like it survived the fall too. Amazing little device, and
+Meshtastic success!
+
 ## T-Deck Plus
 
 The [T-Deck Plus](https://lilygo.cc/products/t-deck-plus-1) is another unique platform:

rename card tracker header
diff --git a/services/meshtastic.md b/services/meshtastic.md
index b2de0e85..857eba67 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -33,7 +33,7 @@ should consult for recommendations, particularly on chipset tradeoffs
 
 I explain below some tests I've made with various devices.
 
-## T100-E
+## 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:
 

meshtastic: another base kit
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 26bf7876..b2de0e85 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -130,6 +130,9 @@ Those I haven't tested yet:
 - 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$, they also have an [eink
   dev board](https://heltec.org/project/vision-master-e290/)
+- 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), useful if you
+  already order from RAK wireless and need extra kits
 - [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

more answers about the gateway
diff --git a/services/meshtastic.md b/services/meshtastic.md
index f386f029..26bf7876 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -119,7 +119,11 @@ Those I haven't tested yet:
 - [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
+  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!
 - 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$

meshtastic: expand security issue
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 62a259be..f386f029 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -235,9 +235,15 @@ packets are encrypted, but with a known key.
 *Other* channels seem to use pretty solid encryption, but there's
 likely metadata leakage ("who is talking to who") in cleartext over
 the airwaves that can be easily sniffed by anyone in range. Joining a
-MQTT server makes that even easier to sniff. Note that we're only
-talking about *encryption* here: you don't get things like
-forward-secrecy, authentication, or integrity, see the [encryption section](https://meshtastic.org/docs/overview/encryption/).
+MQTT server makes that even easier to sniff. 
+
+Also note that Meshtastic only does *encryption*: you don't get things
+like forward-secrecy, authentication, or integrity, see the
+[encryption section](https://meshtastic.org/docs/overview/encryption/). This sounds minor, but this is a significant
+threat vector as, for example, if someone knows you wrote "hi" to a
+channel, even if they don't have the encryption key, they can replay
+that "hi" by sending the exact same encrypted packet. Security is
+hard.
 
 Nodes often transmit other telemetry like GPS location, temperature,
 and other sensors, by default. GPS location precision can be reduced

meshtastic: clarify triangulation issues
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 38b01f81..62a259be 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -242,10 +242,15 @@ forward-secrecy, authentication, or integrity, see the [encryption section](http
 Nodes often transmit other telemetry like GPS location, temperature,
 and other sensors, by default. GPS location precision can be reduced
 (say "I'm in Montreal" instead of "I'm at 1234 boulevard
-Saint-Laurent") or completely turned off, but it's still possible to
-triangulate users positions, as with any typical radio
-transmission. The [Meshtastic ZPS](https://github.com/a-f-G-U-C/Meshtastic-ZPS) project even implements this
-deliberately.
+Saint-Laurent") or completely turned off, but it might still possible
+to triangulate device's positions, as with any typical radio
+transmission. LoRa signals are "bursty" and low power, so that's more
+difficult than, say, classic ham radio signals though.
+
+There's a [Meshtastic ZPS](https://github.com/a-f-G-U-C/Meshtastic-ZPS) project that tries to implement GPS-less
+localization, but it's using external positioning systems and
+WiFi/Bluetooth scans instead of a GPS, so it's not triangulation per
+se.
 
 Weak default Bluetooth pairing codes (the "PIN") are often
 [luggage-strength](https://en.wikipedia.org/wiki/Spaceballs) like `1234` or `123456`. They should be changed

meshtastic: moar data
diff --git a/services/meshtastic.md b/services/meshtastic.md
index 3efdc6da..38b01f81 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -12,6 +12,17 @@ I assume I can reach about 1-2km away in the city, but I have yet to
 get solid confirmation on this. I don't have an antenna high up yet so
 this is just with handheld devices.
 
+In theory, range is line of sight which, if you're on top of mountains
+across the Adriatic sea, is over [300 kilometers](https://meshtastic.org/docs/overview/range-tests/). Meshtastic
+[keeps track of records](https://meshtastic.org/docs/overview/range-tests/) like those.
+
+In practice, you can expect single or double-digit range depending on
+your hardware and prominence.
+
+The [site planner](https://site.meshtastic.org/) can help you show what you *should* be able to
+see. Combine with one of the [maps](#maps), you should get a good idea of
+what you *should* be seeing.
+
 # Hardware
 
 Below are some Meshtastic-compatible devices I found interesting.
@@ -84,7 +95,8 @@ found that I need to reboot in "programming mode" to get access to the
 Bluetooth interface to control it from my phone. According to [this
 issue](https://github.com/Xinyuan-LilyGO/T-Deck/issues/64) this might be fixed in newer firmware, but I have a fairly
 recent one and it didn't work. It could be a conflict with WiFi as
-well.
+well. [According to the Meshtastic docs though](https://meshtastic.org/docs/software/meshtastic-ui/#bluetooth-programming-mode), it's just the way
+it is.
 
 All in all, this is a pretty amazing machine and one of the rare
 systems that allows communication without any other external device
@@ -115,8 +127,14 @@ Those I haven't tested yet:
   prominently in Meshtastic docs, also 20$, they also have an [eink
   dev board](https://heltec.org/project/vision-master-e290/)
 - [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/)
+
+Devices without cases typically have 3D designs that can be downloaded
+and printed or bought, see [this list](https://meshtastic.org/docs/category/enclosures/).
 
-# Firmware
+# Software
 
 ## Flashing special firmware
 
@@ -139,6 +157,24 @@ 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.
 
+## 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. 
+
+There's also TUIs like [contact](https://github.com/pdxlocations/contact) (messaging), [connect](https://github.com/pdxlocations/connect)
+(LoRa-less client), [control](https://github.com/pdxlocations/control) (configuration).
+
+## 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.
+
 # MQTT
 
 Meshtastic devices can typically connect to a [MQTT](https://en.wikipedia.org/wiki/MQTT) gateway or
@@ -186,16 +222,22 @@ well.
 
 - Canada MQTT: `mqtt.mt.gt`
 - Meshtastic: `mqtt.meshtastic.org`
+- Liam Cottle's map: `mqtt.meshtastic.liamcottle.net`
+- Mosquitto test server: <https://test.mosquitto.org/> (not specific
+  to Meshtastic!)
+- HiveMQ public broker: `broker.hivemq.com`, see [their documentation](https://www.hivemq.com/mqtt/public-mqtt-broker/)
 
 # Privacy and security
 
 Default security is pretty much non-existent: in the default channel,
 packets are encrypted, but with a known key.
 
-New channels seem to use pretty solid encryption, but there's likely
-metadata leakage ("who is talking to who") in cleartext over the
-airwaves that can be easily sniffed by anyone in range. Joining a MQTT
-server makes that even easier to sniff.
+*Other* channels seem to use pretty solid encryption, but there's
+likely metadata leakage ("who is talking to who") in cleartext over
+the airwaves that can be easily sniffed by anyone in range. Joining a
+MQTT server makes that even easier to sniff. Note that we're only
+talking about *encryption* here: you don't get things like
+forward-secrecy, authentication, or integrity, see the [encryption section](https://meshtastic.org/docs/overview/encryption/).
 
 Nodes often transmit other telemetry like GPS location, temperature,
 and other sensors, by default. GPS location precision can be reduced
@@ -228,15 +270,16 @@ mode relatively easily.
 # Maps
 
 - <https://meshmap.net/>
-- <https://meshmap.app/>
-- <https://meshtastic.liamcottle.net/>
+- <https://meshtastic.liamcottle.net/> (AKA <https://meshmap.app/>)
+- <https://site.meshtastic.org/>
 
 # Links
 
 - <https://www.meshtastic.org/>
 - [Canada mesh map](https://map.mt.gt/)
-- [Canadaverse mesh wiki](https://wiki.mt.gt/)
+- [Canadaverse mesh wiki](https://wiki.mt.gt/), there's also a [Telegram group for Quebec](https://t.me/meshtQuebec).
 - [LWN review](https://lwn.net/Articles/1009782/) (2025)
+- [Another meshtastic guide](https://anarchosolarpunk.substack.com/p/encryptedcomms)
 
 # Alternative LoRa networks
 

tweak rendering
diff --git a/services/meshtastic.md b/services/meshtastic.md
index e2d284cb..3efdc6da 100644
--- a/services/meshtastic.md
+++ b/services/meshtastic.md
@@ -1,3 +1,7 @@
+I started playing around with [meshtastic](https://meshtastic.org/).
+
+[[!toc levels=3]]
+
 # Range
 
 I have, for a brief moment, seen a couple of nodes 20km away. I
@@ -217,15 +221,15 @@ mode relatively easily.
 
 # Monitoring
 
-- https://dash.mt.gt/
-- https://github.com/artiommocrenco/meshtastic-prometheus-exporter
-- https://github.com/tcivie/meshtastic-metrics-exporter
+- <https://dash.mt.gt/>
+- <https://github.com/artiommocrenco/meshtastic-prometheus-exporter>
+- <https://github.com/tcivie/meshtastic-metrics-exporter>
 
 # Maps
 
-- https://meshmap.net/
-- https://meshmap.app/
-- https://meshtastic.liamcottle.net/
+- <https://meshmap.net/>
+- <https://meshmap.app/>
+- <https://meshtastic.liamcottle.net/>
 
 # Links
 

start drafting notes on meshtastic
diff --git a/services/meshtastic.md b/services/meshtastic.md
new file mode 100644
index 00000000..e2d284cb
--- /dev/null
+++ b/services/meshtastic.md
@@ -0,0 +1,241 @@
+# Range
+
+I have, for a brief moment, seen a couple of nodes 20km away. I
+suspect it's because a fellow meshtastic user was traveling nearby and
+relaying those signals, as I haven't seen any more signals in a while.
+
+I assume I can reach about 1-2km away in the city, but I have yet to
+get solid confirmation on this. I don't have an antenna high up yet so
+this is just with handheld devices.
+
+# Hardware
+
+Below are some Meshtastic-compatible devices I found interesting.
+
+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.
+
+## T100-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:
+
+- LoRa
+- WiFi
+- BLE 5.1
+- GNSS
+- temperature sensor
+- accelerometer
+- IP65-rated
+- 85 * 55 * 6.5 mm
+- 32g
+- -20℃ to +60℃
+- magnetic USB-A charging cable
+- 700mAh battery
+
+It has no display or keyboard, only a single button, a LED, and a
+"buzzer", kind of like the old PC speakers.
+
+It's about the size of a credit card, but thicker (it won't fit in your
+wallet, but will definitely fit in your pocket).
+
+My first battery test run lasted 3 days at which point it dropped from
+about 50% battery to zero in about an hour. Possibly the battery
+controller learning some things about itself. Their website specs it
+at 2 days battery. The battery recharged in a little over an hour
+(1h15m or so).
+
+Only downside is it requires a phone, but it's a great device to start
+with as you can just shove it outside for three days and see what you
+pick up.
+
+## T-Deck Plus
+
+The [T-Deck Plus](https://lilygo.cc/products/t-deck-plus-1) is another unique platform:
+
+- 2.4GHz Wifi
+- BLE 5
+- Arduino / ESP32
+- GPS
+- TF Card reader
+- Microphone / speaker
+- 2.8" IPS LCD
+- blackberry-like keybord, trackball
+- 20mm x 72mm x 115mm
+- 2000mAh battery
+- 80$
+
+The "meshtastic" firmware that comes with it is just bad, definitely
+not worth paying for. There's a "pre release" "technical preview"
+(2.6.0.f7afa9a) that is *much* better (see below), although writing
+this I have just noticed than the 2.6.3 "alpha" release.
+
+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 in the Meshtastic app.
+
+There seems to be an issue with the remote control interface: I have
+found that I need to reboot in "programming mode" to get access to the
+Bluetooth interface to control it from my phone. According to [this
+issue](https://github.com/Xinyuan-LilyGO/T-Deck/issues/64) this might be fixed in newer firmware, but I have a fairly
+recent one and it didn't work. It could be a conflict with WiFi as
+well.
+
+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.
+
+## Other devices
+
+Those I haven't tested yet:
+
+- [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$
+- [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$
+- [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
+- 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$, they also have an [eink
+  dev board](https://heltec.org/project/vision-master-e290/)
+- [Lamp hack](https://hackaday.io/project/194509-harbor-breeze-meshtastic-hack)
+
+# Firmware
+
+## Flashing special firmware
+
+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:
+
+<kbd>↑</kbd> <kbd>↑</kbd> <kbd>↓</kbd> <kbd>↓</kbd> <kbd>←</kbd>
+<kbd>→</kbd> <kbd>←</kbd> <kbd>→</kbd> <kbd>b</kbd>
+<kbd>a</kbd>
+
+Yes, on your keyboard. Yes, in the web browser. The back of the page
+will turn black and the extra firmware will be shown in the second
+column. Funky.
+
+In any case, flashing firmware like this only works in Chromium
+because Firefox doesn't support WebUSB (which is perhaps a good
+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.
+
+# MQTT
+
+Meshtastic devices can typically connect to a [MQTT](https://en.wikipedia.org/wiki/MQTT) gateway or
+[broker](https://en.wikipedia.org/wiki/MQTT#MQTT_broker), see the [MQTT module configuration](https://meshtastic.org/docs/configuration/module/mqtt/). This allows
+meshtastic users to connect to other users not reachable over LoRa
+through the internet instead, essentially.
+
+This can be used to extend the mesh around obstacles (like a mountain)
+or across cities (or stupid things like borders).
+
+In MQTT, you can "scope" traffic by using a "[topic](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/)". Those are
+hierarchical. For example, by default meshtastic will setup the topic
+`msh/US` if you're in the `US` region, but you could make that
+`msh/CA` or `msh/CA/YUL` to restrict your scope to `YUL` (Montreal)
+nodes. Someone looking at `msh` or `msh/CA` would see your traffic,
+but you wouldn't see theirs.
+
+You could use an entirely different hierarchy like `foo/` for
+yourself, but you are relying on someone not guessing that topic to
+avoid discovery.
+
+Note that you can still encrypt packets as they go through, but
+packets have a signature that can reveal metadata.
+
+For MQTT to work, your device needs to have internet access, either
+through WiFi or Ethernet. If you're connected over Bluetooth, you can
+also enable the "Client Proxy" mode which will make your phone relay
+the traffic to the MQTT server instead of the device.
+
+You can run your own MQTT server with opensource
+implementations. Debian ships with [mosquitto](https://mosquitto.org/) (C, well
+maintained), for example. See also [Wikipedia's comparison page](https://en.wikipedia.org/wiki/Comparison_of_MQTT_implementations),
+which includes, of course, a Rust rewrite called [RMQTT](https://github.com/rmqtt/rmqtt) (not
+packaged in Debian).
+
+Note that brokers can typically relay messages between them. For
+example, mosquitto supports the concept of [bridges](https://mosquitto.org/man/mosquitto-conf-5.html#idm901) so you could
+use a local broker for your own purposes and relay messages to the
+official brokers (or a subset of them).
+
+The [mqtt(7) manual page provided by mosquitto](https://mosquitto.org/man/mqtt-7.html) is pretty good as
+well.
+
+## Public gateways
+
+- Canada MQTT: `mqtt.mt.gt`
+- Meshtastic: `mqtt.meshtastic.org`
+
+# Privacy and security
+
+Default security is pretty much non-existent: in the default channel,
+packets are encrypted, but with a known key.
+
+New channels seem to use pretty solid encryption, but there's likely
+metadata leakage ("who is talking to who") in cleartext over the
+airwaves that can be easily sniffed by anyone in range. Joining a MQTT
+server makes that even easier to sniff.

(Diff truncated)
automatic federated post of /blog/2022-06-17-matrix-notes
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/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index 948bf023..2caa12af 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -1217,3 +1217,7 @@ internet]]
 
       Those are not the kind of numbers you just "need to convince a
       brother or sister" to grow the network...
+
+
+<!-- posted to the federation on 2025-03-25T10:30:55.309320 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/114223549979121873"]]
\ No newline at end of file

another problem with room admins
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index f76c5178..948bf023 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -428,7 +428,7 @@ federation, when you bridge a room with another network, you inherit
 all the problems from *that* network but without the entire abuse
 control tools from the original network's API...
 
-## Room admins
+## Room admins hijacking
 
 Matrix, in particular, has the problem that room administrators (which
 have the power to redact messages, ban users, and promote other users)
@@ -464,6 +464,43 @@ researchers](https://nebuchadnezzar-megolm.github.io/) that confirmed the flaw I
 [response from Matrix.org](https://matrix.org/blog/2022/09/28/upgrade-now-to-address-encryption-vulns-in-matrix-sdks-and-clients) has been rather underwhelming, with many
 issues still unaddressed.
 
+## Room admin privilege management
+
+Another issue with room admins is the way privileges are
+granted. Those are, essentially, an integer from 0 to 100, with roles
+associated with certain numbers. For example, a normal "user" is level
+0 (or "privilege level zero", PL0), a "moderator" is level 50 (PL50)
+and an "admin" is PL100.
+
+The problem is that once you escalate a user to a certain privilege,
+you can't demote them. If, for example, Alice promotes Bernard to
+PL100, only Bernard can demote himself from that admin
+privilege. Offboarding, then becomes *really* tricky because you
+essentially need to politely ask Bernard to please relegate their
+powers.
+
+In practice, what most people do is delegate the PL100 / admin
+privilege to bots (like `mjolnir`) or role accounts, but this feels
+really subpar and introduces a single point of failure in the access
+control system.
+
+Matrix argue this is by design: "otherwise you'd never be able to add
+any new people at 100 because they'd be able to take over your channel
+and bump you out". Yet this is how privileges worked on IRC for
+decades and it has actually worked fine. Essentially, now, you can
+never add a PL100 user because you can never bump *them* out, so that
+rationale is somewhat bizarre.
+
+The alternative to removing those admins is to "upgrade" a channel
+with "tombstone" events (see below) but (a) those are not supported by
+all clients and (b) are not exposed in the user interface by default,
+and quite disruptive.
+
+If you run the homeserver where the admin to be remove is, you can of
+course remove that account, but that's also quite disruptive to that
+user, and will not actually remove the user from the access list in
+the room.
+
 # Availability
 
 While Matrix has a strong advantage over Signal in that it's

i got a keychron k1 max rgb
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 906fa0aa..6ba77a6d 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -130,8 +130,6 @@ rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136
    the Halo96 v2 and Halo75 v2
  * [Field75](https://nuphy.com/collections/keyboards/products/field75): not best in anything ([full review](https://www.rtings.com/keyboard/reviews/nuphy/field75))
 
-# Possible keyboards
-
 ## Keychron
 
 [Keychron](https://www.keychron.com/) - nice wireless keyboards, maybe?
@@ -173,6 +171,70 @@ Note that there's also the "Max" series which, according to rtings:
 > raw performance. The K Max boards also have more layers of internal
 > acoustic material.
 
+Update: I bought this keyboard! It's a little weird: the top-right
+three keys are "screenshot", "siri" and "change the LED colors" which
+seems *really* superfluous. Thankfully, Keychron provides a [git
+repo](https://github.com/Keychron/qmk_firmware) with their firmware and [clear instructions for the K1
+max](https://github.com/Keychron/qmk_firmware/tree/wireless_playground/keyboards/keychron/k1_max). In my case, it was:
+
+    apt install qmk
+    git clone -b wireless_playground https://github.com/Keychron/qmk_firmware
+    cd qmk_firmware
+    sudo apt install $(python3 /usr/share/dh-python/dhpython/pydist.py  requirements.txt | sed 's/,//g')
+
+Then patch the keymap:
+
+```diff
+diff --git i/keyboards/keychron/k1_max/ansi/rgb/keymaps/default/keymap.c w/keyboards/keychron/k1_max/ansi/rgb/keymaps/default/keymap.c
+index e5d5b1aede..e54fdaffd9 100644
+--- i/keyboards/keychron/k1_max/ansi/rgb/keymaps/default/keymap.c
++++ w/keyboards/keychron/k1_max/ansi/rgb/keymaps/default/keymap.c
+@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+         _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______,  _______),
+ 
+     [WIN_BASE] = LAYOUT_ansi_87(
+-        KC_ESC,             KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_PSCR,  KC_CTANA, RGB_MOD,
++        KC_ESC,             KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_PSCR,  KC_SCRL,  KC_PAUS,
+         KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  KC_INS,   KC_HOME,  KC_PGUP,
+         KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  KC_DEL,   KC_END,   KC_PGDN,
+         KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,            KC_ENT,
+```
+
+Build and install it:
+
+    make keychron/k1_max/ansi/rgb:default
+    make keychron/k1_max/ansi/rgb:default:flash
+
+This will ask you to set the keyboard in "bootloader mode". For that,
+unplug the keyboard and plug it again with the <kbd>Esc</kbd> key
+pressed.
+
+Only problem now is the keycaps are wrong, but who looks at those. I'm
+also not quite sure what the keys above <kbd>F3</kbd> and
+<kbd>F4</kbd> are supposed to be. In the layout, it says
+<kbd>KC_TASK</kbd> and <kbd>KC_FILE</kbd> but those are not even in
+the [full keycode list](https://docs.qmk.fm/keycodes) upstream. The latter gets intercepted by
+Sway and moves windows around while the former does... nothing. wev(1)
+seems to say it sends <kbd>Return</kbd> with <kbd>Super_L</kbd> which
+is super weird.
+
+I thought I could customize the default RGB setup since reflashing it
+removes customizations done with the keyboard, but I stopped looking
+at this as I need to do actual work on that thing, not nerd around
+until death tears us apart.
+
+Otherwise pretty cool layout. I'm kind of amazed that I have moved to
+"red" (linear) switches, but those feel (and sound) pretty good. I
+like the small travel and the touch. 
+
+One criticism i have is there's no "bezel" around the keys so you can
+easily rip out keycaps from the keys around the keyboard, they're a
+little too exposed. But it makes the keyboard as small as possible.
+
+I also bought one of them "coiled cables" because I thought it would
+look cool, but that was a bit of a waste: it's too short and I ended
+up reusing the old cable I already had.
+
 # Requirements
 
 ## Layout

more ideas of revolt
diff --git a/blog/2025-03-21-losing-war-internet.md b/blog/2025-03-21-losing-war-internet.md
index dc1c4331..f6c70d72 100644
--- a/blog/2025-03-21-losing-war-internet.md
+++ b/blog/2025-03-21-losing-war-internet.md
@@ -77,6 +77,8 @@ Share your wifi with your neighbours.
 Build a LAN. Throw a wire over to your neighbour too, it works better
 than wireless.
 
+Use [Tor](https://www.torproject.org/). [Run a relay](https://community.torproject.org/relay/), a [snowflake](https://snowflake.torproject.org/), a [webtunnel](https://blog.torproject.org/call-for-webtunnel-bridges/). 
+
 Host a web server. Build a site with a static site generator and throw
 it in the wind.
 
@@ -87,7 +89,7 @@ you want to federate and lose high availability).
 
 At least use [Signal](https://signal.org/), not Whatsapp or Messenger.
 
-And yes, why not, run a mail server.
+And yes, why not, run a mail server, join a mesh.
 
 Don't write new software, there's plenty of that around already.
 
@@ -101,8 +103,13 @@ their own people.
 Otherwise, it's just like sitting in front of the television and
 watching the ads. Opium of the people, like the good old time.
 
+Let a billion droplets build the biggest multitude of clouds that will
+storm over this world and rip apart this fascist conspiracy.
+
 Disobey. Revolt. Build.
 
+We are more than them.
+
 [[!tag debian-planet python-planet hacking network neutrality sysadmin radio]]
 
 

posted to mastodon
diff --git a/blog/2025-03-21-another-home-outage.md b/blog/2025-03-21-another-home-outage.md
index 3a282799..ac3a6b2c 100644
--- a/blog/2025-03-21-another-home-outage.md
+++ b/blog/2025-03-21-another-home-outage.md
@@ -177,3 +177,7 @@ Times are in UTC-4.
   Montréal and Toronto"
 
 [[!tag debian-planet python-planet debian outage meta fail networking sysadmin]]
+
+
+<!-- posted to the federation on 2025-03-22T00:25:20.116787 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/114204181784093630"]]
\ No newline at end of file
diff --git a/blog/2025-03-21-losing-war-internet.md b/blog/2025-03-21-losing-war-internet.md
index 181dd175..dc1c4331 100644
--- a/blog/2025-03-21-losing-war-internet.md
+++ b/blog/2025-03-21-losing-war-internet.md
@@ -104,3 +104,7 @@ watching the ads. Opium of the people, like the good old time.
 Disobey. Revolt. Build.
 
 [[!tag debian-planet python-planet hacking network neutrality sysadmin radio]]
+
+
+<!-- posted to the federation on 2025-03-22T00:25:20.706845 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/114204181823947954"]]
\ No newline at end of file

just an old man rambling
diff --git a/blog/2025-03-21-another-home-outage.md b/blog/2025-03-21-another-home-outage.md
new file mode 100644
index 00000000..3a282799
--- /dev/null
+++ b/blog/2025-03-21-another-home-outage.md
@@ -0,0 +1,179 @@
+[[!meta title="Minor outage at Teksavvy business"]]
+
+This morning, internet was down at home. The last time I had such an
+issue was in [[February 2023|2023-02-08-major-outage]], when my
+provider was Oricom. Now I'm with a business service at Teksavvy
+Internet (TSI), in which I pay 100$ per month for a 250/50 mbps
+business package, with a static IP address, on which I run, well,
+everything: email services, this website, etc.
+
+# Mitigation
+
+## Email
+
+The main problem when the service goes down like this for prolonged
+outages is email. Mail is pretty resilient to failures like this but
+after some delay (which varies according to the other end), mail
+starts to drop. I am actually not sure what the various settings are
+among different providers, but I would assume mail is typically kept
+for about 24h, so that's our mark.
+
+Last time, I setup VMs at Linode and Digital Ocean to deal better with
+this. I have actually kept those VMs running as DNS servers until now,
+so that part is already done.
+
+I had fantasized about Puppetizing the mail server configuration so
+that I could quickly spin up mail exchangers on those machines. But
+now I am realizing that my Puppet server is one of the service that's
+down, so this would not work, at least not unless the manifests can be
+applied without a Puppet server (say with `puppet apply`).
+
+Thankfully, my colleague groente did amazing work to refactor our
+Postfix configuration in Puppet at Tor, and that gave me the
+motivation to reproduce the setup in the lab. So I have finally
+Puppetized part of my mail setup at home. That used to be hand-crafted
+experimental stuff documented in a couple of pages in this wiki, but
+is now being deployed by Puppet.
+
+It's not complete yet: spam filtering (including DKIM checks and
+graylisting) are not implemented yet, but that's the next step,
+presumably to do during the next outage. The setup *should* be
+deployable with `puppet apply`, however, and I have refined that
+mechanism a little bit, with the `run` script.
+
+Heck, it's not even *deployed* yet. But the hard part / grunt work is
+done.
+
+## Other
+
+The outage was "short" enough (5 hours) that I didn't take time to
+deploy the other mitigations I had deployed in the previous incident.
+
+But I'm starting to seriously consider deploying a web (and caching)
+reverse proxy so that I endure such problems more gracefully.
+
+# Side note on proper servics
+
+Typically, I tend to think of a properly functioning service as having
+four things:
+
+ 1. backups
+ 2. documentation
+ 3. monitoring
+ 4. automation
+ 5. high availability
+
+Yes, I miscounted. This is why you have high availability.
+
+## Backups
+
+Duh. If data is maliciously or accidentally destroyed, you need a copy
+somewhere. Preferably in a way that malicious joe can't get to.
+
+This is harder than you think.
+
+## Documentation
+
+I have an entire [template](https://gitlab.torproject.org/tpo/tpa/wiki-replica/-/raw/master/service/template.md?ref_type=heads) for this. Essentially, it boils down to
+using <https://diataxis.fr/> and [this "audit" guide](https://bluesock.org/~willkg/blog/dev/auditing_projects.html). For me, the
+most important parts are:
+
+- disaster recovery (includes backups, probably)
+- playbook
+- install/upgrade procedures (see automation)
+
+You probably know this is hard, and this is why you're not doing
+it. Do it anyways, you'll think it sucks, but you'll be really
+grateful for whatever scraps you wrote when you're in trouble.
+
+## Monitoring
+
+If you don't have monitoring, you'll know it fails too late, and you
+won't know it recovers. Consider high availability, work hard to
+reduce noise, and don't have machine wake people up, that's literally
+torture and is against the Geneva convention.
+
+Consider predictive algorithm to prevent failures, like "add storage
+within 2 weeks before this disk fills up". 
+
+This is harder than you think.
+
+## Automation
+
+Make it easy to redeploy the service elsewhere.
+
+Yes, I know you have backups. That is not enough: that typically
+restores data and while it can also include configuration, you're
+going to need to change things when you restore, which is what
+automation (or call it "configuration management" if you will) will do
+for you anyways.
+
+This also means you can do unit tests on your configuration, otherwise
+you're building legacy.
+
+This is probably as hard as you think.
+
+## High availability
+
+Make it not fail when one part goes down.
+
+Eliminate single points of failures.
+
+This is easier than you think, except for storage and DNS (which, I
+guess, means it's harder than you think too).
+
+## Assessment
+
+In the above 5 items, I check two:
+
+ 1. backups
+ 2. documentation
+
+And barely: I'm not happy about the offsite backups, and my
+documentation is much better at work than at home (and even there, I
+have a 15 year backlog to catchup on).
+
+I barely have monitoring: Prometheus is scraping parts of the infra,
+but I don't have any sort of alerting -- by which I don't mean
+"electrocute myself when something goes wrong", I mean "there's a set
+of thresholds and conditions that define an outage and I can look at
+it".
+
+Automation is wildly incomplete. My home server is a random collection
+of old experiments and technologies, ranging from Apache with Perl and
+CGI scripts to Docker containers running Golang applications. Most of
+it is not Puppetized (but the ratio is growing). Puppet itself
+introduces a huge attack vector with kind of catastrophic lateral
+movement if the Puppet server gets compromised.
+
+And, fundamentally, I am not sure I can provide high availability in
+the lab. I'm just this one guy running my home network, and I'm
+growing older. I'm thinking more about winding things down than
+building things now, and that's just really sad, because I feel
+[[we're losing|2025-03-21-losing-war-internet]] (well that escalated
+quickly).
+
+# Resolution
+
+In the end, I didn't need any mitigation and the problem fixed
+itself. I did do quite a bit of cleanup so that feels somewhat good,
+although I despaired quite a bit at the amount of technical debt I've
+accumulated in the lab.
+
+# Timeline
+
+Times are in UTC-4.
+
+- 6:52: IRC bouncer goes offline
+- 9:20: called TSI support, waited on the line 15 minutes then was
+  told I'd get a call back
+- 9:54: outage apparently detected by TSI
+- 11:00: no response, tried calling back support again
+- 11:10: confirmed bonding router outage, no official ETA but "today",
+  source of the 9:54 timestamp above
+- 12:08: TPA monitoring notices service restored
+- 12:34: call back from TSI; service restored, problem was with the
+  "bonder" configuration on their end, which was "fighting between
+  Montréal and Toronto"
+
+[[!tag debian-planet python-planet debian outage meta fail networking sysadmin]]
diff --git a/blog/2025-03-21-losing-war-internet.md b/blog/2025-03-21-losing-war-internet.md
new file mode 100644
index 00000000..181dd175
--- /dev/null
+++ b/blog/2025-03-21-losing-war-internet.md
@@ -0,0 +1,106 @@
+[[!meta title="Losing the war for the free internet"]]
+
+Warning: this is a long ramble I wrote after an outage of my home
+internet. You'll get your regular scheduled programming shortly.
+
+I didn't realize this until relatively recently, but we're at war.
+
+Fascists and capitalists are trying to take over the world, and it's
+bringing utter chaos.

(Diff truncated)
cross-ref workflow post
diff --git a/hardware/camera.mdwn b/hardware/camera.mdwn
index 9dd33371..5dca8f21 100644
--- a/hardware/camera.mdwn
+++ b/hardware/camera.mdwn
@@ -4,6 +4,10 @@ Voir aussi [[communication/photo]].
 
 [[!toc levels=2]]
 
+# Workflow
+
+I wrote a blurb about my current (2025) workflow in [this pixls.us thread](https://discuss.pixls.us/t/bulk-import-workflow-advice/33763/21).
+
 History
 =======
 

move calendes to subdir
I want to resume work on this project and this will allow it to grow
more cleanly. We were not linking to 2020 in the photo page, for example.
diff --git a/communication/photo.mdwn b/communication/photo.mdwn
index 7262138c..6b57bcd3 100644
--- a/communication/photo.mdwn
+++ b/communication/photo.mdwn
@@ -40,5 +40,6 @@ Calendrier
 ----------
 
 J'ai fait un projet élaboré de calendrier regroupant mes meilleures
-photo de l'année, incluant montage et impression, voir
-[[calendrier-2019]].
+photo de l'année, incluant montage et impression, voir:
+
+[[!map pages="page(calendes/*)"]]
diff --git a/communication/photo/calendes/2019.md b/communication/photo/calendes/2019.md
new file mode 100644
index 00000000..c4049684
--- /dev/null
+++ b/communication/photo/calendes/2019.md
@@ -0,0 +1,909 @@
+[[!meta title="Projet Calendes 2019"]]
+
+[[!toc levels=2]]
+
+Le projet "Calendes" est un projet pour développer mes talents de
+photographe mais aussi une façon de ma familiariser avec ma première
+caméra digitale à objectifs interchangeables.
+
+Le but est d'imprimer un calendrier de photos pour l'année 2019, avec
+une photo par mois. Chaque mois de 2018, j'ai sélectionné mes photos
+les plus notables prises pendant le mois et je les publie sur une
+gallerie de photo privée. À la fin de l'année, les meilleures photos
+(originalement: les plus populaires, mais je n'ai pas eu beaucoup de
+feedback) sont réunies dans un calendrier.
+
+Certaines photos n'ont pas été développées ("[straight out of
+camera](https://www.flickr.com/groups/sooc/)") et pourront l'être ultérieurement. (D'ailleurs, pour les
+fanatiques du développement, les "négatifs" ("raw") sont disponibles
+sur demande.)
+
+Les détails sur mes outils de travail sont dans la page
+[camera](/hardware/camera/). J'ai également mentionné le projet dans mon [[rapport
+mensuel de décembre 2018|blog/2018-12-21-report]].
+
+# Note sur le nom
+
+Les *calendes* (en latin archaïque : *kǎlendāī*, *-āsōm* ; en latin
+classique : *cǎlendae*, *-ārum*) étaient le premier jour de chaque
+mois dans le calendrier romain, celui de la nouvelle lune quand le
+calendrier suivait un cycle lunaire (années de Romulus et de Numa
+Pompilius).
+
+Ce jour-là, les pontifes annonçaient la date des fêtes mobiles du
+mois suivant et les débiteurs devaient payer leurs dettes inscrites
+dans les calendaria, les livres de comptes, à l'origine du mot
+calendrier. [...]
+
+## Héritage linguistique
+
+Ce mot est à l'origine de plusieurs termes et expressions utilisés
+en français.
+
+Le calendrier dérive de l'adjectif calendarium (« calendaire »), qui
+désignait un registre de comptes (que l'on apurait le premier du
+mois ; le calendarium était proprement le « registre des échéances
+») et, partant, le calendrier est, originellement, le registre sur
+lequel l'on note les événements liés à une date précise du mois. Le
+mot français provient directement de l'adjectif latin, avec un sens
+plus général.
+
+« Renvoyer aux calendes grecques » (Ad kalendas graecas) signifie «
+repousser indéfiniment la réalisation d'une action ». En effet, les
+Grecs n'ayant jamais eu de calendes, l'expression fait référence à
+une date inconnue. Les calendes grecques, tout comme la
+[Saint-Glinglin](https://fr.wikipedia.org/wiki/Saint-Glinglin), évoquent de manière ironique une date qui
+semble fixée mais qui en fin de compte n'aura jamais lieu.
+
+> *— [Wikipedia](https://fr.wikipedia.org/wiki/Calendes)*
+
+# Photos
+
+Chaque photo a été choisie en fonction du mois où elle a été prise,
+et, dans la mesure du possible, pour refléter l'esprit de ce
+mois. Certaines photos de nuit et les couchers de soleil ont été
+écartés car ils sont typiquement difficiles à faire ressortir sur
+l'imprimé, du moins c'est l'avis que j'ai reçu. Même chose pour les
+photos généralement sombres.
+
+Toutes les photos ont été prises avec un [Fuji X-T2](https://en.wikipedia.org/wiki/Fujifilm_X-T2), avec
+différents objectifs, détaillés en dernière page du calendrier (le
+"colophon"). Les photos de nuit ont été prises avec trépied. Les
+photos avec un de ces objectifs:
+
+ * [Fujifilm 18-55mm f/2.8-4 R LM OIS](http://www.fujifilm.ca/products/digital_cameras/x/fujinon_lens_xf18_55mmf28_4_r_lm_ois/)
+ * [Fujifilm 55-200mm f/3.5-4.8 R LM OIS](http://www.fujifilm.ca/products/digital_cameras/x/fujinon_lens_xf55_200mmf35_48_r_lm_ois/)
+ * [Fujifilm 27mm f/2.8 ø39](http://www.fujifilm.com/products/digital_cameras/x/fujinon_lens_xf27mmf28/)
+
+Voir également [[hardware/camera]] pour le matériel que j'utilise. La
+plupart des photos ont été retravaillées avec [Darktable 2.4](https://darktable.org), sauf
+le mois de janvier, qui a été traité avec Adobe Lightroom 6.
+
+# Évènements #
+
+Un calendrier, c'est des petites boîtes en colonnes avec des chiffres
+dedans qui montre l'arrangement des jours dans les semaines et mois de
+l'année. Mais c'est aussi des évènements ponctuels.
+
+J'ai fait le choix de ne pas refléter les congés fériés et religieux
+traditionnels. Les gens savent généralement qu'ils sont là et de toute
+façon cela varie selon le milieu de travail ou d'éducation. À la
+place, on célèbre différents évènements importants ou farfelus.
+
+## Fêtes officielles, selon Koumbit ##
+
+ * 1er janvier: [jour de l'an][Jour de l'an]
+ * 8 mars: [Journée internationale des femmes][Fête des femmes]
+ * 19 avril: [Vendredi saint][]
+ * 1er mai: [fête des travailleurs][Fête des travailleurs]
+ * 20 mai: [Journée nationale des Patriotes][] (le lundi qui précède
+   le 25 mai)
+ * 24 juin: [St-Jean-Baptiste][]
+ * 1er juillet: [Confédération][]
+ * 2 septembre: [fête du travail][Fête du travail]
+ * 14 octobre: [Action de grâce][]
+ * 25 décembre: [Noël][]
+
+## Alternatives aux fêtes traditionnelles ##
+
+Pour sortir du carcan des fêtes traditionnelles et célébrer plutôt
+l'absence de dieu et d'autres valeurs, on cherche des alternatives.
+
+ * Noël:
+   * 22 décembre: [Solstice][Solstice]/[Yule][]
+   * 23 décembre: [Festivus][]
+   * 26 décembre: [Boxing day][]
+   * 26 décembre: [Kwanzaa][]
+ * [Vendredi saint][] (19 avril 2019) / [Pâques][] (21 avril 2019):
+   * [420][] (20 avril)
+   * [Record store day][] (20 avril)
+   * [Jour de la terre][Jour de la terre] (22 april)
+ * [Action de grâce][action de grâce]: voir [Columbus day][], plus bas
+ * [Fête des patriotes][Journée nationale des Patriotes]: [Towel day][] (25 mai), plus bas
+
+## Autres fêtes intéressantes ##
+
+ * 1er janvier: [Indépendance d'Haïti][]
+ * 21 janvier: [MLK day][MLK] (troisième lundi de janvier)
+ * 21 janvier: [National Hugging Day][]
+ * 25 janvier: [Opposite Day][] ("Day where you do everything opposite")
+ * 31 janvier: [National Gorilla Suit Day][]
+ * 12 février: [Darwin day][]
+ * 14 février: [Saint-Valentin][]
+ * 14 mars: [Pi Day][]
+ * 15 mars: [journée internationale contre la brutalité policière][JICBP]
+ * 17 mars: [Saint-patrick][]
+ * 20 mars: [Équinoxe][] (nuit = jour)
+ * 4 avril: [420][]
+ * 20 avril: [Record store day][] (3e samedi d'avril)
+ * 22 avril: [Jour de la terre][] (voir aussi 5 juin)
+ * 1er vendredi de mai: [No Pants Day][]
+ * 2 mai: [national day of reason][]
+ * 12 mai: [Fête des mères][]
+ * 25 May: [Towel Day][] (en référence à feu Douglas Adams)
+ * 5 juin: [jour de l'environnement][] (voir aussi 22 avril)
+ * 16 juin: [Fête des pères][]
+ * 21 juin: [Solstice][Solstice] d'été (jour le plus long), [Wold Humanist day][]
+ * 22 juillet: [Pi Approximation Day][] or Pi day (14 mars, ci-haut)
+ * 13 août: [International Lefthanders Day][]
+ * 19 septembre: [International Talk Like a Pirate Day][]
+ * 21 septembre: [International Day of Peace][]
+ * 23 septembre: [Équinoxe][], [Human Rights Day][]
+ * 31 octobre: [Halloween][]
+ * 5 novembre: [Guy Fawkes Night][]
+ * 28 novembre: [Thanksgiving][]
+ * 29 novembre: [Buy Nothing Day][]
+ * 14 décembre: [Monkey Day][]
+ * 22 décembre: [Solstice][] d'hiver (jour le plus court)
+ * 26 décembre - 1er janvier: [Kwanzaa][] (Héritage, unité et culture
+   africaine)
+
+## Autres idées ##
+
+ * autres fêtes religieuses, selon le rapport annuel de [Projet
+   Genèse](http://genese.qc.ca/):
+   * islam
+     * [Ramadan][]: variable, du 6 mai au 4 juin 2019 ([Eid al-Fitr][])
+     * [Eid al-Adha][]: variable, 12 août 2019
+   * judaïsme:
+     * [Rosh Hashanah][]: variable, 1er octobre 2019
+     * [Yom Kippur][]: variable, 9 octobre 2019
+   * hindouisme, bouddhisme:
+     * [Diwali][]: variable, 27 octobre 2019
+ * évènements astronomiques majeurs (voir plus bas)
+ * [Friendship Day][]
+ * [Nanomonestotse][]: préparé le troisième lundi d'octobre, célébré
+   le vendredi suivant
+ * 31 octobre - 2 novembre: [day of the dead][]
+ * [Poisson d'avril][April fool's day]... autres choses amusante le
+   [premier avril][]:
+   * 1868 – [Edmond Rostand][]
+   * 1873 – [Sergei Rachmaninoff][]

(Diff truncated)
more issues with fish
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index 12fc3707..321b6074 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -95,7 +95,15 @@ Whereas it should show up like this:
     sq keyring merge torproject-keyring/lavamind-95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyring/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg | wl-copy
 
 Note that this is an issue specific to foot(1), alacritty(1) and
-gnome-terminal(1) don't suffer from that issue.
+gnome-terminal(1) don't suffer from that issue. I have already [filed
+it upstream in foot](https://codeberg.org/dnkl/foot/issues/1487) and it is apparently fixed already.
+
+Globbing is driving me *nuts*. You can't pass a `*` to a command
+unless fish agrees it's going to match something. You need to escape
+it if it doesn't immediately match, and then you need the called
+command to actually support globbing. `202[345]` doesn't match
+folders named `2023`, `2024`, `2025`, it will send the string
+`202[345]` to the command.
 
 # Blockers
 

update camera stats
diff --git a/hardware/camera.mdwn b/hardware/camera.mdwn
index c1eac58e..9dd33371 100644
--- a/hardware/camera.mdwn
+++ b/hardware/camera.mdwn
@@ -12,48 +12,55 @@ Overview of important dates
 
  * 1988: film photography starts
  * 2004: digital photography starts, <1GB/year
- * 2006: Canon PowerShot A430, ~1GB/year
+ * 2006: Canon PowerShot A430, ~1GB/year, 1000 shots/year
  * 2009: Nokia N900 (mobile phone), ~1GB/year
- * 2012: Canon PowerShot G12, 10-30GB/year
- * 2018: Fujifilm X-T2, ~10-15GB/mth
+ * 2012: Canon PowerShot G12, 10-30GB/year, ~2500 shots/year
+ * 2018: Fujifilm X-T2, ~10-15GB/mth, 3000-4000 shots/year
+ * 2021: Pixels, back to ~10GB/year, 1000-3000 shots/year
 
 Disk usage
 ----------
 
 This list details per-year disk usage of my Photo archive:
 
-| Year      | Size (GB) | File count | JPG count | Notes                  |
-|-----------|-----------|------------|-----------|------------------------|
-| 1969      | 0.1       | 5          | 1         |                        |
-| 1970      | 0.8       | 26         | 0         |                        |
-| 1998      | 0.3       | 10         | 10        |                        |
-| 2004      | 0.4       | 48         | 48        |                        |
-| 2005      | 0.3       | 557        | 557       |                        |
-| 2006      | 0.9       | 932        | 931       | Canon PowerShot A430   |
-| 2007      | 2         | 1161       | 1156      |                        |
-| 2008      | 0.9       | 656        | 631       |                        |
-| 2009      | 0.8       | 495        | 495       | Nokia N900             |
-| 2010      | 1         | 1077       | 1070      |                        |
-| 2011      | 1         | 1241       | 1193      |                        |
-| 2012      | 10        | 2908       | 2590      | Canon PowerShot G12    |
-| 2013      | 33        | 4192       | 2763      |                        |
-| 2014      | 27        | 4126       | 2470      |                        |
-| 2015      | 11        | 2004       | 1332      |                        |
-| 2016      | 0.4       | 131        | 131       |                        |
-| 2017      | 32        | 2958       | 1656      | Fairphone 2            |
-| 2018      | 164       | 9154       | 4705      | FujiFilm X-T2          |
-| 2019      | 127       | 7228       | 3695      |                        |
-| 2020      | 95.36     | 5260       | 2815      |                        |
-| 2021      | 23.78     | 2126       | 1598      | Pixel 4a               |
-| 2022      | 7.28      | 1079       | 1009      |                        |
-| 2023      | 10.74     | 2555       | 2474      | Pixel 6a, *incomplete* |
-| **Total** | 555.16    | 50239      | 33496     |                        |
+| Year      | Size (GB) | File count | JPG count | Notes                |
+|-----------|-----------|------------|-----------|----------------------|
+| 1969      | 0.1       | 5          | 1         |                      |
+| 1970      | 0.8       | 26         | 0         |                      |
+| 1998      | 0.3       | 10         | 10        |                      |
+| 2004      | 0.4       | 48         | 48        |                      |
+| 2005      | 0.3       | 557        | 557       |                      |
+| 2006      | 0.9       | 932        | 931       | Canon PowerShot A430 |
+| 2007      | 2         | 1161       | 1156      |                      |
+| 2008      | 0.9       | 656        | 631       |                      |
+| 2009      | 0.8       | 495        | 495       | Nokia N900           |
+| 2010      | 1         | 1077       | 1070      |                      |
+| 2011      | 1         | 1241       | 1193      |                      |
+| 2012      | 10        | 2908       | 2590      | Canon PowerShot G12  |
+| 2013      | 33        | 4192       | 2763      |                      |
+| 2014      | 27        | 4126       | 2470      |                      |
+| 2015      | 11        | 2004       | 1332      |                      |
+| 2016      | 0.4       | 131        | 131       |                      |
+| 2017      | 32        | 2958       | 1656      | Fairphone 2          |
+| 2018      | 164       | 9154       | 4705      | FujiFilm X-T2        |
+| 2019      | 127       | 7228       | 3695      |                      |
+| 2020      | 95.36     | 5260       | 2815      |                      |
+| 2021      | 23.78     | 2126       | 1598      | Pixel 4a             |
+| 2022      | 7.28      | 1079       | 1009      |                      |
+| 2023      | 16.99     | 3250       | 3050      | Pixel 6a             |
+| 2024      | 12.81     | 2491       | 2365      |                      |
+| 2025      | 1.92      | 105        | 107       | *incomplete*         |
+| **Total** | 577.72    | 53599      | 36702     |                      |
 
 Years before 2004 are probably mislabeled. Archives from 1988 to 2004
 are still in film and haven't been imported.
 
 The introduction of the Fuji and its higher resolution really made a
-huge change in disk usage.
+huge change in disk usage. It also kicked off a couple of years with
+thousands of pictures taken, but this slowed down quite a bit when the
+new Pixel phones came in. Those have pretty good cameras which meant
+that I didn't feel the need to bring the big camera with, but
+paradoxically, also meant I took less pictures, to a certain extent.
 
 Keep in mind the "File count" columns counts "RAW" shots as double: one
 file for the JPG, one for the RAW. And it may also count sidecars
@@ -61,7 +68,7 @@ file for the JPG, one for the RAW. And it may also count sidecars
 
 The above was created with:
 
-    git annex info --json * | jq   --compact-output '[.["directory","local annex size","local annex keys"]]'
+    git annex info --json * | jq   -r  '[.["directory","local annex size","local annex keys"]] | join(" | ")'     (master)
 
 .. and some manual formatting in Emacs because the [jq manpage](https://manpages.debian.org/jq)
 drives me utterly insane.

fix tag link
diff --git a/recette.mdwn b/recette.mdwn
index 69cc4995..ef6b6422 100644
--- a/recette.mdwn
+++ b/recette.mdwn
@@ -5,7 +5,7 @@ Ces recettes sont généralement des recettes que j'ai prises ailleurs
 mais modifiées suffisamment et cuisinées assez souvent pour que je les
 considère miennes.
 
-[[!map pages="page(recette/*) or tagged(blog/recette)"]]
+[[!map pages="page(recette/*) or tagged(recette)"]]
 
 Autres sources
 ==============

list blog recipes, explain
diff --git a/recette.mdwn b/recette.mdwn
index b783295d..69cc4995 100644
--- a/recette.mdwn
+++ b/recette.mdwn
@@ -1,9 +1,11 @@
 Répertoire de recettes
 ======================
 
-[[!map pages="page(recette/*)"]]
+Ces recettes sont généralement des recettes que j'ai prises ailleurs
+mais modifiées suffisamment et cuisinées assez souvent pour que je les
+considère miennes.
 
-Mes recettes sont présentement sur mon [[blog|tag/recette]], mais devraient être déplacées ici.
+[[!map pages="page(recette/*) or tagged(blog/recette)"]]
 
 Autres sources
 ==============

deux autres recettes cuisinées
diff --git a/recette/fondue.md b/recette/fondue.md
new file mode 100644
index 00000000..9c0831a6
--- /dev/null
+++ b/recette/fondue.md
@@ -0,0 +1,30 @@
+[[!meta title="Fondue au fromage"]]
+
+# Ingrédients
+
+- 1kg fromage:
+  - 500g emmental
+  - 250g gruyère
+  - 250g fribourgeois
+- 4 c à thé de fécule de maïs
+- 2 gousses d'ail
+- 3/4 tasse vin blanc de table
+- 1 c à table kirsh (optionnel)
+- 1 couronnes de brocoli taillée en fleurets
+- 3 petites patates coupées en gros dés, ou équivalent patates grelots
+- 2 baguettes taillées en dés
+
+# Préparation
+
+ 1. râper le fromage, incorporer la fécule de maïs, réserver
+ 2. frotter le caquelon avec les gousses d'ail taillées en deux,
+    garder dans le caquelon (ou pas)
+ 3. ajouter le vin et kirsh, chauffer au frémissement
+ 4. incorporer progressivement le fromage à feu moyen, en brassant
+    continuellement
+ 5. en parallèle, cuire les brocolis à la vapeur, bouillir les patates
+    "al dente"
+ 6. servir immédiatement avec réchaud sur table et baguettes
+
+Note: plus fort, meilleur goût et plus cher en réduisant emmental et
+augmentant gruyère.
diff --git a/recette/riz_frit.md b/recette/riz_frit.md
new file mode 100644
index 00000000..51374e65
--- /dev/null
+++ b/recette/riz_frit.md
@@ -0,0 +1,50 @@
+[[!meta title="Riz frit au légumes"]]
+
+# Ingrédients
+
+ - 5 tasses de riz (étuvé? basmati?) cuit et refroidi (2 tasses sec)
+ - 5 oeufs
+ - 45ml (3 c à soupe) d'huile végétale
+ - 1 livre (454g) de tofu ferme, coupé en petits dés
+ - 1 oignon haché
+ - 3 oignons verts, émincés, blanc et vert séparés
+ - 2 carottes moyennes, coupées en petits dés
+ - 2 branches de céleri, coupées en petits dés
+ - 2 gousses d'ail hachées
+ - 15mL (1 c. à soupe) d'huile de sésame
+ - 225g (1 ½ tasse) de petits pois surgelés (ou frais!)
+ - 60 mL (¼ tasse) de sauce soya
+ - 10 mL (2 c. à thé) de sambal oelek (facultatif)
+
+# Préparation
+
+ 1. cuire le riz et refroidir au frigo quelques heures, éviter la
+    surcuisson
+
+ 2. battre un oeuf, incorporer au riz et bien enrober, réserver
+
+ 3. battre le reste des oeufs et cuire dans 1 c. à soupe d'huile
+    d'olive, réserver
+
+ 4. en parallèle, frire le tofu dans un poêlon
+
+ 5. dorer l'oignon et le blanc des oignons verts
+
+ 6. ajouter et sauter les carottes et le céleri, cuire *al dente*
+
+ 7. ajouter l'ail et l'huile de sésame, sauter une minute
+
+ 8. ajouter et faire sauter le riz 8-10 minutes jusqu'à ce qu'il soit
+    légèrement doré
+
+ 9. ajouter les petits pois et cuire 2 minutes
+
+ 10. incorporer le reste des ingrédients: oeufs cuits, verts des oignons
+     verts, sauce soya, sambal oelek; cuire jusqu'à ce que les oeufs
+     soient réchauffés
+
+ 11. rectifier l'assaisonnement
+
+# Notes
+
+Source: ricardo, avec ajout tofu.

petite note general tao
diff --git a/recette/tofu_general_tao.mdwn b/recette/tofu_general_tao.mdwn
index c2a4757c..da98cced 100644
--- a/recette/tofu_general_tao.mdwn
+++ b/recette/tofu_general_tao.mdwn
@@ -18,7 +18,7 @@
 
 ## Sauté
 
- * 1 paquet de 454 g (1 lb) de tofu ferme, coupé en cubes et bien épongé (voir note)
+ * 1 paquet de 454 g (1 lb) de tofu ferme, coupé en cubes et bien épongé
  * 30 ml (2 c. à soupe) de fécule de maïs
  * 60 ml (¼ tasse) d’huile de canola
  * 2 oignons verts, hachés finement

(re)posted to mastodon(?)
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 9637852d..91324c7e 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1691,3 +1691,6 @@ worrisome.
 [[!tag unix wayland blog desktop firefox emacs debian debian-planet]]
 
 [xdg-desktop-portal-wrl(5)]: https://manpages.debian.org/xdg-desktop-portal-wlr.5
+
+<!-- posted to the federation on 2025-03-11T14:45:51.192822 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/114145280025076006"]]

reorder general tofu
diff --git a/recette/tofu_general_tao.mdwn b/recette/tofu_general_tao.mdwn
index a7809f91..c2a4757c 100644
--- a/recette/tofu_general_tao.mdwn
+++ b/recette/tofu_general_tao.mdwn
@@ -4,27 +4,29 @@
  * Temps de préparation: 0:25
  * Source: [Ricardo](http://www.ricardocuisine.com/recettes/5675-tofu-general-tao)
 
-# Sauce
+# Ingredients
+
+## Sauce
 
  * 60 ml (¼ tasse) de bouillon de poulet ou de légumes
- * 60 ml (¼ tasse) de cassonade
  * 30 ml (2 c. à soupe) de sauce soya
  * 30 ml (2 c. à soupe) de vinaigre de riz
  * 30 ml (2 c. à soupe) de ketchup
+ * 60 ml (¼ tasse) de cassonade
  * 5 ml (1 c. à thé) de fécule de maïs
  * 5 ml (1 c. à thé) de sambal oelek
 
-# Sauté
+## Sauté
 
  * 1 paquet de 454 g (1 lb) de tofu ferme, coupé en cubes et bien épongé (voir note)
  * 30 ml (2 c. à soupe) de fécule de maïs
  * 60 ml (¼ tasse) d’huile de canola
- * 4 oignons verts, hachés finement
+ * 2 oignons verts, hachés finement
  * 5 ml (1 c. à thé) de gingembre frais haché finement
  * 2 gousses d’ail, hachées finement
  * Sel et poivre
  
-# Accompagnements
+## Accompagnements
 
  * 1 brocoli coupé en bouquets, cuit à la vapeur
  * Riz cuit vapeur

add niri
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index b3e3a1b5..9637852d 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -183,7 +183,8 @@ Other options include:
  * [dwl][]: tiling, minimalist, dwm for Wayland, not in Debian
  * [hikari][]: tiling/stacking, not in Debian
  * [Hyprland][]: tiling, fancy animations, not in Debian ([1040971][])
- * [Qtile][]: tiling, extensible, in Python, in Debian since trixie ([1015267][])
+ * [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][])
  * [smithay][], and many derivatives: Rust, not in Debian
  * [velox][]: inspired by xmonad and dwm, not in Debian
@@ -210,6 +211,8 @@ Other options include:
 [1040971]: https://bugs.debian.org/1040971
 [wlmaker]: https://github.com/phkaeser/wlmaker
 [smithay]: https://github.com/Smithay/smithay
+[niri]: https://github.com/YaLTeR/niri
+[1065355]: https://bugs.debian.org/1065355
 
 ## Status bar: py3status → waybar
 

considering a keychron, again
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 442404dc..906fa0aa 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -130,6 +130,49 @@ rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136
    the Halo96 v2 and Halo75 v2
  * [Field75](https://nuphy.com/collections/keyboards/products/field75): not best in anything ([full review](https://www.rtings.com/keyboard/reviews/nuphy/field75))
 
+# Possible keyboards
+
+## Keychron
+
+[Keychron](https://www.keychron.com/) - nice wireless keyboards, maybe?
+
+[Review from a DD](https://venthur.de/2021-04-30-keychron-c1-on-linux.html) says:
+
+> Although the fix [making F-keys work] was not very hard to find and
+> apply, this experience still leaves a foul taste. I naively assumed
+> the problem of having a properly functioning keyboard that simply
+> works when you plug it in, has been thoroughly solved by 2021.
+
+The Keychron Q5 Max was rated [best mechanical keyboard at rtings in 2023-2025](https://www.rtings.com/keyboard/reviews/best/mechanical)
+
+### Keychron K1 Pro
+
+The [K1 Pro](https://www.keychron.com/products/keychron-k1-pro-qmk-via-wireless-custom-mechanical-keyboard) is a good candidate:
+
+- 87 keys
+- wired (USB-C), wireless (BT 5.1), the "Max" has RF
+- 130h battery
+- Low-profile Gateron Red/Brown switches
+- QMK
+- Double-shot keycaps
+- rgb backlight
+- 1000Hz
+- N-Key Rollover
+- 18-24mm x 346mm x 118.5mm
+- 580g
+- ABS / aluminium
+- optional hot-swappable switches
+
+Rated [best mechanical keyboard for work at rtings since 2024](https://www.rtings.com/keyboard/reviews/best/work).
+
+Note that there's also the "Max" series which, according to rtings:
+
+> The major difference between the keyboards in these two lineups is
+> that the K Max keyboards have expanded wireless versatility with the
+> addition of 2.4GHz receiver connectivity, offering better overall
+> raw performance. The K Max boards also have more layers of internal
+> acoustic material.
+
 # Requirements
 
 ## Layout
@@ -385,47 +428,6 @@ control, alt and shift). There are also "palm" keys that act as Fn
 keys. All this is probably totally alien and too weird for my poor old
 fingers to adapt to, but it does look gorgeous.
 
-## Keychron
-
-[Keychron](https://www.keychron.com/) - nice wireless keyboards, maybe?
-
-[Review from a DD](https://venthur.de/2021-04-30-keychron-c1-on-linux.html) says:
-
-> Although the fix [making F-keys work] was not very hard to find and
-> apply, this experience still leaves a foul taste. I naively assumed
-> the problem of having a properly functioning keyboard that simply
-> works when you plug it in, has been thoroughly solved by 2021.
-
-The Keychron Q5 Max was rated [best mechanical keyboard at rtings in 2023-2025](https://www.rtings.com/keyboard/reviews/best/mechanical)
-
-### Keychron K1 Pro
-
-The [K1 Pro](https://www.keychron.com/products/keychron-k1-pro-qmk-via-wireless-custom-mechanical-keyboard) is a good candidate:
-
-- 87 keys
-- wired (USB-C), wireless (BT 5.1), the "Max" has RF
-- 130h battery
-- Low-profile Gateron Red/Brown switches
-- QMK
-- Double-shot keycaps
-- rgb backlight
-- 1000Hz
-- N-Key Rollover
-- 18-24mm x 346mm x 118.5mm
-- 580g
-- ABS / aluminium
-- optional hot-swappable switches
-
-Rated [best mechanical keyboard for work at rtings since 2024](https://www.rtings.com/keyboard/reviews/best/work).
-
-Note that there's also the "Max" series which, according to rtings:
-
-> The major difference between the keyboards in these two lineups is
-> that the K Max keyboards have expanded wireless versatility with the
-> addition of 2.4GHz receiver connectivity, offering better overall
-> raw performance. The K Max boards also have more layers of internal
-> acoustic material.
-
 ## Cannon Keys
 
 After reading that [New Yorker magazine article](https://www.newyorker.com/tech/annals-of-technology/the-obsessive-pleasures-of-mechanical-keyboard-tinkerers), I found this:

qtile landed in debian, but without wayland
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index b1da0ac0..b3e3a1b5 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -183,7 +183,7 @@ Other options include:
  * [dwl][]: tiling, minimalist, dwm for Wayland, not in Debian
  * [hikari][]: tiling/stacking, not in Debian
  * [Hyprland][]: tiling, fancy animations, not in Debian ([1040971][])
- * [Qtile][]: tiling, extensible, in Python, not in Debian ([1015267][])
+ * [Qtile][]: tiling, extensible, in Python, in Debian since trixie ([1015267][])
  * [river][]: Zig, stackable, tagging, not in Debian  ([1006593][])
  * [smithay][], and many derivatives: Rust, not in Debian
  * [velox][]: inspired by xmonad and dwm, not in Debian

considering a keychron
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 26e300c0..442404dc 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -59,12 +59,25 @@ TKL keyboards.
 
 ### Short review
 
-I have found a second hand Air75 at some Amazon overflow thing here,
-and it is *really* nice. It's really slim, I (surprisingly) like the
-short travel and the sound is exquisite, even with red switches. It's
-nice to have the combo Bluetooth / USB-C setup, and there's even a
-"2.4GHz transmitter" in there for non-BT operation, but somehow the
-adapter for that was missing from the case.
+I have found a second hand [Air75](https://nuphy.com/collections/in-stock-keyboards/products/air75-v2) at some Amazon overflow thing here,
+and it is *really* nice.
+
+- QMK
+- wireless (BT 4 devices, RF), wired (USB-C)
+- 220h battery (~10days?)
+- 84-keys
+- [Cowberry red switches](https://nuphy.com/products/nuphy-cowberry-l45-low-profile-switches), hotswappable
+- double-shot keycaps
+- RGB backlights
+- 13.5-21mm x 132.5mm x 316.4mm
+- 598 grams
+- n-key rollover
+
+It's really slim, I (surprisingly) like the short travel and the sound
+is exquisite, even with the red switches. It's nice to have
+the combo Bluetooth / USB-C setup, and there's even a "2.4GHz
+transmitter" in there for non-BT operation, but somehow the adapter
+for that was missing from the case.
 
 Two major downsides:
 
@@ -98,7 +111,8 @@ which is likely a GPL violation, as [qmk_firmware](https://github.com/qmk/qmk_fi
 is [keeping track of the various third-party firmwares](https://github.com/zhogov/nuphy-state-of-qmk-firmware).
 
 The whole point of this was to try to get a scroll lock key to work. I
-haven't figured it out.
+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.
 
 ### Other reviews
 
@@ -328,7 +342,7 @@ Update: they have an "easy" version now: <https://ergodox-ez.com/>.
 
 From the same people as the above ergodox.
 
-* split keyboard
+ * split keyboard
  * programmable, open firmware
  * mechanical, hot-swappable switches
  * backlit
@@ -342,11 +356,10 @@ From the same people as the above ergodox.
 
 ## Keyboard for life
 
-15$. Spill-proof. Lifetime warranty. Next keyboard?
+15$. Spill-proof. Lifetime warranty.
 
 <http://www.kensington.com/us/us/4489/k64370a/keyboard-for-life#.VsjA1j9Xbec>
 
-
 ## Ultimate hacking keyboard
 
 "Built to last", "split keyboard" and all sorts of buzzwords...
@@ -383,7 +396,35 @@ fingers to adapt to, but it does look gorgeous.
 > the problem of having a properly functioning keyboard that simply
 > works when you plug it in, has been thoroughly solved by 2021.
 
-[Best mechanical keyboard at rtings](https://www.rtings.com/keyboard/reviews/best/mechanical)
+The Keychron Q5 Max was rated [best mechanical keyboard at rtings in 2023-2025](https://www.rtings.com/keyboard/reviews/best/mechanical)
+
+### Keychron K1 Pro
+
+The [K1 Pro](https://www.keychron.com/products/keychron-k1-pro-qmk-via-wireless-custom-mechanical-keyboard) is a good candidate:
+
+- 87 keys
+- wired (USB-C), wireless (BT 5.1), the "Max" has RF
+- 130h battery
+- Low-profile Gateron Red/Brown switches
+- QMK
+- Double-shot keycaps
+- rgb backlight
+- 1000Hz
+- N-Key Rollover
+- 18-24mm x 346mm x 118.5mm
+- 580g
+- ABS / aluminium
+- optional hot-swappable switches
+
+Rated [best mechanical keyboard for work at rtings since 2024](https://www.rtings.com/keyboard/reviews/best/work).
+
+Note that there's also the "Max" series which, according to rtings:
+
+> The major difference between the keyboards in these two lineups is
+> that the K Max keyboards have expanded wireless versatility with the
+> addition of 2.4GHz receiver connectivity, offering better overall
+> raw performance. The K Max boards also have more layers of internal
+> acoustic material.
 
 ## Cannon Keys
 
@@ -448,6 +489,24 @@ key on the right though.
 A friend built a [Neo80 keyboard](https://divinikey.com/collections/neo80-keyboard-kit-and-components/products/qwertykeys-neo80-case) by buying a PCB presoldered with
 Gazzew Boba U4 switches, and [earth tone keycaps](https://www.deskhero.ca/products/gmk-earth-tones-keycaps?variant=40347274805314) and likes it.
 
+## Boardsource
+
+A friend recommended the [Rechteck](https://www.boardsource.xyz/products/Rechteck):
+
+- ZMK
+- 60%
+- wired (USB-C) and wireless (BLE, 3-4 weeks battery)
+- Choc mechnical switches
+- keycaps have japanese engravings as well
+- really thin! even thinner than the Nuphy
+- 19mm x 274mm x 91mm
+- has a "print screen" key in the [default layout](https://github.com/boardsource/Rechtek_zmk_config/blob/main/config/bs_lp_60.keymap) (but not scroll
+  lock)
+- DIY build kit, see [instructions](https://www.boardsource.xyz/docs/build_guides-rechteck)
+- 300$USD for case, PCB, legs, choc red switches, and dark keycaps
+
+A bit too small for my taste, but nice looking.
+
 # Mini / travel keyboards
 
 Those are useful for the media station or traveling on the road with a

more edits, thanks znoteer!
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index 22a5f100..e59fe8ff 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -66,7 +66,7 @@ It didn't help that I tried to run nixpkgs on Debian which is
 technically possible, but you can tell that I'm not supposed to be
 doing this. My friend who reviewed this article expressed surprised at
 how easy this was, but then he only saw the finished result, not me
-tearing my hear out to make this actually work.
+tearing my hair out to make this actually work.
 
 # Nix on Debian primer
 
@@ -163,7 +163,7 @@ don't work with arms manufacturers or, if I would, I would be sure as
 hell to accept the nick (or nix?) on the chin when people would get
 upset, and try to make amends.
 
-So long live to the Nix people, I hope the community recovers from
+So long live the Nix people! I hope the community recovers from
 that dark moment, so far it seems like it will.
 
 And thanks for helping me test Harper!
@@ -176,4 +176,4 @@ And thanks for helping me test Harper!
 
 
 <!-- posted to the federation on 2025-03-06T15:59:56.639958 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/114117495781980196"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/114117495781980196"]]

automatic federated post of /blog/2025-03-06-nix
Command: ['/home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py', '--base-url', 'https://anarc.at/', '--post-path', '../../source/blog/2025-03-06-nix.md']
Plugin file: /home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index cb48d8e3..22a5f100 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -173,3 +173,7 @@ And thanks for helping me test Harper!
 [NixOS]: https://en.wikipedia.org/wiki/NixOS
 
 [[!tag debian-planet debian packaging review python-planet]]
+
+
+<!-- posted to the federation on 2025-03-06T15:59:56.639958 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/114117495781980196"]]
\ No newline at end of file

Revert "automatic federated post of /blog/2025-03-06-nix"
This reverts commit 860ffe5e295851492c2366c9c33ff00db23e770b.
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index 9c5a385a..cb48d8e3 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -173,7 +173,3 @@ And thanks for helping me test Harper!
 [NixOS]: https://en.wikipedia.org/wiki/NixOS
 
 [[!tag debian-planet debian packaging review python-planet]]
-
-
-<!-- posted to the federation on 2025-03-06T15:59:17.227401 -->
-[[!mastodon "http://example.com/simulated"]]
\ No newline at end of file

automatic federated post of /blog/2025-03-06-nix
Command: ['/home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py', '--base-url', 'https://anarc.at/', '--post-path', '../../source/blog/2025-03-06-nix.md', '--simulate']
Plugin file: /home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index cb48d8e3..9c5a385a 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -173,3 +173,7 @@ And thanks for helping me test Harper!
 [NixOS]: https://en.wikipedia.org/wiki/NixOS
 
 [[!tag debian-planet debian packaging review python-planet]]
+
+
+<!-- posted to the federation on 2025-03-06T15:59:17.227401 -->
+[[!mastodon "http://example.com/simulated"]]
\ No newline at end of file

edit myself
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index 74791a02..cb48d8e3 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -2,20 +2,20 @@
 
 # Meta
 
-So I've been trying to post more to this blog, in case you haven't
-noticed and one of the things that entails is to just dump over the
-fence a bunch of draft notes. In this specific case, I had a set of
-rough notes about [NixOS][] and particularly [Nix, the package
-manager][].
-
-In this case, you will even be able to see the very birth of an
-article, what it looks like before it becomes the prose that it is
-now, by looking at the [Git history of this file](https://gitlab.com/anarcat/anarc.at/-/blob/main/blog/2025-03-06-nix.md?ref_type=heads), particularly its
-[birth](https://gitlab.com/anarcat/anarc.at/-/blob/83ff51e4f06764a464b85664146e8fefedd08efe/blog/2025-03-06-nix.md), which shows how primitive an article can be, I guess. I
-have a couple of those left, and it would be pretty easy to publish
-them as is, but I feel I'd be doing others (and myself! I write for my
-own documentation too after all) a disservice by not going the extra
-mile on those.
+In case you haven't noticed, I'm trying to post and one of the things
+that entails is to just dump over the fence a bunch of draft notes. In
+this specific case, I had a set of rough notes about [NixOS][] and
+particularly [Nix, the package manager][].
+
+In this case, you can see the very birth of an article, what it looks
+like before it becomes the questionable prose it is now, by looking at
+the [Git history of this file](https://gitlab.com/anarcat/anarc.at/-/blob/main/blog/2025-03-06-nix.md?ref_type=heads), particularly its [birth](https://gitlab.com/anarcat/anarc.at/-/blob/83ff51e4f06764a464b85664146e8fefedd08efe/blog/2025-03-06-nix.md). I have
+a couple of those left, and it would be pretty easy to publish them as
+is, but I feel I'd be doing others (and myself! I write for my own
+documentation too after all) a disservice by not going the extra mile
+on those.
+
+So here's the long version of my experiment with Nix.
 
 # Nix
 
@@ -32,28 +32,31 @@ with other systems as I know that would inevitably get me dragged down
 into contributing into yet another free software project. I'm mature
 now and know where to draw the line. Right?
 
-So I'm just testing Nix, the package manager, on Debian. And what
-triggered this is that I learned from my friend that [nixpkgs](https://github.com/nixos/nixpkgs) is
-the [largest package repository](https://repology.org/repositories/statistics/total), a mind-boggling 100,000 at the
-time of writing (with [88% of packages up to date](https://repology.org/repositories/statistics/pnewest)), compared to
-around 40,000 in Debian (or 72,000 if you count binary packages, with
-72% up to date). I naively thought Debian was the largest, perhaps
-competing with Arch, and was wrong: Arch is larger than Debian too.
+So I'm just testing Nix, the package manager, on Debian, because I
+learned from my friend that [nixpkgs](https://github.com/nixos/nixpkgs) is the [largest package
+repository](https://repology.org/repositories/statistics/total) out there, a mind-boggling 100,000 at the time of
+writing (with [88% of packages up to date](https://repology.org/repositories/statistics/pnewest)), compared to around
+40,000 in Debian (or 72,000 if you count binary packages, with 72% up
+to date). I naively thought Debian was the largest, perhaps competing
+with Arch, and I was wrong: Arch is larger than Debian too.
 
-What brought me there is I wanted to run [Harper](https://writewithharper.com/), a neat and fast
+What brought me there is I wanted to run [Harper](https://writewithharper.com/), a fast
 spell-checker written in Rust. The logic behind using Nix instead of
-just downloading the source and running it myself is that I'm doing
-this thing where I delegate the work of supply-chain integrity
-checking to a distributor, a bit like you trust Debian developers like
-myself to package things for you in a sane way. I know this widens the
-attack surface to a third party as well of course, but the rationale
-is that I shift cryptographic verification to another stack than just
-"TLS + GitHub" (although that is somewhat still involved). Anyways.
+just downloading the source and running it myself is that I delegate
+the work of supply-chain integrity checking to a distributor, a bit
+like you trust Debian developers like myself to package things in a
+sane way. I know this widens the attack surface to a third party of
+course, but the rationale is that I shift cryptographic verification
+to another stack than just "TLS + GitHub" (although that is somewhat
+still involved) that's *linked* with my current chain (Debian
+packages).
 
 I have since then [stopped using Harper for various reasons](https://gitlab.com/anarcat/emacs-d/-/commit/093318283240b428b6ff2b8fdd565a82161ae03a) and
 also wrapped up my Nix experiment, but felt it worthwhile to jot down
 some observations on the project.
 
+# Hot take
+
 Overall, Nix is hard to get into, with a complicated learning curve. I
 have found the documentation to be a bit confusing, since there are
 many ways to do certain things. I particularly tripped on "flakes"
@@ -61,7 +64,9 @@ and, frankly, incomprehensible error reporting.
 
 It didn't help that I tried to run nixpkgs on Debian which is
 technically possible, but you can tell that I'm not supposed to be
-doing this.
+doing this. My friend who reviewed this article expressed surprised at
+how easy this was, but then he only saw the finished result, not me
+tearing my hear out to make this actually work.
 
 # Nix on Debian primer
 
@@ -74,41 +79,42 @@ get the rights to deploy Nix packages:
 
     adduser anarcat nix-users
 
-That wasn't easy to find, but is mentioned in the [README.Debian](https://sources.debian.org/src/nix/2.24.12%2Bdfsg-1/debian/nix-bin.README.Debian/)
-that's shipped with the Debian package.
+That wasn't easy to find, but is mentioned in the [README.Debian
+file](https://sources.debian.org/src/nix/2.24.12%2Bdfsg-1/debian/nix-bin.README.Debian/) shipped with the Debian package.
 
 Then, I didn't write this down, but the `README.Debian` file above
-mentions that, I *think* i added a "channel" like this:
+mentions it, so I *think* I added a "channel" like this:
 
     nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
     nix-channel --update
 
-And installed the [Harper package](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ha/harper/package.nix) with:
+And I likely installed the [Harper package](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ha/harper/package.nix) with:
 
     nix-env --install harper
 
-At this point, `harper` was installed in a ... profile? i think? I had
-to add `~/.nix-profile/bin` (a symlink to
+At this point, `harper` was installed in a ... profile? Not sure.
+
+I had to add `~/.nix-profile/bin` (a symlink to
 `/nix/store/sympqw0zyybxqzz6fzhv03lyivqqrq92-harper-0.10.0/bin`) to my
 `$PATH` environment for this to actually work.
 
 ## Side notes on documentation
 
-The last two steps were *hard* to figure out, which is kind of amazing
-because you'd think a tutorial on Nix would feature something like
-this prominently. But [three](https://zero-to-nix.com/start/install/) [different](https://nix.dev/manual/nix/2.24/quick-start) [tutorials](https://nix.dev/tutorials/) failed
-to bring me up to that basic setup, even the `README.Debian` didn't
-spell that out clearly. 
+Those last two commands (`nix-channel` and `nix-env`) were hard to
+figure out, which is kind of amazing because you'd think a tutorial on
+Nix would feature something like this prominently. But [three](https://zero-to-nix.com/start/install/)
+[different](https://nix.dev/manual/nix/2.24/quick-start) [tutorials](https://nix.dev/tutorials/) failed to bring me up to that basic
+setup, even the `README.Debian` didn't spell that out clearly.
 
 The tutorials all show me how to *develop* packages for Nix, not
 plainly how to *install* Nix software. This is presumably because "I'm
 doing it wrong": you shouldn't just "install a package", you should
 setup an environment declaratively and tell it what you want to do.
 
-But here's the thing: I didn't *want* to do the right thing. I just
-wanted to install harper, and docs failed to bring me to that basic
-hello world. Here's what one of the tutorials suggests as a first
-step:
+But here's the thing: I didn't *want* to "do the right thing". I just
+wanted to install Harper, and documentation failed to bring me to that
+basic "hello world" stage. Here's what one of the tutorials suggests
+as a first step, for example:
 
     curl -L https://nixos.org/nix/install | sh
     nix-shell --packages cowsay lolcat
@@ -116,20 +122,24 @@ step:
 
 ... which, when you follow through, leaves you with almost precisely
 nothing left installed (apart from Nix itself, setup with a nasty
-"curl pipe bash".
+"curl pipe bash". So while that works in testing Nix, you're not much
+better off than when you started.
 
 ## Rolling back everything
 
 Now that I have stopped using Harper, I don't need Nix anymore, which
 I'm sure my Nix friends will be sad to read about. Don't worry, I have
-notes now, and can try again! But still, I wanted to clear things out,
-so I did this, as root:
+notes now, and can try again! 
+
+But still, I wanted to clear things out, so I did this, as root:
 
     deluser anarcat nix-users
     apt purge nix-bin
     rm -rf /nix ~/.nix*
 
-## Side note on Nix dramas
+I *think* this cleared things out, but I'm not actually sure.
+
+# Side note on Nix drama
 
 This blurb wouldn't be complete without a mention that the Nix
 community has been somewhat tainted by the behavior of its founder. I
@@ -138,23 +148,25 @@ and made a [followup article about spinoffs and forks](https://lwn.net/Articles/
 reading as well.
 
 I did want to say that everyone I have been in contact with in the Nix
-community was absolutely fantastic and I am just really sad that the
-behavior of a single individual can pollute a community in such a
-way. 
+community was absolutely fantastic. So I am really sad that the
+behavior of a single individual can pollute a community in such a way.
 
 As a leader, if you have all but one responsability, it's to behave
 properly for people around you. It's actually really, really hard to
 do that, because yes, it means you need to act differently than others
-and no, you just don't get to be upset at others like normal, because
-you're in a position of authority. It's a lesson I'm still learning
-myself, to be fair. But at least I don't work with arms manufacturers

(Diff truncated)
fix typo
Closes: #1
diff --git a/contact.mdwn b/contact.mdwn
index 58dc8460..f12c172b 100644
--- a/contact.mdwn
+++ b/contact.mdwn
@@ -44,6 +44,6 @@ available on key servers and the [Web Key Discover protocol](https://keyserver.m
 Blog articles accept comments through Mastodon, so moderation policies
 of that space (including your home server and mine) apply there.
 
-If you found an error on the le site, you can [report it here](https://gitlab.com/anarcat/anarc.at/-/issues/new).
+If you found an error on the site, you can [report it here](https://gitlab.com/anarcat/anarc.at/-/issues/new).
 
 </div>

nix, first draft
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
index 8ee41304..74791a02 100644
--- a/blog/2025-03-06-nix.md
+++ b/blog/2025-03-06-nix.md
@@ -1,32 +1,163 @@
-comlicated learning curve
+[[!meta title="Nix Notes"]]
 
-apt install nix-bin
+# Meta
 
-adduser anarcat nix-users
+So I've been trying to post more to this blog, in case you haven't
+noticed and one of the things that entails is to just dump over the
+fence a bunch of draft notes. In this specific case, I had a set of
+rough notes about [NixOS][] and particularly [Nix, the package
+manager][].
 
-re-login
+In this case, you will even be able to see the very birth of an
+article, what it looks like before it becomes the prose that it is
+now, by looking at the [Git history of this file](https://gitlab.com/anarcat/anarc.at/-/blob/main/blog/2025-03-06-nix.md?ref_type=heads), particularly its
+[birth](https://gitlab.com/anarcat/anarc.at/-/blob/83ff51e4f06764a464b85664146e8fefedd08efe/blog/2025-03-06-nix.md), which shows how primitive an article can be, I guess. I
+have a couple of those left, and it would be pretty easy to publish
+them as is, but I feel I'd be doing others (and myself! I write for my
+own documentation too after all) a disservice by not going the extra
+mile on those.
 
-nix-env --install harper
+# Nix
 
+A couple friends are real fans of Nix. Just like I [work with Puppet a
+lot](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/puppet), they deploy and maintain servers (if not fleets of servers)
+with NixOS and its declarative package management system. Essentially,
+they use it as a configuration management system, which is pretty
+awesome.
 
+That, however, is a bit too high of a bar for me. I rarely try new
+operating systems these days: I'm a Debian developer and it takes most
+of my time to keep that functional. I'm not going to go around messing
+with other systems as I know that would inevitably get me dragged down
+into contributing into yet another free software project. I'm mature
+now and know where to draw the line. Right?
 
-[nixpkgs](https://github.com/nixos/nixpkgs) is the [largest number of packages (98k) according to repology](https://repology.org/repositories/statistics/total), with
-[85.5% of packages up to date](https://repology.org/repositories/statistics/pnewest) (compared to 38000 in Debian
-unstable, or 71466 if you count binary packages, and 69.5% up to date)
+So I'm just testing Nix, the package manager, on Debian. And what
+triggered this is that I learned from my friend that [nixpkgs](https://github.com/nixos/nixpkgs) is
+the [largest package repository](https://repology.org/repositories/statistics/total), a mind-boggling 100,000 at the
+time of writing (with [88% of packages up to date](https://repology.org/repositories/statistics/pnewest)), compared to
+around 40,000 in Debian (or 72,000 if you count binary packages, with
+72% up to date). I naively thought Debian was the largest, perhaps
+competing with Arch, and was wrong: Arch is larger than Debian too.
 
-docs:
+What brought me there is I wanted to run [Harper](https://writewithharper.com/), a neat and fast
+spell-checker written in Rust. The logic behind using Nix instead of
+just downloading the source and running it myself is that I'm doing
+this thing where I delegate the work of supply-chain integrity
+checking to a distributor, a bit like you trust Debian developers like
+myself to package things for you in a sane way. I know this widens the
+attack surface to a third party as well of course, but the rationale
+is that I shift cryptographic verification to another stack than just
+"TLS + GitHub" (although that is somewhat still involved). Anyways.
 
-- https://nix.dev/
-- https://zero-to-nix.com/
-- https://nix.dev/manual/nix/2.24/quick-start
+I have since then [stopped using Harper for various reasons](https://gitlab.com/anarcat/emacs-d/-/commit/093318283240b428b6ff2b8fdd565a82161ae03a) and
+also wrapped up my Nix experiment, but felt it worthwhile to jot down
+some observations on the project.
 
-[harper package](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ha/harper/package.nix)
+Overall, Nix is hard to get into, with a complicated learning curve. I
+have found the documentation to be a bit confusing, since there are
+many ways to do certain things. I particularly tripped on "flakes"
+and, frankly, incomprehensible error reporting.
 
+It didn't help that I tried to run nixpkgs on Debian which is
+technically possible, but you can tell that I'm not supposed to be
+doing this.
 
-https://lix.systems/
+# Nix on Debian primer
 
-purging
+So here's how I got started. First I installed the [nix binary package](https://tracker.debian.org/pkg/nix):
 
-deluser anarcat nix-users
+    apt install nix-bin
 
-rm -rf /nix ~/.nix*
+Then I had to add myself to the right group and logout/log back in to
+get the rights to deploy Nix packages:
+
+    adduser anarcat nix-users
+
+That wasn't easy to find, but is mentioned in the [README.Debian](https://sources.debian.org/src/nix/2.24.12%2Bdfsg-1/debian/nix-bin.README.Debian/)
+that's shipped with the Debian package.
+
+Then, I didn't write this down, but the `README.Debian` file above
+mentions that, I *think* i added a "channel" like this:
+
+    nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
+    nix-channel --update
+
+And installed the [Harper package](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ha/harper/package.nix) with:
+
+    nix-env --install harper
+
+At this point, `harper` was installed in a ... profile? i think? I had
+to add `~/.nix-profile/bin` (a symlink to
+`/nix/store/sympqw0zyybxqzz6fzhv03lyivqqrq92-harper-0.10.0/bin`) to my
+`$PATH` environment for this to actually work.
+
+## Side notes on documentation
+
+The last two steps were *hard* to figure out, which is kind of amazing
+because you'd think a tutorial on Nix would feature something like
+this prominently. But [three](https://zero-to-nix.com/start/install/) [different](https://nix.dev/manual/nix/2.24/quick-start) [tutorials](https://nix.dev/tutorials/) failed
+to bring me up to that basic setup, even the `README.Debian` didn't
+spell that out clearly. 
+
+The tutorials all show me how to *develop* packages for Nix, not
+plainly how to *install* Nix software. This is presumably because "I'm
+doing it wrong": you shouldn't just "install a package", you should
+setup an environment declaratively and tell it what you want to do.
+
+But here's the thing: I didn't *want* to do the right thing. I just
+wanted to install harper, and docs failed to bring me to that basic
+hello world. Here's what one of the tutorials suggests as a first
+step:
+
+    curl -L https://nixos.org/nix/install | sh
+    nix-shell --packages cowsay lolcat
+    nix-collect-garbage
+
+... which, when you follow through, leaves you with almost precisely
+nothing left installed (apart from Nix itself, setup with a nasty
+"curl pipe bash".
+
+## Rolling back everything
+
+Now that I have stopped using Harper, I don't need Nix anymore, which
+I'm sure my Nix friends will be sad to read about. Don't worry, I have
+notes now, and can try again! But still, I wanted to clear things out,
+so I did this, as root:
+
+    deluser anarcat nix-users
+    apt purge nix-bin
+    rm -rf /nix ~/.nix*
+
+## Side note on Nix dramas
+
+This blurb wouldn't be complete without a mention that the Nix
+community has been somewhat tainted by the behavior of its founder. I
+won't bother you too much with this; [LWN covered it well in 2024](https://lwn.net/Articles/970824/),
+and made a [followup article about spinoffs and forks](https://lwn.net/Articles/981124/) that's worth
+reading as well.
+
+I did want to say that everyone I have been in contact with in the Nix
+community was absolutely fantastic and I am just really sad that the
+behavior of a single individual can pollute a community in such a
+way. 
+
+As a leader, if you have all but one responsability, it's to behave
+properly for people around you. It's actually really, really hard to
+do that, because yes, it means you need to act differently than others
+and no, you just don't get to be upset at others like normal, because
+you're in a position of authority. It's a lesson I'm still learning
+myself, to be fair. But at least I don't work with arms manufacturers
+or, if I would, I would be sure as hell to accept the nick (or nix?)
+on the chin when people would get upset, and try to make amends.
+
+So long live to the Nix folks, I hope the community recovers from that
+dark moment, so far it seems like it will.
+
+And thanks for letting me test Harper!
+
+[Nix, the package manager]: https://en.wikipedia.org/wiki/Nix_(package_manager)
+
+[NixOS]: https://en.wikipedia.org/wiki/NixOS
+
+[[!tag debian-planet debian packaging review python-planet]]

draft nix notes, birthed 2024-09-08 15:51
diff --git a/blog/2025-03-06-nix.md b/blog/2025-03-06-nix.md
new file mode 100644
index 00000000..8ee41304
--- /dev/null
+++ b/blog/2025-03-06-nix.md
@@ -0,0 +1,32 @@
+comlicated learning curve
+
+apt install nix-bin
+
+adduser anarcat nix-users
+
+re-login
+
+nix-env --install harper
+
+
+
+[nixpkgs](https://github.com/nixos/nixpkgs) is the [largest number of packages (98k) according to repology](https://repology.org/repositories/statistics/total), with
+[85.5% of packages up to date](https://repology.org/repositories/statistics/pnewest) (compared to 38000 in Debian
+unstable, or 71466 if you count binary packages, and 69.5% up to date)
+
+docs:
+
+- https://nix.dev/
+- https://zero-to-nix.com/
+- https://nix.dev/manual/nix/2.24/quick-start
+
+[harper package](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ha/harper/package.nix)
+
+
+https://lix.systems/
+
+purging
+
+deluser anarcat nix-users
+
+rm -rf /nix ~/.nix*

document better my nu nuphy keyboard
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 8ccb1a24..26e300c0 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -49,6 +49,73 @@ less, and it's still really pretty. The V3 is kind of nice because you
 can reprogram the LED, although it's really complicated how you do
 that. I made caps lock red and scroll lock green.
 
+## Nuphy
+
+[Nuphy](https://nuphy.com/) has interesting mechanical keyboards, with a special focus on the
+sound and design of the keyboards.
+
+They have QMK-compatible firmware and pretty designs, with slim and
+TKL keyboards.
+
+### Short review
+
+I have found a second hand Air75 at some Amazon overflow thing here,
+and it is *really* nice. It's really slim, I (surprisingly) like the
+short travel and the sound is exquisite, even with red switches. It's
+nice to have the combo Bluetooth / USB-C setup, and there's even a
+"2.4GHz transmitter" in there for non-BT operation, but somehow the
+adapter for that was missing from the case.
+
+Two major downsides:
+
+- it's a bit on the heavy side, which would otherwise make this an
+  incredible travel keyboard
+- the TKL layout is a bit too narrow for me, i can't get used to the
+  vertical pgup/pgdown pad
+
+I have also heard first-hand reports of a full USB controller failure
+and a failure of support to provide proper followup, so that's a bit
+concerning.
+
+I have looked at [upgrading the firmware](https://nuphy.com/pages/qmk-firmwares) and it says that "Dongle
+and firmware updates required for this release", which means I need to
+flash the "RF firmware" and the "dongle firmware", and I'm not sure
+what those are.
+
+Apparently the "RF firmware" is flashed [from a phone](https://nuphy.com/pages/instructions-on-flashing-the-rf-firmwares) (?!) so you
+need to install [this Bluetooth app](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp) to do a "Device Firmware
+Update" (DFU) and while some of Nordic Semi apps are free software,
+that particular one [seems like docs-only](https://github.com/NordicSemiconductor/Android-nRF-Connect). There *might* be other
+ways to do DFUs with free software (see [this adafruit thing](https://learn.adafruit.com/introducing-adafruit-ble-bluetooth-low-energy-friend/dfu-on-android-4-dot-3-plus) for
+example) but wow this is getting complicated.
+
+The "dongle firmware" update is totally opaque: it seems it can only
+be done from Windows or Mac.
+
+So while in theory the keyboard has a QMK-compatible firmware, in
+practice the published firmware doesn't actually come with source code
+which is likely a GPL violation, as [qmk_firmware](https://github.com/qmk/qmk_firmware) is GPL. Someone
+is [keeping track of the various third-party firmwares](https://github.com/zhogov/nuphy-state-of-qmk-firmware).
+
+The whole point of this was to try to get a scroll lock key to work. I
+haven't figured it out.
+
+### Other reviews
+
+rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136) and outlined:
+
+ * [Halo75 v2](https://nuphy.com/collections/keyboards/products/halo75-v2-qmk-via-wireless-custom-mechanical-keyboard): "[Best Mid-Range Mechanical Keyboard](https://www.rtings.com/keyboard/reviews/best/mechanical)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
+ * [Gem 80](https://nuphy.com/collections/keyboards/products/gem80): "[Best TKL Keyboard For Enthusiasts](https://www.rtings.com/keyboard/reviews/best/tkl)" and "Best
+ modular mechanical keyboard" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/gem80))
+ * [Air75 v2](https://nuphy.com/collections/keyboards/products/air75-v2): "[Best Low-Profile Keyboard](https://www.rtings.com/keyboard/reviews/best/low-profile)", "[Best Mid-Range
+   Wireless Keyboard](https://www.rtings.com/keyboard/reviews/best/by-type/wireless)", "[Best Office Keyboard Without A
+   Numpad](https://www.rtings.com/keyboard/reviews/best/work)", "[Best Mid-Range Keyboard For Programming](https://www.rtings.com/keyboard/reviews/best/by-usage/programming)" ([full
+   review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
+ * [Halo96](https://nuphy.com/collections/keyboards/products/halo96): "[Best Upper Mid-Range Keyboard For Typing](https://www.rtings.com/keyboard/reviews/best/by-usage/writers)" and
+   "[Best Mid-Range RGB Keyboard](https://www.rtings.com/keyboard/reviews/best/rgb#recommendation_313370)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/halo96-halo65-halo75)), replaced by
+   the Halo96 v2 and Halo75 v2
+ * [Field75](https://nuphy.com/collections/keyboards/products/field75): not best in anything ([full review](https://www.rtings.com/keyboard/reviews/nuphy/field75))
+
 # Requirements
 
 ## Layout
@@ -376,46 +443,6 @@ feedback, trackballs.
 This is a pretty TKL keyboard, the [Multics](https://vortexgear.store/en-ca/products/multix?variant=43056025993379). Not sure about the Fn
 key on the right though.
 
-## Nuphy
-
-[Nuphy](https://nuphy.com/) has interesting mechanical keyboards, with a special focus on the
-sound and design of the keyboards.
-
-They have QMK-compatible firmware and pretty designs, with slim and
-TKL keyboards.
-
-I have found a second hand Air75 at some Amazon overflow thing here,
-and it is *really* nice. It's really slim, I (surprisingly) like the
-short travel and the sound is exquisite, even with red switches. It's
-nice to have the combo Bluetooth / USB-C setup, and there's even a
-"2.4GHz transmitter" in there for non-BT operation, but somehow the
-adapter for that was missing from the case.
-
-Two major downsides:
-
-- it's a bit on the heavy side, which would otherwise make this an
-  incredible travel keyboard
-- the TKL layout is a bit too narrow for me, i can't get used to the
-  vertical pgup/pgdown pad
-
-I have also heard first-hand reports of a full USB controller failure
-and a failure of support to provide proper followup, so that's a bit
-concerning.
-
-rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136) and outlined:
-
- * [Halo75 v2](https://nuphy.com/collections/keyboards/products/halo75-v2-qmk-via-wireless-custom-mechanical-keyboard): "[Best Mid-Range Mechanical Keyboard](https://www.rtings.com/keyboard/reviews/best/mechanical)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
- * [Gem 80](https://nuphy.com/collections/keyboards/products/gem80): "[Best TKL Keyboard For Enthusiasts](https://www.rtings.com/keyboard/reviews/best/tkl)" and "Best
- modular mechanical keyboard" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/gem80))
- * [Air75 v2](https://nuphy.com/collections/keyboards/products/air75-v2): "[Best Low-Profile Keyboard](https://www.rtings.com/keyboard/reviews/best/low-profile)", "[Best Mid-Range
-   Wireless Keyboard](https://www.rtings.com/keyboard/reviews/best/by-type/wireless)", "[Best Office Keyboard Without A
-   Numpad](https://www.rtings.com/keyboard/reviews/best/work)", "[Best Mid-Range Keyboard For Programming](https://www.rtings.com/keyboard/reviews/best/by-usage/programming)" ([full
-   review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
- * [Halo96](https://nuphy.com/collections/keyboards/products/halo96): "[Best Upper Mid-Range Keyboard For Typing](https://www.rtings.com/keyboard/reviews/best/by-usage/writers)" and
-   "[Best Mid-Range RGB Keyboard](https://www.rtings.com/keyboard/reviews/best/rgb#recommendation_313370)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/halo96-halo65-halo75)), replaced by
-   the Halo96 v2 and Halo75 v2
- * [Field75](https://nuphy.com/collections/keyboards/products/field75): not best in anything ([full review](https://www.rtings.com/keyboard/reviews/nuphy/field75))
-
 ## Divinikey
 
 A friend built a [Neo80 keyboard](https://divinikey.com/collections/neo80-keyboard-kit-and-components/products/qwertykeys-neo80-case) by buying a PCB presoldered with

clarify "now"
diff --git a/software/desktop.mdwn b/software/desktop.mdwn
index 5cdce2f3..4ebc914a 100644
--- a/software/desktop.mdwn
+++ b/software/desktop.mdwn
@@ -6,8 +6,8 @@ behind all this an more in [[history]] (2012).
 
 # Current setup
 
-I'm now using [[wayland]] with Sway, see the [[wayland]] page for the
-full documentation of the transition away from [[x11]].
+I'm now (2022) using [[wayland]] with Sway, see the [[wayland]] page
+for the full documentation of the transition away from [[x11]].
 
 See also the documentation specific to [[firefox]].
 

clarify desktop setups history
diff --git a/software/desktop.mdwn b/software/desktop.mdwn
index a8802c73..5cdce2f3 100644
--- a/software/desktop.mdwn
+++ b/software/desktop.mdwn
@@ -1,4 +1,6 @@
-This page documents, in a spirit of sharing known recipes, my current and older desktop setups. You can also read a narrative of the history behind all this an more in [[history]].
+This page documents, in a spirit of sharing known recipes, my current
+and older desktop setups. You can also read a narrative of the history
+behind all this an more in [[history]] (2012).
 
 [[!toc levels=2]]
 
@@ -12,10 +14,21 @@ See also the documentation specific to [[firefox]].
 # Older setups
 
  * [[x11]] (using [[wayland]] now), which include:
-   * [[sawfish and rox]]
-   * [[gnome2]]
-   * [[wmii]] (using Sway, see [[wayland]])
-   * [[xmonad]] (using Sway, see [[wayland]])
-   * i3, see [[x11]] for the documentation on that
+   * twm, afterstep, blackbox/fluxbox/openbox, englightenment, fvwm
+     and GNOME 1 (time immemorial, probably turn of the millenium, and
+     apparently before 2005, afterstep itself is 1997-2008, according
+     to the [news section on the website](http://www.afterstep.org/news.php?show=old), GNOME 1 is 1997-2002,
+     twm is from 1987 and, amazingly, has seen a release in 2022)
+   * [[sawfish and rox]] (???-2005)
+   * [[gnome2]] (~2006? GNOME 2 itself is 2002-2011)
+   * [[wmii]] (2006-2010)
+   *  awesome (2010-2015)
+   * [[xmonad]] (2015-2019~)
+   * i3 (~2019-2022) see [[x11]] for the documentation on that
+
+# Other configurations
+
  * [[chromium]] (using [[firefox]] now)
  * the [[gnome3]] exception, when I don't want to get complicated
+ * I have also tested and used KDE from time to time
+ * [[emacs]] has its own page

move gnome docs to their own page
diff --git a/software/desktop.mdwn b/software/desktop.mdwn
index 0902e228..a8802c73 100644
--- a/software/desktop.mdwn
+++ b/software/desktop.mdwn
@@ -9,69 +9,6 @@ full documentation of the transition away from [[x11]].
 
 See also the documentation specific to [[firefox]].
 
-# The GNOME exception
-
-When I don't want to feel like an exotic little snowflake that spends
-hours needlessly configuring his desktop environment, I go back to the
-default, which is usually GNOME. I work with the following
-configuration:
-
- * 4 basic desktops, with Super-[1234] ("windows key") mapped to the 4
-   desktops (I used to have a 2x2 layout, but couldn't figure out how
-   to do this in GNOME 3)
- * install [impatience](https://extensions.gnome.org/extension/277/impatience/) to disable animations
- * other gnome tweaks:
-   * enable the Compose key (super-right)
-   * alternatetab (to *not* group alt-tab by app, make sure to
-     configure the plugin to show all workspaces)
-   * applications menu
-   * places status indicator
-   * workrave display
-   * focus follows mouse (slow, but works)
- * consider [material shell](https://material-shell.com/)
-
-I still have to figure out how to enable the nice shortcuts I have in
-my normal setup. In particular, I should bind the same keybindings to
-`rofi`. I found the [keyboard navigation manual](https://help.gnome.org/users/gnome-help/stable/keyboard-nav.html.en) very useful to get
-familiar with the platform.
-
-Finally, a big blocker is how to configure GPG agent so that it
-properly talks with my Yubikey, otherwise I can't talk to any SSH
-server. So far I figured out how to disable GNOME Keyring by doing
-this:
-
-    ( cat /etc/xdg/autostart/gnome-keyring-ssh.desktop ; echo Hidden=true ) > ~/.config/autostart/gnome-keyring-ssh.desktop
-
-It disables the gnome-keyring startup routine. Then GPG-agent starts
-supervised, but doesn't show up in the environment, so we
-fail. Apparently, the following shell snippet is supposed to fix that
-problem:
-
-    # Needed for GPG2 to bridge with ssh-agent
-    #export SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh
-    #unset SSH_AGENT_PID
-    if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
-        export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
-    fi
-
-    export GPG_TTY="$(tty)"
-
-    # So annoying to need to do this every time
-    gpg-connect-agent updatestartuptty /bye > /dev/null
-
-This is all so weird and broken and confusing that I found about ten
-different guides trying to tell people how to do this kind of stuff:
-
- * [John Hopkins university's McQueen Lab: Yubikey for SSH Authentication](https://occamy.chemistry.jhu.edu/references/pubsoft/YubikeySSH/index.php)
- * [karlgrz: 2 Factor Authentication GPG & SSH keys with pass and Yubikey NEO](https://karlgrz.com/2fa-gpg-ssh-keys-with-pass-and-yubikey-neo/)
- * [Chris's Digital Realm: My Perfect GnuPG / SSH Agent Setup](https://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/)
- * [Simon Josefsson's blog: OpenPGP Smartcards and GNOME](https://blog.josefsson.org/2015/01/02/openpgp-smartcards-and-gnome/)
- * [Arch wiki: GNOME Keyring](https://wiki.archlinux.org/index.php/GNOME/Keyring#SSH_keys)
- * [lg's blog: YubiKey gpg/ssh: Great security but tricky install](https://lorgor.blogspot.com/2017/01/yubikey-gpgssh-great-security-but.html)
-
-Also: maybe try [PaperWM](https://github.com/paperwm/PaperWM) to get
-tiling into GNOME.
-
 # Older setups
 
  * [[x11]] (using [[wayland]] now), which include:
@@ -81,3 +18,4 @@ tiling into GNOME.
    * [[xmonad]] (using Sway, see [[wayland]])
    * i3, see [[x11]] for the documentation on that
  * [[chromium]] (using [[firefox]] now)
+ * the [[gnome3]] exception, when I don't want to get complicated
diff --git a/software/desktop/gnome3.md b/software/desktop/gnome3.md
new file mode 100644
index 00000000..1df0c0c1
--- /dev/null
+++ b/software/desktop/gnome3.md
@@ -0,0 +1,60 @@
+When I don't want to feel like an exotic little snowflake that spends
+hours needlessly configuring his desktop environment, I go back to the
+default, which is usually GNOME. I work with the following
+configuration:
+
+ * 4 basic desktops, with Super-[1234] ("windows key") mapped to the 4
+   desktops (I used to have a 2x2 layout, but couldn't figure out how
+   to do this in GNOME 3)
+ * install [impatience](https://extensions.gnome.org/extension/277/impatience/) to disable animations
+ * other gnome tweaks:
+   * enable the Compose key (super-right)
+   * alternatetab (to *not* group alt-tab by app, make sure to
+     configure the plugin to show all workspaces)
+   * applications menu
+   * places status indicator
+   * workrave display
+   * focus follows mouse (slow, but works)
+ * consider [material shell](https://material-shell.com/)
+
+I still have to figure out how to enable the nice shortcuts I have in
+my normal setup. In particular, I should bind the same keybindings to
+`rofi`. I found the [keyboard navigation manual](https://help.gnome.org/users/gnome-help/stable/keyboard-nav.html.en) very useful to get
+familiar with the platform.
+
+Finally, a big blocker is how to configure GPG agent so that it
+properly talks with my Yubikey, otherwise I can't talk to any SSH
+server. So far I figured out how to disable GNOME Keyring by doing
+this:
+
+    ( cat /etc/xdg/autostart/gnome-keyring-ssh.desktop ; echo Hidden=true ) > ~/.config/autostart/gnome-keyring-ssh.desktop
+
+It disables the gnome-keyring startup routine. Then GPG-agent starts
+supervised, but doesn't show up in the environment, so we
+fail. Apparently, the following shell snippet is supposed to fix that
+problem:
+
+    # Needed for GPG2 to bridge with ssh-agent
+    #export SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh
+    #unset SSH_AGENT_PID
+    if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
+        export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
+    fi
+
+    export GPG_TTY="$(tty)"
+
+    # So annoying to need to do this every time
+    gpg-connect-agent updatestartuptty /bye > /dev/null
+
+This is all so weird and broken and confusing that I found about ten
+different guides trying to tell people how to do this kind of stuff:
+
+ * [John Hopkins university's McQueen Lab: Yubikey for SSH Authentication](https://occamy.chemistry.jhu.edu/references/pubsoft/YubikeySSH/index.php)
+ * [karlgrz: 2 Factor Authentication GPG & SSH keys with pass and Yubikey NEO](https://karlgrz.com/2fa-gpg-ssh-keys-with-pass-and-yubikey-neo/)
+ * [Chris's Digital Realm: My Perfect GnuPG / SSH Agent Setup](https://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/)
+ * [Simon Josefsson's blog: OpenPGP Smartcards and GNOME](https://blog.josefsson.org/2015/01/02/openpgp-smartcards-and-gnome/)
+ * [Arch wiki: GNOME Keyring](https://wiki.archlinux.org/index.php/GNOME/Keyring#SSH_keys)
+ * [lg's blog: YubiKey gpg/ssh: Great security but tricky install](https://lorgor.blogspot.com/2017/01/yubikey-gpgssh-great-security-but.html)
+
+Also: maybe try [PaperWM](https://github.com/paperwm/PaperWM) to get
+tiling into GNOME.

Revert "automatic federated post of /blog/2025-02-28-fish"
This reverts commit 6a8d14495818b3344de0bc9f8485e10dc67da97a.
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index ee9e5d1a..12fc3707 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -143,6 +143,4 @@ use that stuff pretty regularly. I guess I could alias `command` to
 
 [[!tag debian-planet python-planet software review shell]]
 
-
-<!-- posted to the federation on 2025-03-03T10:56:36.141077 -->
-[[!mastodon "https://anarc.at/blog/2025-02-28-fish"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/114079876774333574"]]

automatic federated post of /blog/2025-02-28-fish
Command: ['/home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py', '--post-path', '/home/anarcat/wikis/anarc.at/blog/2025-02-28-fish.md', '--base-url=https://anarc.at/', '--simulate']
Plugin file: /home/anarcat/src/feed2exec/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/anarcat/wikis/anarc.at
Running on: angela
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index 12fc3707..ee9e5d1a 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -143,4 +143,6 @@ use that stuff pretty regularly. I guess I could alias `command` to
 
 [[!tag debian-planet python-planet software review shell]]
 
-[[!mastodon "https://kolektiva.social/@Anarcat/114079876774333574"]]
+
+<!-- posted to the federation on 2025-03-03T10:56:36.141077 -->
+[[!mastodon "https://anarc.at/blog/2025-02-28-fish"]]
\ No newline at end of file

fix typos, thanks ukleinek
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index 1973d60d..12fc3707 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -9,12 +9,12 @@ might have used UNIX shells for longer that you have lived.
 
 I'm not sure I'll keep using fish, but so far it's the first shell
 that survived heavy use outside of `zsh(1)` (unless you count
-`tsch(1)`, but that was in another millenia).
+`tcsh(1)`, but that was in another millenia).
 
 My normal shell is `bash(1)`, and it's still the shell I used
 everywhere else than my laptop, as I haven't switched on all the
 servers I managed, although it [is available since August 2022](https://gitlab.torproject.org/tpo/tpa/team/-/issues/40854) on
-`torproject.org` servers.. I first got interested in fish because they
+`torproject.org` servers. I first got interested in fish because they
 [ported to Rust](https://fishshell.com/blog/rustport/), making it one of the rare shells out there
 written in a "safe" and modern programming language, released after an
 impressive ~2 year of work with [Fish 4.0](https://fishshell.com/blog/new-in-40/).

reformat tofu
diff --git a/recette/tofu_general_tao.mdwn b/recette/tofu_general_tao.mdwn
index 0cb0cb34..a7809f91 100644
--- a/recette/tofu_general_tao.mdwn
+++ b/recette/tofu_general_tao.mdwn
@@ -1,12 +1,10 @@
-Tofu Général Tao
-================
+[[!meta title="Tofu Général Tao"]]
 
  * Portions: 4
  * Temps de préparation: 0:25
  * Source: [Ricardo](http://www.ricardocuisine.com/recettes/5675-tofu-general-tao)
 
-Ingredients
------------
+# Sauce
 
  * 60 ml (¼ tasse) de bouillon de poulet ou de légumes
  * 60 ml (¼ tasse) de cassonade
@@ -16,7 +14,7 @@ Ingredients
  * 5 ml (1 c. à thé) de fécule de maïs
  * 5 ml (1 c. à thé) de sambal oelek
 
-### Sauté
+# Sauté
 
  * 1 paquet de 454 g (1 lb) de tofu ferme, coupé en cubes et bien épongé (voir note)
  * 30 ml (2 c. à soupe) de fécule de maïs
@@ -26,23 +24,21 @@ Ingredients
  * 2 gousses d’ail, hachées finement
  * Sel et poivre
  
-### Accompagnements
+# Accompagnements
 
  * 1 brocoli coupé en bouquets, cuit à la vapeur
  * Riz cuit vapeur
- * Sélectionner tout Ajouter à ma liste d'épicerie
 
-Directions
-----------
+# Directions
 
-### Sauce
+## Sauce
 
 1. Dans un bol, mélanger tous les ingrédients. Réserver.
 
-### Sauté
+## Sauté
 
 2. Dans un grand bol, mélanger le tofu avec la fécule. Les secouer
-   pour en retirer l’excédent. Réserver sur une assiette.
+   pour en retirer l’excédent.
 
 3. Dans un wok, chauffer l’huile. Frire la moitié du tofu à la fois,
    jusqu’à ce qu’il soit légèrement doré. Saler et poivrer. Retirer le
@@ -50,7 +46,9 @@ Directions
    tapissée de papier absorbant.
 
 4. Dans le wok, faire revenir les oignons verts, le gingembre et l’ail
-   de 1 à 2 minutes. Ajouter de l’huile au besoin. Ajouter la sauce et
-   porter à ébullition en remuant. Ajouter le tofu et poursuivre la
-   cuisson en remuant pour le réchauffer et bien l’enrober de
-   sauce. Servir immédiatement sur du riz. Accompagner de brocoli.
+   de 1 à 2 minutes. Ajouter de l’huile au besoin. 
+   
+5. Ajouter la sauce et porter à ébullition en remuant. Ajouter le tofu
+   et poursuivre la cuisson en remuant pour le réchauffer et bien
+   l’enrober de sauce. Servir immédiatement sur du riz. Accompagner de
+   brocoli.

mastodon hook failed, again
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index bd0cbcc1..1973d60d 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -142,3 +142,5 @@ use that stuff pretty regularly. I guess I could alias `command` to
 <kbd>alt .</kbd> doesn't *always* work the way i expect.
 
 [[!tag debian-planet python-planet software review shell]]
+
+[[!mastodon "https://kolektiva.social/@Anarcat/114079876774333574"]]

publish notes about fish
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
index 2a89d98e..bd0cbcc1 100644
--- a/blog/2025-02-28-fish.md
+++ b/blog/2025-02-28-fish.md
@@ -141,4 +141,4 @@ use that stuff pretty regularly. I guess I could alias `command` to
 
 <kbd>alt .</kbd> doesn't *always* work the way i expect.
 
-[[!tag draft]]
+[[!tag debian-planet python-planet software review shell]]

draft article on fish
diff --git a/blog/2025-02-28-fish.md b/blog/2025-02-28-fish.md
new file mode 100644
index 00000000..2a89d98e
--- /dev/null
+++ b/blog/2025-02-28-fish.md
@@ -0,0 +1,144 @@
+[[!meta title="testing the fish shell"]]
+
+I have been testing fish for a couple months now (this file started on
+2025-01-03T23:52:15-0500 according to `stat(1)`), and those are my
+notes. I suspect people will have Opinions about my comments here. Do
+not comment unless you have some Constructive feedback to provide: I
+don't want to know if you think I am holding it Wrong. Consider that I
+might have used UNIX shells for longer that you have lived.
+
+I'm not sure I'll keep using fish, but so far it's the first shell
+that survived heavy use outside of `zsh(1)` (unless you count
+`tsch(1)`, but that was in another millenia).
+
+My normal shell is `bash(1)`, and it's still the shell I used
+everywhere else than my laptop, as I haven't switched on all the
+servers I managed, although it [is available since August 2022](https://gitlab.torproject.org/tpo/tpa/team/-/issues/40854) on
+`torproject.org` servers.. I first got interested in fish because they
+[ported to Rust](https://fishshell.com/blog/rustport/), making it one of the rare shells out there
+written in a "safe" and modern programming language, released after an
+impressive ~2 year of work with [Fish 4.0](https://fishshell.com/blog/new-in-40/).
+
+# Cool things
+
+Current directory gets shortened,
+`~/wikis/anarc.at/software/desktop/wayland` shows up as
+`~/w/a/s/d/wayland`
+
+Autocompletion rocks.
+
+Default prompt rocks. Doesn't seem vulnerable to command injection
+assaults, at least it doesn't trip on the [git-landmine](https://github.com/jwilk/git-landmine).
+
+It even includes pipe status output, which was a *huge pain* to
+implement in bash. Made me realized that if the last command succeeds,
+we don't see other failures, which is the case of my current prompt
+anyways! Signal reporting is better than my bash implementation too.
+
+So far the only modification I have made to the prompt is to add a
+`printf '\a'` to [output a bell](https://anarc.at/blog/2022-11-08-modern-bell-urgency/).
+
+By default, fish keeps a directory history (but separate from the
+`pushd` stack), that can be navigated with `cdh`, `prevd`, and
+`nextd`, `dirh` shows the history.
+
+# Less cool
+
+I feel there's visible latency in the prompt creation.
+
+POSIX-style functions (`foo() { true }`) are unsupported. Instead,
+fish uses whitespace-sensitive definitions like this:
+
+    function foo
+        true
+    end
+
+This means my (modest) collection of POSIX functions need to be ported
+to fish. Workaround: simple functions can be turned into aliases,
+which fish supports (but implements using functions).
+    
+EOF heredocs are considered to be "[minor syntactic sugar](https://fishshell.com/docs/current/fish_for_bash_users.html#heredocs)". I find
+them frigging useful.
+
+Process substitution is split on newlines, not whitespace. you need to
+pipe through `string split -n " "` to get the equivalent.
+
+`<(cmd)` doesn't exist: [they claim](https://fishshell.com/docs/current/fish_for_bash_users.html#process-substitution) you can use `cmd | foo -` as a
+replacement, but that's not correct: I used `<(cmd)` mostly where
+`foo` does *not* support `-` as a magic character to say 'read from
+stdin'.
+
+Documentation is... limited. It seems mostly geared [the web docs](https://fishshell.com/docs/current/index.html)
+which are... okay (but I couldn't find out about
+`~/.config/fish/conf.d` there!), but this is really inconvenient when
+you're trying to browse the manual pages. For example, fish thinks
+there's a `fish_prompt` manual page, according to its own completion
+mechanism, but `man(1)` cannot find that manual page. I can't find the
+manual for the [time command](https://fishshell.com/docs/current/cmds/time.html) (which is actually a keyword!)
+
+Fish renders multi-line commands with newlines. So if your terminal
+looks like this, say:
+
+    anarcat@angela:~> sq keyring merge torproject-keyring/lavamind-
+    95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
+    g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg | wl-copy
+
+... but it's actually one line, when you copy-paste the above, in
+foot(1), it will show up *exactly* like this, newlines and all:
+
+    sq keyring merge torproject-keyring/lavamind-
+    95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
+    g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg | wl-copy
+
+Whereas it should show up like this:
+
+    sq keyring merge torproject-keyring/lavamind-95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyring/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg | wl-copy
+
+Note that this is an issue specific to foot(1), alacritty(1) and
+gnome-terminal(1) don't suffer from that issue.
+
+# Blockers
+
+`()` is like `$()`: it's process substitution, and not a
+subshell. This is really impractical: I use `( cd foo ; do_something)`
+all the time to avoid losing the current directory... I guess I'm
+supposed to use `pushd` for this, but ouch. This wouldn't be so bad if
+it was just for `cd` though. Clean constructs like this:
+
+    ( git grep -l '^#!/.*bin/python' ; fdfind .py ) | sort -u
+
+Turn into what i find rather horrible:
+
+    begin; git grep -l '^#!/.*bin/python' ; fdfind .py ; end | sort -ub
+
+It... *works*, but it goes back to "oh dear, now there's a new
+langage again". I only found out about this construct while trying:
+
+    { git grep -l '^#!/.*bin/python' ; fdfind .py } | sort -u 
+
+... which fails and suggests using `begin`/`end`, at which point: why
+not just support the curly braces?
+
+`FOO=bar` is not allowed. It's actually recognized syntax, but creates
+a warning. We're supposed to use `set foo bar` instead. This *really*
+feels like a needless divergence from standard.
+
+Aliases are... peculiar. Typical constructs like `alias mv="\mv -i"`
+don't work because fish treats aliases as a function definition, and
+`\` is not magical there. This can be worked around by specifying the
+full path to the command, with e.g. `alias mv="/bin/mv -i"`. Another
+problem is trying to override a built-in, which seems completely
+[impossible](https://github.com/fish-shell/fish-shell/issues/3000). In my case, I *like* the `time(1)` command the way it
+is, thank you very much, and fish provides no way to bypass that
+builtin. It *is* possible to call `time(1)` with `command time`, but
+it's not possible to replace the `command` keyword so that means a lot
+of typing.
+
+Again: you can't use `\` to bypass aliases. This is a huge annoyance
+for me. I would need to learn to type `command` in long form, and I
+use that stuff pretty regularly. I guess I could alias `command` to
+`c` or something, but this is one of those huge muscle memory challenges.
+
+<kbd>alt .</kbd> doesn't *always* work the way i expect.
+
+[[!tag draft]]

framework expansion card issues
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index ac9b151d..1df943e0 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -1701,6 +1701,98 @@ In my power tests (see [[powerstat-wayland]]), the Ethernet card seems
 to use about 1.6W of power idle, without link, in the above "quirky"
 configuration where the card is functional but without autosuspend.
 
+## SSD expansion card
+
+I'm having reliability problems with the SSD expansion card. I've seen
+it completely hang and require a full reboot (even after yanking it
+out) for the kernel to recover (which, granted, sounds like a Linux
+kernel issue to me, but still...)
+
+I've also had slow transfer speeds, like 100-200KiB/s
+range. *Normally* that thing should be Really Fast. I can't find the
+original specs anymore on their main website, but the [internet
+archive provides](https://web.archive.org/web/20220924191928/https://frame.work/products/storage-expansion-card?v=FRACCFBZ0A):
+
+> With a USB 3.2 Gen 2 interface, the 1TB card exceeds 1000 MB/s read
+> and write speeds, while the 250GB card reaches 1000 MB/s read and
+> 375 MB/s write speeds.
+
+The "[2nd gen](https://frame.work/ca/en/products/storage-expansion-card-2nd-gen?v=FRACCFBZ0AR)" is supposedly:
+
+> With a USB 3.2 Gen 2 interface, both the 1TB (2nd Gen) and 250GB
+> (2nd Gen) cards reach 1000 MB/s read and 800 MB/s write speeds.
+
+Just now, for example, I transfered a couple of files (say a couple
+gigabytes) and transfer rates dropped down to 23 KiB/s in Git annex.
+
+I've filed a support request
+(`2bdd1269e014f42ee9639c547a60d781959786a98780cc050b4d4a562043aa8b@frame.work`)
+that led to a 21 message exchange which showed me Framework support
+doesn't quite have their scripts right. I was asked, in succession:
+
+1. basic questions like "when did it start?", "OS / BIOS version",
+   "make a video", "photo of the module with QR code", "try plugging
+   it elsewhere"
+2. try Ubuntu or Fedora and reset the BIOS
+3. try upgrading the UEFI firmware
+4. disconnect all cards, connect the storage card, and reboot in the
+   BIOS, take a picture
+5. try *all of your cards on all ports* (~48 tests in my case), I said
+   nope, try another storage card
+6. escalated my request
+7. try another large file, [replace the thermal pad](https://guides.frame.work/Guide/1TB+Expansion+Card+Throttling/105?lang=en), i asked to
+   clarify if they were refusing to repair the device and I had to do
+   it myself, no answer (i mean I *can*!)
+8. escalated my ticket (again)
+9. run a bunch of shell commands to extract info and dump it in a
+   tarball
+10. escalated my ticket (again, again)
+11. more questions: trying other slots, uptime, gnome-disks benchmarks
+    (which i didn't know about, but unfortunately didn't work for me)
+
+The magic command is:
+
+```
+cd ~/
+mkdir ~/framework
+journalctl > ~/framework/journal.log
+cp ~/.local/share/xorg/Xorg.0.log ~/framework/Xorg.0.log 2> /dev/null
+sudo dmidecode > ~/framework/demidecode
+sudo lspci -vv > ~/framework/lscpi.log
+sudo lsusb -vv > ~/framework/lsusb.log
+uname -a > ~/framework/uname.log
+cp /etc/os-release ~/framework/os-release
+lsblk -f > ~/framework/lsblk.log
+df -h > ~/framework/df.log
+cp /etc/fstab ~/framework/fstab.log
+tar czf framework-log.tgz ~/framework/*
+rm ~/framework/*
+rmdir ~/framework
+```
+
+Phew. I don't do hardware tech support but it *seems* to me this could
+have been shortened a bit, with a baked in checklist like:
+
+ 1. provide basic details like BIOS version number, a photo of the
+    module, when the problem started, which operating system you're
+    using, which laptop revision, etc
+ 2. reset the BIOS to defaults
+ 3. upgrade to the latest BIOS
+ 4. disconnect all cards except the affected one, reboot in the BIOS
+    to confirm it is detected
+ 5. try to reproduce with another storage device
+ 6. try in Fedora or Ubuntu
+
+Batching those in a *single* email would have sped up things both for
+me and them quite significantly. The above 10 queries took place in an
+exchange of 21 emails spanning 6 full days, and is still unsolved, 10
+days later.
+
+Update, 2025-02-28: seems like the issue is particularly affecting a
+single port, which Framework support says might be caused by the port
+and not the storage card. This could also explain issues I've had with
+the [SD card reader](https://community.frame.work/t/sd-card-reader-failure/60790) and the [USB-A port](https://community.frame.work/t/solved-usb-a-expansion-card-stops-working-until-unplugged/26579/14) for the longest time.
+
 ## Proprietary firmware blobs
 
 The framework does need proprietary firmware to operate. Specifically:

related qalculate blog post
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index 04ae60cd..15695774 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -471,6 +471,11 @@ ships packages for Windows and MacOS. There are third-party
 derivatives as well including a [web version](https://qalculator.xyz/) and an [Android
 app](https://f-droid.org/en/packages/com.jherkenhoff.qalculate/).
 
+# Updates
+
+Colin Watson liked this blog post and was inspired to [write his own
+hacks](https://www.chiark.greenend.org.uk/~cjwatson/blog/qalculate-time-hacks.html), similar to what's here, but with extras, check it out!
+
 [[!tag debian-planet python-planet software review math]]
 
 [[!mastodon "https://kolektiva.social/@Anarcat/113971985775192655"]]

another zfs link
diff --git a/software/zfs.md b/software/zfs.md
index 68afc10f..83e625d8 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -108,6 +108,9 @@ with standard LUKS instead of ZFS encryption:
     documentation](https://www.truenas.com/docs/references/draidprimer/) doesn't recommend dRAID except in special
     circumstances.
 
+    [This guide](https://calomel.org/zfs_raid_speed_capacity.html) talks more about the different RAID types and
+    compares performance.
+
  5. Make an actual filesystem:
  
         zfs create -o mountpoint=/srv-zfs tank/srv

add 2025
diff --git a/blog.mdwn b/blog.mdwn
index ea26f0b6..df76e9b4 100644
--- a/blog.mdwn
+++ b/blog.mdwn
@@ -97,6 +97,22 @@ more socially acceptable and less politically controversial.
 <!-- add it. yes, this is kind of silly. -->
 
 <!-- end copy-paste -->
+## 2025
+
+[[!inline pages="
+(
+  page(blog/*)
+  or tagged(blog)
+)
+and creation_year(2025)
+and !blog/*/*
+and !link(foo)
+and !tagged(draft)
+and !tagged(redirection)"
+archive=yes
+quick=yes
+]]
+
 ## 2024
 
 [[!inline pages="

progress in marcos disk replacement
diff --git a/hardware/server/marcos.mdwn b/hardware/server/marcos.mdwn
index 9706a905..a38c1afb 100644
--- a/hardware/server/marcos.mdwn
+++ b/hardware/server/marcos.mdwn
@@ -53,14 +53,10 @@ See [[services/backup]] for backup and drive replacement procedures.
 
 ## 2025 disk growth
 
-Added 2x8TiB drives.
-
-Issue with temperature warnings.
-
-Switched to ZFS for the new array because LVM was refusing to add a
-new RAID-1 array to the VG because of different block size (old disks
-are 512 logical / 4096 physical, new disks are 4k/4k). The actual
-error from `vgextend` was:
+Switched to ZFS on 2025-02-10 to add two new 8TiB drives because LVM
+was refusing to add a new RAID-1 array to the VG because of different
+block size (old disks are 512 logical / 4096 physical, new disks are
+4k/4k). The actual error from `vgextend` was:
 
 ```
 Devices have inconsistent logical block sizes (512 and 4096).
@@ -75,6 +71,31 @@ encryption.
 
 The `rsync` took 2d9 h40m, or 57h40m. Resync took 1h5m.
 
+Interestingly, zstd compression didn't give us any significant gain in
+disk capacity:
+
+```
+root@marcos:/home/anarcat# df   /mnt /srv
+Sys. de fichiers       blocs de 1K    Utilisé Disponible Uti% Monté sur
+/dev/mapper/vg_hdd-srv  7512681384 7276294760  161208316  98% /mnt
+tank/srv                7667172736 7240802944  426369792  95% /srv
+```
+
+But you'll note that the ZFS dataset gives us more room than ext4, for
+some reason:
+
+```
+root@marcos:/home/anarcat# df -h  /mnt /srv
+Sys. de fichiers       Taille Utilisé Dispo Uti% Monté sur
+/dev/mapper/vg_hdd-srv   7,0T    6,8T  154G  98% /mnt
+tank/srv                 7,2T    6,8T  407G  95% /srv
+```
+
+... 250GiGB! Note sure where that's coming from, but the capacity is larger.
+
+The old disk array wasn't yet added to the ZFS pool: for that the
+drives need to be reformatted, encrypted, and re-added to the pool.
+
 ## 2024 Fan replacement
 
 From the 2020 replacement, the server has always been away, either in
diff --git a/software/zfs.md b/software/zfs.md
index c67b324f..68afc10f 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -72,6 +72,42 @@ with standard LUKS instead of ZFS encryption:
             tank \
             mirror /dev/mapper/crypt_dev_sde1 /dev/mapper/crypt_dev_sdd1
 
+    That creatures a "mirror" pool with the two drives, which is
+    essentially a RAID-1 mirror. You could also do a RAID-Z pool, if
+    you have an odd number of drives, which is sort of like a RAID-5
+    array, except you have a flexible number of spares:
+    
+        zpool create \
+            -o ashift=12 \
+            -O acltype=posixacl -O xattr=sa -O dnodesize=auto \
+            -O compression=zstd \
+            -O relatime=on \
+            -O canmount=off \
+            -O mountpoint=none \
+            -f \
+            tank \
+            raidz sda1 sdb1 sdc1
+
+    To calculate the tradeoff, you can compute the final size of the
+    array with the formula `(N-P)*X`, where N is the number of drives,
+    P is the parity, and X is the size. 
+    
+    As a rule of thumb, with 1 spare, it's like RAID-5. Note that
+    RAID-Z cannot be resized, so in the above, you will be stuck with
+    3 drives in that array forever. It *can* be grown in *size* by
+    replacing the drives with bigger ones progressively, that said.
+    
+    Jim Salter [recommends mirrors instead of RAID-Z](https://jrs-s.net/2015/02/06/zfs-you-should-use-mirror-vdevs-not-raidz/), but the
+    [rsync.net people recommend RAID-Z3 with 12-15 drives joined in
+    3-4 vdev pools](https://news.ycombinator.com/item?id=25360013) (which would make ~20-36PiB arrays with 8TiB
+    drives, by the way). Note that this means *three* spares in a
+    12-15 drive array, or a 20-25% ratio.
+    
+    [dRAID](https://openzfs.github.io/openzfs-docs/Basic%20Concepts/dRAID%20Howto.html) is similar, except resilvering is faster, as the spare
+    is distributed among all the devices. The [TrueNAS
+    documentation](https://www.truenas.com/docs/references/draidprimer/) doesn't recommend dRAID except in special
+    circumstances.
+
  5. Make an actual filesystem:
  
         zfs create -o mountpoint=/srv-zfs tank/srv
@@ -211,6 +247,83 @@ IO statistics, every second:
 
     zpool iostat 1
 
+
+# Extending a pool
+
+Say you have a pool that's mirrored between two encrypted drives:
+
+```
+root@marcos:/home/anarcat# zpool status 
+  pool: tank
+ state: ONLINE
+  scan: scrub repaired 0B in 1 days 12:16:25 with 0 errors on Mon Feb 10 12:41:24 2025
+config:
+
+        NAME                STATE     READ WRITE CKSUM
+        tank                ONLINE       0     0     0
+          mirror-0          ONLINE       0     0     0
+            crypt_dev_sdb1  ONLINE       0     0     0
+            crypt_dev_sdc1  ONLINE       0     0     0
+```
+
+You want to grow this array with two more mirrored drives. 
+
+ 1. First, partition the drives:
+
+        for disk in /dev/sde /dev/sdd ; do
+          parted -s $disk mklabel gpt &&
+          parted -s $disk -a optimal mkpart primary 0% 100%
+        done
+
+ 2. Setup full disk encryption:
+ 
+        for disk in sde1 sdd1 ; do
+            cryptsetup luksFormat /dev/$disk
+            cryptsetup luksOpen /dev/$disk crypt_dev_$disk
+            echo crypt_dev_$disk UUID=$(lsblk -n -o UUID /dev/$disk | head -1) none luks,discard | tee -a /etc/crypttab &&
+        done
+
+    Use a `--keyfile` to avoid typing, while retaining the backup
+    recovery password:
+
+        for disk in sde1 sdd1 ; do
+            cryptsetup luksFormat /dev/$disk &&
+            cryptsetup luksOpen /dev/$disk crypt_dev_$disk &&
+            mkdir -p -m 0 /etc/luks &&
+            ( umask 077 && dd if=/dev/random bs=64 count=128 of=/etc/luks/crypt_dev_$disk ) &&
+            cryptsetup luksAddKey /dev/$disk /etc/luks/crypt_dev_$disk &&
+            echo crypt_dev_$disk UUID=$(lsblk -n -o UUID /dev/$disk | head -1) /etc/luks/crypt_dev_$disk luks,discard | tee -a /etc/crypttab
+        done
+
+    The above will ask you for the encryption key *four* times, but
+    will not require typing it on boot *while* simultaneously allowing
+    recovery without the key file.
+
+ 3. add the drives as a mirror vdev to the pool:
+
+        root@marcos:/home/anarcat# zpool add -n tank mirror /dev/sdb2 /dev/sdd2
+        would update 'tank' to the following configuration:
+        
+                tank
+                  mirror-0
+                    crypt_dev_sdb1
+                    crypt_dev_sdc1
+                  mirror
+                    sdb2
+                    sdd2
+
+    Notice how we use `-n` to simulate the result here. This adds another
+    mirror, essentially turning the pool in a RAID-10 mirror. See also
+    the notes about RAID-Z and dRAID in the pool creation above. 
+    
+    Note that this is likely *not* the right time to change the pool
+    layout: if you have a mirror layout, keep a mirror layout. If you
+    have a RAID-Z layout, keep that layout as well, just make a new
+    RAID-Z vdev instead.
+
+Note that you `zpool add`, you do *not* `zpool attach`: that would add
+a spare to a mirror, effectively.
+
 # Mounts
 
 ## Mounting

rsync completed
diff --git a/hardware/server/marcos.mdwn b/hardware/server/marcos.mdwn
index e6cfbe87..9706a905 100644
--- a/hardware/server/marcos.mdwn
+++ b/hardware/server/marcos.mdwn
@@ -73,6 +73,8 @@ The [[software/zfs]] page has the goods on how the pool was created,
 with a normal LUKS encryption under it to avoid trouble with ZFS
 encryption.
 
+The `rsync` took 2d9 h40m, or 57h40m. Resync took 1h5m.
+
 ## 2024 Fan replacement
 
 From the 2020 replacement, the server has always been away, either in

fix typo in zfs set invocation
diff --git a/software/zfs.md b/software/zfs.md
index e66a38dd..c67b324f 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -226,7 +226,7 @@ Note that it will mount the device in its pre-defined `mountpoint`
 property. In the above, it was `/boot`. If you want to change its
 mountpoint, it can be done on the fly with:
 
-    zfs set -o mountpoint=/mnt/boot bpool/ROOT/debian
+    zfs set mountpoint=/mnt/boot bpool/ROOT/debian
 
 If the dataset is already mounted, it will be *moved* to that new
 location immediately. Note that the parent pool's `altroot` property

talk about exchange rates refresh
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index 3012b1bd..04ae60cd 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -152,6 +152,10 @@ It has been 256 days since the exchange rates last were updated.
 Do you wish to update the exchange rates now? y
 ```
 
+As a [reader pointed out](https://en.osm.town/@mdione/113979012459360601), you can [set the refresh rate for
+currencies](https://qalculate.github.io/manual/qalculate-units.html#qalculate-currency), as [some countries](https://en.wikipedia.org/wiki/Economy_of_Argentina) will require way more frequent
+exchange rates.
+
 The graphical version has a little graphical indicator that, when you
 mouse over, tells you where the rate comes from.
 

add references to docs written for TPA
diff --git a/blog/2025-02-09-one-failed-year.md b/blog/2025-02-09-one-failed-year.md
index 8392191b..44411c38 100644
--- a/blog/2025-02-09-one-failed-year.md
+++ b/blog/2025-02-09-one-failed-year.md
@@ -216,7 +216,28 @@ I will, of course, still read comments sent by email or IRC or social
 media, but please, be kind.
 
 You can also, of course, follow the latest changes on the [TPA
-wiki](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/). 
+wiki](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/). If you want to catch up with the last year, some of the
+"novellas" I wrote include:
+
+- [TPA-RFC-33: Monitoring](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-33-monitoring): Nagios to Prometheus conversion, see
+  also the extensive [Prometheus documentation](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/service/prometheus) we wrote
+- [TPA-RFC-45: email architecture](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-45-mail-architecture): draft of long-term email
+  services at `torproject.org`
+- [TPA-RFC-62: TPA password manager](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-62-tpa-password-manager): switch to password-store
+- [TPA-RFC-63: storage server budget](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-63-storage-server-budget): buy a new backup storage
+  server (5k$ + 100$/mth)
+- [TPA-RFC-65: PostgreSQL backups](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-65-postgresql-backups): switching from legacy to
+  pgBackRest for database backups
+- [TPA-RFC-68: Idle canary servers](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-68-idle-canary-servers): provision test servers that
+  sit idle to monitor infrastructure and stage deployments
+- [TPA-RFC-71: Emergency email deployments, phase B](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-71-emergency-email-deployments-round-2): deploy a new
+  sender-rewriting mail forwarder, migrate mailing lists off the
+  legacy server to a new machine, migrate the remaining Schleuder list
+  to the Tails server, upgrade eugeni.
+- [TPA-RFC-76: Puppet merge request workflow](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-76-puppet-merge-request-workflow): how to mirror our
+  private Puppet repo to GitLab safely
+- [TPA-RFC-79: General merge request workflows](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-79-general-merge-request-workflows): how to use merge
+  requests, assignees, reviewers, draft and threads on GitLab projects
 
 (Well, no, you can't actually follow changes on a GitLab wiki. But we
 have a [wiki-replica git repository](https://gitlab.torproject.org/tpo/tpa/wiki-replica/) where you can see the [latest

finish editing last year blog post
diff --git a/blog/2025-02-09-one-failed-year.md b/blog/2025-02-09-one-failed-year.md
index a04eba86..8392191b 100644
--- a/blog/2025-02-09-one-failed-year.md
+++ b/blog/2025-02-09-one-failed-year.md
@@ -15,7 +15,9 @@ analysis... Then I said, and I quote:
 > but things hold up pretty well for what we throw at it, and it's worth
 > sharing that with the world...
 
-What a pile of bollocks.
+What a load of bollocks.
+
+[[!toc]]
 
 # A bad year for this blog
 
@@ -33,7 +35,7 @@ I did write about my work though, detailing the [migration from
 Gitolite to GitLab we completed that year](https://anarc.at/blog/2024-05-01-gitolite-gitlab-migration/). But after August, total
 radio silence until now.
 
-# Lots of drafts
+# Loads of drafts
 
 It's not that I have nothing to say: I have no less than *five* drafts
 in my working tree here, not counting three *actual* drafts recorded
@@ -63,9 +65,9 @@ Another part of me wants to make those things *just right*. The
 links, far from being useful for anyone else than me, and even
 then.
 
-The `on-dying` article, in particular, is becoming my
-nemesis. I've been wanting to write that article for over 6 years now,
-I think. It's just too hard.
+The `on-dying` article, in particular, is becoming my nemesis. I've
+been wanting to write that article for over 6 years now, I think. It's
+just too hard.
 
 # Writing elsewhere
 
@@ -86,8 +88,8 @@ anarcat@angela:help.torproject.org$ git shortlog --numbered --summary --group="f
     17	groente
 ```
 
-... but that's a bit unfair, since I've been there forever. Here's the
-last year:
+... but that's a bit unfair, since I've been there half a
+decade. Here's the last year:
 
 ```
 anarcat@angela:help.torproject.org$ git shortlog --since=2024-01-01 --numbered --summary --group="format:%al" | head -10
@@ -103,8 +105,9 @@ anarcat@angela:help.torproject.org$ git shortlog --since=2024-01-01 --numbered -
      4	stephen.swift
 ```
 
-Still kind of massive! But to truly get a sense of the amount I wrote
-in there, we should count the number of lines:
+So I still write the most commits! But to truly get a sense of the
+amount I wrote in there, we should count actual changes. Here it is by
+number of lines (from [commandlinefu.com](https://www.commandlinefu.com/commands/view/3889/prints-per-line-contribution-per-author-for-a-git-repository)):
 
 ```
 anarcat@angela:help.torproject.org$ git ls-files | xargs -n1 git blame --line-porcelain | sed -n 's/^author //p' | sort -f | uniq -ic | sort -nr | head -10
@@ -140,11 +143,31 @@ anarcat@angela:help.torproject.org$ find [d-s]* -type f -mtime -365 | xargs -n1
 ```
 
 Pretty good! 75k lines. But those are the files that were modified in
-the last year. If we go a little more nuts, we find that I wrote
-126116 words in that wiki, only in the last year. I also *deleted* 37k
-words, so the final total is more like 89k words, but still: that's
-about *forty* (40!) articles of the average size (~2k) I wrote in
-2022.
+the last year. If we go a [little more nuts](https://gitlab.com/anarcat/scripts/-/blob/1a754448170387db4d70dad22d30a99b00ac58fc/git-count-words-range.py), we find that:
+
+```
+anarcat@angela:help.torproject.org$ $ git-count-words-range.py  | sort -k6 -nr | head -10
+parsing commits for words changes from command: git log '--since=1 year ago' '--format=%H %al'
+anarcat 126116 - 36932 = 89184
+zen 31774 - 5749 = 26025
+groente 9732 - 607 = 9125
+lelutin 10768 - 2578 = 8190
+jerome 6236 - 2586 = 3650
+gaba 3164 - 491 = 2673
+stephen.swift 2443 - 673 = 1770
+kez 1034 - 74 = 960
+micah 772 - 250 = 522
+weasel 410 - 0 = 410
+```
+
+I wrote 126,116 words in that wiki, only in the last year. I also
+*deleted* 37k words, so the final total is more like 89k words, but
+still: that's about *forty* (40!) articles of the average size (~2k) I
+wrote in 2022.
+
+(And yes, I did go nuts and write a new log parser, essentially from
+scratch, to figure out those word diffs. I did get the courage only
+after asking GPT-4o for an example first, I must admit.)
 
 Let's celebrate that again: I wrote 90 thousand words in that wiki
 in 2024. [According to Wikipedia](https://en.wikipedia.org/wiki/Book#Fiction), a "novella" is 17,500 to 40,000
@@ -201,5 +224,4 @@ commits](https://gitlab.torproject.org/tpo/tpa/wiki-replica/-/commits/master), a
 
 See you there!
 
-[[!tag draft]]
-
+[[!tag debian-planet python-planet gloating meta stats]]

try again
diff --git a/blog/2025-02-09-one-failed-year.md b/blog/2025-02-09-one-failed-year.md
index 7c152504..a04eba86 100644
--- a/blog/2025-02-09-one-failed-year.md
+++ b/blog/2025-02-09-one-failed-year.md
@@ -202,3 +202,4 @@ commits](https://gitlab.torproject.org/tpo/tpa/wiki-replica/-/commits/master), a
 See you there!
 
 [[!tag draft]]
+

unpublish unfinished draft
diff --git a/blog/2025-02-09-one-failed-year.md b/blog/2025-02-09-one-failed-year.md
index ddbf4883..7c152504 100644
--- a/blog/2025-02-09-one-failed-year.md
+++ b/blog/2025-02-09-one-failed-year.md
@@ -201,4 +201,4 @@ commits](https://gitlab.torproject.org/tpo/tpa/wiki-replica/-/commits/master), a
 
 See you there!
 
-[[!tag debian-planet python-planet gloating meta stats]]
+[[!tag draft]]

fix error in password entropy
26*2 is only alphabetic. So change the description instead of redoing
the whole math.
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index 440f1836..3012b1bd 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -96,7 +96,7 @@ you count the number of possibilities in each entry (say, `[a-z]` is
 26 possibilities, "one word in a 8k dictionary" is 8000), extract the
 base-2 logarithm, multiplied by the number of entries.
 
-For example, an alphanumeric 14-character password is:
+For example, an alphabetic 14-character password is:
 
 ```
 > log2(26*2)*14
@@ -104,8 +104,8 @@ For example, an alphanumeric 14-character password is:
   log₂(26 × 2) × 14 ≈ 79.81
 ```
 
-... 80 bits of entropy. To get the equivalent in a diceware password
-with a 8000 word dictionary, you would need:
+... 80 bits of entropy. To get the equivalent in a [Diceware](https://en.wikipedia.org/wiki/Diceware)
+password with a 8000 word dictionary, you would need:
 
 ```
 > log2(8k)*x = 80
diff --git a/blog/2025-02-09-one-failed-year.md b/blog/2025-02-09-one-failed-year.md
new file mode 100644
index 00000000..ddbf4883
--- /dev/null
+++ b/blog/2025-02-09-one-failed-year.md
@@ -0,0 +1,204 @@
+[[!meta title="A slow blogging year"]]
+
+Well, 2024 will be remembered, won't it? I guess 2025 already wants to
+make its mark too, but let's not worry about that right now, and
+instead let's talk about me.
+
+A [[little over a year ago|2024-01-08-one-more-year]], I was gloating
+over how I had such a great blogging year in 2022, and was considering
+2023 to be average, then went on to gather more stats and traffic
+analysis... Then I said, and I quote:
+
+> I hope to write more next year. I've been thinking about a few posts I
+> could write for work, about how things work behind the scenes at Tor,
+> that could be informative for many people. We run a rather old setup,
+> but things hold up pretty well for what we throw at it, and it's worth
+> sharing that with the world...
+
+What a pile of bollocks.
+
+# A bad year for this blog
+
+2024 was the second worst year ever in my blogging history, tied with
+2009 at a measly 6 posts for the year:
+
+```
+anarcat@angela:anarc.at$ curl -sSL https://anarc.at/blog/ | grep 'href="\./' | grep -o 20[0-9][0-9] | sort | uniq -c | sort -nr | grep -v 2025 | tail -3
+      6 2024
+      6 2009
+      3 2014
+```
+
+I did write about my work though, detailing the [migration from
+Gitolite to GitLab we completed that year](https://anarc.at/blog/2024-05-01-gitolite-gitlab-migration/). But after August, total
+radio silence until now.
+
+# Lots of drafts
+
+It's not that I have nothing to say: I have no less than *five* drafts
+in my working tree here, not counting three *actual* drafts recorded
+in the Git repository here:
+
+```
+anarcat@angela:anarc.at$ git s blog
+## main...origin/main
+?? blog/bell-bot.md
+?? blog/fish.md
+?? blog/kensington.md
+?? blog/nixos.md
+?? blog/tmux.md
+anarcat@angela:anarc.at$ git grep -l '\!tag draft'
+blog/mobile-massive-gallery.md
+blog/on-dying.mdwn
+blog/secrets-recovery.md
+```
+
+I just don't have time to wrap those things up. I think part of me is
+disgusted by seeing my work [stolen by large corporations](https://arstechnica.com/tech-policy/2025/02/meta-torrented-over-81-7tb-of-pirated-books-to-train-ai-authors-say/) to build
+proprietary large language models while my [idols](https://en.wikipedia.org/wiki/Aaron_Swartz) have been pushed
+to suicide for trying to share science with the world.
+
+Another part of me wants to make those things *just right*. The
+"tagged drafts" above are nothing more than a huge pile of chaotic
+links, far from being useful for anyone else than me, and even
+then.
+
+The `on-dying` article, in particular, is becoming my
+nemesis. I've been wanting to write that article for over 6 years now,
+I think. It's just too hard.
+
+# Writing elsewhere
+
+There's also the fact that I write for work already. A lot. Here are
+the top-10 contributors to our team's wiki:
+
+```
+anarcat@angela:help.torproject.org$ git shortlog --numbered --summary --group="format:%al" | head -10
+  4272	anarcat
+   423	jerome
+   117	zen
+   116	lelutin
+   104	peter
+    58	kez
+    45	irl
+    43	hiro
+    18	gaba
+    17	groente
+```
+
+... but that's a bit unfair, since I've been there forever. Here's the
+last year:
+
+```
+anarcat@angela:help.torproject.org$ git shortlog --since=2024-01-01 --numbered --summary --group="format:%al" | head -10
+   827	anarcat
+   117	zen
+   116	lelutin
+    91	jerome
+    17	groente
+    10	gaba
+     8	micah
+     7	kez
+     5	jnewsome
+     4	stephen.swift
+```
+
+Still kind of massive! But to truly get a sense of the amount I wrote
+in there, we should count the number of lines:
+
+```
+anarcat@angela:help.torproject.org$ git ls-files | xargs -n1 git blame --line-porcelain | sed -n 's/^author //p' | sort -f | uniq -ic | sort -nr | head -10
+  99046 Antoine Beaupré
+   6900 Zen Fu
+   4784 Jérôme Charaoui
+   1446 Gabriel Filion
+   1146 Jerome Charaoui
+    837 groente
+    705 kez
+    569 Gaba
+    381 Matt Traudt
+    237 Stephen Swift
+```
+
+That, of course, is the entire history of the git repo, again. We
+should take only the last year into account, and probably ignore the
+`tails` directory, as sneaky Zen Fu imported the entire docs from
+another wiki there...
+
+```
+anarcat@angela:help.torproject.org$ find [d-s]* -type f -mtime -365 | xargs -n1 git blame --line-porcelain 2>/dev/null | sed -n 's/^author //p' | sort -f | uniq -ic | sort -nr | head -10
+  75037 Antoine Beaupré
+   2932 Jérôme Charaoui
+   1442 Gabriel Filion
+   1400 Zen Fu
+    929 Jerome Charaoui
+    837 groente
+    702 kez
+    569 Gaba
+    381 Matt Traudt
+    237 Stephen Swift
+```
+
+Pretty good! 75k lines. But those are the files that were modified in
+the last year. If we go a little more nuts, we find that I wrote
+126116 words in that wiki, only in the last year. I also *deleted* 37k
+words, so the final total is more like 89k words, but still: that's
+about *forty* (40!) articles of the average size (~2k) I wrote in
+2022.
+
+Let's celebrate that again: I wrote 90 thousand words in that wiki
+in 2024. [According to Wikipedia](https://en.wikipedia.org/wiki/Book#Fiction), a "novella" is 17,500 to 40,000
+words, which would mean I wrote about a novella and a novel, in the
+past year.
+
+But interestingly, if I look at the [repository analytics](https://gitlab.torproject.org/tpo/tpa/wiki-replica/-/graphs/master?ref_type=heads). I
+certainly didn't write *that* much more in the past year. So that
+alone cannot explain the lull in my production here.
+
+# Arguments
+
+Another part of me is just tired of the bickering and arguing on the
+internet. I have at least two articles in there that I suspect is
+going to get me a lot of push-back (NixOS and Fish). I know how to
+deal with this: you need to write well, consider the controversy,
+spell it out, and defuse things before they happen. But that's hard
+work and, frankly, I don't really care that much about what people
+think anymore.
+
+I'm not writing here to convince people. I have stop evangelizing a
+long time ago. Now, I'm more into documenting, and teaching. And,
+while teaching, there's a two-way interaction: when you give out a

(Diff truncated)
fix broken links
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index 9e402b1e..440f1836 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -446,12 +446,15 @@ Qalculate can:
 I have a hard time finding things it *cannot* do. When I get there, I
 typically need to resort to programming code in Python, use a
 spreadsheet, and others will turn to more complete engines like
-[Maple](https://en.wikipedia.org/wiki/Maple_(software)), [Mathematica](https://en.wikipedia.org/wiki/Wolfram_Mathematica) or [R](https://en.wikipedia.org/wiki/R_(programming_language)).
+[Maple][], [Mathematica](https://en.wikipedia.org/wiki/Wolfram_Mathematica) or [R][].
 
 But for daily use, Qalculate is just fantastic.
 
 And it's pink! Use it!
 
+[Maple]: https://en.wikipedia.org/wiki/Maple_(software)
+[R]: https://en.wikipedia.org/wiki/R_(programming_language)
+
 # Further reading and installation
 
 This is just scratching the surface, the [fine manual](https://qalculate.github.io/manual/) has more

add link to masto, somehow hook failed
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index dcc58cef..9e402b1e 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -465,3 +465,5 @@ derivatives as well including a [web version](https://qalculator.xyz/) and an [A
 app](https://f-droid.org/en/packages/com.jherkenhoff.qalculate/).
 
 [[!tag debian-planet python-planet software review math]]
+
+[[!mastodon "https://kolektiva.social/@Anarcat/113971985775192655"]]

fix word wrap
diff --git a/blog/2024-01-08-one-more-year.md b/blog/2024-01-08-one-more-year.md
index 3f43bacb..e6826bcd 100644
--- a/blog/2024-01-08-one-more-year.md
+++ b/blog/2024-01-08-one-more-year.md
@@ -19,8 +19,7 @@ The other thing that happened is that the one-liner I used to collect
 stats was broken (it counted folders and other unrelated files) and
 wildly overestimated 2022! Turns out I didn't write *that* much then:
 
-    anarc.at$ ls blog | grep '^[0-9][0-9][0-9][0-9].*.md' | se
-    d s/-.*// | sort | uniq -c  | sort -n -k2
+    anarc.at$ ls blog | grep '^[0-9][0-9][0-9][0-9].*.md' | sed s/-.*// | sort | uniq -c  | sort -n -k2
          57 2005
          43 2006
          20 2007
@@ -213,4 +212,4 @@ coming 2024 year...
 
 
 <!-- posted to the federation on 2024-01-09T15:38:17.848871 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/111727915674900043"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/111727915674900043"]]

document new marcos zfs pool
diff --git a/hardware/server/marcos.mdwn b/hardware/server/marcos.mdwn
index 42bf28e8..e6cfbe87 100644
--- a/hardware/server/marcos.mdwn
+++ b/hardware/server/marcos.mdwn
@@ -51,6 +51,28 @@ with new hardware in 2020.
 
 See [[services/backup]] for backup and drive replacement procedures.
 
+## 2025 disk growth
+
+Added 2x8TiB drives.
+
+Issue with temperature warnings.
+
+Switched to ZFS for the new array because LVM was refusing to add a
+new RAID-1 array to the VG because of different block size (old disks
+are 512 logical / 4096 physical, new disks are 4k/4k). The actual
+error from `vgextend` was:
+
+```
+Devices have inconsistent logical block sizes (512 and 4096).
+```
+
+There is apparently the solution of using `allow_mixed_block_sizes`
+but that seemed [really unsafe](https://unix.stackexchange.com/a/676537/30227)).
+
+The [[software/zfs]] page has the goods on how the pool was created,
+with a normal LUKS encryption under it to avoid trouble with ZFS
+encryption.
+
 ## 2024 Fan replacement
 
 From the 2020 replacement, the server has always been away, either in
diff --git a/software/zfs.md b/software/zfs.md
index 76ea279f..e66a38dd 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -12,6 +12,94 @@ instead.
  * [[Migration of a workstation to ZFS|blog/2022-11-17-zfs-migration]]
  * [[New server installation|hardware/tubman]]
 
+## New pool creation
+
+The above instructions are "full ZFS" setups, with even the root and
+boot partitions under ZFS, which is a little ... involved. A simpler
+setup is to use a normal install for the root and boot partitions, but
+ZFS for, say, `/srv`.
+
+Here we're assuming you're setting up a simple two-disk array, or
+"pool" in ZFS parlance, made of `/dev/sde` and `/dev/sdd`, encrypted
+with standard LUKS instead of ZFS encryption:
+
+ 1. Install requirements
+ 
+        apt install zfs-dkms zfsutils-linux
+        modprobe zfs
+
+ 2. Partition the disks:
+
+        for disk in /dev/sde /dev/sdd ; do
+          parted -s $disk mklabel gpt &&
+          parted -s $disk -a optimal mkpart primary 0% 100%
+        done
+
+ 3. Setup full disk encryption:
+ 
+        for disk in sde1 sdd1 ; do
+            cryptsetup luksFormat /dev/$disk
+            cryptsetup luksOpen /dev/$disk crypt_dev_$disk
+            echo crypt_dev_$disk UUID=$(lsblk -n -o UUID /dev/$disk | head -1) none luks,discard | tee -a /etc/crypttab &&
+        done
+
+    Use a `--keyfile` to avoid typing, while retaining the backup
+    recovery password:
+
+        for disk in sde1 sdd1 ; do
+            cryptsetup luksFormat /dev/$disk &&
+            cryptsetup luksOpen /dev/$disk crypt_dev_$disk &&
+            mkdir -p -m 0 /etc/luks &&
+            ( umask 077 && dd if=/dev/random bs=64 count=128 of=/etc/luks/crypt_dev_$disk ) &&
+            cryptsetup luksAddKey /dev/$disk /etc/luks/crypt_dev_$disk &&
+            echo crypt_dev_$disk UUID=$(lsblk -n -o UUID /dev/$disk | head -1) /etc/luks/crypt_dev_$disk luks,discard | tee -a /etc/crypttab
+        done
+
+    The above will ask you for the encryption key *four* times, but
+    will not require typing it on boot *while* simultaneously allowing
+    recovery without the key file.
+
+ 4. Create the pool:
+ 
+        zpool create \
+            -o ashift=12 \
+            -O acltype=posixacl -O xattr=sa -O dnodesize=auto \
+            -O compression=zstd \
+            -O relatime=on \
+            -O canmount=off \
+            -O mountpoint=none \
+            -f \
+            tank \
+            mirror /dev/mapper/crypt_dev_sde1 /dev/mapper/crypt_dev_sdd1
+
+ 5. Make an actual filesystem:
+ 
+        zfs create -o mountpoint=/srv-zfs tank/srv
+
+This should result in the following:
+
+```
+root@marcos:/etc/luks# zpool status
+  pool: tank
+ state: ONLINE
+config:
+
+        NAME                STATE     READ WRITE CKSUM
+        tank                ONLINE       0     0     0
+          mirror-0          ONLINE       0     0     0
+            crypt_dev_sdb1  ONLINE       0     0     0
+            crypt_dev_sdc1  ONLINE       0     0     0
+
+errors: No known data errors
+root@marcos:/etc/luks# zfs list
+NAME   USED  AVAIL     REFER  MOUNTPOINT
+tank   432K  7.14T       96K  none
+root@marcos:/etc/luks# zfs list
+NAME       USED  AVAIL     REFER  MOUNTPOINT
+tank       600K  7.14T       96K  none
+tank/srv    96K  7.14T       96K  /srv-zfs
+```
+
 ## Issues
 
 ### Swap

creating tag page tag/math
diff --git a/tag/math.mdwn b/tag/math.mdwn
new file mode 100644
index 00000000..f2c20b7b
--- /dev/null
+++ b/tag/math.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged math"]]
+
+[[!inline pages="tagged(math)" actions="no" archive="yes"
+feedshow=10]]

add toc, tags
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
index 6d29f4f9..dcc58cef 100644
--- a/blog/2025-02-08-qalculate-hacks.md
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -1,10 +1,13 @@
+[[!meta title="Qalculate hacks"]]
+
 This is going to be a controversial statement because some people are
 absolute nerds about this, but, I need to say it.
 
 [Qalculate](https://qalculate.github.io/) is the best calculator that has ever been made.
 
 I am not going to try to convince you of this, I just wanted to put
-out my bias out there before writing down those notes.
+out my bias out there before writing down those notes. I am a total
+fan.
 
 This page will collect my notes of cool hacks I do with
 Qalculate. Most examples are copy-pasted from the command-line
@@ -13,6 +16,8 @@ it's slightly better at displaying complex formulas. Discoverability
 is obviously also better for the cornucopia of features this fantastic
 application ships.
 
+[[!toc levels=3]]
+
 # Qalc commandline primer
 
 On Debian, Qalculate's CLI interface can be installed with:
@@ -458,3 +463,5 @@ Qalculate is packaged for [over 30 Linux distributions](https://repology.org/pro
 ships packages for Windows and MacOS. There are third-party
 derivatives as well including a [web version](https://qalculator.xyz/) and an [Android
 app](https://f-droid.org/en/packages/com.jherkenhoff.qalculate/).
+
+[[!tag debian-planet python-planet software review math]]

qalculate notes
diff --git a/blog/2025-02-08-qalculate-hacks.md b/blog/2025-02-08-qalculate-hacks.md
new file mode 100644
index 00000000..6d29f4f9
--- /dev/null
+++ b/blog/2025-02-08-qalculate-hacks.md
@@ -0,0 +1,460 @@
+This is going to be a controversial statement because some people are
+absolute nerds about this, but, I need to say it.
+
+[Qalculate](https://qalculate.github.io/) is the best calculator that has ever been made.
+
+I am not going to try to convince you of this, I just wanted to put
+out my bias out there before writing down those notes.
+
+This page will collect my notes of cool hacks I do with
+Qalculate. Most examples are copy-pasted from the command-line
+interface (`qalc(1)`), but I typically use the graphical interface as
+it's slightly better at displaying complex formulas. Discoverability
+is obviously also better for the cornucopia of features this fantastic
+application ships.
+
+# Qalc commandline primer
+
+On Debian, Qalculate's CLI interface can be installed with:
+
+    apt install qalc
+
+Then you start it with the `qalc` command, and end up on a prompt:
+
+```
+anarcat@angela:~$ qalc
+> 
+```
+
+Then it's a normal calculator:
+
+```
+anarcat@angela:~$ qalc
+> 1+1
+
+  1 + 1 = 2
+
+> 1/7
+
+  1 / 7 ≈ 0.1429
+
+> pi
+
+  pi ≈ 3.142
+
+> 
+```
+
+There's a bunch of variables to control display, approximation, and so
+on:
+
+```
+> set precision 6
+> 1/7
+
+  1 / 7 ≈ 0.142857
+> set precision 20
+> pi
+
+  pi ≈ 3.1415926535897932385
+```
+
+When I need more, I typically browse around the menus. One big issue I
+have with Qalculate is there are a *lot* of menus and features. I had
+to fiddle quite a bit to figure out that `set precision` command
+above. I might add more examples here as I find them.
+
+# Bandwidth estimates
+
+I often use the data units to estimate bandwidths. For example, here's
+what 1 megabit per second is over a month ("about 300 GiB"):
+
+```
+> 1 megabit/s * 30 day to gibibyte 
+
+  (1 megabit/second) × (30 days) ≈ 301.7 GiB
+```
+
+Or, "how long will it take to download X", in this case, 1GiB over a
+100 mbps link:
+
+```
+> 1GiB/(100 megabit/s)
+
+  (1 gibibyte) / (100 megabits/second) ≈ 1 min + 25.90 s
+```
+
+# Password entropy
+
+To calculate how much entropy (in bits) a given password structure,
+you count the number of possibilities in each entry (say, `[a-z]` is
+26 possibilities, "one word in a 8k dictionary" is 8000), extract the
+base-2 logarithm, multiplied by the number of entries.
+
+For example, an alphanumeric 14-character password is:
+
+```
+> log2(26*2)*14
+
+  log₂(26 × 2) × 14 ≈ 79.81
+```
+
+... 80 bits of entropy. To get the equivalent in a diceware password
+with a 8000 word dictionary, you would need:
+
+```
+> log2(8k)*x = 80
+
+  (log₂(8 × 000) × x) = 80 ≈
+
+  x ≈ 6.170
+```
+
+... about 6 words, which gives you:
+
+```
+> log2(8k)*6
+
+  log₂(8 × 1000) × 6 ≈ 77.79
+```
+
+78 bits of entropy.
+
+# Exchange rates
+
+You can convert between currencies!
+
+```
+> 1 EUR to USD
+
+  1 EUR ≈ 1.038 USD
+```
+
+Even fake ones!
+
+```
+> 1 BTC to USD
+
+  1 BTC ≈ 96712 USD
+```
+
+This relies on a database pulled form the internet (typically the
+[central european bank rates](https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml), see [the source](https://github.com/Qalculate/libqalculate/blob/4acd56ce0c2703af80d6a8857c963d4400f2091f/libqalculate/Calculator-definitions.cc#L3950-L3966)). It will prompt
+you if it's too old:
+
+```
+It has been 256 days since the exchange rates last were updated.
+Do you wish to update the exchange rates now? y
+```
+
+The graphical version has a little graphical indicator that, when you
+mouse over, tells you where the rate comes from.
+
+# Other conversions
+
+Here are other neat conversions extracted from my history
+
+```
+> teaspoon to ml
+
+  teaspoon = 5 mL
+
+> tablespoon to ml
+
+  tablespoon = 15 mL
+
+> 1 cup to ml 
+
+  1 cup ≈ 236.6 mL
+
+> 6 L/100km to mpg
+
+  (6 liters) / (100 kilometers) ≈ 39.20 mpg
+
+> 100 kph to mph
+
+  100 kph ≈ 62.14 mph
+
+> (108km - 72km) / 110km/h
+
+  ((108 kilometers) − (72 kilometers)) / (110 kilometers/hour) ≈
+  19 min + 38.18 s
+```
+
+# Completion time estimates
+
+This is a more involved example I often do.
+
+## Background
+
+Say you have started a long running copy job and you don't have the
+luxury of having a pipe you can insert pv(1) into to get a nice
+progress bar. For example, `rsync` or `cp -R` can have that problem
+(but not `tar`!).
+

(Diff truncated)
yet another tablet
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index 6d4c789e..50813067 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -399,6 +399,14 @@ it's worth giving them a try again, with the understanding it will
 
 Why can't we have nice things?
 
+## Pilet
+
+Raspi-based modular tablet: <https://soulscircuit.com/>
+
+crowdfunding: <https://www.kickstarter.com/projects/soulscircuit/pilet-opensource-modular-portable-mini-computer/>
+
+a bit too small (7").
+
 ## Star Labs
 
 https://ca.starlabs.systems/pages/starlite

ideas on testing hardware
diff --git a/hardware.mdwn b/hardware.mdwn
index 6ccc9bac..800f2c1d 100644
--- a/hardware.mdwn
+++ b/hardware.mdwn
@@ -18,6 +18,18 @@ Research
 
 Voir aussi mon [[historique|history]].
 
+Testing
+=========
+
+Ideas on how to test new hardware:
+
+- <https://blog.liw.fi/posts/2024/laptop-checklist/>
+- <https://wiki.debian.org/MycomputerbrandTemplate>
+- <https://wiki.debian.org/InstallingDebianOn/ComputerTemplate>
+- <https://feeding.cloud.geek.nz/posts/usual-server-setup/>
+- <https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/new-machine>
+- <https://stressant.readthedocs.io/>
+
 Toutes les pages
 ================
 

mention apple password generators
diff --git a/blog/2017-02-18-passwords-entropy.mdwn b/blog/2017-02-18-passwords-entropy.mdwn
index e3a3cef2..e2cb41ad 100644
--- a/blog/2017-02-18-passwords-entropy.mdwn
+++ b/blog/2017-02-18-passwords-entropy.mdwn
@@ -366,5 +366,6 @@ Possible updates:
  * [Tom's Hardware: Google Launches AI Supercomputer Powered by Nvidia
    H100 GPUs](https://www.tomshardware.com/news/google-a3-supercomputer-h100-googleio), "26 exaFlops"
  * [Nvidia: Grace Hopper superchip](https://www.nvidia.com/en-us/data-center/grace-hopper-superchip/)
+ * [Apple's password formats](https://rmondello.com/2024/10/07/apple-passwords-generated-strong-password-format/)
 
 [[!tag debian-planet debian passwords lwn geek security crypto]]

fix formatting on a really old article
It seems that this <code> should have been a <pre> but now we have ```
anyways...
diff --git a/blog/2005-11-23-comment-la-tunisie-censure-linternet.mdwn b/blog/2005-11-23-comment-la-tunisie-censure-linternet.mdwn
index e3d12535..7ef7b0f4 100644
--- a/blog/2005-11-23-comment-la-tunisie-censure-linternet.mdwn
+++ b/blog/2005-11-23-comment-la-tunisie-censure-linternet.mdwn
@@ -14,7 +14,7 @@ Donc, voilà pour le contexte politique. Le but de ce billet étant plus de dét
 
 Quand on est branché en Tunisie, la première chose que l'on remarque, évidemment, c'est que tous le traffic réseau passe par une agence gouvernementale:
 
-<code>
+```
 anarcat@ubuntu:~$ tracepath koumbit.net
  1:  192.168.2.3 (192.168.2.3)                              0.294ms pmtu 1500
  1:  . (192.168.2.1)                                        1.716ms 
@@ -35,11 +35,11 @@ anarcat@ubuntu:~$ tracepath koumbit.net
 16:  bgp-mtl-sora-gt.iweb.ca (66.38.187.202)              asymm 15 328.976ms 
 17:  pop.koumbit.org (209.172.32.46)                      asymm 14 343.124ms reached
       Resume: pmtu 1400 hops 17 back 14 
-</code>
+```
 
 On voit que les [hops](http://en.wikipedia.org/wiki/Hop_%28telecommunications%29) (en) 3 à 6 sont dans le bloc d'[IP](http://fr.wikipedia.org/wiki/Adresse_IP) 193.95.0.0/17, qui appartient à une agence gouvernementale:
 
-<code>
+```
 % Information related to '193.95.0.0 - 193.95.127.255'
 
 inetnum:      193.95.0.0 - 193.95.127.255
@@ -95,19 +95,19 @@ descr:        RIPE  LIR  for ISP's and Networks in Tunisia  -tn.ati-
 origin:       AS2609
 mnt-by:       ATI-MNT
 source:       RIPE # Filtered
-</code>
+```
 
 Le [DNS](http://fr.wikipedia.org/wiki/DNS) ne semble pas être trafiqué comme pour la [grande muraille de feu chinoise](http://en.wikipedia.org/wiki/Internet_censorship_in_China) (en):
 
-<code>
+```
 anarcat@ubuntu:~$ ping rsf.org
 PING rsf.org (80.67.162.3) 56(84) bytes of data.
 64 bytes from rsf.org (80.67.162.3): icmp_seq=1 ttl=49 time=258 ms
-</code>
+```
 
 Mais essayer de se connecter sur le port 80 sur rsf.org nous donne:
 
-<code>
+```
 anarcat@ubuntu:~$ telnet rsf.org 80
 Trying 80.67.162.3...
 Connected to rsf.org.
@@ -120,7 +120,7 @@ Date: Sat, 19 Nov 2005 01:32:53 GMT
 Content-Length: 1876
 Content-Type: text/html
 Server: NetCache appliance (NetApp/6.0.1)
-</code>
+```
 
 La page elle-même est une page d'erreur classique de [IIS](http://www.microsoft.com/WindowsServer2003/iis/default.mspx).  En faisant un ''reverse lookup'' de l'addresse, on trouve que c'est un serveur [AlternC](http://alternc.org/), [zola.netaktiv.com](http://zola.netaktiv.com/). On peut accéder à cette page correctement, ce n'est donc pas une restriction par IP, ce qui est un peu faible, si vous me demandez mon avis...
 
@@ -133,4 +133,4 @@ Références:
 * Les commanditaires du SMSI: [Genève](http://www.itu.int/wsis/funding/contributors1-fr.html), [Tunis](http://www.itu.int/wsis/funding/contributors2-fr.html). Notez que le [UIT](http://www.itu.int/) (un organisme de l'[ONU](http://un.org/)), a [plusieurs partenaires privés](http://www.itu.int/partners/partners.html), dont Microsoft. Voici [les jolis logos des partenaires](http://www.smsitunis2005.org/plateforme/detail.php?id=467) qui échappent à l'indexage de google..
 * Le [Comité d'organisation de haut niveau](http://www.itu.int/wsis/basic/list-hlsoc-fr.html) du SMSI. Notez bien la présence de l'infâme [Banque Mondiale](http://www.worldbank.org/) et de l'[OMC](http://www.wto.org/).
 
-[[!tag "vraie vie" "politique" "nouvelles" "monde" "geek" "censure" "vraie vie" "politique" "nouvelles" "monde" "geek" "censure" "vraie vie" "politique" "nouvelles" "monde" "geek" "censure"]]
\ No newline at end of file
+[[!tag "vraie vie" "politique" "nouvelles" "monde" "geek" "censure" "vraie vie" "politique" "nouvelles" "monde" "geek" "censure" "vraie vie" "politique" "nouvelles" "monde" "geek" "censure"]]

more dying tips
diff --git a/blog/on-dying.mdwn b/blog/on-dying.mdwn
index feeb9a02..064e9cc7 100644
--- a/blog/on-dying.mdwn
+++ b/blog/on-dying.mdwn
@@ -229,6 +229,12 @@ https://getyourshittogether.org/
 
 https://longnow.org/ideas/digital-avatars-and-our-refusal-to-die/
 
+# other advice
 
-[[!tag draft]]
+have someone responsible for taking all your electronics away,
+especially vintage/collection stuff, see a1584df8-55b5-4aa7-a991-55fc1f0f5e64@debian.org
+
+take care of reassigning copyright, see id:3c73defb03d3dc44df52aefa1655edf9@debian.org
 
+
+[[!tag draft]]

more image viewer misery
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index cbd6b561..b1da0ac0 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -785,14 +785,18 @@ Alternatives:
    `tracker-miner-fs-3.service` which I masked here to save I/O and
    battery, shows nothing even when enabled
  * [gwenview][]: KDE viewer, in Debian
- * [koko][]: KDE viewer, not in Debian?
+ * [koko][]: KDE viewer, in Debian
  * [imv][]: x11/wayland viewer, scriptable, [possible security issues
    and limited format support][], in Debian
+ * [loupe][]: Glib, Rust, nice basic viewer, no gallery, default
+   viewer in GNOME 45
  * [mvi][]: mpv-based image viewer
  * nomacs: basically abandoned upstream (no release since 2020), has
    an [unpatched][] [CVE-2020-23884][] since July 2020, does [bad
    vendoring][], and is in bad shape in Debian (4 minor releases
    behind).
+ * [oculante][]: Rust, not in Debian, flatpak, weird gaps around full
+   screen, built-in (custom) file browser has nice image previews
  * [pix][]: KDE/mobile viewer, large gap between images, confusing
    interface, seems designed for mobile, translates poorly on desktop,
    not in Debian, not to be confused with the [X-apps pix][]
@@ -805,11 +809,21 @@ Alternatives:
  * [qimgv][]: grid view, "fast", themes, shortcuts, copy/move images,
    basic editing (crop/rotate/resize), scripting, video support, in
    Debian
+ * [qview][]: C++, nice simple viewer, "fast" (not so much), no in
+   Debian, flatpak
  * [swayimg][]: overlay, in Debian
  * [tiny image finder][]: grid viewer, looks promising but Flatpak
    failed to render any image
  * [vimiv][]: vim-like keybindings, not in Debian
 
+Note that further tests have possibly shown a significant rendering
+pipeline issue that makes images look blurry in *all* image viewers
+except rare cases, see [this comment](https://todo.sr.ht/~whynothugo/shotman/11#event-404628) for a discussion. That was
+filed as a [bug against Sway in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1093671) for now. There was also a
+[bug filed against grim for this](https://todo.sr.ht/~emersion/grim/98) and a [feature request in
+shotman](https://todo.sr.ht/~whynothugo/shotman/11), but of which seem to be misplaced: the screenshots are
+actually sharp, the problem is the image viewers!
+
 See also [this list][], [this X11 list][] and [that list][] for other
 list of image viewers, not necessarily ported to Wayland.
 
@@ -819,6 +833,7 @@ list of image viewers, not necessarily ported to Wayland.
 [koko]: https://invent.kde.org/graphics/koko
 [imv]: https://sr.ht/~exec64/imv/
 [possible security issues and limited format support]: https://lwn.net/Articles/908579/
+[loupe]: https://gitlab.gnome.org/GNOME/loupe
 [mvi]: https://github.com/occivink/mpv-image-viewer
 [pix]: https://invent.kde.org/maui/pix
 [swayimg]: https://github.com/artemsen/swayimg
@@ -835,6 +850,8 @@ list of image viewers, not necessarily ported to Wayland.
 [GNOME Photos]: https://wiki.gnome.org/Apps/Photos
 [X-apps pix]: https://github.com/linuxmint/pix/
 [qimgv]: https://github.com/easymodo/qimgv
+[oculante]: https://github.com/woelper/oculante
+[qview]: https://interversehq.com/qview/
 
 ## Media player: mpv, gmpc / sublime
 
@@ -932,10 +949,9 @@ geeqie), one key feature is that it must support the "copy image to
 clipboard" (not the path! the actual full image!) functionality,
 typically to paste to GitHub/GitLab issues, or Signal.
 
-Another problem I'm suffering from right now is that *all* tools
-supporting Wayland don't seem to properly support fractional
-scaling. In the case of grim, it means the [screenshot is
-blurry](https://todo.sr.ht/~emersion/grim/98). shotman has similar issues, but has [apparently a fix](https://todo.sr.ht/~whynothugo/shotman/11).
+I've also started testing [shotman](https://shotman.whynothugo.nl/) (part of Debian Trixie) which
+outlined that I might have an issue with fractional display and image
+viewers, see the geeqie discussion above.
 
 [maim]: https://github.com/naelstrof/maim
 [slop]: https://tracker.debian.org/pkg/slop

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 .