Just my blogroll - BlogFlock2026-02-28T01:10:47.127ZBlogFlockIrreal, The Emacs Cat, Protesilaos Stavrou: News and Announcements, manuel uberti, Justin Barclay, BuzzMachine, GamingOnLinux Latest Articles, Bowmansarrow, Karthinks, Philip KALUDERCIC, Xah Lee, Emacs@ Dyerdwelling, Arialdo Martini, Jeff Kreeftmeijer, MacAdie Web Blog, Take on Rules, LWN.net, Bicycle For Your Mind, Wilfred Hughes::Blog, McSweeney’s, Rock Paper Shotgun Latest Articles Feed, Sacha ChuaUsing speech recognition for on-the-fly translations in Emacs and faking in-buffer completion for the results - Sacha Chuahttps://sachachua.com/blog/2026/02/using-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results/2026-02-27T20:11:58.000Z<p>
When I'm writing a journal entry in French, I
sometimes want to translate a phrase that I can't
look up word by word using a dictionary.
Instead of switching to a browser, I can use an
Emacs function to prompt me for text and either
insert or display the translation.
The <a href="https://github.com/alphapapa/plz.el">plz</a> library makes HTTP requests slightly
neater.
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">my-french-en-to-fr</span> (text <span class="org-type">&optional</span> display-only)
(<span class="org-keyword">interactive</span> (list (read-string <span class="org-string">"Text: "</span>) current-prefix-arg))
(<span class="org-keyword">let*</span> ((url <span class="org-string">"https://translation.googleapis.com/language/translate/v2"</span>)
(params <span class="org-highlight-quoted-quote">`</span>((<span class="org-string">"key"</span> . ,(getenv <span class="org-string">"GOOGLE_API_KEY"</span>))
(<span class="org-string">"q"</span> . ,text)
(<span class="org-string">"source"</span> . <span class="org-string">"en"</span>)
(<span class="org-string">"target"</span> . <span class="org-string">"fr"</span>)
(<span class="org-string">"format"</span> . <span class="org-string">"text"</span>)))
(query-string (mapconcat
(<span class="org-keyword">lambda</span> (pair)
(format <span class="org-string">"%s=%s"</span>
(url-hexify-string (car pair))
(url-hexify-string (cdr pair))))
params
<span class="org-string">"&"</span>))
(full-url (concat url <span class="org-string">"?"</span> query-string)))
(<span class="org-keyword">let*</span> ((response (plz <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">get</span> full-url <span class="org-builtin">:as</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">json-read</span>))
(data (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">data</span> response))
(translations (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">translations</span> data))
(first-translation (car translations))
(translated-text (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">translatedText</span> first-translation)))
(<span class="org-keyword">when</span> (called-interactively-p <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">any</span>)
(<span class="org-keyword">if</span> display-only
(message <span class="org-string">"%s"</span> translated-text)
(insert translated-text)))
translated-text)))
</code></pre>
</div>
<p>
I think it would be even nicer if I could use speech synthesis, so I can keep it a little more separate from my typing thoughts. I want to be able to say "Okay, translate …" or "Okay, … in French" to get a translation. I've been using <a href="https://github.com/sachac/whisper.el/">my fork of natrys/whisper.el</a> for <a href="https://sachachua.com/topic/speech-recognition/">speech recognition</a> in English, and I like it a lot. By adding a function to <code>whisper-after-transcription-hook</code>, I can modify the intermediate results before they're inserted into the buffer.
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">my-whisper-translate</span> ()
(goto-char (point-min))
(<span class="org-keyword">let</span> ((case-fold-search t))
(<span class="org-keyword">when</span> (re-search-forward <span class="org-string">"okay[,\\.]? translate[,\\.]? </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.+</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">okay[,\\.]? </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.+?</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"> in French"</span> nil t)
(<span class="org-keyword">let*</span> ((s (<span class="org-keyword">or</span> (match-string 1) (match-string 2)))
(translation (<span class="org-keyword">save-match-data</span> (my-french-en-to-fr s))))
(replace-match
(propertize translation
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">type-hint</span> translation
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">help-echo</span> s))))))
(<span class="org-keyword">with-eval-after-load</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">whisper</span>
(add-hook <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">whisper-after-transcription-hook</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">my-whisper-translate</span> 70))
</code></pre>
</div>
<p>
But that's too easy. I want to actually type things myself so that I get more practice. Something like an autocomplete suggestion would be handy as a way of showing me a hint at the cursor. The usual completion-at-point functions are too eager to insert things if there's only one candidate, so we'll just fake it with an overlay. This code works only with my whisper.el fork because it supports using a list of functions for <code>whisper-insert-text-at-point</code>.
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">my-whisper-maybe-type-with-hints</span> (text)
<span class="org-doc">"Add this function to `</span><span class="org-doc"><span class="org-constant">whisper-insert-text-at-point</span></span><span class="org-doc">'."</span>
(<span class="org-keyword">let</span> ((hint (<span class="org-keyword">and</span> text (org-find-text-property-in-string <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">type-hint</span> text))))
(<span class="org-keyword">if</span> hint
(<span class="org-keyword">progn</span>
(my-type-with-hint hint)
nil)
text)))
(<span class="org-keyword">defvar-local</span> <span class="org-variable-name">my-practice-overlay</span> nil)
(<span class="org-keyword">defvar-local</span> <span class="org-variable-name">my-practice-target</span> nil)
(<span class="org-keyword">defvar-local</span> <span class="org-variable-name">my-practice-start</span> nil)
(<span class="org-keyword">defun</span> <span class="org-function-name">my-practice-cleanup</span> ()
<span class="org-doc">"Remove the overlay and stop monitoring."</span>
(<span class="org-keyword">when</span> (overlayp my-practice-overlay)
(delete-overlay my-practice-overlay))
(<span class="org-keyword">setq</span> my-practice-overlay nil
my-practice-target nil
my-practice-start nil)
(remove-hook <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">post-command-hook</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">my-practice-monitor</span> t))
(<span class="org-keyword">defun</span> <span class="org-function-name">my-practice-monitor</span> ()
<span class="org-doc">"Updates hint or cancels."</span>
(<span class="org-keyword">let*</span> ((pos (point))
(input (buffer-substring-no-properties my-practice-start pos))
(input-len (length input))
(target-len (length my-practice-target)))
(<span class="org-keyword">cond</span>
((<span class="org-keyword">or</span> (< pos my-practice-start)
(> pos (+ my-practice-start target-len))
(string-match <span class="org-string">"[\n\t]"</span> input)
(string= input my-practice-target))
(my-practice-cleanup))
((string-prefix-p (downcase input) (downcase my-practice-target))
(<span class="org-keyword">let</span> ((remaining (substring my-practice-target input-len)))
(move-overlay my-practice-overlay pos pos)
(overlay-put my-practice-overlay <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">after-string</span>
(propertize remaining <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">shadow</span>))))
(t <span class="org-comment-delimiter">; </span><span class="org-comment">typo</span>
(move-overlay my-practice-overlay pos pos)
(overlay-put my-practice-overlay <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">after-string</span>
(propertize (substring my-practice-target input-len) <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">error</span>))))))
(<span class="org-keyword">defun</span> <span class="org-function-name">my-type-with-hint</span> (string)
<span class="org-doc">"Show hints for STRING."</span>
(<span class="org-keyword">interactive</span> <span class="org-string">"sString to practice: "</span>)
(my-practice-cleanup)
(<span class="org-keyword">setq-local</span> my-practice-target string)
(<span class="org-keyword">setq-local</span> my-practice-start (point))
(<span class="org-keyword">setq-local</span> my-practice-overlay (make-overlay (point) (point) nil t t))
(overlay-put my-practice-overlay <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">after-string</span> (propertize string <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">shadow</span>))
(add-hook <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">post-command-hook</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">my-practice-monitor</span> nil t))
</code></pre>
</div>
<p>
Here's a demonstration of me saying "Okay, this is a test, in French.":
</p>
<div class="media-post" id="orgb96826f">
<p>
</p><figure><video controls="1" src="https://sachachua.com/blog/2026/02/using-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results/2026-02-27-translate-and-type-with-hints.webm" type="video/webm"><a href="https://sachachua.com/blog/2026/02/using-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results/2026-02-27-translate-and-type-with-hints.webm">Download the video</a></video><figcaption><div>Screencast of using speech recognition to translate into French and provide a hint when typing</div></figcaption></figure>
<p></p>
</div>
<p>
Since we're faking in-buffer completion here, maybe we can still get away with considering this as an entry for <a href="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/">Emacs Carnival February 2026: Completion</a> ? =)
</p>
<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#writing-and-editing-speech-recognition-using-speech-recognition-for-translations-in-emacs-and-faking-in-buffer-completion-for-the-results">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2026/02/using-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F02%2Fusing-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>Marathon might be the perfect 2026 shooter in that I feel like I'm stuck in a giant Nvidia graphics card - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/marathon-might-be-the-perfect-2026-shooter-in-that-i-feel-like-im-stuck-in-a-giant-nvidia-graphics-card2026-02-27T17:05:25.000Z<img src="https://assetsio.gnwcdn.com/20260227134600_1.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>
Among the first things you see in the <a href="https://www.rockpapershotgun.com/games/marathon">Marathon</a> reboot playtest is a close-up of a barcoded moth, gleefully chowing on some larval diodes. It’s not even <a href="https://www.rockpapershotgun.com/cicadamata-is-the-most-exciting-fps-ive-played-in-years-come-try-the-demo">the first cybernetic insect motif</a> I’ve encountered in an <a href="https://www.rockpapershotgun.com/best-fps-games">FPS</a> this week, but it speaks to me. Friends, we are all that kooky little bug, crawling down overheated silicon canyons, nuzzling at chips, for this is <a href="https://www.reuters.com/business/nvidia-poised-record-5-trillion-market-valuation-2025-10-29/">the Nvidia era</a>, the Nvidiascene, and the whole world has become a GPU, dedicated to generating recipe ideas for the three edible objects in your fridge.
</p>
<p><a href="https://www.rockpapershotgun.com/marathon-might-be-the-perfect-2026-shooter-in-that-i-feel-like-im-stuck-in-a-giant-nvidia-graphics-card">Read more</a></p>Teardown's multiplayer update rolls out next month, so start packing a voxel lorry with mates and explosives - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/teardowns-multiplayer-update-rolls-out-next-month-so-start-packing-a-voxel-lorry-with-mates-and-explosives2026-02-27T16:46:50.000Z<img src="https://assetsio.gnwcdn.com/tradown-umtiplayer-update-full-release-date-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Boom. Bang. Bash. Things falling down. <a href="https://www.rockpapershotgun.com/games/teardown">Teardown</a>. The voxel game about blowing stuff up. It's getting <a href="https://www.rockpapershotgun.com/teardown-is-getting-a-multiplayer-update-so-you-can-rough-up-innocent-walls-with-your-best-friends">multiplayer via an update</a>. Tick. Said multiplayer's been in beta testing for the past little while. Tick. It's rolling out in full in March. Boom.</p>
<p><a href="https://www.rockpapershotgun.com/teardowns-multiplayer-update-rolls-out-next-month-so-start-packing-a-voxel-lorry-with-mates-and-explosives">Read more</a></p>[$] The troubles with Boolean inversion in Python - LWN.nethttps://lwn.net/Articles/1059177/2026-02-27T16:21:11.000ZThe Python bitwise-inversion (or complement) operator, "<tt>~</tt>", <a
href="https://docs.python.org/3/library/stdtypes.html#index-16">behaves</a>
pretty much as expected when it is applied to integers—it toggles every
bit, from one
to zero and vice versa. It might be expected that applying the
operator to a non-integer, a <a
href="https://docs.python.org/3/library/stdtypes.html#boolean-type-bool"><tt>bool</tt></a>
for example, would raise a <tt>TypeError</tt>, but, because the
<tt>bool</tt> type is really an <a
href="https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex"><tt>int</tt></a>
in disguise, the complement operator is allowed, at least for now. For
nearly 15 years (and perhaps longer), there have been discussions about the
oddity of that behavior and whether it should be changed. Eventually,
that resulted in the "feature" being deprecated, producing a warning, with removal slated for
Python 3.16 (due October 2027). That has led to some reconsideration and the
deprecation may itself be deprecated.The OrangePi Neo gaming handheld with Manjaro Linux is now "on ice" due to component prices - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/the-orangepi-neo-gaming-handheld-with-manjaro-linux-is-now-on-ice-due-to-component-prices/2026-02-27T15:34:56.000ZThe latest update for the OrangePi Neo handheld with Manjaro Linux is not a positive one, with the whole thing now unfortunately "on ice".<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/679199896id28579gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/the-orangepi-neo-gaming-handheld-with-manjaro-linux-is-now-on-ice-due-to-component-prices/">GamingOnLinux</a>.</p>Emacs Internals Part 1 - Irrealhttps://irreal.org/blog/?p=136402026-02-27T15:20:24.000Z<p>
Yi-Ping Pan has an interesting post that recapitulates one of my favorite hobby horses: <a href="https://thecloudlet.github.io/blog/project/emacs-01/">Emacs is actually a modern day Lisp Machine that happens to ship with an embedded editor</a>. Pan kept trying other editors but always returned to Emacs. Finally, he stopped treating it as merely a tool and started reading the C source code. What he discovered is what I’ve been preaching for years: Emacs is actually a C-based Lisp interpreter with an embedded text editor.
</p>
<p>
Pan’s post—the first in a series about Emacs internals—recounts how Emacs grew from a set of TECO macros to a stand alone application built on its own Lisp interpreter. Other editors have tried to recreate this magic but they have all failed because of Greenspun’s Tenth Rule:
</p>
<blockquote>
<p>
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
</p>
</blockquote>
<p>
Emacs, on the other hand, started with an actual Lisp interpreter and layered a text editor on top of that interpreter. That enables the magic. It’s possible to modify any particular editor function simply by rewriting it in Elisp and adding it to your configuration. Similarly, you can write your own editing—or even general purpose—functions and add them to the Emacs runtime simply by adding them to your configuration.
</p>
<p>
Pan announced his post <a href="https://www.reddit.com/r/emacs/comments/1rf8qtq/emacs_is_a_cbased_lisp_runtime_not_a_text_editor/">over at the Emacs subreddit</a> and, as usual, the comments are instructive. To me, the most interesting comments lamented that Lisp was never able “to fix” the parenthesis problem. I have to admit that it makes me grumpy every time I see someone complaining about parentheses in Lisp. To me, it’s one of Lisp’s successes, not one of its failures. That’s why the planned m-expressions using a more conventional syntax never caught on. Lispers like and prefer s-expressions.
</p>
<p>
In any event, Pan’s post is worth a couple of minutes of your time. Head over and take a look.</p>
The Steam Deck is an adequate vessel for Resident Evil Requiem, despite missing desktop-grade smoothness - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/resident-evil-requiem-steam-deck-performance-best-settings2026-02-27T15:04:09.000Z<img src="https://assetsio.gnwcdn.com/Resident-Evil-Requiem-Steam-Deck-Academy.jpg?width=690&quality=85&format=jpg&auto=webp" />
<p><a href="https://www.rockpapershotgun.com/resident-evil-requiem-walkthrough">Resident Evil Requiem</a> has, in terms of <a href="https://www.rockpapershotgun.com/resident-evil-requiem-pc-performance-best-settings">technical fidelity versus PC power demands</a>, one of the best bang:buck ratios to come out of a triple-A'er in donkey's ages. It’s not terribly surprising, then, that Requiem can run well enough on the <a href="https://www.rockpapershotgun.com/best-steam-deck-games">Steam Deck</a> too.</p>
<p><a href="https://www.rockpapershotgun.com/resident-evil-requiem-steam-deck-performance-best-settings">Read more</a></p>Two new stable kernels, possible regression - LWN.nethttps://lwn.net/Articles/1060646/2026-02-27T14:36:33.000ZGreg Kroah-Hartman has announced the <a
href="https://lwn.net/Articles/1060647/">6.19.4</a> and <a
href="https://lwn.net/Articles/1060648/">6.18.14</a> stable kernels. Shortly after
6.19.4 was released Kris Karas <a
href="https://lwn.net/ml/all/eb2d1da9-0b4b-4887-83a4-0e2a65e703aa%40moonlit-rail.com/">reported</a> "<q>getting a repeatable Oops right
when networking is initialized, likely when nft is loading its
ruleset</q>"; the problem did not appear to be present in 6.18.14. Users
of nftables may wish to hold off on upgrades to 6.19.4 for now. We
will provide updates as they are available.</p>
<p></p>Steam Deck OLED prices will rise in Japan, Korea, and Taiwan next week, but it's tough to tell whether that's a harbinger of wider hikes - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/steam-deck-oled-prices-will-rise-in-japan-korea-and-taiwan-next-week-but-its-tough-to-tell-whether-thats-a-harbinger-of-wider-hikes2026-02-27T14:17:15.000Z<img src="https://assetsio.gnwcdn.com/steam-deck-price-rise-japan-south-korea-taiwan-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>The <a href="https://www.rockpapershotgun.com/predicting-steam-machine-prices-would-be-a-lot-easier-if-ram-costs-hadnt-gone-horribly-wrong">ongoing headache of RAMnarök</a> has seen hardware prices rise and Valve's <a href="https://www.rockpapershotgun.com/yep-the-steam-deck-oled-going-out-of-stock-is-due-to-the-ai-fuelled-ram-and-storage-shortages-valve-confirm">Steam Decks go out of stock</a> in certain regions of the world. So, today's announcement that <a href="https://www.rockpapershotgun.com/steam-deck-oled-review">Steam Deck OLED</a> prices in Japan, South Korea, and Taiwan are set to rise next month is the sort than might have you clutching your wallet. Though, having done some number exchanging, I can confirm that these hikes don't actually send the affected regional prices vaulting a huge amount beyond their UK and US equivalents.</p>
<p><a href="https://www.rockpapershotgun.com/steam-deck-oled-prices-will-rise-in-japan-korea-and-taiwan-next-week-but-its-tough-to-tell-whether-thats-a-harbinger-of-wider-hikes">Read more</a></p>Security updates for Friday - LWN.nethttps://lwn.net/Articles/1060645/2026-02-27T14:06:16.000ZSecurity updates have been issued by <b>AlmaLinux</b> (389-ds-base, buildah, firefox, freerdp, golang-github-openprinting-ipp-usb, grafana-pcp, kernel, libpng15, munge, nodejs:20, nodejs:22, podman, protobuf, python-pyasn1, runc, and skopeo), <b>Debian</b> (chromium, nss, and python-django), <b>Fedora</b> (firefox, freerdp, gh, libmaxminddb, nss, python3.15, and udisks2), <b>Oracle</b> (buildah, firefox, freerdp, kernel, libpng, podman, python-pyasn1, skopeo, and valkey), <b>Red Hat</b> (container-tools:rhel8), <b>SUSE</b> (autogen, chromium, cockpit, cockpit-machines-348, cockpit-packages, cockpit-repos, cockpit-subscriptions, crun, docker, docker-compose, docker-stable, erlang, freerdp, frr, glib2, gpg2, kernel, kernel-firmware, libsodium, libsoup, libsoup2, openvswitch, python, python-pyasn1, python-urllib3, python-urllib3_1, python3, qemu, redis7, regclient, and ucode-intel), and <b>Ubuntu</b> (linux-aws, linux-aws-6.8, linux-ibm, linux-ibm-6.8, linux-xilinx, python-authlib, and ruby-rack).Running With Scissors announced horror first person shooter Flesh & Wire - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/running-with-scissors-announced-horror-first-person-shooter-flesh-wire/2026-02-27T13:40:45.000ZDiving into the roots of the POSTAL series, Running With Scissors recently revealed the new horror first person shooter Flesh & Wire.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1649545337id28578gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/running-with-scissors-announced-horror-first-person-shooter-flesh-wire/">GamingOnLinux</a>.</p>Local Library Programming - Take on Ruleshttps://takeonrules.com/2026/02/27/local-library-programming/2026-02-27T13:12:48.000Z<p>Related Links :: <span class="label">Tags:</span> <span role="list" aria-label="Tags for “Local Library Programming”">
<span role="listitem" aria-label="“personal” tag navigation"><a href="https://takeonrules.com/2026/02/05/serendipity-and-verse/" aria-label="Previous post tagged with “personal” is “Serendipity and Verse”" title="Older post tagged with “personal” is “Serendipity and Verse”"><small><</small></a>
<a href="https://takeonrules.com/tags/personal/" class="p-category" aria-label="All posts tagged with “personal”" title="All posts tagged with “personal”">personal</a> <small aria-hidden="true">></small>
</span><span aria-hidden=true> · </span>
<span role="listitem" aria-label="“poetry” tag navigation"><a href="https://takeonrules.com/2026/02/10/a-poetry-handbook-by-mary-oliver/" aria-label="Previous post tagged with “poetry” is “«A Poetry Handbook» by Mary Oliver”" title="Older post tagged with “poetry” is “«A Poetry Handbook» by Mary Oliver”"><small><</small></a>
<a href="https://takeonrules.com/tags/poetry/" class="p-category" aria-label="All posts tagged with “poetry”" title="All posts tagged with “poetry”">poetry</a> <small aria-hidden="true">></small>
</span></span>
</p/><p><strong>Summary: </strong>
Establishing intentional plans for personal enrichment.
</p>
<p>As I understand it, in mid-<time datetime="2025" title="2025">2025</time> the topic of personal curriculum started
emerging on TikTok. Jenny, then working at a small local library, sought to add
a Personal Curriculum segment to the library programming. The schedule up until
the turn of the year was packed.</p>
<p>So they scheduled a session for January; but due to inclement weather, postponed
the inaugural session until <time datetime="2026-02-26" title="2026-02-26">yesterday</time>.</p>
<p>There were five attendees with Jenny facilitating. She introduced the concept
with a presentation, a mix of examples and videos, highlighting the breadth of
what others had considered as well as how to write a curriculum:</p>
<ul>
<li>topic</li>
<li>learning objectives and tangible outputs</li>
<li>secondary outcomes</li>
<li>potential resources</li>
<li>schedule of activity</li>
</ul>
<p>Jenny emphasized that the topic should be of interest, one in which you have
some basic knowledge, and identifying a goal to achieve. Everything else was in
support of enriching a personal interest.</p>
<p>Jenny gave her example: Color Theory. With a list of weekly activities. And a
final outcome.</p>
<p>The others of us shared our ideas:</p>
<ul>
<li>Bassoon reed making</li>
<li>Mushroom foraging</li>
<li>Either ancient history or true crime</li>
</ul>
<p>For myself, I came with a list of possibilities:</p>
<ul>
<li>poetry</li>
<li>standing up a media server</li>
<li>reading chonky books</li>
<li>doodling</li>
</ul>
<p>And while we were discussing our topics, I began narrowing mine. I knew that I
wanted to avoid technology for my first foray; after all I’m on a computer all
day. I looked to my other topics and narrowed poetry to haiku and chonky books
to <cite data-id="works-don-quixote">Don Quixote</cite>; with secondary sources.</p>
<p>We had a great shared conversation, I asked the young patron about their
interest in ancient history. And knowing she was a young mother, made mention
of Dan Carlin’s <em>Hardcore History</em>. Something she could listen to in those
moments between parenting.</p>
<p>As the session wound down I settled on a 4 week exploration of Haiku. We also
agreed to meet in 4 weeks to check-in and report back.</p>
<h1 id="started-a-personal-curriculum-haiku">STARTED A Personal Curriculum: Haiku</h1>
<ul>
<li><strong>Outcome:</strong> Assemble a small haiku zine (8 or so)</li>
<li><strong>Secondary Outcomes:</strong> Read classic haikus. Read on writing haiku.</li>
<li><strong>Timeframe:</strong> 4 weeks</li>
</ul>
<p><strong>Throughout:</strong></p>
<ul>
<li>Write with pen and pencil on paper; one goal is to disconnect from my
computer.</li>
<li>Always carry a pen and paper.</li>
<li>Seek to always carry <cite data-id="isbn-1400041287">Haiku</cite> and read from,
instead of glancing at my phone.</li>
</ul>
<p><strong>Schedule:</strong></p>
<ul>
<li>Week 1: Read <a href="work:how-to-haiku-a-writers-guide-to-haiku-and-related-forms-by-bruce-ross::author">«How to Haiku» by Bruce Ross</a>.</li>
<li>Week 2: Read introduction and excerpts of <cite data-id="isbn-9784805318454">Sōseki Natsume’s Collected Haiku</cite> translated by Erik R. Lofgren</li>
<li>Week 3: Review past haiku’s written to find samples.</li>
<li>Week 4: Assemble hand-written haiku zine pamphlet, reproduce 20 copies.</li>
</ul>
<h1 id="the-morning-after">The Morning After</h1>
<p>When we got home from the library, I started reading <cite data-id="isbn-9781462916757">How to Haiku</cite>. I wrote a
few in pencil. We went to bed early, and around 5am <time datetime="2026-02-27" title="2026-02-27">this morning</time> I found myself
waking, a short poem at the tip of my thought.<small class="side-container">
<span class="side-label"><span class="hidden">(</span>Sidenote<span class="hidden">:</span></span>
<span class="side" role="note"> Not some <em>Kubla Kahn</em>, just myself parsing out a haiku.<span class="hidden">)</span></span>
</small>
</p>
<p>I needed to capture that moment:</p>
<p class="verse">
quiet early morn<br />
commuter cars growl on by<br />
old dog curls on chair<br />
</p>
<p>From which I found myself awake, and thinking of Don Quixote, and of <cite data-id="03083A4E-4FEA-4E30-811D-700CE2EB071A">Borges and Me</cite> by Jay Parini, and of Terry Gilliam; and a dawn readying itself to burst upon a still frozen lake.</p>
<p>My phone rattled, I had a before the dawn text from my father. <time datetime="2026-02-26" title="2026-02-26">Yesterday</time> he had
sold off his entire wood working setup; he’s moving and downsizing. His whole
life, fixing things has been his identity, and the wood shop his means of
becoming. The morning text being a follow up, saying that he has had to get
comfortable with reading during daylight hours.</p>
<p><a class="reply-by-email" href="mailto:reply-to@takeonrules.com?subject=RE:Local%20Library%20Programming">Reply by Email</a></p>Gambonanza is the best Balatro-like version of chess yet and you have to try the demo - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/gambonanza-is-the-best-balatro-like-version-of-chess-yet-and-you-have-to-try-the-demo/2026-02-27T12:58:12.000ZIf you love strategy games and roguelikes, Gambonanza fuses together the worlds of Balatro and chess like no other and it won me over completely.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1281056611id28577gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/gambonanza-is-the-best-balatro-like-version-of-chess-yet-and-you-have-to-try-the-demo/">GamingOnLinux</a>.</p>The "video game preservation service" Myrient is shutting down in March - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/the-video-game-preservation-service-myrient-is-shutting-down-in-march/2026-02-27T12:10:42.000ZMyrient is a popular video game preservation service that has over 390 terabytes of classics but it's about to go offline forever.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/708014746id28576gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/the-video-game-preservation-service-myrient-is-shutting-down-in-march/">GamingOnLinux</a>.</p>New Frostrail video delivers more survival train horror shooting plus weird underground Tomb Raider temples - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/new-frostrail-video-delivers-more-survival-train-horror-shooting-plus-weird-underground-tomb-raider-temples2026-02-27T12:01:44.000Z<img src="https://assetsio.gnwcdn.com/frostrail_YjXGU7D.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>I’ve felt surprisingly mixed so far about <a href="https://www.rockpapershotgun.com/games/frostrail">Frostrail</a>, the new first-person co-op horror survival game from the folks behind <a href="https://www.rockpapershotgun.com/games/barotrauma">Barotrauma</a>. As a rule, I’m keen on stories about awful apocalypse trains – see <a href="https://www.rockpapershotgun.com/games/metro-exodus">Metro Exodus</a>, RailGods, and <a href="https://www.rockpapershotgun.com/fogpiercer-is-a-tactical-game-that-recognises-the-true-joy-of-artillery-is-using-it-to-give-your-enemies-a-little-shove">recent Julian favourite Fogpiercer</a> – but Frostrail has hitherto seemed a bit generic. Certainly, a bit generic for a game from the people who made a game that inspired <a href="https://www.rockpapershotgun.com/co-op-space-submarine-game-barotrauma-just-hit-early-access-and-its-an-absolute-hoot">write-ups like this one</a>.</p> <p><a href="https://www.rockpapershotgun.com/new-frostrail-video-delivers-more-survival-train-horror-shooting-plus-weird-underground-tomb-raider-temples">Read more</a></p>Heroic Games Launcher v2.20.1 brings more essential bug fixes - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/heroic-games-launcher-v2-20-1-brings-more-essential-bug-fixes/2026-02-27T11:14:46.000ZHeroic Games Launcher continues to bring improvements to run games from Epic, GOG, Amazon and more on Linux / SteamOS systems with v2.20.1 out now.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/179423000id28575gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/heroic-games-launcher-v2-20-1-brings-more-essential-bug-fixes/">GamingOnLinux</a>.</p>Smash everything apart together as Teardown goes multiplayer on March 12 - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/smash-everything-apart-together-as-teardown-goes-multiplayer-on-march-12/2026-02-27T11:01:53.000ZThe physics-based voxel destruction game Teardown is set for a huge free upgrade on March 12th, when the multiplayer update arrives.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/580442625id28574gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/smash-everything-apart-together-as-teardown-goes-multiplayer-on-march-12/">GamingOnLinux</a>.</p>Frostrail gets a new trailer to showcase its freezing train-survival gameplay - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/frostrail-gets-a-new-trailer-to-showcase-its-freezing-train-survival-gameplay/2026-02-27T10:44:26.000ZFrostrail is another exciting game to keep an eye on, an open-world survival game where you and friends travel through a frozen world on a train.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1447421960id28573gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/frostrail-gets-a-new-trailer-to-showcase-its-freezing-train-survival-gameplay/">GamingOnLinux</a>.</p>He-Man and the Masters of the Universe: Dragon Pearl of Destruction arrives April 28 - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/02/he-man-and-the-masters-of-the-universe-dragon-pearl-of-destruction-arrives-april-28/2026-02-27T10:28:41.000ZAnother good one for fans of retro-styled beat 'em ups, as He-Man and the Masters of the Universe: Dragon Pearl of Destruction is releasing April 28th.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/214283236id28572gol.jpg" alt /></p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/02/he-man-and-the-masters-of-the-universe-dragon-pearl-of-destruction-arrives-april-28/">GamingOnLinux</a>.</p>Netflix's $82.7 billion deal to buy Warner has been dramatically gazumped by Paramount, to the tune of $111 billion - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/netflixs-827-billion-deal-to-buy-warner-has-been-dramatically-gazumped-by-paramount-to-the-tune-of-111-billion2026-02-27T10:28:24.000Z<img src="https://assetsio.gnwcdn.com/mortal_kombat_1_review_1.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Netflix’s <a href="https://www.rockpapershotgun.com/netflix-to-buy-warner-bros-for-827-billion-including-the-developers-of-batman-arkham-mortal-kombat-and-mad-max">$82.7 billion proposal</a> to buy the parts of Warner Bros Discovery that include <a href="https://www.rockpapershotgun.com/games/hogwarts-legacy">Hogwarts Legacy</a> creators Avalanche, Lego devs TT Games, Mortal Kombat studio NetherRealm and Batman Arkham outfit Rocksteady has… fallen through.</p> <p><a href="https://www.rockpapershotgun.com/netflixs-827-billion-deal-to-buy-warner-has-been-dramatically-gazumped-by-paramount-to-the-tune-of-111-billion">Read more</a></p>