<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Amin Bandali</title>
<description>publications by bandali</description>
<link>https://kelar.org/~bandali/</link>
<language>en</language>
<lastBuildDate>Sun, 31 May 2026 22:30:00 -0400</lastBuildDate>
<pubDate>Sun, 31 May 2026 22:30:00 -0400</pubDate>
<ttl>1440</ttl>
<atom:link href="https://kelar.org/~bandali/" rel="alternate" type="text/html" />

<item>
<title>Free software activities in May 2026</title>
<link>https://kelar.org/~bandali/news/fsa-202605.html</link>
<atom:link href="https://kelar.org/~bandali/news/fsa-202605.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:news/fsa-202605</guid>
<pubDate>Sun, 31 May 2026 22:30:00 -0400</pubDate>
<atom:updated>2026-05-31T22:30:00-0400</atom:updated>
<content:encoded><![CDATA[
<p>
Hello and welcome to my May 2026 free software activities report.
A lot's been going on in my life offline so I took a bit of a hiatus
from doing these reports, but I've had a fairly productive month of
May so I thought it'd be nice to do another one for this month.
</p>
<section id="outline-container-gnu-fsf" class="outline-2">
<h2 id="gnu-fsf">GNU &amp; FSF</h2>
<div class="outline-text-2" id="text-gnu-fsf">
<ul class="org-ul">
<li><a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>:

<ul class="org-ul">
<li><a href="https://kelar.org/~bandali/gnu/emacs/ffs-0.2.2.html">ffs-0.2.2</a>: I finally polished and published my <code>ffs</code> package for
GNU Emacs on GNU ELPA.  Many thanks to <a href="https://protesilaos.com">Protesilaos</a> for rounds of
code review and feedback for improving and polishing the package
in preparation for submission to GNU ELPA.</li>

<li><a href="https://bugs.gnu.org/81101">bug#81101</a>: Trying to visit <a href="https://www.emacswiki.org">https://www.emacswiki.org</a> in EWW
I noticed it fails with a <code>Somebody wants you to give them money</code>
error due to the anti-bot challenge being served with a HTTP 402
(Payment Required) response.  So I landed a patch <a href="https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-31&amp;id=12eec781ed69c4fc7611e8c9a1953ad33da98a0c"><code>12eec781ed6</code></a> to
no longer do that.  Thanks to Emacs comaintainer Sean Whitton
for reviewing and approving my proposed patch.</li>

<li><a href="https://bugs.gnu.org/81107">bug#81107</a>: I noticed that in EWW, unlike <code>&lt;input type="submit"&gt;</code>
HTML buttons, <code>&lt;button&gt;</code> elements were not tab-stoppable, leading
to poorer usability and accessibility.  So I landed a patch
<a href="https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-31&amp;id=ec3d662de0bab08f8b68666d13c662c3193c2645"><code>ec3d662de0b</code></a> to fix that.  Thanks to Emacs comaintainer Eli
Zaretskii for reviewing, providing feedback, and accepting my
proposed change.</li>

<li><a href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html">Emacs Chat with Sacha Chua</a>: I joined Sacha for a <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/">new episode</a> of
her Emacs Chat podcast, where we talked about Emacs and life.
I gave a quick tour of my Emacs configuration, discussing at
length my configurations for EXWM (Emacs X Window Manager) among
other topics like Emacs's facility for visually indicating buffer
boundaries in the fringe by setting <code>indicate-buffer-boundaries</code>
and my convenience configuration macros.</li>
</ul></li>

<li><a href="https://www.gnu.org/gnu/gnu-structure.html#assistant-gnuisances">maintainers@</a>: I started the next long-overdue round of emails to GNU
package maintainers to confirm the contact information we have on
file for them and get a brief status update about their packages.
Emails are sent in small batches to keep the workload of handling
the responses manageable for assistant GNUisances.</li>

<li><a href="https://www.gnu.org/spotlight/spotlight.html">GNU Spotlight</a>: I prepared and sent the May GNU Spotlight to the FSF
campaigns team for publication on the FSF's community blog and the
monthly Free Software Supporter newsletter.</li>
</ul>
</div>
</section>
<section id="outline-container-debian" class="outline-2">
<h2 id="debian">Debian</h2>
<div class="outline-text-2" id="text-debian">
<p>
I've begun the work toward updating the Jami package in Debian
unstable again, which means I need to package new releases of its
direct and indirect dependencies.  For OpenDHT, I need to update
RESTinio, and to do that I first need to package expected-lite and
sobjectizer for Debian:
</p>

<ul class="org-ul">
<li><a href="https://bugs.debian.org/1120837">#1120837</a>: ITP: expected-lite &ndash; expected objects for C++11 and later</li>

<li><a href="https://bugs.debian.org/1137609">#1137609</a>: ITP: sobjectizer &ndash; C++ implementation of Actor,
Publish-Subscribe, and CSP models</li>
</ul>

<p>
I've been working on packaging both and hope to have them uploaded to
the archive in the next days and weeks.
</p>

<p>
That's it for this month's report.
</p>

<p>
Take care, and so long for now.
</p>
]]></content:encoded></item>

