1673 lines
No EOL
94 KiB
XML
1673 lines
No EOL
94 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<?xml-stylesheet href="/simple-atom.xslt" type="text/xsl"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
|
||
<title>joshua.seigler.net</title>
|
||
<subtitle>Personal homepage of Joshua Seigler</subtitle>
|
||
<link href="https://joshua.seigler.net/feed.xml" rel="self" />
|
||
<link href="https://joshua.seigler.net/" />
|
||
<updated>2025-06-26T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/</id>
|
||
<author>
|
||
<name>Joshua Seigler</name>
|
||
</author>
|
||
<entry>
|
||
<title>FFmpeg audio cleanup</title>
|
||
<link href="https://joshua.seigler.net/posts/ffmpeg-audio-cleanup/" />
|
||
<updated>2025-06-26T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/ffmpeg-audio-cleanup/</id>
|
||
<content type="html"><p>
|
||
I recently needed to process 20+ phone audio recordings. The files are mp3
|
||
recordings in stereo, made in an environment with echoes and noise from
|
||
fans/heaters.
|
||
</p>
|
||
<p>
|
||
Although I could do it easily with
|
||
<a href="https://tenacityaudio.org/" target="_blank" rel="noopener"
|
||
>Tenacity</a
|
||
>
|
||
I didn’t want to use a manual process, since it would take days. So I tried
|
||
using FFmpeg filters and Bash scripting.
|
||
</p>
|
||
<p>
|
||
I found an FFmpeg filter called
|
||
<a
|
||
href="https://ffmpeg.org/ffmpeg-filters.html#compand"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>compand</a
|
||
>
|
||
which lets you map an input decibel range to an output decibel range. I also
|
||
used the
|
||
<a
|
||
href="https://ffmpeg.org/ffmpeg-filters.html#anlmdn"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>anlmdn</a
|
||
>
|
||
filter to reduce noise, and the
|
||
<a
|
||
href="https://ffmpeg.org/ffmpeg-filters.html#highpass"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>highpass</a
|
||
>
|
||
filter to help with clarity.
|
||
</p>
|
||
<p>I ran into a couple gotchas.</p>
|
||
<ol>
|
||
<li>
|
||
<code>mpv</code> does something special for audio playback that prevents
|
||
audio from clipping. <code>vlc</code> plays the file as it is.
|
||
</li>
|
||
<li>
|
||
Because the compressor has an attack and decay (which is necessary for
|
||
things to sound good) it can cause clipping if the volume rises sharply.
|
||
Applying a <code>delay</code> parameter with half the duration of the attack
|
||
length fixed this.
|
||
</li>
|
||
</ol>
|
||
<p>Here is the script:</p>
|
||
<pre
|
||
class="language-bash"
|
||
><code class="language-bash"><span class="token shebang important">#!/bin/bash</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$#</span>"</span> <span class="token operator">==</span> <span class="token string">"0"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
|
||
<span class="token builtin class-name">echo</span> <span class="token string">"Error: no arguments provided."</span>
|
||
<span class="token builtin class-name">echo</span> <span class="token string">"Usage: <span class="token variable">$0</span> file1 file2 file3 ..."</span>
|
||
<span class="token builtin class-name">echo</span> <span class="token string">" or: <span class="token variable">$0</span> *.ext"</span>
|
||
<span class="token builtin class-name">exit</span> <span class="token number">1</span>
|
||
<span class="token keyword">fi</span>
|
||
|
||
<span class="token builtin class-name">trap</span> <span class="token string">"exit"</span> INT
|
||
|
||
<span class="token keyword">while</span> <span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$#</span>"</span> <span class="token operator">!=</span> <span class="token string">"0"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">do</span>
|
||
<span class="token assign-left variable">base</span><span class="token operator">=</span><span class="token string">"<span class="token variable">${1<span class="token operator">%%</span>.*}</span>"</span>
|
||
<span class="token assign-left variable">ext</span><span class="token operator">=</span><span class="token string">"<span class="token variable">${1<span class="token operator">##</span>*.}</span>"</span>
|
||
<span class="token assign-left variable">outfile</span><span class="token operator">=</span><span class="token string">"./normalized--<span class="token variable">$base</span>.<span class="token variable">$ext</span>"</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token operator">!</span> <span class="token parameter variable">-f</span> <span class="token string">"<span class="token variable">$outfile</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
|
||
<span class="token builtin class-name">echo</span> <span class="token string">"Processing <span class="token variable">$1</span>"</span>
|
||
ffmpeg <span class="token parameter variable">-i</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token parameter variable">-v</span> warning <span class="token parameter variable">-ac</span> <span class="token number">1</span> <span class="token parameter variable">-af</span> <span class="token string">"compand=attacks=0.3:decays=0.3:delay=0.15:points=-80/-300|-45/-25|-27/-15|0/-12|20/-12,anlmdn=s=10,highpass=f=500"</span> <span class="token parameter variable">-threads</span> <span class="token number">4</span> <span class="token string">"<span class="token variable">$outfile</span>"</span>
|
||
<span class="token keyword">else</span>
|
||
<span class="token builtin class-name">echo</span> <span class="token string">"Skipping <span class="token variable">$1</span>, already processed."</span>
|
||
<span class="token keyword">fi</span>
|
||
<span class="token builtin class-name">shift</span>
|
||
<span class="token keyword">done</span>
|
||
</code></pre>
|
||
<p>
|
||
If this is useful to you please leave a comment or send an email, I would love
|
||
to hear about it.
|
||
</p>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>War</title>
|
||
<link href="https://joshua.seigler.net/posts/july-21-2025/" />
|
||
<updated>2025-06-21T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/july-21-2025/</id>
|
||
<content type="html"><p>
|
||
Today the USA announced its bombing of three locations in Iran, including
|
||
Iran’s main nuclear enrichment site, located under a mountain in Fordow. How
|
||
far will things go?
|
||
</p>
|
||
<p>
|
||
Here is the only way I know of to have peace: live every day as if tomorrow
|
||
you will face death, where it will be too late for repentance, too late for a
|
||
change of heart. As St. Isaac the Syrian says<sup class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/july-21-2025/#footnote1">[1]</a
|
||
><a class="footnote-anchor" id="footnote-ref1"></a></sup
|
||
>:
|
||
</p>
|
||
<blockquote class="feature">
|
||
<p>
|
||
Take hold of your life before your light grows dark and you seek help and do
|
||
not find it. This life has been given to you for repentance; do not waste it
|
||
in vain pursuits.
|
||
</p>
|
||
<p>
|
||
Woe to us! We neither realize just how valuable our soul is, nor comprehend
|
||
the type of life we have been called to lead. We place great significance on
|
||
this present life, on illnesses, on the state of society, and on the
|
||
sorrows, evils, and comforts of this world.
|
||
</p>
|
||
<p>
|
||
However, blessed is the person, O Lord Jesus Christ, who receives help from
|
||
You. You, O Lord, are the only powerful One. Turn our faces away from the
|
||
desire for this world so that we may covet You alone. Grant us, O Lord,
|
||
understanding, so that we may comprehend just how deceitful this present
|
||
world is, and so that we do not believe in this shadow as if it were the
|
||
truth.
|
||
</p>
|
||
<p>
|
||
Seek the Lord, and be strengthened through hope. Seek His face through
|
||
repentance, and you will be sanctified and cleansed from your sins, on
|
||
account of the sanctity of His face. Hasten to the Lord, all of you who are
|
||
guilty of sins, for He is able to forgive sins and overlook mistakes. For He
|
||
made an oath and declared thus:
|
||
<em
|
||
>“I live, says the Lord. I do not desire the death of the sinner until he
|
||
repents from his evil way and lives” (Ez. 13:23)</em
|
||
>.
|
||
</p>
|
||
</blockquote>
|
||
<p>
|
||
May we not be tested beyond what we can bear, and may we have indestructible
|
||
peace that is not of this world.
|
||
</p>
|
||
<hr class="footnotes-sep" />
|
||
<section class="footnotes">
|
||
<ol class="footnotes-list">
|
||
<li id="footnote1" class="footnote-item">
|
||
<p>
|
||
Quote copied from
|
||
<a
|
||
href="https://www.stnektariosmonastery.org/repentance-and-confession/This%20Life%20Has%20Been%20Given%20to%20Us%20for%20Repentance%20-%20St.%20Isaac%20the%20Syrian.pdf"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>St. Nectarios Monastery</a
|
||
>
|
||
and
|
||
<a
|
||
href="https://orthodoxwiki.org/Isaac_of_Syria"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>OrthodoxWiki</a
|
||
>
|
||
<a
|
||
href="https://joshua.seigler.net/posts/july-21-2025/#footnote-ref1"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>My Very Own GitHub Pages</title>
|
||
<link href="https://joshua.seigler.net/posts/my-very-own-github-pages/" />
|
||
<updated>2025-06-15T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/my-very-own-github-pages/</id>
|
||
<content type="html"><p>
|
||
I recently started self-hosting
|
||
<a href="https://forgejo.org/" target="_blank" rel="noopener">Forgejo</a>, but
|
||
I wanted something to replace GitHub pages, which has been very convenient for
|
||
publishing little website projects. My server runs Debian, so I decided to use
|
||
<a href="https://github.com/adnanh/webhook" target="_blank" rel="noopener"
|
||
>webhook</a
|
||
>
|
||
and
|
||
<a href="https://caddyserver.com/" target="_blank" rel="noopener">Caddy</a>.
|
||
I’m very happy how it turned out.
|
||
</p>
|
||
<h2 id="the-objective" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#the-objective"
|
||
aria-hidden="true"
|
||
></a>
|
||
The objective
|
||
</h2>
|
||
<p>
|
||
When I push a <code>gh-pages</code> branch to any public repository on my
|
||
Forgejo instance, the name of the repo is used as a domain name (e.g.
|
||
<a href="https://marklink.pages.seigler.net/" target="_blank" rel="noopener"
|
||
>marklink.pages.seigler.net</a
|
||
>) and the branch contents are automatically served with SSL. If I push
|
||
updates to the branch, they are automatically published. If the branch or repo
|
||
is deleted, the site is taken down.
|
||
</p>
|
||
<h2 id="how-to-do-it" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#how-to-do-it"
|
||
aria-hidden="true"
|
||
></a>
|
||
How to do it
|
||
</h2>
|
||
<h3 id="debian-server-preparation" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#debian-server-preparation"
|
||
aria-hidden="true"
|
||
></a>
|
||
Debian server preparation
|
||
</h3>
|
||
<p>
|
||
In case you don’t have a basic server setup routine yet, this is a good start:
|
||
</p>
|
||
<ul>
|
||
<li>Change the default root password.</li>
|
||
<li>
|
||
Create a new user and add it to the sudo group. In my examples below the
|
||
user is <code>joshua</code>.
|
||
</li>
|
||
<li>
|
||
Use <code>ssh-copy-id</code> to install your ssl pubkey for easier login.
|
||
</li>
|
||
<li>Disable/lock root’s password.</li>
|
||
<li>
|
||
Disable root login over ssh and change the SSL port number. Pick a new port
|
||
lower than 1024.
|
||
</li>
|
||
<li>
|
||
Edit your local <code>~/.ssh/config</code> so you don’t have to specify the
|
||
port number every time you connect.
|
||
</li>
|
||
<li>
|
||
On the server, install and enable <code>ufw</code> and
|
||
<code>fail2ban</code>. In addition to allowing your custom SSL port, be sure
|
||
to enable ports 80 and 443 with
|
||
<code>sudo ufw allow &quot;WWW Full&quot;</code>.
|
||
</li>
|
||
</ul>
|
||
<h3 id="caddy" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#caddy"
|
||
aria-hidden="true"
|
||
></a>
|
||
Caddy
|
||
</h3>
|
||
<p>
|
||
I usually use nginx, but I wanted to give Caddy a shot, and it has been a
|
||
great experience. I installed Caddy using the
|
||
<a href="https://caddyserver.com/docs/install" target="_blank" rel="noopener"
|
||
>official instructions</a
|
||
>.<br />
|
||
Here is the Caddyfile I made—you will need to change the domain names and the
|
||
email. Email could be removed, but it is there so that SSL certificate issuers
|
||
can contact you if there is a problem with your certificates.
|
||
</p>
|
||
<p><code>/etc/caddy/Caddyfile</code></p>
|
||
<pre class="language-caddy"><code class="language-caddy"># Global options block
|
||
{
|
||
email you@example.com # &lt;&lt;&lt;&lt; CHANGE THIS &lt;&lt;&lt;&lt;
|
||
on_demand_tls {
|
||
ask http://localhost/check
|
||
}
|
||
}
|
||
|
||
# Webhooks
|
||
https://webhooks.subdomain.here.tld { &lt;&lt;&lt;&lt; CHANGE THIS &lt;&lt;&lt;&lt;
|
||
reverse_proxy localhost:9000
|
||
}
|
||
|
||
# Filter for which SSL certs we will create. Prevents abuse.
|
||
http://localhost {
|
||
handle /check {
|
||
root * /var/www
|
||
@deny not file /{query.domain}/
|
||
respond @deny 404
|
||
}
|
||
}
|
||
|
||
# This automatically handles upgrading http:// requests with a redirect
|
||
https:// {
|
||
tls {
|
||
on_demand
|
||
}
|
||
root /var/www
|
||
rewrite /{host}{uri}
|
||
@forbidden {
|
||
path /.*
|
||
}
|
||
respond @forbidden 404
|
||
file_server
|
||
}
|
||
|
||
# Refer to the Caddy docs for more information:
|
||
# https://caddyserver.com/docs/caddyfile
|
||
|
||
# This config based on information at
|
||
# https://caddy.community/t/on-demand-tls-with-dynamic-content-paths/18140
|
||
# checked and corrected with `caddy validate`
|
||
</code></pre>
|
||
<p>
|
||
I also took ownership of <code>/var/www</code> with
|
||
<code>chown -R joshua:joshua /var/www</code> since the webhooks will run as my
|
||
login account.
|
||
</p>
|
||
<h3 id="webhooks" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#webhooks"
|
||
aria-hidden="true"
|
||
></a>
|
||
Webhooks
|
||
</h3>
|
||
<p>In my home directory I defined two hook scripts:</p>
|
||
<p><code>~/webhooks/update-pages.sh</code></p>
|
||
<pre
|
||
class="language-bash"
|
||
><code class="language-bash"><span class="token shebang important">#!/bin/bash</span>
|
||
<span class="token comment"># parameter 1 is repo name, parameter 2 is clone url</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">"/"</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">".."</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">"*"</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token parameter variable">-d</span> <span class="token string">"/var/www/<span class="token variable">$1</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
|
||
<span class="token builtin class-name">cd</span> <span class="token string">"/var/www/<span class="token variable">$1</span>"</span><span class="token punctuation">;</span>
|
||
<span class="token function">git</span> fetch origin gh-pages<span class="token punctuation">;</span>
|
||
<span class="token function">git</span> reset <span class="token parameter variable">--hard</span> origin/gh-pages<span class="token punctuation">;</span>
|
||
<span class="token builtin class-name">exit</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">fi</span><span class="token punctuation">;</span>
|
||
<span class="token function">git</span> clone <span class="token parameter variable">-b</span> gh-pages --single-branch <span class="token string">"<span class="token variable">$2</span>"</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">||</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
</code></pre>
|
||
<p><code>~/webhooks/remove-pages.sh</code></p>
|
||
<pre
|
||
class="language-bash"
|
||
><code class="language-bash"><span class="token shebang important">#!/bin/bash</span>
|
||
<span class="token comment"># parameter 1 is repo name</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">"/"</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">".."</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$1</span>"</span> <span class="token operator">==</span> *<span class="token string">"*"</span>* <span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">[</span> <span class="token parameter variable">-d</span> <span class="token string">"/var/www/<span class="token variable">$1</span>"</span> <span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token builtin class-name">exit</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token builtin class-name">cd</span> <span class="token string">"/var/www"</span><span class="token punctuation">;</span>
|
||
<span class="token function">rm</span> <span class="token parameter variable">-rf</span> <span class="token string">"/var/www/<span class="token variable">$1</span>"</span><span class="token punctuation">;</span>
|
||
</code></pre>
|
||
<p>
|
||
To trigger these hooks I am using <code>webhook</code> which is in the default
|
||
Debian repository.
|
||
</p>
|
||
<p>
|
||
Here are the hook definitions: one for creating/updating a site, and one for
|
||
deleting. You will need to generate one or two secret values that the server
|
||
can use to know that the webhook is authorized to run. I used linux command
|
||
<code>uuidgen -r</code> to create mine. Save these values so you can enter
|
||
them in Forgejo later.
|
||
</p>
|
||
<p>
|
||
Also make sure to replace your execute-command lines with ones referencing
|
||
your username and script paths.
|
||
</p>
|
||
<p><code>/etc/webhook.conf</code></p>
|
||
<pre
|
||
class="language-json"
|
||
><code class="language-json"><span class="token punctuation">[</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"update-pages"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"execute-command"</span><span class="token operator">:</span> <span class="token string">"/usr/bin/sudo"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"pass-arguments-to-command"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">[</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"-u"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"joshua"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"/home/joshua/webhooks/update-pages.sh"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"payload"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"repository.name"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"payload"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"repository.clone_url"</span> <span class="token punctuation">}</span>
|
||
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
||
<span class="token property">"trigger-rule"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"and"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">[</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"match"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"payload-hmac-sha256"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"secret"</span><span class="token operator">:</span> <span class="token string">"(omitted)"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"parameter"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"header"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"X-Forgejo-Signature"</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"match"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"value"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">"refs/heads/gh-pages"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"parameter"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"payload"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"ref"</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">]</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"remove-pages"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"execute-command"</span><span class="token operator">:</span> <span class="token string">"/usr/bin/sudo"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"pass-arguments-to-command"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">[</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"-u"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"joshua"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"string"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"/home/joshua/webhooks/remove-pages.sh"</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span> <span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"payload"</span><span class="token punctuation">,</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"repository.name"</span> <span class="token punctuation">}</span>
|
||
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
||
<span class="token property">"trigger-rule"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"and"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">[</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"match"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"payload-hmac-sha256"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"secret"</span><span class="token operator">:</span> <span class="token string">"(omitted)"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"parameter"</span><span class="token operator">:</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token property">"source"</span><span class="token operator">:</span> <span class="token string">"header"</span><span class="token punctuation">,</span>
|
||
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"X-Forgejo-Signature"</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">]</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">]</span>
|
||
</code></pre>
|
||
<h3 id="forgejo" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#forgejo"
|
||
aria-hidden="true"
|
||
></a>
|
||
Forgejo
|
||
</h3>
|
||
<p>
|
||
Forgejo supports running webhooks conditionally triggered by certain
|
||
conditions.<br />
|
||
Under my main user settings I set up each webhook:
|
||
</p>
|
||
<h4 id="update-pages" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#update-pages"
|
||
aria-hidden="true"
|
||
></a>
|
||
Update pages
|
||
</h4>
|
||
<p>
|
||
Target URL: https:// <em>your domain here</em> /hooks/update-pages<br />
|
||
HTTP Method: <code>POST</code> (the default)<br />
|
||
POST content type: <code>application/json</code> (the default)<br />
|
||
Secret: <em>omitted, use your own</em><br />
|
||
Trigger on: Push events<br />
|
||
Branch filter: <code>gh-pages</code>
|
||
</p>
|
||
<h4 id="remove-pages" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#remove-pages"
|
||
aria-hidden="true"
|
||
></a>
|
||
Remove pages
|
||
</h4>
|
||
<p>
|
||
Target URL: https:// <em>your domain here</em> /hooks/remove-pages<br />
|
||
HTTP Method: <code>POST</code> (the default)<br />
|
||
POST content type: <code>application/json</code> (the default)<br />
|
||
Secret: <em>omitted, use your own</em><br />
|
||
Trigger on: Custom Events &gt; Repository &gt; Delete<br />
|
||
Branch filter: <code>gh-pages</code>
|
||
</p>
|
||
<h2 id="conclusion" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/my-very-own-github-pages/#conclusion"
|
||
aria-hidden="true"
|
||
></a>
|
||
Conclusion
|
||
</h2>
|
||
<p>
|
||
It works!<br />
|
||
Here is
|
||
<a
|
||
href="https://git.apps.seigler.net/joshua/marklink.pages.seigler.net"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>the marklink repo in my Forgejo instance</a
|
||
>
|
||
and
|
||
<a href="https://marklink.pages.seigler.net/" target="_blank" rel="noopener"
|
||
>its contents on my Caddy server</a
|
||
>.
|
||
</p>
|
||
<p>
|
||
That repo is just HTML and JS with only a gh-pages branch, but for repos with
|
||
npm build scripts, I use
|
||
<a
|
||
href="https://www.npmjs.com/package/gh-pages"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>gh-pages @ npm</a
|
||
>
|
||
to push the build to a gh-pages branch and up to the server.
|
||
</p>
|
||
<p>
|
||
I’m putting off rolling my own CI server, but I imagine that’s the next stage
|
||
here. Stay tuned.
|
||
</p>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Tools of the trade</title>
|
||
<link href="https://joshua.seigler.net/posts/tools-of-the-trade/" />
|
||
<updated>2025-05-15T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/tools-of-the-trade/</id>
|
||
<content type="html"><p>
|
||
Everyone has different tools that they find especially effective. Here are
|
||
some I have found with a few words about why I like them.
|
||
</p>
|
||
<blockquote>
|
||
<p>
|
||
Update: I made a <a href="https://joshua.seigler.net/uses">/uses</a> page
|
||
that lists these tools and many others I like.
|
||
</p>
|
||
</blockquote>
|
||
<h3 id="mise-en-place" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#mise-en-place"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://mise.jdx.dev/" target="_blank" rel="noopener"
|
||
>mise-en-place</a
|
||
>
|
||
</h3>
|
||
<p>
|
||
Universal dev tool version manager. Specify tool versions in a config file and
|
||
this tool can ensure that they are installed and active when entering the
|
||
project directory. Amazing for getting a new dev environment set up in
|
||
seconds. Replaces <code>asdf</code>, <code>nvm</code>, <code>pyenv</code>,
|
||
<code>venv</code>, <code>rbenv</code>, and many other tool-specific version
|
||
managers. Supports an incredible number of tools thanks to compatibility with
|
||
<code>asdf</code>.
|
||
</p>
|
||
<p>
|
||
It also supports installing specific global tools, like
|
||
<code>angular-cli</code> from <code>npm</code>, or <code>stack-pr</code> from
|
||
<code>pipx</code>.
|
||
</p>
|
||
<h3 id="stack-pr" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#stack-pr"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://github.com/modular/stack-pr" target="_blank" rel="noopener"
|
||
>stack-pr</a
|
||
>
|
||
</h3>
|
||
<p>
|
||
Open source tool for
|
||
<a href="https://www.stacking.dev/" target="_blank" rel="noopener"
|
||
>stacking PRs</a
|
||
>.
|
||
</p>
|
||
<p>
|
||
PR stacks are, as far as I can tell, the best way to manage large features in
|
||
git. I first heard about this practice in a series of blog posts from
|
||
Graphite, a company offering free PR-stacking software and related paid
|
||
services. But you don’t need a custom CI flow or managed service for stacking
|
||
to work - this CLI tool or one of the others at
|
||
<a href="https://www.stacking.dev/" target="_blank" rel="noopener"
|
||
>stacking.dev</a
|
||
>
|
||
can take care of this.
|
||
</p>
|
||
<p>If you start using PR stacks your whole company will start copying you.</p>
|
||
<h3 id="xc" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#xc"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://xcfile.dev/" target="_blank" rel="noopener">xc</a>
|
||
</h3>
|
||
<p>Markdown based task runner.</p>
|
||
<p>
|
||
Define tasks in code blocks in markdown, and call them from the CLI. Serves as
|
||
both task definition and documentation.
|
||
</p>
|
||
<h3 id="pd2slack" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#pd2slack"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a
|
||
href="https://github.com/sidpremkumar/pd2slack"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>pd2slack</a
|
||
>
|
||
</h3>
|
||
<p>
|
||
Simple python script to update the members of a Slack group such as
|
||
<code>@oncall</code> to match the active member(s) of a PagerDuty schedule.
|
||
This replaces several expensive SAAS services.
|
||
</p>
|
||
<h3 id="syncthing" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#syncthing"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://syncthing.net/" target="_blank" rel="noopener">SyncThing</a>
|
||
</h3>
|
||
<p>
|
||
P2P alternative to Dropbox, supports mobile and desktop. Synchronize folders
|
||
of content across all my devices.
|
||
</p>
|
||
<h3 id="obsidian" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#obsidian"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://obsidian.md/" target="_blank" rel="noopener">Obsidian</a>
|
||
</h3>
|
||
<p>For notes and reference. Sync across devices with <code>syncthing</code>.</p>
|
||
<h3 id="keepassxc" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/tools-of-the-trade/#keepassxc"
|
||
aria-hidden="true"
|
||
></a>
|
||
<a href="https://keepassxc.org/" target="_blank" rel="noopener">KeePassXC</a>
|
||
</h3>
|
||
<p>For passwords. Sync across devices with <code>syncthing</code>.</p>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Thinking machines</title>
|
||
<link href="https://joshua.seigler.net/posts/thinking-machines/" />
|
||
<updated>2025-04-24T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/thinking-machines/</id>
|
||
<content type="html"><p>
|
||
There’s an exchange early in the classic '80s movie
|
||
<a
|
||
href="https://www.themoviedb.org/movie/97-tron"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>TRON</a
|
||
>. Some scientists are talking shop:
|
||
</p>
|
||
<p>
|
||
<img
|
||
src="https://joshua.seigler.net/2025-04-24--computers-will-start-thinking.jpg?v=72b55e6fa16c"
|
||
alt="Still from TRON, left to right Linda, Alan, and Gibbs, in conversation."
|
||
/>
|
||
</p>
|
||
<blockquote>
|
||
<p>
|
||
<strong>ALAN:</strong> I tell ya, ever since he got that Master Control
|
||
Program, system’s got more bugs than a bait store.
|
||
</p>
|
||
<p>
|
||
<strong>GIBBS:</strong> Ehh, you gotta expect some static. After all,
|
||
computers are just machines, they can’t think…
|
||
</p>
|
||
<p><strong>ALAN:</strong> Programs will be thinking <em>soon</em>.</p>
|
||
<p>
|
||
<strong>GIBBS:</strong> (wryly) Hahaha, won’t that be grand –
|
||
<em
|
||
>computers and the programs will start thinking, and the people will
|
||
stop!</em
|
||
>
|
||
</p>
|
||
</blockquote>
|
||
<p>
|
||
Gibbs has a point. The modern vision of a utopian future is one where work is
|
||
relieved, and people are free to pursue leisure, or exercise their creativity
|
||
with art, writing, and poetry. Thinking computers are here now, in the form of
|
||
“large language models” (LLMs) like ChatGPT. Setting aside the irony that
|
||
creative works are the first and most visible applications of LLM technology –
|
||
is that imagined future actually a good one?
|
||
</p>
|
||
<h2 id="mom-is-always-right" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/thinking-machines/#mom-is-always-right"
|
||
aria-hidden="true"
|
||
></a>
|
||
Mom is always right
|
||
</h2>
|
||
<p>
|
||
When I was a kid, I remember a day going to yard sales with my mom in the
|
||
family minivan. It was early summer, a hot day. The windows were down, and I
|
||
complained that if the vehicle has good air conditioning, we should use it.
|
||
What was the point in getting all hot? “To get used to the warm weather,” came
|
||
the answer. What an injustice! We were sweating back there! Later in life, I
|
||
took a short trip to Arizona in August. Everyone scurried from building to
|
||
building. Where the sun was doubled, reflected off of glass skyscrapers, the
|
||
temperature jump was alarming. It was actually unsafe to spend long stretches
|
||
outside unprepared. But when I returned to Massachusetts, for the rest of the
|
||
summer 85 or 90 degrees Fahrenheit felt like nothing.
|
||
</p>
|
||
<p>
|
||
All that to say, the work that LLM technology offers to relieve isn’t just
|
||
about achieving a result. The effort maintains and builds our abilities. Work
|
||
pushes us to connect to each other for help, or to persevere in doing
|
||
something difficult. Outsourcing that work eventually means losing the ability
|
||
to do it yourself.
|
||
</p>
|
||
<h2 id="attention-must-be-paid" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/thinking-machines/#attention-must-be-paid"
|
||
aria-hidden="true"
|
||
></a>
|
||
Attention must be paid
|
||
</h2>
|
||
<p>
|
||
Simply put, an LLM is a document completion engine. You give it text, and it
|
||
extends it. The result doesn’t have to be true, it just has to be convincing.
|
||
No amount of pre-training or guard rails will make it truthful. It does often
|
||
say true things, but that’s not the point, it’s more of a happy accident.
|
||
</p>
|
||
<p>
|
||
Because they are built from essentially the whole public internet, LLMs also
|
||
have a strong connection to The Algorithm. Algorithms that run social media
|
||
feeds and online advertising are designed to attract human attention, a
|
||
precious thing. Social media algorithms and LLMs are oriented towards
|
||
capturing that attention. The foundational LLM paper is even called,
|
||
“Attention is all you need”. A prescient title. LLM intelligence is not like
|
||
ours. It can’t know what it’s like to be a human.
|
||
</p>
|
||
<p>
|
||
If this was a person, someone who wanted your attention and had this kind of
|
||
indifference towards truth, they would be considered a con-man or bullshitter.
|
||
<span class="aside"
|
||
><a
|
||
href="https://archive.org/details/on-bullshit-by-harry-frankfurt"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>On Bullshit</a
|
||
>, <em>Harry Frankfurt</em></span
|
||
>
|
||
Untrustworthy.
|
||
</p>
|
||
<h2 id="don%E2%80%99t-create-the-torment-nexus" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/thinking-machines/#don%E2%80%99t-create-the-torment-nexus"
|
||
aria-hidden="true"
|
||
></a>
|
||
Don’t create the torment nexus
|
||
</h2>
|
||
<p>
|
||
LLMs clearly manifest a type of intelligence. Sure, it’s “just” some linear
|
||
algebra and a ton of data. But it does exhibit a type of intelligence. One
|
||
without empathy.
|
||
<span class="aside"
|
||
><a
|
||
href="https://apnews.com/article/chatbot-ai-lawsuit-suicide-teen-artificial-intelligence-9d48adc572100822fdbc3c90d1456bd0"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>AI chatbot pushed teen to kill himself, lawsuit alleges</a
|
||
>, <em>AP News</em><br />
|
||
<a
|
||
href="https://www.brusselstimes.com/430098/belgian-man-commits-suicide-following-exchanges-with-chatgpt"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Belgian man dies by suicide following exchanges with chatbot</a
|
||
>, <em>Brussels Times</em><br />
|
||
<a
|
||
href="https://www.rollingstone.com/culture/culture-features/ai-spiritual-delusions-destroying-human-relationships-1235330175/"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>AI-Fueled Spiritual Delusions Are Destroying Human Relationships</a
|
||
>, <em>Rolling Stone</em></span
|
||
>
|
||
Not being human, it <em>can’t</em> have empathy—and intelligence without
|
||
empathy can be dangerous.
|
||
</p>
|
||
<p>
|
||
Science fiction is littered with cautionary tales about inhuman intelligence.
|
||
For that matter, so is myth: genies give people whatever they want, but
|
||
because people have self-destructive desires (like the desire to avoid work),
|
||
it goes wrong. In TRON, Infocom has the MCP (Master Control Program), an
|
||
overgrown chess program that is given access to whatever information it can
|
||
consume, until its intelligence and capabilities are seemingly endless. The
|
||
company leadership comes to rely on the program so completely that it becomes
|
||
their entire interface for understanding and operating the business. There is
|
||
also the irony that Infocom’s success was built on the misuse of intellectual
|
||
property, much as LLM companies have done
|
||
<span class="aside"
|
||
><a
|
||
href="https://sites.usc.edu/iptls/2025/02/04/ai-copyright-and-the-law-the-ongoing-battle-over-intellectual-property-rights/"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>AI, Copyright, and the Law: The Ongoing Battle Over Intellectual Property
|
||
Rights </a
|
||
>, <em>IP &amp; Technology Law Society</em><br />
|
||
<a
|
||
href="https://hbr.org/2023/04/generative-ai-has-an-intellectual-property-problem"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Generative AI Has an Intellectual Property Problem</a
|
||
>, <em>Harvard Business Review</em></span
|
||
>.
|
||
</p>
|
||
<p>
|
||
I don’t think I am wise enough to safely use a genie in a bottle. And I don’t
|
||
want to outsource my creative efforts to an addictive, bullshitting alien
|
||
intellect, even if it might save time and effort in the short term.
|
||
</p>
|
||
<p>
|
||
<img
|
||
src="https://joshua.seigler.net/2025-04-24--end-of-line.jpg?v=5d7188be78de"
|
||
alt="End of line"
|
||
/>
|
||
</p>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Site design updated</title>
|
||
<link href="https://joshua.seigler.net/posts/site-design-updated/" />
|
||
<updated>2024-06-05T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/site-design-updated/</id>
|
||
<content type="html"><style>
|
||
@import url("/fonts/ftaurebesh/ftaurebesh.css?v=b6b5f713b0fb");
|
||
</style>
|
||
<p>
|
||
New design! The tools I used before have a lot of unmaintained or outdated
|
||
dependencies and I wanted something a little simpler. The new site uses
|
||
<a href="https://pnpm.io/" target="_blank" rel="noopener">pnpm</a>,
|
||
<a href="https://www.11ty.dev/" target="_blank" rel="noopener">11ty</a>, and
|
||
<a href="https://mozilla.github.io/nunjucks/" target="_blank" rel="noopener"
|
||
>Nunjucks</a
|
||
>. Content is still in
|
||
<a
|
||
href="https://daringfireball.net/projects/markdown/"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>markdown</a
|
||
>.
|
||
</p>
|
||
<p>
|
||
One thing I’m proud of is a visual ping for footnotes.<sup
|
||
class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/site-design-updated/#footnote1"
|
||
>[1]</a
|
||
><a class="footnote-anchor" id="footnote-ref1"></a
|
||
></sup>
|
||
When you click a footnote<sup class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/site-design-updated/#footnote2"
|
||
>[2]</a
|
||
><a class="footnote-anchor" id="footnote-ref2"></a
|
||
></sup>
|
||
it briefly highlights the thing you jumped to.
|
||
</p>
|
||
<p>
|
||
In the upper right I added a style toggle that applies the font from Star
|
||
Wars, “Aurebesh”. I learned how to read it but sometimes want some practice.
|
||
<span data-language="aurebesh"
|
||
>People who can read this are cool and I like them.</span
|
||
>
|
||
</p>
|
||
<p>I also finally made a section for recipes!</p>
|
||
<blockquote>
|
||
<p>
|
||
May 2025 edit: I updated the design some more without changing the tech
|
||
stack. The main improvements are animated clouds and a host of minor
|
||
adjustments.
|
||
</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>
|
||
June 2025 edit: I have continued to alter the design. Pray I don’t alter it
|
||
any further.
|
||
</p>
|
||
</blockquote>
|
||
<hr class="footnotes-sep" />
|
||
<section class="footnotes">
|
||
<ol class="footnotes-list">
|
||
<li id="footnote1" class="footnote-item">
|
||
<p>
|
||
It highlights when you click back, too.
|
||
<a
|
||
href="https://joshua.seigler.net/posts/site-design-updated/#footnote-ref1"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
<li id="footnote2" class="footnote-item">
|
||
<p>
|
||
Hi.
|
||
<a
|
||
href="https://joshua.seigler.net/posts/site-design-updated/#footnote-ref2"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Finally, a Coherent Worldview</title>
|
||
<link href="https://joshua.seigler.net/posts/finally-a-coherent-worldview/" />
|
||
<updated>2023-07-14T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/finally-a-coherent-worldview/</id>
|
||
<content type="html"><p>
|
||
Around the time of my previous post, I had just been received into the
|
||
Orthodox church. Since then I have found it to be everything I was looking
|
||
for, and a great deal more. There is such a wealth of wisdom, going back
|
||
thousands of years. And it was all there, un-seen, un-read, as far as I was
|
||
concerned not existing at all! It seems impossible to me that I was so unaware
|
||
of these treasures by chance.
|
||
</p>
|
||
<p>
|
||
Father Seraphim Rose, Saint Paisios, Saint Porphyrios, Elder Thaddeus of
|
||
Vitovnica - to name only a few! - lived in this world, recently. They speak
|
||
plainly and lovingly about modern and familiar concerns. Their example and
|
||
guidance are a priceless treasure! And not only they help me, but
|
||
participating in the tradition of the Orthodox Church has… I don’t even know
|
||
how to say it all. I have experienced how the prodigal son felt when he took a
|
||
few trembling steps back to his father, and instead of the rejection or anger
|
||
he had earned, he received joyful, unearned forgiveness. His father
|
||
<em>ran</em> to him while he was still far away!
|
||
</p>
|
||
<p>
|
||
Here is what I know, now from experience: Jesus Christ is life and truth and
|
||
love. To look for life, or truth, or love apart from Him is pointless! It’s a
|
||
contradiction, like looking for light by marching into the shadows. God made
|
||
me, and He loves me more than I love myself. Because this is true, I want to
|
||
do everything His way, even if I don’t understand it at first.
|
||
</p>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Embracing Mysticism</title>
|
||
<link href="https://joshua.seigler.net/posts/embracing-mysticism/" />
|
||
<updated>2021-10-16T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/embracing-mysticism/</id>
|
||
<content type="html"><p>
|
||
Logical arguments no longer work. This has been especially visible in the
|
||
pandemic response in 2020. If you dug even a little below the surface of any
|
||
mainstream narrative in the past two years, you likely found points of
|
||
disagreement. But showing people scientific papers, charts, statistical
|
||
analysis, or other types of evidence accomplishes nothing, or worse it invites
|
||
accusations of being part of the Other Team, one of those backwards, wrong,
|
||
stupid people.
|
||
</p>
|
||
<p>
|
||
In mid-2020 Vin Armani (now Cyprian) started calling this change “The Dim
|
||
Age”<sup class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote1"
|
||
>[1]</a
|
||
><a class="footnote-anchor" id="footnote-ref1"></a></sup
|
||
>. He suggested that most people still see the world as exclusively physical,
|
||
oblivious to patterns of reality that are plainly obvious to more mystically
|
||
aware people.
|
||
</p>
|
||
<p>
|
||
In an attempt to remedy my newfound illiteracy, I started exploring symbolism,
|
||
which as I understood it dealt with identifying and understanding meaning. I
|
||
found Jonathan Pageau’s project
|
||
<a href="https://thesymbolicworld.com/" target="_blank" rel="noopener"
|
||
>The Symbolic World</a
|
||
>, which has some very accessible videos breaking down movies and other pop
|
||
culture artifacts from a symbolic perspective
|
||
<sup class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote2"
|
||
>[2]</a
|
||
><a class="footnote-anchor" id="footnote-ref2"></a></sup
|
||
>. These commentaries did not seem arbitrary or speculative, but pointed to
|
||
cultural trends that I couldn’t un-see once I understood them. I binged a
|
||
bunch more of his material, including eventually a book his brother Mattheiu
|
||
wrote, <em>The Language of Creation: Cosmic Symbolism in Genesis</em
|
||
><sup class="footnote-ref"
|
||
><a href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote3"
|
||
>[3]</a
|
||
><a class="footnote-anchor" id="footnote-ref3"></a></sup
|
||
>. Through this I discovered a side of reality I had been almost completely
|
||
oblivious to, and what’s more, an aspect of my faith which had somehow
|
||
completely passed me by.
|
||
</p>
|
||
<p>
|
||
From there I started listening to the
|
||
<a
|
||
href="https://www.ancientfaith.com/podcasts/lordofspirits"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Lord of Spirits</a
|
||
>
|
||
podcast. I learned that commonplace, obvious understanding of existence as
|
||
material <em>and spiritual</em> has been mostly lost, displaced by modern
|
||
confidence that the material world is the limit of reality, over which
|
||
sovereign mankind rules. The ancient faith of Christianity, known now as
|
||
“Eastern Orthodoxy”, corresponds with reality, especially spiritual patterns
|
||
of reality as we see more plainly every week, better than anything else I
|
||
know.
|
||
</p>
|
||
<p>
|
||
For a while I think my highest values have been freedom and truth. A desire to
|
||
be solely responsible for myself, and a desire to understand myself and the
|
||
world fully and accurately. But I didn’t realize that my chief obstacle is
|
||
hardly megacorps and governments: I am ruled by my own out-of-control desires:
|
||
for comfort, pleasure, control, satisfaction, even self-mastery. In a paradise
|
||
where my every whim was manifested, I would still be a slave to desire,
|
||
consuming and <em>wanting</em> more and more.
|
||
</p>
|
||
<p>
|
||
Investigating eastern orthodoxy, this ancient Christianity, revealed a better
|
||
path to freedom and truth: aiming higher. Every action and choice is in
|
||
service to something. Instead of serving little tyrannical gods like comfort
|
||
or pleasure, or potentially nobler gods like a country or even a “liberty
|
||
movement”, I will attempt to serve the Most High.
|
||
</p>
|
||
<hr class="footnotes-sep" />
|
||
<section class="footnotes">
|
||
<ol class="footnotes-list">
|
||
<li id="footnote1" class="footnote-item">
|
||
<p>
|
||
<a
|
||
href="https://freemanbeyondthewall.libsyn.com/episode-478"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Free Man Beyond The Wall episode 478: We’ve Entered The ‘Dim Age’</a
|
||
>
|
||
<a
|
||
href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote-ref1"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
<li id="footnote2" class="footnote-item">
|
||
<p>
|
||
<a
|
||
href="https://thesymbolicworld.com/videos/symbolism-propaganda-in-popular-culture/"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Symbolism and Propaganda in Popular Culture</a
|
||
>,
|
||
<a
|
||
href="https://thesymbolicworld.com/videos/the-fall-of-loki-into-the-multiverse/"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>The Fall of Loki (Into the Multiverse)</a
|
||
>
|
||
<a
|
||
href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote-ref2"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
<li id="footnote3" class="footnote-item">
|
||
<p>
|
||
<a href="https://amzn.to/4iBOExr" target="_blank" rel="noopener"
|
||
>The Language of Creation: Cosmic Symbolism in Genesis: A
|
||
Commentary</a
|
||
>, ISBN 978-1981549337
|
||
<a
|
||
href="https://joshua.seigler.net/posts/embracing-mysticism/#footnote-ref3"
|
||
class="footnote-backref"
|
||
>↩︎</a
|
||
>
|
||
</p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Needs-based communication</title>
|
||
<link href="https://joshua.seigler.net/posts/needs-based-communication/" />
|
||
<updated>2021-05-26T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/needs-based-communication/</id>
|
||
<content type="html"><p>
|
||
Needs-based communication (usually called non-violent communication or NVC™)
|
||
is a way of understanding yourself and others with a unique insight: everyone
|
||
has their own personal reactions to the world, but people have the same basic
|
||
needs. We recognize those needs in other people, and that common connection
|
||
can allow us to communicate clearly when there is conflict.
|
||
</p>
|
||
<p>
|
||
<strong>Needs</strong> are universal to humanity. They are common drives that
|
||
we all experience, and this universality makes them perfect for connecting
|
||
with each other. Some broad categories of needs are the needs for: connection,
|
||
physical well-being, honesty, play, peace, autonomy, and meaning. Needs can
|
||
also be specific: a need for clarity, nurturing, integrity, trust, space, etc.
|
||
Needs are abstract, not connected to people or actions. For example, peace is
|
||
a need, muting TV commercials is not. Here is
|
||
<a
|
||
href="https://www.cnvc.org/training/resource/needs-inventory"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>a partial list of needs</a
|
||
>
|
||
from the Center for Non-Violent Communication (CNVC).
|
||
</p>
|
||
<p>
|
||
Everything <em>anyone</em> does is an attempt to meet a need. None of these
|
||
universal needs is wrong or inherently harmful, although sometimes the
|
||
strategies we use can be.
|
||
</p>
|
||
<p>
|
||
<strong>Conflict</strong> happens when our needs aren’t met. We get stuck in
|
||
conflict when we mix up needs and strategies. Needs never conflict with each
|
||
other, only strategies do.
|
||
</p>
|
||
<p>
|
||
When we experience conflict or negative feelings, that indicates that there is
|
||
an unmet need. In an attempt to end a conflict, we often settle on
|
||
unsatisfying resolutions:
|
||
</p>
|
||
<ol>
|
||
<li>
|
||
We suppress the need and move on, painfully leaving the problem unaddressed.
|
||
</li>
|
||
<li>
|
||
We come to an uneasy agreement about who is the winner and who is the loser,
|
||
and the loser gives up on meeting their need. The immediate conflict is
|
||
over, but the problem is not really resolved.
|
||
</li>
|
||
<li>
|
||
We escalate, expanding the conflict in an attempt to win, at the other’s
|
||
expense if necessary.
|
||
</li>
|
||
</ol>
|
||
<p>
|
||
These resolutions can happen despite our best intentions, as a result of not
|
||
understanding what’s happening as we fight. A very common mistake is to
|
||
confuse needs and strategies.
|
||
</p>
|
||
<p>
|
||
<strong>Strategies</strong> are things we do to meet our needs. In contrast to
|
||
needs, which are abstract and universal, strategies are personal, specific,
|
||
and widely varied.
|
||
</p>
|
||
<p>
|
||
For example, consider the need for self-expression. There are as many
|
||
strategies as there are people and situations: singing, writing, talking,
|
||
composing, dressing a certain way… and on and on.
|
||
</p>
|
||
<p>
|
||
Jumping into a conflict strategy-first is bound to cause problems if that
|
||
strategy doesn’t meet others’ needs as well as your own. The way past conflict
|
||
is for everyone involved to understand each others’ needs, and
|
||
<em>then</em> work together to find a strategy to meet those needs.
|
||
</p>
|
||
<p>So, <strong>how do you figure out your own needs?</strong></p>
|
||
<p>
|
||
Negative feelings are a sign that you have an unmet need. Unfortunately, most
|
||
of us have learned to bundle in certain judgments and name them as feelings.
|
||
For example, I might think I am feeling <em>abandoned</em>, but really this is
|
||
a feeling of disconnectedness, vulnerability, loneliness, or something else,
|
||
combined with a judgment that someone else has made me feel that way.
|
||
</p>
|
||
<p>
|
||
The truth is that the same situation can affect people very differently. This
|
||
means that feelings must come from a person’s own response to things. In order
|
||
to see your feelings clearly, it is important to take ownership of them as
|
||
<em>your</em> feelings rather than something caused by the world around you. I
|
||
have found this to be very challenging, but also incredibly rewarding.
|
||
</p>
|
||
<p>
|
||
Once you have an honest name for what you are feeling, think about what need
|
||
sparked the feeling.
|
||
</p>
|
||
<p>
|
||
There is a (kind of clunky) formula for requesting help meeting a need without
|
||
tacking on strategies, demands, judgments, or other baggage. As the exercise
|
||
becomes more habitual, you won’t need the formula, and can accomplish the same
|
||
thing more naturally.
|
||
</p>
|
||
<p>Here it is:</p>
|
||
<blockquote>
|
||
<p>
|
||
When <em>[observation]</em>, I felt <em>[feeling]</em> because I was having
|
||
a need for <em>[need]</em>. (possibly also a request:) Are you willing to
|
||
<em>[action]</em>?
|
||
</p>
|
||
</blockquote>
|
||
<p>
|
||
In the spirit of communicating without judgments, the observation should be
|
||
strictly focused on facts, with no mind-reading or attribution at all. Sharing
|
||
your feelings in addition to the need can help the other person recognize the
|
||
need and how it affects you. If the other person understands the need, you can
|
||
also make a request for some specific action to help meet your need.
|
||
</p>
|
||
<p>
|
||
It is very important that the action you request be feasible, concrete, and
|
||
specific. Asking someone to change their behavior forever, think a certain
|
||
way, etc is too much. The request should also really, truly be a request and
|
||
not a demand. A “No!” should be as welcome as a “Yes!” because the goal is to
|
||
find a strategy that meets your needs <em>and</em> theirs.
|
||
</p>
|
||
<p>
|
||
There is a (similarly clunky) pattern for discovering someone else’s needs. As
|
||
you listen to them, you will probably get an idea for how they feel, and you
|
||
may be able to guess what need they are experiencing. You can ask:
|
||
</p>
|
||
<blockquote>
|
||
<p>
|
||
When you <em>[observation]</em> do you feel <em>[feeling]</em> because you
|
||
are having a need for <em>[need]</em>? (possibly also:) Right now, would you
|
||
like me to <em>[action]</em>?
|
||
</p>
|
||
</blockquote>
|
||
<p>
|
||
Like the other formula, this is just a beginning point, almost too rough to
|
||
use except for training your responses and replacing old communication habits.
|
||
</p>
|
||
<p>
|
||
These are two sides of the same coin, a pattern that draws a line from the
|
||
stimulus, some observation, through the needs, towards a solution. Even if you
|
||
guess wrong, just focusing on someone’s feelings and needs demonstrates that
|
||
you are really interested in their problem.
|
||
</p>
|
||
<p>
|
||
Even without explicitly using this pattern (observation ➔ feeling ➔ need ➔
|
||
request), just by thinking about needs (your own and others’) you can untangle
|
||
conflict and see other people with much more empathy. Maybe that reckless
|
||
driver is having a need for excitement and power, and zipping around you was
|
||
the best strategy they could come up with. Just seeing past the image of
|
||
others as enemies or obstacles can make the world much less hostile, by
|
||
revealing them to be real humans, people you might be able to connect with.
|
||
This way of thinking can also be a path to growth as you take ownership of
|
||
your feelings and see your needs clearly.
|
||
</p>
|
||
<p>Some resources for exploring these ideas more:</p>
|
||
<ul>
|
||
<li>
|
||
<a href="http://www.therightword.info/" target="_blank" rel="noopener"
|
||
>The Right Words and Beyond</a
|
||
>
|
||
</li>
|
||
<li>
|
||
<a href="https://amzn.to/44cpIsV" target="_blank" rel="noopener"
|
||
>Nonviolent Communication: A Language of Life</a
|
||
>, ISBN 189200528X
|
||
</li>
|
||
<li>
|
||
<a href="https://www.cnvc.org/" target="_blank" rel="noopener"
|
||
>The Center for Nonviolent Communication</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>The Trivium: A Tool for Learning Anything</title>
|
||
<link href="https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/" />
|
||
<updated>2021-04-03T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/</id>
|
||
<content type="html"><p>
|
||
Information today has become siloed. It’s a common belief that little, if any,
|
||
expertise from one field of knowledge transfers over to other fields. But
|
||
there is a forgotten tool that anyone can use to confidently approach new
|
||
subjects and problems: the <em>Trivium</em>.
|
||
</p>
|
||
<p>
|
||
The ancients considered the liberal arts to be composed of seven parts. First
|
||
was a foundation called the <em>trivium</em>, composed of grammar, logic, and
|
||
rhetoric. Following that was the <em>quadrivium</em>, which was arithmetic,
|
||
geometry, music, and astronomy (numbers, numbers in space, numbers in time,
|
||
numbers in time and space). The trivium (literally, “three ways”), is a
|
||
framework for learning.
|
||
</p>
|
||
<h2 id="grammar" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/#grammar"
|
||
aria-hidden="true"
|
||
></a>
|
||
Grammar
|
||
</h2>
|
||
<p>
|
||
Grammar is about gaining knowledge: collecting information, without judgment
|
||
or analysis. It answers the questions “Who, what, where, and when?” This is
|
||
possibly the most important step, since (depending on what you study)
|
||
essential information may not be readily available.
|
||
</p>
|
||
<h2 id="logic" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/#logic"
|
||
aria-hidden="true"
|
||
></a>
|
||
Logic
|
||
</h2>
|
||
<p>
|
||
Logic is about gaining understanding. It answers “why?” This is the foundation
|
||
for relating to the world. It has three components: filtration, correlation,
|
||
and analysis. It places the information gathered into context, and eliminates
|
||
inconsistency and resolves conflicting perspectives.
|
||
</p>
|
||
<h2 id="rhetoric" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/#rhetoric"
|
||
aria-hidden="true"
|
||
></a>
|
||
Rhetoric
|
||
</h2>
|
||
<p>
|
||
Rhetoric is about acting wisely: the application of knowledge and
|
||
understanding, put into correct action. It answers “how?”
|
||
</p>
|
||
<p>
|
||
Methodically applying this method provides a clear next step when encountering
|
||
any unfamiliar topic. This is a powerful tool for methodically determining the
|
||
best way to achieve your goals.
|
||
</p>
|
||
<h2 id="resources" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/the-trivium-a-tool-for-learning-anything/#resources"
|
||
aria-hidden="true"
|
||
></a>
|
||
Resources
|
||
</h2>
|
||
<ul>
|
||
<li>
|
||
<a href="https://triviumbinder.blogspot.com/" target="_blank" rel="noopener"
|
||
>Trivium Binder Project</a
|
||
>
|
||
</li>
|
||
<li>
|
||
<a
|
||
href="http://www.scribd.com/doc/59477946/Trivium-Method-of-Critical-Thinking-and-Creative-Problem-Solving"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Tragedy and Hope: Five page summary of the Trivium</a
|
||
>
|
||
</li>
|
||
<li>
|
||
<a
|
||
href="https://www.scribd.com/document/33744483/Trivium-Method-of-Thinking-vs-Other-Methodologies"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Shadows of the trivium in narrow disciplines</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
</content>
|
||
</entry>
|
||
<entry>
|
||
<title>Authority - Consent's Blind Spot</title>
|
||
<link href="https://joshua.seigler.net/posts/authority-consents-blind-spot/" />
|
||
<updated>2020-07-02T00:00:00Z</updated>
|
||
<id>https://joshua.seigler.net/posts/authority-consents-blind-spot/</id>
|
||
<content type="html"><blockquote>
|
||
<p>
|
||
2025 disclaimer: I haven’t thought through all these ideas in a while, but I
|
||
probably would change some of this or soften/rephrase it.
|
||
</p>
|
||
</blockquote>
|
||
<p>
|
||
Consent occurs when an individual voluntarily agrees to the proposal or
|
||
desires of another. It comes from the concept that who should decide what
|
||
happens to your person, is you.
|
||
</p>
|
||
<p>
|
||
There are two ways people interact: with consent, and without it. Some people
|
||
care a lot about consent, but overall, most take whichever route is easiest,
|
||
or more convenient.
|
||
</p>
|
||
<p>
|
||
People respect consent in most of their face-to-face dealings with others.
|
||
Violating someone’s consent in person is usually met with resistance, possibly
|
||
very strong resistance with a long-lasting impact. But there are covert ways
|
||
to violate consent, so that the target must not notice the violation—or if
|
||
they do notice, they must be unable to determine who is to blame.
|
||
</p>
|
||
<p>
|
||
Pretty much everyone has had circumstances where they did something because
|
||
another person, or group of people, compelled their compliance. Classic
|
||
examples include paying taxes, being drafted, and avoiding certain activities,
|
||
beliefs, or substances.
|
||
</p>
|
||
<p>
|
||
Here are some popular excuses for violating consent that you may have seen:
|
||
</p>
|
||
<blockquote>
|
||
<p>I am actually helping you.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>You like some of the things I do, so you must accept this as well.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>Everyone else lets me do this.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>Everyone else said it was okay if I do this.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>I am doing this, but someone else is responsible for my actions.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>You agreed to this by being born here.</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>I am allowed to do this.</p>
|
||
</blockquote>
|
||
<p>
|
||
That last one combines all the others into one argument, called authority.
|
||
This is the idea that certain people are justified in violating consent.
|
||
Usually there is a vaguely religious ceremony associated with the granting of
|
||
authority—something like a holy document, large gatherings of people, formal
|
||
outfits, or important sounding titles.
|
||
</p>
|
||
<p>
|
||
Sometimes consensual relationships are described as involving authority, such
|
||
as a boss at work having “authority” over an employee—but the difference is
|
||
clear: if the boss says to do something but the employee no longer consents,
|
||
they could exit that relationship.<br />
|
||
Sometimes people refer to an expert as an “authority” on a certain matter, but
|
||
this definition is also not of use here. I refer to authority here as the
|
||
ability to act upon another’s person, without regard for consent.
|
||
</p>
|
||
<p>
|
||
One problem with authority is that all the people on earth are humans. There’s
|
||
nobody better than humans who would obviously deserve special treatment, nor
|
||
is there some obviously superior category of human, so people expect some
|
||
excuse for how an ordinary person obtains authority.
|
||
</p>
|
||
<p>
|
||
In certain belief systems, the excuse was “God chose me and made me worthy.”
|
||
Contemporarily, the claim is based on “the will of the people”. Whoever wins a
|
||
special regional popularity competition is considered to have authority over
|
||
everyone in that region, even people who disagree.
|
||
</p>
|
||
<p>
|
||
You would think acting on someone in a way they don’t allow is difficult, but
|
||
people are impressed by ceremonies of authority, and they are confused by the
|
||
way everyone involved claims that their actions are someone else’s
|
||
responsibility. Even if people manage to see through the tricks they are
|
||
usually still afraid to resist authority out of a belief that nobody will help
|
||
them. So almost everyone obeys.
|
||
</p>
|
||
<h2 id="solutions" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#solutions"
|
||
aria-hidden="true"
|
||
></a>
|
||
Solutions
|
||
</h2>
|
||
<p>Once you have seen through this trick, what can you do?</p>
|
||
<h3 id="look-for-ways-to-sidestep-authority-altogether." tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#look-for-ways-to-sidestep-authority-altogether."
|
||
aria-hidden="true"
|
||
></a>
|
||
Look for ways to sidestep authority altogether.
|
||
</h3>
|
||
<p>
|
||
Since very few people accept <em>absolute</em> authority, there are all kinds
|
||
of limitations to its scope. If you can find ways to move your activities to
|
||
areas of life that are not “covered” by authority, you will be able to ignore
|
||
it more.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<a
|
||
href="https://theconsciousresistance.com/wp-content/uploads/2020/01/How_to_Opt_Out_of_the_Technocratic_State.pdf"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>How to Opt Out of the Technocratic State (PDF)</a
|
||
>
|
||
by Derrick Broze
|
||
</li>
|
||
<li>
|
||
<a
|
||
href="http://www.kopubco.com/pdf/An_Agorist_Primer_by_SEK3.pdf"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>An Agorist Primer (PDF)</a
|
||
>
|
||
by Samuel Edward Konkin III
|
||
</li>
|
||
<li>
|
||
<a href="https://www.seasteading.org/" target="_blank" rel="noopener"
|
||
>The Seasteading Institute</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
<h3 id="teach-other-people-how-to-see-these-tricks-more-clearly." tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#teach-other-people-how-to-see-these-tricks-more-clearly."
|
||
aria-hidden="true"
|
||
></a>
|
||
Teach other people how to see these tricks more clearly.
|
||
</h3>
|
||
<p>
|
||
Relatively few people claim to have authority. If even a moderate fraction of
|
||
people resist authoritarian demands, it becomes impossible to compel them all
|
||
by force.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<a
|
||
href="https://www.youtube.com/playlist?list=PL4jzSARXHuuwhBfzGNYhSVE4gJ8zmRnTH"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>Playlist: Thomasz Kaye Animations</a
|
||
>
|
||
</li>
|
||
<li>
|
||
<a href="https://fee.org/stories" target="_blank" rel="noopener"
|
||
>Foundation for Economic Education</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
<h3 id="promote-alternatives-that-respect-consent." tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#promote-alternatives-that-respect-consent."
|
||
aria-hidden="true"
|
||
></a>
|
||
Promote alternatives that respect consent.
|
||
</h3>
|
||
<p>
|
||
For every authority-based solution to a problem, there is a more effective
|
||
consensual solution, and usually the consensual way of doing things is already
|
||
being used somewhere, and has lower costs and better outcomes.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<a
|
||
href="http://daviddfriedman.com/The_Machinery_of_Freedom_.pdf"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>The Machinery of Freedom (PDF)</a
|
||
>
|
||
<a
|
||
href="http://daviddfriedman.com/The_Machinery_of_Freedom.prc"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>(Ebook)</a
|
||
>
|
||
<a
|
||
href="https://www.youtube.com/watch?v=jTYkdEU_B4o"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>(Video)</a
|
||
>
|
||
by David D Friedman
|
||
</li>
|
||
</ul>
|
||
<h3 id="use-the-ceremonies-of-authority-against-itself." tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#use-the-ceremonies-of-authority-against-itself."
|
||
aria-hidden="true"
|
||
></a>
|
||
Use the ceremonies of authority against itself.
|
||
</h3>
|
||
<p>
|
||
If someone with authority asks your opinion on some topic, steer them away
|
||
from choices that violate consent. It may even be appropriate to support
|
||
people who seek positions of authority if you believe they will prevent it
|
||
from being used, but don’t be surprised if their encounter with power changes
|
||
their values.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<a href="https://lp.org/" target="_blank" rel="noopener"
|
||
>Libertarian Party</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
<h3 id="surround-yourself-with-people-who-care-about-consent." tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#surround-yourself-with-people-who-care-about-consent."
|
||
aria-hidden="true"
|
||
></a>
|
||
Surround yourself with people who care about consent.
|
||
</h3>
|
||
<p>
|
||
If you know the people around you care about consent, then when someone
|
||
claiming authority makes demands of the community, it will be much safer to
|
||
ignore the demands since you would not be alone.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<a href="https://www.fsp.org/" target="_blank" rel="noopener"
|
||
>Free State Project</a
|
||
>
|
||
</li>
|
||
</ul>
|
||
<h2 id="additional-resources" tabindex="-1">
|
||
<a
|
||
class="header-anchor"
|
||
href="https://joshua.seigler.net/posts/authority-consents-blind-spot/#additional-resources"
|
||
aria-hidden="true"
|
||
></a>
|
||
Additional Resources
|
||
</h2>
|
||
<ul>
|
||
<li>
|
||
<a
|
||
href="https://spot.colorado.edu/~huemer/1.htm"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>The Problem of Political Authority (Chapter 1)</a
|
||
>
|
||
<a href="https://amzn.to/2AyQxw0" target="_blank" rel="noopener"
|
||
>(Amazon)</a
|
||
>
|
||
by Michael Huemer
|
||
</li>
|
||
<li>
|
||
<a
|
||
href="https://ia601208.us.archive.org/27/items/236222899TheMostDangerousSuperstitionLarkenRose2011/the-most-dangerous-superstition-larken-rose-20111.pdf"
|
||
target="_blank"
|
||
rel="noopener"
|
||
>The Most Dangerous Superstitition (PDF)</a
|
||
>
|
||
by Larken Rose
|
||
</li>
|
||
<li>
|
||
<a href="http://bastiat.org/en/the_law.html" target="_blank" rel="noopener"
|
||
>The Law</a
|
||
>
|
||
by Frédéric Bastiat
|
||
</li>
|
||
</ul>
|
||
</content>
|
||
</entry>
|
||
</feed> |