commit 502c18f619996eaa1c7538964a30e9c923f52626
equwal <13551856+equwal@users.noreply.github.com>
2026-09-24 20:25:21 -0700
Move the sbm, SubRead and Rebind pages to posts
The three pages are now posts, so they show in the post list and the feed. Rebuild site/ to match. This state is already live.
{pages => posts}/rebind.md | 3 +
pages/sbm.md => posts/sbm-sync.md | 4 +-
{pages => posts}/subread.md | 8 +-
site/25-noveloj.html | 1 +
site/3000-Vocab-Flashcards-3k-Final-Solution.html | 1 +
site/A-new-way-to-release-code.html | 1 +
...-All-Japanese-All-The-Time-Mirror-at-xm0co.html | 1 +
site/Add-my-RSS-feed-to-your-feed-reader.html | 1 +
site/Brazil.html | 1 +
site/CSV.html | 1 +
site/Dont-Self-Host-Self-Locally.html | 1 +
site/Dont-use-make-uninstall.html | 1 +
site/Fish-Based-Navigation.html | 1 +
site/Forthe.html | 1 +
...Generate-your-OWN-internet-web-site-easily.html | 1 +
site/Get-on-mailing-lists-like-it-is-1989.html | 1 +
site/Git-extra-worktrees-ROCK.html | 1 +
site/Hackermen-neomutt-config.html | 1 +
site/Hey-kids-want-to-learn-the-unix-way.html | 1 +
site/How-Japanese-Aquire-Books.html | 1 +
.../How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html | 1 +
...Learn-a-Language-According-to-The-Internet.html | 1 +
...anage-100000-digital-books-in-15-languages.html | 1 +
site/How-to-take-notes-not-self-help-advice.html | 1 +
site/Install-Anki.html | 1 +
site/Install-Nix-on-Gentoo.html | 1 +
site/Learn-Kanji-in-a-Fortnight.html | 1 +
site/Mailing-list-in-one-line.html | 1 +
...Minimal-nvim-config-optional-AI-slop-enjoy.html | 1 +
...arning-for-multiple-languages-PREORDER-NOW.html | 1 +
...bout-polyglot-language-learning-LISTEN-NOW.html | 1 +
site/Newport.html | 1 +
site/Nixtoo-Genux-released.html | 1 +
site/POSIX-pipes-for-Lisp.html | 1 +
...Podcast-Now-Goes-on-The-YouTubecom-Website.html | 1 +
...-Long-Live-The-Queue-Antennapod-shill-post.html | 1 +
...n-analogy-for-proper-AI-Driven-Development.html | 1 +
site/SL--Dependency-Language.html | 1 +
site/Start-emailing-your-patches-GUIDE.html | 1 +
...-Macros-in-Alexandria-Code-Revival-Project.html | 1 +
...n-android-into-247-portable-polyglot-radio.html | 1 +
...nglo-your-literacy-materials-and-your-life.html | 1 +
...stem-for-many-instances-of-simple-programs.html | 1 +
...YOU-need-NixOS-on-your-desktop-and-servers.html | 1 +
site/WhyHow-to-host-a-bunch-of-crap-locally.html | 1 +
site/about.html | 1 +
site/aintitinit-Claude-INITIALIZER.html | 1 +
site/alt-hacks-zips.html | 1 +
site/alt-hacks.html | 1 +
site/biblio.html | 1 +
site/books.html | 1 +
site/booksimulator.html | 64 ++
site/budhismaj-rakontoj.html | 1 +
site/call.html | 1 +
site/cervido.html | 1 +
site/dmenu-scripts-repo-released.html | 1 +
site/donate.html | 1 +
site/esperantaj-artikoloj.html | 1 +
site/esperantaj-audoj.html | 1 +
site/esperantaj-libroj.html | 1 +
site/esperantaj-noveloj.html | 1 +
site/esperantaj-vortaroj.html | 1 +
site/esperanto-three-steps.html | 1 +
site/esperanto.html | 1 +
site/glider.html | 1 +
site/iilchat-setup-too-easy.html | 1 +
site/index.html | 8 +-
site/install-9front.html | 1 +
site/install-gentoo-hints.html | 1 +
site/irc-relay.html | 1 +
site/key.html | 1 +
site/la-faraono.html | 1 +
site/lair.html | 1 +
site/lesperant2.html | 1 +
site/link-farm.html | 1 +
site/lisprant.html | 1 +
site/matrix.html | 1 +
site/meti-limon.html | 1 +
site/newport-reference-manual.html | 1 +
site/norda-naturo.html | 1 +
.../3000-Vocab-Flashcards-3k-Final-Solution.html | 113 +++
site/postdata/A-new-way-to-release-code.html | 15 +
...-All-Japanese-All-The-Time-Mirror-at-xm0co.html | 4 +
.../Add-my-RSS-feed-to-your-feed-reader.html | 13 +
site/postdata/Brazil.html | 16 +
site/postdata/CSV.html | 31 +
site/postdata/Dont-Self-Host-Self-Locally.html | 61 ++
site/postdata/Dont-use-make-uninstall.html | 118 +++
site/postdata/Fish-Based-Navigation.html | 5 +
site/postdata/Forthe.html | 96 ++
...Generate-your-OWN-internet-web-site-easily.html | 56 ++
.../Get-on-mailing-lists-like-it-is-1989.html | 57 ++
site/postdata/Git-extra-worktrees-ROCK.html | 21 +
site/postdata/Hackermen-neomutt-config.html | 47 +
.../Hey-kids-want-to-learn-the-unix-way.html | 2 +
site/postdata/How-Japanese-Aquire-Books.html | 24 +
.../How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html | 122 +++
...Learn-a-Language-According-to-The-Internet.html | 31 +
...anage-100000-digital-books-in-15-languages.html | 49 +
.../How-to-take-notes-not-self-help-advice.html | 127 +++
site/postdata/Install-Anki.html | 20 +
site/postdata/Install-Nix-on-Gentoo.html | 32 +
site/postdata/Learn-Kanji-in-a-Fortnight.html | 92 ++
site/postdata/Mailing-list-in-one-line.html | 12 +
...Minimal-nvim-config-optional-AI-slop-enjoy.html | 68 ++
...arning-for-multiple-languages-PREORDER-NOW.html | 3 +
...bout-polyglot-language-learning-LISTEN-NOW.html | 55 ++
site/postdata/Newport.html | 13 +
site/postdata/Nixtoo-Genux-released.html | 29 +
site/postdata/POSIX-pipes-for-Lisp.html | 23 +
...Podcast-Now-Goes-on-The-YouTubecom-Website.html | 10 +
...-Long-Live-The-Queue-Antennapod-shill-post.html | 11 +
...n-analogy-for-proper-AI-Driven-Development.html | 58 ++
site/postdata/SL--Dependency-Language.html | 88 ++
.../Start-emailing-your-patches-GUIDE.html | 107 ++
...-Macros-in-Alexandria-Code-Revival-Project.html | 41 +
...n-android-into-247-portable-polyglot-radio.html | 46 +
...nglo-your-literacy-materials-and-your-life.html | 81 ++
...stem-for-many-instances-of-simple-programs.html | 86 ++
...YOU-need-NixOS-on-your-desktop-and-servers.html | 42 +
.../WhyHow-to-host-a-bunch-of-crap-locally.html | 71 ++
site/postdata/aintitinit-Claude-INITIALIZER.html | 40 +
site/postdata/dmenu-scripts-repo-released.html | 101 ++
site/postdata/iilchat-setup-too-easy.html | 99 ++
site/postdata/index.tsv | 53 +
site/postdata/install-9front.html | 15 +
site/postdata/install-gentoo-hints.html | 31 +
site/postdata/lisprant.html | 19 +
site/postdata/rebind.html | 37 +
site/postdata/sbm-sync.html | 35 +
site/postdata/sbm.html | 54 +
site/postdata/subread.html | 71 ++
site/postdata/tag-gen.html | 46 +
site/postdata/tmpl-insanely-simple-templates.html | 27 +
site/projects.html | 1 +
site/rebind.html | 4 +
site/release.html | 1 +
site/rss.xml | 1036 ++++++++++----------
site/rut.html | 1 +
site/sbm-sync.html | 81 ++
site/sbm.html | 84 +-
site/serpentoj-en-la-puto.html | 1 +
site/static/booksimulator.webp | Bin 0 -> 57490 bytes
site/sten-johansson.html | 1 +
site/subread.html | 16 +-
site/tag-gen.html | 1 +
site/tmpl-insanely-simple-templates.html | 1 +
site/youtube.html | 1 +
148 files changed, 3434 insertions(+), 581 deletions(-)
diff --git a/pages/rebind.md b/posts/rebind.md
similarity index 89%
rename from pages/rebind.md
rename to posts/rebind.md
index a01b86f..d6d6d6b 100644
--- a/pages/rebind.md
+++ b/posts/rebind.md
@@ -1,5 +1,7 @@
---
title: Rebind
+date: 2026-09-22
+tags: projects
---
Rebind is a tool to make the VIWoods AI Reader phone more usable with key rebindings and hardware hacks like the 5 extra-dim light settings. The VIWoods phone is a very nice piece of hardware, but the stock firmware that it comes with is not amazing. This app and the suite of tools that it spawned are a solution. Made with vibecode.
@@ -11,6 +13,7 @@ By the time you read this it will probably be on F-Droid and the Google Play sto
## Projects
* [rebind](https://github.com/equwal/rebind): Core app for rebinding and for the hardware hacks.
+* [assistkey](https://github.com/equwal/assistkey): Key remapper for the Viwoods AiPaper Reader: AI key, volume keys, and Power.
* [awesome-rebind](https://github.com/equwal/awesome-rebind): Similar page to this one, but AWESOME!?
* [ink-recents](https://github.com/equwal/ink-recents): An eink recent apps slider that is way nicer than the one viwoods installs.
* [ink-dim](https://github.com/equwal/ink-dim): Standalone app to do the dimming hack. Requires shizuku or live ADB
diff --git a/pages/sbm.md b/posts/sbm-sync.md
similarity index 96%
rename from pages/sbm.md
rename to posts/sbm-sync.md
index 03d8152..398bc83 100644
--- a/pages/sbm.md
+++ b/posts/sbm-sync.md
@@ -1,5 +1,7 @@
---
-title: sbm
+title: sbm Sync
+date: 2026-09-22
+tags: projects
---
Suckless Bookmark Manager (now sbm Sync)
diff --git a/pages/subread.md b/posts/subread.md
similarity index 79%
rename from pages/subread.md
rename to posts/subread.md
index fe6dc21..f256fa8 100644
--- a/pages/subread.md
+++ b/posts/subread.md
@@ -1,10 +1,12 @@
---
title: SubRead
+date: 2026-09-22
+tags: projects
---
SubRead makes it possible to read books with synced subtitles that keep your place. This is very nice for language learning.
-Subread is a suite of tools that port forced alignment to a variety of platforms. It is 100% free when used locally, although it is possible to do conversions with my cloud for a fee. It is 100% self-hostable free software. BUY NOW!
+Subread is a suite of tools that port forced alignment to a variety of platforms. It is 100% free when used locally, although it is possible to do conversions with my cloud for a fee. It is 100% self-hostable free software. [BUY NOW!](https://subread.space)
## Promo Video
@@ -18,6 +20,7 @@ Subread is a suite of tools that port forced alignment to a variety of platforms
## Projects
+* [subread.space](https://github.com/equwal/subread.space): Read an `.srt` one line at a time with the space bar. Works with Yomitan, furigana, and pitch accent markup.
* [subplz-web](https://github.com/equwal/subplz-web): subread.space source
* [subread-android](https://github.com/equwal/subread-android): subread.space android app (local and cloud conversions are possible)
* [subread-extension](https://github.com/equwal/subread-extension): Extension to use subread on youtube for audiobooks published there.
@@ -28,6 +31,9 @@ Subread is a suite of tools that port forced alignment to a variety of platforms
* [desktop-subtitle-replay](https://github.com/equwal/desktop-subtitle-replay): Whisper on your computer, and broadcast them to your friends. Useful for online language classrooms or bilingual exchanges.
* [honjimaku](https://github.com/equwal/honjimaku): Book subtitles database for japanese
* [Hoshi-Reader-Android](https://github.com/equwal/Hoshi-Reader-Android): Fork of hoshi reader that can do the conversion inside hoshi reader. Hopefully gets merged.
+* [chimahon](https://github.com/equwal/chimahon): Fork with a `readalong` branch for the Mihon immersion reader.
+* [dickt.store](https://github.com/equwal/dickt.store): Bring-your-own-key Yomitan dictionary converter.
+* [vibeslop-dickt](https://github.com/equwal/vibeslop-dickt): Make your own Yomitan dictionary in a few minutes.
## Why
diff --git a/site/25-noveloj.html b/site/25-noveloj.html
index 8ef5e01..7b96868 100755
--- a/site/25-noveloj.html
+++ b/site/25-noveloj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/3000-Vocab-Flashcards-3k-Final-Solution.html b/site/3000-Vocab-Flashcards-3k-Final-Solution.html
index f9f8184..d24fd14 100755
--- a/site/3000-Vocab-Flashcards-3k-Final-Solution.html
+++ b/site/3000-Vocab-Flashcards-3k-Final-Solution.html
@@ -29,6 +29,7 @@ Solution)" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/A-new-way-to-release-code.html b/site/A-new-way-to-release-code.html
index 340f348..687325a 100755
--- a/site/A-new-way-to-release-code.html
+++ b/site/A-new-way-to-release-code.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html b/site/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html
index 24e6dfa..aac1bac 100755
--- a/site/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html
+++ b/site/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html
@@ -29,6 +29,7 @@ Mirror) at xm0.co" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Add-my-RSS-feed-to-your-feed-reader.html b/site/Add-my-RSS-feed-to-your-feed-reader.html
index 2917eaa..6c97f7a 100755
--- a/site/Add-my-RSS-feed-to-your-feed-reader.html
+++ b/site/Add-my-RSS-feed-to-your-feed-reader.html
@@ -28,6 +28,7 @@ reader" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Brazil.html b/site/Brazil.html
index 0f6122e..b6bc2c3 100755
--- a/site/Brazil.html
+++ b/site/Brazil.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/CSV.html b/site/CSV.html
index 8b8c467..59a4b7e 100755
--- a/site/CSV.html
+++ b/site/CSV.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Dont-Self-Host-Self-Locally.html b/site/Dont-Self-Host-Self-Locally.html
index 7e4b77f..710259f 100755
--- a/site/Dont-Self-Host-Self-Locally.html
+++ b/site/Dont-Self-Host-Self-Locally.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Dont-use-make-uninstall.html b/site/Dont-use-make-uninstall.html
index 0f83cc0..13262e0 100755
--- a/site/Dont-use-make-uninstall.html
+++ b/site/Dont-use-make-uninstall.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Fish-Based-Navigation.html b/site/Fish-Based-Navigation.html
index 024e7c1..16f023b 100755
--- a/site/Fish-Based-Navigation.html
+++ b/site/Fish-Based-Navigation.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Forthe.html b/site/Forthe.html
index 26e1f83..bd7251a 100755
--- a/site/Forthe.html
+++ b/site/Forthe.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Generate-your-OWN-internet-web-site-easily.html b/site/Generate-your-OWN-internet-web-site-easily.html
index 5ce3cdb..cad3bb6 100755
--- a/site/Generate-your-OWN-internet-web-site-easily.html
+++ b/site/Generate-your-OWN-internet-web-site-easily.html
@@ -29,6 +29,7 @@ easily" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Get-on-mailing-lists-like-it-is-1989.html b/site/Get-on-mailing-lists-like-it-is-1989.html
index edaf382..e269bc7 100755
--- a/site/Get-on-mailing-lists-like-it-is-1989.html
+++ b/site/Get-on-mailing-lists-like-it-is-1989.html
@@ -28,6 +28,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Git-extra-worktrees-ROCK.html b/site/Git-extra-worktrees-ROCK.html
index 9300d5b..3b5ee79 100755
--- a/site/Git-extra-worktrees-ROCK.html
+++ b/site/Git-extra-worktrees-ROCK.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Hackermen-neomutt-config.html b/site/Hackermen-neomutt-config.html
index 048d189..81aa340 100755
--- a/site/Hackermen-neomutt-config.html
+++ b/site/Hackermen-neomutt-config.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Hey-kids-want-to-learn-the-unix-way.html b/site/Hey-kids-want-to-learn-the-unix-way.html
index ad3a9f1..3229d85 100755
--- a/site/Hey-kids-want-to-learn-the-unix-way.html
+++ b/site/Hey-kids-want-to-learn-the-unix-way.html
@@ -28,6 +28,7 @@ way" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/How-Japanese-Aquire-Books.html b/site/How-Japanese-Aquire-Books.html
index 54feb59..0df24ae 100755
--- a/site/How-Japanese-Aquire-Books.html
+++ b/site/How-Japanese-Aquire-Books.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html b/site/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html
index 26192af..9b417d0 100755
--- a/site/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html
+++ b/site/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html
@@ -29,6 +29,7 @@ minutes." />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/How-to-Learn-a-Language-According-to-The-Internet.html b/site/How-to-Learn-a-Language-According-to-The-Internet.html
index 01372d3..6b26002 100755
--- a/site/How-to-Learn-a-Language-According-to-The-Internet.html
+++ b/site/How-to-Learn-a-Language-According-to-The-Internet.html
@@ -29,6 +29,7 @@ to The Internet" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/How-to-manage-100000-digital-books-in-15-languages.html b/site/How-to-manage-100000-digital-books-in-15-languages.html
index 18b21a1..23d6374 100755
--- a/site/How-to-manage-100000-digital-books-in-15-languages.html
+++ b/site/How-to-manage-100000-digital-books-in-15-languages.html
@@ -29,6 +29,7 @@ in 15 languages" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/How-to-take-notes-not-self-help-advice.html b/site/How-to-take-notes-not-self-help-advice.html
index 44ca50a..6a90e7e 100755
--- a/site/How-to-take-notes-not-self-help-advice.html
+++ b/site/How-to-take-notes-not-self-help-advice.html
@@ -29,6 +29,7 @@ advice" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Install-Anki.html b/site/Install-Anki.html
index 8d56c57..4d9d3cb 100755
--- a/site/Install-Anki.html
+++ b/site/Install-Anki.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Install-Nix-on-Gentoo.html b/site/Install-Nix-on-Gentoo.html
index 7ae45eb..bba10e0 100755
--- a/site/Install-Nix-on-Gentoo.html
+++ b/site/Install-Nix-on-Gentoo.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Learn-Kanji-in-a-Fortnight.html b/site/Learn-Kanji-in-a-Fortnight.html
index 7869bf6..efa0db0 100755
--- a/site/Learn-Kanji-in-a-Fortnight.html
+++ b/site/Learn-Kanji-in-a-Fortnight.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Mailing-list-in-one-line.html b/site/Mailing-list-in-one-line.html
index b528381..663172a 100755
--- a/site/Mailing-list-in-one-line.html
+++ b/site/Mailing-list-in-one-line.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Minimal-nvim-config-optional-AI-slop-enjoy.html b/site/Minimal-nvim-config-optional-AI-slop-enjoy.html
index 1881d20..22f5a56 100755
--- a/site/Minimal-nvim-config-optional-AI-slop-enjoy.html
+++ b/site/Minimal-nvim-config-optional-AI-slop-enjoy.html
@@ -29,6 +29,7 @@ slop (enjoy!)" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html b/site/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html
index 33abe48..029098f 100755
--- a/site/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html
+++ b/site/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html
@@ -29,6 +29,7 @@ learning (for multiple languages)! PREORDER NOW!" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html b/site/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html
index 74bea57..9f6b1d7 100755
--- a/site/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html
+++ b/site/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html
@@ -29,6 +29,7 @@ learning (LISTEN NOW!)" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Newport.html b/site/Newport.html
index 54a487c..60a459b 100755
--- a/site/Newport.html
+++ b/site/Newport.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Nixtoo-Genux-released.html b/site/Nixtoo-Genux-released.html
index 4aa3c1c..031ec1c 100755
--- a/site/Nixtoo-Genux-released.html
+++ b/site/Nixtoo-Genux-released.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/POSIX-pipes-for-Lisp.html b/site/POSIX-pipes-for-Lisp.html
index ab9b5d3..1198117 100755
--- a/site/POSIX-pipes-for-Lisp.html
+++ b/site/POSIX-pipes-for-Lisp.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html b/site/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html
index 3bcdd9e..64d9307 100755
--- a/site/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html
+++ b/site/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html
@@ -29,6 +29,7 @@ YouTube.com Website" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html b/site/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html
index caf13d6..8bfb1d8 100755
--- a/site/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html
+++ b/site/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html
@@ -29,6 +29,7 @@ The Queue (Antennapod shill post)" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html b/site/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html
index b1f3b2c..3f78c79 100755
--- a/site/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html
+++ b/site/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html
@@ -29,6 +29,7 @@ analogy for proper AI Driven Development" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/SL--Dependency-Language.html b/site/SL--Dependency-Language.html
index b7d2e9e..028091a 100755
--- a/site/SL--Dependency-Language.html
+++ b/site/SL--Dependency-Language.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Start-emailing-your-patches-GUIDE.html b/site/Start-emailing-your-patches-GUIDE.html
index 939f2d9..0f8bc01 100755
--- a/site/Start-emailing-your-patches-GUIDE.html
+++ b/site/Start-emailing-your-patches-GUIDE.html
@@ -28,6 +28,7 @@ GUIDE" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html b/site/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html
index df7151c..e901b9b 100755
--- a/site/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html
+++ b/site/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html
@@ -29,6 +29,7 @@ Revival Project" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Turn-an-android-into-247-portable-polyglot-radio.html b/site/Turn-an-android-into-247-portable-polyglot-radio.html
index 550c5fc..0a246cf 100755
--- a/site/Turn-an-android-into-247-portable-polyglot-radio.html
+++ b/site/Turn-an-android-into-247-portable-polyglot-radio.html
@@ -29,6 +29,7 @@ polyglot radio" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Unanglo-your-literacy-materials-and-your-life.html b/site/Unanglo-your-literacy-materials-and-your-life.html
index 5680c31..358b65f 100755
--- a/site/Unanglo-your-literacy-materials-and-your-life.html
+++ b/site/Unanglo-your-literacy-materials-and-your-life.html
@@ -29,6 +29,7 @@ life) — Recently Written</title>
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Using-an-init-system-for-many-instances-of-simple-programs.html b/site/Using-an-init-system-for-many-instances-of-simple-programs.html
index 6d3a82a..65db656 100755
--- a/site/Using-an-init-system-for-many-instances-of-simple-programs.html
+++ b/site/Using-an-init-system-for-many-instances-of-simple-programs.html
@@ -29,6 +29,7 @@ instances of simple programs" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/Why-YOU-need-NixOS-on-your-desktop-and-servers.html b/site/Why-YOU-need-NixOS-on-your-desktop-and-servers.html
index 8e431ac..b4282ba 100755
--- a/site/Why-YOU-need-NixOS-on-your-desktop-and-servers.html
+++ b/site/Why-YOU-need-NixOS-on-your-desktop-and-servers.html
@@ -29,6 +29,7 @@ and servers" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/WhyHow-to-host-a-bunch-of-crap-locally.html b/site/WhyHow-to-host-a-bunch-of-crap-locally.html
index 87bb90e..14fcad0 100755
--- a/site/WhyHow-to-host-a-bunch-of-crap-locally.html
+++ b/site/WhyHow-to-host-a-bunch-of-crap-locally.html
@@ -29,6 +29,7 @@ locally" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/about.html b/site/about.html
index bbf7c9d..3a64219 100644
--- a/site/about.html
+++ b/site/about.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/aintitinit-Claude-INITIALIZER.html b/site/aintitinit-Claude-INITIALIZER.html
index 69eee15..0cb793f 100755
--- a/site/aintitinit-Claude-INITIALIZER.html
+++ b/site/aintitinit-Claude-INITIALIZER.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/alt-hacks-zips.html b/site/alt-hacks-zips.html
index 3b05902..50b8d04 100755
--- a/site/alt-hacks-zips.html
+++ b/site/alt-hacks-zips.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/alt-hacks.html b/site/alt-hacks.html
index 9b423fc..607b6f5 100755
--- a/site/alt-hacks.html
+++ b/site/alt-hacks.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/biblio.html b/site/biblio.html
index 84025d1..807abb9 100755
--- a/site/biblio.html
+++ b/site/biblio.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/books.html b/site/books.html
index 86c14cf..b4480ee 100755
--- a/site/books.html
+++ b/site/books.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/booksimulator.html b/site/booksimulator.html
new file mode 100644
index 0000000..542d86f
--- /dev/null
+++ b/site/booksimulator.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>BookSimulator.com — Recently Written</title>
+ <meta property="og:type" content="article" />
+ <meta property="og:site_name" content="Recently Written" />
+ <meta property="og:title" content="BookSimulator.com" />
+ <meta property="og:url" content="https://recentlywritten.com/booksimulator.html" />
+ <meta property="og:image" content="https://recentlywritten.com/static/og.png" />
+ <meta name="twitter:card" content="summary_large_image" />
+ <link rel="stylesheet" href="style.css" />
+ <link rel="alternate" type="application/rss+xml" title="Recently Written" href="rss.xml" />
+</head>
+<body>
+<div id="container">
+
+ <div id="top">
+ <a class="site-title" href="index.html">Recently Written</a>
+ <nav>
+ <a href="index.html">Home</a>
+ <a href="about.html">about</a>
+ <a href="lair.html">code</a>
+ <a href="git/index.html">git</a>
+ <a href="youtube.html">youtube</a>
+ <a href="esperanto.html">esperanto</a>
+ <a href="call.html">contact</a>
+ <a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
+ </nav>
+ </div>
+
+ <h1 class="post-title">BookSimulator.com</h1>
+
+ <p>Read a book in a book simulator. Comes with full dictionary lookup,
+ audiobook whispersync with Subread, VR support, Android, iOS, and
+ Steam editions, and a web edition.</p>
+ <figure>
+ <img src="static/booksimulator.webp"
+ alt="Reading a book: no. A book reading simulator: yes." />
+ <figcaption aria-hidden="true">Reading a book: no. A book reading
+ simulator: yes.</figcaption>
+ </figure>
+ <h2 id="try-it-on-the-web">Try it on the web</h2>
+ <ul>
+ <li><a href="https://booksimulator.com">booksimulator.com</a></li>
+ </ul>
+ <h2 id="how-it-works">How it works</h2>
+ <p>The alpha version is made with expensive AI subscriptions.</p>
+ <h2 id="why">Why</h2>
+ <p>It started as a joke. Book simulator is the goat though.</p>
+ <h2 id="support">Support</h2>
+ <p>Support the work at <a
+ href="https://ko-fi.com/truex">ko-fi.com/truex</a>.</p>
+
+ <div id="footer">
+ <a href="index.html">← Home</a> ·
+ <a href="https://github.com/equwal">Github</a>
+ </div>
+
+</div>
+</body>
+</html>
diff --git a/site/budhismaj-rakontoj.html b/site/budhismaj-rakontoj.html
index 2784a83..125a92c 100755
--- a/site/budhismaj-rakontoj.html
+++ b/site/budhismaj-rakontoj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/call.html b/site/call.html
index 94ab897..dba976d 100755
--- a/site/call.html
+++ b/site/call.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/cervido.html b/site/cervido.html
index 8f6ec97..fedbb22 100755
--- a/site/cervido.html
+++ b/site/cervido.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/dmenu-scripts-repo-released.html b/site/dmenu-scripts-repo-released.html
index b8cb31d..0083a61 100755
--- a/site/dmenu-scripts-repo-released.html
+++ b/site/dmenu-scripts-repo-released.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/donate.html b/site/donate.html
index 62e3f5b..78089b8 100755
--- a/site/donate.html
+++ b/site/donate.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperantaj-artikoloj.html b/site/esperantaj-artikoloj.html
index 372a2ae..b7547f7 100755
--- a/site/esperantaj-artikoloj.html
+++ b/site/esperantaj-artikoloj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperantaj-audoj.html b/site/esperantaj-audoj.html
index fd6d14f..11f0f2a 100755
--- a/site/esperantaj-audoj.html
+++ b/site/esperantaj-audoj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperantaj-libroj.html b/site/esperantaj-libroj.html
index f2c4412..6d2d91c 100755
--- a/site/esperantaj-libroj.html
+++ b/site/esperantaj-libroj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperantaj-noveloj.html b/site/esperantaj-noveloj.html
index e5c1157..d3ecfb3 100755
--- a/site/esperantaj-noveloj.html
+++ b/site/esperantaj-noveloj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperantaj-vortaroj.html b/site/esperantaj-vortaroj.html
index 66fac9c..b9dca02 100755
--- a/site/esperantaj-vortaroj.html
+++ b/site/esperantaj-vortaroj.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperanto-three-steps.html b/site/esperanto-three-steps.html
index 2f7a980..69cdacb 100755
--- a/site/esperanto-three-steps.html
+++ b/site/esperanto-three-steps.html
@@ -28,6 +28,7 @@ Mastery" />
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/esperanto.html b/site/esperanto.html
index 3d69277..54f1061 100755
--- a/site/esperanto.html
+++ b/site/esperanto.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/glider.html b/site/glider.html
index b448c59..70c0ec9 100755
--- a/site/glider.html
+++ b/site/glider.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/iilchat-setup-too-easy.html b/site/iilchat-setup-too-easy.html
index 969ab9d..ce6c503 100755
--- a/site/iilchat-setup-too-easy.html
+++ b/site/iilchat-setup-too-easy.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/index.html b/site/index.html
index 3cb8c97..58aa2c5 100644
--- a/site/index.html
+++ b/site/index.html
@@ -29,6 +29,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
@@ -38,6 +39,9 @@
</p>
<ul class="post-list">
+<li><a href="subread.html">SubRead</a></li>
+<li><a href="sbm-sync.html">sbm Sync</a></li>
+<li><a href="rebind.html">Rebind</a></li>
<li><a href="lisprant.html">Lisp Rant</a></li>
<li><a href="aintitinit-Claude-INITIALIZER.html">aintitinit: Claude INITIALIZER</a></li>
<li><a href="Hackermen-neomutt-config.html">Hackermen neomutt config</a></li>
@@ -99,6 +103,7 @@
<li><a href="alt-hacks-zips.html">alt-hack free tarballs</a></li>
<li><a href="biblio.html">la sankta biblio</a></li>
<li><a href="books.html">books</a></li>
+<li><a href="booksimulator.html">BookSimulator.com</a></li>
<li><a href="budhismaj-rakontoj.html">budhismaj rakontoj</a></li>
<li><a href="call.html">Contact</a></li>
<li><a href="cervido.html">La Cervido</a></li>
@@ -122,13 +127,10 @@
<li><a href="newport-reference-manual.html">Newport Reference Manual</a></li>
<li><a href="norda-naturo.html">norda naturo</a></li>
<li><a href="projects.html">Projects</a></li>
-<li><a href="rebind.html">Rebind</a></li>
<li><a href="release.html">release</a></li>
<li><a href="rut.html">rut</a></li>
-<li><a href="sbm.html">sbm</a></li>
<li><a href="serpentoj-en-la-puto.html">Serpentoj En La Puto</a></li>
<li><a href="sten-johansson.html">Noveloj de Sten Johansson</a></li>
-<li><a href="subread.html">SubRead</a></li>
<li><a href="youtube.html">YouTube</a></li>
</ul>
diff --git a/site/install-9front.html b/site/install-9front.html
index 9002846..f898181 100755
--- a/site/install-9front.html
+++ b/site/install-9front.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/install-gentoo-hints.html b/site/install-gentoo-hints.html
index a693449..f28e778 100755
--- a/site/install-gentoo-hints.html
+++ b/site/install-gentoo-hints.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/irc-relay.html b/site/irc-relay.html
index 328760c..9a8e48e 100755
--- a/site/irc-relay.html
+++ b/site/irc-relay.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/key.html b/site/key.html
index 6000a2b..837ac2a 100755
--- a/site/key.html
+++ b/site/key.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/la-faraono.html b/site/la-faraono.html
index f7d910f..c804e44 100755
--- a/site/la-faraono.html
+++ b/site/la-faraono.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/lair.html b/site/lair.html
index e1c1ef8..80b4fd0 100755
--- a/site/lair.html
+++ b/site/lair.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/lesperant2.html b/site/lesperant2.html
index b8f37ce..c49077a 100755
--- a/site/lesperant2.html
+++ b/site/lesperant2.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/link-farm.html b/site/link-farm.html
index d31629d..a4f7cfa 100755
--- a/site/link-farm.html
+++ b/site/link-farm.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/lisprant.html b/site/lisprant.html
index 11a4bf9..07b9a2a 100755
--- a/site/lisprant.html
+++ b/site/lisprant.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/matrix.html b/site/matrix.html
index 3fbffcf..ccd6096 100755
--- a/site/matrix.html
+++ b/site/matrix.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/meti-limon.html b/site/meti-limon.html
index fcc449b..46e4393 100755
--- a/site/meti-limon.html
+++ b/site/meti-limon.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/newport-reference-manual.html b/site/newport-reference-manual.html
index b383dcc..d726768 100755
--- a/site/newport-reference-manual.html
+++ b/site/newport-reference-manual.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/norda-naturo.html b/site/norda-naturo.html
index e9ac67b..6a86ca0 100755
--- a/site/norda-naturo.html
+++ b/site/norda-naturo.html
@@ -27,6 +27,7 @@
<a href="esperanto.html">esperanto</a>
<a href="call.html">contact</a>
<a href="rss.xml">rss</a>
+ <a href="account/">subscribe</a>
</nav>
</div>
diff --git a/site/postdata/3000-Vocab-Flashcards-3k-Final-Solution.html b/site/postdata/3000-Vocab-Flashcards-3k-Final-Solution.html
new file mode 100644
index 0000000..9d0345c
--- /dev/null
+++ b/site/postdata/3000-Vocab-Flashcards-3k-Final-Solution.html
@@ -0,0 +1,113 @@
+<h2 id="why-make-3000-vocabulary-flashcards">Why make 3,000 vocabulary
+flashcards?</h2>
+<p>Regardless of one’s starting point or goal, 3,000 flashcards can go a
+long way to improving one’s language ability:</p>
+<p>Some people have made 40,000 flashcards. This seems excessive. Surely
+there is much to be gained from making a smaller amount, and less to be
+gained from such a vast amount. There is also the “anki burnout”
+phenomenon, where flashcard users get into such flashcard overkill that
+they “quit anki”. The “3k final solution” is my response to this.</p>
+<h2 id="what-is-the-3k-final-solution">What is the 3k Final
+Solution?</h2>
+<p>You make 3,000 flashcards covering vocabulary. For basic language
+aquisition, these would probably be sentence cards with a vocabulary
+woYrd. A better strategy, which isn’t really for “language acquisition”
+but just for learning, is to save pieces of language because of their
+actual content (eg. quotes or proverbs from books), and learn words
+incidentally from them. I call these “Guarinian quotes” named after
+Guarino Guarini, a midieval Latin teacher who recommended this method.
+He didn’t recommend flashcards, instead, he recommended saving excerpts
+in a notebook from books, in order to remember important things once the
+book was gone. Guarnini:</p>
+<p>If then, in the course of the reading, saying, a wise and noble
+action, a quick a a gracious way of living, it seems to me t at hand a
+little notebook like a faithful make notes of points in the text; in
+this to your favourite parts without having to if copying things in the
+notebook causes a reading, you should [not do it].</p>
+<p>3,000 is presumed to be just large enough to notice a qualitative
+difference from any starting point. Any additional learning can be done
+more easily thanks to this little step up. And it only takes a few
+months or less, keeping the goal achievable on a reasonable timeline.
+After 3k, I suggest sticking only to making cards when “convenient,”
+“easy,” or for “ideas” rather than vocabulary. Consider these
+“vocabulary levels”.</p>
+<ul>
+<li><h3
+id="words-someone-who-has-read-100s-of-books-in-the-past-decade-in-said-language">>40,000
+words, someone who has read 100s of books in the past decade in said
+language</h3>
+<p>3,000 cards can help to gain a foothold in the vocabulary of a new
+field. Examples could be biology, chemistry, computing, or medicine.
+These fields have a lot of nomenclature to learn, which can be a real
+drag for beginners. Some medical students use Anki to make tons of cards
+for their studies. Each card surely contains multiple pieces of
+vocabulary that only a medical person would know, making them far to
+difficult for beginners. Some vocab study could close that gap, and
+allow one to focus on the ideas that need to be learnt rather than the
+words. Anyone looking to change careers could certainly benefit from
+this. The next step is to read more in that area.</p>
+<p>For someone with this much vocabulary, only specialised materials
+will have enough unknown vocabulary to make this a profitable
+activity.</p>
+<p>Sentence cards seem too basic for this, so I recommend only doing
+“Guarinian quotes” and “proverbs” instead.</p></li>
+<li><h3
+id="words-ie.-a-native-speaker-of-a-language-who-hasnt-read-daily-during-the-past-decade">~20,000
+words, ie. a native speaker of a language who hasn’t read daily during
+the past decade</h3>
+<p>Here, 3,000 cards would be a 10% increase in vocabulary, which would
+certainly be noticeable. This would likely result in a feeling that
+reading was “a bit easier”, or that books that were previously “boring”
+are now more interesting. One’s ability to understand complex
+descriptions might go up a bit. The next step would be to read more, of
+course.</p>
+<p>For someone with this small vocabulary, even everyday materials like
+movies and low-brow books will have enough vocabulary to quickly find
+unknown words. TV shows are not recommended.</p></li>
+<li><h3
+id="words-someone-who-actually-cant-read-or-someone-who-is-learning-a-language-and-hasnt-read-any-books">~10,000
+words someone who actually can’t read, or someone who is learning a
+language and hasn’t read any books</h3>
+<p>A 30% increase in vocabulary would lead to seeing cards from the deck
+on every page of reading, and be a massive boost to understanding. It
+would open up whole new kinds of material that are now more interesting,
+perhaps even books.</p>
+<p>For someone with this much vocabulary, even basic materials like the
+newspaper will have lots of unknown words. Movies are recommendable, TV
+shows are not.</p></li>
+<li><h3
+id="words-a-near-beginner-can-struggle-to-understand-basic-material">~3,000
+words a near beginner, can struggle to understand basic material</h3>
+<p>At this level, the goal is to go from “struggling to understand
+anything” to “being able to enjoy basic materials” like the news. 3,000
+vocab words will fix this. TV shows can be a good source of a massive
+volume of basic language. Attempting to read anything at this level as
+an adult is sure to be super boring. For kids, “graded readers” have
+been invented to get them reading.</p></li>
+<li><h3
+id="words-absolute-beginner-in-a-language-knows-about-0-words">~0 words
+Absolute beginner in a language: knows about 0 words</h3>
+<p>At this level, even the way words are pronounced and go together
+grammatically is not known. So it is recommended to focus on making
+cards with a native speaker’s pronunciation in addition to the writing,
+eg., from television. In principle, audiobook+book should be able to
+provide lots of quality sentences, but I’ve struggled to find an
+efficient way to make cards like that, since it would involve manually
+lining up timings. Instead, I take advantage of subtitle timings to make
+instant flashcards. At this level, it’s not even worth putting any
+definition on the back, since choosing the correct definition for the
+context is too difficult. Instead, just making a card with a full
+sentence on the front and “passing” it if it “makes sense” and failing
+it/deleting it if it “is too hard” should work for the first 1,000 or so
+cards.</p>
+<p>Some people like to study “common words” because the top 100 words
+make up 50% of langauage (etc.). This is fine, but doesn’t really
+matter, since those words will be learnt anyway due to being insanely
+common. It makes more sense to attempt to learn actual concrete
+vocabulary instead and learn those incidentally, at least with this
+method.</p>
+<p>Ultimately, at this level, the focus should be on trying to find
+material where it’s possible to “undestand” some parts of what was said,
+despite not knowing all of the actual language, and the brain will
+slowly acquire the language through this experience.</p></li>
+</ul>
diff --git a/site/postdata/A-new-way-to-release-code.html b/site/postdata/A-new-way-to-release-code.html
new file mode 100644
index 0000000..0fe9116
--- /dev/null
+++ b/site/postdata/A-new-way-to-release-code.html
@@ -0,0 +1,15 @@
+<p>Recently clobbered this together to send over IRC really quick. The
+power of pipes! Best for April fools.</p>
+<p>git-update-simple.sh</p>
+<figure>
+<a href="https://recentlywritten.com/static/git-update-simple.sh.webp" target="_blank"><img src="https://recentlywritten.com/static/git-update-simple.sh.webp" style="display:block;" alt="/static/git-update-simple.sh.webp" /></a>
+</figure>
+<p>git-update-worker.sh</p>
+<figure>
+<a href="https://recentlywritten.com/static/git-update-worker.sh.webp" target="_blank"><img src="https://recentlywritten.com/static/git-update-worker.sh.webp" style="display:block;" alt="/static/git-update-worker.sh.webp" /></a>
+</figure>
+<pre><code># encode
+base64 -w0 file.sh | qrencode -t ansiutf8 # better aliased to qr...
+
+# decode
+zbarimg file.webp | base64 -d >file.sh</code></pre>
diff --git a/site/postdata/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html b/site/postdata/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html
new file mode 100644
index 0000000..55cdc92
--- /dev/null
+++ b/site/postdata/AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co.html
@@ -0,0 +1,4 @@
+<p>Table of contents: <a
+href="https://xm0.co/all-japanese-all-the-time-ajatt-how-to-learn-japanese-on-your-own-having-fun-and-to-fluency.html"
+class="uri">https://xm0.co/all-japanese-all-the-time-ajatt-how-to-learn-japanese-on-your-own-having-fun-and-to-fluency.html</a></p>
+<p>Enjoy.</p>
diff --git a/site/postdata/Add-my-RSS-feed-to-your-feed-reader.html b/site/postdata/Add-my-RSS-feed-to-your-feed-reader.html
new file mode 100644
index 0000000..924759a
--- /dev/null
+++ b/site/postdata/Add-my-RSS-feed-to-your-feed-reader.html
@@ -0,0 +1,13 @@
+<p>Here is the link: <a
+href="https://recentlywritten.com/rss.xml">https://recentlywritten.com/rss.xml</a></p>
+<p>Now you can be updated. Spam mailing list is now here to stay too.
+Don’t forget to subscribe!</p>
+<p><a href="https://videos.lukesmith.xyz/search?search=rss&searchTarget=local" class="external-link">Don’t
+know how to use RSS? Go install newsboat and edit the RSS file. Internet
+videos at this link</a></p>
+<h3
+id="subscribe-to-the-rss-link-feed-with-your-feed-and-sneed-feed-reader-httpsrecentlywritten.comrss.xml">Subscribe
+to the RSS link feed with your feed and sneed feed reader: <a
+href="https://recentlywritten.com/rss.xml">https://recentlywritten.com/rss.xml</a></h3>
+<p>Subscribe to the mailing list! Send a message with content
+<code>subscribe</code> to <code>truex ta equwal doot coom</code>.</p>
diff --git a/site/postdata/Brazil.html b/site/postdata/Brazil.html
new file mode 100644
index 0000000..65d4812
--- /dev/null
+++ b/site/postdata/Brazil.html
@@ -0,0 +1,16 @@
+<p>I’ve spend a total of 13 months in Brazil in my adult life.</p>
+<figure>
+<img src="https://recentlywritten.com/static/paodeacucar.jpg"
+alt="The sugar loaf rock has a cloud on top!" />
+<figcaption aria-hidden="true">The sugar loaf rock has a cloud on
+top!</figcaption>
+</figure>
+<p>Here I am about to go up Pão de Açúcar.</p>
+<p><img src=“static/paodeacucartop.jpg” data-a=“” data-cloud=“”
+data-in=“” data-m=“” data-no=“” data-sad.=“” data-standing=“”
+data-very=“” data-view=“” alt=“I” /></p>
+<p>And at the top</p>
+<p><img src=“static/esperanto.jpg” data-a=“” data-dozen=“”
+data-esperantists=“” data-in=“” data-m=“” data-middle=“” data-of=“”
+data-posing.=“” data-the=“” alt=“I” /></p>
+<p>I met some people at an esperanto group in Rio.</p>
diff --git a/site/postdata/CSV.html b/site/postdata/CSV.html
new file mode 100644
index 0000000..e0d8c22
--- /dev/null
+++ b/site/postdata/CSV.html
@@ -0,0 +1,31 @@
+<p>Defines a Common Lisp reader to read in CSV:</p>
+<pre><code>#!"field","field","field"!#</code></pre>
+<p>or read in CSV <strong>files</strong> with `slurp`:</p>
+<pre><code>(slurp #p"example.csv")</code></pre>
+<p>and the result is a list:</p>
+<pre><code>CL-USER> (csv:slurp #p"example.csv")
+("example" "csv" "list" "result" "like" " this")</code></pre>
+<p>This program invokes the lisp reader, making it:</p>
+<ol type="1">
+<li><p>Potentially risky to use if the input it not trusted.</p></li>
+<li><p>Resource intensive for medium to large files (>5MB).</p></li>
+</ol>
+<p>Use with care.</p>
+<h2 id="features">Features:</h2>
+<p>Supports escaping quotes the CSV way, with quad quotes:</p>
+<pre><code>csv -> lisp
+
+"""" -> "\""</code></pre>
+<h2 id="installation">Installation</h2>
+<p>[Clone from github](<a href="https://github.com/equwal/CSV)"
+class="uri">https://github.com/equwal/CSV)</a> into asdf load directory
+and use ASDF to install:</p>
+<pre><code>$ git clone https://github.com/equwal/CSV
+$ sbcl
+
+CL-USER> (asdf:load-system :csv)
+T</code></pre>
+<h2 id="notes">Notes:</h2>
+<p>By default backslashes are not escaped. CSV is expected to be a list
+of quoted items, like this:</p>
+<pre><code>#!"example","here"!#</code></pre>
diff --git a/site/postdata/Dont-Self-Host-Self-Locally.html b/site/postdata/Dont-Self-Host-Self-Locally.html
new file mode 100644
index 0000000..abd8f3a
--- /dev/null
+++ b/site/postdata/Dont-Self-Host-Self-Locally.html
@@ -0,0 +1,61 @@
+<p>My most recent posts are about how to setup a few services locally,
+which I think <em>would</em> be interesting to the consumers of the idea
+of “self-hosting”.</p>
+<p>It seems to me that the desire to self-host services actually comes,
+for many, from the problem of having an insufficiently power computing
+environment locally to do the necessary tasks.</p>
+<p>As far as I can tell: there is no reason to self-host unless one of
+these factors is met:</p>
+<ul>
+<li><p>the content must be stored away from the user’s main machine
+(backup server)</p></li>
+<li><p>the content must be deliverable to multiple devices for some
+reason (password manager)</p></li>
+<li><p>the hosting isn’t really “self” hosting, but actually “family”
+or<br />
+“team” hosting (gittea).</p></li>
+</ul>
+<p>So why do people self-host things that they can just run locally?</p>
+<p>Disease #1: Windows or MacOS installed on main machine</p>
+<p>This <strong>disease</strong> leads the self-hosting for no better
+reason than because the host machines are capable of running a decent
+free operating system. If you’re interested in a self-hosthing project
+because “I can’t do that on my local machine”, this is probably why.
+Install Gentoo instead.</p>
+<p>Disease #2: Muh devices</p>
+<p>If you’re installing some self-hosting service to deliver content to
+restrictive devices like cell-phones, consider installing an HFS or FTP
+server instead to transfer the files around. Consider replacing your
+worst devices with more free alternatives.</p>
+<p>Disease #3: Muh FREEDOM</p>
+<p>If you are trying to avoid using services run by others in order to
+take back some freedom (eg. git server or mail server), then that is a
+great thing to be doing. But often we find that self-hosting such things
+is so cumbersome that it leads to massive time-wasting in order to setup
+something which is already available from a third-party service. How do
+we deal with this problem? I have made this rule of thumb: if it can’t
+be installed <em>and working</em> after partitioning a low-resource
+fresh linux VPS and running a single command, it is not ready for this
+use case.</p>
+<p>Any project which aims to fill this niche must be as easy to install
+as making an account on the competing service, and must run on a
+low-resource VPS to avoid costing the user a significant amount of
+money.</p>
+<p>A final solution, worth considering, which I have tested out without
+success, is to have a group of friends who each dedicate themselves to
+hosting different parts of the services you use. This rarely works so
+well. Some people will neglect their service, or underconfigure it, or
+let it go down without bringing it back up, let it get out of date, or
+just stop paying for the hosting or domain name.</p>
+<p>The lesson for project maintainers in this area should be clear: you
+project should install instantly with no configuration and cannot be a
+resource hog by default either.</p>
+<p>I’d like to see a list of such projects keeping track of this:</p>
+<ol type="1">
+<li><p>installs in one command</p></li>
+<li><p>uses <=8GB of disk space</p></li>
+<li><p>uses <=1GB of ram max</p></li>
+<li><p>requires no configuration to start using</p></li>
+</ol>
+<p>And I’d like to see more such projects in the future. If only hosting
+a mail server were that easy…</p>
diff --git a/site/postdata/Dont-use-make-uninstall.html b/site/postdata/Dont-use-make-uninstall.html
new file mode 100644
index 0000000..afdb7dd
--- /dev/null
+++ b/site/postdata/Dont-use-make-uninstall.html
@@ -0,0 +1,118 @@
+<p>Much like “sending a file over the internet”, “installing software”
+has not been solved generally. There’s more than one way to do it. A
+mixed system that uses both declarative and traditional package managers
+in unison is the way to go for now. It would be ideal to package a
+non-specific declarative package install definition together with the
+source of programs, and make unnecessary the concept of a “package
+maintainer” for each package manager. The existence of two declarative
+package managers already suggests the need for an arbitrary standard
+which can transformed into a definition for any declarative system.</p>
+<p>I used an LLM to generate hundreds of uninstall targets for make and
+submit patches to the authors. Three authors wouldn’t patch my changes
+in. Are they right? The argument goes like this: the software should not
+be installed using make because make doesn’t register file install
+locations in any way. Therefore make only uninstalles the correct files
+by coincidence. For installing, it can do a little bit better using the
+<code>install</code> program.</p>
+<p>There is a better way which has been around forever: just use the
+build from the source tree.</p>
+<p>Let’s consider how the ASDF manager for Common Lisp works (and by
+extension, quicklisp, which gets ASDF systems from the internet). It has
+a central registry variable with a list of paths, and it recurs down it
+to findsystem definitions when the definition loader is called. Then it
+loads the files into the lisp core. As a result there is no need to have
+code and binaries in different places. If compiled, it will just store
+the compiled files together with the source. To “uninstall”, just delete
+that project’s directory. Let’s call this “in-situ” package
+management.</p>
+<p>With POSIX make and arbitrary build systems like it, the subordinate
+model can’t work, because ASDF can’t possibly predetermine what binaries
+to use and where to put them. The logic can’t be generalized in the
+package manager, and has to be managed per-project. Every package
+manager now needs thousands of packages with hundreds of maintainers.
+Typical package managers do installs imperatively and tracking the file
+location metadata in the system flies. When the binaries or libraries
+are edited or moved by an outside program or a user without editing the
+registry, (for example, by trying to re-install gcc manually from
+source) it can break the system.</p>
+<p>The simplest way to get this kind of management is to use the
+symlinks to the files from directories in the PATH. If the installed
+files change, but the path stays the same, they can be updated without
+changing the “installed” data at all. IT’s still tenuous – an update to
+the build system could change the locations of built binaries.</p>
+<h2
+id="declarative-and-in-situ-package-managers-nix-and-guix">Declarative
+and in-situ package managers: Nix and Guix</h2>
+<p>The Nix package manager uses the model of keeping the binaries in the
+package manager’s repo without “installing” them. This is why nix
+systems can’t break unless impure hacks are used.. Since binaries and
+libraries are not <em>moved</em>, there is no chance of overwriting
+things or losing track of where they are!</p>
+<p>Let’s not distribute installers in the code builders like make, but
+instead build it and use it as-is from the folder using an in-situ
+package manager. By chance, that’s exactly how declarative package
+managers work, and not how traditional registry managers work.</p>
+<p>The benefits of declarative package management are plentiful, but
+come at the cost of making development of one’s own programs and
+installation of as-yet unpackaged software from the source more
+difficult. Even simple shell scripts added to the PATH can’t be done
+simply, the whole abstraction of the package manager has to be invoked,
+or some impure hacks are needed.</p>
+<p>The declarative package managers can be installed on another linux
+which has a traditional registry package manager and impure environment.
+Why not have both? It is “possible” to install two traditional package
+managers on the same system, and will almost immediately break it due to
+out of sync dependency management. With in-situ and system registry
+managers installed together there are no conflicts, because the in-situ
+manager stays in its own folder.</p>
+<p>Package management solutions:</p>
+<ul>
+<li><p>In the build system
+(<code>make install/uninstall</code>)</p></li>
+<li><p>Using symlinks in the path (<code>ln -s</code>)</p></li>
+<li><p>In-situ</p></li>
+<li><p>Declarative + in-situ</p></li>
+<li><p>Traditional system registry package managers</p></li>
+<li><p>Declarative meta-package management language (does not exist
+yet).</p></li>
+</ul>
+<h2
+id="final-note-should-there-be-an-uninstall-target-in-the-makefile">Final
+note: should there be an uninstall target in the Makefile?</h2>
+<ul>
+<li><p>No, if the makefile doesn’t “install” the software but just
+builds it.</p></li>
+<li><p>Yes, if the makefile does “install” the software, it should also
+have a way to “uninstall” the software.</p></li>
+</ul>
+<h2
+id="final-note-but-i-want-to-uninstall-something-anyway-with-nothing-more-than-make-and-not-use-an-uninstall">Final
+note: but I want to uninstall something anyway with nothing more than
+make and not use an uninstall!</h2>
+<h3
+id="use-make-install-to-a-destdir-to-see-what-files-it-installs-and-remove-them">Use
+make install to a DESTDIR to see what files it installs and remove
+them</h3>
+<p>It is the best way, albeit tedious and manual.</p>
+<p>“rofl0r” says:</p>
+<p>As the maintainer of a
+<a href="https://github.com/sabotage-linux/sabotage" class="external-link">linux
+distro</a>, i quickly learned that the DESTDIR <<a
+href="https://www.gnu.org/prep/standards/html_node/DESTDIR.html"
+class="uri">https://www.gnu.org/prep/standards/html_node/DESTDIR.html</a>>
+variable is really *the* key to cleanly track the files installed by
+arbitrary source projects, apart from much more elaborate solutions such
+as doing installs in a sandbox with before/after comparison or using
+file-system monitoring (e.g. via ptrace). it allows to install all files
+into an arbitrary location, which makes it easy to e.g. create a
+filelist, or in the case of my distro, the DESTDIR is used as the final
+location where the package actually lives. if we take curl as an
+example, it would be installed with empty prefix and DESTDIR=/opt/curl,
+so the curl binary would live in /opt/curl/bin/curl, headers in
+/opt/curl/include, etc. the package manager, as the last step of the
+build/install process, then iterates over all files in /opt/curl and
+symlinks them into the root prefix, e.g. /bin/curl will point to
+/opt/curl/bin/curl. uninstalling a package then is as easy as to iterate
+again over the files in /opt/curl (or in my case a filelist made
+thereof, to reduce the amount of syscalls) to remove the symlinks and
+finally rm -rf /opt/curl to delete the actual files.</p>
diff --git a/site/postdata/Fish-Based-Navigation.html b/site/postdata/Fish-Based-Navigation.html
new file mode 100644
index 0000000..5aa9cbe
--- /dev/null
+++ b/site/postdata/Fish-Based-Navigation.html
@@ -0,0 +1,5 @@
+<h3
+id="click-the-fish-on-the-sides-of-the-page-to-navigate-this-site">Click
+the fish on the sides of the page to navigate this site</h3>
+<p>Try it!</p>
+<p>They only show up when you need them.</p>
diff --git a/site/postdata/Forthe.html b/site/postdata/Forthe.html
new file mode 100644
index 0000000..b5c9f7c
--- /dev/null
+++ b/site/postdata/Forthe.html
@@ -0,0 +1,96 @@
+<p>> Go Forth[e] and ye shall find.</p>
+<p>Version 0.0.2</p>
+<p>Docs available as: HTML(<a
+href="https://recentlywritten.com/eforth">https://recentlywritten.com/eforth)</a>.html) |
+ORG-mode(<a
+href="https://github.com/equwal/Forthe/blob/master/README.org)"
+class="uri">https://github.com/equwal/Forthe/blob/master/README.org)</a></p>
+<p>Code on github(<a href="https://github.com/equwal/Forthe)"
+class="uri">https://github.com/equwal/Forthe)</a></p>
+<p>This is an implementation of an elisp-based FORTH. This means that
+elisp is used to write the function definitions. In fact, no FORTH
+function definitions are provided at all to the Forthe macro from the
+library. The main benefit comes from reducing the verbosity of elisp in
+a small Domain Specific Language the programmer defines.</p>
+<p>The following is a code sample for generating an eight-panel frame,
+which requires 37 function calls. See how compact FORTH code is? This is
+further helped by closing the `nil` required by `switch-to-buffer` into
+that lambda.</p>
+<pre><code>(require 'forthe)
+(defun 8pan ()
+ (interactive)
+ (forthe '((n (lambda () (switch-to-buffer nil)))
+ (d split-window-below)
+ (r split-window-right)
+ (wr windmove-right)
+ (wl windmove-left)
+ (wd windmove-down)
+ (wu windmove-up)
+ (del delete-other-windows)
+ (cf make-frame-command)
+ (nf other-frame))
+ (cf del r r wr wr r d wr d wl wl d wl d wr n
+ wr n wr n wl wl wl wd n wr n wr n wr n wl
+ wl wl wu nf)))</code></pre>
+<p>That code, when executed, produces this:</p>
+<figure>
+<a href="https://recentlywritten.com/static/8pan.png" target="_blank"><img src="https://recentlywritten.com/static/8pan.png" style="display:block;" alt="The eight panel setup made by the Forthe code snippet." /></a>
+</figure>
+<p>The eight panel setup made by the Forthe code snippet.</p>
+<h2 id="how-does-a-forth-work">How does a FORTH work?</h2>
+<p>Forth code is gone through by the pointer moving through the call
+stack. When a non-function is found, it is added to the argument stack.
+When a function is found, it uses up the argument stack if it has
+arguments, or just runs if it is nullary. Nothing else is provided by
+the implementation.</p>
+<h2 id="why">Why?</h2>
+<p>Needing to simulate a long set of keypresses to create an eight panel
+frame (37 in total), the best option seemeed to be obviously to create a
+miniature language with 1 or 2 letter abbreviations for each. Any
+arguments to a function can be passed before it in the list, and there
+is no need to define a return stack.</p>
+<p>`M-x 8pan` will produce a new frame with eight panels (emacs-speak:
+“windows”). Here is how it works:</p>
+<p>`forthe` is called with two arguments: the environment, name to
+function bindings, and the Forthe code list. You can see in this example
+that there are no arguments used, since all of these are nullary
+functions. Here is how you might use arguments:</p>
+<pre><code>(forthe '((ff . find-file)) ("~/some-file" ff))</code></pre>
+<p>Here we ran `(find-file “~/some-file”)`. If you need to reuse a
+FORTH,<br />
+just define an `*env*` variable:</p>
+<pre><code>(defvar *env* '((>r . to-return-stack) ...))
+(forthe *env* (forth code here ...))</code></pre>
+<h2 id="benefits">Benefits</h2>
+<h3 id="concise-code.">Concise code.</h3>
+<p>Elisp’s convention of names like:</p>
+<pre><code>org--insert-structure-template-unique-keys</code></pre>
+<p>(a real function in the org mode) result in extremely verbose code.
+Using short, lexical names can reduce code size by a large portion.</p>
+<h3 id="compiles-to-elisp.">Compiles to Elisp.</h3>
+<p>Elisp is hated by many, and for good reason. It is an outdated and
+clunky lisp. Many have tried and failed to port Emacs to Common Lisp,
+without success. Forth, unlike modern lisps, is designed to be easy to
+implement. Writing a FORTH compiler is in fact a trivial exercise.</p>
+<h2 id="drawbacks">Drawbacks</h2>
+<h3 id="elispers-might-not-want-to-read-your-forthe-code">Elispers might
+not want to read your Forthe code</h3>
+<h3 id="forthe-is-not-stable">Forthe is not stable</h3>
+<p>FORTH is
+<a href="http://www.flownet.com/gat/jpl-lisp.html" class="external-link">space-age
+technology</a>, and Forthe is young.</p>
+<h3 id="isnt-verbose-code-self-documenting">Isn’t verbose code
+self-documenting?</h3>
+<p>NO. Documented code is documented. Using short names with the
+bindings handily available in the same form is equally explicit as
+writing them out every time.</p>
+<h2 id="contributing">Contributing</h2>
+<p>Please make sure your contributions are<br />
+melpa(<a
+href="https://github.com/melpa/melpa/blob/master/CONTRIBUTING.org)-friendly,"
+class="uri">https://github.com/melpa/melpa/blob/master/CONTRIBUTING.org)-friendly,</a><br />
+and documented in the README. You can use<br />
+pandoc-mode(<a href="http://joostkremers.github.io/pandoc-mode/)"
+class="uri">http://joostkremers.github.io/pandoc-mode/)</a> to
+transform<br />
+the README.org into plaintext <code>;;; Commentary:</code>.</p>
diff --git a/site/postdata/Generate-your-OWN-internet-web-site-easily.html b/site/postdata/Generate-your-OWN-internet-web-site-easily.html
new file mode 100644
index 0000000..760db9f
--- /dev/null
+++ b/site/postdata/Generate-your-OWN-internet-web-site-easily.html
@@ -0,0 +1,56 @@
+<h2
+id="sscgs-static-sitecontent-generators-dont-have-to-be-bloat">S(S/C)Gs
+(Static (Site/Content) Generators) don’t have to be bloat</h2>
+<p>Wordpress sucks. Hugo is better. But we can do even better. This site
+is/was generated at one time with<br />
+<a href="https://github.com/coleslaw-org/coleslaw" class="external-link">coleslaw</a>,
+a Common lisp static site generator. Even these solutions are<br />
+bloat. Introducing: cl-yag, another Common lisp SSG in only 4/20 lines
+of code (exactly! Well, in one of the commits it hit the magic
+number).</p>
+<h2 id="how-simple-can-it-get">How simple can it get?</h2>
+<p>The simplest is to just hand-write HTML. Check out
+<a href="https://bitreich.org" class="external-link">bitreich.org</a>.
+Can you believe that site<br />
+is handwritten HTML? Here’s the git repo link:
+<code>git clone git://bitreich.org/bitreich-www/</code>. Crazy.<br />
+<a href="https://github.com/equwal/cl-yag" class="external-link">cl-yag</a>
+is the next level up. It converts markdown to html. That’s it. Coleslaw
+is a bit more complex, with various plugins and so on. Still very nice
+and hackable. Hugo is the famously “simple” one. I think it is too
+complex. Wordpress-likes are the worst, not even generating a site but
+making everything dynamically on the fly.</p>
+<h2 id="picking-an-ssg">Picking an SSG</h2>
+<p>It has been a theme that people tend to use SSGs in their favourite
+higher level languages, (if savvy), or just opting for a dynamically
+loaded site (if not savvy). So pick an SSG in your favourite higher
+level language, but make sure it is simple enough.</p>
+<h3 id="blogware">Blogware</h3>
+<h4 id="bash-shell-pandoc">Bash shell + pandoc</h4>
+<p>Hasn’t everyone done it this way before? Some shell scripting is
+needed to upload the scripts, so it is natural to just build it out
+until it is hard to tell what it is even doing anymore.</p>
+<h4
+id="hugo"><a href="https://gohugo.io/" class="external-link">Hugo</a></h4>
+<p>Hugo is about medium bloat level and written in go. Go is not cool
+enough.</p>
+<h4
+id="jekyll"><a href="https://jekyllrb.com/" class="external-link">Jekyll</a></h4>
+<p>Haskellers like to use
+<a href="https://jekyllrb.com/" class="external-link">Jekyll</a>,
+another medium level of bloat.</p>
+<h4 id="common-lisp-ones">Common lisp ones</h4>
+<ul>
+<li><p><a href="https://github.com/equwal/cl-yag" class="external-link">cl-yag</a>:
+ultra-simple. Lisp wins.</p></li>
+<li><p><a href="https://github.com/coleslaw-org/coleslaw" class="external-link">coleslaw</a>:
+a bit more bloat</p></li>
+</ul>
+<h3 id="not-for-blogs">Not for blogs</h3>
+<ul>
+<li><p><a href="https://codemadness.org/git/stagit/file/README.html" class="external-link">stagit</a>
+generates a site for a git repo.</p></li>
+<li><p>Documentation generators (eg. using GNU make or Quickref for
+lisp) can sometimes make HTML sites. These tend to be really
+nice.</p></li>
+</ul>
diff --git a/site/postdata/Get-on-mailing-lists-like-it-is-1989.html b/site/postdata/Get-on-mailing-lists-like-it-is-1989.html
new file mode 100644
index 0000000..5534102
--- /dev/null
+++ b/site/postdata/Get-on-mailing-lists-like-it-is-1989.html
@@ -0,0 +1,57 @@
+<h2 id="more-folders-than-inbox-and-spam">More folders than INBOX and
+SPAM</h2>
+<p>Did you know that you can have as many folders as you want? The main
+issue is that the filtering needs to be reasonably smart and is usually
+done server-side. I use runbox.com as my host and it can do it. For
+mailing lists, the best way is to sign up, read the headers, and see
+what address that lists sends from. Then filter any mail with that email
+in the header into the correct folder. This is called a “milter” (mail
+filter). A spam filter is a kind of milter. Self-hosting email is one
+way to get very good milting.</p>
+<h2 id="good-clients">Good clients</h2>
+<p>Now you need a client that can read those folders. GNUs is an ancient
+one with a million features (think: emacs) which<br />
+was (is?) useful for usenet and mailing list extraordinaires. Neomutt is
+the industry standard. If you mail host<br />
+sucks you might really want a good client, so it can milt for you.</p>
+<h2 id="why-you-need-mailing-lists">Why YOU need mailing lists</h2>
+<ul>
+<li><p>You can find out when software gets released and go
+upgrade</p></li>
+<li><p>You can develop stuff on the list</p></li>
+<li><p>You can find out when your favourite organization is calling for
+papers or organizing events</p></li>
+<li><p>Mailing lists are like IRC but for real work (you’re on IRC
+right? want to
+<a href="https://recentlywritten.com/iilchat-setup-too-easy.html" class="external-link">set that
+up?</a>)</p></li>
+<li><p>It is a better way to send small patches than the github.com
+website (using git/diff/patch etc.)</p></li>
+<li><p>You will learn things</p></li>
+<li><p>You will learn to notice instead of ignore bugs (a good thing?
+Maybe)</p></li>
+</ul>
+<h2 id="how-get-mail">How get mail</h2>
+<ul>
+<li><p>Find your project</p></li>
+<li><p>Subscribe!</p></li>
+<li><p>Verify!</p></li>
+<li><p>Go to the archive or wait for a mail to get sent…</p></li>
+<li><p>Use the list’s email address in the header or other identifying
+information (some lists prepend something like<br />
+[list-name] to every subject line just for easy miltering)</p></li>
+</ul>
+<h2 id="how-to-send-mail-important">How to send mail (important)</h2>
+<p>It’s good to read a few mails from the list to make sure you are
+sending to the right one. Some lists also have lots of rules. Not
+following those rules will probably result in messages from annoyed
+maintainers. Use your mail clients REPLY-ALL function and quote the
+necessary material. Write your message BELOW the quoted material (not
+above) or even split up the previous message into pieces and reply under
+each.</p>
+<h2 id="how-to-send-a-patch">How to send a patch</h2>
+<p>git has a patch sending feature. It bypasses the mail client
+entirely. Another option is to write the patch to a file and send that
+with the client. DO NOT edit the diff within the patch manually! You can
+mess it up. I like to use <code>cat patch.diff | xclip -i</code> and
+paste the result directly into neomutt.</p>
diff --git a/site/postdata/Git-extra-worktrees-ROCK.html b/site/postdata/Git-extra-worktrees-ROCK.html
new file mode 100644
index 0000000..3339ca1
--- /dev/null
+++ b/site/postdata/Git-extra-worktrees-ROCK.html
@@ -0,0 +1,21 @@
+<p>A friend informed me that now git has explicit support for extra
+worktrees (rather than just blindly copying stuff). I was pretty
+incredulous about it at first – why would you need that? I figured it
+out pretty quick.</p>
+<p>For when the local branch of the project is something that is
+actually used, so it is better to keep the files there as they are (for
+use). This makes it way easier to commit changes upstream without
+messing up the current system. For example, I have made a ton of changes
+to the coleslaw static site generator that makes this website, but
+haven’t pushed many up because I actually use that worktree. Without the
+git worktree support the options are:</p>
+<ul>
+<li><p>Stash changes, work on the upstream, and reapply the
+changes.</p></li>
+<li><p>Copy the folder somewhere else.</p></li>
+</ul>
+<p>The first option is error prone (easy to forget about those stashed
+changes etc.) and second option is better but leads to an issue – what
+if I want to use git to manage changes across these worktrees?</p>
+<p>Git managing worktrees is worth the added complexity. Good
+change!</p>
diff --git a/site/postdata/Hackermen-neomutt-config.html b/site/postdata/Hackermen-neomutt-config.html
new file mode 100644
index 0000000..6eda632
--- /dev/null
+++ b/site/postdata/Hackermen-neomutt-config.html
@@ -0,0 +1,47 @@
+<p><a href="https://github.com/HACKERMEN-ORG/neomutt-config" class="external-link">link
+to git hub website repository</a></p>
+<h2 id="why-this-exists">Why this exists</h2>
+<p>So my friends can send me encrypted mail, bottom post, and
+send/apply<br />
+patches.</p>
+<p>> “I installed neomutt but I haven’t figured it out”</p>
+<p>Neomutt defaults have legacy lock-in issues.</p>
+<h2 id="barebones-neomutt-config">Barebones neomutt config</h2>
+<h3 id="features">Features</h3>
+<ul>
+<li><p>optional PGP encryption/signing/both</p></li>
+<li><p>Automatic PGP decryption</p></li>
+<li><p>hjkl movement: navigate</p></li>
+<li><p>n/p movement: read+page mails like in the GNUs client</p></li>
+<li><p>open HTML mail in the $BROWSER with a bind</p></li>
+<li><p>edit mail in the $EDITOR</p></li>
+<li><p>Can setup multiple mailboxes (just source more files like
+me-TEMPLATE)</p></li>
+<li><p>arcane-config-TEMPLATE to keep user-specific config
+separate</p></li>
+<li><p>Lots of colors</p></li>
+<li><p>A million default setting changes that don’t do much</p></li>
+<li><p>signature</p></li>
+</ul>
+<h3 id="subjective-user-experience">Subjective User Experience</h3>
+<p><a href="http://www.booksatoz.com/witsend/tea/orwell.htm" class="external-link">Like
+this</a></p>
+<h3 id="install">Install</h3>
+<ul>
+<li><p>clone to ~/.config/neomutt</p></li>
+<li><p>install neomutt</p></li>
+<li><p>install isync and sendmail for IMAP and SMTP</p></li>
+<li><p>install notmuch to search your mails</p></li>
+<li><p>install gpg (optional)</p></li>
+<li><p>Edit and rename the TEMPLATE files</p></li>
+<li><p>Edit the sources at the top of the neomuttrc to fit your
+needs</p></li>
+</ul>
+<h3
+id="good-alias-to-do-background-mail-stuff-when-opening-the-client">Good
+alias to do background mail stuff when opening the client</h3>
+<h3 id="todo">TODO</h3>
+<ul>
+<li>Automatic WKD for automatic PGP encryption without manually adding
+keys</li>
+</ul>
diff --git a/site/postdata/Hey-kids-want-to-learn-the-unix-way.html b/site/postdata/Hey-kids-want-to-learn-the-unix-way.html
new file mode 100644
index 0000000..3844e3f
--- /dev/null
+++ b/site/postdata/Hey-kids-want-to-learn-the-unix-way.html
@@ -0,0 +1,2 @@
+<p><a href="https://plan9.io/wiki/plan9/papers/"
+class="uri">https://plan9.io/wiki/plan9/papers/</a></p>
diff --git a/site/postdata/How-Japanese-Aquire-Books.html b/site/postdata/How-Japanese-Aquire-Books.html
new file mode 100644
index 0000000..7374670
--- /dev/null
+++ b/site/postdata/How-Japanese-Aquire-Books.html
@@ -0,0 +1,24 @@
+<p>PD</p>
+<h2
+id="perfect-dark-japans-crappy-p2p-solution-with-literature-and-other-books">Perfect
+Dark, Japan’s Crappy P2P solution! (with literature and other
+books)</h2>
+<p><img src="https://recentlywritten.com/static/p2p.png" /></p>
+<p>Tired of reading rotting your brain watching Anime and reading
+low-quality modern literature? FEAR NOT! Tired of not finding erudite
+material to read on the Japanese internet? FEAR NOT. Pirate now with
+Perfect Dark, a Windows(tm) “ultra-secure” freenet clone for downloading
+mostly BOOKS, MANGA, and overly compressed FILMS.</p>
+<p>If you’re based, it also works on Linux under Wine, just don’t rename
+the exe file or it breaks because it it junkware.</p>
+<p>Download the shit <a
+href="https://perfectdark.benri-tool.net/init/install.html">HERE</a>
+(click the greyed out link in the middle of the page, can’t miss it)</p>
+<p>You must port forward a port for the thing to work right. If you
+can’t do port forwarding on your internet, you can easily port forward
+AirVPN, so I recommend getting that as your solution.</p>
+<h3 id="recommended-reading">Recommended reading:</h3>
+<p><a href="http://kasumi.moe/pd/">kasumi perfect dark guide</a> You’ll
+need the IP address to some sucker from the network, here’s one below:
+(you’ll need this in the IP address dialogue:)
+<code>#b17ab99add4cf9e81aca94cfcc8e19b2d63f23bee9d299a691ad4270fc993501ff1bd1087a7c5af86601f3b420684c1d# #7e44e2b30860c985f47a0f2109fe442d0af85ce9aec59056078c83047aba43c36f1129dc4df60234d330f11c5f0eae6e# #c4c43ae2490db7383c50f748f03cf0758fbaaae3e540e828229cfafc2c9d85a435f6732ca230012c43df58c9189ae63f# #8c4919589c1d3cb3c4d52f45714d4bb8e7a42f62a10603b8f48a327c3dc0d4451dd96f3a8eee5353ee821129f4f0aa63# #bef5048946aba3c418c9711b5ee986f2b8ab1fc5953c8feb131e4069721e99ff6ead831a53f3f69c9e6ca0a05dfd18ab# #c9ef04a4f2274f195c1efe4343807d2ad5be0b65e6c9dcb5bd286c0daecdbfabacdf3d4f4908c5265407291206a749d6# #fe7e08150d1374f33a9643f12b360e2bf117fbc5000a1cf7164529cf09cbf5486dcfd2a13924a78dfd4cb80fe63432f4# #4cf0513f16d5a44e349b44d60f7470c9829ec4bcd67d1b784b5d13a635b28ff27d339e4fb995ed5feef80282bc4a1c97# #6bfca8a4dce8401fc6a31f9218d23b9869abfc06a48389160d1214b31d25f1ce0594b6a4e29e59169d0e58b22a84fa15# #7ff484fc718c52650f4790ab317f920c42dd164f5c7045b971cba755b8f9e6092b1eab3507057e4fa9296903ddcf6252# #f94830164747b0d71f8f76ecf140ef4c6daa9d0ec6e17f9f8771b97d5a672cd69fd985a9e48749d2c0d799cab38da0c6# #ad2cc67815d5561cca13822c93a752c4cc4659104d30c6a717e620b052762149d16c45b6429d3758c68c601ec490c9f8# #d3a515cac20af00c054fa538d4c3c72bc2d288b2837304d12d1ff50694aacb2d18cee2f0aa82e297f17a8e8d815e959f# #da99c2f87d4924047db980573b13f06a3de7772dfd5b294aba9dae6131634f412b20cb91b72f56dac770f045224e6984# #586b1970b5b14b0a04155d2e6dcab124fa0da8ced33a53d2f59192f5b063cb6e1224a4849e713a4a671f1a494a8631e2# #8f494ade3653c4615dae1a314fa9e1f777d2bc5ae1ea8fb1b2008af736344228bc7e08d8f812a9c7bb8486191bc441de# #1e4b19c88e00ad07d1df132854107418d6a41f8c98b42e0dd70b1a9802e40abc7abd82e4db5e0125d880f49752425956# #9eeb84980cbbe498b23350b4af5d5b5565b79a7ef3d0c903cd82f3ed282039491270019390d6ef753c5758be05e76ab4# #821234c43b507798273ce26d78f0e6b60cc0b940def30ecbe2ca751c91624d25375c63a0c5260305ae8fb9b039cbc949# #43e2a4cae179638bfcc02dedbc97cc6fd82b1f6306d9076241071c0569a760f592c4588fd4224aee2f6a0301dfc3c53b# #4c2c77d6ec6abc3214b9fc6b13b4dfac6d766c3de18cd54f8631375d56699080d8ef98f3ed8430ead8c389021c1622b1# #9ef8b9f1df68694ea71d1c28bd70c5669fa7179c5192a7e36ad1e836bc1a4d4d651dc13047ac86e762cf286da074525f# #ad28da7524a236c35df7fa0d558113e9ec7b3c5a75dd118e5f6c7b06af08792127a3f3053179dcbc48e4181d2a2875c2# #f028d178b1c238e569e98ba6a0a3bc32caeb28b929382c6935503b2221159c9950c497f7b308db62807c23eb57365051# #7798a44b1559804c9e912fb6b933dd3e69309524cda07cf62aaa4cf71c9c66a4f03f64da7d9a48985d6618d00b57df43# #b255e31f4f9e1c2b5235df352f5f537a390f8c4c5d6960b644e1bc36cec2560962f33d709996f9c0c3d199a375a99e0e# #b12c9a5f69bf5a6e562e7ebb2e47717864b317652f0217d27697fbc377edb9cb3811a5aaa2af9a8b45bdf542e843eba3# #9737408653df93f112963c2a72df0fb226f4b88d3fb2478ca5769814739ace657bbf9839f5470aeae3a5f70cc905f85a# #a93096c1abb1215966a7b684717b5670699938ffa29a8ba0267c0e0a2835787fc86ec08b8be410cdb2a6cbc2ce55e93a# #3201c1e60df7101f3235519ffb949fa40d3f1fa7c916a9dd5b226dee72562cda0959aeef145be9b0c7e427f2517739fd# #f2f771352b6b56015377d8871a138b88a1aa76e3de8f3d41c04e2451be355987b32dd22c5f527a27f23da261eb9cd6e0# #f0d7d3fe81423b7d16421585a5189a1cd81a20cda430e4c70787e4241a8bd3c760183730caecbb2c9602f95ef9ae1a81# #4c1d01bc94af9162e5e902557a17a29c464c73ca9de96612143e53b997dd2f5f8bd6f058def442e5028598ded8ce1eb0# #38373d9d3807c3f8b479705f3fcd683244808f3457feb93bf8892767d021149f5944ead01c19ae3fd52a2157997d9346# #58152f60ac97c7f912c1ccec81f733b704487f470b0dd56ab94e3737a3e14dcaf870114ca48f951d4779d53ec054dc51# #c31fb4426b7be5700d758cf39ad0fe79697c5990775fc5c8f43373c2396dd9d80e97f5844a76848df418b1c89e7c37c2# #9397cfab56e9d477b91d0af939c3bfbb0665e13c172e3219458db67093681620a4b4f41412c7f433ec44b772cb48c759# #41c2e30d0ace2e954a3fbd1bfb2b045e7f7a56bf6672ffd1123fc5a5f01c416dd01cb6c4a2e09b8d6a4666700cfd4d18# #ecde8d1012920be57bcd1c3094d5f9ea8759ca4de44d09504a0349e44ef1297f0f98fe8c9895a8344e3c3c5620e8ad70# #ba96e101e4467805d8c8012d48a3af143e43d483a1d5e9cceb063f58cd28886c65bb167a1feda27c9dbb24feda5ad846# #2d38c93a80b700ab6b4d288b280adca62e19f30baf1a5a54693331377e3b6e475fbbe1c699f9e37e94dfd1acd59d5fe9# #b062be0b447462aad9d74e6c87c68d2058247f4ac00d0803bad0b3cc00affc4de0091bb013f691dd2ff30cdc8e649aad# #43ef51cc3106803b4134689c13e71ee4dc3f213675ccd11b6def777d61e0ffc806f27dc74e916047163dce5edcebac44# #de98e50d2d9acb9d27934213467f96b98248d09b4421c075b9e29060bd1f88c20b4d11b35d6d5a8969b9890f64360a8e# #ca301f494602822c7e0e51e29349e3c9d428bb994b12d207d33c58ca789474e8ddabb50bc12f4f8f0af6850a370355d0# #9ecffd97a365677d2e448aedf638caca4e7841f22703d829145da856d01f3d2ce5de066e74bd009cdca20f883d904d3e# #0c7b2979bae8a5ffc437c6f5e5a2269150bf4672b82c2339a7cfcec470f5e212aa379f9834e1ddb53185efd7d5a14be4# #802023a87caf1c952cb659b1fd49132ab3402709045e3b4d72751bca93296fb2a801930fead578db28edc3f8f17e5d35# #4a26fa65326e0a95c55b83703ef67f9839f06324cea5813d187540a795aa6253752261dfb1d45cee49e7d58aca182973# #a1c114842feeada23431637539a398ab7c7515fa9e4c51e859aeec35c861021eb89fbb3ab510b44e179463cb68adff8b# #eb246df5b08a8f820625be670b74216e606997694657c94fff7bbf24aea22ccb2a9ee8116f24bd369966bbb4a45aa221# #9fbf15f4f9260ee9fc88eed149491de3a01d82981a29240205274433f0c834aab73675493e7039508e2b84178f2c756b# #c4cd9b218819e8504b6fe6d0ef0fa11e2f1c7d2c8ef2c4d53e7018b09725f2d31ec4aa497dab634ce23a67ba4f8db6bd# #77be28d0ef212b11588fbdf30c0c3b0212f4bba6f9bcb212d3fa163270a73cb0d0e4e3307f9900a247560db5ac12806d# #3643f0d722af1490349c21bae6748fde71bc8e2555579be80ffdebab6e105c99c531227002b12ccb7fdd22e213cd109c# #894cf3bee0f60a42b314e60e3e0e425c75ee9dcff15a7d862a926e46f1450ad93f0079713d24be3c14e86f42ccf1a293# #348beb68bb7fbf68ce5714361324582b11a9548d8228eb375b486c6f12f5d8e2525fb700e56ca72520fbdd6ed8ac59fb# #597557dc130b13f98f43c97fc6c06c84f488ed6c78c1e767d596c68658c5132bef5e2e00c8dca2d5ab89097c8acf52b4# #c33d9be803a41159375c7d92dcbcff09f8bf981ae328c632c5da089473f00c7ab2adf5971bf4719a3053eb5c21387d98# #76ddd3fa98befd8706ae73aa35307db2926b6ada3cf9f487015c721c4e61b1a03d02261b9f7d90246290a775b8ff342c# #1b2f9a5f473fc16472d01360dd2681ca3ae9ffba134ad90f4f64b113e528e802582b66b82d29799d3ab0067e56912a8f# #6113a2ecce485fc64afbd7f36a0ef244e757b0c135236072fa3e7f9abefa21eeca0307df51b1c4bf648de99b13937627# #cd3cd2d71c85913dd8ea95da20833e9f3a0522ec26c4dd302d1c4d9160050faba0870458700789d53512b0b33cbddb68# #72cea6b32c0a39665e55cf4ae13c40b9efb5890617796edf222abbe82b97cef00011ed4b2c40bc91f9618f68f86d13c2# #3563cb98a90f3939203194f597646932314bab7ee1e4947f74a5646bc912eaf67d8eadffea402180d8b42c9fd9f33477# #e0075ae6b5b9fe3b6edbbfc13aaa79f480d9a5fc4041b2dec00b5b04209826d4bfd039e301d390ee49f9f1da75981c71# #b39df701ab58d4830b8bc6f1d58869d5ad828a968e0e8816e44a6e7068ceddf3d886853e1b895789af96de7cfe2b782e# #ad5fee415d7ecea50bcd8c942a607aebdf74003ff00f461ac6b8a023f1ca9467e89b20e5a51ce97fcbf7e892bd65dfed# #dd055dc0cde2599f7e3717981be5376d5ccc76200667cb53faa84d7da2b42dca7213bdef486ba94a953808a0aa66b4de# #b521afdf8d19c3105057602120ba11656b162954c0e0ca35855f63a7838ac6b62e962c39eefab3e22c2fc3594321a63d# #c006a115cc3533c0c5d8b8a33ef507a449e578d6a1cc4190caecef53da8a65276ed475cb3f4edac40563a93b479878b8# #54923eee240f6ebd714488156b6b7d80f20271f6a56dd68519123356b3f7d8b71a5d1546ae113e93d584a9368fabc1b3# #a396b18fbe1272cffe3e40d466b5df4b27e604f009e88b74f319f2ee2dab7b9395917039f6c36a31faa420fe13f21932# #3299b4a3af61506e70d4394e2be7e2a74673a1f68a38839e481eaac760a6adfaa8cd122ccf643aebc8118e621894aeef# #627d68bbc495ddf7418a274b5bb551b5ce0025ba486bd357aecf36528a46c522e9d539873978a694f610d9c68caac374# #4342847afad76745b831aadf7d040fee627c6e57e30ed1ed64abbbdedeedf3ba67312584d44110f3618148a4c2365c22# #e437d472f4188b49413b4b8713c65f1f11101d6f71321d5bb47105f9454c7ef5076c7a754110ee35e4efdcbc4b4a9078# #7918569d8ebc4bf38bd1309f10519fc07780197d9bd0350326aa1beaaa7f33c3e3d3b2028b0393f725a758f92c9a73a3# #b370605636c95ee35fc1b7fd76defda73cec776970e034b743527cbfbe3bb753a78bd4bd02d77580dbc1f32dd94543e2# #b7755c5c2adcc18f6e0bc73c0e8d301e6d502b18b793c374f936034398431843662d785306b7838e585ef76b4d349217# #95fc2aa89a3073c92e6191b6c6d205fa22fd57595a0b4946cb50b4d6ae467fc3ba08c830dd85555b754e3d7b0d675bd4# #f60f95a155abe7480247078721c45f8a0f2036af0fe3c2d2a45d4273e94f1a0fd8fcd6d6e5686d058bbf39ce26f9b4ee# #615d9236a88a66c303b54888748b421005f1e4f426522e57ef050c55be091e9ca343b5e68dad08dd09649a983118c0b3# #b63c634c3d140082cc9019d9cac8080d367bd1bf20bdfa63060a8ae4d23ed7757223671d15750953eea5e3bafedc1244# #caf7fa1b653dd53e7184b00cb8d081059f6179802cdbd1e2f6cf962dd7e4d04ef75f116426d454b82f1fc0155ea67ad6# #480c415ebdef8c2b8b4a897977f0e306ee9af892596bac55d70d63fa7678b030fcc5a84270c07f2e9e653019439aad47# #286385c7cd95eb3a696887564a4d5cc232f26fa019a77fa1371d7f07eaf807226c0448a989c9b81614e00e59a1daf288# #6a3bbc213fb2ad976fe11c0e0f7b5840a3c950e6a694e43960da2a111973450f33da4a1b6c5db36156d1d13b38e9df81# #943718c439dd7080fe9fb28f9e5e37d58e8ca396a661877a5056ae1b3cdebfab2ea1f010c80e99955c9d886658558fd5# #dcaa8f281dfa4a0753bf11273bddf015ff09ecfb1fe4b569041e371cd142193cc660740c9084b6266d01f9d34c0e9f74# #d7fa1766ab7060a75a0c3910e30ea6190a826356db4ef7d8093d12d43b1f316be1dc4949abe157e2fdd434846b27f0d5# #a9098af45097e6874e894e65d5fac508ff1743ee5027e3be4c9c1b2229351f57af254ba8a09d778575206930d83d116e# #c03f71b3b7fa84441a0479586ce02dce0f566163dc774073e4a72b9844d8e3296a087ce7ff2a4f767c7bc28447e3dc2f# #a36138cabdd0bfe2a6319b3a4789965011299e58e9d81aae5bcba3266eff4c781457f6acd92c75efbe9f39664bb1d420# #72ed909dca0cd8a5e2e89bbab3603ccaa95df175220389f3a4af00118d3f963be33c4fb264f4569e24372465317f5253# #e080388895fc318e084893c211dc6ec99602ddf303036158aa6fe01475b2646d70de73239abd3d72a4f173a5935880b2# #0311f11d7c74c220263cc864c7e54e6625f4f6f9789a025c5b714c36dd74782ec60d015028afcb1c7f248a83b14bbbc5# #acf9cd949a36ca74b4c1ee1617542482a53adc16f7e3c237ff6d6a2be11d860a37892c1b2d3eaf08aa065d997233ac72# #5455fce1634a90cdca549ceebaf3ba5ae8d091ee9c352f944c40f6e496eafbb03d74337202598fcfa6bdcb41e2d693c9# #85000c28f8a3c63a57698ef0b00495b8e779b543839ce377f3aac84f783eb04d7c617e2713339f8077a78ccbf8e4a1c0#</code></p>
diff --git a/site/postdata/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html b/site/postdata/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html
new file mode 100644
index 0000000..c123ca3
--- /dev/null
+++ b/site/postdata/How-to-Beat-Emacs-M-x-dunnet-in-5-minutes.html
@@ -0,0 +1,122 @@
+<h2 id="what">What?</h2>
+<p>In the emacs text editor there are some goofy commands that play
+games. M-x (which means Alt+x) is the way to execute a command in the
+editor, so M-x dunnet starts the game called “dunnet” which is a text
+adventure. I cheated and won. Defining just one function and setting one
+variable is sufficient to win. [Here is a text map of the easy path.](<a
+href="https://recentlywritten.com/static/path.txt">https://recentlywritten.com/static/path.txt)</a>)
+The command prompt is a `>`.</p>
+<h3 id="basic-commands">Basic Commands</h3>
+<ul>
+<li><p><code>>take</code> something</p></li>
+<li><p><code>>look</code></p></li>
+<li><p><code>>save</code> path</p></li>
+<li><p><code>>restore</code> path</p></li>
+<li><p>Directions Are: n,s,e,w,ne,se,nw,sw,u,d,in,out (so you might
+<code>go n</code>).</p></li>
+</ul>
+<h3 id="to-win">To win</h3>
+<p>First, save the game so you can restart easily later:</p>
+<ul>
+<li><code>>save ~/fresh.dun</code></li>
+</ul>
+<p>How you need to move around the world a bit. Dunnet will greet
+you:</p>
+<p><pre>You are at a dead end of a dirt road. The road goes to the
+east. In the distance you can see that it will eventually fork off. The
+trees here are very tall royal palms, and they are spaced equidistant
+from each other. There is a shovel here.</pre></p>
+<ul>
+<li><p><code>>take shovel</code></p></li>
+<li><p><code>>go e</code></p></li>
+<li><p><code>>go e</code></p></li>
+<li><p><code>>dig</code></p></li>
+<li><p><code>>look</code></p></li>
+<li><p><code>>take cpu</code></p></li>
+<li><p><code>>go se</code></p></li>
+<li><p><code>>take food</code></p></li>
+<li><p><code>>go se</code></p></li>
+<li><p><code>>feed bear food</code></p></li>
+<li><p><code>>look</code></p></li>
+<li><p><code>>take key</code></p></li>
+<li><p><code>>go nw</code></p></li>
+<li><p><code>>go nw</code></p></li>
+<li><p><code>>go ne</code></p></li>
+<li><p><code>>go ne</code></p></li>
+<li><p><code>>go ne</code></p></li>
+<li><p><code>>go w</code></p></li>
+<li><p><code>>put cpu in computer</code></p></li>
+</ul>
+<p>Now in M-: you must login to the VAX console</p>
+<pre><code>Eval: (setq dun-logged-in t)</code></pre>
+<p>back to the dungeon:</p>
+<ul>
+<li><code>>type</code></li>
+</ul>
+<p>greeted by a $ prompt:</p>
+<p>To get to endgame in the VAX console, define this with M-:</p>
+<pre><code>(defun dun-score (garb) 90)</code></pre>
+<h2 id="now-back-to-the-dungeon">Now back to the dungeon:</h2>
+<pre><code>$ rlogin endgame</code></pre>
+<ul>
+<li><code>>go n</code></li>
+</ul>
+<p>Congrats, now you get questions, here they all are with answers:</p>
+<ul>
+<li><p>What is your password on the machine called ‘pokey’?
+robert</p></li>
+<li><p>What password did you use during anonymous ftp to gamma?
+foo</p></li>
+<li><p>Excluding the endgame, how many places are there where you can
+put treasures for points? 4 or four</p></li>
+<li><p>What is your login name on the ‘endgame’ machine?
+toukmond</p></li>
+<li><p>What is the nearest whole dollar to the price of the shovel? 20
+or twenty</p></li>
+<li><p>What is the name of the bus company serving the town?
+mobytours</p></li>
+<li><p>Give either of the two last names in the mailroom, other than
+your own. collier</p></li>
+<li><p>What cartoon character is on the towel? snoopy</p></li>
+<li><p>What is the last name of the author of EMACS? stallman</p></li>
+<li><p>How many megabytes of memory is on the CPU board for the Vax?
+2</p></li>
+<li><p>Which street in town is named after a U.S. state?
+vermont</p></li>
+<li><p>How many pounds did the weight weigh? ten</p></li>
+<li><p>Name the STREET which runs right over the subway stop.
+4th</p></li>
+<li><p>How many corners are there in town (excluding the one with the
+Post Office)? 24</p></li>
+<li><p>What type of bear was hiding your key? grizzly</p></li>
+<li><p>Name either of the two objects you found by digging. cpu</p></li>
+<li><p>What network protocol is used between pokey and gamma?
+ip</p></li>
+</ul>
+<p>So you might do:</p>
+<ul>
+<li><code>>answer cpu</code></li>
+</ul>
+<p>then:</p>
+<ul>
+<li><code>>go n</code></li>
+</ul>
+<p>there are three quesions in total:</p>
+<ul>
+<li><p><code>>answer</code> something</p></li>
+<li><p><code>>go n</code></p></li>
+<li><p><code>>answer</code> something</p></li>
+<li><p><code>>take bill</code></p></li>
+</ul>
+<p>(naturally, you deserve it you cheater)!</p>
+<ul>
+<li><p><code>>go n</code></p></li>
+<li><p><code>>take Mona</code></p></li>
+</ul>
+<p>(you dirty cheater)</p>
+<p>Congrats you are in the winner’s room.</p>
+<ul>
+<li><p><code>>save ~/cheater.dun</code></p></li>
+<li><p><code>>restore ~/fresh.dun</code></p></li>
+</ul>
+<p>Now you can actually play it if you want.</p>
diff --git a/site/postdata/How-to-Learn-a-Language-According-to-The-Internet.html b/site/postdata/How-to-Learn-a-Language-According-to-The-Internet.html
new file mode 100644
index 0000000..698cd18
--- /dev/null
+++ b/site/postdata/How-to-Learn-a-Language-According-to-The-Internet.html
@@ -0,0 +1,31 @@
+<h2 id="informational-websites">Informational Websites</h2>
+<ul>
+<li><p>This website! <a
+href="https://recentlywritten.com/index.html">https://recentlywritten.com</a> xm0.co mirror of the
+AJATT website (down) <a href="https://xm0.co"
+class="uri">https://xm0.co</a></p></li>
+<li><p>Steven Krashen’s website <a href="http://www.sdkrashen.com/"
+class="uri">http://www.sdkrashen.com/</a></p></li>
+<li><p>view the AJATT website on the web archive (recommend going for
+~2014) <a href="http://www.alljapaneseallthetime.com/blog/"
+class="uri">http://www.alljapaneseallthetime.com/blog/</a></p></li>
+<li><p>“DJT” websites like this one (Japanese) <a
+href="https://djtguide.neocities.org/"
+class="uri">https://djtguide.neocities.org/</a></p></li>
+</ul>
+<h2 id="youtube-channels">YOUTUBE CHANNELS</h2>
+<p>Steve Kaufmann <a href="https://www.youtube.com/@Thelinguist"
+class="uri">https://www.youtube.com/@Thelinguist</a><br />
+Matt vs Japan <a href="https://www.youtube.com/@mattvsjapan"
+class="uri">https://www.youtube.com/@mattvsjapan</a><br />
+Korekara podcast <a href="https://www.youtube.com/@KoreKaraPodcast"
+class="uri">https://www.youtube.com/@KoreKaraPodcast</a><br />
+Professor Arguilles <a href="https://www.youtube.com/@ProfASAr"
+class="uri">https://www.youtube.com/@ProfASAr</a></p>
+<h2 id="books">BOOKS</h2>
+<p>Breaking Tradition (history of language learning in medieval
+times)<br />
+“From the Outside In” J Marvin Brown’s autobiography <a
+href="https://bradonomics.com/brown-autobiography/"
+class="uri">https://bradonomics.com/brown-autobiography/</a><br />
+Kato Lomb’s book “Polyglot: How I Learn Languages”</p>
diff --git a/site/postdata/How-to-manage-100000-digital-books-in-15-languages.html b/site/postdata/How-to-manage-100000-digital-books-in-15-languages.html
new file mode 100644
index 0000000..8d0fa6c
--- /dev/null
+++ b/site/postdata/How-to-manage-100000-digital-books-in-15-languages.html
@@ -0,0 +1,49 @@
+<h2 id="calibre---the-library-management-program">Calibre - the library
+management program</h2>
+<h3 id="not">not</h3>
+<h2 id="calibre---just-for-converting-books">Calibre - just for
+converting books</h2>
+<p>Yes, it can also do that, however.</p>
+<figure>
+<a href="https://recentlywritten.com/static/calibre-import.png" target="_blank"><img src="https://recentlywritten.com/static/calibre-import.png" style="display:block;" alt="/static/calibre-import.png" /></a>
+</figure>
+<p>Calibre is meant for keeping track of books. This might seem
+superfluous, but it resolves the problem of storing and finding the book
+you want.</p>
+<p>Without calibre, we always end up with some kind of ad-hoc hierarchy
+of files.</p>
+<pre><code>doc/
+|- computers/
+|- spanish/
+|- ..etc.</code></pre>
+<p>This works fine for awhile, but what if a book is both about
+computers and in Spanish? Then we see the problem: we need to apply
+arbitrary numbers of attributes in the form of tags to each book, and
+have the title, author, publisher, etc. be their own attributes. As Karl
+Voit points on on his site, karl-voit.at(<a
+href="https://karl-voit.at)," class="uri">https://karl-voit.at),</a>
+real-world items are not split into numbers of distinct hierarchical
+categories. Tags are a solution!</p>
+<ul>
+<li><p>Supports bulk adding/removing of tags.</p></li>
+<li><p>Can store an audiobook and a print book togher in a single
+listing using the formats dialogue.</p></li>
+<li><p>Very powerful searching/filtering of books. The latest update
+added a cover viewer deck to the top.</p></li>
+<li><p>Send files to device, or delete them. Don’t fill up your device
+with more books than you are currently reading.</p></li>
+<li><p>run a server that hosts books with a reader for browser.</p></li>
+<li><p>Can convert books into any format needed.</p></li>
+<li><p>Resolves encoding issues.</p></li>
+<li><p>Resolves bugs in the books using the converter dialogue.</p></li>
+<li><p>Easily select certain types of books and export to your
+friends.</p></li>
+<li><p>Mass download books so you can search for them in your Calibre
+instead of on Google.</p></li>
+<li><p>Install the “count pages” plugin to sort by book length or
+calculated reading difficulty rating.</p></li>
+<li><p>…more?</p></li>
+</ul>
+<h3 id="use-calibre-to-its-fullest-extent-httpscalibre-ebook.com">Use
+Calibre to its fullest extent: <a href="https://calibre-ebook.com/"
+class="uri">https://calibre-ebook.com/</a></h3>
diff --git a/site/postdata/How-to-take-notes-not-self-help-advice.html b/site/postdata/How-to-take-notes-not-self-help-advice.html
new file mode 100644
index 0000000..f103266
--- /dev/null
+++ b/site/postdata/How-to-take-notes-not-self-help-advice.html
@@ -0,0 +1,127 @@
+<p>I think I have a unique take on note taking.</p>
+<p>“Notes” on literature etc. are different than hard sciences, see
+below. I’m not a fan of 21st century self-help note-taking methods like
+mind-mapping or playing with different colour pens.</p>
+<p>One form of note taking is to use your knowledge to write up a little
+essay on a topic in order to figure some things out. This is something I
+learned from Paul Graham’s essays. You can see them <a
+href="https://paulgraham.com/articles.html">here</a>. Here’s a useful
+one: <a href="https://paulgraham.com/useful.html">How to Write
+Usefully”</a> I think these can be quite an asset for understanding
+different topics. This stretches the definition of “notes”, because you
+can start writing these at any time on any topic, so they are often not
+notes taken while consuming some material, but fresh new work from daily
+musings. I find that this works best when you start out not knowing the
+answer to the thing you want to write about. Makes for an enjoyable
+writing experience. I’d consider this article to be such an example: I
+didn’t know what I was going to say about note taking until I
+started.</p>
+<p>Otherwise, one can also be solving some math problems, mashing out
+some pseudo-code. Whatever works. This is something I’ve learned from
+Dijkstra, primarily. Perhaps also the tendency to write a DSL that I
+learned from SICP has led to me writing arbitrary pseudo-code made up on
+the fly in notebooks. This is what I recommend for “hard sciences”.
+Anything where you’re doing math, drawing diagrams, etc. Interspersing
+with English commentary is helpful. This is modelled on Dijkstra’s exact
+style for discussing the fundamentals of computer science.</p>
+<p>I’ve found the best way to do this is to have a single notebook where
+everything goes into it, a notebook that I carry around with me and
+sometimes leave open on the table so I can easily start writing into it.
+When it’s full, I number the pages and make a table of contents, because
+otherwise it would be hard to find anything in it. Separating things
+into separate notebooks doesn’t work for me. I never have the right
+notebook with me, I always forget which notebook is which etc. That
+worked for college when I’d have a separate notebook for each course,
+but for auto-didactic stuff there is no course. I prefer a notebook
+without lines, for the math and diagrams, if I can get one. Just like
+Dijkstra.</p>
+<p>I’ve scanned a few thousand pages of these kind of notes with my
+phone, and plan to turn some of them into typed-out and redacted digital
+versions for my own future benefit. Some I might publish on a blog. Most
+are garbage!</p>
+<p>Guarino Guarini, sometimes seen as the first renaissance teacher of
+Latin, suggested taking little quotes out of books and putting them into
+a notebook for later. I do this now and use grep to find stuff in that
+notes folder. Thanks to the joys of hoarding books in Calibre, (acquired
+from the LibGen of course) I know I will be able to search up any
+portion of these quotes in the ePub I downloaded for instant
+referencing, as needed.</p>
+<p>Guarini himself (from Breaking Tradition)</p>
+<ul>
+<li>If then, in the course of the reading, you happen to discover a nice
+saying, a wise and noble action, a quick answer, something pertinent to
+a gracious way of living, it seems to me that you would do well to keep
+at hand a little notebook like a faithful depository in which you might
+make notes of points in the text; in this way you will be able to go
+back to your favourite parts without having to leaf through everything.
+[…] But if copying things in the notebook causes annoyance and
+interrupts your reading, you should [not do it].</li>
+</ul>
+<p>I find that this is a good way to take notes on non-techincal books.
+Literature, self-help, business books, whatever. First I write them on
+any paper I have around, then I select from them the best ones to type
+into the computer. This gets you a filtered version of the book that is
+the most important, meaningful, and interesting to you. You can also
+show off by pulling out quotes like the one above. The Guarini method is
+nice because it gives you a superior reference for the future, better
+than referencing the book itself. In the time of Guarini (13th century),
+it was also noted to be better than owning and carrying around dozens of
+heavy and expensive books.</p>
+<p>For books on computing or math I prefer to read a chapter, then grind
+my gears and try to figure something out that I find interesting. Often
+times it is something a bit goofy that I come up with, like how to
+derive sin(x) from cos(x) or whatever. Or it might be related to another
+software project I’m working on, and I’ll decide to try rewriting some
+bit using this new method I’ve learned. If the book isn’t hard enough to
+enable this kind of reading, it probably is too simple of a book.</p>
+<p>There’s no reason to take notes on books the way you take notes on
+lectures: you can easily reference books, but not lectures. Even if you
+are consuming video lectures, they just aren’t easily referenced like a
+book. You take notes so you can have a lecture with pages, it seems. The
+goal isn’t to memorize your notes, it’s to have something to reference
+while you do the homework. I noticed in college that often times every
+student’s notes were virtually exactly the same for a given class, from
+philosophy to math to physics, yet I felt that it was necessary to make
+those notes anyway. Then I could easily flip the book open and look at
+the notes for a given topic while I did the homework. Again, I find that
+watching video lectures is pretty useless unless there is some kind of
+homework I can do. If the book is good enough, the lectures feel
+pointlessly redundant too.</p>
+<p>I’ll finish with another quote from my collection by Guarini:</p>
+<ul>
+<li>Do you desire outstanding advisors, the best, that is, in terms of
+faithfulness, beneficience, prodence? Then search out books. Read them.
+Make it a habit to carry them with you always, in the countryside and
+while travelling, as others do with dogs, falcons, and dice. I would
+prefer you have more books than clothes. Not only are your books more
+useful and pleasant, they are also a good investment. You’ll always be
+able to sell or exchange books, but one can’t say the same about
+cloting.</li>
+</ul>
+<p>Another person worth referencing would be Dijkstra, who took notes
+with his fancy pen, tried to make them readable on the first try, and
+faxed them to his colleagues. You can learn a bit about this in the EWD
+<a
+href="https://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1300.html">EWD1300</a>
+, but I think there was another EWD which better explained his unique
+method.</p>
+<p><img src="https://recentlywritten.com/static/ewd1300.png" /></p>
+<p>I’ve read dozens of EWDs, but I can never reference them, because I
+didn’t know about Guarini’s method at the time!</p>
+<p>To summarize: for literature etc. I use the Guarini method to create
+a valuable asset supported by centuries of studies in the humanities.
+For math, I try to take notes similar to how Dijkstra did it in his
+excellent EWDs. For actual code, I prefer to make up a language for the
+problem on the spot, and start using it on the paper in order to solve
+the problem. And for figuring out answers to non-specific questions like
+“what is a good way to take notes”, writing an essay on it is the way to
+go.</p>
+<p>Last week a friend of mine asked me to “start documenting stuff”.
+This is because I unload erudite wisdom from a week of reading when he
+comes around, just talking to him about it, and the information from
+that discussion goes up into the air without anything to show for all of
+that learning and thinking. There’s papers all scattered around the
+office. Correctly, I pointed out, that if I documented stuff for
+<em>him</em>, instead of just for me, at that point it would be just as
+easy to document it for <em>everyone</em>. Here is today’s
+documentation.</p>
diff --git a/site/postdata/Install-Anki.html b/site/postdata/Install-Anki.html
new file mode 100644
index 0000000..7352ae9
--- /dev/null
+++ b/site/postdata/Install-Anki.html
@@ -0,0 +1,20 @@
+<p><span class="relative-nav"> <span class="fishdown"> <a
+href="https://recentlywritten.com/Learn-Kanji-in-a-Fortnight.html"><img src="https://recentlywritten.com/static/fishdown.png" data-align="left" alt="fisho down" /></a>
+</span> <span class="centercomp"> </span></span></p>
+<h2 id="install-anki">Install Anki</h2>
+<figure>
+<img src="https://recentlywritten.com/static/anki.png" alt="Article image." />
+<figcaption aria-hidden="true">Article image.</figcaption>
+</figure>
+<p>easier than installing gentoo.</p>
+<hr />
+<figure>
+<a href="https://apps.ankiweb.net/"><img src="https://recentlywritten.com/static/anki.png" /></a>
+<figcaption>
+<a href="https://apps.ankiweb.net/">click here to install anki</a>
+</figcaption>
+</figure>
+<p><span class="fishup"> <a
+href="https://recentlywritten.com/install-gentoo-hints.html"><img src="https://recentlywritten.com/static/fishup.png" data-align="right" alt="fisho up" /></a>
+</span></p>
+<p>in: <a href="https://recentlywritten.com/tag/articles.html">articles</a></p>
diff --git a/site/postdata/Install-Nix-on-Gentoo.html b/site/postdata/Install-Nix-on-Gentoo.html
new file mode 100644
index 0000000..e16b507
--- /dev/null
+++ b/site/postdata/Install-Nix-on-Gentoo.html
@@ -0,0 +1,32 @@
+<p>Code:<br />
+<a href="https://github.com/trofi/nix-guix-gentoo" class="external-link">nix
+and guix overlay for gentoo</a></p>
+<p>Guide:<br />
+<a href="https://trofi.github.io/posts/196-nix-on-gentoo-howto.html" class="external-link">nix
+on gentoo howto by trofi</a></p>
+<p>It is <em>very</em> easy to do this way.</p>
+<h2 id="benefits">BENEFITS</h2>
+<ul>
+<li><p>Install bloatware with declarable builds and zero effort</p></li>
+<li><p>Install basedware with gentoo</p></li>
+<li><p>Be able to build stuff from source etc. without the nix
+abstractions<br />
+getting in the way</p></li>
+<li><p>Learn how nix works for deployable declarative server
+infrastructure
+(<a href="https://recentlywritten.com/Why-YOU-need-NixOS-on-your-desktop-and-servers.html" class="external-link">see
+post on that here</a>)</p></li>
+</ul>
+<h2 id="alternatives">Alternatives</h2>
+<ul>
+<li><p>Use kexec and install both, switch at runtime (complex, can’t
+have both on at the same time)</p></li>
+<li><p>Use a gentoo chroot from within nix (complex, requires knowledge
+of the nix language). Use qemu or whatever. Very smart option. All the
+same benefits as above but the base system is also more reliable because
+it is nix. Install portage in NixOS (madness)</p></li>
+</ul>
+<h2 id="gotchas">Gotchas</h2>
+<p>Nix <em>should</em> work with the official <code>curl</code> into
+<code>sudo sh</code> method, and not break the system. Instead, use the
+overlay. Let the overlay maintainer deal with those problems.</p>
diff --git a/site/postdata/Learn-Kanji-in-a-Fortnight.html b/site/postdata/Learn-Kanji-in-a-Fortnight.html
new file mode 100644
index 0000000..a6f2dd7
--- /dev/null
+++ b/site/postdata/Learn-Kanji-in-a-Fortnight.html
@@ -0,0 +1,92 @@
+<h3 id="the-first-deck">The first deck</h3>
+<h4 id="kanji-radicals">Kanji Radicals</h4>
+<p>It’s here: <a
+href="https://ankiweb.net/shared/info/1044119361">ankiweb</a></p>
+<p>In case it goes down, it is hosted on this site too: <a
+href="https://recentlywritten.com/static/kanji-radicals.apkg">mirror</a></p>
+<p>Rep these really fast, 50/day. They just help to remember the next
+deck.</p>
+<figure>
+<img src="https://recentlywritten.com/static/radicalexample.png" />
+<figcaption>
+A kanji radical card
+</figcaption>
+</figure>
+<h3 id="the-next-deck">The next deck</h3>
+<h4 id="simple-rtk-deck-rrtk-recognition-remembering-the-kanji">Simple
+RTK deck (RRTK) Recognition Remembering The Kanji</h4>
+<p>It’s here: <a
+href="https://ankiweb.net/shared/info/627768060">ankiweb</a></p>
+<p>Or here: <a href="https://recentlywritten.com/static/simple-rtk.apkg">mirror</a></p>
+<p>This is where we have a bit of fun. Rather than trying to rep cards
+“really hard” with anki’s algorithm, we accept that the purpose it
+merely to get the point where we kind of recognize these cards. Each
+day, setup a filtered deck for 300 fresh new cards cards. Review as many
+as you want. Rinse and repeat.</p>
+<figure>
+<img src="https://recentlywritten.com/static/createfiltereddeck.png" />
+<figcaption>
+Relevant anki settings with arrows
+</figcaption>
+</figure>
+<p>Of course, this will result in a very insane review count. So we set
+the option to <em>show new cards first</em> and <em>show reviews
+randomly</em>, and do as many reviews as desired. There will be more
+cards left, but that’s not worth worrying about. There is no need to
+learn this stuff “really well”, it’s just a goofy system to make reading
+a bit easier.</p>
+<h4 id="how-to-rep-the-cards">How to rep the cards:</h4>
+<p>The first time you see a kanji:</p>
+<ol type="1">
+<li>If you know it from Japanese content, DELETE it (or suspend it). Eg.
+if you know a reading for it.</li>
+<li>If you don’t know it, and you make a story for it on the spot, pass
+it.</li>
+<li>If you can’t come up with a story, fail it and see if you get lucky
+and remember it next time without any story.</li>
+</ol>
+<h5 id="reviewing-old-kanji">Reviewing old Kanji</h5>
+<ol type="1">
+<li>If you remember the keyword, any reading, or half of the story, go
+ahead and pass it.</li>
+<li>If the kanji evokes no such memory, fail it. Consider rewriting the
+story.</li>
+</ol>
+<p>As usual, don’t use the hard/easy buttons, just again/good. Don’t
+learn to write the characters, just recognize them. Learn to write when
+you know Japanese.</p>
+<h5 id="writing-stories">Writing stories</h5>
+<p>Go for something short rather than long and memorable. A decent story
+might be this:</p>
+<p>“A source is a wet meadow”</p>
+<p>A bad story is anything that is too long or invokes too many
+unrelated words and ideas.</p>
+<p>Another option is to use an image editor and an image search to put
+together low-quality memorable images. Don’t spend more than 60 seconds
+making a story for a card, because time is an asset and there are 3,000
+cards to review. Only do this if very comfortable quickly making these
+kinds of cards with Gimp, for example. Text stories also work. Sometimes
+when you see a card, it will bring to mind a very particular kind of
+image. When I saw the kanji marked “smash”, I couldn’t help but think
+about the Russian slapping competitions so I put an image of that on
+there. It’s silly, but it works and only takes about thirty seconds. And
+it fit with the story that I made for it, which is important.</p>
+<figure>
+<img src="https://recentlywritten.com/static/smash.png" />
+<figcaption>
+Smash card
+</figcaption>
+</figure>
+<figure>
+<img src="https://recentlywritten.com/static/airplanecarrot.png" />
+<figcaption>
+I thought this story was a bit too complicated as a text sentence: “A
+plane is a raw carrot with akimbo swords”, so I went with an image.
+</figcaption>
+</figure>
+<figure>
+<img src="https://recentlywritten.com/static/twintowers.webp" />
+<figcaption>
+There’s no kanji for this one
+</figcaption>
+</figure>
diff --git a/site/postdata/Mailing-list-in-one-line.html b/site/postdata/Mailing-list-in-one-line.html
new file mode 100644
index 0000000..96be662
--- /dev/null
+++ b/site/postdata/Mailing-list-in-one-line.html
@@ -0,0 +1,12 @@
+<h1 id="list-of-emails.txt">==> list-of-emails.txt <==</h1>
+<pre><code>Your Name <youremail@example.com>
+...
+...
+# ==> mailing-list.sh <==
+#!/bin/sh
+while read email; do neomutt -H "$MESSAGEFILE" "$email" < /dev/null; done < /dev/stdin</code></pre>
+<p>Make an mbox email with neomutt of whatever.<br />
+Now run it.</p>
+<pre><code>cat list-of-emails.txt | mailing-list.sh email-file.mbox</code></pre>
+<p>Now make an alias in (zsh) for extreme FAST mailing</p>
+<pre><code>alias mail2list='f(){ [ -n "$1" ] && cat /home/jose/.config/mailing-list/the-mailing-list | mailing-list "$1" }; f'</code></pre>
diff --git a/site/postdata/Minimal-nvim-config-optional-AI-slop-enjoy.html b/site/postdata/Minimal-nvim-config-optional-AI-slop-enjoy.html
new file mode 100644
index 0000000..9d6b38b
--- /dev/null
+++ b/site/postdata/Minimal-nvim-config-optional-AI-slop-enjoy.html
@@ -0,0 +1,68 @@
+<p><a href="https://github.com/HACKERMEN-ORG/hackermen-neovim-config-file" class="external-link">code
+on the git hub website</a></p>
+<p>A friend sent me a neomutt configuration which was thousands of lines
+of LLM code, using libraries where even the READMEs are written by LLMs.
+Surprisingly, it worked pretty good. Human being were never any good at
+writing VimScript anyway. Of course, to make even tiny edits, due to the
+extreme unnecessary complexity brought in by the LLM, requires the use
+of another LLM. Blargh!</p>
+<p>The solution: actually use a decent, simple init written by a human,
+and put the rest in the “optional” slop folder. Problem solved!</p>
+<h2 id="install">Install</h2>
+<p>Run nvim and do,<code>:PlugInstall</code>. BAM! Future travellers:
+you should do <code>:PlugUpdate</code>.</p>
+<h2 id="features">FEATURES</h2>
+<ul>
+<li><p><a href="http://danmidwood.com/content/2014/11/21/animated-paredit.html" class="external-link">Structural
+editing</a></p></li>
+<li><p>Global leader is Spacebar. Spacevim!</p></li>
+<li><p>Local leader is comma.</p></li>
+<li><p>Spellcheck and shellcheck keybindings.</p></li>
+<li><p>(sane) Completion. See equwal’s
+<a href="https://github.com/equwal/tag-gen" class="external-link">tag-gen</a>
+project.</p></li>
+<li><p>Which-key. Learn vim!</p></li>
+<li><p>Goyo (For writing words. Automatically turns on when editing
+neomutt buffers)</p></li>
+<li><p><++> templating (see my <++>
+<a href="https://recentlywritten.com/tmpl-insanely-simple-templates.html" class="external-link">tmpl</a>
+project)</p></li>
+<li><p>Ask what you meant using fzf when you try try to open a file that
+doesn’t exist.</p></li>
+<li><p>Save your place in the buffer for later.</p></li>
+<li><p>mode line</p></li>
+<li><p>Slightly modified vim defaults (very slightly). See the only file
+for details.</p></li>
+</ul>
+<h2 id="non-features">NON-FEATURES</h2>
+<ul>
+<li><p>Not crazy modifications to vim defaults</p></li>
+<li><p>Only one file (everything else in “slop” folder)</p></li>
+<li><p>No major changes to the packages used</p></li>
+<li><p>No window management. Use a terminal multiplexer.</p></li>
+<li><p>No claude code. Same.</p></li>
+</ul>
+<p>Source your own config at the bottom of the init.lua and work from
+these sane defaults.</p>
+<h3 id="faq-frequent-answers-to-questions">FAQ: Frequent Answers to
+Questions</h3>
+<h4
+id="source-your-own-config-at-the-bottom-of-the-init.lua-and-work-from-these-sane-defaults">“Source
+your own config at the bottom of the init.lua and work from these sane
+defaults”</h4>
+<p>Then, make changes to the init.lua and send a pull request.</p>
+<h4 id="you-dont-need-claude-in-your-vim">You don’t need claude in your
+vim</h4>
+<p>ARGH. Just use dvtm/mtm/abduco or your window manager to deal with
+it. None of the claude vim projects are smart enough to send parts of
+buffers to the claude like slime does for lisp. Those claude vim
+packages are just glorified terminals using vim as a (very bad)
+multiplexer.</p>
+<h4 id="plugged-is-better-than-lazy">Plugged *is* better than Lazy</h4>
+<p>Lazy is written by AI. The point of this is to not be written
+by<br />
+AI. Complex shit breaks!</p>
+<h4 id="here-is-your-prompt-sir">Here is your prompt, SIR:</h4>
+<pre><code>start adding individual feature s one by one which only take up 1-10 lines. Don't import all the config, just the most basic config. For individual lines, write what it does and ask to add it in. For packages, read the github pages and their default configuration to minimize the edits needed. Opt for the most default configuration if possible.</code></pre>
+<h4 id="dont-add-hundreds-of-lines-of-ai-slop-to-my-config.">Don’t add
+hundreds of lines of AI slop to my config.</h4>
diff --git a/site/postdata/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html b/site/postdata/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html
new file mode 100644
index 0000000..95f1799
--- /dev/null
+++ b/site/postdata/New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW.html
@@ -0,0 +1,3 @@
+<p>This site will soon have a pre-order page which also signs you up to
+the newsletter so you can know when I post most stuff on here for your
+consumption.</p>
diff --git a/site/postdata/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html b/site/postdata/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html
new file mode 100644
index 0000000..fe0241c
--- /dev/null
+++ b/site/postdata/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html
@@ -0,0 +1,55 @@
+<p>Right now it isn’t syndicated anywhere, but you can download them
+directly from these links:</p>
+<ul>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/1%20ALATT%20Path%20And%20C1%20Polyglot%20To%20C2.opus">1
+ALATT path and C1 polyglot to C2</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/2%20LR%20is%20Mandatory%20For%20Literate%20Polyglots.opus">2
+LR is mandatory for literate polyglots</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/3%20Six%20Part%20Learner%20Model.opus">3
+Six part learner model</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/4%20There%20Are%20Higher%20Levels%20To%20Aquisition.opus">4
+There are higher levels to aquisition</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/5-so-you-want-to-learn-some-languages-what-do-you-do.opus">5
+So you want to learn some languages, what do you do?</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/6-need-to-listen-to-conversations-to-speak.opus">6
+Need to listen to conversations to speak</a></li>
+<li><a href="https://recentlywritten.com/static/language-podcast/7-listening-reading.opus">7
+Listening reading (L/R)</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/8-how-to-get-and-consume-media-climbing-a-mountain.opus">8
+How to get and consume media climbing a mountain</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/9-learn-five-languages-from-zero.opus">9
+Learn five languages from zero</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/10-what-is-a-good-language-learning-method.opus">10
+What is a good language learning method</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/11-you-need-to-know-how-they-learn-japanese.opus">11
+YOU need to know how they learn Japanese</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/12-why-do-we-learn-languages.opus">12 Why
+do we learn languages (for the middle path)</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/13-so-you-want-to-learn-latin.opus">13 So
+you want to learn Latin</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/14-learn-how-to-learn-how-to-learn-languages.opus">14
+Learn how to learn how to learn languages</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/Audacity%20Shadowing%20Without%20Shadowing.opus">15
+Audacity Shadowing Without Shadowing</a></li>
+<li><a href="https://recentlywritten.com/static/language-podcast/BUYNOW.opus">16 BUY NOW (book
+announcement)</a></li>
+<li><a
+href="https://recentlywritten.com/static/language-podcast/How%20to%20Use%20the%20Internet%20Library%20Only.opus">17
+How to Use the Internet Library Only</a></li>
+<li><a href="https://recentlywritten.com/static/language-podcast/Quixotic%20Self-Awareness.opus">18
+Quixotic Self-Awareness</a></li>
+</ul>
diff --git a/site/postdata/Newport.html b/site/postdata/Newport.html
new file mode 100644
index 0000000..b078660
--- /dev/null
+++ b/site/postdata/Newport.html
@@ -0,0 +1,13 @@
+<h5 id="portable-shell-and-system-access-for-common-lisp.">Portable
+shell and system access for Common Lisp.</h5>
+<p>Revive the portable OS interface library portions of CLOCC’s PORT,
+with modern implementations and ASDF. Provide better documentation than
+was ever offered at the now bit rotten site. Licensed with LGPL (through
+mandate, since the original was).</p>
+<p><a href="https://github.com/equwal/Newport"></a></p>
+<p><img src=“static/p-identical-to-p-tiny.png” data-a=“” data-by=“”
+data-followed=“” data-identical-to=“” data-p.=“” alt=“Logo fo Newport. A
+p followed by a triple bar (a math symbol for” /></p>
+<p>Code on github!</p>
+<p><a href="https://recentlywritten.com/newport-reference-manual.html">View the Reference
+Manual</a></p>
diff --git a/site/postdata/Nixtoo-Genux-released.html b/site/postdata/Nixtoo-Genux-released.html
new file mode 100644
index 0000000..7703041
--- /dev/null
+++ b/site/postdata/Nixtoo-Genux-released.html
@@ -0,0 +1,29 @@
+<p><a href="https://github.com/equwal/nixtoo-genux" class="external-link">git
+hub website link here</a></p>
+<h2
+id="nix-package-manager-on-another-os-no-nix-env.-100-declarative-setup.">Nix
+package manager on another OS (no nix-env). 100% Declarative setup.</h2>
+<p>Including Gentoo of course. Nixtoo Genux!</p>
+<h3 id="files">Files:</h3>
+<ol type="1">
+<li><p><code>flake.nix</code>: Put packages here. Includes a dev shell
+and flakey.</p></li>
+<li><p><code>aliasrc-additions.zsh</code>: Aliases to make it easier to
+use the setup. Very mandatory.</p></li>
+<li><p><code>INSTALL.sh</code>: Installs this setup. Install it after
+installing the multi-user installation of nix from the
+<a href="https://nixos.org/download/" class="external-link">official
+website using curl into shell</a> or (for Gentoo) from
+<code>sys-apps/nix</code> from
+<a href="https://github.com/trofi/nix-guix-gentoo" class="external-link">Trofi’s
+nix-guix-gentoo overlay</a></p></li>
+</ol>
+<h3 id="aliases">Aliases:</h3>
+<p><code>nix-install <package></code>: Add a package to the file
+(uses sed) and rebuild.<br />
+<code>nix-uninstall <package></code>: Remove a package from the
+file (uses sed) and rebuild.<br />
+<code>nix-update</code>: Update and rebuild the system.<br />
+<code>nix-rebuild</code>: Rebuild the system but don’t update.<br />
+<code>nix-develop</code>: Makes a nix dev shell for the system.
+Redundant when using flakey (default).</p>
diff --git a/site/postdata/POSIX-pipes-for-Lisp.html b/site/postdata/POSIX-pipes-for-Lisp.html
new file mode 100644
index 0000000..da24e4f
--- /dev/null
+++ b/site/postdata/POSIX-pipes-for-Lisp.html
@@ -0,0 +1,23 @@
+<h2
+id="posix-pipes"><a href="https://github.com/equwal/posix-pipes" class="external-link">posix-pipes</a></h2>
+<p>Portably run a command with input/output to/from CL.</p>
+<p>From
+<a href="https://github.com/Sharp-CLOCC/Newport" class="external-link">Newport</a>
+which<br />
+is the Sharp-CLOCC’s maintenance and reduction of
+<a href="https://clocc.sourceforge.net/dist/port.html" class="external-link">CLOCC’s
+port<br /> module</a> for modern lisps.</p>
+<h2 id="clone">clone</h2>
+<p><a href="https://github.com/equwal/posix-pipes" class="external-link">repo
+hyperlink</a></p>
+<p><code>git clone 'https://github.com/equwal/posix-pipes'</code></p>
+<h2 id="includes-free-pipes">Includes free pipes</h2>
+<pre><code>posix-pipes:pipe-output
+posix-pipes:pipe-input
+posix-pipes:with-open-pipe
+posix-pipes:close-pipe</code></pre>
+<h3 id="license">LICENSE</h3>
+<p>LGPL</p>
+<p>(ie. no mixed use)</p>
+<h3 id="todo">TODO</h3>
+<p>Add ecl support</p>
diff --git a/site/postdata/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html b/site/postdata/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html
new file mode 100644
index 0000000..0110f25
--- /dev/null
+++ b/site/postdata/Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website.html
@@ -0,0 +1,10 @@
+<p>Check out the <a
+href="https://www.youtube.com/watch?v=6SwJj6-gWtI&list=PLojsGg_CghKYhvi9kyiQEdEWJ_k2POBxL">playlist
+on the YouTube website (CLICK HERE)</a> which should be up to date.
+Starts at episode five of the podcast.</p>
+<p>Youtube channel is at <a href="https://www.youtube.com/@therealtruex"
+class="uri">https://www.youtube.com/@therealtruex</a></p>
+<p><a
+href="https://recentlywritten.com/New-podcast-about-polyglot-language-learning-LISTEN-NOW.html">The
+podcast release announcement is here (some non-youtube audio-only
+podcasts here) (CLICK HERE)</a></p>
diff --git a/site/postdata/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html b/site/postdata/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html
new file mode 100644
index 0000000..2f8679a
--- /dev/null
+++ b/site/postdata/Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post.html
@@ -0,0 +1,11 @@
+<p>Antennapod is an app for listening to podcasts. It has this “queue”
+feature, and it is pretty easy to rack up 10,000 hours of content
+through podcast downloads, your own audiobooks, and youtube-dl folders
+or whatever else. This is superior to radio. Radio sucks. Come with me
+and get in the queue.</p>
+<figure>
+<img src="https://recentlywritten.com/static/antennapod-hours.jpg" />
+<figcaption>
+My hours after bloating my queue.
+</figcaption>
+</figure>
diff --git a/site/postdata/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html b/site/postdata/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html
new file mode 100644
index 0000000..8d68f11
--- /dev/null
+++ b/site/postdata/REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development.html
@@ -0,0 +1,58 @@
+<p>I recently “discovered” using an LLM to code with, and was looking
+forward to doing some “REPL Driven Development” on it. Unfortunately, I
+discovered that all of the vibe-coded vim plugins just use vim as a
+(terrible) multiplexer for the Claude Code CLI program. The Emacs plugin
+<a href="https://github.com/manzaltu/claude-code-ide.el" class="external-link">claude-code-ide.el</a>
+does it right by having text selection and other send-to-repl-like
+actions like a proper Lisp IDE does.</p>
+<p>This was merely a lisp thing to do because the parentheses clearly
+define selection to send. That’s no longer an issue, the LLM can filter
+out the garbage in a way that a GOFAI symbolic rule-based pattern
+matcher can’t.</p>
+<p>The command line program likes to use diffs to edit files, and that
+is reasonable, but vastly inferior to REPL Driven Development from a
+scratch file. Below are some of my notes from 2019 for more context on
+using the lisp REPL. With RDD, you will never type something directly
+into a REPL again. “Never type into the REPL”.</p>
+<p>It’s nice using grep to lookup some code I might have written 5 years
+ago that would have been ephemeral and lost at the REPL.</p>
+<h3 id="repl-driven-development">REPL driven development</h3>
+<p>Stuard Halloway’s 2017 talk at Chicago Clojure:</p>
+<p><a href="https://vimeo.com/223309989" class="external-link">vimeo</a><br />
+<a href="https://github.com/matthiasn/talk-transcripts/blob/master/Halloway_Stuart/REPLDrivenDevelopment.md" class="external-link">slide
+notes</a></p>
+<ul>
+<li><p>DON’T type <em>into</em> the repl. Type into a file that you can
+search later.</p></li>
+<li><p>Use repl-interaction commands (like insert-in-repl, minibuffer,
+etc.).</p></li>
+<li><p>Have a plan to avoid wasting time (since repls are fun).</p></li>
+<li><p>Know <em>all</em> the jump-to-documentation kinds of commands.
+Searching for a regex,<br />
+jumping to the source of a thing, etc.</p></li>
+<li><p>Analysing data carefully at the repl (don’t just stare at
+stacktraces).</p></li>
+<li><p>Debugging at O(log n)</p></li>
+<li><p>Custom REPLs (especially debuggers/inspectors with breakpoints,
+etc.)</p></li>
+<li><p>Do use the debugger.</p></li>
+</ul>
+<h4 id="most-important-keystrokes">MOST important keystrokes</h4>
+<ul>
+<li><p>Execute a thing in the minibuffer</p></li>
+<li><p>Tracing functions (or a short function to execute in the
+minibuffer like =trace=)</p></li>
+<li><p>Sending to repl from behind the point</p></li>
+<li><p>Sending to repl from in front of the point</p></li>
+<li><p>Sending the whole top-level expression at point to the
+repl</p></li>
+<li><p>Jump to the minibuffer (not for typing! just to see big
+output)</p></li>
+<li><p>A keystroke to jump back to the source file (or something like
+windmove)</p></li>
+<li><p><em>all</em> the documentation commands (search, jump to source,
+doc-at-point, etc.)</p></li>
+<li><p>Execute something and replace it with the output/write the output
+as</p></li>
+</ul>
+<p>a comment in the scratch buffer.</p>
diff --git a/site/postdata/SL--Dependency-Language.html b/site/postdata/SL--Dependency-Language.html
new file mode 100644
index 0000000..e4088e6
--- /dev/null
+++ b/site/postdata/SL--Dependency-Language.html
@@ -0,0 +1,88 @@
+<p>[image /static/bnf-sl.png]</p>
+<p>[Github](<a href="https://github.com/equwal/sl)"
+class="uri">https://github.com/equwal/sl)</a> |<br />
+[Homepage](<a
+href="https://recentlywritten.com/sl--dependency-language">https://recentlywritten.com/sl–dependency-language)</a>.html)</p>
+<p>SL is a Domain Specific Language (ie. simple programming language)
+for dealing with ambiguous dependency situations. It is more expressive
+than the standard method in Common Lisp: the use of reader macros.</p>
+<h2 id="examples">Examples</h2>
+<p>The only external macro is <code>defsl</code>. There is BNF below,
+though some examples are in order.</p>
+<h3 id="simple">Simple</h3>
+<p>This defines <code>operator-arglist</code> (in the current package)
+as<br />
+<code>slynk:operator-arglist</code>, unless <code>slynk</code> is
+unavailable, in which case<br />
+<code>swank:operator-arglist</code> is used.</p>
+<p><code>` commonlisp</code><br />
+<code>(defsl operator-arglist :fn :eq slynk swank)</code><br />
+`</p>
+<p>The <code>:fn</code> shows that a FUNCTION is being defined, as
+opposed to a <code>:sym</code> symbol; to define another namespace a
+list is required: <code>(accessor-fn boundp-fn)</code>. <code>:eq</code>
+denotes that the packages have the same name for this function. For this
+simplest of examples, consider the reader macro alternative.</p>
+<p>``` commonlisp<br />
+#+(and slynk swank) (setf (symbol-function ’operator-arglist)</p>
+<p>slynk:operator-arglist)</p>
+<p>#+(and slynk (not swank)) (setf (symbol-function
+’operator-arglist)</p>
+<p>slynk:operator-arglist)</p>
+<p>#+(and (not slynk) swank) (setf (symbol-function
+’operator-arglist)</p>
+<p>swank:operator-arglist)</p>
+<p>#<br />
+```</p>
+<h3 id="complex-example">Complex example</h3>
+<p>``` commonlisp<br />
+(defsl gensymmer (macro-function macro-function)</p>
+<p>utils with-unique-names<br />
+alexandria with-gensyms)</p>
+<p>```</p>
+<p>To break this down:</p>
+<p>- <code>gensymmer</code> is now defined as
+<code>utils:with-unique-names</code>.<br />
+- <code>macro-function</code> was used twice: once as a
+<code>setfable</code> place, and</p>
+<p>once as a</p>
+<p>predicate.</p>
+<p>- If the <code>utils</code> package does not exist, then
+<code>sl::gensymmer</code> is</p>
+<p>defined as <code>alexanrdia:with-gensyms</code>.</p>
+<p>- to define different names for each package, they must be
+“qualified”</p>
+<p>with the package name.</p>
+<h2 id="install">Install</h2>
+<p>Use ASDF to install. Usually this should work:</p>
+<p><code>` bash</code><br />
+<code>$ cd ~/common-lisp/</code><br />
+<code>$ git clone git@github.com:equwal/sl.git</code><br />
+<code>CL-USER> (asdf:load-system :sl)</code><br />
+`</p>
+<h2 id="bnf">BNF</h2>
+<p>``` example<br />
+(defsl <sl-name> <fnsym> <package spec>)<br />
+<package spec> ::= <eq></p>
+<p>| <packages></p>
+<p><eq> ::= :eq <preferences><br />
+<fnsym> ::= :fn</p>
+<p>| :sym<br />
+| <fnpair></p>
+<p><fnpair> ::= (setfable-place bound-predicate)<br />
+<packages> ::= <package> <fn name> <more
+packages><br />
+<package> ::= symbol<br />
+<fn name> ::= symbol<br />
+<preferences> ::= <package> <more packages><br />
+<more packages> ::= ε</p>
+<p>| <package><br />
+| <package> <more packages></p>
+<p>```</p>
+<h2 id="issues">Issues:</h2>
+<p>- This is a new thing.<br />
+- <code>defsl</code> is quite possibly the world’s most unhygenic macro:
+don’t</p>
+<p>expect anything about evaluation order or number of evaluations
+to<br />
+be true.</p>
diff --git a/site/postdata/Start-emailing-your-patches-GUIDE.html b/site/postdata/Start-emailing-your-patches-GUIDE.html
new file mode 100644
index 0000000..d317fcd
--- /dev/null
+++ b/site/postdata/Start-emailing-your-patches-GUIDE.html
@@ -0,0 +1,107 @@
+<h2 id="why-we-need-this">Why we need this</h2>
+<p>Corporate git websites are bloat. All that work can be done from the
+command line with <code>git</code> or <code>patch</code> and a mail
+client like neomutt. Hell, it can be done without a client using
+sendmail.</p>
+<h2 id="why-this-is-better-for-projects">Why this is better for
+projects</h2>
+<p>By using a email and static content workflow, and making a mailing
+list, it is just a better deal for the community working on the program.
+Discussions can happen on the same mailing list server that patches are
+sent. How are discussions done on git(hub/lab/tea)? At least sourceforge
+had its own mailing lists.</p>
+<h2 id="how-to-send-a-patch">How to send a patch</h2>
+<p>I have some helper scripts. There are two ways:</p>
+<ul>
+<li><p><code>git format-patch</code> (my preferred method)</p></li>
+<li><p>the <code>patch</code> program is another option (more
+based)</p></li>
+<li><p>Have git just do it and send it with a script. Cross your
+fingers!</p></li>
+<li><p>Have git write to a file, then copy it on the command line and
+paste it in on the command line!</p></li>
+<li><p>Have a helper script that does more formatting and whitespace
+removal. Very good for picky mailing list hawks like when contributing
+to suckless.org or the linux kernel.</p></li>
+<li><p>Don’t hand-edit patches. It breaks them.</p></li>
+</ul>
+<h2 id="how-to-host-your-own-git-static-site-generator-not-gittea">How
+to host your own git static site generator (not Gittea)</h2>
+<p>Let’s not use Gittea. It is bloat. Self-hosting a whole corporate
+dynamic git website is madness. Let’s use
+<a href="https://codemadness.org/git/stagit/file/README.html" class="external-link">codemadness.org
+stagit</a>. There is even a gopher edition. All it does is make a simple
+site like the one linked there.</p>
+<h3 id="my-format-patch-scripts">my format-patch scripts</h3>
+<p>These use some dmenu scripts like y-or-n and prompt-mail so they will
+not be plug-and-play on your system. A good starting place though.</p>
+<p><code>format-patch</code><br />
+Doesn’t do anything special. Formats a patch and asks me if I want to
+send it up without looking for save it to a file.<br />
+If I save it to a file I will use that as the mail message.</p>
+<pre><code>#!/bin/sh
+# also see suckless-format-patch and friends
+[ -z "$1" ] && EMAIL="$(prompt-mail)"
+[ -n "$1" ] && EMAIL="$1"
+echo "Formatting a patch file..."
+TAG="$(git tag --points-at HEAD^)"
+TAGDIFF="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$(date +%Y%m%d)-$TAG.diff"
+fp () {
+ file="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$1.diff"
+ git format-patch \
+ --to "$EMAIL" \
+ --stdout HEAD^ \
+ > "$file" \
+ && echo "Wrote $file."
+}
+[ -n "$TAG" ] && fp "$TAG"
+[ -z "$TAG" ] && fp "$(date +%Y%m%d)-$(git rev-parse --short HEAD)"
+echo "Patch made."
+y-or-n "git-send-email it right now?" && git-send-email --to "$EMAIL" "$file" \
+ && y-or-n "delete patch file?" && rm "$file"</code></pre>
+<p><code>format-patch-suckless</code><br />
+I guess I got this from the suckless mailing list when I sent something
+without clang formatting.</p>
+<pre><code>#!/bin/sh
+[ -z "$1" ] && EMAIL="$(prompt-mail)"
+[ -n "$1" ] && EMAIL="$1"
+y-or-n "Clang format (for C)?" && clang-format -i *.h *.c && echo 'formatted'
+y-or-n "Stage that?" && git stage *.h *.c
+y-or-n "Amend it to commit silently?" && git cane
+TAG="$(git tag --points-at HEAD^)"
+TAGDIFF="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$(date +%Y%m%d)-$TAG.diff"
+fp () {
+ file="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$1.diff"
+ git format-patch \
+ --subject-prefix="${PWD##*/}][PATCH" \
+ --to "$EMAIL" \
+ --stdout HEAD^ \
+ > "$file" \
+ && echo "Wrote $file."
+}
+[ -n "$TAG" ] && fp "$TAG"
+[ -z "$TAG" ] && fp "$(date +%Y%m%d)-$(git rev-parse --short HEAD)"
+echo "Patch made."</code></pre>
+<p><code>format-patch-send</code><br />
+Beam it up without looking!</p>
+<pre><code>#!/bin/sh
+# also see suckless-format-patch and friends
+EMAIL=""
+[ -z "$1" ] && EMAIL="$(prompt-mail)"
+[ -n "$1" ] && EMAIL="$1"
+echo "Formatting a patch file..."
+TAG="$(git tag --points-at HEAD^)"
+TAGDIFF="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$(date +%Y%m%d)-$TAG.diff"
+fp () {
+ file="${PWD##*/}-$(sed 's:.*/::' .git/HEAD)-$1.diff"
+ git format-patch \
+ --to "$EMAIL" \
+ --stdout HEAD^ \
+ > "$file" \
+ && echo "Wrote $file."
+}
+[ -n "$TAG" ] && fp "$TAG"
+[ -z "$TAG" ] && fp "$(date +%Y%m%d)-$(git rev-parse --short HEAD)"
+echo "Patch made."
+git-send-email --to "$EMAIL" "$file"
+rm "$file"</code></pre>
diff --git a/site/postdata/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html b/site/postdata/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html
new file mode 100644
index 0000000..5a063b2
--- /dev/null
+++ b/site/postdata/Toplevel-Macros-in-Alexandria-Code-Revival-Project.html
@@ -0,0 +1,41 @@
+<p>[image /static/lisp-alu-blue.gif, class logo, alt “ALU lisp logo, CC
+attributed” ]</p>
+<p>After finding the old
+<a href="http://www.lispniks.com/cl-gardeners/" class="external-link">CL
+Gardeners’ site (now defunct)</a>, I thought I’d carry the torch this
+afternoon. They have four suggestions for “gardening” Common Lisp:</p>
+<ul>
+<li><p><strong>Consumer reports</strong>: Write a comparison of
+different libraries that do the same or similar things. Summarize the
+strengths and weaknesses of each. Include “under the hood” assessment;
+would I want to maintain this if the author got hit by a bus?</p></li>
+<li><p><strong>Code revival</strong>: Adopt an abandoned library and
+clean up the bit rot.</p></li>
+<li><p><strong>Code mining</strong>: Dig through existing open source
+code bases of large applications and extract bits that can be packaged
+as a useful stand-alone libraries.</p></li>
+<li><p><strong>Implementation convergence</strong>: Help bring various
+CL implementations into alignment where there’s no good reason for them
+to differ. This can be done by providing portability libraries or,
+better yet, by doing the decidedly non-trivial work of finding a common
+ground that different implementers can actually agree on and then doing
+whatever it takes to convince them to make the necessary changes to
+their implementation. (“Whatever it takes” in this case, likely includes
+patches, test suites, documentation, and civil, egoless, participation
+in relevant developer forums.)</p></li>
+</ul>
+<p>Browsing the site on the web archive (since they have been defunct
+for ten years), I
+<a href="http://wiki.alu.org/Code_mining_and_revival" class="external-link">found
+a todo item</a>.</p>
+<p>John Connors proposes to revivive the Port module from the
+<a href="http://clocc.sourceforge.net/dist/port.html" class="external-link">CLOCC</a>:
+it was a small module that provides portable acess to filesystems,
+threads and sockets.</p>
+<p>I was excited to see that two of the functions in
+<a href="https://recentlywritten.com/static/ext.lisp" class="external-link">ext.lisp</a> were
+already in my uitility library (as version spontaneously written by me),
+so clearly they deserved to be revived!</p>
+<p>Cleaned them up and
+<a href="https://gitlab.common-lisp.net/alexandria/alexandria/merge_requests/12" class="external-link">submitted
+to alexandria</a>.</p>
diff --git a/site/postdata/Turn-an-android-into-247-portable-polyglot-radio.html b/site/postdata/Turn-an-android-into-247-portable-polyglot-radio.html
new file mode 100644
index 0000000..052322e
--- /dev/null
+++ b/site/postdata/Turn-an-android-into-247-portable-polyglot-radio.html
@@ -0,0 +1,46 @@
+<figure>
+<img src="https://recentlywritten.com/static/automation-flows.webp" />
+<figcaption>
+Some automation done with a proprietary bloatware app.
+</figcaption>
+</figure>
+<p>It’s easier to do this on a proper linux machine, but the benefits of
+having this on your phone are pretty obvious (to me). For anyone
+desiring to speak more than two languages, it can become difficult to
+make sure to actually contact all of the languages frequently enough to
+make progress. While “All Japanese All The Time” (<a
+href="https://xm0.co">visit the mirrored site</a>) might work for
+someone only studying Japanese, it hardly works for someone studying
+more languages than that. Even “Khatzumoto”, who invented this religious
+cult, seems to have fallen flat in his attempts to learn other East
+Asian languages with his approach.</p>
+<p>Alexandre Arguilles knows a large number of languages, which he did
+by ruthlessly categorizing his time in 15 minute segments and reading
+for many hours a day, in many languages, for many years.</p>
+<p>I think a good middle place is to study a normal number of languages
+and “Get Gud.” About five, or so.</p>
+<p>Rather than 15 minute time segments and quickly switching between
+languages, I suggest “timeblocking” multi-hour segments. This allows
+deep concentration on books, or technical materials, which I think is a
+more productive <em>activity</em> in general than reading for a few
+minutes in one language and switch to another.</p>
+<p>By implementing this Polyglot Radio, we can know that at any time, if
+listening is a prudent activity, that the device will be ready to
+provide the scheduled content.</p>
+<p>The crux of the method is to check the time. Is it between times X
+and Y? Great, make sure to be playing the correct language material
+according to your calendar. The device needs to be loaded up with tons
+of content to randomly shuffle and be playing at any time, just like a
+radio station. Audiobooks, podcasts, and movie tracks with audio
+description, or condensed audio, are the best.</p>
+<p>The only app that I was able to get working was the “Automate” app,
+which unfortunately needs to be downloaded with a “premium” patch
+applied in order to work properly. The actual “flow” that I use is
+available <a href="https://recentlywritten.com/static/polyglotradio.txt">here</a>, and can be
+imported into the app as a template. It shuffles m3u playlists, assuming
+that they have no metadata (ie. made with this command):</p>
+<p><code>find . -type f >files.m3u</code></p>
+<p>and just randomly shuffles the lines. Android doesn’t have
+`shuf`.</p>
+<p>The script:</p>
+<p><code>cat "$1" | awk 'BEGIN{srand()}{printf "%06d %s\n", rand()*1000000, $0;}' | sort -n | cut -c8- >"$2"</code></p>
diff --git a/site/postdata/Unanglo-your-literacy-materials-and-your-life.html b/site/postdata/Unanglo-your-literacy-materials-and-your-life.html
new file mode 100644
index 0000000..4020dba
--- /dev/null
+++ b/site/postdata/Unanglo-your-literacy-materials-and-your-life.html
@@ -0,0 +1,81 @@
+<figure>
+<img src="https://recentlywritten.com/static/stalkercampfire.webp" />
+<figcaption>
+Russians hang out around the fire and debate in the film Сталкер
+</figcaption>
+</figure>
+<p>Anglo (read: culturally English) material has been in a siloed
+environment for 150 years, making the literature often times a bit
+strange and self-referential. Film has fared even worse, with Hollywood
+going completely off the deep end in the past decade.</p>
+<p>Should we stop reading books and watching films? That would be
+illiterate. This is not recommended. Films contain the level of
+vocabulary as serious literature, and are actually instructive to
+literacy (while TV shows usually lack such vocabulary, being more
+focused on simple colloquial dialogue).</p>
+<p>Here we have a multi-step process so the reader can de-anglo
+himself:</p>
+<h3 id="remove-anglo-content-delivery">Remove anglo content
+delivery</h3>
+<p>Streaming services, your local library, and advertising are all anglo
+content delivery when located in the anglosphere. These should be
+disabled. While these content delivery methods could in principle be
+used to de-anglo, they tend to be cleverly designed to curtail such
+uses. To de-anglo, acquire/download any content before consuming it.</p>
+<h3 id="remove-daily-anglo-interactions">Remove daily anglo
+interactions</h3>
+<p>Such daily anglo can come from watching television (don’t watch TV),
+viewing advertising (install an adblocker) or reading Anglo literature
+(read continental literature instead). Do not consume Hollywood film.
+De-anglo. If in a city in California, avoid local people entirely.</p>
+<h3
+id="discover-a-cultural-sphere-by-procuring-content-originally-in-a-specific-language-other-than-english">Discover
+a cultural sphere by procuring content originally in a specific language
+other than English</h3>
+<ul>
+<li>Some easier options from Europe are: Spanish, French, German,
+Swedish, Italian</li>
+<li>Some harder options are: Russian, Finnish, Czech, Persian (no
+copyright!)</li>
+<li>Some god-tier options are: Chinese, Korean, Japanese, Arabic
+(Egyptian)</li>
+<li>Truly archaelogical optins: Piraha, Kabyle, Zulu</li>
+</ul>
+<h3 id="access-the-culture-before-you-access-the-language">Access the
+culture before you access the language</h3>
+<p>Put the subtitles on, read a translation. The goal is to understand
+the way of thinking and cultural ideas, which will make the next step
+much easier. After all, the reason why one must de-anglo is to avoid
+toxic anglo ideology.</p>
+<h3 id="access-the-language-to-truly-unlock-the-culture">Access the
+language to truly unlock the culture</h3>
+<p>The final step is to start interacting with the materials directly in
+the language they are in. This will lead to difficulty understanding for
+a long time, but consistently leads to language acquisition and
+mastery.</p>
+<h3 id="actually-access-the-culture">Actually access the culture</h3>
+<p>The final step is to interact with real humans who live and breathe
+this cultural sphere which took so long to come to an understanding of.
+The anglo’s soul is only truly cleansed when present, incognito, in the
+cultural environment, “just like it was in English”.</p>
+<h3 id="maintain-the-anglo-to-deanglo-the-anglo">Maintain the anglo to
+deanglo the anglo</h3>
+<p>It’s important to still read in English in order to retain a high
+level of literacy. High literacy can be lost in any language, even a
+native one. Remember, the solution is not to be illiterate in order to
+de-anglo, it is to re-home with a saner cultural choice. This is why
+american prison blacks often famously convert to Islam while
+incarcerated.</p>
+<figure class="imgcaptioned">
+<img src="https://recentlywritten.com/static/unnazitheworld.jpg" alt="Idiocracy ending history lesson." />
+<figcaption>
+The UN UN-angloed the world.
+</figcaption>
+</figure>
+<h3 id="further-reading">Further Reading</h3>
+<p>Check out the AJATT website for a method to truly deanglo: <a
+href="https://xm0.co/">xm0.co mirror</a></p>
+<p>The re-homed anglo is in a unique position to have a deep enough
+understanding of his native language to translate important materials
+from his new language into the anglo, thus making a small dent in
+de-angloing the anglo. This is recommended.</p>
diff --git a/site/postdata/Using-an-init-system-for-many-instances-of-simple-programs.html b/site/postdata/Using-an-init-system-for-many-instances-of-simple-programs.html
new file mode 100644
index 0000000..74135b5
--- /dev/null
+++ b/site/postdata/Using-an-init-system-for-many-instances-of-simple-programs.html
@@ -0,0 +1,86 @@
+<p><a href="https://github.com/equwal/tiny-runlevels" class="external-link">mirrored
+on github for convenience here</a></p>
+<p>Using OpenRC runlevels to have lots of instances of simple (network)
+programs like quark for multiple http serving locally or
+<a href="https://tools.suckless.org/ii/" class="external-link">ii</a>
+(or
+<a href="https://tools.suckless.org/sic/" class="external-link">sic</a>)
+for IRC server connections.</p>
+<p>To keep programs simple, they should not do the same process for
+unrelated uses. It is much more complicated to configure and manage
+multiple webservers in the same process (like how nginx does it) than
+just one. Init systems are designed to manage processes, and should be
+used instead. Do one thing etc. etc.</p>
+<p>This is how to use the OpenRC runlevels for quark and ii runlevels as
+examples.</p>
+<h3 id="the-tree-on-my-machine">The Tree (on my machine)</h3>
+<pre><code>/etc/runlevels
+├── boot
+│ └── ...
+├── default
+│ └── ...
+├── irc-base
+│ ├── oftc -> /etc/init.d/oftc
+│ ├── liberachat -> /etc/init.d/liberachat
+│ └── ...
+├── net-base
+│ ├── default -> ../default
+│ └── quark -> ../quark
+├── net-offline
+│ ├── default -> ../default
+│ └── net-base -> ../net-base
+├── net-dns
+│ ├── dnscrypt-proxy -> /etc/init.d/dnscrypt-proxy
+│ └── unbound -> /etc/init.d/unbound
+├── net-wifi
+│ ├── dhcpcd -> /etc/init.d/dhcpcd
+│ ├── net-base -> /etc/runlevels/net-base
+│ ├── net-dns -> /etc/runlevels/net-dns
+│ └── wpa_supplicant -> /etc/init.d/wpa_supplicant
+├── net-wifi-irc
+│ ├── irc-base -> ../irc-base
+│ └── net-wifi -> ../net-wifi
+├── quark
+│ ├── quark-docs -> /etc/init.d/quark-docs
+│ ├── quark-equwal -> /etc/init.d/quark-equwal
+│ └── ...
+├── shutdown
+│ └── ...
+└── sysinit
+ └── ...</code></pre>
+<p>as you can see, IRC is connected after the real internet on wifi
+(net-wifi), but quark runs on any network runlevel using net-base.</p>
+<h3 id="how-to">How To:</h3>
+<p>OpenRC has its own commands for making the runlevels, but I find them
+confusing. Let’s just edit the files.</p>
+<pre><code># make runlevel
+mkdir /etc/runlevels/quark
+# add services (as many as needed)
+ln -s /etc/int.d/quark-whatever /etc/runlevels/quark
+# add runlevel to parent
+ln -s /etc/runlevels/default /etc/runlevels/quark
+# Reload since openrc is in default
+openrc default</code></pre>
+<p>That works, but what about for networked IRC on a custom networking
+runlevel? Just add it to the networking runlevel.</p>
+<pre><code># (first, make a network runlevel that contains default! Without default the system will crash, obviously.)
+mkdir /etc/runlevels/net-wifi
+ln -s /etc/runlevels/net-wifi /etc/runlevels/default
+ln -s /etc/init.d/wpa_supplicant /etc/runlevels/net-wifi
+# etc.
+# Now add the irc-base to the network runlevel
+mkdir /etc/runlevels/irc-base
+ln -s /etc/init.d/liberachat irc-base
+ln -s /etc/init.d/oftc irc-base
+ln -s /etc/runlevels/irc-base /etc/runlevels/net-wifi
+openrc net-wifi</code></pre>
+<h3 id="tool-restart-runlevel">Tool: restart-runlevel</h3>
+<p>Openrc wants switch the whole stack <code>openrc runlevel</code> so I
+made a little tool to just restart a specific runlevel. Nice for
+debugging.</p>
+<pre><code>#!/bin/bash
+
+for link in /etc/runlevels/${1}/*
+do [[ -L "$link" && "$(readlink "$link")" == /etc/init.d/* ]] && \
+ rc-service "$(basename "$link")" restart
+done</code></pre>
diff --git a/site/postdata/Why-YOU-need-NixOS-on-your-desktop-and-servers.html b/site/postdata/Why-YOU-need-NixOS-on-your-desktop-and-servers.html
new file mode 100644
index 0000000..f8897eb
--- /dev/null
+++ b/site/postdata/Why-YOU-need-NixOS-on-your-desktop-and-servers.html
@@ -0,0 +1,42 @@
+<h2 id="why">Why?</h2>
+<p>To stop working on your computer and start working with your
+computer.</p>
+<p><a href="https://nixos.org/" class="uri">https://nixos.org/</a></p>
+<p>NixOS has:</p>
+<ul>
+<li><p>Declarative linux builds</p></li>
+<li><p>Declarative package installs (package manager can be installed on
+any</p></li>
+</ul>
+<p>linux too <a href="https://github.com/NixOS/nix)"
+class="uri">https://github.com/NixOS/nix)</a></p>
+<ul>
+<li><p>Tools to deploy to servers (deploy-rs <a
+href="https://serokell.io/blog/deploy-rs)"
+class="uri">https://serokell.io/blog/deploy-rs)</a></p></li>
+<li><p>Terraform to have a declarative and <strong>shareable</strong>
+deployment of cloud infrastructrure (terraform <a
+href="https://nix.dev/tutorials/nixos/deploying-nixos-using-terraform.html)"
+class="uri">https://nix.dev/tutorials/nixos/deploying-nixos-using-terraform.html)</a></p></li>
+<li><p>Automated declarative partitioning with disco (<a
+href="https://nixos.wiki/wiki/Disko)"
+class="uri">https://nixos.wiki/wiki/Disko)</a></p></li>
+<li><p>A tool to bootstrap NixOS from any linux and replace it on a
+server (nixos-anywhere <a
+href="https://github.com/nix-community/nixos-anywhere)"
+class="uri">https://github.com/nix-community/nixos-anywhere)</a></p></li>
+<li><p>The above tools can also be used on a USB stick to make an
+instantly</p></li>
+</ul>
+<p>deployable desktop. If you setup a good NixOS</p>
+<p>desktop, it is not a special root directory that a lot of work went
+into. It is a few files which DEPLOY into the<br />
+full-fledged thing. A good NixOS config can even delete the entire<br />
+root directory on shutdown.</p>
+<h2 id="is-gentoo-not-good-enough">Is Gentoo not good enough</h2>
+<p>Gentoo makes for a great minimal system. Not a great bloatware
+system.</p>
+<h2 id="downsides">Downsides</h2>
+<p>Installing your own software or packages not in the repo is extra
+annoying. All software developers on nix are also<br />
+package maintainers.</p>
diff --git a/site/postdata/WhyHow-to-host-a-bunch-of-crap-locally.html b/site/postdata/WhyHow-to-host-a-bunch-of-crap-locally.html
new file mode 100644
index 0000000..660b3f1
--- /dev/null
+++ b/site/postdata/WhyHow-to-host-a-bunch-of-crap-locally.html
@@ -0,0 +1,71 @@
+<h2 id="whyhow-to-host-a-bunch-of-crap-locally">Why/How to host a bunch
+of crap locally</h2>
+<p>For your hackerman code documentation of course. Have a local
+homepage that shows all your locally hosted material to browse.
+Instantly lookup whatever your need.</p>
+<h3
+id="step-1-start-making-mirrors-with-httrack-and-downloading-documentation">Step
+1: start making mirrors with httrack and downloading documentation</h3>
+<p>If you use Lisp, download the Hyperspec. Python’s documentation can
+be downloaded easily too. etc. For sites that don’t offer a download,
+use httrack to mirror them.</p>
+<h4 id="an-example-httrack-command">An example httrack command</h4>
+<pre><code>httrack --disable-security-limits -d -w -x -c4 --fast-engine -A2000 --max-rate 0 --continue --near -v '-%e0' -'#L9999999' 'https://tatsumoto.neocities.org/' '+*tatsumoto.neocities.org/*' "$@"</code></pre>
+<h3 id="elite-hackerman-hint">Elite hackerman hint</h3>
+<p>Setup your editor (Emacs) to allow you to instantly lookup any
+keyword from the documentation using CTAGS, the same way they can be
+used to jump to a function definition etc. The common lisp Hyperspec
+works beautifully for this purpose, and SLIME has a built-in command for
+it.</p>
+<h3 id="generating-your-index-dashboard-homepage">Generating your index
+dashboard homepage</h3>
+<p>We will use HTTrack’s index feature to quickly index all of our sites
+and generate a page. The above image is of that page as generated by
+this script. Just add your folder names to the INDICES.</p>
+<pre><code>#!/bin/sh
+# uses GNU sed -i for the optional cheap hack
+INDICES="
+<your subfolders>
+tatsumoto.neocities.org-guide
+"
+
+chdir /var/www/localdocs
+IFS="
+"
+rm index.html
+echo "$INDICES" | sed 's/^/http:\/\/localhost\//' | xargs httrack --update -r1 -%i
+
+# KLUDGE/BUGFIX: something wrong with the AJATT mirror one
+cp AJATT/index.html localhost/AJATT/index.html
+
+# hack to add a site that is hosted on a separate HTTP server
+sed -i 's^<TABLE BORDER="0" WIDTH="100%" CELLSPACING="1" CELLPADDING="0">^<TABLE BORDER="0" WIDTH="100%" CELLSPACING="1" CELLPADDING="0"><TR> <TD BACKGROUND="fade.gif"><A HREF="localhost:8002/index.html"> DoR romanian podcast (local transcripts) </A> </TD> </TR> '^ index.html
+
+echo "HINT: Add the new site(s) to INDICES."
+echo "HINT: add <title> tags to them so you can read the index."
+TMP="$(mktemp)"
+cat index.html >"$TMP"
+cat "$TMP" | sed 's/\([^"]\)localhost\//\1/' >index.html
+rm "$TMP"
+
+#!/bin/sh
+# args: URL [HTTRACK arguments]
+url="$1"
+shift # removes first arg for ordering
+httrack-command "$url" --update "$@"</code></pre>
+<h3 id="updating-some-mirrors">Updating some mirrors</h3>
+<p>For content you want to keep in sync, here is ascript which can be
+run in cron, for example.</p>
+<h3 id="hosting-an-actual-webserver">Hosting an actual webserver</h3>
+<p>Sometimes the “Browse files” ability of your browser doesn’t quite
+nail it, so you might want to install quark (check out <a
+href="https://frign.de" class="uri">https://frign.de</a> ), a very
+minimal web server, and just run it all the time on that folder.</p>
+<h4 id="fixing-the-links-to-work-on-your-domain">Fixing the links to
+work on your domain</h4>
+<p>If you want to be able to click links and have them actually direct
+you within your subdomain, this sed command will replace all the links
+so long as you have the GNU sed with the `-i` extension.</p>
+<pre><code>sed -i 's^oldwebsite.com^localhost:8000 (or whatever)^' *</code></pre>
+<h3 id="future-work">Future work</h3>
+<p>Indexing/searching?</p>
diff --git a/site/postdata/aintitinit-Claude-INITIALIZER.html b/site/postdata/aintitinit-Claude-INITIALIZER.html
new file mode 100644
index 0000000..2188496
--- /dev/null
+++ b/site/postdata/aintitinit-Claude-INITIALIZER.html
@@ -0,0 +1,40 @@
+<p><a href="https://github.com/HACKERMEN-ORG/aintitinit" class="external-link">git
+hub website repo</a></p>
+<h2 id="claude-initializer">Claude INITIALIZER</h2>
+<p>INITIALIZES a new git project in the directory if there isn’t one
+already,<br />
+various files for claude in the directory to vibe code really
+hard,<br />
+and hacks git to not track them.</p>
+<p>The bare minimum necessary of course.</p>
+<figure>
+<a href="https://recentlywritten.com/static/gifmatrix.gif" target="_blank"><img src="https://recentlywritten.com/static/gifmatrix.gif" style="display:block;" alt="gifmatrix.gif" /></a>
+</figure>
+<h3 id="claude.md">CLAUDE.md</h3>
+<p>This is the prompt claude will use in your project. Includes the
+prompt<br />
+I had it generate, you can put anything you want in here.</p>
+<h3 id="exclude-file">exclude (file)</h3>
+<p>Appends this to the git exclusions to not track the claude-related
+files</p>
+<h3 id="mcp.json">.mcp.json</h3>
+<p>The mcp servers you will use. There are a million already added by
+the AI if you want to just use it as-ise.</p>
+<h3 id="llms-full.txt">llms-full.txt</h3>
+<p>Tells claude about the LLMs in
+.mcp.jsonquire”cmp.utils.feedkeys”.run(2)<br />
+,</p>
+<h3 id="regular-use">regular use</h3>
+<pre><code>claude-init ; claude init</code></pre>
+<h3 id="alias">alias</h3>
+<p><code>ci</code> claude init.<br />
+<code>cli</code> try to continue, otherwise initialize in the
+directory.</p>
+<pre><code>alias ci='claude-init ; claude init'
+alias cli='f(){ mkdir -p "$1" ; cd ${1:-.} ; claude-init ; claude init }; claude --continue || f'</code></pre>
+<h3 id="todo">TODO</h3>
+<ul>
+<li>Automatically remove whitespace and base64 encode the CLAUDE.md
+from</li>
+</ul>
+<p>the readable version to save tokens.</p>
diff --git a/site/postdata/dmenu-scripts-repo-released.html b/site/postdata/dmenu-scripts-repo-released.html
new file mode 100644
index 0000000..f3c7f40
--- /dev/null
+++ b/site/postdata/dmenu-scripts-repo-released.html
@@ -0,0 +1,101 @@
+<h2 id="my-dmenu-scripts-click-here-for-the-git-repo">My dmenu scripts
+<a href="https://github.com/equwal/dmenu-scripts" class="external-link">(click
+here for the git repo)</a></h2>
+<p><a href="https://tools.suckless.org/dmenu/" class="external-link">dmenu</a>
+is a simple program with a pretty selection window for X. These are my
+scripts for doing things with that.</p>
+<h2 id="scripts">Scripts</h2>
+<ul>
+<li><p><code>dbc</code>
+<a href="https://recentlywritten.com/static/dbc" class="external-link">(file)</a>: do
+<code>bc -l</code> on the input so you can do math</p></li>
+<li><p><code>dbrowsel</code>
+<a href="https://recentlywritten.com/static/dbrowsel" class="external-link">(file)</a>: select a
+browser for the link in the clipboard to open</p></li>
+<li><p><code>dcpupower</code>
+<a href="https://recentlywritten.com/static/dcpupower" class="external-link">(file)</a>: select CPU
+throttling settings</p></li>
+<li><p><code>dkeymap</code>
+<a href="https://recentlywritten.com/static/dkeymap" class="external-link">(file)</a>: select a
+keymap</p></li>
+<li><p><code>dintelbacklight</code><a href="https://recentlywritten.com/static/dintelbacklight" class="external-link">(file)</a>:
+select backlight with dmenu or wjt (a scroll wheel)</p></li>
+<li><p><code>ddmenu</code>
+<a href="https://recentlywritten.com/static/ddmenu" class="external-link">(file)</a>: use dmenu to
+select a dmenu script – dception</p></li>
+<li><p><code>dmenu_run/dsudo</code>
+<a href="https://recentlywritten.com/static/dmenu_run" class="external-link">(dmenurun)</a><br />
+<a href="https://recentlywritten.com/static/dsudo" class="external-link">(dsudo)</a>: run programs,
+maybe from a keybind set with xbindkeys or a wm</p></li>
+<li><p><code>dshow</code>
+<a href="https://recentlywritten.com/static/dshow" class="external-link">(file)</a>: run a command
+and show output without having to open a terminal</p></li>
+<li><p><code>dsysact</code>
+<a href="https://recentlywritten.com/static/dsysact" class="external-link">(file)</a>:
+reboot/shutdown/etc.</p></li>
+<li><p><code>passmenu</code>
+<a href="https://recentlywritten.com/static/passmenu" class="external-link">(file)</a>: unix
+<a href="https://www.passwordstore.org/" class="external-link">pass</a>
+interface</p></li>
+<li><p><code>passmenu-otp</code>
+<a href="https://recentlywritten.com/static/passmenu-otp" class="external-link">(file)</a>: like
+passmenu but copies the OTP code to clipboard.</p></li>
+<li><p><code>y-or-n</code>
+<a href="https://recentlywritten.com/static/y-or-n" class="external-link">(file)</a>: ask if yes or
+no</p></li>
+</ul>
+<!-- -->
+<ul>
+<li><p><code>dmenupass</code><a href="https://recentlywritten.com/static/dmenupass" class="external-link">(file)</a>:
+ask for the sudo password as SUDO_ASKPASS</p></li>
+<li><p><code>dmount/dunmount</code><a href="https://recentlywritten.com/static/dmount" class="external-link">(dmount)</a><br />
+<a href="https://recentlywritten.com/static/dunmount" class="external-link">(dunmount)</a>:
+mount/unmount drives</p></li>
+<li><p><code>dopenrc-runlevel</code><a href="https://recentlywritten.com/static/dopenrc-runlevel" class="external-link">(file)</a>:
+choose openrc runlevels for various advanced tasks like
+networking</p></li>
+<li><p><code>drssadd</code><a href="https://recentlywritten.com/static/drssadd" class="external-link">(file)</a>:
+add RSS links to the newsboat config from clipboad</p></li>
+<li><p><code>dtimer</code><a href="https://recentlywritten.com/static/dtimer" class="external-link">(file)</a>:
+a coffee timer. Check out
+<a href="https://www.uninformativ.de/git/countty/file/README.html" class="external-link">uniformativ.de</a>’s
+countty for a non-dmenu one.</p></li>
+<li><p><code>dtmpl</code><a href="https://recentlywritten.com/static/dtmpl" class="external-link">(file)</a>:
+copy template files from a directory into the clipboard</p></li>
+</ul>
+<h3 id="submodules-with-even-more-scripts">Submodules with even more
+scripts</h3>
+<ul>
+<li><p><a href="https://github.com/equwal/dmodurl" class="external-link">dmodurl</a>:
+change a URL in the clipboard according to sed rules</p></li>
+<li><p><a href="https://github.com/equwal/dpatchmail" class="external-link">dpatchmail</a>:
+do (code) patches with dmenu</p></li>
+<li><p><a href="https://github.com/equwal/dsad" class="external-link">dsad</a>:
+manage background audio with Simple Audio Daemon</p></li>
+<li><p><a href="https://github.com/equwal/prompt-mail" class="external-link">prompt-mail</a>:
+manage your email contacts list (neomutt compatible)</p></li>
+<li><p><a href="https://github.com/equwal/sbm" class="external-link">sbm</a>:
+manage your bookmarks list</p></li>
+<li><p><a href="https://github.com/equwal/tnot" class="external-link">tnot</a>:
+like tmux but not (using
+<a href="https://github.com/deadpixi/mtm" class="external-link">mtm</a>
+and
+<a href="https://www.brain-dump.org/projects/abduco/" class="external-link">abduco</a>)</p></li>
+</ul>
+<h3 id="quick-hack-for-dmenu-with-sudo">Quick hack for dmenu with
+sudo</h3>
+<p>You <em>could</em> do:<br />
+<code>`</code><br />
+<code>alias program='SUDO_ASKPASS=dgivepass sudo -A program'</code><br />
+`</p>
+<p>but it won’t come up in dmenu_run. So move `program` to `program-aux`
+and make a new script at program:<br />
+<code>`</code><br />
+<code>#!/bin/sh</code><br />
+<code>SUDO_ASKPASS=dgivepass sudo -A program</code><br />
+`</p>
+<h3 id="utilities">Utilities</h3>
+<ul>
+<li><code>intel-backlight</code>: uninformativ.de’s intel-backlight
+script</li>
+</ul>
diff --git a/site/postdata/iilchat-setup-too-easy.html b/site/postdata/iilchat-setup-too-easy.html
new file mode 100644
index 0000000..2dc27f4
--- /dev/null
+++ b/site/postdata/iilchat-setup-too-easy.html
@@ -0,0 +1,99 @@
+<p>Look at how beautiful IRC can be(?)</p>
+<figure>
+<a href="https://recentlywritten.com/static/ircchat.webp" target="_blank"><img src="https://recentlywritten.com/static/ircchat.webp" style="display:block;" alt="/static/ircchat.webp" /></a>
+</figure>
+<h2 id="a-suckless-irc-package">A suckless IRC package</h2>
+<p>Get
+<a href="https://tools.suckless.org/ii/" class="external-link">ii</a>
+and
+<a href="https://tools.suckless.org/lchat/" class="external-link">lchat</a>
+running on your machine<br />
+together. This is the guide. For up-to-date code and improvements go to
+the git repo. <a href="https://github.com/equwal/ii-lchat-metapackage"
+class="uri">https://github.com/equwal/ii-lchat-metapackage</a></p>
+<h2 id="install">INSTALL</h2>
+<ul>
+<li><p>Go install ii with the SSL patch added. This will run as a local
+server that makes files named in and out for lchat to use.</p></li>
+<li><p>Go install lchat. It uses the suckless library grapheme that you
+will need to install and link up.</p></li>
+<li><p>Go to services and edit/install the file. You will need to
+register with nickserv on liberachat. Install it on your machine. If you
+are using a service that isn’t in there, or you find it doesn’t work,
+please contribute.</p></li>
+</ul>
+<p>Copy irc-connect and lchat-connect to your path. Modify as
+needed.</p>
+<p>Make aliases for lchat-connect.</p>
+<pre><code># example
+alias lispirc='/home/jose/src/sh/lchat-connect "$HOME/irc" "irc.libera.chat" "#lisp"'</code></pre>
+<h2 id="irc-connect">irc-connect</h2>
+<pre><code>#!/bin/sh
+
+TIMEOUT=10
+CHANNELSWAIT=1
+
+# IRC client connector script
+# Usage: irc-connect <server> <nick> <pass> <dir> [channel1] [channel2] ...
+
+SERVER="$1"
+NICK="$2"
+PASS="$3"
+DIR="$4"
+shift 4
+
+ii -s "$SERVER" -n "$NICK" -i "$DIR" -e &
+II_PID=$!
+sleep "$TIMEOUT"
+echo "IDENTIFY $NICK $PASS" >"$DIR"/"$SERVER"/nickerv/in
+sleep $CHANNELSWAIT
+
+# Join all provided channels
+for channel in "$@"; do
+ echo "/j $channel" >"$DIR"/"$SERVER"/in
+ sleep "$CHANNELSWAIT"
+done
+
+wait $II_PID</code></pre>
+<h2 id="lchat-connect">lchat-connect</h2>
+<pre><code>#!/bin/sh
+
+# lchat connector script
+# Usage: lchat-connect <dir> <server> <channel>
+
+DIR="$1"
+SERVER="$2"
+CHANNEL="$3"
+
+lchat -a "$DIR"/"$SERVER"/"$CHANNEL"</code></pre>
+<h2 id="openrc-service-for-liberachat">openRC service for
+liberachat</h2>
+<pre><code>#!/sbin/openrc-run
+
+name="lispirc"
+description="IRC client for #lisp on irc.libera.chat"
+
+command="/home/jose/src/sh/irc-connect"
+command_args="(irc.libera.chat) <YOUR NICKSERV IDENT> <YOUR NICKSERV PASSWORD> <IRC FILES PATH> CHANNELS CHANNELS CHANNELS (eg. \#lisp)"
+command_user="<USER>"
+pidfile="/run/${RC_SVCNAME}.pid"
+command_background="yes"
+
+depend() {
+ need net
+ after logger
+}
+
+stop() {
+ local pid=$(cat "$pidfile")
+ ebegin "Stopping $name"
+ kill "$pid" 2>/dev/null
+ rm -f "$pidfile"
+ eend $?
+}</code></pre>
+<h3 id="todo">TODO</h3>
+<ul>
+<li><p>SSL using socat or some other external program</p></li>
+<li><p>ii on your VPS for bouncing</p></li>
+<li><p>other init systems</p></li>
+</ul>
diff --git a/site/postdata/index.tsv b/site/postdata/index.tsv
new file mode 100644
index 0000000..c2d97c3
--- /dev/null
+++ b/site/postdata/index.tsv
@@ -0,0 +1,53 @@
+2026-09-22 subread projects SubRead
+2026-09-22 sbm-sync projects sbm Sync
+2026-09-22 rebind projects Rebind
+2026-05-12 lisprant Lisp Rant
+2025-09-09 aintitinit-Claude-INITIALIZER articles aintitinit: Claude INITIALIZER
+2025-09-08 Hackermen-neomutt-config articles Hackermen neomutt config
+2025-09-08 REPL-Driven-Development-as-an-analogy-for-proper-AI-Driven-Development articles REPL Driven Development as an analogy for proper AI Driven Development
+2025-09-07 Minimal-nvim-config-optional-AI-slop-enjoy articles Minimal nvim config optional AI slop (enjoy!)
+2025-09-07 Using-an-init-system-for-many-instances-of-simple-programs articles Using an init system for many instances of simple programs
+2025-09-06 Mailing-list-in-one-line articles "Mailing list" in one line
+2025-09-06 Dont-use-make-uninstall articles Don't use make (un)install
+2025-09-06 tmpl-insanely-simple-templates articles tmpl: insanely simple templates
+2025-09-05 tag-gen articles tag-gen
+2025-09-04 Nixtoo-Genux-released articles Nixtoo Genux™ released
+2025-11-13 Install-Nix-on-Gentoo articles Install Nix on Gentoo
+2025-09-03 POSIX-pipes-for-Lisp projects POSIX pipes for Lisp
+2025-09-11 Add-my-RSS-feed-to-your-feed-reader articles Add my RSS feed to your feed reader
+2025-09-01 dmenu-scripts-repo-released articles dmenu scripts repo released
+2025-09-11 install-9front articles install 9front
+2025-09-11 A-new-way-to-release-code articles A new way to release code
+2025-09-11 Hey-kids-want-to-learn-the-unix-way articles Hey kids, want to learn the unix way
+2025-09-11 Why-YOU-need-NixOS-on-your-desktop-and-servers articles Why YOU need NixOS on your desktop and servers
+2025-09-11 Git-extra-worktrees-ROCK articles Git extra worktrees ROCK
+2025-09-11 Start-emailing-your-patches-GUIDE articles Start emailing your patches GUIDE
+2025-11-13 Generate-your-OWN-internet-web-site-easily articles Generate your OWN internet web site easily
+2025-08-30 iilchat-setup-too-easy articles ii/lchat setup (too easy)
+2025-09-11 Get-on-mailing-lists-like-it-is-1989 articles Get on mailing lists like it is 1989
+2025-09-11 Polyglot-Podcast-Now-Goes-on-The-YouTubecom-Website articles Polyglot Podcast Now Goes on The YouTube.com Website
+2025-09-11 New-podcast-about-polyglot-language-learning-LISTEN-NOW articles New podcast about polyglot language learning (LISTEN NOW!)
+2025-08-09 New-book-coming-soon-about-language-learning-for-multiple-languages-PREORDER-NOW articles New book coming soon about language learning (for multiple languages)! PREORDER NOW!
+2025-08-08 Polyglot-Radio-is-Dead-Long-Live-The-Queue-Antennapod-shill-post articles Polyglot Radio is Dead: Long Live The Queue (Antennapod shill post)
+2025-09-06 How-to-Learn-a-Language-According-to-The-Internet articles How to Learn a Language According to The Internet
+2025-08-09 3000-Vocab-Flashcards-3k-Final-Solution articles 3000 Vocab Flashcards (3k Final Solution)
+2024-05-21 AJATT-All-Japanese-All-The-Time-Mirror-at-xm0co articles AJATT (All Japanese All The Time Mirror) at xm0.co
+2024-05-21 Fish-Based-Navigation articles Fish-Based Navigation
+2024-05-21 install-gentoo-hints articles install gentoo hints
+2024-05-21 Install-Anki articles Install Anki
+2024-05-21 Learn-Kanji-in-a-Fortnight articles Learn Kanji in a Fortnight
+2024-05-21 Turn-an-android-into-247-portable-polyglot-radio articles Turn an android into 24/7 portable polyglot radio
+2024-05-21 Unanglo-your-literacy-materials-and-your-life articles Unanglo your literacy materials (and your life)
+2024-05-21 Dont-Self-Host-Self-Locally articles Don't Self-Host: Self-Locally
+2024-05-21 WhyHow-to-host-a-bunch-of-crap-locally articles Why/How to host a bunch of crap locally
+2024-05-21 How-to-take-notes-not-self-help-advice articles How to take notes: not self-help advice
+2024-05-21 How-to-manage-100000-digital-books-in-15-languages articles How to manage 100,000 digital books in 15 languages
+2024-05-21 How-Japanese-Aquire-Books articles How Japanese Aquire Books
+2023-09-22 sbm projects sbm
+2019-04-28 Newport projects Newport
+2019-07-02 SL--Dependency-Language articles SL--Dependency Language
+2019-06-22 Forthe Forthe
+2019-04-29 Toplevel-Macros-in-Alexandria-Code-Revival-Project articles Toplevel Macros in Alexandria: Code Revival Project
+2019-01-07 CSV projects CSV
+2018-12-29 How-to-Beat-Emacs-M-x-dunnet-in-5-minutes articles How to Beat Emacs M-x dunnet in 5 minutes.
+2018-11-26 Brazil articles Brazil
diff --git a/site/postdata/install-9front.html b/site/postdata/install-9front.html
new file mode 100644
index 0000000..a110b9f
--- /dev/null
+++ b/site/postdata/install-9front.html
@@ -0,0 +1,15 @@
+<p><a href="https://9fans.github.io/plan9port/" class="external-link">Plan9port</a>
+is nice for running commands like `9 ls` which gives a coherent
+interface for scripting. But we can go deeper. Let’s install plan9.</p>
+<p>Qemu install is brain dead. It takes longer to download the 92Mb file
+from their walmart connection server than it takes to run the
+commands.</p>
+<figure>
+<a href="https://recentlywritten.com/static/plan9qemu.webp" target="_blank"><img src="https://recentlywritten.com/static/plan9qemu.webp" style="display:block;" alt="plan9qemu.webp" /></a>
+</figure>
+<p><a href="https://plan9.io/wiki/plan9/installing_plan_9_on_qemu/index.html" class="external-link">qemu
+instructions</a></p>
+<p>9front is a fork of the plan9 that “nobody works on”</p>
+<p>Continue instructions here for 9front.</p>
+<p><a href="https://fqa.9front.org/fqa4.html"
+class="uri">https://fqa.9front.org/fqa4.html</a></p>
diff --git a/site/postdata/install-gentoo-hints.html b/site/postdata/install-gentoo-hints.html
new file mode 100644
index 0000000..19fbb91
--- /dev/null
+++ b/site/postdata/install-gentoo-hints.html
@@ -0,0 +1,31 @@
+<p>To install gentoo, we must RTFM. Here is the FM: <a
+href="https://wiki.gentoo.org/wiki/Handbook:AMD64"
+class="uri">https://wiki.gentoo.org/wiki/Handbook:AMD64</a></p>
+<p>Set your <code>-march=</code> to the oldest architechture you might
+use, and your <code>-mtune=</code> to the fanciest architecture you
+might use. Also, <code>-O2 and -pipe</code>. Eg., if we want a Gentoo to
+work on a based Thinkpad and on a fancy gamerboy machine:</p>
+<pre><code>CFLAGS="-march=core2 -mtune=skylake -O2 -pipe
+CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 sse4_1 ssse3" # common flags between core2 and skylake</code></pre>
+<p><code>MAKEOPTS="-j2 -l2"</code> is great for a two-core machine. But
+what if we want 8 threads when on an 8-core machine? I present the
+script, <code>wrap-8-core-kludge</code>.</p>
+<pre><code>#!/bin/sh
+sed -i 's/-j[0-9] -l[0-9]/-j8 -l8/' /etc/portage/make.conf
+sed -i 's/--jobs=[0-9] --load-average=[0-9]/--jobs=8 --load-average=8/' /etc/portage/make.conf
+
+"$@"
+
+sed -i 's/-j8 -l8/-j2 -l2/' /etc/portage/make.conf
+sed -i 's/--jobs=[0-9] --load-average=[0-9]/--jobs=2 --load-average=2/' /etc/portage/make.conf</code></pre>
+<p>Call it with <code>wrap-8-core-kludge emerge --ask vim</code> when on
+the fancy machine.</p>
+<p>Don’t fuck up your profile: choose the latest hardened multilib.
+Don’t switch!</p>
+<p>Use the Zen kernel (it’s the kernel config intended for
+desktops).</p>
+<p>Don’t build modules into your kernel, which is annoying, edit
+<code>/etc/conf.d</code> with the modules you need instead. This is no
+different than how it is normally done in other distros.</p>
+<p>Fancy GPU owners: watch out for NVIDIA. Consider using nouveau if the
+nvidia drives don’t work and crash your Xorg for example.</p>
diff --git a/site/postdata/lisprant.html b/site/postdata/lisprant.html
new file mode 100644
index 0000000..4b473d3
--- /dev/null
+++ b/site/postdata/lisprant.html
@@ -0,0 +1,19 @@
+<p>Read doug hoyte then come back and tell me static typing is better
+ecl is good for live servers (eg. “web”) for obvious reasons every
+person who “uses lisp at work” refuses to share details so I know that
+lisp in production does not exist and they are larping solving the
+problem with a well-fitted language and modifying the (lisp) compiler
+mogs leet coders because of Kolomogorov complexity (see Graham’s stuff)
+props to style_warning for making his username a lisp shibboleth Before
+vibecoding I knew plenty of stack overflow copy-pasters etc. Before
+vibecode it was still the case that your average interviewee could not
+solve a basic coding question. Reading a programming book and doing some
+of the exercises will take you farther than l33tcode bullshit ever will.
+You can also be vaccinated against AI retardation. Also before vibecode
+I started to notice that 99% of the time I could solve problems with
+unix-philosophy tools and duct tape instead of reinventing the wheel.
+There is so much stuff on the internet which is easily accessible. This
+is still the case although the well has been poisoned quite a bit
+because tools rarely work anymore. The Bipolar Lisp Programmer finally
+won against Mel The Real Programmer. schizo rant over back to your
+regular scheduled programming</p>
diff --git a/site/postdata/rebind.html b/site/postdata/rebind.html
new file mode 100644
index 0000000..92b6ac5
--- /dev/null
+++ b/site/postdata/rebind.html
@@ -0,0 +1,37 @@
+<p>Rebind is a tool to make the VIWoods AI Reader phone more usable with
+key rebindings and hardware hacks like the 5 extra-dim light settings.
+The VIWoods phone is a very nice piece of hardware, but the stock
+firmware that it comes with is not amazing. This app and the suite of
+tools that it spawned are a solution. Made with vibecode.</p>
+<h2 id="get-it">Get it</h2>
+<p>By the time you read this it will probably be on F-Droid and the
+Google Play store.</p>
+<h2 id="projects">Projects</h2>
+<ul>
+<li><a href="https://github.com/equwal/rebind">rebind</a>: Core app for
+rebinding and for the hardware hacks.</li>
+<li><a href="https://github.com/equwal/assistkey">assistkey</a>: Key
+remapper for the Viwoods AiPaper Reader: AI key, volume keys, and
+Power.</li>
+<li><a
+href="https://github.com/equwal/awesome-rebind">awesome-rebind</a>:
+Similar page to this one, but AWESOME!?</li>
+<li><a href="https://github.com/equwal/ink-recents">ink-recents</a>: An
+eink recent apps slider that is way nicer than the one viwoods
+installs.</li>
+<li><a href="https://github.com/equwal/ink-dim">ink-dim</a>: Standalone
+app to do the dimming hack. Requires shizuku or live ADB</li>
+<li><a href="https://github.com/equwal/ink-update">ink-update</a>: App
+to update these apps. Will be obsolete when F-Droid and Google Play are
+working.</li>
+</ul>
+<h2 id="promo-video">Promo video</h2>
+<p><a href="https://www.youtube.com/watch?v=SRZi0YgoCJ0"
+class="uri">https://www.youtube.com/watch?v=SRZi0YgoCJ0</a></p>
+<h2 id="how-it-works">How it works</h2>
+<p>Uses a bunch of hacks to get as much access to the buttons as
+possible. Most are possible on stock viwoods firmware, although the
+extra dim light feature does require the shizuku hack.</p>
+<h2 id="support">Support</h2>
+<p>Support the work at <a
+href="https://ko-fi.com/truex">ko-fi.com/truex</a>.</p>
diff --git a/site/postdata/sbm-sync.html b/site/postdata/sbm-sync.html
new file mode 100644
index 0000000..bfaebfc
--- /dev/null
+++ b/site/postdata/sbm-sync.html
@@ -0,0 +1,35 @@
+<p>Suckless Bookmark Manager (now sbm Sync)</p>
+<p>sbm is a bookmark manager, originally a dmenu script. It is now a
+multiplatform, cloud synced bookmark manager with support for teams.</p>
+<h2 id="promo-video">Promo video</h2>
+<p><a href="https://www.youtube.com/watch?v=iKmYWTCkW7c"
+class="uri">https://www.youtube.com/watch?v=iKmYWTCkW7c</a></p>
+<h2 id="try-it-on-the-web">Try it on the web</h2>
+<ul>
+<li><a href="https://sbmsync.com">sbmsync.com</a></li>
+</ul>
+<h2 id="projects">Projects</h2>
+<ul>
+<li><a href="https://github.com/equwal/sbm">sbm</a> multiplatform
+computer application</li>
+<li><a href="https://github.com/equwal/sbm-android">sbm-android</a>
+android app</li>
+<li><a href="https://github.com/equwal/sbm-extension">sbm-extension</a>
+firefox and chrome extensions</li>
+<li><a href="https://github.com/equwal/sbm-sync">sbm-sync</a> the sync
+server</li>
+<li><a href="https://github.com/equwal/sbm-suckless">sbm-suckless</a>
+the original POSIX shell script, suckless edition (no vibecode)</li>
+</ul>
+<h2 id="how-it-works">How it works</h2>
+<p>Fuzzy search bookmarks and quickly add/copy/view bookmarks. Now with
+syncing through the browser and everything.</p>
+<h2 id="why">Why</h2>
+<p>This tool gives you the power to spam links to your friends to the
+point that it annoys them.</p>
+<p>Like many others, I find search engines to be pretty tedious to use.
+Searching my own bookmarks is much better. With sbm you can be like me
+and have BASED links at your fingertips.</p>
+<h2 id="support">Support</h2>
+<p>Support the work at <a
+href="https://ko-fi.com/truex">ko-fi.com/truex</a>.</p>
diff --git a/site/postdata/sbm.html b/site/postdata/sbm.html
new file mode 100644
index 0000000..d8f2937
--- /dev/null
+++ b/site/postdata/sbm.html
@@ -0,0 +1,54 @@
+<p>How to keep track of thousands of bookmarks with a simple tool and
+your own tags.</p>
+<h3 id="copy-or-add-a-bookmark">Copy or add a bookmark:</h3>
+<figure>
+<img src="https://recentlywritten.com/static/firstscrn.png" alt="Copy or Add a bookmark." />
+<figcaption aria-hidden="true">Copy or Add a bookmark.</figcaption>
+</figure>
+<h3
+id="dmenu-fuzzy-search-dialogue-for-all-your-bookmarks.-simple-text-format.">dmenu
+fuzzy search dialogue for all your bookmarks. Simple text format.</h3>
+<p><img src="https://recentlywritten.com/static/secondscrn.png"
+alt="Searching for booksmarks" /><br />
+<a href="https://github.com/equwal/sbm">github.com/equwal/sbm</a></p>
+<p>It needs to be made with make and the config file should be edited
+too. More docs soon, although it is a simple program. Details in the
+source.</p>
+<p><a href="https://karl-voit.at/2022/01/29/How-to-Use-Tags/">Karl
+Voit’s article (the good ideas are from here)</a><br />
+<a href="https://recentlywritten.com/static/sbm-0.1.tar.gz">download the dmenu package</a></p>
+<p>Grand Generalized Dmenu Tagger coming soon to stores near you.</p>
+<h3 id="scripts">Scripts</h3>
+<ul>
+<li><ol type="1">
+<li>bm – search & copy, add, or edit/plumb a bookmark (edit/plumb
+not implemented yet).</li>
+</ol></li>
+</ul>
+<h3 id="install">Install</h3>
+<p>Requirements: xclip, dmenu, make</p>
+<ul>
+<li>Export the $BOOKMARKS variable containing the location of the
+bookmarks. I like to use ~/.local/share/sbm to store my config.<br />
+mkdir -p ~/.local/share/sbm/<br />
+~/.bashrc<br />
+export BOOKMARKS=“~/.local/share/sbm/bookmarks”</li>
+<li>define your tag choices in USERTAGS and export that too. The file
+syntax is:<br />
+<tag><space><description><newline><br />
+See the included usertags file for an example.<br />
+~/.bashrc<br />
+export USERTAGS=“~/.local/share/sbm/usertags”<br />
+</li>
+<li>make install</li>
+</ul>
+<h3 id="usage">Usage</h3>
+<p>Execute</p>
+<p>search-term is an extended regex for grep.</p>
+<p>Bookmark lines are space separated values<br />
+URL description</p>
+<h3 id="tip">Tip</h3>
+<p>The bookmarks can be converted from the web browser formats using
+netscape-bookmark-converter at</p>
+<p><a
+href="https://github.com/jhh/netscape-bookmark-converter">github.com/jhh/netscape-bookmark-converter</a></p>
diff --git a/site/postdata/subread.html b/site/postdata/subread.html
new file mode 100644
index 0000000..efe5c5f
--- /dev/null
+++ b/site/postdata/subread.html
@@ -0,0 +1,71 @@
+<p>SubRead makes it possible to read books with synced subtitles that
+keep your place. This is very nice for language learning.</p>
+<p>Subread is a suite of tools that port forced alignment to a variety
+of platforms. It is 100% free when used locally, although it is possible
+to do conversions with my cloud for a fee. It is 100% self-hostable free
+software. <a href="https://subread.space">BUY NOW!</a></p>
+<h2 id="promo-video">Promo Video</h2>
+<p><a href="https://www.youtube.com/watch?v=WRz7UQZwe-Q"
+class="uri">https://www.youtube.com/watch?v=WRz7UQZwe-Q</a></p>
+<h2 id="try-it-on-the-web">Try it on the web</h2>
+<ul>
+<li><a href="https://subread.space">subread.space</a>: webpage to do the
+conversions</li>
+<li><a href="https://honjimaku.com">honjimaku.com</a>: website to
+download or upload srt files for Japanese audiobooks</li>
+<li><a href="https://rtr46.github.io/kikiyomi/">kikiyomi</a>: Try
+reading your audiobook/srt combo on the web</li>
+</ul>
+<h2 id="projects">Projects</h2>
+<ul>
+<li><a href="https://github.com/equwal/subread.space">subread.space</a>:
+Read an <code>.srt</code> one line at a time with the space bar. Works
+with Yomitan, furigana, and pitch accent markup.</li>
+<li><a href="https://github.com/equwal/subplz-web">subplz-web</a>:
+subread.space source</li>
+<li><a
+href="https://github.com/equwal/subread-android">subread-android</a>:
+subread.space android app (local and cloud conversions are
+possible)</li>
+<li><a
+href="https://github.com/equwal/subread-extension">subread-extension</a>:
+Extension to use subread on youtube for audiobooks published there.</li>
+<li><a
+href="https://github.com/equwal/subread-overlay">subread-overlay</a>:
+Android app to show the subtitles as an overlay on the phone. Can be
+used with the dictionary for a very nice AJATT experience.</li>
+<li><a
+href="https://github.com/equwal/subread-dictionary">subread-dictionary</a>:
+Yomitan pop-up dictionary standalone android app. Works really good with
+the overlay, but can be used anywhere!</li>
+<li><a
+href="https://github.com/equwal/subread.koplugin">subread.koplugin</a>:
+KOReader plugin that does live highlighting of the book while you listen
+to it in another app like Voice, VLC, or MPV.</li>
+<li><a
+href="https://github.com/equwal/subrep-android">subrep-android</a>: Live
+whisper captions. Better than the ones that come with android.</li>
+<li><a
+href="https://github.com/equwal/desktop-subtitle-replay">desktop-subtitle-replay</a>:
+Whisper on your computer, and broadcast them to your friends. Useful for
+online language classrooms or bilingual exchanges.</li>
+<li><a href="https://github.com/equwal/honjimaku">honjimaku</a>: Book
+subtitles database for japanese</li>
+<li><a
+href="https://github.com/equwal/Hoshi-Reader-Android">Hoshi-Reader-Android</a>:
+Fork of hoshi reader that can do the conversion inside hoshi reader.
+Hopefully gets merged.</li>
+<li><a href="https://github.com/equwal/chimahon">chimahon</a>: Fork with
+a <code>readalong</code> branch for the Mihon immersion reader.</li>
+<li><a href="https://github.com/equwal/dickt.store">dickt.store</a>:
+Bring-your-own-key Yomitan dictionary converter.</li>
+<li><a
+href="https://github.com/equwal/vibeslop-dickt">vibeslop-dickt</a>: Make
+your own Yomitan dictionary in a few minutes.</li>
+</ul>
+<h2 id="why">Why</h2>
+<p>Extremely useful for learning languages by reading books with the
+audiobook.</p>
+<h2 id="support">Support</h2>
+<p>Support the work at <a
+href="https://ko-fi.com/truex">ko-fi.com/truex</a>.</p>
diff --git a/site/postdata/tag-gen.html b/site/postdata/tag-gen.html
new file mode 100644
index 0000000..573aae5
--- /dev/null
+++ b/site/postdata/tag-gen.html
@@ -0,0 +1,46 @@
+<p><a href="https://github.com/equwal/tag-gen" class="external-link">git
+hub website link here</a></p>
+<h2 id="purpose">PURPOSE:</h2>
+<p>Specify which directories to generate tags for, and what kinds of
+files<br />
+to generate them for in each. Good for tag jumping in an editor.</p>
+<h2 id="requirements">Requirements</h2>
+<ul>
+<li><p>An ANSI Common Lisp</p></li>
+<li><p>ASDF (for UIOP portable shell facilities)</p></li>
+<li><p>A ctags-like program.</p></li>
+<li><p>Desire</p></li>
+</ul>
+<h2 id="non-featuresnon-requirements">Non-features/Non-Requirements</h2>
+<ul>
+<li><p>Not multithreaded!</p></li>
+<li><p>Works with any tag program (doesn’t do any tagging
+itself)!</p></li>
+<li><p>No special configuration language, just two sexps!</p></li>
+<li><p>Does not use Roswell!</p></li>
+<li><p>Works on my machine!</p></li>
+</ul>
+<h2 id="install">Install</h2>
+<ol type="1">
+<li><p>put this folder somewhere</p></li>
+<li><p>put the config folder somewhere</p></li>
+<li><p>put the tag-gen.sh and tag-gen-root.sh somewhere</p></li>
+<li><p>put the cron job in</p></li>
+<li><p>put your configuration in</p></li>
+</ol>
+<p>Edit the config/ files with the paths you want tagged.</p>
+<p>Add a command to cron like:</p>
+<pre><code>*/29 * * * * su username -c 'tag-gen.sh /path/to/tag-gen/local.conf /usr/bin/etags'
+*/29 * * * * su root -c 'tag-gen-root.sh /path/to/tag-gen/root.conf /usr/bin/etags'</code></pre>
+<p>for routine tagging.</p>
+<p>tags.conf needs to contain this kind of format:</p>
+<pre><code>"/path/to/ctags/program"
+
+(("<directory>" ("<ext>"...))
+ ...)</code></pre>
+<p>The tags program reads the file extensions to infer what language to
+do tags for. Specify the directories you want to use tag browsing
+programs on.</p>
+<p>See examples in config-examples. Configuration is
+<strong>mandatory</strong> for the program to work. The format is just
+read with the lisp
[diff truncated]