<item>
<title>Thinking about life - chat with Protesilaos</title>
<link>https://kelar.org/~bandali/life/thinking-with-prot.html</link>
<atom:link href="https://kelar.org/~bandali/life/thinking-with-prot.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:life/thinking-with-prot</guid>
<pubDate>Sat, 23 May 2026 13:30:00 -0400</pubDate>
<atom:updated>2026-05-23T22:39:15-0400</atom:updated>
<content:encoded><![CDATA[
<p>
In the recent weeks I've been engaging <a href="https://protesilaos.com/coach/">Prot as a coach</a> to help review
my <a href="https://kelar.org/~bandali/gnu/emacs/ffs-0.2.2.html">new <code>ffs</code> package for GNU Emacs</a> as I worked on preparing it for
inclusion in GNU ELPA, as well as discussing other Emacs- and
life-related topics.
</p>

<p>
<b>UPDATE 2026-05-23 22:39:15 -0400:</b> Prot also published an article
about our session on his website:
<a href="https://protesilaos.com/commentary/2026-05-23-life-issues-and-philosophy-amin-bandali/">https://protesilaos.com/commentary/2026-05-23-life-issues-and-philosophy-amin-bandali/</a>
</p>

<p>
In our nearly 2-hour conversation, we discussed at length and in depth
various aspects of life in the current times.  For instance, feeling
overwhelmed in the face of innumerable things happening at once, with
technology changing our perception and making events feel proximate
and imminent.
</p>

<p>
We talked about seasonality and rhythms in life, including in relation
to burnout and knowing our own limitations, and descriptive vs
prescriptive thinking when reflecting on the expectations we may place
on our self when comparing our self to others through the lens of our
necessarily-incomplete impressions and glimpses of their lives.  We
discussed absence or loss as a dual to presence or persistence in the
process of life.  How with our memories and through embodying the
philosophy and teachings of departed loved ones their essence and
legacy continues to live on within us.  But also loss in the sense of
us losing parts of our self in life-defining moments while preserving
other parts and gaining new ones, being liberated of some of the
burdens of our past self and in effect becoming someone else in the
process.
</p>

<p>
In being true to our self, we talked about humans as multi-faceted
beings and the importance of expressing and giving a voice to these
different aspects of our self, and keeping alive that child-like
sense of awe and wonder.  To live a life where the pace and rhythms of
our environment are in sync with our internal rhythms, and to not give
others undue power over us or our happiness through trying to live
according to their prescribed standards or expectations.
</p>

<p>
I also learned more about Prot's practical philosophy of situational
awareness in life, not merely as a means for survival, but also as a
way of appreciating all of the beauty that surrounds us, and a method
for gaining the knowledge and skills to apply what we learn from
patterns in one area of life to other areas.
</p>

<p>
We concluded our session with a mention to the concept of sanctity, to
set aside a sacred time or place for our self wherein no distractions
are allowed, where we can unwind, rest, and recharge for whatever
comes next.
</p>

<p>
Here is the video recording of our session, which I share with Prot's
permission:
</p>

<video preload="metadata" controls="controls" width="720" src="https://archive.org/download/thinking-life-prot-20260521/thinking-life-prot-20260521.mp4" poster="https://kelar.org/~bandali/life/thinking-with-prot-poster.jpg" id="org4816dcc">
<source src="https://archive.org/download/thinking-life-prot-20260521/thinking-life-prot-20260521.mp4" type="video/mp4">
<p>
Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br />
<a href="https://archive.org/download/thinking-life-prot-20260521/thinking-life-prot-20260521.mp4">[ please watch the video in your favourite streaming media player ]​</a>
</p>
</video>

<p>
You can <a href="https://archive.org/details/thinking-life-prot-20260521">view</a> or <a href="https://archive.org/download/thinking-life-prot-20260521/thinking-life-prot-20260521.mp4">download the full-resolution video</a> from the Internet
Archive.
</p>

<p>
Like Prot, I am invigorated and inspired to live a full, honest life.
To do my best, do what I do in earnest, and make the best of what I
have.
</p>

<p>
Take care, and so long for now.
</p>
]]></content:encoded></item>

