Just my blogroll - BlogFlock2026-01-18T18:02:10.640ZBlogFlockJustin Barclay, Protesilaos Stavrou: News and Announcements, The Emacs Cat, Arialdo Martini, BuzzMachine, GamingOnLinux Latest Articles, Xah Lee, Emacs@ Dyerdwelling, Sacha Chua, Jeff Kreeftmeijer, Karthinks, MacAdie Web Blog, Philip KALUDERCIC, Bowmansarrow, Irreal, Take on Rules, manuel uberti, Wilfred Hughes::Blog, Bicycle For Your Mind, LWN.net, Rock Paper Shotgun Latest Articles Feed, McSweeney’sRegulating Your Writing Workflow With Emacs - Irrealhttps://irreal.org/blog/?p=135522026-01-18T15:43:09.000Z<p>
A few days ago, Chris Maiorana wrote an article, <a href="https://chrismaiorana.com/modeline-hacking-git/">The 10-Commit Rule: how git version control can improve writing quality</a>, about how he uses Git and Emacs to regulate his writing workflow. The idea is to track how many changes he’s made to his text since the last commit and to stop and review his work when he reaches about 250 changes, deletions, or additions. The advantage of this system, he says, is that it keeps you from burning out in an initial burst of enthusiasm by forcing you to stop periodically and see where you are.
</p>
<p>
To help him with this, he has a mode line display that shows him how many changes he’s made since the last commit and how many commits he’s made today. It seems like a system that could be useful to many writers. The problem is, he didn’t explain how he got the numbers for his mode line display.
</p>
<p>
Now, however, he has a new post <a href="https://chrismaiorana.com/git-changes-in-emacs-modeline/">that explains how he generates that display</a>. The TL;DR is that he interrogates Git to get both numbers. The number of commits is pretty easy, of course, but getting the number of changes is a bit trickier. Basically, he runs a script that does a git-diff and pipes the results through grep and wc to extract and count the “words” that have changed. To keep from running the script continuously, he caches the results and updates them only every 30 seconds.
</p>
<p>
I’m not sure I’d like using his exact system but I must admit that I do pretty much the same thing without the software assist. Every so often, I stop, reread and edit what I’ve written, and, if I remember, commit what I have so far. As any writer will tell you, there are as many writing methods as there are writers so whether Maiorana’s method works for you will be a matter of your preferences.</p>
The Sunday Papers - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/the-sunday-papers-7932026-01-18T10:44:05.000Z<img src="https://assetsio.gnwcdn.com/the-sunday-papers-big.jpg?width=690&quality=85&format=jpg&auto=webp" />
<p>Sundays are for walking around your home, looking for somewhere to install the home security camera you got for your birthday, and realising a) how few unused surfaces actually exist in this space and b) it was pretty stupid to ask for a home security camera when you knew full well its only purpose would be keeping an eye on the cat while you’re out. And she’s the cat equivalent of a human octogenarian. What, exactly, is she going to do, that might warrant establishing a surveillance state in your own living room? And seriously, how is there not a single inch of unused shelf?</p>
<p>Better, it sounds like, to have a seat and reason quality articles. Go on, while no-one’s watching.</p>
<p><a href="https://www.rockpapershotgun.com/the-sunday-papers-793">Read more</a></p>Four stable kernels for the weekend - LWN.nethttps://lwn.net/Articles/1054815/2026-01-17T19:27:19.000Z<p>Greg Kroah-Hartman has released the <a
href="https://lwn.net/Articles/1054817/">6.18.6</a>, <a
href="https://lwn.net/Articles/1054818/">6.12.66</a>, <a
href="https://lwn.net/Articles/1054819/">6.6.121</a>, and <a
href="https://lwn.net/Articles/1054816/">6.1.161</a> stable kernels. As usual, each
has important fixes throughout the tree; users are advised to
upgrade.</p>
<p></p>Emacs: Updating a Mailchimp campaign using a template, sending test e-mails, and scheduling it - Sacha Chuahttps://sachachua.com/blog/2026/01/emacs-updating-a-mailchimp-campaign-using-a-template-sending-test-e-mails-and-scheduling-a-campaign/2026-01-17T17:59:01.000Z<p>
I'm helping other volunteers get on board with doing the <a href="https://bikebrigade.ca">Bike Brigade</a> newsletter. Since not everyone has access to (or the patience for) <a href="https://mailchimp.com">MailChimp</a>, we've been using Google Docs to draft the newsletter and share it with other people behind the scenes. I've previously written about <a href="https://sachachua.com/blog/2025/09/getting-a-google-docs-draft-ready-for-mailchimp-via-emacs/">getting a Google Docs draft ready for Mailchimp via Emacs and Org Mode</a>, which built on my code for <a href="https://sachachua.com/blog/2025/06/transforming-html-clipboard-contents-with-emacs-to-smooth-out-mailchimp-annoyances-dates-images-comments-colours/">transforming HTML clipboard contents to smooth out Mailchimp annoyances: dates, images, comments, colours</a>. Now I've figured out how to update, test, and schedule the MailChimp campaign directly from Emacs so that I don't even have to go into the MailChimp web interface at all. I added those functions to <a href="https://github.com/sachac/mailchimp-el">sachac/mailchimp-el</a>.
</p>
<p>
I used to manually download a ZIP of the Google Docs newsletter draft. I didn't feel like figuring out authentication and Google APIs from Emacs, so I did that in a NodeJS script instead. <a href="https://sachachua.com/blog/2026/01/emacs-updating-a-mailchimp-campaign-using-a-template-sending-test-e-mails-and-scheduling-a-campaign/convert-newsletter.js">convert-newsletter.js</a> can either create or download the latest newsletter doc from our Google Shared Drive. (<a href="https://github.com/WarrenWilkinson/google-api">google-api</a> might be helpful if I want to do this in Emacs, not sure.) If I call convert-newsletter.js with the <code>download</code> argument, it unpacks the zip into <code>~/proj/bike-brigade/temp_newsletter</code>, where my Emacs Lisp function for processing the latest newsletter draft with images can turn it into the HTML to insert into the HTML template I've previously created. I've been thinking about whether I want to move my HTML transformation code to NodeJS as well so that I could run the whole thing from the command-line and possibly have other people run this in the future, or if I should just leave it in Emacs for my convenience.
</p>
<p>
Updating the campaign through the Mailchimp API means that I don't have to log in, replicate the campaign, click on the code block, and paste in the code. Very nice, no clicks needed. I also use TRAMP to write the HTML to a file on my server (<code>my-bike-brigade-output-file</code> is of the form <code>/ssh:hostname:/path/to/file</code>) so that other volunteers can get a web preview without waiting for the test email.
</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-brigade-next-campaign</span> (<span class="org-type">&optional</span> date)
(<span class="org-keyword">setq</span> date (<span class="org-keyword">or</span> date (org-read-date nil nil <span class="org-string">"+Sun"</span>)))
(seq-find
(<span class="org-keyword">lambda</span> (o)
(string-match (concat <span class="org-string">"^"</span> date)
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">title</span> (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">settings</span> o))))
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">campaigns</span> (mailchimp-campaigns 5))))
(<span class="org-keyword">defvar</span> <span class="org-variable-name">my-bike-brigade-output-file</span> nil)
(<span class="org-keyword">defun</span> <span class="org-function-name">my-brigade-download-newsletter-from-google-docs</span> ()
<span class="org-doc">"Download the newsletter from Google Docs and puts it in ~/proj/bike-brigade/temp_newsletter/."</span>
(<span class="org-keyword">interactive</span>)
(<span class="org-keyword">let</span> ((default-directory <span class="org-string">"~/proj/bike-brigade"</span>))
(<span class="org-keyword">with-current-buffer</span> (get-buffer-create <span class="org-string">"*Newsletter*"</span>)
(erase-buffer)
(display-buffer (current-buffer))
(call-process <span class="org-string">"node"</span> nil t t <span class="org-string">"convert-newsletter.js"</span> <span class="org-string">"download"</span>))))
(<span class="org-keyword">defun</span> <span class="org-function-name">my-brigade-create-or-update-campaign</span> ()
(<span class="org-keyword">interactive</span>)
(<span class="org-keyword">let*</span> ((date (org-read-date nil nil <span class="org-string">"+Sun"</span>))
(template-name <span class="org-string">"Bike Brigade weekly update"</span>)
(list-name <span class="org-string">"Bike Brigade"</span>)
(template-id
(alist-get
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">id</span>
(seq-find
(<span class="org-keyword">lambda</span> (o)
(string= template-name (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">name</span> o)))
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">templates</span> (mailchimp--request-json <span class="org-string">"templates"</span>)))))
(list-id (seq-find
(<span class="org-keyword">lambda</span> (o)
(string= list-name
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">name</span> o)))
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">lists</span> (mailchimp--request-json <span class="org-string">"lists"</span>))))
(campaign (my-brigade-next-campaign date))
(body <span class="org-highlight-quoted-quote">`</span>((type . <span class="org-string">"regular"</span>)
(recipients (list_id . ,(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">id</span> list-id)))
(settings
(title . ,date)
(subject_line . <span class="org-string">"Bike Brigade: Weekly update"</span>)
(from_name . <span class="org-string">"Bike Brigade"</span>)
(reply_to . <span class="org-string">"info@bikebrigade.ca"</span>)
(tracking
(opens . t)
(html_clicks . t))))))
(<span class="org-keyword">unless</span> campaign
(<span class="org-keyword">setq</span> campaign (mailchimp--request-json
<span class="org-string">"/campaigns"</span>
<span class="org-builtin">:method</span> <span class="org-string">"POST"</span>
<span class="org-builtin">:body</span>
body)))
<span class="org-comment-delimiter">;; </span><span class="org-comment">Download the HTML</span>
(my-brigade-download-newsletter-from-google-docs)
<span class="org-comment-delimiter">;; </span><span class="org-comment">Upload to Mailchimp</span>
(mailchimp-campaign-update-from-template
(alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">id</span> campaign)
template-id
(list
(cons <span class="org-string">"main_content_area"</span>
(my-brigade-process-latest-newsletter-draft-with-images
date))))
(<span class="org-keyword">when</span> my-bike-brigade-output-file
(<span class="org-keyword">with-temp-file</span> my-bike-brigade-output-file
(insert (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">html</span> (mailchimp--request-json (format <span class="org-string">"/campaigns/%s/content"</span> (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">id</span> campaign)))))))
(message <span class="org-string">"%s"</span> <span class="org-string">"Done!"</span>)))
</code></pre>
</div>
<p>
Now to send the test e-mails…
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defvar</span> <span class="org-variable-name">my-brigade-test-emails</span> nil <span class="org-doc">"Set to a list of e-mail addresses."</span>)
(<span class="org-keyword">defun</span> <span class="org-function-name">my-brigade-send-test-to-me</span> ()
(<span class="org-keyword">interactive</span>)
(mailchimp-campaign-send-test-email (my-brigade-next-campaign) user-mail-address))
(<span class="org-keyword">defun</span> <span class="org-function-name">my-brigade-send-test</span> ()
(<span class="org-keyword">interactive</span>)
(<span class="org-keyword">if</span> my-brigade-test-emails
(mailchimp-campaign-send-test-email (my-brigade-next-campaign) my-brigade-test-emails)
(<span class="org-warning">error</span> <span class="org-string">"Set `</span><span class="org-string"><span class="org-constant">my-brigade-test-emails</span></span><span class="org-string">'."</span>)))
</code></pre>
</div>
<p>
And schedule it:
</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-brigade-schedule</span> ()
(<span class="org-keyword">interactive</span>)
(<span class="org-keyword">let</span> ((sched (format-time-string <span class="org-string">"%FT%T%z"</span> (org-read-date t t <span class="org-string">"+Sun 11:00"</span>) t))
(campaign (my-brigade-next-campaign)))
(mailchimp-campaign-schedule campaign sched)
(message <span class="org-string">"Scheduled %s"</span> (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">title</span> (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">settings</span> campaign)))))
</code></pre>
</div>
<p>
Progress, bit by bit! Here's a screenshot showing the Google Docs draft on one side and my web preview in the other:
</p>
<figure id="org9ca3831">
<img src="https://sachachua.com/blog/2026/01/emacs-updating-a-mailchimp-campaign-using-a-template-sending-test-e-mails-and-scheduling-a-campaign/2026-01-17_13-00-27.png" alt="2026-01-17_13-00-27.png">
<figcaption><span class="figure-number">Figure 1: </span>Google Docs and Mailchimp campaign preview</figcaption>
</figure>
<p>
It'll be even cooler if I can get some of this working via systemd persistent tasks so that they happen automatically, or have some kind of way for the other newsletter volunteers to trigger a rebuild. Anyway, here's <a href="https://github.com/sachac/mailchimp-el">https://github.com/sachac/mailchimp-el</a> in case the code is useful for anyone else.
</p>
<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#collaboration-bike-brigade-updating-mailchimp-directly">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2026/01/emacs-updating-a-mailchimp-campaign-using-a-template-sending-test-e-mails-and-scheduling-a-campaign/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%2F01%2Femacs-updating-a-mailchimp-campaign-using-a-template-sending-test-e-mails-and-scheduling-a-campaign%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>Does One Call Oneself a Poet? - Take on Ruleshttps://takeonrules.com/2026/01/17/does-one-call-oneself-a-poet/2026-01-17T17:26:19.000Z<p>Related Links :: <span class="label">Tags:</span> <span role="list" aria-label="Tags for “Does One Call Oneself a Poet?”">
<span role="listitem" aria-label="“poetry” tag navigation"><a href="https://takeonrules.com/2026/01/07/bolstering-against-the-permeating-llm-language/" aria-label="Previous post tagged with “poetry” is “Bolstering Against the Permeating LLM Language”" title="Older post tagged with “poetry” is “Bolstering Against the Permeating LLM Language”"><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>
A bit of introspection and a #haiku. In part a post to say I’m still here.
</p>
<p>I wonder, what makes one a poet? And perhaps not the general case, but the
self-centered case.</p>
<p>Am I a poet?</p>
<p>I write poetry. I am an adept conjurer of analogies and metaphors. I have an
above average command of the English language. I write poems, scratching out
words to find the best (in the moment) forms, sometimes returning to prior
phrases.</p>
<p>At our local library, next week we’re kicking off a Personal Curriculum series.
I had been considering poetry as mine—though ham radio just joined the
consideration.</p>
<p>My bedroom bookshelf is packed with poetry. On occasion—though not often
enough—I find myself grabbing a book and reading a few poems. Life pours from
these works, bathing me in warmth.</p>
<p>We were driving back home, and as we were passing a wooded area that chirps and
whistles in spring from the tree frogs. At that moment, while driving in
silence, Jenny asked me what I was thinking about, I responded: frogs.</p>
<p>That spot along with the neighbors saying that a large bullfrog had come out of
hibernation earlier this month; when we had 55° Fahrenheit weather (and rain).</p>
<p>Which inspired the following haiku:</p>
<p class="verse">
Amidst icy woods<br />
New moon hiding snow and branch<br />
In the thaw, frog song.<br />
</p>
<p><a class="reply-by-email" href="mailto:reply-to@takeonrules.com?subject=RE:Does%20One%20Call%20Oneself%20a%20Poet%3f">Reply by Email</a></p>Bending Emacs 10: Agent Shell - Irrealhttps://irreal.org/blog/?p=135492026-01-17T15:40:52.000Z<p>
Álvaro Ramírez has a new <a href="https://xenodium.com/bending-emacs-episode-10-agent-shell">Bending Emacs video</a> up. This time it’s about his <a href="https://github.com/xenodium/agent-shell">agent-shell</a> app that serves as uniform Emacs interface to LLM agents supporting the <a href="https://agentclientprotocol.com/overview/introduction">Agent Client Protocol (ACP)</a>.
</p>
<p>
I’m not interested in LLM technology so you almost never see an Irreal post about it. I don’t know—and therefore have no opinion on—if it’s something real or just another venture capitalist fever dream. Still, if you <i>are</i> interested in LLMs, it’s nice to have an app like agent-shell that provides a uniform interface to most (all?) of them.
</p>
<p>
There’s a huge number of options and details to negotiate so an app like agent-shell is a real boon. Almost none of those options involve picking which shell you want to use. You simply choose one from a list of supported shells and work within that shell for the rest of your session.
</p>
<p>
There are <i>way</i> too many details for me to cover here. The video itself is 36 minutes, 34 seconds so there’s a lot of content to cover. If you are interested in LLMs, and especially if you use more than one, you should definitely watch this video and download agent-shell. It’s available on Melpa so installation is easy. Like all of Ramírez’s work, agent-shell seems like a well engineered app and it’s free so you have nothing to lose by trying it.</p>
Valve tweak Steam AI disclosure form for developers to clarify it's for content consumed by players - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/01/valve-tweak-steam-ai-disclosure-form-for-developers-to-clarify-its-for-content-consumed-by-players/2026-01-17T14:40:39.000ZBack in early 2024, Valve put up new rules for game developers on Steam to pull in some information about generative AI, and they now seem to have tweaked it.<p><img src="https://www.gamingonlinux.com/uploads/tagline_gallery/steam_plain_2025.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/01/valve-tweak-steam-ai-disclosure-form-for-developers-to-clarify-its-for-content-consumed-by-players/">GamingOnLinux</a>.</p>Proton Experimental brings updates for MonoGame, Rockstar Launcher and more - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/01/proton-experimental-brings-updates-for-monogame-rockstar-launcher-and-more/2026-01-17T14:22:14.000ZValve launched a new update for Proton Experimental for January 16th to improve various games and launchers working on SteamOS / Linux.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/734317010id28334gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/01/proton-experimental-brings-updates-for-monogame-rockstar-launcher-and-more/">GamingOnLinux</a>.</p>How game developers worldwide are reliving Y2K Japan, from Jet Set Radio to Dance Dance Revolution - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/how-game-developers-worldwide-are-reliving-y2k-japan-from-jet-set-radio-to-dance-dance-revolution2026-01-17T10:00:00.000Z<img src="https://assetsio.gnwcdn.com/Hyperyuki01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>
Many of today's game designers have, like me, grown up with Japanese Y2K style - the style of the late 90s and early 2000s that gave us not only fear of the end of the world due to a calendar change, but also the WipEout series, futuristic PlayStation 2 ads, and fashion that incorporated everything from glitter to holographic fabrics and cute crop tops.
</p>
<p>
In a media landscape that seldom shies away from homages and sequels, I’ve waited a long time for the influence of childhood favourites such as Dance Dance Revolution and Space Channel 5 to pop back up. After all, plenty of Western developers have taken inspiration from Japanese role-playing games, giving us <a href="https://www.rockpapershotgun.com/games/sea-of-stars">Sea of Stars</a>, <a href="https://www.rockpapershotgun.com/games/undertale">Undertale</a> and <a href="https://www.rockpapershotgun.com/games/clair-obscur-expedition-33">Clair Obscur: Expedition 33</a>, to name a few. Recently, I found some really cool games by Western developers that are living the Y2K dream with me, so it was time to dive into their inspirations and compare some childhood anime with some nerds.
</p> <p><a href="https://www.rockpapershotgun.com/how-game-developers-worldwide-are-reliving-y2k-japan-from-jet-set-radio-to-dance-dance-revolution">Read more</a></p>What are we all playing this weekend? - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/what-are-we-all-playing-this-weekend-3652026-01-17T08:00:00.000Z<img src="https://assetsio.gnwcdn.com/saturday-moving.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Saturdays are for… drat, look at the time! I shouldn't be writing an article. I should be loading boxes into vans. Frantically disassembling furniture. And stopping the friends who are 'helping' me move house from pausing to sip cups of tea. It's like they don't know how long I spent on the phone to the council booking parking permits. No, I couldn't possibly tell you. Well, twist my arm. 45 minutes.</p>
<p>So, if you're curled up in bed having a relaxing morning, I envy you. But know that I'm in that blessed window where I can 'accidentally' lose all the personalised mugs and t-shirts I've been given as presents over the years. You know, the ones the gift giver is always asking after or expecting to be on display. This is a window that only opens once every few years, and with both hands I'm throwing 'Boyz on tour mugs' out of it.</p>
<p><a href="https://www.rockpapershotgun.com/what-are-we-all-playing-this-weekend-365">Read more</a></p>These Deep-Sea Creatures Liked You on Hinge - McSweeney’shttps://www.mcsweeneys.net/articles/these-deep-sea-creatures-liked-you-on-hinge2026-01-16T18:00:00.000Z<h4>Black seadevil anglerfish<br /> <i>Twenty-five-years-old, monogamous, wants children</i></h4> <p><strong>What I’m looking for:</strong> A confident, independent female roughly twenty times my size with a dangly, glowing orb attached to her forehead.</p> <p><strong>Don’t hate me if I:</strong> Latch on to you and permanently fuse to your body until my head dissolves and our circulatory systems become one</p> <p><strong>This year, I want to:</strong> Delete this app <3</p> <div class='break'>- - -</div><h4>Giant squid<br /> <i>Fifteen feet long, Catholic, figuring out my dating goals</i></h4> <p><strong>Give me travel tips for:</strong> Two-thousand feet below sea level off the west coast of Norway—Spring break 2026 gonna be a movie!</p> <p><strong>If loving this is wrong, I don’t want to be right:</strong> <i>The Office</i></p> <p><strong>My love language is:</strong> Physical, tentacle-y touch</p> <div class='break'>- - -</div><h4>Hexactinellid sponge<br /> <i>Software engineer, nine thousand years old, <br /> twenty-eight centimeters tall</i></h4> <p><strong>I bet you can’t:</strong> Pronounce my name</p> <p><strong>Unusual skills:</strong> Asexual reproduction, limb regeneration</p> <p><strong>My perfect first date:</strong> You come over to the same spot where I have been rooted, and will be rooted, for my entire life, and we filter feed and chill</p> <div class='break'>- - -</div><h4>Greenland shark<br /> <i>Four hundred years old, Pisces, open to children</i></h4> <p><strong>I’ll fall for you if you:</strong> Trip me</p> <p><strong>Typical Sunday:</strong> Gym, football, video games</p> <p><strong>My simple pleasures:</strong> Cold, open waters and a dead animal carcass dinner</p> <div class='break'>- - -</div><h4>Sea lamprey<br /> <i>Four hundred fifty million years old</i></h4> <p><strong>I go crazy for:</strong> Blood</p> <p><strong>Change my mind about:</strong> Blood</p> <p><strong>I want someone who:</strong> Blood</p> <div class='break'>- - -</div><h4>Bobbit worm<br /> <i>Three years old, five centimeters tall, conservative</i></h4> <p><strong>My greatest strength:</strong> Burrowing my entire scaly, eyeless, brainless body into the sand</p> <p><strong>Let’s debate this topic:</strong> Be honest, do female bobbit worms really deserve the right to vote?</p> <p><strong>All I ask is that you:</strong> Don’t take yourself too seriously</p> <div class='break'>- - -</div><h4>Giant isopod<br /> <i>Freelancer at Freelance, Taurus, drinks occasionally</i></h4> <p><strong>I know the best spot in town for:</strong> Deep-sea detritus</p> <p><strong>I’m weirdly attracted to:</strong> Redheads</p> <p><strong>All I ask is that you:</strong> See me not for my hard, bony exoskeleton, but the empathetic, gooey water bug underneath. <3</p>[$] A free and open-source rootkit for Linux - LWN.nethttps://lwn.net/Articles/1053099/2026-01-16T17:57:32.000Z<p>
While there are several rootkits that target Linux, they have so far not fully
embraced the open-source ethos typical of Linux software.
Luckily, Matheus Alves has been working to remedy
this lack by creating
<a href="https://github.com/MatheuZSecurity/Singularity?tab=readme-ov-file#singularity---poc-of-stealthy-linux-kernel-rootkit">
an open-source rootkit called Singularity</a> for Linux systems. Users who feel
their computers are too secure can install the Singularity kernel module in
order to allow remote code execution, disable security features, and hide files
and processes from normal administrative tools. Despite its many features,
Singularity is not currently known to be in use in the wild — instead, it
provides security researchers with a testbed to investigate new detection and
evasion techniques.
</p>Third-person mech-action shooter roguelike RIG Riot gets a demo - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/01/third-person-mech-action-shooter-roguelike-rig-riot-gets-a-demo/2026-01-16T17:14:50.000ZGive me some of that sweet mech combat action - RIG Riot looks pretty fantastic, and now there's a demo available for you to try.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1290360367id28333gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/01/third-person-mech-action-shooter-roguelike-rig-riot-gets-a-demo/">GamingOnLinux</a>.</p>Don't worry about The Division, Ubisoft say as series executive producer jumps to Battlefield amid layoffs - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/dont-worry-about-the-division-ubisoft-say-as-series-executive-producer-jumps-to-battlefield-amid-layoffs2026-01-16T16:39:06.000Z<img src="https://assetsio.gnwcdn.com/the-division-series-creative-director-leaves-for-battlefield-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Julian Gerighty, a long-time key cog at Massive Entertainment, has announced that he's departing the Ubisoft-owned studio after 12 years to go and work on Battlefield at EA. His departure swiftly follows Ubisoft <a href="https://www.rockpapershotgun.com/having-asked-division-devs-to-lay-themselves-off-ubisoft-are-now-cutting-55-jobs-at-massive-and-ubisoft-stockholm">revealing earlier this week</a> that they're planning to lay off staff at Massive, with a voluntary redundancy process late last year reportedly having not resulted in enough departures to stave off this bloodletting.</p>
<p>Meanwhile, the publishers have opted to take the opportunity of Gerighty's departure to reassure folks that The Division series is just fine.</p>
<p><a href="https://www.rockpapershotgun.com/dont-worry-about-the-division-ubisoft-say-as-series-executive-producer-jumps-to-battlefield-amid-layoffs">Read more</a></p>DLSS 4.5 does look nicer, I just wish it would explain itself better - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/dlss-45-explained2026-01-16T16:18:19.000Z<img src="https://assetsio.gnwcdn.com/GeForce-RTX-graphics-cards.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p><a href="https://www.rockpapershotgun.com/nvidia-reveals-dlss-45-with-anti-aliasing-upgrades-and-a-dynamic-if-slightly-mad-6x-frame-gen-mode">DLSS 4.5</a> is out now, and while previous new versions of Nvidia’s performance-massaging upscaler would have required waiting around for game implementation – beyond the inevitable <a href="https://www.rockpapershotgun.com/games/cyberpunk-2077">Cyberpunk 2077</a> debut, anyway – it follows more recent additions in letting you impose it upon existing games from the off. That’s done via the <a href="https://www.rockpapershotgun.com/the-new-nvidia-app-is-out-now-justly-banishing-geforce-experience-to-history">Nvidia App</a> and its DLSS Override tools, which following an update on January 14th, is tooled up with what version 4.5 promises to be tangible visual improvements.</p>
<p>I’ve been testing it, both on this public Nvidia App release and on a pre-release beta build, and DLSS 4.5 can indeed deliver on the right settings. But it’s also more of a specialised tool than <a href="https://www.rockpapershotgun.com/nvidia-dlss-4-explained">DLSS 4</a>, and although backwards compatibility is welcome, it’s presented with an opaque naming system that has as much in common with algebra as it does with upscaling.</p>
<p><a href="https://www.rockpapershotgun.com/dlss-45-explained">Read more</a></p>Multiple Editing Instances Of A Single File - Irrealhttps://irreal.org/blog/?p=135472026-01-16T16:15:57.000Z<p>
Emacs has a couple of builtin ways of dealing with separate windows that are looking at the same file. The default method is to simply “open” the file again in a separate window. In this case you have two views into the same file. The windows may be looking at different parts of the file but any change made in one window appears in the other as well because both windows are using the same buffer.
</p>
<p>
Alternatively, you can open the second window by cloning the first buffer. That creates a second buffer with the same text and properties but they are distinct buffers that can have different point values, different narrowing, different major modes, different markers, different overlays, and different local variables. Nevertheless, any text or text property change made in one buffer is reflected in the other. Take a look at the <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Indirect-Buffers.html">Emacs manual for the details</a>.
</p>
<p>
You’d think that those two options would cover whatever you needed to do but Sacha Chua <a href="https://sachachua.com/blog/2026/01/emacs-lisp-editing-one-file-twice-at-the-same-time/">has a post that describes a case not covered by either</a>. In this case the user wants to display an SVG file in one window and the XML that generates it in another. The problem here is that the image is displayed with text properties so toggling the display in one window will cause it to affect the other window as well even if the other window is a cloned buffer.
</p>
<p>
Chua shows how to solve this by writing a bit of Elisp. The TL;DR is that she bypassed the code that checks if the target file is already opened in another buffer and simply creates a new buffer unconditionally. Of course, now you have to worry about syncing the text between the two buffers. Chua solves this by turning on <code>global-auto-revert-mode</code> so that when one file is saved, the other gets updated.
</p>
<p>
I’m always prattling about how having the Emacs source available from within the executable image coupled with the ability to make on the fly changes is one of Emacs’ magic powers. Chua’s solution is a nice example of this.</p>
Skyrim co-lead claims The Elder Scrolls 6's helm was once promised to him, and he envisioned a plot mirroring the best Star Wars film - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/skyrim-co-lead-claims-the-elder-scrolls-6s-helm-was-once-promised-to-him-and-he-envisioned-a-plot-mirroring-the-best-star-wars-film2026-01-16T15:38:00.000Z<img src="https://assetsio.gnwcdn.com/skyrim-co-lead-elder-scrolls-6-story-plan-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>According to long-time Bethesda developer and <a href="https://www.rockpapershotgun.com/games/the-elder-scrolls-v-skyrim">Skyrim</a> co-lead designer Kurt Kuhlmann, he was originally told he'd be leading the charge on basting the <a href="https://www.rockpapershotgun.com/the-elder-scrolls-6-is-progressing-really-well-bethesda-shout-from-the-kitchen-as-they-baste-a-gta-shaped-turkey">great turkey</a> that is the <a href="https://www.rockpapershotgun.com/games/the-elder-scrolls-6">The Elder Scrolls 6</a>. That didn't end up coming to pass and, having left Bethesda back in 2023, the developer's now spilled the beans as to the sort of story he envisioned the follow-up to The Elder Scrolls 6 telling.</p>
<p><a href="https://www.rockpapershotgun.com/skyrim-co-lead-claims-the-elder-scrolls-6s-helm-was-once-promised-to-him-and-he-envisioned-a-plot-mirroring-the-best-star-wars-film">Read more</a></p>Tabulo is chess meets Balatro and it's out now - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/01/tabulo-is-chess-meets-balatro-and-its-out-now/2026-01-16T15:04:42.000ZIs it chess? Is it Balatro? It's both, sort of. Tabulo is a pretty clever mixture of gameplay elements that looks set to hook you in.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1190443994id28332gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/01/tabulo-is-chess-meets-balatro-and-its-out-now/">GamingOnLinux</a>.</p>Security updates for Friday - LWN.nethttps://lwn.net/Articles/1054683/2026-01-16T14:14:02.000ZSecurity updates have been issued by <b>AlmaLinux</b> (gnupg2), <b>Debian</b> (firefox-esr), <b>Oracle</b> (cups, gnupg2, libpq, net-snmp, postgresql, postgresql:15, postgresql:16, transfig, and vsftpd), <b>Red Hat</b> (firefox), <b>SUSE</b> (apache2, curl, firefox, gpg2, hawk2, libcryptopp-devel, openCryptoki, python310, python311-urllib3, rke2, squid, and tomcat), and <b>Ubuntu</b> (cpp-httplib, git, python-apt, and simgear).EndeavourOS Linux gets an upgraded release with Ganymede Neo - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2026/01/endeavouros-linux-gets-an-upgraded-release-with-ganymede-neo/2026-01-16T14:14:00.000ZAfter a major update released for EndeavourOS late last year, a new refresh is out with Ganymede Neo with a big tweak for NVIDIA GPU owners.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/801970362id28330gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2026/01/endeavouros-linux-gets-an-upgraded-release-with-ganymede-neo/">GamingOnLinux</a>.</p>