blog
blog
https://reboil.com/ikiwiki/blog/
blog
ikiwiki
2024-01-01T05:37:18Z
0020231228T2337+00..freedombox mediawiki fail2ban
https://reboil.com/ikiwiki/blog/posts/0020231228T2337+00..freedombox_mediawiki_fail2ban/
2024-01-01T05:37:18Z
2023-12-29T02:47:03Z
<p><a id="orgac1630d"></a></p>
<h1>FreedomBox Mediawiki Fail2ban filter</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-12-28">2023-12-28</a>T15:37-08
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-12-31">2023-12-31</a>T21:36-08.</p>
<p><a id="orge2246cb"></a></p>
<h2>Summary</h2>
<p>I noticed a significant increase in CPU usage on a public <a href="https://www.freedombox.org/">FreedomBox</a>
webserver I run for publishing my notes via a <a href="https://www.mediawiki.org/">MediaWiki</a> instance at
<a href="https://reboil.com/mediawiki/Main_Page">reboil.com/mediawiki</a>. The high usage was caused by frequent expensive
requests for dyanmically generated <a href="https://www.mediawiki.org/wiki/Manual:Special_pages">special pages</a>. I implemented two
solutions: modifying the server's <a href="https://www.mediawiki.org/wiki/Manual:Robots.txt"><code>robots.txt</code></a> and creating a
<a href="https://en.wikipedia.org/wiki/Fail2ban"><code>fail2ban</code></a> filter.</p>
<h1>Table of Contents</h1>
<ol>
<li><a href="https://reboil.com/ikiwiki/blog/#orgac1630d">FreedomBox Mediawiki Fail2ban filter</a>
<ol>
<li><a href="https://reboil.com/ikiwiki/blog/#orge2246cb">Summary</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#org1c5f00f">Background</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#org1c163c3">Analysis</a>
<ol>
<li><a href="https://reboil.com/ikiwiki/blog/#orgfe9d769">journalctl</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#org26083d0">top</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#org3a04a61">dstat</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#org213feed">dool</a></li>
</ol>
</li>
<li><a href="https://reboil.com/ikiwiki/blog/#org27d0af8">Methodology</a>
<ol>
<li><a href="https://reboil.com/ikiwiki/blog/#org0b97395">robots.txt</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#orgc51fc2e">fail2ban filter</a></li>
<li><a href="https://reboil.com/ikiwiki/blog/#orgb49e0bd">Relevant system information</a></li>
</ol>
</li>
</ol>
</li>
</ol>
<p><a id="org1c5f00f"></a></p>
<h2>Background</h2>
<p>Note that this procedure may likely only work for FreedomBox instances
since FreedomBox itself makes automatic configuration file
changes. For example, <code>fail2ban</code> should already be installed and
maintained by FreedomBox.</p>
<p><a href="https://wiki.debian.org/FreedomBox">FreedomBox</a> is a <a href="https://www.debian.org/">Debian</a> package that converts the machine it is
installed on into a personal cloud server. Specifically, it converts
the machine into an Apache server with a webUI interface for
installing apps such as <a href="https://wordpress.org/">WordPress</a> (blog), <a href="https://wiki.debian.org/MediaWiki">Mediawiki</a> (wiki), <a href="https://github.com/bepasty">Bepasty</a>
(file sharing), <a href="https://www.ejabberd.im/">Ejabberd</a> (XMPP chat server), <a href="http://www.postfix.org/">Postfix</a>/<a href="https://www.dovecot.org/">Dovecot</a> (Email
server), <a href="https://community.openvpn.net/openvpn">OpenVPN</a>, <a href="https://radicale.org/3.0.html">Radicale</a> (calendar and addressbook), among
others. See the <a href="https://wiki.debian.org/FreedomBox/Manual">Manual</a> for details.</p>
<p>All files are created or edited with <code>root</code>
access by a FreedomBox account with administrator privileges by
logging in via <code>ssh</code> and running:</p>
<pre><code>$ sudo su -
#
</code></pre>
<p>This article assumes a basic knowledge of GNU/Linux such as logging
into your FreedomBox via <code>ssh</code>, editing text files via the command
line, viewing file contents with <code>cat</code>, running Bash scripts, and
being aware of file ownership issues.</p>
<p><a id="org1c163c3"></a></p>
<h2>Analysis</h2>
<p>I detected the high traffic usage via a journalctl resembling the
following:</p>
<p><a id="orgfe9d769"></a></p>
<h3>journalctl</h3>
<pre><code># journalctl --output=short-iso --follow
</code></pre>
<p>A more focused command is described in the following Bash script run
as the <code>root</code> user.</p>
<pre><code>#!/bin/bash
journalctl --output=short-iso --follow | \
grep --line-buffered "apache-access" | \
less -S +F
</code></pre>
<p>Below are portions of example lines of expensive <code>index.php?</code>
requests.</p>
<pre><code>/mediawiki/index.php?returnto=1770-03-07&returntoquery=redirect%3Dno&title=Speci
/mediawiki/index.php?target=1770-03-22&title=Special%3AWhatLinksHere HTTP/1.1" 4
/mediawiki/index.php?action=history&title=1784-03-15 HTTP/1.1" 200 5025 "-" "Moz
/mediawiki/index.php?returnto=1770-03-07&returntoquery=redirect%3Dno&title=Speci
/mediawiki/index.php?action=history&title=1784-03-15 HTTP/1.1" 200 6494 "-" "Moz
/mediawiki/index.php?action=edit&title=1770-03-08 HTTP/1.1" 200 5031 "-" "Mozill
/mediawiki/index.php?target=1862-04-02&title=Special%3AWhatLinksHere HTTP/1.1" 4
/mediawiki/index.php?action=edit&title=1770-03-08 HTTP/1.1" 200 4911 "-" "Mozill
</code></pre>
<p><a id="org26083d0"></a></p>
<h3>top</h3>
<p>High CPU usage was indicated by the appearance of multiple
<code>php-fpm7.4</code> processes indicated by the <a href="https://en.wikipedia.org/wiki/Top_%28software%29"><code>top</code> command</a>, a task manager
available on most Unix-like operating systems such as <a href="https://manpages.debian.org/bookworm/procps/top.1.en.html">Debian 12</a>.</p>
<p><a id="org3a04a61"></a></p>
<h3>dstat</h3>
<p><a href="http://dag.wiee.rs/home-made/dstat/">dstat</a> was a system performance monitoring utility that I was fond
of. Although FreedomBox uses a <a href="https://www.redhat.com/">Red Hat</a> version which <a href="https://github.com/dstat-real/dstat/issues/170">took over</a> the
<code>dstat</code> namespace, and replaced it with a rewritten version that lacks
the handy <code>--top-cpu</code> option, the following command should still work
to show you relevant CPU information, outputting averaged data in a
line every 60 seconds:</p>
<pre><code># dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60
</code></pre>
<p><a id="org213feed"></a></p>
<h3>dool</h3>
<p><a href="https://github.com/scottchiefbaker/dool"><code>dool</code></a> is the python3 compatible fork of <code>dstat</code> that isn't tracked by
Debian but which recreates the dstat behavior I'm used to such as
including the <code>--top-cpu</code> option. You can install it into local user
space via:</p>
<pre><code># git clone https://github.com/scottchiefbaker/dool.git dool
# cd dool
# ./install.py
You are root, doing a local install
Installing binaries to /usr/bin/
Installing plugins to /usr/share/dool/
Installing manpages to /usr/share/man/man1/
Install complete. Dool installed to /usr/bin/dool
</code></pre>
<p>You can then run the command via:</p>
<pre><code># dool --time --load --proc --cpu --top-cpu --mem --disk --io --net --sys --vm 60
</code></pre>
<p>Installing for use by the</p>
<p><a id="org27d0af8"></a></p>
<h2>Methodology</h2>
<p><a id="org0b97395"></a></p>
<h3>robots.txt</h3>
<p>According to the MediaWiki Manual for <a href="https://www.mediawiki.org/wiki/Manual:Robots.txt">robots.txt</a>, requests from
webcrawlers to <a href="https://www.mediawiki.org/wiki/Manual:Index.php">index.php</a> may be disallowed by adding the following
text to a server's <code>robots.txt</code> file. In my particular FreedomBox
instance, the file is located at <code>/var/www/html/robots.txt</code>. I use the
<code>cat</code> command merely to show the contents and location of the file for
this explanation.</p>
<pre><code># cat /var/www/html/robots.txt
User-agent: *
Disallow: /mediawiki/index.php?
</code></pre>
<p>No restart to the <code>apache2</code> service should be necessary.</p>
<p><code>index.php</code> is the main access point for a MediaWiki site. In my
FreedomBox installation, MediaWiki pages are served by default at URLs
omitting <code>index.php</code>. For example, my article on the Moon is served by
default at <a href="https://reboil.com/mediawiki/Moon">https://reboil.com/mediawiki/Moon</a>. Notably,
<a href="https://reboil.com/mediawiki/index.php?title=Moon">https://reboil.com/mediawiki/index.php?title=Moon</a> also works, but it
will trigger the <code>fail2ban</code> filter described below.</p>
<p>This modification of <code>robots.txt</code> alone is an indirect way to reduce
web crawler requests for dynamically generated MediaWiki pages but it
relies on coöperation from webcrawlers themselves to honor the
Disallow request. The following <code>fail2ban</code> filter is an active
response that bans IP addresses that make repeated requests.</p>
<p><a id="orgc51fc2e"></a></p>
<h3>fail2ban filter</h3>
<p>Fail2ban is a program used by default with a FreedomBox instance. A
generic tutorial for configuring it is available <a href="https://www.linode.com/docs/guides/using-fail2ban-to-secure-your-server-a-tutorial/#ubuntu">here</a>.</p>
<p>For my instance, I set up the filter by creating two files and running
a <code>systemd</code> command to restart the <code>fail2ban</code> service.</p>
<p>The first file to create sets up a filter for <code>fail2ban</code> that uses a
regular expression to identify requests for <code>index.php</code>. It is a
3-line file named <code>mediawiki.conf</code> saved in <code>/etc/fail2ban/filter.d/</code>.</p>
<pre><code># cat /etc/fail2ban/filter.d/mediawiki.conf
[Definition]
failregex = <HOST> -.*"GET /mediawiki/index\.php\?.*"
ignoreregex =
</code></pre>
<p>The second file is a <code>jail.local</code> which references the
<code>mediawiki.conf</code> file (via the <code>[mediawiki]</code> line) and specifies the
trigger and reset conditions for an IP address ban.</p>
<pre><code># cat /etc/fail2ban/jail.local
[mediawiki]
enabled = true
port = http,https
filter = mediawiki
logpath = %(apache_error_log)s
maxretry = 60
findtime = 600
bantime = 3600
</code></pre>
<p>The <code>logpath</code> line is specific to how FreedomBox configures its logs
when applying <code>fail2ban</code> to other applications. <code>maxretry</code> is the
number of requests within a window of <code>findtime</code> seconds that will
trigger a ban lasting <code>bantime</code> seconds.</p>
<p>In this particular example, a webcrawler requesting 60 or more pages
via my Mediawiki's <code>index.php</code> access point within a 5-minute window
will get a 1-hour ban on its IP address. Most dynamically generated
pages a typicaly human user would use are viewing a page's history or
requesting to edit a page. I find it implausible for a human to make
sixty such requests in five minutes (that's one request per ten
seconds) and so I find these limits rational.</p>
<p>In my instance, I had to create the <code>jail.local</code> file. According to
the <a href="https://www.linode.com/docs/guides/using-fail2ban-to-secure-your-server-a-tutorial/#how-to-configure-fail2ban">Linode tutorial</a>, <code>jail.local</code> is meant to permit a local
administrator to extend and override configurations established in
default <code>.conf</code> files such as <code>fail2ban.conf</code>.</p>
<p>To immediately apply the new <code>fail2ban</code> filter, the service must be
restarted:</p>
<pre><code># systemctl restart fail2ban.service
</code></pre>
<p>Current bans can be viewed via a <code>fail2ban-client</code> command:</p>
<pre><code># fail2ban-client status mediawiki
Status for the jail: mediawiki
|- Filter
| |- Currently failed: 1
| |- Total failed: 5920
| `- Journal matches:
`- Actions
|- Currently banned: 1
|- Total banned: 51
`- Banned IP list: 47.76.35.19
</code></pre>
<p><a id="orgb49e0bd"></a></p>
<h3>Relevant system information</h3>
<ul>
<li>FreedomBox version: 23.6.2</li>
<li>Operating system: Debian GNU/Linux 11 (bullseye)</li>
</ul>
0020231204T0451+00..sjc 45th luminarias
https://reboil.com/ikiwiki/blog/posts/0020231204T0451+00..sjc_45th_luminarias/
2023-12-04T05:37:54Z
2023-12-04T05:37:54Z
<h1>San Juan College 45th Annual Luminaria photos</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-12-04">2023-12-04</a>T04:51+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-12-04">2023-12-04</a>T05:37+00.</p>
<p><a href="https://reboil.com/res/2023/img/20231202..sjc_45th_luminarias/index.html"><img src="https://reboil.com/res/2023/img/20231204T0508+00..sjc_45th_luminaria_fgallery_preview.jpg" alt="img" /></a></p>
<h2>Summary</h2>
<p>On <a href="https://reboil.com/mediawiki/2023-12-02">2023-12-02</a>, I attended the <a href="https://www.sanjuancollege.edu/about/news-events/calendar/all-events/45th-annual-luminarias.php">45th Annual Luminarias</a> display held by
<a href="https://www.sanjuancollege.edu">San Juan College (SJC)</a>. I took some photos which I have uploaded to a <a href="https://reboil.com/res/2023/img/20231202..sjc_45th_luminarias/index.html">static
image gallery</a> using <a href="https://www.thregr.org/wavexx/software/fgallery/">fgallery</a>.</p>
<h2>Background</h2>
<p>Growing up in Farmington, NM, I had considered the holiday luminaria
display at SJC to be a routine celebration observed everywhere. It
wasnʼt until after I left the area that I realized lighting thousands
of candles inside paper bags was a somewhat niche tradition. The
Wikimedia Commons category <a href="https://commons.wikimedia.org/wiki/Category:Luminaries_in_the_United_States">Luminaries in the United States</a> shows some
photographs but none of the San Juan College event which has been
going on for over 4 decades. At some point I'll upload some photos to
Commons but I wanted to get some select photos uploaded to my static
resource site <a href="https://reboil.com/res/">https://reboil.com/res/</a>.</p>
0020231015T0931+00..2023-10-14 annular eclipse
https://reboil.com/ikiwiki/blog/posts/0020231015T0931+00..2023-10-14_annular_eclipse/
2023-10-15T10:41:17Z
2023-10-15T10:32:11Z
<h1>2023-10-14 Annular Solar Eclipse</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-10-15">2023-10-15</a>T09:31+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-10-15">2023-10-15</a>T10:40+00.</p>
<p><a href="https://reboil.com/ikiwiki/blog/res/2023/img/20231014T161932+0000_DSC00389_redgps_cropped.JPG"><img src="https://reboil.com/ikiwiki/blog/posts/0020231015T0931+00..2023-10-14_annular_eclipse/300x-20231014T161932+0000_DSC00389_redgps_cropped.JPG" width="300" height="300" alt="A photo of the 2023-10-14 annular solar eclipse taken by Ross A. Whitley from San Antonio, Texas." class="img" /></a></p>
<p>(<a href="https://commons.wikimedia.org/wiki/File:2023-10-14_solar_eclipse_from_Vancouver,_WA.jpg">Image</a> © <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a>, <a href="https://creativecommons.org/licenses/by-sa/4.0/">🅭🅯🄎4.0</a>)</p>
<h2>Summary</h2>
<p>I took a photograph of the <a href="https://reboil.com/mediawiki/2023-10#2023-10-14">2023-10-14</a> <a href="https://en.wikipedia.org/wiki/Solar_eclipse_of_October_14,_2023">solar eclipse</a> from Vancouver,
Washington. I uploaded a copy to Wikimedia Commons <a href="https://commons.wikimedia.org/wiki/File:2023-10-14_solar_eclipse_from_Vancouver,_WA.jpg">here</a>.</p>
<h2>Background</h2>
<p>I got lucky and managed to get just the right amount of
cloudcover to take a photo without any special equipment besides my
<a href="https://en.wikipedia.org/wiki/Sony_%CE%B17_III">Sony a7 III</a> with a 70-300mm telephoto lens.</p>
<p>I had known about the eclipse for a few days, having not really
tracked it in my notes since it was not a total solar eclipse.
However, some family members let me know it was happening and I
noticed I wouldn't have to travel very far from my <a href="https://en.wikipedia.org/wiki/Vancouver,_Washington">Vancouver,
Washington</a>, dwelling to see a significant occultation. I saw that it
was scheduled to be viewable at my local morning around
2023-10-14T09:00-07. I prepared my eclipse glasses the night before.</p>
<p>So, when I woke up on the day of the eclipse, despite being somewhat
disappointed at seeing an overcast sky, I went outside a few minutes
before maximum occlusion. I found my roommates were already outside
looking to the southeast at a bright spot in the clouds where the sun
was. The morning clouds were clearing. I saw that some variation in
cloudcover would allow me to see the eclipse without any glasses. I
also saw that it was possible for me to use the cloud cover to take a
photo with my camera. I quickly retrieved my camera and snapped a few
photos when a dark cloud passed by. The result allowed me to clearly
see the crescent shape of the partial solar eclipse.</p>
<p>I then downloaded my photos to a computer, cropped one of the better
images, then uploaded it to my <a href="https://twit.social/@baltakatei/111234371752866318">Mastodon account</a>, <a href="https://commons.wikimedia.org/wiki/File:2023-10-14_solar_eclipse_from_Vancouver,_WA.jpg">Wikimedia Commons</a>,
and my <a href="https://reboil.com/res/2023/img/20231014T161932+0000_DSC00389_redgps_cropped.JPG">website</a>. Some commenters <a href="https://mastodon.sdf.org/@msquebanh/111234482853034691">said</a> the image looked like it could be
an album cover; I <a href="https://twit.social/@baltakatei/111234500333895978">told</a> <a href="https://twit.social/@baltakatei/111234503235512862">them</a> anyone was free to use it under the CC
BY-SA 4.0 license.</p>
<p>To be honest, there are many higher quality photographs than mine. In
particular, I <a href="https://twit.social/@baltakatei/111237826583532862">like</a> <a href="https://www.flickr.com/photos/136454412@N07/53258644948/in/album-72177720311945954/">this set</a> by a Ross A. Whitley, taken from the <a href="https://en.wikipedia.org/wiki/Mission_San_Jos%C3%A9_(Texas">San
Jose Mission</a>) in <a href="https://en.wikipedia.org/wiki/San_Antonio">San Antonio, Texas</a>.</p>
<p><a href="https://reboil.com/ikiwiki/blog/res/2023/img/20231014_whitley_53258839800..san_antonio_church_eclipse.jpg"><img src="https://reboil.com/ikiwiki/blog/posts/0020231015T0931+00..2023-10-14_annular_eclipse/300x-20231014_whitley_53258839800..san_antonio_church_eclipse.jpg" width="300" height="200" alt="A photo of the 2023-10-14 annular solar eclipse taken by Ross A. Whitley from San Antonio, Texas." class="img" /></a></p>
<p>(<a href="https://www.flickr.com/photos/136454412@N07/53258644948/in/album-72177720311945954/">Image</a> © <a href="https://rossawhitley.com/">Ross A. Whitley</a>, <a href="https://creativecommons.org/publicdomain/mark/1.0/">🅭🅮1.0</a>)</p>
<h2>References</h2>
<ul>
<li><a href="https://rossawhitley.com/">Ross A. Whitley</a>. (<a href="https://reboil.com/mediawiki/2023-10#2023-10-14">2023-10-14</a>). “<a href="https://www.flickr.com/photos/136454412@N07/albums/72177720311945954">Annular Eclipse 2023</a>”. <a href="https://www.flickr.com/"><strong>Flickr</strong></a>. Accessed <a href="https://reboil.com/mediawiki/2023-10#2023-10-14">2023-10-14</a>.</li>
<li><a href="https://reboil.com/mediawiki/Steven_Baltakatei_Sandoval">Steven Baltakatei Sandoval</a>. (<a href="https://reboil.com/mediawiki/2023-10#2023-10-14">2023-10-14</a>). “<a href="https://commons.wikimedia.org/wiki/File:2023-10-14_solar_eclipse_from_Vancouver,_WA.jpg">2023-10-14 solar eclipse from Vancouver, WA</a>”. <a href="https://commons.wikimedia.org"><strong>Wikimedia Commons</strong></a>. Accessed (<a href="https://reboil.com/mediawiki/2023-10#2023-10-14">2023-10-14</a>).</li>
</ul>
0020230707T0142+00..fgallery example
https://reboil.com/ikiwiki/blog/posts/0020230707T0142+00..fgallery_example/
2023-07-07T03:41:34Z
2023-07-07T01:53:37Z
<h1>fgallery example</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-07-07">2023-07-07</a>T01:40+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-07-07">2023-07-07</a>T03:41+00.</p>
<p><a href="https://reboil.com/ikiwiki/blog/res/2023/img/20230707T0116+00..fgallery_example.jpg"><img src="https://reboil.com/ikiwiki/blog/posts/0020230707T0142+00..fgallery_example/300x-20230707T0116+00..fgallery_example.jpg" width="300" height="199" alt="Example gallery." class="img" /></a></p>
<h2>Summary</h2>
<p>I wanted to test out a static HTML+Javascript photo gallery package I
found on Debian to answer a question on a Lemmy thread about
self-hosted photo galleries. The end result was <a href="https://reboil.com/res/2023/img/20230707_20220707..tanabata_at_portland_japanese_garden/index.html">this</a> example gallery.</p>
<h2>Setup procedure</h2>
<p>On a Debian 11 system, the following commands may be used to create an
<code>fgallery</code> image gallery.</p>
<p>Install <code>fgallery</code></p>
<pre><code>$ sudo apt update;
$ sudo apt install fgallery;
</code></pre>
<p>Install optional tools</p>
<pre><code>$ sudo apt install jpegoptim pngcrush 7zip;
</code></pre>
<p>Build a gallery from photos in <code>photo-src/</code>.</p>
<pre><code>#!/bin/bash
din=./photo-src ;
dout=./test4 ;
title="Tanabata at Portland Japanese Gardens, July 2022 - Steven Baltakatei Sandoval";
fgallery -c txt -s -j4 --index="https://reboil.com/mediawiki/2022-07-07" \
"$din" "$dout" \
"$title" && \
python3 -m http.server -d "$dout";
</code></pre>
<p>The input directory path is set in <code>din</code>, the output directory path is
set in <code>dout</code>.</p>
<p>The title of the webUI page is set in <code>title</code>.</p>
<p>The <code>-c txt</code> option tells <code>fgallery</code> to look for captions for an image
in a text file named exactly the same as the image file except that
the final extension (e.g. <code>.jpg</code> of <code>photo-src/foo.jpg</code>) is replaced
with <code>.txt</code> (e.g. <code>photo-src/foo.txt</code>).</p>
<p>The <code>-s</code> option prevents the original image files from being included
as an archive in the output and disables downloading of such an
archive.</p>
<p>The <code>-j4</code> option specifies that up to 4 image processing jobs may be
performed in parallel in order to speed up creation of the output
directory contents if at least 4 CPUs are available.</p>
<p>The <code>--index</code> option specifies the URL for the "Back" button at the
top left of the gallery webUI.</p>
<p>The <code>&&</code> specifies the next command <code>python3</code> should only run if the
<code>fgallery</code> command does not fail.</p>
<p>The <code>\</code> at the end of some lines tells <code>bash</code> to ignore the newline
(so longer commands in the script are broken up to be more readable).</p>
<p>The <code>python3 -m http.server -d "$dout"</code> command creates a simple local
HTTP server at the address <code>http://localhost:8000</code> so a web browser
can view the webUI without there being a need to upload anything to
any remote server.</p>
<h2>References</h2>
<ul>
<li><a href="https://sopuli.xyz/post/1097013">Lemmy post linking example gallery</a></li>
<li><a href="https://www.thregr.org/~wavexx/software/fgallery/">fgallery documentation</a></li>
<li><a href="https://reboil.com/res/2023/img/20230707_20220707..tanabata_at_portland_japanese_garden/index.html">Resulting fgallery example</a></li>
</ul>
0020230615T1005+00..migration to lemmy
https://reboil.com/ikiwiki/blog/posts/0020230615T1005+00..migration_to_lemmy/
2023-06-15T18:27:55Z
2023-06-15T12:03:07Z
<h1>Migration to Lemmy</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-06-15">2023-06-15</a>T10:05+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-06-15">2023-06-15</a>T18:27+00.</p>
<p><img src="https://reboil.com/res/2023/img/20230615T1821+00..Lemming_300x274px.jpg" title="“Lemming.jpg” by Frode Inge Helland, 1987. CC BY-SA 3.0. <https://w.wiki/6qHj>" alt="img" /></p>
<p>On <a href="https://reboil.com/mediawiki/2023-06-12">2023-06-12</a>, after I noticed a surge of moderators setting major
subreddits private, I decided to explore federated alternatives to
Reddit which I had heard existed. After some searches, I found
mentions of <a href="https://join-lemmy.org/">Lemmy</a> and <a href="https://kbin.pub">Kbin</a>.</p>
<p>I checked through a <a href="https://tech.michaelaltfield.net/2023/06/11/lemmy-migration-find-subreddits-communities/">list of Lemmy instances</a> and created a spreadsheet
factoring in admin age, uptime, and domain name length. I used that to
generate a short list to let me review the post history of
admins. After this review, I decided that the Lemmy instance
<a href="https://sopuli.xyz">sopuli.xyz</a> was the most appropriate for me; I was looking for a
smaller instance with at least some months of history. Sopuli.xyz
seems to have been started by a <a href="https://en.wikipedia.org/wiki/Finland">Finn</a> who set rules against posts about
QAnon, Nazis, and other bigoted groups I don't want to associate
myself with. So, I applied and, as of <a href="https://reboil.com/mediawiki/2023-06-14">2023-06-14</a>,now have an <a href="https://sopuli.xyz/u/baltakatei">account</a>
there.</p>
<p>I now look forward to contributing comments to a more decentralized
forum.</p>
0020230609T2135+00..usada pekora bgm video sync
https://reboil.com/ikiwiki/blog/posts/0020230609T2135+00..usada_pekora_bgm_video_sync/
2023-06-09T23:14:26Z
2023-06-09T22:25:18Z
<h1>Usada Pekora BGM animation synchronization</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
2023-06-09T21:35+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
2023-06-09T23:14+00.</p>
<p><img src="https://reboil.com/res/2023/img/20230609T2204+00..pekora_4frames.png" title="Four frames ofthe Pekora @kaynimatic animation" alt="img" /></p>
<h2>Summary</h2>
<p>I got annoyed at the lack of a properly synchronized animation of a
Pekora Usada walking animation on YouTube, so I created one. I wrote a
Bash script to assemble frames generated by FFmpeg which I then
imported into Kdenlive in order to combine with an audio loop edited
in Audacity. It took a fair amount of work so I thought I'd write up
what I did in TeXmacs.</p>
<h2>Links</h2>
<ul>
<li><a href="https://youtu.be/yD8ieIsc324">YouTube</a></li>
<li>Git repository (<a href="https://reboil.com/res/2023/exe/20230609T2218+00_BK-2023-04..pekora_bgm_ani_sync.bundle">Git bundle</a>)</li>
<li>Write-up (<a href="https://reboil.com/res/2023/txt/20230609T2312+00..usada_pekora_bgm_animation_sync_article_v0.0.3.pdf">PDF</a>)</li>
<li><a href="https://reboil.com/mediawiki/BK-2023-04">Wiki entry</a>.</li>
</ul>
<h2>Meta</h2>
<p>This was project <code>BK-2023-04</code>.</p>
0020230524T0730+00..iso 10628 symbol drawing update
https://reboil.com/ikiwiki/blog/posts/0020230524T0730+00..iso_10628_symbol_drawing_update/
2023-05-31T19:56:02Z
2023-05-24T10:48:41Z
<h1>ISO 10628 symbol drawing update</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-05-24">2023-05-24</a>T07:30+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>T19:55+00.</p>
<p><img src="https://reboil.com/res/2023/img/20230524T105507+00_BK-2020-04-PID-1-SHT2..sample_view_300x387px.png" title="A sample view of `BK-2020-04-PID-1`" alt="img" /></p>
<p>Edit(<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>):Add reboil.com wiki links.</p>
<h2>Summary</h2>
<p>On <a href="https://reboil.com/mediawiki/2023-05#2023-05-23">2023-05-23</a>, I updated a drawing I made in <a href="https://reboil.com/mediawiki/2020-09">2020-09</a> to serve as a
palette for chemical engineering symbols I might use when constructing
my own <a href="https://reboil.com/mediawiki/Piping_and_instrumentation_diagram">P&ID</a>s.</p>
<h2>Background</h2>
<p>Back in <a href="https://reboil.com/mediawiki/2020-09">2020-09</a>, I became interested in creating P&ID diagrams for use
in my personal notes and in the <a href="https://gitlab.com/baltakatei/bk-2021-07-1">DeVoe's Thermodynamics and Chemistry</a>
transcription project of mine (<a href="https://reboil.com/mediawiki/BK-2021-07">BK-2021-07</a>). I decided to find an
industry consensus standard set of symbols so that my drawings (which
I planned to license CC BY-SA 4.0 for use in Wikipedia and Wikimedia
Commons) could be used by other people. Therefore, I purchased a copy
of <a href="https://www.iso.org/standard/51841.html"><code>ISO 10628-2:2012</code></a> and manually drew each symbol in <a href="https://inkscape.org/">Inkscape</a>.</p>
<p>On <a href="https://reboil.com/mediawiki/2020-09-25">2020-09-25</a>, I uploaded a set of drawings showing all the <code>ISO
10628-2:2012</code> symbols to <a href="https://commons.wikimedia.org/wiki/Main_Page">Wikimedia Commons</a> (See <a href="https://commons.wikimedia.org/wiki/File:ISO_10628-2_2012_Symbols_Sheet_1.svg">BK-2020-04-PID-1-SHT1</a>
<a href="https://en.wikipedia.org/wiki/SVG">SVG</a> file). I split the upload into several separate SVG files, due to
lack of multi-page support for SVGs in Inkscape. I also uploaded a set
of <a href="https://en.wikipedia.org/wiki/PDF">PDF</a> files exported from Inkscape since the <a href="https://reboil.com/mediawiki/ISO_3098"><code>ISO 3098</code></a> font I chose
for the drawing (<a href="https://tracker.debian.org/pkg/fonts-osifont">osifont</a> in the Debian repository) wasn't supported by
Wikimedia Commons.</p>
<p>In <a href="https://reboil.com/mediawiki/2020-02">2020-02</a>, I received an email from a John Kunicek about the symbol
numbering system used in <code>ISO 10628</code> symbols I drew in
<code>BK-2020-04-PID-1</code>. They also informed me of some spelling errors. On
2023-02-27, I reviewed Kunicek's questions and came to the conclusion
that basically the symbol numbers in <code>ISO 10628</code> followed a pattern
established in another ISO standard called <code>ISO 14617</code> of which <a href="https://www.iso.org/standard/41838.html"><code>ISO
14617-1:2005</code></a> is an index of registration numbers for symbols used in
other ISO standards such as ISO 10628. On 2023-02-28 I sent my reply
to Kunicek and updated the <code>BK-2020-04-PID-1</code> legends to address the
ambiguities of the original legend that was limited to what
information was provided in my copy of <code>ISO 10628:2012</code>.</p>
<p>On <a href="https://reboil.com/mediawiki/2020-03-01">2020-03-01</a>, while I had the files on my mind, I also decided to
edit the SVG files of <code>BK-2020-04-PID-1</code> so that each symbol and its
associated text objects containing ISO 10628 descriptions and
registration numbers were grouped together; this update would enable
someone to easily copy and paste individual symbols if they edited the
drawing in Inkscape or, if a machine were performing a text search of
the body of the SVG file itself, they could quickly find the
registration numbers to help them identify the associated symbols
nearby in the XML tree of the SVG file. Previously, the symbol objects
and text objects were mixed together in a hodgepodge; symbols and
their associated text objects were only obviously related to a human
looking at the rendered image. I didn't push the updated SVG files
since I wanted to wait and see if any more corrections or questions
came from Kunicek or others.</p>
<p>On <a href="https://reboil.com/mediawiki/2021-05-08">2021-05-08</a>, Wikipedia editor <a href="https://en.wikipedia.org/wiki/User:Lonaowna">Lonaowna</a> <a href="https://en.wikipedia.org/w/index.php?title=ISO_10628&diff=1022132213&oldid=958604116">added</a> thumbnails of the SVGs
I uploaded to the <a href="https://en.wikipedia.org/wiki/ISO_10628">ISO 10628</a> Wikipedia article. I myself hadn't wanted
to do so since I felt it would have been a conflict of interest and
rather self-promotional to push edits containing links of my
self-published works.</p>
<p>On <a href="https://reboil.com/mediawiki/2020-05-23">2023-05-23</a>, I decided to go ahead and upload to Wikimedia Commons
the updates of the <code>BK-2020-04-PID-1</code> SVG files containing the
corrections and clarifications I applied in <a href="https://reboil.com/mediawiki/2020-02">2020-02</a>/<a href="https://reboil.com/mediawiki/2020-03">2020-03</a>. I also
made some adjustments to text placement since, annoyingly, Wikimedia
Commons doesn't have an <code>ISO 3098</code> compliant font for use in technical
drawing SVG files; PNG previews of the uploaded SVGs showed text
converted into a generic sans serif font that is 25% wider than that
used by <strong>osifont</strong>. After some adjustments and reuploads, I ended up
with satisfying SVG and PDF versions uploaded to Wikimedia
Commons. Again, <a href="https://commons.wikimedia.org/wiki/File:ISO_10628-2_2012_Symbols_Sheet_1.svg">here</a> is a link to the first sheet of
<code>BK-2020-04-PID-1</code>; the description contains links to the other PDFs
and SVGs for all the sheets.</p>
<h2>Motivation</h2>
<p>A significant amount of legwork is involved in creating a reference
drawing when none meeting your criteria exists already. My criteria is
that works I publish should be compatible with a Creative Commons
BY-SA 4.0 license; creating <code>BK-2020-04-PID-1</code>, a palette of ISO 10628
symbols, was part of that process for me. I hope that the work I put
in helps save other people time which they can dedicate to leisure. I
believe leisurely people are the most capable of creative works. I
would prefer to live in a world where projects such as Wikipedia and
Wikimedia Commons can expand in scope to cover specialized
disciplines, saving people time from reinventing wheels.</p>
<p>Even if my uploaded work is hoovered up by an AI and spit out mixed
with others, my carefully crafted drawings will remain causally
upstream of the process; I think AI language models such as <a href="https://en.wikipedia.org/wiki/ChatGPT">ChatGPT</a>
will lubricate on-demand knowledge downloads for the public; the
quality of those downloads is dependent upon the quality of the data
set the language models are trained on. I'm okay with this process and
hope to find other like-minded people who are willing to make a living
making such contributions to common knowledge without the politics of
worrying about using copyright to protect trade secrets.</p>
0020230201T0929+00..dine bizaad binahooaah notes
https://reboil.com/ikiwiki/blog/posts/0020230201T0929+00..dine_bizaad_binahooaah_notes/
2023-05-31T19:53:12Z
2023-02-01T10:04:37Z
<h1>Diné Bizaad Bínáhooʼaah Notes</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-02#2023-02-01">2023-02-01</a>T09:31+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license and last updated on
<a href="https://reboil.com/mediawiki/2023-02#2023-05-31">2023-05-31</a>T19:10+00.</p>
<p>Edit(<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>):Add reboil.com wiki links.</p>
<h2>Background</h2>
<p>In <a href="https://reboil.com/mediawiki/2023-01">2023-01</a>, I decided to purchase a copy of "Diné Bizaad Bínáhooʼaah =
Rediscovering the Navajo Language" to aid me in my studies of the
Navajo language. I had tried out the Navajo lessons of Duolingo and
found them problematic when it came to anything more complex than
memorizing vocabulary (especially regarding verb conjugations).</p>
<p>So, as I read through it, I will record notes on this web page that I
think other readers may find useful.</p>
<h2>Stats</h2>
<ul>
<li>Title: Diné Bizaad Bínáhooʼaah = Rediscovering the Navajo language :
an introduction to the Navajo language</li>
<li>Authors:
<ul>
<li>Evangeline Parsons Yazzie</li>
<li>Margaret Speas</li>
</ul>
</li>
<li>Editors:
<ul>
<li>Jessie Ruffenach</li>
<li>Berlyn Yazzie (Navajo)</li>
</ul>
</li>
<li>ISBN: 978-1-893354-73-9</li>
<li>OCLC: <a href="https://www.worldcat.org/title/156845819">156845819</a></li>
<li>Edition: 1st</li>
<li>Printing: 3rd</li>
<li>Publisher: Salina Bookshelf, Inc.</li>
<li>Location: Flagstaff, Arizona</li>
</ul>
<h2>By page</h2>
<h3>Page xvii</h3>
<p>The following <a href="http://www.swarthmore.edu/SocSci/ifernal1/nla/halearch/halearch.htm">hyperlink</a>:</p>
<pre><code>http://www.swarthmore.edu/SocSci/ifernal1/nla/halearch/halearch.htm
</code></pre>
<p>is not valid as of <a href="https://reboil.com/mediawiki/2023-02#2023-02-01">2023-02-01</a>. Searching pages under the
<code>swarthmore.edu</code> domain yields this page which likely contains the
material referenced (i.e. "If you are not sure how this can be done
for Navajo, we suggest that you consult the materials on <strong>Situational
Navajo</strong>, by Wayne Holm, Irene Silentman and Laura Wallace, available
for download…"):</p>
<pre><code>https://fernald.domains.swarthmore.edu/nla/halearch/halearch.htm
</code></pre>
<p>This page and one level of outlinks has been saved via the Internet
Archive <a href="https://web.archive.org/web/20230201092813/https://fernald.domains.swarthmore.edu/nla/halearch/halearch.htm">here</a>.</p>
<h3>Page 3</h3>
<ol>
<li><p>The consonant ʼ</p>
<p>The glyph used in the text to encode the consonant named "glottal
stop" appears to be the glyph that is <a href="https://unicode-table.com/en/02BC/">MODIFIER LETTER APOSTROPHE
(U+02BC)</a> or <a href="https://unicode-table.com/en/2019/">RIGHT SINGLE QUOTATION MARK (U+2019)</a> in <a href="https://home.unicode.org/">Unicode</a>.</p>
<p>However, due to widespread input method limitations, the ASCII
character <a href="https://unicode-table.com/en/0027/">APOSTROPHE (U+0027)</a> is often used instead.</p>
<p>The text addresses this:</p>
<blockquote><p>You probably wonder why an apostrophe has been added to the list
above. The letter that looks like an apostrphe is called a <strong><strong>glottal
stop</strong></strong>. A glottal stop is a consonant. We will talk about the glottal
stop in the section below on consonants.</p></blockquote>
<p>In Navajo, the glottal stop is a consonant in the same class as <code>k</code> or
<code>x</code> which each have their own dedicated glyphs. A rational typesetter
would not use <a href="https://unicode-table.com/en/00D7/">MULTIPLICATION SIGN (U+00D7)</a> (×) instead of <a href="https://unicode-table.com/en/0078/">LATIN SMALL
LETTER X (U+0078)</a> (x) even though both use similar glyphs.</p>
<p>So, the question arises of whether to use <a href="https://unicode-table.com/en/02BC/">MODIFIER LETTER APOSTROPHE
(U+02BC)</a> or <a href="https://unicode-table.com/en/2019/">RIGHT SINGLE QUOTATION MARK (U+2019)</a>.</p>
<p>Regarding the difference, the <a href="https://www.unicode.org/versions/Unicode15.0.0/">Unicode Standard 15.0</a> (<a href="https://www.unicode.org/versions/Unicode15.0.0/UnicodeStandard-15.0.pdf">PDF</a>) has this to
say in its General Punctuation section of Writing Systems and
Punctuation:</p>
<blockquote><p><strong><strong>Apostrophes</strong></strong></p>
<p>U+0027 <strong>apostrophe</strong> is the most commonly used character for
apostrophe. For historical reasons, U+0027 is a particularly
overloaded character. In ASCII, it is used to represent a punctuation
mark (such as right single quotation mark, left single quotation mark,
apos- trophe punctuation, vertical line, or prime) or a modifier
letter (such as apostrophe modi- fier or acute accent). Punctuation
marks generally break words; modifier letters generally are considered
part of a word.</p>
<p>When text is set, U+2019 <strong>right single quotation mark</strong> is preferred
as apostrophe, but only U+0027 is present on most keyboards. Software
commonly offers a facility for auto- matically converting the U+0027
<strong>apostrophe</strong> to a contextually selected curly quotation glyph. In these
systems, a U+0027 in the data stream is always represented as a
straight ver- tical line and can never represent a curly apostrophe or
a right quotation mark.</p>
<p><strong><strong>Letter Apostrophe</strong></strong>. U+02BC <strong>modifier letter apostrophe</strong> is
preferred where the apostrophe is to represent a modifier letter (for
example, in transliterations to indicate a glottal stop). In the
latter case, it is also referred to as a <strong>letter apostrophe</strong>.</p>
<p><strong><strong>Punctuation Apostrophe</strong></strong>. U+2019 <strong>right single quotation mark</strong> is
preferred where the character is to represent a punctuation mark, as
for contractions: “We’ve been here before.” In this latter case,
U+2019 is also referred to as a punctuation apostrophe.</p>
<p>An implementation cannot assume that users’ text always adheres to the
distinction between these characters. The text may come from different
sources, including mapping from other character sets that do not make
this distinction between the letter apostrophe and the punctuation
apostrophe/right single quotation mark. In that case, all of them will
generally be represented by U+2019.</p>
<p>The semantics of U+2019 are therefore context dependent. For example,
if surrounded by letters or digits on both sides, it behaves as an
in-text punctuation character and does not separate words or lines.</p></blockquote>
<p>So, according to its standard, the apropriate Unicode character to use
for glottal stops in the Navajo language is <a href="https://unicode-table.com/en/02BC/">MODIFIER LETTER APOSTROPHE
(U+02BC)</a> (ʼ).</p>
<p>Before <a href="https://reboil.com/mediawiki/2023-02#2023-02-02">2023-02-02</a>, I've recommended use of <a href="https://unicode-table.com/en/2019/">RIGHT SINGLE QUOTATION MARK
(U+2019)</a> (’) primarily as a means to get away from using the
"overloaded" character <a href="https://unicode-table.com/en/0027/">APOSTROPHE (U+0027)</a> where reasonable. However,
going forward, I'm now recommending U+02BC instead.</p>
<p>Input methods designed for the Navajo language should dedicate an
entire key to <a href="https://unicode-table.com/en/02BC/">MODIFIER LETTER APOSTROPHE (U+02BC)</a> (ʼ) as it would for
the ASCII letter <a href="https://unicode-table.com/en/006B/">LATIN SMALL LETTER K (U+006B)</a> (k).</p>
<p>In summary, <code>ʼ</code> is the glottal stop consonant, not <code>'</code>.</p></li>
</ol>
<h2>See Also</h2>
<p>Wikipedia articles exist for the authors:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Evangeline_Parsons_Yazzie">Evangeline Parsons Yazzie</a></li>
<li><a href="https://en.wikipedia.org/wiki/Peggy_Speas">Margaret Speas</a></li>
</ul>
0020230104T1526Z..libro.fm recommendation
https://reboil.com/ikiwiki/blog/posts/0020230104T1526Z..libro.fm_recommendation/
2023-05-31T19:53:12Z
2023-01-04T20:53:32Z
<h1>Libro.fm Recommendation</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2023-01-04">2023-01-04</a>T15:26+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license and last updated on
<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>T19:09+00.</p>
<p><img src="https://reboil.com/res/2023/img/20230104T2058+00..A_tower_of_used_books_-_8443_300x200.jpg" title=""A tower of used books - 8443" ( ![img](https://commons.wikimedia.org/wiki/File:A_tower_of_used_books_-_8443.jpg) ) by Jorge Ryan ( <http://www.royan.com.ar/> ) is licensed under CC BY-SA 3.0 ( <https://creativecommons.org/licenses/by-sa/3.0/> )" alt="img" /></p>
<p>Edit(<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>):Add reboil.com wiki links.</p>
<h2>Background</h2>
<p>I enjoy listening to audiobooks. I first began listening to them
regularly in <a href="https://reboil.com/mediawiki/2010">2010</a> upon my return to <a href="https://en.wikipedia.org/wiki/Stanford_University">Stanford University</a> after serving
a 2-year mission for the <a href="https://en.wikipedia.org/wiki/The_Church_of_Jesus_Christ_of_Latter-day_Saints">LDS Church</a> in Panamá. The iPhone had come out
while I had been out of the country (I still remember seeing my first
iPhone at an electronics shop in <a href="https://en.wikipedia.org/wiki/David,_Chiriqu%C3%AD">David, Chiriquí</a>; I was amazed by how
reponsive the operating system was to touch screen input when resizing
photographs via the novel "pinch and zoom" mechanic.); I didn't
purchase an iPhone immediately (I think I would use a fliphone until
purchasing an iPhone from AT&T after I left college), but I did
purchase with my allowance from my father an <a href="https://en.wikipedia.org/wiki/IPod_Touch">iPod Touch</a> which was
basically an iPhone without a <a href="https://en.wikipedia.org/wiki/SIM_card">SIM card</a> slot. I bring up the iPod Touch
story because I believe I used its portability and Audible–iTunes
integration allowed me to listen to audiobooks while away from my
desktop computer. <a href="https://www.audible.com/">Audible</a> was the first company I purchased
audiobooks from; I would continue using it until <a href="https://reboil.com/mediawiki/2022">2022</a>.</p>
<h2>Before I left Audible</h2>
<p>I listened to Audible's audiobooks for about 12 years (<a href="https://reboil.com/mediawiki/2010">2010</a>/<a href="https://reboil.com/mediawiki/2022">2022</a>);
these were encrypted by Digital Rights Management (DRM) schemes that
inhibited copying. I had not yet learned the importance of using
<a href="https://en.wikipedia.org/wiki/Free_and_open-source_software">Free/Libre Open Source Software</a> (FLOSS) formats (I wouldn't stop
regularly using <a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a> until I purchased my first dedicated <a href="https://en.wikipedia.org/wiki/Debian">Debian</a>
GNU/Linux workstation from <a href="https://www.thinkpenguin.com/">Think Penguin</a> in <a href="https://reboil.com/mediawiki/2018">2018</a>). Therefore, I spent
thousands of USD over time buying audiobooks. Audible's feature of
allowing me to download and listen to audiobooks indefinitely (from
their servers and using only their closed-source apps) kept me
satisfied. Even today, in <a href="https://reboil.com/mediawiki/2023">2023</a>, I'm fairly certain I could install the
Audible app from the Google Play store and download every audiobook I
have "purchased" from them.</p>
<p>I believe my first misgivings about using Audible were when I realized
in transitioning to using FLOSS that I couldn't listen to my
audiobooks. In <a href="https://reboil.com/mediawiki/2018">2018</a> I would have had to use my Android smartphone or
my Windows machine since Audible published their software for use on
those platforms. There is no official Audible player in the Debian
repository. I can't open an encrypted Audible file in ffmpeg on my
Debian machine to compress it; I'd have to use a janky daisy chain of
audio inputs and output devices to even be able to do automatic speech
transcription in case I wanted to search what I was listening to at a
later time. Still, that wasn't enough activation energy to get me to
leave Audible until <a href="https://reboil.com/mediawiki/2022">2022</a>.</p>
<p>The thing that triggered my departure was something mundane: a billing
misunderstanding. At some point I had failed to realize that my
Audible credits did not roll over from year-to-year. In the beginning,
I didn't realize that such a policy existed since I generally used up
my platinum subscription credits immediately, especially when I drove
a long commute during <a href="https://reboil.com/mediawiki/2011">2011</a>/<a href="https://reboil.com/mediawiki/2018">2018</a> in the mostly featureless landscape of
southern Utah. After I resigned from my commuting job and I wasn't
forcing myself to drive two hours a day (nearly 10% of my life)
anymore, I found myself listening to Audible audiobooks less. By the
time 2022 rolled around, I hadn't checked my Audible app in months. It
was in late <a href="https://reboil.com/mediawiki/2022-03">2022-03</a> that I realized that my credits regularly had been
expiring instead of accumulating. A background daydream that I would
one day buy a long audiobook series on Audible all at once was
dispelled. I decided to leave.</p>
<h2>The interm</h2>
<p>I decided that if I were to return, it would be if I could guarantee
my audiobooks were DRM-free. For some months in 2022 I subsisted on
podcasts such as <a href="https://openargs.com/">Opening Arguments</a> (for law explanation by a lawyer),
<a href="https://www.citationpod.com/">Citation Needed</a> (for comedic takes on various Wikipedia articles) and
<a href="https://www.grc.com/SecurityNow.htm">Security Now</a> (to be aware of IT-specific news). In the past I knew
that it was possible to download audiobooks directly from authors if
authors took the effort to do so; for example, in late <a href="https://reboil.com/mediawiki/2020">2020</a>, I
purchased DRM-free copies of <a href="https://craphound.com/">Cory Doctorow</a>'s books <a href="https://craphound.com/category/radicalized-full/">Radicalized</a> (<a href="https://reboil.com/mediawiki/2019">2019</a>;
<a href="https://www.worldcat.org/title/1086067882">WorldCat</a>) and <a href="https://craphound.com/category/attacksurface/">Attack Surface</a> (<a href="https://reboil.com/mediawiki/2020">2020</a>; <a href="https://www.worldcat.org/title/1162185090">WorldCat</a>), paying him via PayPal
and receiving a download link to DRM-free zip files containing
unencrypted audio files. A friend recommended I use <a href="https://f-droid.org/en/packages/com.prangesoftwaresolutions.audioanchor/">AudioAnchor</a>, an
<a href="https://f-droid.org/en/">F-Droid</a> app designed to facilitate audiobook listening on an Android
phone; it worked great. However, Cory Doctorow is only a single
author; I wanted a DRM-free audiobook vendor.</p>
<h2>Libro.fm: My new audiobook source</h2>
<p>In late <a href="https://reboil.com/mediawiki/2022">2022</a> I discovered <a href="https://libro.fm/">Libro.fm</a> via a <a href="https://boingboing.net/2018/07/20/dont-restrict-me.html">blog post by Cory Doctorow on
boingboing.net</a> talking about how Google launched a DRM-free audiobook
store. In background that he provided, I latched onto some DRM-free
audiobook store recommendations that he made, including Downpour and
Libro.fm. I poked around both <a href="https://boingboing.net/2015/01/01/downpour-com-audiobooks-witho.html">Downpour</a> and <a href="https://boingboing.net/2017/05/09/audible-vs-the-future.html">Libro.fm</a> and found that I
liked Libro.fm best. I bought <a href="https://en.wikipedia.org/wiki/How_To:_Absurd_Scientific_Advice_for_Common_Real-World_Problems">How To</a>, by Randall Munroe, and <a href="https://en.wikipedia.org/wiki/Klara_and_the_Sun">Klara and
the Sun</a>, by Kazuo Ishiguro.</p>
<p>Since then, I've purchased various titles including:</p>
<ul>
<li><a href="https://libro.fm/audiobooks/9781980044369-what-we-owe-the-future">What We Owe the Future</a> by William MacAskill</li>
<li><a href="https://www.scottjucha.com/novels.html">The Silver Ships series</a> (minus the first book since that's an
Audible exclusive, but it's pulp sci-fi so, no book is really that
critical to the entertainment)</li>
<li><a href="https://libro.fm/audiobooks/9781454949435-american-crusade">American Crusade</a> by Andrew L. Seidel</li>
<li><a href="https://libro.fm/audiobooks/9780525635703-what-if-2">What If? 2</a> by Randall Munroe</li>
<li><a href="https://libro.fm/audiobooks/9780525528067-educated">Educated</a> by Tara Westover (from Obama's <a href="https://reboil.com/mediawiki/2019">2019</a> summer reading list)</li>
<li><a href="https://libro.fm/audiobooks/9781501220258-seveneves">Seveneves</a> (a book I already purchased on Audible back in <a href="https://reboil.com/mediawiki/2015">2015</a> but I
really wanted a copy I could preserve)</li>
<li><a href="https://libro.fm/audiobooks/9788417347086-artemisa">Artemisa</a> por Andy Weir (spanish version of Artemis)</li>
<li><a href="https://libro.fm/audiobooks/9788466662987-el-marciano">El marciano</a> por Andy Weir (spanish version of The Martian; Andy
Weir's works in english seem to be Audible exclusives, so those two
years walking around Panama didn't go completely to waste =P)</li>
<li><a href="https://libro.fm/audiobooks/9788418037122-proyecto-hail-mary">Proyecto Hail Mary</a> (spanish version of Project Hail Mary)</li>
<li><a href="https://libro.fm/audiobooks/9781494575281-npcs">NPCs</a> by Drew Hayes (some Dungeons and Dragons-themed comedy)</li>
</ul>
<p>I noticed that Libro.fm lacks the selection of Audible. For example,
it doesn't carry my favorite <a href="https://en.wikipedia.org/wiki/Terry_Pratchett">Terry Pratchett</a> novel <a href="https://en.wikipedia.org/wiki/Small_Gods">Small Gods</a> (<a href="https://reboil.com/mediawiki/1992">1992</a>)
but it does carry recent titles of his such as <a href="https://libro.fm/audiobooks/9780062099839-snuff">Snuff</a> (<a href="https://reboil.com/mediawiki/2011">2011</a>) and <a href="https://libro.fm/audiobooks/9780062430557-the-shepherd-s-crown">The
Shepherd's Crown</a> (<a href="https://reboil.com/mediawiki/2015">2015</a>).</p>
<h2>Aside: DRM piracy</h2>
<p>I imagine the main reason why Audible chooses to restrict access to
their audiobooks via DRM is: piracy. Some people, when they get their
hands on an unencrypted digital file, share it with others. Digital
copies can be manufactured at basically zero cost but commercial
publishers like Audible grew rich on profit margins on production and
distribution costs; books had mass which incurred costs upon which a
percentage fee could be applied at the final sale; when the
distribution cost fell to zero, instead of becoming like Apple and the
music industry in <a href="https://reboil.com/mediawiki/2006">2006</a> and simply selling songs at <a href="https://www.cnet.com/culture/apple-labels-stick-with-99-cents-per-itunes-song/">0.99 USD each</a>, they
chose to require customers to run secret software that would decrypt
books at the point of consumption. That isn't to say that all music
Apple sold wasn't locked by DRM; many were. But the point of my
retelling this history is to point out that DRM is not required to
make money.</p>
<p>Services such as Libro.fm sell audiobooks without DRM. No special
software is required to play the audio. It's true that I could upload
these files to some server and share them with my friends. However,
what I think keeps most people from doing so are issues of trust and
effort. Downloading and double-clicking on files you download from the
internet is a fast way for the average user to corrupt their computer
with malware. A sort of natural selection process of behaviors is at
work. Behaviors that result in broken computers due to downloading and
running files from unknown sources are seen as destructive and the
sites involved avoided. Behaviors that result in non-broken computers
and a simple high quality experience are seen as good. Some people
dedicate time to master the esoteric computer science techniques of
verifying cryptographic digests, preserving their anonymity via onion
routing, maintaining a firewall around their home networks, and
regularly updating their software with the latest security updates;
these people can be effective pirates. However, with all those skills
they can also become effective software developers and make money that
they can spend at places like Libro.fm or Downpour.com to save
themselves the trouble of having to bypass DRM restrictions in the
first place. The real valuable service DRM-free audiobook vendors can
provide is two parts:</p>
<ul>
<li>Files are guaranteed to be available for fast download.</li>
<li>Files are guaranteed not to be malicious.</li>
</ul>
<p>With piracy to safely avoid DRM media, a user might expect to spend
anywhere between an hour to weeks identifying and downloading media
that might be a trojan horse. With DRM-free vendors, a user can expect
to spend a few minutes with a commercial guarantee of the product's
authenticity. When you use Audible, you form an on-going contract that
Audible can end at any time, resulting in your "purchases" becoming
unusable noise. When you use Libro.fm, Libro.fm can't retroactively
make files they sold me unusable; without DRM, there is no mechanism
for controlling user behavior. A principle of Free/Libre Open Source
Software is the avoidance of such methods of control in order to grant
the user <a href="https://www.gnu.org/philosophy/free-sw.en.html">freedom</a>.</p>
<h2>Conclusion</h2>
<p>Although lacking in selection, Libro.fm surpasses Audible in the fact
that money I spend with them results in audiobooks that I can preserve
forever without worrying about finding an app to verify I have a
license to download some decryption key. This is why I'm redirecting
my cash flow towards DRM-free vendors.</p>
<h2>Copyright</h2>
<p>"<a href="https://commons.wikimedia.org/wiki/File:A_tower_of_used_books_-_8443.jpg">A tower of used books - 8443</a>" by <a href="http://www.royan.com.ar/">Jorge Royan</a> is licensed under <a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>.</p>
0020221110T2013Z..twitter inactive
https://reboil.com/ikiwiki/blog/posts/0020221110T2013Z..twitter_inactive/
2023-06-03T12:24:59Z
2023-01-04T15:24:51Z
<h1>Inactive on Twitter</h1>
<p>Created by <a href="https://baltakatei.com">Steven Baltakatei Sandoval</a> on
<a href="https://reboil.com/mediawiki/2022-11-10">2022-11-10</a>T20:14+00
under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> (🅭🅯🄎4.0) license and last updated on
<a href="https://reboil.com/mediawiki/2023-06-03">2023-06-03</a>T12:23+00.</p>
<p><img src="https://reboil.com/res/2022/img/20221110T2116Z_ISO_7010_M006.svg" title="Unplugging from an outlet. Public Domain image from ![img](https://commons.wikimedia.org/wiki/File:ISO_7010_M006.svg)" alt="img" /></p>
<p>UPDATE (<a href="https://reboil.com/mediawiki/2023-02-01">2023-02-01</a>): I think I finally managed to delete all my tweets
and likes from Twitter via <a href="https://tweetdelete.net/">TweetDelete</a>. Some previous attempts didn't
quite clear everything from <a href="https://reboil.com/mediawiki/2017">2017</a> and earlier. I've been enjoying using
my <a href="https://twit.social/@baltakatei">twit.social/@baltakatei</a> account with the <a href="https://github.com/tuskyapp/Tusky">Tusky</a> app via <a href="https://f-droid.org/repository/browse/?fdid=com.keylesspalace.tusky">F-Droid</a>.</p>
<p>UPDATE (<a href="https://reboil.com/mediawiki/2023-11-23">2022-11-23</a>): My <a href="https://twit.social/@baltakatei/109394577544743725">new</a> microblogging feed is at
<a href="https://twit.social/@baltakatei">twit.social/@baltakatei</a> , one of many Mastodon servers. <a href="https://twitter.com/baltakatei/status/1595456635262357504">My last
Twitter post</a> is an announcement of this migration. I chose <a href="https://twit.social">twit.social</a>
since it is operated by Leo Laporte, the host of several <a href="https://en.wikipedia.org/wiki/TWiT.tv">podcasts</a> and
<a href="https://en.wikipedia.org/wiki/TechTV">television shows</a> I have listened to in the past and found trustworthy
as far as communicating technology news. I still listen regularly to
his and Steve Gibson's <a href="https://www.grc.com/SecurityNow.htm">Security Now</a> podcast.</p>
<p>Edit(<a href="https://reboil.com/mediawiki/2023-05-31">2023-05-31</a>/<a href="https://reboil.com/mediawiki/2023-06-03">2023-06-03</a>):Add reboil.com wiki links.</p>
<p>I decided to not be active on the microblogging site <a href="https://twitter.com">Twitter</a> after
Elon Musk <a href="https://www.cnn.com/2022/10/27/tech/elon-musk-twitter/index.html">completed</a> his purchase of the publicly traded social media
company and promptly <a href="https://techcrunch.com/2022/10/27/elon-musk-fired-top-twitter-execs-including-ceo-reports-say/">fired the CEO</a> and dissolved the board of
directors, making himself the <a href="https://www.bbc.com/news/technology-63458380">only director</a>. I had developed some
trust of its original CEO, <a href="https://en.wikipedia.org/wiki/Jack_Dorsey">Jack Dorsey</a>, back when Twitter had been the
subject of discussion on <a href="https://en.wikipedia.org/wiki/Leo_Laporte">Leo Laporte</a>'s <a href="https://en.wikipedia.org/wiki/This_Week_in_Tech">This Week in Tech</a> podcast in
the last 00s. In the <a href="https://reboil.com/mediawiki/2010s">2010s</a> I decided that I would be okay publishing
text on Twitter because from the get-go the site explained that what
was submitted would be public; in contrast, Facebook (which I
deactivated back in the early <a href="https://reboil.com/mediawiki/2010s">2010s</a>, long before Zuckerberg renamed it
"Meta"), advertised privacy settings that would allow posts to be only
shared with a limited number of contacts (and with Facebook
employees); however, the privacy settings were complex and there
didn't seem to be a default setting that would stick over time. So,
Twitter's transparently public nature seems more honest. My posts
would be available and there was no sign that the administrators of
the site favored any particular political party; the most common
reason I saw for Tweets being removed was due to threats of violence
or harassment. Prior to <a href="https://reboil.com/mediawiki/2022">2022</a>, posts to Twitter could be relied upon to
remain unfiltered, provided you weren't threatening violence or
spreading misinformation.</p>
<p>That changed in <a href="https://reboil.com/mediawiki/2022">2022</a> when I saw Elon Musk purchase the company, making
the service his own privately owned property. Now, were I to continue
to post to Twitter, I was making a public donation to Musk that he
could choose to throw away like he did the company leaders that he
fired. That in itself may not have been a dealbreaker for me, but he
also proceeded to <a href="https://www.aljazeera.com/economy/2022/11/7/twitter-owner-musk-endorses-republicans-in-us-midterms">endorse</a> the Republican Party which <a href="https://apnews.com/article/donald-trump-campaigns-utah-election-2020-campaign-2016-4b1019e8371129c7bb25ab2731845046">continues</a> to rely
upon the criminal President who organized the <a href="https://en.wikipedia.org/wiki/January_6_United_States_Capitol_attack">attempted coup of the
United States</a> of <a href="https://reboil.com/mediawiki/2021-01-06">2021-01-06</a>. His <a href="https://web.archive.org/web/20221109214033/https://twitter.com/elonmusk/status/1589639376186724354">tweet</a> removed any doubt that he would
turn Twitter into a tool to promote the Republican Party. Privileged
mechanisms to promote his own political opinions at the expense of
silencing others by leveraging his exclusive ownership of Twitter
include:</p>
<ul>
<li>Removing user-submitted content that criticize him (as he has <a href="https://www.wsj.com/articles/elon-musk-says-twitter-will-permanently-ban-users-who-impersonate-others-11667836289">banned</a>
users for adopting his name and image in protest).</li>
<li>Removing features from his critics (as Congresswoman Alexandria
Ocasio-Cortez <a href="https://www.thewrap.com/aoc-asks-elon-musk-why-twitter-wiped-her-account-history-i-seem-to-have-gotten-under-a-certain-billionaires-skin-video/">reported</a>).</li>
</ul>
<p>I admit that many people are firmly rooted in habit to use Twitter as
their default social media space to remain connected to
eachother. Choosing to leave Twitter for another space risks losing
contact with people who have not yet left. Habitual use of Twitter is
like a <a href="https://en.wikipedia.org/wiki/Gravitational_potential">gravity well</a> that requires a significant activation energy of
its inhabitants to escape. However, I stand by my decision for reasons
similar to those that compelled me to leave Facebook: I can no longer
assume what I post will be secure from censorship.</p>
<p>So, what is my social media space? Without Twitter, <a href="https://old.reddit.com">Reddit</a> is my
default. I'd like to make use of this blog more often, although I will
need to figure out a more convenient way to post content Currently, my process is:</p>
<ul>
<li>Author posts in Emacs Org mode.</li>
<li>Export posts into Markdown text.</li>
<li>Commit the Markdown text to a git repo.</li>
<li>Push the commit to my <a href="https://reboil.com">reboil.com</a> server.</li>
<li>Wait for an update script to run or log into the server to run it
manually.</li>
</ul>
<p>I could probably automate all that to a single Emacs function or bash
script, given enough time, in order to mimic the simplicity of
microblogging. However, for now, these longer form posts satisfy me
for now.</p>