<item>
<title>ffs 0.2.2 released</title>
<link>https://kelar.org/~bandali/gnu/emacs/ffs-0.2.2.html</link>
<atom:link href="https://kelar.org/~bandali/gnu/emacs/ffs-0.2.2.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:gnu/emacs/ffs-0.2.2</guid>
<pubDate>Thu, 21 May 2026 17:33:33 -0400</pubDate>
<atom:updated>2026-05-22T06:55:10-0400</atom:updated>
<content:encoded><![CDATA[
<p>
<code>ffs</code> provides a minor mode for simple plain text presentations in
Emacs, where the slides are separated using the <code>page-delimiter</code>, by
default the form feed character (<code>^L</code>).
</p>

<p>
I wrote <code>ffs</code> in early 2022 for my LibrePlanet 2022 presentation <a href="https://kelar.org/~bandali/essays/net-beyond-web.html">the
Net beyond the Web</a>, and earlier this year decided to polish it towards
being a proper package and submit it to GNU ELPA.  The manual still
needs some more work, but the overall package is in pretty good shape
so I submitted for inclusion in GNU ELPA.
</p>

<ul class="org-ul">
<li>Package name (GNU ELPA): <a href="https://elpa.gnu.org/packages/ffs.html"><code>ffs</code></a></li>
<li>Official manual: <a href="https://kelar.org/~bandali/gnu/emacs/ffs.html">https://kelar.org/~bandali/gnu/emacs/ffs.html</a></li>
<li>Change log: <a href="https://kelar.org/~bandali/gnu/emacs/ffs-changelog.html">https://kelar.org/~bandali/gnu/emacs/ffs-changelog.html</a></li>
<li>Git repository: <a href="https://git.kelar.org/~bandali/ffs">https://git.kelar.org/~bandali/ffs</a></li>
<li>Backronyms: fabulous foolproof slides - for freedom's sake -
ffs flips slides</li>
</ul>

<p>
<code>ffs</code> and I owe a debt of gratitude to Protesilaos for rounds of
code review and feedback for improving and polishing the package in
preparation for submission to GNU ELPA.  You can watch videos of these
sessions posted earlier on my website:
</p>

<ul class="org-ul">
<li><a href="https://kelar.org/~bandali/gnu/emacs/ffs-code-review-prot.html">FFS code review with Protesilaos</a></li>
<li><a href="https://kelar.org/~bandali/gnu/emacs/ffs-emacs-ext-prot.html">FFS code review and Emacs extensibility with Protesilaos</a></li>
</ul>

<p>
Further, inspiration for parts of <code>ffs</code>'s implementation was
gratefully drawn from Protesilaos's <a href="https://protesilaos.com/emacs/logos">Logos</a> package for Emacs.
</p>

<p>
Dedicated to the loving memory of <a href="https://kelar.org/~bandali/life/farangis.html">Farangis Yousefinia</a>.
</p>

<p>
Below are the release notes.
</p>

<hr />
<section id="outline-container-ffs-0.2.2" class="outline-2">
<h2 id="ffs-0.2.2">Version 0.2.2 on 2026-05-21</h2>
<div class="outline-text-2" id="text-ffs-0.2.2">
<p>
First release of <code>ffs</code> on GNU ELPA.
</p>

<p>
The attempted build of ffs 0.2.1 within GNU ELPA build sandbox failed
with an <code>Error: void-function (org-texinfo-kbd-macro)</code> due to use of
<code>#+macro: kbd (eval (org-texinfo-kbd-macro $1))</code> in ffs.org for better
formatting of key sequences in the exported Texinfo copy.  This seems
to have happened for the specific case of generating a plain text
README using <code>ox-ascii</code> where ELPA didn't load <code>ox-texinfo</code>.  To try
and mitigate this, a <code>README.md</code> has been added for use as the package
README instead of ffs.org.  If not sufficient, a Texinfo copy of the
ffs manual will be shipped instead of the Org one in the next release.
</p>

<p>
ffs 0.2.2 also includes small fixes and improvements throughout
<code>ffs.el</code> from Stefan Monnier, and additional feedback to be addressed
in future releases.
</p>
</div>
</section>
<section id="outline-container-ffs-0.2.1" class="outline-2">
<h2 id="ffs-0.2.1">Version 0.2.1 on 2026-05-20</h2>
<div class="outline-text-2" id="text-ffs-0.2.1">
<p>
The attempted build of ffs 0.2.0 within GNU ELPA build sandbox failed
with a "Cannot include file" error on the "#+include: fdl.org" in the
manual.  So, as a workaround, we switch to using the official Texinfo
copy of the GNU FDL license rather than an Org copy.
</p>
</div>
</section>
<section id="outline-container-ffs-0.2.0" class="outline-2">
<h2 id="ffs-0.2.0">Version 0.2.0 on 2026-05-19</h2>
<div class="outline-text-2" id="text-ffs-0.2.0">
<p>
First release of <code>ffs</code> intended for GNU ELPA.
</p>

<p>
After a few years of inactivity, in early 2026 I decided to dust off
<code>ffs.el</code>, polish and document it, and offer for inclusion in GNU ELPA
as a proper package.
</p>
</div>
<div id="outline-container-ffs-0.2.0-ffs-default-face-height" class="outline-3">
<h3 id="ffs-0.2.0-ffs-default-face-height">Default value of <code>ffs-default-face-height</code> changed to nil</h3>
<div class="outline-text-3" id="text-ffs-0.2.0-ffs-default-face-height">
<p>
To minimize unexpected and/or unnecessary changes out-of-the-box, the
default value of <code>ffs-default-face-height</code> has been changed to nil.
</p>
</div>
</div>
<div id="outline-container-ffs-0.2.0-ffs-edit-buffer-name" class="outline-3">
<h3 id="ffs-0.2.0-ffs-edit-buffer-name"><code>ffs-edit-buffer-name</code> demoted from user option to variable</h3>
<div class="outline-text-3" id="text-ffs-0.2.0-ffs-edit-buffer-name">
<p>
This is not an important user-facing setting, so to help avoid
overwhelming users with many options, this has been demoted from a
user option to a variable.
</p>
</div>
</div>
<div id="outline-container-ffs-0.2.0-new-user-options" class="outline-3">
<h3 id="ffs-0.2.0-new-user-options">Several new user options for customizing <code>ffs</code>'s behaviour</h3>
<div class="outline-text-3" id="text-ffs-0.2.0-new-user-options">
<p>
As part of the effort to bring <code>ffs</code> more in line with the conventions
of other existing Emacs packages, the mechanisms for toggling various
parts of Emacs's interface to minimize visual clutter were changed
from being minor modes to being customizable user options.  These are
the replacement new user options, with a default value of nil:
</p>

<ul class="org-ul">
<li><code>ffs-hide-cursor</code></li>
<li><code>ffs-hide-mode-line</code></li>
<li><code>ffs-hide-header-line</code></li>
</ul>

<p>
Their value is buffer-local, and may be set globally using
<code>setq-default</code>.  See the <a href="https://kelar.org/~bandali/gnu/emacs/ffs.html#Sample-configuration">sample configuration</a> in the manual for an
example of how to customize them.
</p>

<p>
The new <code>ffs-page-delimiter</code> user option defines the page delimiter
inserted by <code>ffs-edit-done</code> when inserting a new slide.  Emacs's
<code>page-delimiter</code> regexp should be able to match <code>ffs-page-delimiter</code>'s
value, so if you use a custom <code>page-delimiter</code> be sure to customize
<code>ffs-page-delimiter</code> accordingly.
</p>

<p>
The new <code>ffs-echo-progress</code> user option controls whether to display in
echo area the progress through the slides.  When non-nil, changing
slides will also display the progress through the slides in the echo
area.  The format of the displayed progress can be customized using
the new <code>ffs-echo-progress-format</code> user option.
</p>

<p>
The new <code>ffs-edit-display-buffer-alist</code> user option may be used to
control the Window configuration for the <code>ffs-edit</code> buffer.  By
default, it will display the <code>ffs-edit</code> buffer in the same window.
</p>

<p>
The new <code>ffs-edit-done-hook</code> user option may be used to define hooks
to be run at the end of <code>ffs-edit-done</code> after returning to the main
<code>ffs</code> presentation buffer.
</p>

<p>
Lastly, a new <code>ffs-find-speaker-notes-function</code> variable was added to
allow customizing the find function used for opening the speaker's
notes file, defaulting to <code>find-file-other-frame</code>.
</p>
</div>
</div>
</section>
<section id="outline-container-ffs-0.1.0" class="outline-2">
<h2 id="ffs-0.1.0">Version 0.1.0 on 2022-05-19</h2>
<div class="outline-text-2" id="text-ffs-0.1.0">
<p>
Initial publication of <code>ffs.el</code> as part of my personal configurations
for GNU Emacs.
</p>

<p>
My first attempt at this concept was a now-archived <a href="https://git.kelar.org/~bandali/ffs/tree/ffsanim.el?id=aed420fca1af108e023eabf2b527850b559cd24c"><code>ffsanim.el</code></a>,
a major mode implementation that used Emacs's <code>animate</code> library to
animate slide texts onto the screen.  Shortly after realizing the
shortcomings of that approach, I abandoned it in favour a minor mode
implementation and published version <code>0.1.0</code> of what is now <code>ffs</code> in
my <a href="https://git.kelar.org/~bandali/configs">personal configs repository</a>.
</p>

<p>
I used this implementation for presenting my LibrePlanet 2022 talk,
<a href="https://kelar.org/~bandali/essays/net-beyond-web.html">The Net beyond the Web</a>.
</p>

<p>
I picked "ffs" as the package name, the acronym for form feed slides.
</p>
]]></content:encoded></item>

<item>
<title>FFS code review and Emacs extensibility with Protesilaos</title>
<link>https://kelar.org/~bandali/gnu/emacs/ffs-emacs-ext-prot.html</link>
<atom:link href="https://kelar.org/~bandali/gnu/emacs/ffs-emacs-ext-prot.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:gnu/emacs/ffs-emacs-ext-prot</guid>
<pubDate>Thu, 14 May 2026 22:55:33 -0400</pubDate>
<atom:updated>2026-05-15T08:50:10-0400</atom:updated>
<content:encoded><![CDATA[
<p>
In the recent weeks I've been engaging <a href="https://protesilaos.com/coach/">Prot as an Emacs coach</a> to help
with doing review passes over my upcoming <a href="https://git.kelar.org/~bandali/ffs"><code>ffs</code></a> package as I work on
polishing and documenting it in preparation for offering it for
inclusion in GNU ELPA.
</p>

<p>
<b>UPDATE 2026-05-15 08:50:10 -0400:</b> Prot also published an article
about our session on his website:
<a href="https://protesilaos.com/codelog/2026-05-15-emacs-amin-bandali-ffs-display-buffer-org-capture/">https://protesilaos.com/codelog/2026-05-15-emacs-amin-bandali-ffs-display-buffer-org-capture/</a>
</p>

<p>
Today we had our third session where we started by reviewing and
talking about my recent changes to <code>ffs</code>, then ventured to other
Emacs-related topics with the overarching theme of the flexibility
and extensibility of GNU Emacs, including <code>display-buffer-alist</code>,
keyboard macros, defining a custom <a href="https://kelar.org/~bandali/gnu/emacs/dotemacs.html#lisp-bandali-oxen"><code>ox-bhtml</code></a> Org export backend
derived from Org's <code>ox-html</code> for ultimate flexibility when exporting
my site's pages from Org to HTML, Org capture, plain text files and
Emacs's <code>diary</code> and how it compares to <code>org-agenda</code>, and keeping a
journal with the help of Emacs.
</p>

<p>
Here is the video recording of our session, which I share with Prot's
permission:
</p>

<video preload="metadata" controls="controls" width="720" src="https://archive.org/download/ffs-emacs-ext-prot-20260514/ffs-emacs-ext-prot-20260514.mp4" poster="https://kelar.org/~bandali/gnu/emacs/ffs-emacs-ext-prot-poster.jpg" id="org9614584">
<source src="https://archive.org/download/ffs-emacs-ext-prot-20260514/ffs-emacs-ext-prot-20260514.mp4" type="video/mp4">
<p>
Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br />
<a href="https://archive.org/download/ffs-emacs-ext-prot-20260514/ffs-emacs-ext-prot-20260514.mp4">[ please watch the video in your favourite streaming media player ]​</a>
</p>
</video>

<p>
You can <a href="https://archive.org/details/ffs-emacs-ext-prot-20260514">view</a> or <a href="https://archive.org/download/ffs-emacs-ext-prot-20260514/ffs-emacs-ext-prot-20260514.mp4">download the full-resolution video</a> from the Internet
Archive.
</p>

<p>
Lastly, here is the snippet Prot shared for having Isearch treat space
as a wildcard, helpful for more easily matching multiple parts of a
line:
</p>

<div class="org-src-container">
<pre class="src src-elisp"><code>(setq search-whitespace-regexp ".*?")
(setq isearch-lax-whitespace t)
(setq isearch-regexp-lax-whitespace nil)
</code></pre>
</div>

<p>
Take care, and so long for now.
</p>
]]></content:encoded></item>

<item>
<title>FFS code review with Protesilaos</title>
<link>https://kelar.org/~bandali/gnu/emacs/ffs-code-review-prot.html</link>
<atom:link href="https://kelar.org/~bandali/gnu/emacs/ffs-code-review-prot.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:gnu/emacs/ffs-code-review-prot</guid>
<pubDate>Thu, 07 May 2026 22:10:33 -0400</pubDate>
<atom:updated>2026-05-07T22:10:33-0400</atom:updated>
<content:encoded><![CDATA[
<p>
In the recent weeks I've been engaging <a href="https://protesilaos.com/coach/">Prot as an Emacs coach</a> to help
with doing review passes over my upcoming <a href="https://git.kelar.org/~bandali/ffs"><code>ffs</code></a> package as I work on
polishing and documenting it in preparation for offering it for
inclusion in GNU ELPA.
</p>

<p>
Yesterday we had our second session focused on <code>ffs</code>, which I recorded
and share publicly with everyone with Prot's permission, so that
others can also benefit from Prot's insights and experience as we
discuss various aspects of Emacs package development with the concrete
example of <code>ffs</code>.
</p>

<p>
Here is the video recording of our session:
</p>

<video preload="metadata" controls="controls" width="720" src="https://archive.org/download/ffs-code-review-prot-20260506/ffs-code-review-prot-20260506.mp4" poster="https://kelar.org/~bandali/gnu/emacs/ffs-code-review-prot-poster.jpg" id="org97db585">
<source src="https://archive.org/download/ffs-code-review-prot-20260506/ffs-code-review-prot-20260506.mp4" type="video/mp4">
<p>
Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br />
<a href="https://archive.org/download/ffs-code-review-prot-20260506/ffs-code-review-prot-20260506.mp4">[ please watch the video in your favourite streaming media player ]​</a>
</p>
</video>

<p>
You can <a href="https://archive.org/details/ffs-code-review-prot-20260506">view</a> or <a href="https://archive.org/download/ffs-code-review-prot-20260506/ffs-code-review-prot-20260506.mkv">download the full-resolution video</a> from the Internet
Archive.
</p>

<p>
I addressed most of Prot's feedback about <code>ffs</code> from our first
session, and I'll be working on the changes we discussed in this
session in the next days.
</p>

<p>
In the last third of the video we switched topics to discuss a few
Emacs-related tangents including adding a 'padding' effect for the
mode line and its constructs, and distilling and separating the
easily-reusable package-like parts of one's Emacs configuration from
the actual configuration of those parts (e.g. the distinction of
<code>prot-lisp</code> and <code>prot-emacs-modules</code> in <a href="https://protesilaos.com/emacs/dotemacs">Prot's Emacs configuration</a>).
</p>

<p>
For mode line padding, here is the snippet I'm using with Prot's
<code>doric-themes</code>:
</p>

<div class="org-src-container">
<pre class="src src-elisp"><code>(doric-themes-with-colors
  (custom-set-faces
   `(mode-line
     ((t :box (:line-width 6 :color ,bg-shadow-intense))))
   `(mode-line-inactive
     ((t :box (:line-width 6 :color ,bg-shadow-subtle))))
   `(mode-line-highlight
     ((t :box (:color ,bg-shadow-intense))))))
</code></pre>
</div>

<p>
Take care, and so long for now.
</p>
]]></content:encoded></item>

<item>
<title>Emacs Chat with Sacha Chua</title>
<link>https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html</link>
<atom:link href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html" rel="alternate" type="text/html" />
<guid isPermaLink="false">tag:kelar.org,2026:~bandali/rss20.xml:gnu/emacs/emacs-chat-202605</guid>
<pubDate>Tue, 05 May 2026 19:43:44 -0400</pubDate>
<atom:updated>2026-05-05T19:43:44-0400</atom:updated>
<content:encoded><![CDATA[
<p>
Yesterday I joined Sacha Chua for a new episode of her Emacs Chat
podcast, where we talked about Emacs and life.  I gave a quick tour
of my Emacs configuration, discussing at length my configurations for
EXWM (Emacs X Window Manager) among other topics like Emacs's facility
for visually indicating buffer boundaries in the fringe by setting
<code>indicate-buffer-boundaries</code> and my convenience configuration macros.
</p>

<video preload="metadata" controls="controls" width="720" src="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp4" poster="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605-poster.jpg" id="org7311bb4">
<source src="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp4" type="video/mp4">
<track label="English" kind="subtitles" srclang="en" src="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605-captions.vtt" default="" />
<p>
Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br />
<a href="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp4">[ please watch the video in your favourite streaming media player ]​</a>
</p>
</video>

<p>
The above video is provided with <a href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605-captions.vtt">closed captions</a> and the below
transcript courtesy of Sacha with minor fixes and formatting by me.
I've included some of Sacha's screenshots from our chat, you can see
the rest on <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/">the episode's page on Sacha's blog</a>.
</p>

<p>
A few links from our chat:
</p>

<ul class="org-ul">
<li><a href="https://kelar.org/~bandali/gnu/emacs/dotemacs.html">my literate GNU Emacs configuration</a>
<ul class="org-ul">
<li><a href="https://git.kelar.org/~bandali/configs/tree/.emacs.d">.emacs.d - configs - My configuration for GNU Emacs and other programs</a></li>
</ul></li>
<li><a href="https://git.kelar.org/~bandali/qmk_firmware">personal fork of QMK firmware with my keymaps</a>
<ul class="org-ul">
<li><a href="https://git.kelar.org/~bandali/qmk_firmware/tree/keyboards/zsa/voyager/keymaps/bandali/keymap.c">my custom keymap for ZSA Voyager split ergonomic keyboard</a></li>
</ul></li>
<li><a href="https://git.kelar.org/~bandali/ffs">my upcoming <code>ffs</code> (Form Feed Slides) package for simple presentations</a></li>
</ul>

<p>
It was a lot of fun - thanks again for having me, Sacha!
</p>

<p>
Take care, and so long for now.
</p>

<section id="outline-container-transcript" class="outline-2">
<h2 id="transcript">Transcript</h2>
<div class="outline-text-2" id="text-transcript">
<p>For the full transcript please see:
<a href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html"
>https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html</a></p>
</div>
</section>
]]></content:encoded></item>

<item>
<title>The People of Emacs</title>
<link>https://kelar.org/~bandali/people-of-emacs.html</link>
<atom:link href="https://kelar.org/~bandali/people-of-emacs.html" rel="alternate" type="text/html" />
<atom:link href="https://kelar.org/~bandali/people-of-emacs.txt" rel="alternate" type="text/plain" />
<guid isPermaLink="false">tag:kelar.org,2021:~bandali/rss20.xml:2025/12/31/people-of-emacs</guid>
<pubDate>Wed, 31 Dec 2025 09:09:09 -0500</pubDate>
<atom:updated>2025-12-31T09:09:09-05:00</atom:updated>
<content:encoded><![CDATA[
<p>GNU Emacs has been my primary computing environment of choice for over
a decade.  Emacs has enabled me to perform a wide array of tasks
involving human and computer languages, such as reading and writing
notes, emails, chats, programs, and more, all in a cohesive and
consistent environment that I can tailor exactly to my needs and
liking.</p>
<p>Coming from a Vim background, I started my Emacs journey trying some
configuration frameworks that provided vi-like key bindings, and after
a few Emacs bankruptcies, ended up with my current homegrown
configuration that I wrote from scratch gradually over the last
7 years, with inspiration from the configurations of some folks who
shared theirs publicly.  Though my configuration has been mostly
stable for a few years now and I consciously keep the number of
external packages I use very small, I occasionally add small bits and
pieces to my configuration when I&#8217;m inspired after learning about a
neat feature or package on the blogs aggregated on <a href="https://planet.emacslife.com">Planet Emacslife</a>,
the messages sent to the Emacs mailing lists, or the videos from the
annual <a href="https://emacsconf.org">EmacsConf</a> conference.</p>
<p>I like getting a glimpse of other people&#8217;s worlds through the lens of
their creative works such as writings, be it prose or Emacs Lisp.
That&#8217;s only possible when people share freely, free as in freedom.
I&#8217;m thankful to Richard Stallman for his foresight to imbue GNU Emacs
with that freedom from the very beginning and for his lifelong fight
for computer user freedom, and to the many other folks who have joined
the free software movement since then and have fought the good fight.</p>
<p>I&#8217;ve been inspired and encouraged by many awesome Emacs people through
the years.  People like Corwin Brust with his joyful creative energy
around Emacs and the road to software freedom, Sacha Chua and her
philosophy of leading a life of learning, sharing, and scaling, Gopar
and his enthusiasm for Emacs and its intersection with the Python
world, folks like Protesilaos Stavrou and Greg Farough who discovered
Emacs initially as non-programmers yet were enamoured by its
embodiment of software freedom in practice and went on to integrate it
into their everyday lives, and shoshin of the Cicadas cooperative at
the intersection of humanity and technology sharing his passion for
the human element and community by developing and contributing input
methods for his ancestral language of Lakota to GNU Emacs.  I&#8217;m deeply
inspired by each of these wonderful people, and grateful for having
known them and for each of their unique perspectives and life stories
with which they have enriched my experience in Emacs and the free
software world.</p>
<p>As wonderful and impactful as Emacs has been in the lives of the many
who have come to know it throughout the decades that it&#8217;s been around,
it would not have become what it has been, what it is today, and what
it may become in the future without its community of passionate users
and contributors.  The People of Emacs are all of us.  Here&#8217;s to many
more of us, enjoying many more years of Emacs and software freedom
together even if spread far apart.</p>
<p>Take care, and so long for now.</p>
<blockquote>
<p>Inspired by the <a href="https://www.emacswiki.org/emacs/Carnival">Emacs Carnival</a> theme for this month,
<a href="https://curious.port111.com/2025/11/01/emacs-carnival-december-the-people.html">The People of Emacs</a>.  Thanks to George Jones for hosting.</p>
</blockquote>
]]></content:encoded></item>

<item>
<title>Reading and writing emails in GNU Emacs with Gnus</title>
<link>https://kelar.org/~bandali/emacsconf-2025-gnus.html</link>
<atom:link href="https://kelar.org/~bandali/emacsconf-2025-gnus.html" rel="alternate" type="text/html" />
<atom:link href="https://kelar.org/~bandali/emacsconf-2025-gnus.txt" rel="alternate" type="text/plain" />
<guid isPermaLink="false">tag:kelar.org,2021:~bandali/rss20.xml:2025/12/06/emacsconf-2025-gnus</guid>
<pubDate>Sat, 06 Dec 2025 10:50:00 -0500</pubDate>
<atom:updated>2025-12-06T10:50:00-05:00</atom:updated>
<content:encoded><![CDATA[
<p>At the 10th anniversary of my involvement in EmacsConf, I&#8217;m finally
giving my first ever talk at the conference, for EmacsConf 2025. :)
In this talk, I give a quick introduction to Gnus and show a basic
configuration for reading and writing email with Gnus and Message.</p>
<p>You can watch the video below, or from the talk&#8217;s page on the
EmacsConf 2025 wiki: <a href="https://emacsconf.org/2025/talks/gnus">https://emacsconf.org/2025/talks/gnus</a></p>
<div><video preload="metadata" controls="controls" width="720" src="https://archive.org/download/emacsconf-2025-gnus/emacsconf-2025-gnus.mp4" poster="https://kelar.org/~bandali/emacsconf-2025-gnus-poster.jpg">
<source src="https://archive.org/download/emacsconf-2025-gnus/emacsconf-2025-gnus.mp4" type="video/mp4"></source>
<track label="English" kind="captions" srclang="en" src="https://kelar.org/~bandali/emacsconf-2025-gnus-captions.vtt" default=""></track>
<track kind="chapters" label="Chapters" src="https://kelar.org/~bandali/emacsconf-2025-gnus-captions-chapters.vtt"></track>
<p>Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br>
<a href="https://archive.org/download/emacsconf-2025-gnus/emacsconf-2025-gnus.mp4">[
please watch the video in your favourite streaming media player
]</a></p></video></div>
<p>The above video is provided with <a href="https://kelar.org/~bandali/emacsconf-2025-gnus-captions.vtt">closed captions</a> and a <a href="https://kelar.org/~bandali/emacsconf-2025-gnus-transcript.txt">transcript</a>
&#8212; thanks, Sacha!</p>
<p>A commented copy of the init file from the video is provided below.
Happy hacking!</p>
<pre><code>;;; emacsconf-2025-gnus.el                  -*- lexical-binding: t -*-

;; This file is marked with CC0 1.0 Universal
;; and is dedicated to the public domain.

;; Note: this file uses the `setopt' macro introduced in Emacs 29
;; to customize the value of user options.  If you are using older
;; Emacsen, you may can use `customize-set-variable' or `setq'.

;;; Init / convenience

;; Initialize the package system.
(require 'package)
(package-initialize)

(setopt
 ;; Explicitly set `package-archives', in part to ensure https ones
 ;; are used, and also to have NonGNU ELPA on older Emacsen as well.
 package-archives
 '(("gnu" . "https://elpa.gnu.org/packages/")
   ("nongnu" . "https://elpa.nongnu.org/nongnu/")))

;; Download descriptions of available packages from the above
;; package archives.
(unless package-archive-contents
  (package-refresh-contents))

;; Install the keycast package if not already installed.
(dolist (package '(keycast))
  (unless (package-installed-p package)
    (package-install package)))

;; Enable keycast to show the current command and its binding in
;; the mode line, for the presentation.
(setopt keycast-mode-line-remove-tail-elements nil)
(when (fboundp #'keycast-mode-line-mode)
  (keycast-mode-line-mode 1))

;; Set a font with larger size for the presentation.
;; It requires that the Source Code Pro be installed on your
;; system.  Feel free to comment out or remove.
(when (display-graphic-p)
  (with-eval-after-load 'faces
    (let ((f "Source Code Pro Medium-15"))
      (set-face-attribute 'default nil :font f)
      (set-face-attribute 'fixed-pitch nil :font f))))

;; Inline function for expanding file and directory names inside
;; `user-emacs-directory'.  For example: (+emacs.d "gnus/")
(defsubst +emacs.d (path)
  "Expand PATH relative to `user-emacs-directory'."
  (expand-file-name
   (convert-standard-filename path) user-emacs-directory))

(keymap-global-set "C-c e e" #'eval-last-sexp)

;; Add the info directory from the GNU Emacs source repository to
;; the list of directories to search for Info documentation files.
;; Useful if you're using Emacs directly built from a source
;; repository, rather than installed on your system.
(with-eval-after-load 'info
  (setq
   Info-directory-list
   `(,@Info-directory-list
     ,(expand-file-name
       (convert-standard-filename "info/") source-directory)
     "/usr/share/info/")))

&#9228;
;;; Gnus configuration

;; (info "(gnus) Don't Panic")

(keymap-global-set "C-c g" #'gnus)

(setopt
 user-full-name    "Gnus Fan Emacsian"
 user-mail-address "ec25gnus@kelar.org")

;; Tell Emacs we'd like to use Gnus and its Message integration
;; for reading and writing mail.
(setopt
 mail-user-agent 'gnus-user-agent
 read-mail-command #'gnus)

;; Consolidate various Gnus files inside a gnus directory in the
;; `user-emacs-directory'.
(setopt
 gnus-home-directory (+emacs.d "gnus/")
 gnus-directory      (+emacs.d "gnus/news/")
 message-directory   (+emacs.d "gnus/mail/")
 nndraft-directory   (+emacs.d "gnus/drafts/"))

(setopt ; don't bother with .newsrc, use .newsrc.eld instead
 gnus-save-newsrc-file nil
 gnus-read-newsrc-file nil)

;; Don't prompt for confirmation when exiting Gnus.
(setopt gnus-interactive-exit nil)

;; Configure two IMAP mail accounts.
(setopt
 gnus-select-method '(nnnil "")
 gnus-secondary-select-methods
 '((nnimap
    "ec25gnus"
    (nnimap-stream tls)
    (nnimap-address  "mail.kelar.org")
    ;; (nnimap-server-port 993) ; imaps
    (nnimap-authenticator plain)
    (nnimap-user "ec25gnus@kelar.org"))
   (nnimap
    "ec25work"
    (nnimap-stream tls)
    (nnimap-address "mail.kelar.org")
    ;; (nnimap-server-port 993) ; imaps
    (nnimap-authenticator plain)
    (nnimap-user "ec25work@kelar.org")
    ;; Archive messages into yearly Archive folders upon pressing
    ;; 'E' (for Expire) in the summary buffer.
    (nnmail-expiry-wait immediate)
    (nnmail-expiry-target nnmail-fancy-expiry-target)
    (nnmail-fancy-expiry-targets
     (("from" ".*" "nnimap+ec25work:Archive.%Y"))))))

;; `init-file-debug' corresponds to launching emacs with --debug-init
(setq nnimap-record-commands init-file-debug)

;; The "Sent" folder
(setopt gnus-message-archive-group "nnimap+ec25gnus:INBOX")

;;;; Group buffer

;; Always show INBOX groups even if they have no unread or ticked
;; messages.
(setopt gnus-permanently-visible-groups ":INBOX$")
;; Enable topic mode in the group buffer, for classifying groups.
(add-hook 'gnus-group-mode-hook #'gnus-topic-mode)

;;;; Article buffer

;; Display the following message headers in Article buffers,
;; in the given order.
(setopt
 gnus-sorted-header-list
 '("^From:"
   "^X-RT-Originator"
   "^Newsgroups:"
   "^Subject:"
   "^Date:"
   "^Envelope-To:"
   "^Followup-To:"
   "^Reply-To:"
   "^Organization:"
   "^Summary:"
   "^Abstract:"
   "^Keywords:"
   "^To:"
   "^[BGF]?Cc:"
   "^Posted-To:"
   "^Mail-Copies-To:"
   "^Mail-Followup-To:"
   "^Apparently-To:"
   "^Resent-From:"
   "^User-Agent:"
   "^X-detected-operating-system:"
   "^X-Spam_action:"
   "^X-Spam_bar:"
   "^Message-ID:"
   ;; "^References:"
   "^List-Id:"
   "^Gnus-Warning:"))

;;;; Summary buffer

;; Fine-tune sorting of threads in the summary buffer.
;; See: (info "(gnus) Sorting the Summary Buffer")
(setopt
 gnus-thread-sort-functions
 '(gnus-thread-sort-by-number
   gnus-thread-sort-by-subject
   gnus-thread-sort-by-date))

;;;; Message and sending mail

(setopt
 ;; Automatically mark Gcc (sent) messages as read.
 gnus-gcc-mark-as-read t
 ;; Configure posting styles for per-account Gcc groups, and SMTP
 ;; server for sending mail.  See: (info "(gnus) Posting Styles")
 ;; Also see sample .authinfo file provided below.
 gnus-posting-styles
 '(("nnimap\\+ec25gnus:.*"
    (address "ec25gnus@kelar.org")
    ("X-Message-SMTP-Method" "smtp mail.kelar.org 587")
    (gcc "nnimap+ec25gnus:INBOX"))
   ("nnimap\\+ec25work:.*"
    (address "ec25work@kelar.org")
    ("X-Message-SMTP-Method" "smtp dasht.kelar.org 587")
    (gcc "nnimap+ec25work:INBOX"))))

(setopt
 ;; Ask for confirmation when sending a message.
 message-confirm-send t
 ;; Wrap messages at 70 characters when pressing M-q or when
 ;; auto-fill-mode is enabled.
 message-fill-column 70
 ;; Forward messages (C-c C-f) as a proper MIME part.
 message-forward-as-mime t
 ;; Send mail using Emacs's built-in smtpmail library.
 message-send-mail-function #'smtpmail-send-it
 ;; Omit our own email address(es) when composing replies.
 message-dont-reply-to-names "ec25\\(gnus\\|work\\)@kelar\\.org"
 gnus-ignored-from-addresses message-dont-reply-to-names)

;; Unbind C-c C-s for sending mail; too easy to accidentally hit
;; instead of C-c C-d (save draft for later)
(keymap-set message-mode-map "C-c C-s" nil)
;; Display a `fill-column' indicator in Message mode.
(add-hook 'message-mode-hook #'display-fill-column-indicator-mode)
;; Enable Flyspell for on-the-fly spell checking.
(add-hook 'message-mode-hook #'flyspell-mode)
</code></pre>
<p>Sample <code>~/.authinfo</code> file:</p>
<pre><code>machine ec25gnus login ec25gnus@kelar.org password hunter2
machine ec25work login ec25work@kelar.org password badpass123
machine mail.kelar.org login ec25gnus@kelar.org password hunter2
machine dasht.kelar.org login ec25work@kelar.org password badpass123
</code></pre>
<p>Note that for purpose of storing credentials for use by Gnus&#8217;s select
methods, the <code>machine</code> portions need to match the names we give our
select methods when configuring <code>gnus-secondary-select-methods</code>,
namely <code>ec25gnus</code> and <code>ec25work</code> in our example.</p>
<p>We also store a copy of the credentials for use by Emacs&#8217;s smtpmail
when sending mail, where the <code>machine</code> must be the fully-qualified
domain name (FQDN) of the SMTP server we specify with the
<code>X-Message-SMTP-Method</code> header for each account by defining a
corresponding rule for it in <code>gnus-posting-styles</code>.</p>
<p>Lastly, I recommend using an encrypted authinfo file by saving it as
<code>~/.authinfo.gpg</code> instead to avoid storing your credentials in plain
text.  If you set up Emacs&#8217;s EasyPG, it will seamlessly decrypt or
encrypt the file using GPG when reading from or writing to it.
Type <code>C-h v auth-sources RET</code> to see the documentation of the
<code>auth-sources</code> variable for more details.</p>
]]></content:encoded></item>

<item>
<title>Free software activities in November 2025</title>
<link>https://kelar.org/~bandali/fsa-202511.html</link>
<atom:link href="https://kelar.org/~bandali/fsa-202511.html" rel="alternate" type="text/html" />
<atom:link href="https://kelar.org/~bandali/fsa-202511.txt" rel="alternate" type="text/plain" />
<guid isPermaLink="false">tag:kelar.org,2021:~bandali/rss20.xml:2025/11/30/fsa</guid>
<pubDate>Sun, 30 Nov 2025 18:26:46 -0500</pubDate>
<atom:updated>2025-11-30T18:26:46-05:00</atom:updated>
<content:encoded><![CDATA[
<p>Hello and welcome to my November free software activities report.
I&#8217;ve been working on a number of things throughout this month but
they&#8217;re not quite ready for reporting yet, so this month&#8217;s report
will be quite short.</p>
<h2 id="gnu-fsf">GNU &amp; FSF</h2>
<ul>
<li><p><a href="https://emacsconf.org">EmacsConf</a>: I recorded the video for my Gnus talk for this year&#8217;s
conference.  The video will be available along with the the other
EmacsConf talks from the conference website, but if you&#8217;re feeling
particularly impatient you can sneak a peek at it. :)</p>
<p><a href="https://archive.org/details/emacsconf-2025-gnus">https://archive.org/details/emacsconf-2025-gnus</a></p></li>
<li><p><a href="https://www.gnu.org/spotlight/spotlight.html">GNU Spotlight</a>: I prepared and sent the November GNU Spotlight to
the FSF campaigns team for publication on the FSF&#8217;s community blog
and the monthly Free Software Supporter newsletter.</p></li>
</ul>
<p>Take care, and so long for now.</p>
]]></content:encoded></item>

<item>
<title>Free software activities in October 2025</title>
<link>https://kelar.org/~bandali/fsa-202510.html</link>
<atom:link href="https://kelar.org/~bandali/fsa-202510.html" rel="alternate" type="text/html" />
<atom:link href="https://kelar.org/~bandali/fsa-202510.txt" rel="alternate" type="text/plain" />
<guid isPermaLink="false">tag:kelar.org,2021:~bandali/rss20.xml:2025/10/31/fsa</guid>
<pubDate>Fri, 31 Oct 2025 19:44:11 -0400</pubDate>
<atom:updated>2025-10-31T19:44:11-04:00</atom:updated>
<content:encoded><![CDATA[
<p>Hello and welcome to my October free software activities report.</p>
<h2 id="gnu-fsf">GNU &amp; FSF</h2>
<ul>
<li><p><a href="https://www.gnu.org/spotlight/spotlight.html">GNU Spotlight</a>: I prepared and sent the October GNU Spotlight
to the FSF campaigns team, who will review and publish it on the
FSF&#8217;s community blog and as part of the next issue of the monthly
Free Software Supporter newsletter.</p></li>
<li><p><a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>:</p>
<ul>
<li><p><a href="https://bugs.gnu.org/79629">bug#79629</a>: I noticed that I was unable to customize the
<code>holiday-other-holidays</code> variable using the <code>setopt</code> macro:
my change did not seem to take effect.  As Eli Zaretskii
helpfully pointed out, this was because customizing
<code>holiday-other-holidays</code> did not recompute the value of
<code>calendar-holidays</code>, which is computed once, when the package
is loaded.</p>
<p>So I prepared and sent a patch <a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=500a2d0cc55340eb3830f8a7ad49183c4b57c87c"><code>500a2d0cc55</code></a> to recompute
<code>calendar-holidays</code> when its components are set.</p></li>
<li><p><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=bbabc1db25835fe52ff9d29c1689c88e82146a8a"><code>bbabc1db258</code></a>: While reading about <code>custom-reevaluate-setting</code>
in the Startup Summary node of the GNU Emacs Lisp reference manual
I noticed a small typo, so I committed a patch to fix it.</p></li>
</ul></li>
</ul>
<h2 id="misc">Misc</h2>
<ul>
<li><p>The Free Software Foundation <a href="https://www.fsf.org/fsf40">celebrated its fortieth birthday</a>
on 4 October 2025 online and in person in Boston!  I was not
able to attend the event in person, so I recorded a <a href="https://kelar.org/~bandali/fsf40-volunteer-panel.html">video for
the FSF40 volunteer panel</a> held at the venue.</p></li>
<li><p>This month at work one of our Elasticsearch clusters experienced
partial failure, and we needed to extract document IDs from a backup
of one of the cluster&#8217;s shards.  Elasticsearch uses Lucene under the
hood and each shard is a standalone Lucene index, so I used Lucene&#8217;s
Java API to write a little <a href="https://kelar.org/~bandali/software/misc/GetIDS.java"><code>GetIDS</code></a> class to query the index for
all of its documents, and for each document print its <code>_id</code> field,
decoding the binary-valued <code>BytesRef</code> as needed.  The gotcha was
that all of the <code>BytesRef</code>s seemed to have a <code>-1</code> byte in the
beginning, throwing off the recommended <code>BytesRef.utf8ToString()</code>
method, so I had to reimplement that method&#8217;s logic in my program
and have it use an adjusted <code>offset + 1</code> and <code>length - 1</code> instead.</p></li>
</ul>
<p>That&#8217;s about it for this month&#8217;s report.</p>
<p>Take care, and so long for now.</p>
]]></content:encoded></item>

<item>
<title>FSF40 volunteer panel</title>
<link>https://kelar.org/~bandali/fsf40-volunteer-panel.html</link>
<atom:link href="https://kelar.org/~bandali/fsf40-volunteer-panel.html" rel="alternate" type="text/html" />
<atom:link href="https://kelar.org/~bandali/fsf40-volunteer-panel.txt" rel="alternate" type="text/plain" />
<guid isPermaLink="false">tag:kelar.org,2021:~bandali/rss20.xml:2025/10/04/fsf40-volunteer-panel</guid>
<pubDate>Sat, 04 Oct 2025 19:44:11 -0400</pubDate>
<atom:updated>2025-10-04T19:44:11-04:00</atom:updated>
<content:encoded><![CDATA[
<p><a href="https://static.fsf.org/nosvn/fsf40/FSF40-logo.png"><img src="https://kelar.org/~bandali/fsf40-logo-sm.png" alt="Celebrate 40 years of FSF!" class="float-right" width="144"></a></p>
<p>The Free Software Foundation celebrated its fortieth birthday today
online and in person in Boston.  Forty years of commitment to
software freedom and fighting for the freedoms of all computer users.</p>
<p>As part of the <a href="https://www.fsf.org/fsf40">FSF40 celebration</a>, the FSF held a roundtable panel
with FSF volunteers both in-person and online.  I was not able to
attend the event in person, so I prepared a video recording for the
volunteer roundtable that was played at the venue.  In the video
I talk about my free software journey and how I first got involved,
some of the issues facing the world of free software today, and how
you can get involved and contribute to free software projects and
help the free software movement.</p>
<div><video preload="metadata" controls="controls" width="720" src="https://archive.org/download/fsf40-volunteer-panel-bandali/fsf40-volunteer-panel-bandali.ia.mp4" poster="https://kelar.org/~bandali/fsf40-volunteer-panel-poster.jpg">
<source src="https://archive.org/download/fsf40-volunteer-panel-bandali/fsf40-volunteer-panel-bandali.ia.mp4" type="video/mp4">
<p>Sorry, this embedded video will not work,
because your web browser does not support HTML5 video.<br>
<a href="https://archive.org/download/fsf40-volunteer-panel-bandali/fsf40-volunteer-panel-bandali.ia.mp4">[
please watch the video in your favourite streaming media player
]</a></p></source></video></div>
<p>Happy 40th birthday, FSF, and here&#8217;s to 40+ more years of software
freedom.  Happy hacking!</p>
<p>The video recording is Copyright &#169; 2025 Amin Bandali, and is
licensed under <a href="https://kelar.org/~bandali/license.html#cc-by-sa">CC BY-SA 4.0</a>.</p>
]]></content:encoded></item>
</channel></rss>
