<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Runxi Yu</title>
		<link>https://runxiyu.org</link>
		<description>
			Recent content on Runxi Yu’s Website
		</description>
		<generator>Hugo</generator>
		
			<language>en-us</language>
		
		
		
		
			<lastBuildDate>Wed, 16 Oct 2024 00:00:00 +0000</lastBuildDate>
		
		
			<atom:link href="https://runxiyu.org/blog/index.xml" rel="self" type="application/rss+xml" />
		
		<item>
					<title>Do we have any good reasons to trust our moral intuition?</title>
					<link>https://runxiyu.org/blog/mintuition/</link>
					<pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/mintuition/</guid>
					<description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Let us first make a distinction between two notions of trusting moral
intuition. One is that moral intuition is self-evident and that people
would arrive at a set of common moral judgments or principles. Another
is the notion that moral intuition is idiosyncratic to each individual.&lt;/p&gt;
&lt;p&gt;There has not been consistent agreement over what is moral or what is
ethical throughout history. Moral intuition does not persist completely
across time periods: prior to the mid-20th century, homosexuality was
denounced in almost all jurisdictions and cultures often with
explanations that attempt to argue that homosexuality is &amp;ldquo;obviously&amp;rdquo;
wrong&amp;mdash;an appeal to intuition&amp;mdash;yet we now condemn such discrimination.
Neither does moral intuition align across cultural and geographical
regions: capitalism and individualism are predominant in some regions of
the world while socialism and collectivism are predominant in others;
liberty is considered an inalienable principle in some, but as a mere
means to collective efficiency in others. These are, of course,
political ideologies; but they are often enforced through moral coercion
and enjoy similar arguments on their &amp;ldquo;obviousness&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;There seems to be, however, a set of basic moral intuitions that seems
present in the mind of each &amp;ldquo;civilized&amp;rdquo; person. Moral patterns often
explained with intuition such as &amp;ldquo;killing people is wrong, other than
self-protection against perpetrators who already exhibit an extreme
threat&amp;rdquo; may &lt;em&gt;seem&lt;/em&gt; universally acknowledged. But that is an illusion: it
is easy to dismiss the seemingly exceptional case of war and extremism,
but the existence of serious notion of &amp;ldquo;proudly and fearlessly killing
enemies&amp;rdquo; as a single counter-example falsifies the hypothesis that the
so-called principle aforementioned is universal. While an analysis is
warranted on each individual principle that claims to be universal, I
doubt that any such claim would be supported.&lt;/p&gt;
&lt;p&gt;Even if a generalized principle such as &amp;ldquo;murder is wrong [...]&amp;rdquo; is
universal, it does not naturally follow that each person yields an
equivalent result for every individual case where a moral judgement is
made, on whether killing at a particular moment with a well-defined
context, is wrong.&lt;/p&gt;
&lt;p&gt;Therefore, it is difficult, if not impossible, to discuss moral
intuition in terms of a collective intuition of a group. I shall proceed
assuming that we refer to individual intuition in this essay.&lt;/p&gt;
&lt;p&gt;When we consider whether we should trust something, we must first
declare &lt;em&gt;for what purpose&lt;/em&gt; is this trust being contemplated. I will
iterate through them and discuss each, in the following sections.&lt;/p&gt;
&lt;h1 id=&#34;making-a-moral-judgement&#34;&gt;Making a moral judgement&lt;/h1&gt;
&lt;p&gt;The core of my argument is that individual moral judgements of specific
events are ultimately made by intuition.&lt;/p&gt;
&lt;p&gt;Many philosophers traditionally labelled as moral intuitionists such as
Prichard believe that moral intuition is self-evident [@prichard]. I
have discussed my rejection of this view in the introduction and I
dissent his implicit assumption that moral judgement is nearly
universal. But he is right in saying that moral judgement needs no
proof. Let us then take a look at some alternatives to individual moral
intuitionism, and I shall then discuss why these are less consistent and
less correct than moral intuitionism.&lt;/p&gt;
&lt;p&gt;What if we stick to moral frameworks such as Bentham&amp;rsquo;s utilitarianism,
Mill&amp;rsquo;s revision of utilitarianism, Kantian categorical imperatives?&lt;/p&gt;
&lt;p&gt;I, as an individual, reject some parts of them and accept others. The
common process of developing or considering the validity of an ethical
principle often consists of testing moral dilemmas based on intuition,
and, in doing so, refining the principle or rejecting it when it yields
a result or reasoning that we consider &amp;ldquo;absurd&amp;rdquo;. For example, I reject
Kant&amp;rsquo;s absolute prohibition against lying, as I intuitively find it
absurd to forbid myself from lying to a murderer who threatens to find
and kill my friend&amp;mdash;I make the hypothesis and imagine potentially
contributing to my friend&amp;rsquo;s chance of death for the sake of not telling
lies, and I assert, intuitively, that it is not worth it. I also reject
dogmatically applying Bentham&amp;rsquo;s utilitarianism due to intuitive
counter-examples, such as the intuitive immorality of pushing a heavy
person off a bridge to stop a runaway trolley (as described in [@justice
21]). Therefore intuition on individual cases is the basis that gives
birth to moral principles and framework.&lt;/p&gt;
&lt;p&gt;Never have I seen a moral framework or principle that has a meticulous
proof or reasoning on why it is correct, from first principles. And this
is precisely because these first principles do not exist without
intuition. For example, @kant-intuition [2] claims that Kant is a moral
intuitionist as his reasoning for categorical imperatives cites the need
to &amp;ldquo;[feel] pleasure or [&amp;hellip;] delight in the fulfillment of duty&amp;rdquo;
[@gmm]. &lt;em&gt;Any&lt;/em&gt; judgement on a contextualized real event by an individual
is ultimately moderated by intuition, notwithstanding the
thought-process that the individual uses at surface level.&lt;/p&gt;
&lt;h1 id=&#34;ethics-and-morality&#34;&gt;Ethics and morality&lt;/h1&gt;
&lt;p&gt;What distinguishes ethics from morality is that ethics are values that
are culturally and collectively upheld, while morality stems from an
individual&amp;rsquo;s sense of what is &amp;ldquo;good&amp;rdquo; and what is &amp;ldquo;bad&amp;rdquo;. The process of
the formulation of ethics could vary, although they generally carry the
goal of the preservation of a collective group such as to form the basis
of social order.&lt;/p&gt;
&lt;p&gt;Intuition is naturally idiosyncratic even within one community expected
to possess similar ethics, which contraindicates the possibility of
intuition as a trustworthy source of ethics. The goal of ethics is not
the same as that of moral judgement; ethics attempts to produce
generalized principles in a society that can provide consensus,
stability, and collective prosperity. That is not a goal that individual
intuition can attain, and is better suited for analysis of evidence and
social conventions.&lt;/p&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Therefore, pertaining to the moral judgement of individual events, moral
intuition is not simply trustworthy; it is &lt;em&gt;the&lt;/em&gt; method of judgement
that oversees all other methods of moral judgement and the development
of moral frameworks or principles. But if the purpose of using moral
intuition is the analysis of ethics, then the answer is a clear &lt;em&gt;no&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id=&#34;bibliography&#34;&gt;Bibliography&lt;/h1&gt;
&lt;div id=&#34;refs&#34; class=&#34;references csl-bib-body hanging-indent&#34;
data-entry-spacing=&#34;0&#34; role=&#34;list&#34;&gt;
&lt;div id=&#34;ref-kant-intuition&#34; class=&#34;csl-entry&#34; role=&#34;listitem&#34;&gt;
Dieter Schönecker. 2013. &lt;span&gt;“&lt;span class=&#34;nocase&#34;&gt;Kant’s Moral
Intuitionism&lt;/span&gt;: &lt;span class=&#34;nocase&#34;&gt;The Fact of Reason and Moral
Predispositions&lt;/span&gt;.”&lt;/span&gt;
&lt;/div&gt;
&lt;div id=&#34;ref-gmm&#34; class=&#34;csl-entry&#34; role=&#34;listitem&#34;&gt;
Kant. 2012. &lt;em&gt;&lt;span class=&#34;nocase&#34;&gt;Groundwork for the Metaphysics of
Morals&lt;/span&gt;&lt;/em&gt;. Translated by Mary Gregor and Jens Timmermann.
Cambridge University Press.
&lt;/div&gt;
&lt;div id=&#34;ref-prichard&#34; class=&#34;csl-entry&#34; role=&#34;listitem&#34;&gt;
Prichard, H. A. 1912. &lt;span&gt;“&lt;span class=&#34;nocase&#34;&gt;Does Moral Philosophy
Rest on a Mistake?&lt;/span&gt;”&lt;/span&gt; 21.
&lt;/div&gt;
&lt;div id=&#34;ref-justice&#34; class=&#34;csl-entry&#34; role=&#34;listitem&#34;&gt;
Sandel, Michael J. 2010. &lt;em&gt;&lt;span class=&#34;nocase&#34;&gt;Justice: What’s the
Right Thing to Do?&lt;/span&gt;&lt;/em&gt; Farrar, Straus; Giroux.
&lt;/div&gt;
&lt;/div&gt;
</description>
				</item><item>
					<title>Error handling</title>
					<link>https://runxiyu.org/blog/errh/</link>
					<pubDate>Tue, 20 Aug 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/errh/</guid>
					<description>&lt;p&gt;I haven&amp;rsquo;t found a single language with error handling to my liking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C: &lt;code&gt;errno&lt;/code&gt; sucks and I haven&amp;rsquo;t seen anyone that disagrees yet, and the thing
some libraries like OpenSSL does with its custom error type and detecting the
underlying &lt;code&gt;errno&lt;/code&gt; is even more annyoing&lt;/li&gt;
&lt;li&gt;Hare (and to some extent, Rust, though I haven&amp;rsquo;t gotten to really know Rust
yet): IDK, it just feels really unnatural to me (I&amp;rsquo;ll see how I could explain
in the future)&lt;/li&gt;
&lt;li&gt;Go (and to some extent, Linux x86 asm): Hella boilerplate (especially in Go
without macros)&lt;/li&gt;
&lt;li&gt;Python, and most other VM&amp;rsquo;ed languages that use exceptions: Functions in
between the throw&amp;rsquo;er and the catch&amp;rsquo;er don&amp;rsquo;t get a say in what&amp;rsquo;s going on,
which also means as a catcher you don&amp;rsquo;t know where that &lt;code&gt;ValueError&lt;/code&gt; came
from (was it in integer conversion or decoding or what?)&lt;/li&gt;
&lt;li&gt;Haskell: Kinda a mess, see Hare/Rust for &lt;code&gt;Maybe&lt;/code&gt;/&lt;code&gt;Either&lt;/code&gt;; see Python for
exceptions; error can only be caught in &lt;code&gt;IO&lt;/code&gt; monads which isn&amp;rsquo;t the majority
of stuff in idiomatic Haskell&lt;/li&gt;
&lt;li&gt;POSIX shell: I&amp;rsquo;ve basically taken it to define a function &lt;code&gt;a&lt;/code&gt; that runs its
arguments and exits on failure (which is the most appropriate thing to do for
simple scripts), but handling &lt;code&gt;$?&lt;/code&gt; is still kinda hellish, and don&amp;rsquo;t even
mention &lt;code&gt;set -e&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But at the same time sometimes I find exceptions to be very useful (e.g. say
I&amp;rsquo;m handling a command in a network connection, and I want a catchall &amp;ldquo;command
failed&amp;rdquo; that I could trigger by throwing an exception; I could emulate this
with a goto up the stack but that also doesn&amp;rsquo;t feel right)&lt;/p&gt;
</description>
				</item><item>
					<title>Declaring languages in project titles considered useful</title>
					<link>https://runxiyu.org/blog/languseful/</link>
					<pubDate>Sat, 17 Aug 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/languseful/</guid>
					<description>&lt;p&gt;Often times I hear people say that it&amp;rsquo;s unnecessary, or even harmful, to
declare the language/framework in a project&amp;rsquo;s description. I dissent from
this argument based on one very simple fact:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;They are a useful filter to determine which projects I wish to prioritize
taking a look at, which projects I could possibly hack on, and which libraries
I could use.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I do not enjoy cloning a repository and figuring out that it only supports
C++, when I was looking for a C library.&lt;/li&gt;
&lt;li&gt;Anything written in Go is, in my experience, quite pleasant to hack on. Most
Go code I read is quite idiomatic and well-documented. (Except, of course,
for the usual shenanigans surrounding error handling and zero values.)&lt;/li&gt;
&lt;li&gt;Python code generally has a wide range of quality to expect from.&lt;/li&gt;
&lt;li&gt;I am willing to hack on projects written in Rust, but I need to spend extra
time to do so, along with ensuring that I have my more powerful laptop nearby
as compiling and using Rust is particularly painful on my slower machines
running OpenBSD.&lt;/li&gt;
&lt;li&gt;I am generally unable and unwilling to hack on projects written in Node.js,
Ruby on Rails, PHP, C#/.NET, C++, and many other languages/frameworks.&lt;/li&gt;
&lt;li&gt;I cannot run server software written in Node.js due to RAM constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am familiar with particular languages and &amp;ldquo;frameworks&amp;rdquo;. I don&amp;rsquo;t always have
the time to learn something completely new to hack on a project. Many of the
&amp;ldquo;stereotypical&amp;rdquo; performance characteristics of certain languages/frameworks
(yes, Node.js) are quite representative of most programs written in it.&lt;/p&gt;
</description>
				</item><item>
					<title>Free Software is still important for our environment</title>
					<link>https://runxiyu.org/blog/freeswenv/</link>
					<pubDate>Sat, 17 Aug 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/freeswenv/</guid>
					<description>&lt;p&gt;Recently I got to operate a Windows 11 machine. It was a ThinkPad T14 produced
in 2020, with 16 gigabytes of RAM, a relatively recent Intel Core i5, and a
512-gigabyte PCIe SSD. This is much more powerful than one of my usual
computers, a ThinkPad X220i.&lt;/p&gt;
&lt;p&gt;When I opened &lt;code&gt;taskmgr&lt;/code&gt; I was met with about 200 processes&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Opening
a new window in &lt;code&gt;explorer&lt;/code&gt;, the file manager, takes about 5 seconds to
respond, and an additional 5 seconds in a blank window. Windows updates have
taken more than 20 gigabytes of valuable disk space in &lt;code&gt;C:\&lt;/code&gt;.
Compiling an average 20-page LaTeX document with pdfLaTeX takes 40 seconds.&lt;/p&gt;
&lt;p&gt;Compare that to a 2013 Dell Latitude E6440, with 4 gigabytes of RAM, an Intel
Core i5 from 2013, and a 1 terabyte SATA SSD. That Dell runs smoothly with the
same Firefox/&lt;a href=&#34;https://www.lyx.org&#34;&gt;LyX&lt;/a&gt;/pdfLaTeX workflow, even with the most
heavy-weight desktop environment available, GNOME 45 on Fedora Workstation.
Compiling the same LaTeX document with pdfLaTeX takes 8 seconds.&lt;/p&gt;
&lt;p&gt;A 2013 laptop is able to outperform one from 2020 in almost every aspect other
than video decoding. Except that, of course, the hardware isn&amp;rsquo;t at fault. It&amp;rsquo;s
the endless amounts of bloat and inefficiency in software.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The mentality of the vast majority of computer users seem to be &amp;ldquo;it is
imperative that I switch to a new device every two or three years&amp;rdquo;. But it&amp;rsquo;s not
like these users switch to a massively more resource-hungry workflow every two
or three years: most of them browse the web, write documents&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, and watch
videos online. That is not a heavy-weight workflow. My claim is that &lt;strong&gt;it is
ridiculous to require these people to switch to a new computer every two or
three years.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://unitar.org/about/news-stories/press/global-e-waste-monitor-2024-electronic-waste-rising-five-times-faster-documented-e-waste-recycling&#34;&gt;According to the United Nations Institute for Training and
Research&lt;/a&gt;,
&amp;ldquo;A record 62 million tonnes (Mt) of e-waste was produced in 2022, Up 82% from
2010; On track to rise another 32%, to 82 million tonnes, in 2030; Billions of
dollars worth of strategically-valuable resources squandered, dumped; Just 1% of
rare earth element demand is met by e-waste recycling.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Of course people are going to purchase new devices and let their old ones go to
waste, if they are unable to use their workflow due to terrible programming
practices and planned obsolescence.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;see-also&#34;&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://libreplanet.org/wiki/Free_Software_and_the_Environment&#34;&gt;https://libreplanet.org/wiki/Free_Software_and_the_Environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sfscon.it/talks/combatting-e-wastes-environmental-harm-with-free-software/&#34;&gt;https://www.sfscon.it/talks/combatting-e-wastes-environmental-harm-with-free-software/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- vim: tw=80
--&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Apparently those are complete processes rather than threads. I&amp;rsquo;m not
familiar with Windows environments though.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;As much as I prefer Free Software, writing documents with ordinary
document editors is somewhere we really haven&amp;rsquo;t caught on. LibreOffice is,
even in my opinion, significantly more buggy than Microsoft Office;
OnlyOffice Desktop Editors still performs horribly (and still has trouble
running on Wayland). While many of us might dislike word processors, it is a
critical part of a lot of ordinary users&amp;rsquo; workflows, and it is often not a
solution to &amp;ldquo;simply use LaTeX with LyX&amp;rdquo;. This is a critical area that needs
improvement if we are ever to compete with Windows.&lt;br&gt;
This is not entirely the fault of the Free Software community (I&amp;rsquo;m using
&amp;ldquo;fault&amp;rdquo; in a very loose sense here). &lt;a href=&#34;https://en.wikipedia.org/wiki/Office_Open_XML&#34;&gt;Office Open
XML&lt;/a&gt; is notoriously difficult
to implement correctly (the initial specification is more than 6000 pages
long, and Microsoft is using various undocumented extensions), and we still
lack a lot of fonts common in documents produced by Microsoft Office (though
the development of more metrically-compatible and similar-looking fonts will
help).&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
				</item><item>
					<title>Programming languages</title>
					<link>https://runxiyu.org/blog/lang/</link>
					<pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/lang/</guid>
					<description>&lt;style&gt;
span.pros {
	font-weight: bold;
}
span.cons {
	font-weight: bold;
}
&lt;/style&gt;
&lt;p&gt;I&amp;rsquo;ve recently read Drew DeVault&amp;rsquo;s blog post, &lt;a href=&#34;https://drewdevault.com/2019/09/08/Enough-to-decide.html&#34;&gt;How I decide between many
programming
languages&lt;/a&gt;. I
figured that I should write my own.&lt;/p&gt;
&lt;h2 id=&#34;c&#34;&gt;C&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://drewdevault.com/2017/01/30/Lessons-to-learn-from-C.html&#34;&gt;Simple&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Interoperable with almost all other languages.&lt;/li&gt;
&lt;li&gt;Direct access to system calls (well, for most system calls that I&amp;rsquo;d
use, anyways).&lt;/li&gt;
&lt;li&gt;Good ecosystem, and most packages I&amp;rsquo;d use are in my system&amp;rsquo;s
repositories. Using the system package manager is the only way to
sanely manage dynamically linked libraries.&lt;/li&gt;
&lt;li&gt;Flexible macro system. Yes, there are pitfalls, but it&amp;rsquo;s flexible
enough for my needs and it&amp;rsquo;s not that hard to remember to add
parenthesis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Null terminated strings are objectively bad&lt;/li&gt;
&lt;li&gt;Footguns do exist, and there isn&amp;rsquo;t anything like borrow checking or
automatic reference counting. These aren&amp;rsquo;t strictly necessary, but
are obviously helpful.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;errno&lt;/code&gt; is bad. (My opinion holds that the proper alternative is
multiple return values, though I also believe that the langugage
shouldn&amp;rsquo;t make it easy to accidentally ignore errors, nor should
error handling have too much boilerplate.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;go&#34;&gt;Go&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy concurrency to write quick and relatively-scalable network
services in.&lt;/li&gt;
&lt;li&gt;Well-designed standard library, and a generally good ecosystem (with
an non-insane language-specific package manager, which I find
acceptable since Go libraries are statically linked).&lt;/li&gt;
&lt;li&gt;The best &lt;a href=&#34;https://go.dev/blog/ismmkeynote&#34;&gt;garbage collector&lt;/a&gt; I&amp;rsquo;ve
seen in garbage-collected languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://fasterthanli.me/articles/lies-we-tell-ourselves-to-keep-using-golang#all-or-nothing-so-let-s-do-nothing&#34;&gt;The way zero values are handled are really
bad&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m not a fan of the automatic conversion between pointers and
values.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drewdevault.com/2014/06/07/Why-Go-error-handling-doesnt-sit-right-with-me.html&#34;&gt;Go&amp;rsquo;s error handling doesn&amp;rsquo;t sit right with
me&lt;/a&gt;.
(I am &lt;em&gt;not&lt;/em&gt; for exceptions, just to be clear.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;python&#34;&gt;Python&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code is easy to write.&lt;/li&gt;
&lt;li&gt;Good-ish ecosystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code is hard to maintain.&lt;/li&gt;
&lt;li&gt;Really slow.&lt;/li&gt;
&lt;li&gt;The global interpreter lock guarantees that threading is a pain.
&lt;code&gt;asyncio&lt;/code&gt; also sucks, and there aren&amp;rsquo;t many libraries written for
&lt;code&gt;trio&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dynamically typed, and no, mypy doesn&amp;rsquo;t magically solve everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;shell-scripts&#34;&gt;Shell scripts&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Good for gluing my desktop together, automating day-to-day tasks
(both on the desktop and administering servers), and generating
Makefiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A lot of bad advice on the web, and many people write disgusting
scripts.&lt;/li&gt;
&lt;li&gt;Arrays are not available in standard POSIX shell, and life is a pain
without them.&lt;/li&gt;
&lt;li&gt;A sufficiently complex shell script that interacts with the network
&lt;em&gt;is&lt;/em&gt; going to have remote code execution vulnerabilities.&lt;/li&gt;
&lt;li&gt;I wanted to say &amp;ldquo;dynamic typing&amp;rdquo; here. &amp;ldquo;No typing&amp;rdquo; is probably more
appropriate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;common-lisp&#34;&gt;Common Lisp&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Really flexible. Best for, well, list parsing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#&#39;i-still-dont-get-the-point-of-having-two-namespaces&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dynamic typing.&lt;/li&gt;
&lt;li&gt;Quicklisp confuses me.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;))))))))))))))))))))))&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lua&#34;&gt;Lua&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Probably the best general-purpose scripting language.&lt;/li&gt;
&lt;li&gt;Easy to use as an extension language.&lt;/li&gt;
&lt;li&gt;Lua tables are really versatile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The lack of real threads is a huge pain. No, coroutines are not
threads. (Though, no other scripting language has sane
multithreading, so&amp;hellip; fair enough.)&lt;/li&gt;
&lt;li&gt;Generally lacking ecosystem.&lt;/li&gt;
&lt;li&gt;1-based indexing sucks.&lt;/li&gt;
&lt;li&gt;I still prefer curly braces over &lt;code&gt;end&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript&#34;&gt;JavaScript&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#34;pros&#34;&gt;Pros&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;None. I wouldn&amp;rsquo;t use it if there are saner alternatives in browsers,
e.g. if WASM could access the DOM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#34;cons&#34;&gt;Cons&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quirks surrounding automatic type conversion and equality testing.&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t see any compelling reason for this language to exist outside
web browsers, yet Node.JS exists.&lt;/li&gt;
&lt;li&gt;NPM.&lt;/li&gt;
&lt;/ul&gt;
</description>
				</item><item>
					<title>Using chroots as simple containers</title>
					<link>https://runxiyu.org/blog/alpinechroot/</link>
					<pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/alpinechroot/</guid>
					<description>&lt;p&gt;Please note that what I am about to do isn&amp;rsquo;t actually containerization
or isolation. It merely separates &lt;em&gt;trusted&lt;/em&gt; code such that it would
generally not pollute the host system. Chroot is generally not a
security measure; for example, processes inside the chroot could easily
escape with &lt;code&gt;/proc/&lt;/code&gt;&lt;em&gt;&lt;code&gt;x&lt;/code&gt;&lt;/em&gt;&lt;code&gt;/root&lt;/code&gt; for a PID &lt;em&gt;x&lt;/em&gt; that runs outside the
chroot.&lt;/p&gt;
&lt;p&gt;Often times I want to install a program that is not available in my
current distribution (e.g. the Soju IRC bouncer is not available on
Debian Bookworm, but I want to use a distribution-packaged version
instead of running &lt;code&gt;go build&lt;/code&gt; myself because I want to receive updates),
or perhaps I want to run something like &lt;code&gt;rustup&lt;/code&gt; without the fear of
polluting my system. But I don&amp;rsquo;t want to use Docker or LXC because they
feel too complicated.&lt;/p&gt;
&lt;p&gt;I ended up creating &lt;a href=&#34;https://alpinelinux.org&#34;&gt;Alpine Linux&lt;/a&gt; chroots.
Specifically, Alpine Linux Edge, because the &lt;code&gt;edge/testing&lt;/code&gt; repository
is huge and frequently updated. There&amp;rsquo;s an article called &lt;a href=&#34;https://wiki.alpinelinux.org/wiki/Alpine_Linux_in_a_chroot&#34;&gt;Alpine Linux
in a chroot&lt;/a&gt;
on the Alpine Linux wiki that provided the steps that I use in my
scripts. (The official
&lt;a href=&#34;https://github.com/alpinelinux/alpine-chroot-install/&#34;&gt;alpine-chroot-install&lt;/a&gt;
scripts exist but haven&amp;rsquo;t been updated for quite a while.)&lt;/p&gt;
&lt;h2 id=&#34;the-rxchroot-scriptshttpsgitsrhtrunxiyurxchroot&#34;&gt;&lt;a href=&#34;https://git.sr.ht/~runxiyu/rxchroot&#34;&gt;The rxchroot scripts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Check the Git repository linked above for the complete set of scripts;
here is a short explanation from excerpts of the script.&lt;/p&gt;
&lt;p&gt;The first step, of course, is to create the chroot. Basically:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;umask &lt;span style=&#34;color:#ae81ff&#34;&gt;022&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# or something else that ensures unprivileged users could access the chroot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -LO &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl-cdn.alpinelinux.org/alpine/edge/main/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;arch&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/APKINDEX.tar.gz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar xvf APKINDEX.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -LO &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl-cdn.alpinelinux.org/alpine/edge/main/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;arch&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/apk-tools-static-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;sed -n &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/P:apk-tools-static/{n;p;}&amp;#39;&lt;/span&gt; APKINDEX | cut -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt; -f 2&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.apk&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzf apk-tools-static-*.apk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./sbin/apk.static -X https://dl-cdn.alpinelinux.org/alpine/edge/main -U --allow-untrusted -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; --initdb add alpine-base
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -L /etc/resolv.conf &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/etc/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/etc/apk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl-cdn.alpinelinux.org/alpine/edge/main&amp;#34;&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/etc/apk/repositories
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl-cdn.alpinelinux.org/alpine/edge/community&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/etc/apk/repositories
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl-cdn.alpinelinux.org/alpine/edge/testing&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/etc/apk/repositories
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Every time the chroot needs to be used, some special directories must be
mounted. Don&amp;rsquo;t double-mount though as that often causes issues.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount -o bind /dev &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/dev&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount -t proc none &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/proc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount -o bind /sys &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/sys&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then just enter the chroot:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chroot &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chroot_dir&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; /bin/ash -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And perhaps install stuff:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apk add build-base soju vim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I&amp;rsquo;m running on a Debian host, and perhaps I want to start services in
the Alpine chroot with systemd:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# alpine.service ###############################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Description&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Alpine chroot mounts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Wants&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;network-online.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;network-online.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;oneshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;RuntimeDirectory&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/root/rxchroot/alpine-chroot-activate /alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecReload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/root/rxchroot/alpine-chroot-activate /alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStop&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/root/rxchroot/alpine-chroot-deactivate /alpine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;WantedBy&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;multi-user.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# soju.service #################################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Description&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;soju in an Alpine chroot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Requires&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;alpine.service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;alpine.service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;simple&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Fix the userspec to match the Alpine UID/GUID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/sbin/chroot --userspec=101:102 /alpine /usr/bin/soju&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExecReload&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/bin/kill -HUP $MAINPID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Restart&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;on-failure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;WantedBy&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;multi-user.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since a chroot doesn&amp;rsquo;t have its own kernel and all system calls pass
through the host kernel, network services open ports as if they just run
in the host system.&lt;/p&gt;
</description>
				</item><item>
					<title>Please stop mocking Down’s Syndrome</title>
					<link>https://runxiyu.org/blog/downs/</link>
					<pubDate>Sun, 09 Jun 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/downs/</guid>
					<description>&lt;p&gt;It has been a while since the onset of this rather unfortunate pattern,
but the use of &amp;ldquo;唐&amp;rdquo; and its derivative &amp;ldquo;🍬&amp;rdquo; to address whatever
day-to-day behavior that they seem to be used to refer to, is quite
infuriating.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Down_syndrome&#34;&gt;Down&amp;rsquo;s Syndrome&lt;/a&gt; is a
genetic disorder. &lt;a href=&#34;https://books.google.com/books?id=0Y20AQAAQBAJ&amp;amp;pg=PA5&#34;&gt;Patients nearly always have some type of
disability.&lt;/a&gt;
Mockery and discrimination towards people with Down&amp;rsquo;s Syndrome is
therefore a type of &lt;a href=&#34;https://en.wikipedia.org/wiki/Ableism&#34;&gt;ableism&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please stop clowning around with exlamations that create random and
unsupported references to Down&amp;rsquo;s Syndrome, or, in fact, any other
condition that may correlate to disabilities. This behavior is
disgusting, profoundly disrespectful, uneducated, rude, impudent, etc.
It demonstrates a toxic and arrogant lack of empathy towards people with
Down&amp;rsquo;s Syndrome.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But what about freedom of speech?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Interesting point, but mind the difference between what is &lt;em&gt;legal&lt;/em&gt; and
what is &lt;em&gt;right&lt;/em&gt;. By the text of the statutes this may be legal, but note
&lt;a href=&#34;https://www.law.cornell.edu/constitution-conan/amendment-1/freedom-of-speech-historical-background&#34;&gt;the historical background of the 1st
amendment&lt;/a&gt;—note
that most clauses relating to freedom of speech intended to disallow
limitations on political speech as to prevent a tyranny of government. I
don&amp;rsquo;t see how shouting &amp;ldquo;Down&amp;rsquo;s Syndrome&amp;rdquo; at everything fits into any
valid political purpose.&lt;/p&gt;
</description>
				</item><item>
					<title>Linked lists as paths?</title>
					<link>https://runxiyu.org/blog/llpath/</link>
					<pubDate>Tue, 28 May 2024 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/llpath/</guid>
					<description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;~runxiyu_    hax: also, imagine a world where paths are linked lists rather
             than strings
&amp;amp;hax         linked lists nah just use dir reading all the way
~runxiyu_    hax: ?
&amp;amp;hax         next = opendir(this);
&amp;amp;hax         *opendir(this, name)
~runxiyu_    hax: no
&amp;amp;hax         :D
~runxiyu_    hax: Honestly though I think linked-list (or &amp;#34;slices&amp;#34; or whatever
             it&amp;#39;s called nowadays) would be pretty good at preventing directory
             traversal attacks?
~runxiyu_    i mean
~runxiyu_    why interpret strings?
&amp;amp;hax         not really, because directory path manipulation relies on
             hardlinks/symlinks in the path
&amp;amp;hax         in that sense I mean
~runxiyu_    hax: i mean, in an imaginary new system
&amp;amp;hax         problem: .. is actually useful
~runxiyu_    where symlinks don&amp;#39;t exist. symlinks confuse the heck out of me
&amp;amp;hax         symlinks are weird yes
&amp;amp;hax         but still hardlink of .. and .
&amp;amp;f_          both &amp;#34;-1&amp;#34;&amp;#39;s are supposed to be EOF instead..
~runxiyu_    hax: ?????
~runxiyu_    I&amp;#39;m not sure how hardlinking directories work
~runxiyu_    I don&amp;#39;t think that&amp;#39;s possible
&amp;amp;hax         runxiyu_: it escapes via say
             &amp;#34;blahblah/whatever/../../../../../etc/passwd&amp;#34; or the likes
~runxiyu_    how do the inodes even record those
~runxiyu_    hax: oh, so it&amp;#39;s not a hardlink issue, it&amp;#39;s a .. issue
&amp;amp;hax         the problem with fixing that is you still need a notation of &amp;#34;go
             back a dir&amp;#34;
~runxiyu_    actually true
&amp;amp;hax         well links that go to a different dir in a different path contain
             the same problem
~runxiyu_    hax: .. = pop(pwd())
&amp;amp;hax         hmmmmmmm
~runxiyu_    well ok it&amp;#39;s not fair to assume that everything is written in a
             &amp;#34;proper&amp;#34; programming language
&amp;amp;hax         what if someone creates a literal `..`
~runxiyu_    but sane shells should have sane vector manipulation
~runxiyu_    hax: sounds fine to me (again in an imaginary new system)
&amp;amp;hax         well, now you can only access it via &amp;#34;untrusted&amp;#34; input paths
&amp;amp;hax         because &amp;#34;trusted&amp;#34; ones get evaluated
~runxiyu_    ?
&amp;amp;hax         if you impliment `.. = pop(pwd());` in the shell
~runxiyu_    hax: I mean firstly I&amp;#39;m hypothesizing a system where all paths
             are linked lists / arrays / vectors / whatever, and &amp;#34;.&amp;#34; and &amp;#34;..&amp;#34;
             mean nothing
~runxiyu_    hax: oh, I meant, instead of using &amp;#34;..&amp;#34;, use &amp;#34;$(pop $(pwd))&amp;#34;
&amp;amp;hax         you need a way to designate &amp;#34;back&amp;#34;, in a human-usable fashion
&amp;amp;hax         and pop pwd isn&amp;#39;t really good since there&amp;#39;s many other contexts
~runxiyu_    hax: that sounds like the task of the human-used program, not the
             operating system&amp;#39;s structure
~runxiyu_    filesystem&amp;#39;s
~runxiyu_    i mean
&amp;amp;hax         yes, I mean conflicts are an issue
~runxiyu_    well true
~runxiyu_    but eeehhhhh
&amp;amp;hax         I don&amp;#39;t require that the OS uses even strings at all, but you
             still need human-usable ways of getting back a dir and such
~runxiyu_    &amp;#34;conflicts with how shells might represent them&amp;#34; doesn&amp;#39;t sound
             like a good reason to clutter up the operating system&amp;#39;s path
             representation with string interpretation
~runxiyu_    mhm
&amp;amp;hax         &amp;#34;shells have no good way for humans to interact&amp;#34; does sound like
             a good reason to clutter up the operating system&amp;#39;s path
             representation with a few exceptions or such
&amp;amp;hax         main point being, changing the representation won&amp;#39;t fix the
             exploits
&amp;amp;hax         unless you also make it less useful
~runxiyu_    hax: well, modern shells also interpret &amp;#34;~&amp;#34; specially
~runxiyu_    and that seems... really useful
&amp;amp;hax         yes
~runxiyu_    &amp;#34;why not use $HOME?&amp;#34; -&amp;gt; &amp;#34;why not use $(pop $(pwd))&amp;#34;
&amp;amp;hax         because /~/foo/bar isn&amp;#39;t //home/user/foo/bar
&amp;amp;hax         and you can&amp;#39;t sanely require escaping ..
~runxiyu_    hax: is there a time you actually need to specify
             /home/me/../another_user in a shell?
~runxiyu_    i feel like .. is similarly not really useful other than in the
             beginning of a path
&amp;amp;hax         runxiyu_: there are times where /path/to/something/../ is often
             used
~runxiyu_    by scripts or by humans
&amp;amp;hax         probably more the latter
~runxiyu_    huh?
&amp;amp;hax         er, former*
~runxiyu_    sounds like a case for $(pop $(pwd))
~runxiyu_    though perhaps humans would use ../../../testing/thing
&amp;amp;hax         yes that I do use often
~runxiyu_    but that&amp;#39;s beginning-of-relative-ish-path
&amp;amp;hax         but how do you access ../../literaldotdot/testing/thing
~runxiyu_    hax: can i log this conversation and put it somewhere public
~runxiyu_    hax: hmmmmmmm
~runxiyu_    hax: good point
&amp;amp;hax         and sure
~runxiyu_     /save
&amp;amp;hax         anyways, linked lists is fine, but trying to `not have ..` for
             `security purposes` won&amp;#39;t really help anything
~runxiyu_    mainly because of human shells though
~runxiyu_    idk
~runxiyu_    and i mean, why have special names at all?
&amp;amp;hax         . and .. aren&amp;#39;t special names, they&amp;#39;re just a reference in the fs
             to the dir before them (as far as I know)
&amp;amp;hax         probably not written on disk ofc, but in the kernel&amp;#39;s mapping or
             whatever it&amp;#39;s called of it
&amp;amp;hax         *to the dir and the dir before it
~runxiyu     well if applications tell kernel to &amp;#34;check the path &amp;#39;..&amp;#39;&amp;#34; and the
             kernel sees that and treats it specially
&amp;amp;hax         does it
~runxiyu     if it&amp;#39;s &amp;#34;the kernel&amp;#39;s mapping&amp;#34;?
~runxiyu     .. then in the perspective of anything above ring 0, it&amp;#39;s
             essentially a special name
&amp;amp;hax         I mean as in like the cache of the filesystem
~runxiyu     hax: ???
~runxiyu     why do filesystem caches have anything to do with this
&amp;amp;hax         essentially a special name sure
&amp;amp;hax         because kernel reads fs -&amp;gt; insert &amp;#39;.&amp;#39; and &amp;#39;..&amp;#39; dir into it with
             reference, carry on
&lt;/code&gt;&lt;/pre&gt;</description>
				</item><item>
					<title>Some random log about transphobia and rationality</title>
					<link>https://runxiyu.org/blog/jourat/</link>
					<pubDate>Fri, 25 Aug 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/jourat/</guid>
					<description>&lt;details&gt;
&lt;summary&gt;
This page is a mess. It is too emotional, some of the content hasn&#39;t
been vetted properly before I wrote them down... it&#39;s probably not a
worthwhile read. Expand the summary tag if you really want to read it.
&lt;/summary&gt;
&lt;p&gt;Content warnings: Science mysticism, bigotry, transphobia,
vomit, Descartes, Hegel, questioning existence, rationalism,
intuitionism.&lt;/p&gt;
&lt;p&gt;Yesterday at my summer school we were watching a spiderman-related
movie. I have no idea about how these works relate to each other, so
that’d my best effort at describing it. I wasn’t paying full attention,
but I heard a school teacher teaching that there are many parallel
universes in a quantum physics class. This is likely a reference to the
Many Worlds Interpretation. It’s an &lt;em&gt;interpretation&lt;/em&gt; and teaching it
as “the truth” bothers me a little, but I suppose that’s not too bad on
its own. But later in the movie there was “time traveling through
dimensions” where the “dimensions” are described as parallel universes
under Many Worlds. I don’t understand quantum mechanics, but this is
still utterly senseless in my basic understanding thereof, i.e. the
non-communicating nature of “branches” (although I dislike this
terminology I find it intuitive) and it breaks energy conservation laws
(though arguably this is not really a law, prohibiting actions which may
bring empirical evidence to falsity it). We also discussed, in the light
of Dr. Davies’ lecture, on how most films prematurely depict characters
into a structural binary opposition between the benevolent and
malicious. We didn’t finish watching the movie, but it was an
interesting discussion.&lt;/p&gt;
&lt;p&gt;Further content warning: Things are about to get much worse.&lt;/p&gt;
&lt;p&gt;I was coming out of the classroom, the other groups who went shopping or
on tours came back at around the same time. I was going to the place
where we check-in to being on-campus. Near the steps of the cafeteria I
heard A saying to B, that A believes that B is a right-wing extremist. B
is my roommate who holds relatively different political beliefs than I
do, such as antifeminism. Without much context, I told A that saying
people are “right-wing extremists” is ad hominem and should be avoided,
even though I knew that I would probably disagree with whatever B was
talking about.&lt;/p&gt;
&lt;p&gt;I was tired of politics for the day. I already took four US Letter size
pages of notes during the day, in two precepts, one seminar, and three
lectures, most of which were about political philosophy. So I just
listened in to what another group were talking about, which if I
remember correctly had to do with their shopping trip and was not
political. Then I heard B shout, loud enough to frighten me quite a bit,
that “IF YOU WERE BORN MALE YOU ARE MALE, IF YOU WERE BORN FEMALE YOU
ARE FEMALE, IT’S COMPLETELY INVALID TO CHANGE IT.” and “THERE ARE ONLY
TWO GENDERS”.&lt;/p&gt;
&lt;p&gt;Before, when talking peacefully, I was fine discussing about my opinions
(clearly completely opposite from B’s), and considering B’s arguments on
traditional family values, even if I consistently believe that these
values have no merit in contemporary society and are inherently
misogynistic, which was also encapsulated in his express support for
patriarchy. But this time, when I heard it shouted out loud, I couldn’t
take it anymore.&lt;/p&gt;
&lt;p&gt;I felt sick. I almost threw up immediately; I went to a bathroom and
vomited, not a lot, but I still did. It’s a weird feeling of bring
completely alienated, worse than any normal dysphoria that I could
conceive.&lt;/p&gt;
&lt;p&gt;I asked a random member of staff, if they had vomit medications. They
said no, asked me if I knew why I was feeling sick, and offered to chat
with me for a while after I explained the course of events. They are
also nonbinary, and had similar experiences. We agreed on the argument
that cisgender people who do not experience gender dysphoria or euphoria
cannot soundly assume that the trans condition is fake and made up, as
it is a personal experience, not a external trait.&lt;/p&gt;
&lt;p&gt;Gradually the conversation shifted to whether it’s necessary to prove my
own existence. (This deviates from the transgender-related discussion;
proving my own existence in terms of my mind, is different from proving
my, or the general concept of, transgender experiences, but it’s
nevertheless a topic we landed on.) I mentioned Descartes’s Cogito Ergo
Sum, and we discussed what “existence” means in this context. The
conversation moved on to other parts of the Meditations. They
interpreted the Third Meditation as not an argument for God in the
religious sense, and described it as something resembling that, in my
opinion, resembled my understanding, from today’s precept, of Hegel’s
absolute spirit. He stipulated the existence of an entity that is the
state of the world which could be interpreted as either ideal or
current, rather than a conscious coherent person-like entity being the
deity. I’ll probably have to re-read Meditations with this caveat in
mind (or perhaps with a literal s/god/something/i and at least try to
understand Hegel which would be challenging.&lt;/p&gt;
&lt;p&gt;Later on, I explained my argument that in general I do not accept
assertions that are unreasoned, and I suppress the “gut intuition”, even
for seemingly basic assertions such as “I exist in a physical world”.
The teacher explained why they believe that rationalism is an
inconsistent theory, and importantly, that personal experiences cannot
be rationally deconstructed and attested, nor do they have to be
rationally proven beyond a reasonable doubt.&lt;/p&gt;
&lt;p&gt;And perhaps this is when things start clicking for me. Perhaps I could,
under my own conscious will and conscience, whether free or controlled,
loosen my grip on rationality, logic, and proof.&lt;/p&gt;
&lt;/details&gt;
</description>
				</item><item>
					<title>Forge Workflows</title>
					<link>https://runxiyu.org/blog/forge/</link>
					<pubDate>Thu, 10 Aug 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/forge/</guid>
					<description>&lt;p&gt;I generally use &lt;a href=&#34;https://git.runxiyu.org/&#34;&gt;my own Git server&lt;/a&gt; for my
projects. I also use my &lt;a href=&#34;https://sr.ht/~runxiyu&#34;&gt;sr.ht account&lt;/a&gt; for
&lt;a href=&#34;https://todo.sr.ht/~runxiyu&#34;&gt;issue tracking&lt;/a&gt; and &lt;a href=&#34;https://lists.sr.ht/~runxiyu&#34;&gt;mailing
lists&lt;/a&gt;, and &lt;a href=&#34;https://git.sr.ht/~runxiyu&#34;&gt;their
Git&lt;/a&gt; for some projects too.&lt;/p&gt;
&lt;p&gt;Regardless of whether I&amp;rsquo;m using my own infrastructure with plain Cgit
and plain mailing lists (except that my mailing list manager is slightly
broken for now), or the slightly better-integrated environment sourcehut
provides, a contributor who wishes to submit some of their commits may
simply do the following with
&lt;a href=&#34;https://git-send-email.io&#34;&gt;git-send-email&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configure git-send-email (only once!)&lt;/li&gt;
&lt;li&gt;Clone the repository to a local directory&lt;/li&gt;
&lt;li&gt;Make some changes and commit&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git send-email HEAD^ --to=&#39;~runxiyu/public-inbox@lists.sr.ht&#39;&lt;/code&gt; or
something similar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is much easier, imo, than the pull-request workflow popularized by
GitHub (which is proprietary by the way) and similar forges:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Register an account on the forge (once per forge)&lt;/li&gt;
&lt;li&gt;Click “fork” on the repo&amp;rsquo;s Web interface&lt;/li&gt;
&lt;li&gt;Clone the fork to a local directory&lt;/li&gt;
&lt;li&gt;Make some changes and commit&lt;/li&gt;
&lt;li&gt;Push&lt;/li&gt;
&lt;li&gt;Go back to the Web interface to create a PR (which often involves
clicking at least three buttons)&lt;/li&gt;
&lt;li&gt;Delete your redundant fork once the PR is merged and your repo is
not really useful anymore&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Why do certain people hate on sourcehut? Really convenient workflow IMO.&lt;/p&gt;
</description>
				</item><item>
					<title>Gender-inclusive pronouns in Chinese</title>
					<link>https://runxiyu.org/blog/zhpronoun/</link>
					<pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/zhpronoun/</guid>
					<description>&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;他&amp;rdquo; uses the &amp;ldquo;人&amp;rdquo; (person) radical, and should cover all people, because not all people are male.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;他&amp;quot;字的偏旁为单人旁，应该要涵盖所有人，因为并非所有人皆为男性。&lt;/p&gt;
&lt;h2 id=&#34;details-in-english&#34;&gt;Details in English&lt;/h2&gt;
&lt;p&gt;In contemporary English, the traditional plural pronoun &amp;ldquo;they&amp;rdquo; is often used as a gender-inclusive singular pronoun, alongside the feminine singular &amp;ldquo;she&amp;rdquo; and the masculine singular &amp;ldquo;he&amp;rdquo;. However, there is no equivalent in Chinese. &amp;ldquo;他&amp;rdquo; is considered a masculine pronouns in contemporary Chinese, despite its &amp;ldquo;人&amp;rdquo; radical and its history of traditionally being a gender-inclusive pronoun until the 1920s. This article argues for the reclaiming of &amp;ldquo;他&amp;rdquo; as a gender-inclusive pronoun.&lt;/p&gt;
&lt;p&gt;Prior to the May Fourth Movement and the broader New Culture Movement, &amp;ldquo;他&amp;rdquo; was a generic pronoun for all entities, including people of any gender, and inanimate objects. In the movements&amp;rsquo; efforts to &amp;ldquo;modernize&amp;rdquo; the Chinese language and culture, a separate feminine pronoun &amp;ldquo;她&amp;rdquo; was created by the poet and linguist 刘半农, becoming an established linguistic norm after the Chinese Civil War. (A separate &amp;ldquo;它&amp;rdquo; was created for inanimate objects; however this has little relevance to the arguments in this article.)&lt;/p&gt;
&lt;p&gt;A distinct feminine pronoun &amp;ldquo;她&amp;rdquo; along with &amp;ldquo;他&amp;rdquo; being a masculine pronoun poses three problems: (1) the annoyances caused by the lack of a inclusive placeholder pronoun, (2) the reinforcement of gender binary normatives and the lack of a neutral pronoun, and (3) the marginalization of the feminine from the concept of personhood.&lt;/p&gt;
&lt;p&gt;When referring to a placeholder of unknown gender in contemporary English, singular they pronouns are often used, such as in &amp;ldquo;someone left their laptop here&amp;rdquo;. Such colloquial conversations are generally unproblematic as all normative third-person pronouns in Mandarin sound the same: tā. However, in written contexts, many use &amp;ldquo;他/她&amp;rdquo; resembling &amp;ldquo;he/she&amp;rdquo;. Aside from how this reinforces gender binary and alienates women (see the next two paragraphs), it is visually unappealing (as half-width slashes look particularly distinct from full-width CJK ideographs and break typographical uniformity) and adds unnecessary syntactic sugar.&lt;/p&gt;
&lt;p&gt;Individuals who are not comfortable with any gendered pronoun often prefer singular they pronouns. (I do not wish to turn this article into a detailed discussion of non-binary gender, please read Leah Rowe&amp;rsquo;s article &amp;ldquo;&lt;a href=&#34;https://vimuser.org/pronouns.html&#34;&gt;Better respect for non-binary people, in defense of human rights&lt;/a&gt;&amp;rdquo; if this concept seems unfamiliar.) The status quo of &amp;ldquo;她&amp;rdquo; being solely a feminine pronoun and &amp;ldquo;他&amp;rdquo; being solely a masculine pronoun reinforces gender binary and leaves no gender-neutral/inclusive pronoun for non-binary people who would prefer such pronouns.&lt;/p&gt;
&lt;p&gt;The more fundamental issue with &amp;ldquo;他&amp;rdquo; as a masculine pronoun lies in its character composition and etymology. &amp;ldquo;他&amp;rdquo; is a compound character consisting of a &amp;ldquo;人&amp;rdquo; (person) radical and &amp;ldquo;也&amp;rdquo;, while &amp;ldquo;她&amp;rdquo; consists of a &amp;ldquo;女&amp;rdquo; (female) radical and &amp;ldquo;也&amp;rdquo;. Limiting &amp;ldquo;他&amp;rdquo; as a male pronoun assumes the male gender as dominant in &amp;ldquo;people&amp;rdquo;, and marginalizes other genders, most prominently the female gender, as groups distinct from &amp;ldquo;people&amp;rdquo;. This aligns with the development of the &amp;ldquo;她&amp;rdquo; pronoun as a distinct subset of what used to be covered by &amp;ldquo;他&amp;rdquo;. I believe that a character&amp;rsquo;s composition should not be deceptive to its meaning, and therefore, the &amp;ldquo;他&amp;rdquo; with the &amp;ldquo;人&amp;rdquo; radical should describe any person, not just any male person.&lt;/p&gt;
&lt;p&gt;While I believe that &amp;ldquo;他&amp;rdquo; should be truly gender inclusive, its current masculine standing does make it similar to &lt;a href=&#34;https://en.wikipedia.org/wiki/Gender_neutrality_in_languages_with_gendered_third-person_pronouns#Generic_he&#34;&gt;Generic he&lt;/a&gt; to some extent. I dislike generic he as it reflects bias towards men, but an inclusive &amp;ldquo;他&amp;rdquo; does carry these risks. Therefore I propose that those who prefer a unique masculine pronoun may choose to use one with a &amp;ldquo;男&amp;rdquo; (male) radical instead. While &amp;ldquo;男也&amp;rdquo; (read that as one character) has not been given a Unicode code-point yet, I find this solution to be much more ideal than stereotypical generalizations with &amp;ldquo;他&amp;rdquo;.&lt;/p&gt;
&lt;h2 class=&#34;chinese&#34; id=&#34;details-in-chinese&#34;&gt;Details in Chinese&lt;/h2&gt;
&lt;p class=&#34;chinese&#34;&gt;现代英语中，传统的复数代词 &amp;ldquo;they&amp;rdquo; 常用作性别包容的单数代词，伴以 &amp;ldquo;she&amp;rdquo; 作阴性单数代词及 &amp;ldquo;he&amp;rdquo; 作阳性单数代词。然而，汉语中却没有等效的词语。现代汉语将&amp;quot;他&amp;quot;视为阳性代词，尽管其偏旁为单人旁，且在二十世纪二十年代以前，其曾有过用作性别包容性代词的历史。本文的论点为，将&amp;quot;他&amp;quot;恢复为性别包容性代词。&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;在五四运动及更为广泛的新文化运动以前，&amp;ldquo;他&amp;quot;曾通用作所有实体的代词，包括任何性别的人，及无生命的物体。这场运动为中国语言和文化的&amp;quot;现代化&amp;quot;做出了许多努力，其中之一就是单独创造了一个阴性代词&amp;quot;她&amp;rdquo;。这个字由诗人、语言学家刘半农创造，并在国共内战后成为了公认的语言规范。（对无生命的物体，也创造了一个单独的&amp;quot;它&amp;rdquo;；但这与本文的论点无关。）&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;在&amp;quot;他&amp;quot;作阳性代词时，分立阴性代词&amp;quot;她&amp;quot;，引发了三个问题：（1）因缺乏包容性占位代词而产生的困扰，（2）强化了性别二元规范，缺少了中性代词，及（3）将女性在人格概念中边缘化。&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;现代英语中，常常使用单数 they 代词来充当未知性别的占位词，例如 &amp;ldquo;someone left their laptop here&amp;rdquo;。这种口头对话一般不会出现问题，因为普通话中所有规范的第三人称代词发音都相同：tā。然而，在书面语中，许多人会像 &amp;ldquo;he/she&amp;rdquo; 一样使用 &amp;ldquo;他/她&amp;rdquo;。除了强化了性别二元论、排斥了女性（见后两段）外，这在视觉上也不显美观（在全角 CJK 象形文字中插入半角斜杆尤显突兀，且破坏了排版的一致性），还添加了不必要的语法糖。&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;有些人并不喜欢分性别代词（我在这个 commit 前亦是如此），所以他们常偏向使用单数 they 代词。（我无意图在本文详细讨论非二元性别，如果你不熟悉这个概念，请阅读 Leah Rowe 的文章 &amp;ldquo;Better respect for non-binary people, in defense of human rights&amp;rdquo;）&amp;ldquo;她&amp;quot;单独用作阴性代词，同时&amp;quot;他&amp;quot;单独用作阳性代词，这种现状强化了性别二元论，并使得偏好性别中性或性别包容性代词的人无法使用这类代词。&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;将&amp;quot;他&amp;quot;用作阳性代词，更为关键的问题在于这个字的组成及词源。&amp;ldquo;他&amp;quot;字由单人旁和&amp;quot;也&amp;quot;组成，而&amp;quot;她&amp;quot;字由女字旁和&amp;quot;也&amp;quot;组成。将&amp;quot;他&amp;quot;限定为男性代词，假定了男性在&amp;quot;人&amp;quot;中占了主导地位，同时还将其他性别（最明显的是女性）边缘化，将其视作有别于&amp;quot;人&amp;quot;的群体。自从原本被&amp;quot;他&amp;quot;涵盖的这个子集有了单独的代词&amp;quot;她&amp;rdquo;，前述问题也随着这个代词的发展而发展。我认为，一个字的构成不应该欺骗它的含义，因此，单人旁的&amp;quot;他&amp;quot;应该用于描述任何人，而不仅仅是任何男性。&lt;/p&gt;
&lt;p class=&#34;chinese&#34;&gt;虽然我认为&amp;quot;他&amp;quot;应该要具有真正的性别包容性，但这个词目前男性化的程度，使得它在某种程度上类似于将 he 通用化了。我并不喜欢通用化的&amp;quot;他&amp;rdquo;，因为这体现了对男性的偏见，但包容性的&amp;quot;他&amp;quot;确实也有这些风险。因此，我提议，偏好使用单独的阳性代词的人，可以转而选择一个有男字旁的字。虽然&amp;quot;男也&amp;quot;（读成一个字）目前还没有 Unicode 码点，但比起刻板地将&amp;quot;他&amp;quot;字一般化，我认为这才是更加理想的解决方案。&lt;/p&gt;
&lt;p&gt;The Chinese translation was written by Peaksol. Thanks!&lt;/p&gt;
</description>
				</item><item>
					<title>Setting weird keysyms in sway</title>
					<link>https://runxiyu.org/blog/swaykeysym/</link>
					<pubDate>Tue, 11 Jul 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/swaykeysym/</guid>
					<description>&lt;p&gt;Under the &lt;a href=&#34;https://swaywm.org/&#34;&gt;Sway&lt;/a&gt; Wayland compositor, we could set
set &lt;code&gt;xkb_layout&lt;/code&gt; and &lt;code&gt;xkb_options&lt;/code&gt; for keyboards in order to do weird
key mapping related things. Many people use &lt;code&gt;caps:ctrl_modifier&lt;/code&gt; and
&lt;code&gt;caps:escape&lt;/code&gt; in &lt;code&gt;xkb_options&lt;/code&gt; (see
&lt;a href=&#34;https://man.openbsd.org/xkeyboard-config&#34;&gt;xkeyboard-config(7)&lt;/a&gt; for
other options) to make Caps Lock function as an extra Ctrl or Esc key.&lt;/p&gt;
&lt;p&gt;If all you want to do is do a relatively common modification like that,
chances are that &lt;code&gt;xkb_variant&lt;/code&gt; and &lt;code&gt;xkb_options&lt;/code&gt; already has what you
want, and you should just set that.&lt;/p&gt;
&lt;p&gt;But if what you want isn&amp;rsquo;t covered in the standard XKB files, hear my
story. I personally wanted Caps Lock to function as an additional Shift
key, which isn&amp;rsquo;t covered in &lt;code&gt;xkb_options&lt;/code&gt;. (&lt;code&gt;caps:shift&lt;/code&gt; doesn&amp;rsquo;t differ
much from normal Caps Lock, make it confusingly documented and doesn&amp;rsquo;t
make the Caps Lock function as an extra Shift.)&lt;/p&gt;
&lt;p&gt;On X11, I would simply use &lt;code&gt;xmodmap -e &amp;quot;keysym Caps_Lock = Shift_L&amp;quot;&lt;/code&gt;.
Now my Caps Lock functions as an extra Left Shift. Works just alright.&lt;/p&gt;
&lt;p&gt;But now that I switched to Wayland, Sway in particular, &lt;code&gt;xmodmap&lt;/code&gt; for
X11 isn&amp;rsquo;t going to work. What I ended up doing was the following:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;$HOME/.xkb/symbols/gbcustom&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;default partial alphanumeric_keys
xkb_symbols &amp;#34;basic&amp;#34; { // leave &amp;#34;basic&amp;#34; in-tact unless you know what you&amp;#39;re doing
	include &amp;#34;gb&amp;#34; // or whatever base layout you use, most likely &amp;#34;us&amp;#34;
	name[Group1] = &amp;#34;English (UK) Customized&amp;#34;;
	key &amp;lt;CAPS&amp;gt; { [ Shift_L, Shift_L, Shift_L, Shift_L ] };
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that here, the &amp;ldquo;&lt;code&gt;key&lt;/code&gt;&amp;rdquo; lines are in the form
&lt;code&gt;key &amp;lt;X&amp;gt; { [ A, B, C, D ] } ;&lt;/code&gt;, where &amp;ldquo;&lt;code&gt;X&lt;/code&gt;&amp;rdquo; is the keycode symbolic name
of the physical key you want to press. In my case, it is &lt;code&gt;CAPS&lt;/code&gt;. Check
&lt;code&gt;/usr/share/X11/xkb/symbols/pc&lt;/code&gt; and &lt;code&gt;/usr/share/X11/xkb/symbols/latin&lt;/code&gt;,
or the relevant files for your keyboard configuration, to look up the
keycode symbolic name from the name you&amp;rsquo;re used to. (Looking up
&lt;code&gt;Shift_L&lt;/code&gt; in &lt;code&gt;symbols/pc&lt;/code&gt; gets you to &lt;code&gt;LFSH&lt;/code&gt;, which is what you would
use in place of &amp;ldquo;&lt;code&gt;X&lt;/code&gt;&amp;rdquo;. &lt;code&gt;A&lt;/code&gt; is triggered when &lt;code&gt;X&lt;/code&gt; is pressed alone, &lt;code&gt;B&lt;/code&gt;
when it&amp;rsquo;s pressd with Shift, &lt;code&gt;C&lt;/code&gt; with AltGr, and &lt;code&gt;D&lt;/code&gt; with both AltGr and
Shift.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;$HOME/.config/sway/config&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input &amp;#34;1:1:AT_Translated_Set_2_keyboard&amp;#34; {
	xkb_layout &amp;#34;gbcustom&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Of course, replace &amp;ldquo;&lt;code&gt;1:1:AT_Translated_Set_2_keyboard&lt;/code&gt;&amp;rdquo; with your actual
keyboard identifier listed in &lt;code&gt;swaymsg -t get_inputs&lt;/code&gt;. And reload Sway.&lt;/p&gt;
&lt;p&gt;There might be better ways to do so, but I&amp;rsquo;ve got this to work. For
these unusual setups, it is a bit complicated and not as straightforward
as adding a &lt;code&gt;xmondmap&lt;/code&gt; line to &lt;code&gt;.xinitrc&lt;/code&gt;. Hopefully things would get
better as Wayland matures.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/swaywm/sway/issues/4250&#34;&gt;This GitHub issue&lt;/a&gt; and
&lt;a href=&#34;https://www.city17.xyz/keychron/#xkb-here-be-dragons&#34;&gt;jman&amp;rsquo;s article on
this&lt;/a&gt; were
extremely helpful. Thanks to &lt;a href=&#34;https://sr.ht/~brocellous&#34;&gt;brocellous&lt;/a&gt; for
pointing out the solution involving custom options.&lt;/p&gt;
&lt;p&gt;Another, potentially better method involving defining custom
&lt;code&gt;xkb_options&lt;/code&gt;, propsed by brocellous:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;$HOME/.xkb/symbols/customsymbol&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;partial modifier_keys
xkb_symbols &amp;#34;caps_lshift&amp;#34; {
	replace key  {
		type[group1] = &amp;#34;ONE_LEVEL&amp;#34;,
		symbols[group1] = [ Shift_L ],
		actions[group1] = [ SetMods(modifiers=Shift) ]
	};
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$HOME/.xkb/rules/evdev&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;! option = symbols
  custom:caps_lshift = +customsymbol(caps_lshift)

! include %S/evdev
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$HOME/.config/sway/config&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input &amp;#34;1:1:AT_Translated_Set_2_keyboard&amp;#34; {
	xkb_layout &amp;#34;gb&amp;#34;
	xkb_options &amp;#34;custom:caps_lshift&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;</description>
				</item><item>
					<title>On racist jokes</title>
					<link>https://runxiyu.org/blog/racist/</link>
					<pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/racist/</guid>
					<description>&lt;p&gt;(This page was originally written as a response to an event that
occurred in my year group at school. It has since became less of a
current issue but my point still stands.)&lt;/p&gt;
&lt;p&gt;The use of the terms &amp;ldquo;black&amp;rdquo; and &amp;ldquo;black slave&amp;rdquo; as insults is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;profoundly disrespectful towards the millions of black people that
have been abused, discriminated against, and treated unfairly, in
the past and the present&lt;/li&gt;
&lt;li&gt;ill-considerate towards people who are experiencing racism&lt;/li&gt;
&lt;li&gt;demonstrates a toxic and arrogant lack of empathy towards the
disadvantaged.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A common argument to make here is that &amp;ldquo;consider how you would be
discriminated against when you become the minority, you wouldn&amp;rsquo;t
appreciate such jokes on your social group&amp;rdquo;. Although we head in the
same general direction, I do not agree with this frame of mind.
Discriminatory jokes are wrong, independent of the possibility of the
discriminator being held to the same activities in the future.&lt;/p&gt;
&lt;p&gt;The argument to &amp;ldquo;take this easy as these are just jokes&amp;rdquo; is ridiculous.
The mere act of descriptive terms for a specific social group being used
as a &amp;ldquo;joke&amp;rdquo; undermines the seriousness of the social issue. Find
something else to joke about. Not something like racism and other forms
of discrimination.&lt;/p&gt;
&lt;p&gt;It is similarly bad to direct hatred towards others who fight against
racism.&lt;/p&gt;
</description>
				</item><item>
					<title>“Really” is a confusing word</title>
					<link>https://runxiyu.org/blog/really/</link>
					<pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/really/</guid>
					<description>&lt;p&gt;Often times when the word &amp;ldquo;really&amp;rdquo; is used in as an adverb in an
assertion or proposition after a word that expresses negation, it may be
useful to replace it with &amp;ldquo;in some sense&amp;rdquo;, and seek to ask or clarify
&amp;ldquo;in what sense&amp;rdquo;. It shall be recognized that questions that arise may be
legitimately hard to answer, but it may be still beneficial to consider
them.&lt;/p&gt;
&lt;p&gt;The same applies for &amp;ldquo;actually&amp;rdquo; and similar words when used this way,
though in my experience, people tend to use &amp;ldquo;really&amp;rdquo; this way.&lt;/p&gt;
</description>
				</item><item>
					<title>Random Thoughts on Purple Hibiscus</title>
					<link>https://runxiyu.org/blog/phibiscus/</link>
					<pubDate>Sat, 10 Dec 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/phibiscus/</guid>
					<description>&lt;p&gt;These are some random, unorganized thoughts on Purple Hibiscus,
particularly around the bildungsroman of Mama.&lt;/p&gt;
&lt;p&gt;Adiche wrote in chapter one that Mama polishes the figurines often,
especially after episodes of family violence, suggesting that the
figurines were of symbolic importance to Mama. After they were shattered
as Papa flung his missal at Jaja and missed, &amp;ldquo;it was not just the
figurines that came tumbling down, it was everything&amp;rdquo;, suggesting that
the figurines symbolizes family unity. This indicates a critical change
in Mama—from someone that views herself as a &amp;ldquo;wife&amp;rdquo; and a &amp;ldquo;woman&amp;rdquo; and
truly believes that Papa is correct in violence and punishment and that
such violence is justified, to a person who understands the importance
of independence and freedom and opposes tyranny.&lt;/p&gt;
&lt;p&gt;I believe that this sudden change is uncanny when considered from a
relatively logical perspective. The figurines merely symbolize the
family environment, and logically it makes little sense that Mama would
perceive &amp;ldquo;the figures broke&amp;rdquo; as a fundamental change in the family
environment—in real life it&amp;rsquo;s hard to imagine someone being so sensitive
to symbolism. I will need to look through the novel again, but I do not
currently recall prominent foreshadows of Mama&amp;rsquo;s perception of the
family environment falling apart in the story&amp;rsquo;s timeline before Palm
Sunday. These might just be subtly hiding somewhere waiting to be picked
up by the cautious reader, but if such foreshadows are actually present,
Adiche may be hinting at the tendency for people to not consciously
realize or to intentionally hide subtle feelings until a point where the
pressure could not be held any more, and emotional, irrational acts of
desperation inevitably commence, reflecting on the futile nature of
humans trying to approach rationality but failing to do so.
Alternatively, a simpler explanation would be that Adiche is trying to
highlight the sensitivity to seemingly irrelevant symbols of emotional
and irrational side of people. I believe that both of these are possible
interpretations of the novel on first read, but some close analysis in
the future or further knowledge of context, such as Adiche&amp;rsquo;s family and
cultural background, may be in favor of one particular explanation. I&amp;rsquo;ll
see when I get to reviewing the whole novel, and I believe I shall take
extra care on the part after Mama comes to Aunty Ifeoma&amp;rsquo;s after Papa
breaks the bible table on her and causes another miscarriage and her
exact actions on Palm Sunday.&lt;/p&gt;
&lt;p&gt;Further on in the novel, Mama then commits the &amp;ldquo;desperate act&amp;rdquo; of
poisoning Papa to death, after which she experiences another change in
personality. She becomes fairly robotic and rarely displays emotions,
which in and of itself could be considered an unnatural emotional state.
This reflects how constant emotional pressure, and likely her own guilt
of killing a supposed &amp;ldquo;loved one&amp;rdquo; tends to make people numb and
hyposensitive to emotional stimuli, creating depressive dissonance.
Kambili&amp;rsquo;s anger for Mama, but ultimate understanding, the former of
which hasn&amp;rsquo;t really occurred before in the entire novel suggests how
even after turmoil in constant domestic violence and unhealthy family
relationships, death is ultimately empty in its very nature. This in
turn reflects that Kambili, who may be considered to be in the most
healthy mental state in the her inner family, is able to understand and
perceive emotions from the perspective of others and appreciate how
there is a sensitive and kind part of everybody. However, I&amp;rsquo;m not sure
how this interpretation could extend to political violence, which is
routinely compared with against domestic violence and religion
throughout the novel. It could be argued that Adiche wants to present
the inevitability of power dynamics in modern society, but I doubt that
that&amp;rsquo;s the actual point of the novel.&lt;/p&gt;
&lt;p&gt;(Then there&amp;rsquo;s Jaja getting into prison and the weeks before he gets out
of prison and such, which gets messier.)&lt;/p&gt;
</description>
				</item><item>
					<title>Math, Science, and Philosophy</title>
					<link>https://runxiyu.org/blog/msp/</link>
					<pubDate>Mon, 14 Nov 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/msp/</guid>
					<description>&lt;p&gt;Utilities developed in mathematics are often used to apply theories of
the sciences, such as the use of basic arithmetic, calculus, complex
analysis, and everything in between in empirical/experimental sciences
such as physics. We often take for granted that mathematics as we know
it today would work in the sciences. However, considering my impression
of math as formally being a creation and natural sciences being mostly
observant, it is worth questioning the linkage between these subjects,
and whether our use of mathematics, especially in the prediction of
theories of physics, is logically linked to the physics itself, or just
so happens to a coincidence which we ought to explain.&lt;/p&gt;
&lt;p&gt;This article attempts to address these questions, but cannot provide a
full answer, for which extensive research would be required which time
does not allow for. Rather, this shall be treated as a brief
brain-teaser, which discussions may evolve from the text itself, or from
the various editorial footnotes and bugs. I would like to, afterwards,
complete this article and make it comprehensive and structured, but I’ll
need ideas from the discussion.&lt;/p&gt;
&lt;h2 id=&#34;invented-or-discoveredspan-idinvented-or-discovered-labelinvented-or-discoveredspan&#34;&gt;Invented or discovered?&lt;span id=&#34;invented-or-discovered&#34; label=&#34;invented-or-discovered&#34;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Initially, it feels like mathematics is a pure invention of the human
mind. Formal definitions of mathematical systems (albeit unsuccessful in
creating the complete and consistent system intended) such as that
presented in &lt;span class=&#34;smallcaps&#34;&gt;Principia Mathematica&lt;/span&gt; do not
refer to any tangible objects and are purely conceptual. Deriving
theorems from axioms and other theorems, applying general theorems to
specific conditions, etc. are all, formally, abstract activities with
little reference to the physical world.&lt;/p&gt;
&lt;p&gt;However, humans do not truly invent ideas out of pure thought. The basic
building blocks of our analytical cognition, which may be in some sense
considered &amp;ldquo;axioms&amp;rdquo; of our perspective of the world, result from us
observing the world around us, finding patterns, which then evolve into
abstract ideas. Consider the possibility that the formation of numbers
as a concept in mathematics results from humans using primitive ideas
that resemble numbers to count and record enumerations of discrete
objects. Then as people had the need to express non-integer amounts,
concepts such as fractions and decimals (or primitive ideas and
representations thereof), were born. Previously &lt;em&gt;discrete&lt;/em&gt; concepts,
numbers, are now used to represent values on &lt;em&gt;continuous&lt;/em&gt; spectrums,
such as volume, mass, etc. But then consider an alternative world where
we are jellyfish swimming through blank water: although this concept of
volume is applicable to blank water, it is arguable whether the numeric
representation and thus the concept of numerical volume would exist in
the first place with the absence of discrete objects. This is an example
on how human sense perception affects the process for which we invent
concepts in mathematics, even if the formal definition thereof does not
refer to tangible objects, not to mention how many mathematical
constructs such as calculus were specifically created to solve physics
problems but is defined in terms of pure math.&lt;/p&gt;
&lt;p&gt;Ultimately, even formally defined axiomatic systems have their axioms
based on human intuition, which in turn is a result of empirical
perspective observing of the natural, physical world.&lt;/p&gt;
&lt;p&gt;Additionally, let’s take the time to appreciate how well often
mathematical concepts, formally defined by human intuition and logic,
map to experimentally verifiable physical concepts. This further
suggests how natural sciences has an effect on mathematics. (See
Section &lt;a href=&#34;#applicability-in-science&#34; data-reference-type=&#34;ref&#34;
data-reference=&#34;applicability-in-science&#34;&gt;[applicability-in-science]&lt;/a&gt;
for details.)&lt;/p&gt;
&lt;p&gt;The way I like to think about whether math is an invention or a
discovery is: The system of mathematics is formally an invention, but
the intuition that led to the axioms, and what theorems we think about
and prove, are the result of human discovery. There are both elements to
it, and a dichotomous classification would be inappropriate.&lt;/p&gt;
&lt;h2 id=&#34;applicability-in-sciencespan-idapplicability-in-science-labelapplicability-in-sciencespan&#34;&gt;Applicability in Science&lt;span id=&#34;applicability-in-science&#34; label=&#34;applicability-in-science&#34;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Despite how mathematics was likely inspired by tangible perception, the
vast majority of modern formal mathematical constructs are defined
theoretically. In fact, as seen with the use of complex Hilbert space in
quantum mechanics, mathematical concepts are sometimes developed much
earlier than a corresponding physics theory which utilizes it
extensively. It is impressive how formal creations of humans’ intuition
for beauty in pure math has such a mapping and reflection in the real
world and how physics tends to formalize empirical information in a
concise and rationalized manner.&lt;/p&gt;
&lt;p&gt;This naturally leads us to a question: How is math used in
experimental/empirical sciences? Why? Is that use consistent and based
logically, or would it possibly be buggy?&lt;/p&gt;
&lt;p&gt;I believe that mathematics has two main roles in physics. The first is
calculations, often as an abstraction of experimental experience into a
general formula, which is then applied to specific questions. With the
knowledge that &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;F&lt;/em&gt; = &lt;em&gt;ma&lt;/em&gt;&lt;/span&gt; and that
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;a&lt;/em&gt; = 10 m/s&lt;sup&gt;2&lt;/sup&gt;, &lt;em&gt;m&lt;/em&gt; = 1 kg&lt;/span&gt;,
we conclude that &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;F&lt;/em&gt; = 10 N&lt;/span&gt;. But many
times this involves or implies the second role of math in physics,
because calculations depend on corresponding concepts, and sometimes the
mathematical utilities themselves are developed from physics but are
defined in terms of pure math (such as calculus): physicists analogize
mathematical concepts with tangible physical objects and physics
concepts, and think about the physical world in a mathematically
abstract way. For example, the &lt;span class=&#34;math inline&#34;&gt;SU(3)&lt;/span&gt;
group which finds it origins in the beauties of pure math (group theory
is inherently about symmetry), is used extensively in the physics of
elementary particles to represent particle
spin.&lt;a href=&#34;#fn1&#34; id=&#34;fnref1&#34; class=&#34;footnote-ref&#34;
role=&#34;doc-noteref&#34;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; But for the latter of these
use-cases, I am skeptical. Mathematics as we know it is incomplete
(Gödel’s first incompleteness theorem, in summary, proves that any
system of mathematics with Peano Arithmetic cannot prove all true
statements in its own system), possibly inconsistent (Gödel’s second
incompleteness theorem, in summary, proves that any system of
mathematics with Peano Arithmetic cannot prove its own consistency), and
is somewhat unpredictable (Turing’s halting problem, basically saying
that it is impossible to, without running the algorithm itself, predict
whether a general algorithm would halt or would run forever, and thus
there is no general algorithm to predict whether an algorithm will halt
in finite time). We haven’t found major loopholes for inconsistency yet,
but it is astonishing howmathematics, a system of such theoretical
imperfection, is used in every part of physics, not just for its
calculations but also for representation of ideas down to the basic
level. I find this to be uncanny. What if the physics theories we derive
are erroneous because of erroneous mathematical systems or concepts? I
believe that part of the answer is &amp;ldquo;experiments&amp;rdquo;, to return to the
empirical nature of, well, empirical sciences, and see if the theories
actually predict the results. But there are tons of logistical issues
that prevent us from doing so, not to mention the inherent downside to
experiments: a limited number of attempts cannot derive a general-case
theory (take the Borwein integral as an example: a limited number of
experiments may easily conclude that it’s always
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;π&lt;/em&gt;&lt;/span&gt; while it’s actually less than
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;π&lt;/em&gt;&lt;/span&gt; after the 15th iteration). So then,
we turn to logical proof. But then because mathematical logic is
incomplete, we are not guaranteed to be able to prove a given
conjecture, which may be otherwise indicated by experiments, to be
correct.&lt;/p&gt;
&lt;p&gt;Note that I am not arguing that physics derives its concepts from
mathematics; I believe that physics has chosen the part of math that it
believes to be helpful for use therein. However, these have strange and
unforseeable implications.&lt;/p&gt;
&lt;p&gt;The addition of mathematical concepts into physics doesn’t only bring
the maths we want to bring over, it brings all relevant definitions,
axioms, logic, proofs, theorems, etc. all along with it. Once we
&amp;ldquo;assign&amp;rdquo; that a physical entity is &amp;ldquo;represented&amp;rdquo; by a &amp;ldquo;corresponding
concept&amp;rdquo; in mathematics, we can only abide by the development thereof.
So although physics originally isn’t guided by mathematics, the act of
choosing the part of math that’s useful in physics puts physics under
the iron grip of mathematical logic, which is inconsistent and
potentially incomplete, as contrary to the realistic and observable
nature that physics is supposed to be.&lt;/p&gt;
&lt;p&gt;I had a brief chat with Mr. Coxon and he aclled how the existence of
neutrinos were predicted &amp;ldquo;mathematically&amp;rdquo; before they were
experimentally discovered physically. I do not know the history of all
this, but Mr. Coxon said that physicists looked at a phenomenon (I
believe that was beta decay) and went like: &amp;ldquo;where did that missing
energy go&amp;rdquo;? and proposed that there was a particle called a neutrino
that fills in the missing gap. (Alternatively, they could have
challenged the conservation of energy, which leads us to the topic of
&amp;ldquo;why do we find it so hard to challenge theories that seem beautiful,
and why does conservation and symmetry seem beautiful&amp;rdquo;, but let’s get
back on topic&amp;hellip;) Then twnety years later neutrinos were &amp;ldquo;discovered&amp;rdquo;
physically by experiments. Mr. Coxon said that it looked like that
mathematics predicted and in some resepct &amp;ldquo;guided&amp;rdquo; physics. Personally I
believe that this isn’t a purely &amp;ldquo;mathematical&amp;rdquo; pre-discovery and it’s
more of a &amp;ldquo;conservation of energy, a physics theory was applied, and
math was used as a utility to find incompletenesses in our understanding
of particles.&amp;rdquo; I think that I’ve heard (but cannot recall at the moment)
two cases where conceptual analysis in &amp;ldquo;pure math&amp;rdquo; perfectly corresponds
to the phenomenon in physics discovered later which again makes me
question whether math played some role in the
experiment-phenomenon-discovery cycle of physics. I guess I need more
examples.&lt;/p&gt;
&lt;p&gt;I remember that Kant argued that human knowledge is human perception and
its leading into rational thought and reason. To me this sounds like the
development of math, but in some sense this could also apply to physics,
though I still believe that physics theories even if reasoned require
experimental &amp;ldquo;testing&amp;rdquo; (not &amp;ldquo;verification&amp;rdquo;) for it to be acceptable in
terms of physics. THis leaves me in a situation where none of the ways
of knowing that I can understand, even if used together, could bring
about an absolutely correct[tm] theory of physics. See, reason is
flawed because logic may fail, not to mention when we are literally
trying to define/describe novel physics concepts/entities and there
aren’t any definitions to begin with to even start with reasoning and
all we could do is using intuition in discovery. (Pattern finding in
intuitive concepts would require formalization to be somewhat
acceptable, but not absolutely ground-standing, in the realm of reason.)
And then, experiments are flawed because errors will always exist in the
messey real world (and if we do simulations that’s just falling back to
our existing understanding of logical analysis). So now we have no
single way, or combination of methods, to accurately verify the
correctness of a physics theory, which by definition of physical is
representative of the real world, basically saying that &amp;ldquo;we will never
know how things work in the real world&amp;rdquo;. That feels uncanny. Also, how
do I even make sense of a physics theory to be &amp;ldquo;correct&amp;rdquo;? It’s arguable
whether any physics theory could be correct in the first place. If Kant
is correct then all our theories of physics is ultimately perception and
having biology in the form of human observations in the absolute and
hard-core feeling of physics is so weird.&lt;/p&gt;
&lt;h2 id=&#34;random-ideas&#34;&gt;Random Ideas&lt;/h2&gt;
&lt;p&gt;Here are some of my random ideas that I haven’t sorted into
fully-explained paragraphs due to the lack of time to do so. However, I
believe that the general point is here, and I would appreciate a
discussion about these topics.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How is it possible to know &lt;em&gt;anything&lt;/em&gt; in physics? Experiments can be
inaccurate or conducted wrongly or can be affected by physical
properties completely unknown to us, and mathematical proof can be
erroneous because of systematic flaws and/or false assumptions about
the representation of physical entities in math.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gödel’s theorems only tell us that there &lt;em&gt;are&lt;/em&gt; true statements that
we cannot prove, and there &lt;em&gt;may be&lt;/em&gt; inconsistencies. My intuition
suggests that these statements and inconsistencies would be in the
highly theoretical realm of math, which if accurately identified and
are avoided in physics, would not pose a threat to applied
mathematics in physics.&lt;/p&gt;
&lt;p&gt;However, it shall be noted that any single inconsistency may be
abused to prove any statement, if consistencies were to be found in
math: Suppose that we know a statement
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt;&lt;/span&gt; (i. e. physics is squishy) is
both true and false. Thus, &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt; = 1&lt;/span&gt;
and &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt; = 0&lt;/span&gt; are both true. Then,
take a random statement &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;B&lt;/em&gt;&lt;/span&gt; (let’s
say &amp;ldquo;Z likes humanities&amp;rdquo;). Thus we have
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt; + &lt;em&gt;B&lt;/em&gt; = 1&lt;/span&gt; where
&lt;span class=&#34;math inline&#34;&gt;+&lt;/span&gt; is a boolean &amp;ldquo;or&amp;rdquo; operator
because &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt; = 1&lt;/span&gt; and
&lt;span class=&#34;math inline&#34;&gt;1 + &lt;em&gt;x&lt;/em&gt; = 1&lt;/span&gt;
(&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;x&lt;/em&gt;&lt;/span&gt; is any statement). But then
because &lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;A&lt;/em&gt; = 0&lt;/span&gt;, thus
&lt;span class=&#34;math inline&#34;&gt;0 + &lt;em&gt;B&lt;/em&gt; = 1&lt;/span&gt;, which means that
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;B&lt;/em&gt;&lt;/span&gt; must be 1 (if
&lt;span class=&#34;math inline&#34;&gt;&lt;em&gt;B&lt;/em&gt;&lt;/span&gt; is zero, then
&lt;span class=&#34;math inline&#34;&gt;0 + 0 = 0&lt;/span&gt;). Thus, if we can prove
that &amp;ldquo;physics is squishy&amp;rdquo; and &amp;ldquo;physics is not squishy&amp;rdquo; (without
differences in definition), then we can literally prove that &amp;ldquo;Z
likes humanities&amp;rdquo;. Other from not defining subjective things like
&amp;ldquo;squishy&amp;rdquo; and &amp;ldquo;is&amp;rdquo; (in terms of psychology), we can’t get around
this easily, and everything would be provable, which would not be
fun for physics.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;No citations present for referenced materials. Thus, this article is
not fit for publication, and shall not be considered an
authoritative resource. The addition of references will massively
improve the status of this article.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The ideas are a bit messy. The structure needs to be reorganized.
Repetition is prevalent and must be reduced to a minimum.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acknowledgements&#34;&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Multiple documents were consulted in the writing of this article, which
sometimes simply summarizes ideas already expressed by others. Please
see the attached reading materials for details. Works of Eugene Wigner
were especially helpful.&lt;/p&gt;
&lt;p&gt;Contributors include many YK Pao School students and faculty. Insightful
conversations with other students, such as MuonNeutrino_, have given me
great inspiration in the ideas expressed in this article and discussions
are still ongoing. For privacy reasons other names aren’t listed, but I
would be happy to put names on here at request/suggestion.&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;I’m not exactly sure about this, though, I can only comprehend it
slightly superficially as I don&amp;rsquo;t have much experience in particle
physics or in special unitary groups, yet.
&lt;a href=&#34;#fnref1&#34; class=&#34;footnote-back&#34; role=&#34;doc-backlink&#34;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
				</item><item>
					<title>The Old Web was Better</title>
					<link>https://runxiyu.org/blog/oldweb/</link>
					<pubDate>Sat, 22 Oct 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/oldweb/</guid>
					<description>&lt;p&gt;When I go to an average &amp;ldquo;modern&amp;rdquo; World Wide Web site with the default
configuration of Lynx, a wonderful plain text Web browser, I am usually
greeted with things like
&lt;code&gt;example.com cookie: some jibberish Allow? (Y/N/Always/neVer)&lt;/code&gt; for which
I&amp;rsquo;d press V a couple times. Then, I would press C-f or page-down a
couple times to scroll past a giant navigation bar full of nested lists,
a few HTML login forms, multiple search bars. Then I&amp;rsquo;d see the actual
text of the article I&amp;rsquo;m looking for. Or sometimes, the site would show
&amp;ldquo;Please enable JavaScript to view this page.&amp;rdquo; or some Cloudflare prompt
saying that I need to enable JavaScript to solve a proprietary CAPTCHA
to view the page because they have detected &amp;ldquo;unusual activity from my
network&amp;rdquo;. Or I would be met with a blank page. If I decide to visit the
modern Web with a &amp;ldquo;normal&amp;rdquo; Web browser such as Firefox or Chromium, with
a default install, I&amp;rsquo;d get a ten-megabyte load of a bunch of fancy
advertisements at the top of the page, a giant navigation bar that&amp;rsquo;s
really colorful to distract me from what I actually want to see, some
pop-ups wanting me to fill in my email address to sign up for their
newsletter (which as people say would usually be weekly HTML email
spam), flashy advertisements on the side bar, and when I finally
scrolled past the header part of the page, a few hasty paragraphs with
large paragraph separations unreadably wrapped in a narrow column. All
to display a few kilobytes of actual text, and rarely a few hundred
kilobytes of useful images.&lt;/p&gt;
&lt;p&gt;The Web, which people often refer to as the aggregate of human knowledge
and high-speed distribution of information, has turned into a degenerate
mess of advertisements, JavaScript, slugishness, tracking and profiling,
security holes, and slowness. In summary, the modern Web is &lt;em&gt;painful&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m looking back towards the 1990s, where Websites would be like this
one. Simple (X)HTML, plain text, or another lightweight markup language.
No ads, trackers, JavaScript, popups, &lt;a href=&#34;https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html&#34;&gt;Software as a Service
Substitute&lt;/a&gt;
etc. Just distribution of information and ideas, as gophertext, plain
text, or simple (X)HTML. As simple as that&amp;mdash;basically &amp;ldquo;use the simple
defaults of your Web server program and don&amp;rsquo;t bother with huge
management systems&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Though, some semi-modern things are good. MediaWikis, for example, while
their behind-the-back workings of mulplitudes of PHP mountains, SQL
databases, and recently JavaScript-infested visual editors are extremely
unelegant, they do provide a consistent simple user interface, without
many browser requirements, for users to distribute useful information
with. Just not loads of JavaScript and margins and paddings and ads,
please.&lt;/p&gt;
&lt;p&gt;It would also be better if more people were to have personal Websites to
express themselves with, rather than relying on centralized social media
giants, who once again display a bunch of ads and wraps articles/&amp;ldquo;posts&amp;rdquo;
at 30 columns to make people uncomfortable reading comprehensive ideas
and get them inclined to write short illogical rants and personal
attacks. &lt;a href=&#34;https://learn.tuxiversity.org/&#34;&gt;Tuxiversity&lt;/a&gt; and
&lt;a href=&#34;https://landchad.net/&#34;&gt;LandChad.net&lt;/a&gt; are useful resources to get
started with.&lt;/p&gt;
&lt;p&gt;The same applies to the Internet more generally. Don&amp;rsquo;t send huge, clunky
HTML emails. Simple chat protocols like IRC. Whatever.&lt;/p&gt;
</description>
				</item><item>
					<title>Free Hardware</title>
					<link>https://runxiyu.org/blog/freehw/</link>
					<pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/freehw/</guid>
					<description>&lt;p&gt;&lt;strong&gt;In &amp;ldquo;free software&amp;rdquo; and &amp;ldquo;free hardware&amp;rdquo;, the &amp;ldquo;free&amp;rdquo; in &amp;ldquo;free computing&amp;rdquo;
does not refer to price; it refers to freedom and liberty of users.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This section is mainly for posts on &lt;em&gt;hardware hardware designs&lt;/em&gt;. Without
which, &lt;em&gt;no computer user is free&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In fact, access to schematics, boardviews, datasheets and any other
documentation is &lt;em&gt;critical&lt;/em&gt; to software freedom.&lt;/p&gt;
&lt;p&gt;—Leah Rowe, founder and lead developer of
&lt;a href=&#34;https://libreboot.org&#34;&gt;Libreboot&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We can&amp;rsquo;t make free software, especially bootloaders and operating
systems, if we don&amp;rsquo;t have knowledge of how hardware works. In modern day
computing we do understand how to design kernels for most architectures
such as x86 and aarch64, but this is not enough—without extensive
research into how components in a specific piece of hardware interact
with each other, we may be able to accomplish simple tasks such as
running an OS on it, but &lt;a href=&#34;https://www.fsf.org/campaigns/fight-to-repair&#34;&gt;the right to
repair&lt;/a&gt; is severely
restricted, and we can&amp;rsquo;t check if the &lt;em&gt;hardware&lt;/em&gt; is doing nasty things,
or replace parts of it should it be so.&lt;/p&gt;
&lt;h2 id=&#34;what-are-free-hardware-designs&#34;&gt;What are Free Hardware Designs?&lt;/h2&gt;
&lt;p&gt;Hardware designs that meets the following conditions are free hardware
designs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The design files, for example 3D models and circuit diagrams, are
available under a free license;&lt;/li&gt;
&lt;li&gt;All verilogs of FGPAs, if any (it is wise to use FGPAs for the sake
of condition 5) are available under a free license;&lt;/li&gt;
&lt;li&gt;The documentations of interfaces of the hardware, such as data
sheets, are available under a free license;&lt;/li&gt;
&lt;li&gt;The hardware is fully functional with no proprietary software;&lt;/li&gt;
&lt;li&gt;The hardware is designed to be easy to tinker around with (including
improving and reparing, e.g. being modular) and contains no
tivoization.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here, a free license means that the user may use, adapt and/or
redistribute the work for any purpose, similar to the four essential
freedoms of &lt;a href=&#34;https://www.gnu.org/philosophy/free-sw.html&#34;&gt;free
software&lt;/a&gt;. The design and
documentation is like the equivalent of &amp;ldquo;source code&amp;rdquo; in software.&lt;/p&gt;
&lt;p&gt;We have found no hardware that have/meet all of these requirements (i.e.
full certification) now.&lt;/p&gt;
&lt;h2 id=&#34;what-are-the-benefits-of-free-hardware&#34;&gt;What are the Benefits of Free Hardware?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;You can be ensured that your hardware is not spying on you or doing
anything nasty like that, because you and your technical friends can
audit what&amp;rsquo;s going on, reprogram the FPGAs, etc.;&lt;/li&gt;
&lt;li&gt;You can get fully free software operating systems on your hardware
to work properly and use all the features that your hardware has,
without ever running a nonfree program, so you more easily get the
benefits of free software;&lt;/li&gt;
&lt;li&gt;You can easily create your own software or operating system that
interacts with the hardware given enough expertise and good
documentation;&lt;/li&gt;
&lt;li&gt;You can create your own version of the hardware as you wish, for
example for friends who are in need of hardware but cannot afford
commercial ones, since circuit diagrams, 3D models, and verilogs are
available;&lt;/li&gt;
&lt;li&gt;You can upgrade the parts on your own, thus cutting down on e-waste,
helping protecting our land from plastic, helping protecting our
environment which we all live in and depend on;&lt;/li&gt;
&lt;li&gt;You can rely on 3D models and circuit diagrams when you&amp;rsquo;re
integrating hardware into a new project, for example your own
computer case, without taking the trouble to measure everything and
create your own model for an exact fit.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;how-can-i-help&#34;&gt;How Can I Help?&lt;/h2&gt;
&lt;h3 id=&#34;users&#34;&gt;Users&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re just a normal computer user, kindly ask the manufacturer of
your hardware for design files and datasheets. Show manufacturer that
you care about your freedom to hack the hardware.&lt;/p&gt;
&lt;p&gt;When considering purchasing new hardware, prioritize free hardware. At
this stage it is extremely rare to find any, but still be on the
lookout. Please, if you find any that seem to be trustworthy, tell the
community about it.&lt;/p&gt;
&lt;h3 id=&#34;hardware-manufacturers&#34;&gt;Hardware manufacturers&lt;/h3&gt;
&lt;p&gt;When you create a hardware design, use the &lt;a href=&#34;https://www.gnu.org/licenses/gpl-3.0.txt&#34;&gt;GNU General Public License,
version 3&lt;/a&gt; (please add &amp;ldquo;or
later&amp;rdquo;) or the &lt;a href=&#34;https://ohwr.org/cern_ohl_s_v2.txt&#34;&gt;CERN Open Hardware Licence Version 2 - Strongly
Reciprocal&lt;/a&gt; license! CERN 2.0 is a
strong copyleft license for hardware designs, similar to the spirit of
the GNU GPL, which is more widely used in free software. The GPL is not
specifically designed for hardware designs, but it seems to be work for
hardware designs, at least RMS&amp;rsquo;s lawyers believe it&amp;rsquo;s okay. CERN 2.0 is
more complicated and has more legalese. However, since the GPL can
achieve most of CERN, discussion is needed for which to use and whether
letting yet another license proliferate is good. Using these licenses
ensures that it is illegal to take your design and make proprietary
hardware (or designs thereof) out of it.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re wondering how you could profit, see &lt;a href=&#34;#faq-profit&#34;&gt;the FAQ on
profits&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;frequently-asked-questions&#34;&gt;Frequently Asked Questions&lt;/h2&gt;
&lt;h3 id=&#34;what-would-be-the-incentive-for-hardware-manufacturers-to-continue-develop-hardware-and-innovate&#34;&gt;What would be the incentive for hardware manufacturers to continue develop hardware and innovate?&lt;/h3&gt;
&lt;p&gt;You may profit from providing support to end users who don&amp;rsquo;t know how to
deal with hardware.&lt;/p&gt;
&lt;p&gt;However, profit isn&amp;rsquo;t the goal, when you see people developing good
hardware and software. When profit is the goal of a project or company,
people often ignore the social consequences they bring about to people.&lt;/p&gt;
&lt;h3 id=&#34;how-would-developers-gather-the-resources-to-develop-hardware-developing-hardware-is-expensive&#34;&gt;How would developers gather the resources to develop hardware? Developing hardware is expensive.&lt;/h3&gt;
&lt;p&gt;This is an issue. However, people in the free software community—who
probably also support free hardware—would probably be more than happy to
support you.&lt;/p&gt;
&lt;p&gt;It should be noted that many or most of the expenses of developing
hardware today comes from patents. &lt;a href=&#34;https://endsoftwarepatents.org&#34;&gt;Software patents make developing
software exceptionally hard as developers cannot be passively (i.e. with
no extra work) ensured that they&amp;rsquo;re not infringing patents just by not
copying others&amp;rsquo; work—they need to actively look for works similar to
theirs and check if these are patented, leading to an exponential
increase in development cost&lt;/a&gt;, which we
can already see with people patenting technologies to speed up the free
RISC-V architecture, leaving others with slow versions of the
architecture as the way to speed the processor up is patented. (This is
yet another reason to use copyleft licenses.)&lt;/p&gt;
&lt;h3 id=&#34;how-would-this-affect-me-a-normal-computer-user-who-doesnt-understand-how-my-hardware-works&#34;&gt;How would this affect me, a normal computer user who doesn&amp;rsquo;t understand how my hardware works?&lt;/h3&gt;
&lt;p&gt;There are certainlly people who would understand how the hardware works,
and possibly tinker with it, given free documentation, design files and
datasheets. It is impossible for everyone to be a computer expert;
however, free hardware and free software grant people collective control
over their computing, with the freedom to redistribute modified version
of the original work.&lt;/p&gt;
&lt;p&gt;Many markets, especially the computer hardware market down to the basics
such as the architecture/chipset-like level, are Economics of Scale,
meaning that the cost of production per unit decreases as the total
number of production for one entity.  This naturally gives rise to
oligopolies, also known in the technology industry as companies like
Intel and Microsoft.&lt;/p&gt;
&lt;p&gt;An oligopoly is a market structure in which a market or industry is
dominated by a small number of large sellers or producers.  People often
confuse this with monopolies, for which the latter Francis Wayland
defines as &amp;ldquo;an exclusive right granted to a [hu]man or a monopoly of
[hu]man, to empoly their labor or capital in some particular manner&amp;rdquo;,
which cannot exist in a free market (i.e. free of government
regulations).  The technology industry in most countries is an
oligopoly, not a monopoly.&lt;/p&gt;
&lt;p&gt;The harm of oligopolys (and monopolies, which are similar in this
context) are commonly discussed in Economics, such as the lack of
competition causing prices to be solely in control of one economic
entity, who may set insane prices in seek of profits, which is
especially harmful for products that serve basic human needs, such as
food and water.  And in modern times, technology is often a necessity
for daily life, exacebating the harms of a relevant oligopoly market.&lt;/p&gt;
&lt;p&gt;There is yet another practical harm of a oligopoly technology market:
about the rights of users.  When CPUs are produced by almost solely
Intel, AMD, and a few others, they are now free to add their backdoors
and &amp;ldquo;management engines&amp;rdquo; into the CPUs that we users use daily, and
their seek for profit pushes them to do so.  We now have to work with
spyware in our computer hardware, and we can&amp;rsquo;t do anything about it,
because the oligopoly nature of the market doesn&amp;rsquo;t allow us common
people to monitor, produce, develop, or otherwise deal with our own
technology except for the &amp;ldquo;expected usages&amp;rdquo; that the oligopoly
superimposes on us.&lt;/p&gt;
&lt;p&gt;One way out is to decentralize the development and production of CPUs
and related goods.  Individual cities and towns should be able to
produce computers, from the very basics, for their own people.
And I know this sounds like an anti-internationalisation self-sustaining
propaganda chiche economic outcome, but if you think about it, such an
essential part of life (like technology) would be better served by
people who&amp;rsquo;d be less likely to massively implement spyware that would be
of any use to them.&lt;/p&gt;
&lt;p&gt;Initiatives to decentralize development of CPUs and other computer
components, such as LibreSilicon, have existed for a short time (in
comparison to the time that Intel and AT&amp;amp;T have existed).  We&amp;rsquo;re nowhere
near what Intel could make, however, partly due to the insane patents
around their technology.  Patent trolls exist and often target free
software and free hardware projects, and thus applying the idea of
copyleft as it works for copyright, to patents, may aid practical
development.  And at this point, we can&amp;rsquo;t really develop upon existing
foundations, so we have to ignore pre-existing knowledge and develop our
own architecture and CPU from the start, paying attention to copyleft
licenses and copyleft-in-patents to hopefully prevent patent trolls from
taking over the world again.  (This is also what the Evosaur project is
attempting to do.)&lt;/p&gt;
</description>
				</item><item>
					<title>Effective-ish online communication</title>
					<link>https://runxiyu.org/blog/comms/</link>
					<pubDate>Sat, 17 Sep 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/comms/</guid>
					<description>&lt;p&gt;These are some general recommendations that I believe make communicating
with me, at least, easier and/or more effective, including communication
conventions that make my life easier. Please note that what I prefer may
not be what others prefer and shall not be treated as a general
guideline for communications, although many of these are common in the
free software community.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Write a descriptive subject for emails. Do not send emails with an
empty subject or no subject header. The subject should be give the
receiver a brief idea of what the email is about.&lt;/li&gt;
&lt;li&gt;Send complete information. When telling me something or requesting
something, please provide complete background information, knowledge
required, and other relevant context. This prevents back-and-forth
communication along the lines of &amp;ldquo;and now I need to know &amp;hellip; but you
didn&amp;rsquo;t tell me that so can you please give that to me&amp;rdquo;. Providing
context defragments conversations which increases efficiency.&lt;/li&gt;
&lt;li&gt;When using instant messaging such as IRC, do not split one sentence
into multiple messages (unless, of course, if your message exceeds
the character limit). Fragmentation reduces readability.&lt;/li&gt;
&lt;li&gt;Do not use excessive emojis.&lt;/li&gt;
&lt;li&gt;Be direct rather than polite. As the sender, do not use polite
expressions like &amp;ldquo;you did quite well in that presentation&amp;rdquo; when in
reality, the sender believes that the presentation is not &amp;ldquo;quite
well&amp;rdquo;. Direct critique and suggestions are very welcome here.
Politeness is acceptable if it does not interfere with honest
conveying of information.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;./ask.html&#34;&gt;Don&amp;rsquo;t ask to ask.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use plain text email. Both hard-wrapped and non-hard-wrapped emails
are acceptable. If you do hard-wrap, please wrap at 72 characters
for English. Chinese, if hard-wrapped, should be at approximately 36
characters. Non hard-wrapped emails should &lt;a href=&#34;https://www.ietf.org/rfc/rfc3676.txt&#34;&gt;specify format=flowed
according to RFC3676&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Interweave the original message with the response when replying to
an email and remove irrelevant parts (i.e. greetings, closings,
signatures, etc.) of the quoted original email.&lt;/li&gt;
&lt;/ol&gt;
</description>
				</item><item>
					<title>Democracy: Some fundamentals</title>
					<link>https://runxiyu.org/blog/dembase/</link>
					<pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/dembase/</guid>
					<description>&lt;p&gt;&lt;em&gt;Unless otherwise specified, &amp;ldquo;democracy&amp;rdquo; in this article refers to
representative democracy. &amp;ldquo;Country&amp;rdquo; can additionally refer to other
regions that have people and its own policies, such as a state,
provinces in some countries, etc.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We usually think of &amp;ldquo;democracy&amp;rdquo; as people influencing the policies of
the country by electing trustworthy experts that serve their interest to
make actual decisions about running the country. This type of democracy,
representative democracy, has evolved from direct democracy aging back
two thousand years ago as created by Athens in Greece. Representative
democracy is more scalable than direct democracy and also avoids some
forms of populism and uninformed decisions as its the experts in the
field that are making the actual policies.&lt;/p&gt;
&lt;p&gt;The Chinese term for democracy is &amp;ldquo;民主&amp;rdquo;. The first character, &amp;ldquo;民&amp;rdquo;,
means &amp;ldquo;people&amp;rdquo;; the second, &amp;ldquo;主&amp;rdquo;, ascin &amp;ldquo;主人&amp;rdquo; means &amp;ldquo;owner&amp;rdquo;. You could
understand it as saying &amp;ldquo;the people of the country own the country (and
thus get to decide on its affairs)&amp;rdquo;. But at the same time, &amp;ldquo;主&amp;rdquo; as in
&amp;ldquo;自主&amp;rdquo; means &amp;ldquo;do things themselves&amp;rdquo;, i.e. the right not to be interfered
by others while doing their own business.&lt;/p&gt;
&lt;p&gt;This is, of course, not the proper definition for democracy; democracy
is just saying that the general public ultimately runs the country. But
we could take the time to appreciate how with democracy we usually end
up with liberty and how we take personal liberty for granted.&lt;/p&gt;
&lt;p&gt;In any case, both democracy and liberty are important in a long-lasting
prosperous system of society. Note my wording in the first paragraph,
that the decisions of elected experts are for &amp;ldquo;running the country&amp;rdquo;—I
specifically mean issues that deal with either the general public (such
as public health and the environment) and things that would be otherwise
hard to solve personally (such as enforcement of contracts and crimes).
The &amp;ldquo;will of the people&amp;rdquo;, represented by the government, have no
business doing things like banning freedom of thought or mandating
people not to smoke in their private property. Only when things affect
others such as smoking in public should the government, or the will of
the general public, have any say. And of course, people should take
responsibility for their own private deeds. It is argued that a lung
cancer patient who got lung cancer by smoking excessively doesn&amp;rsquo;t
deserve medical insurance from taxpayers; but for cases where an illness
isn&amp;rsquo;t caused by a identifiable private decision factor, medical
insurance and support should be given. (In practice the distinction is
subtle; this is also a very controversial topic.)&lt;/p&gt;
&lt;p&gt;People overemphasize the importance of democracy. In fact, democracy is
in my opinion less important than liberty—though in practice indeed
liberty wouldn&amp;rsquo;t survive for long without democracy.&lt;/p&gt;
&lt;p&gt;Note that abortion and similar subjects may fall into the scope of
government. Some opponents of abortion believe that fetus is human life
and thus abortion is murder and shall be outlawed. The &amp;ldquo;privacy&amp;rdquo; and
&amp;ldquo;personal liberty&amp;rdquo; arguments don&amp;rsquo;t stand up well against this as it&amp;rsquo;s no
longer a personal matter when another human life is supposedly on the
line. &lt;a href=&#34;abortion&#34;&gt;I oppose the abortion bans that Republicans in the US are placing
in many states for a different reason.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Modern populism (which is a poorly-defined term but does have the
following general scope) gives the power of deciding everything that
happens in the country to the people. This is bad in two ways. (1) The
general public often make uninformed and un-thought-through decisions
and are easily influenced. (2) The government, in this case directly the
collective decision of the people, is stepping its feet into the
personal lives of people. While it is democratic, it doesn&amp;rsquo;t give people
liberty, creating a tyranny of the majority, and at the same time making
uninformed decisions which are better made by experts which people
elect.&lt;/p&gt;
</description>
				</item><item>
					<title>Abortion</title>
					<link>https://runxiyu.org/blog/abortion/</link>
					<pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/abortion/</guid>
					<description>&lt;p&gt;This was written quite a while ago and I should update it sometime&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.law.cornell.edu/supremecourt/text/410/113&#34;&gt;In 1973 the Supreme Court of the United States of America ruled
seven-to-two in favor of Roe&amp;rsquo;s rights to abortion against a healthcare
official of the state of Texas. Roe argued for abortion with &amp;ldquo;privacy&amp;rdquo;,
derived from the Fourth and Fourteenth Amendment of the US
Constitution.&lt;/a&gt; As
the U.S. has a precedential judiciary system, this effectively legalizes
abortion across the country.&lt;/p&gt;
&lt;p&gt;However, as Roe&amp;rsquo;s case was argued for based on privacy rather than body
autonomy or similar rights, it left a question into if abortion is
indeed a right that women should have. After all, if someone is accused
of murder, the suspect&amp;rsquo;s privacy is not a reason to not investigate the
case further. Those against abortion often believe that abortion is
murder, and thus the privacy argument wouldn&amp;rsquo;t stand long.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.supremecourt.gov/opinions/21pdf/19-1392_6j37.pdf&#34;&gt;In 2022, the Supreme Court overturned this
precedent&lt;/a&gt;,
and now the abortion rights of women in the united states are in a void.
This memo focuses on discussing the notion of abortion itself, and
briefly comments on the decision of the Court.&lt;/p&gt;
&lt;p&gt;Some people believe that because fetus is human life, and abortion is
nonvoluntary (as in nonvoluntary by the life terminated) termination of
human life, thus abortion is murder and is unacceptable.&lt;/p&gt;
&lt;p&gt;This reasoning is flawed—nonvoluntary termination of human life, even
when the decision-maker understands the consequence of their action, may
or not be murder.&lt;/p&gt;
&lt;p&gt;Involuntary termination of life isn&amp;rsquo;t always murder. Consider yourself
an average person in the United States. You live on paychecks and you&amp;rsquo;re
living an average life in a comfortable house. You noticed a poor
person, without food, proper clothes, or shelter, sleeping in the
street, almost frozen to death. You took them home, giving them food,
clothes and shelter. But one day, out of whatever reason you decided to
stop supporting that person and remove them from the house back onto the
street. You understanded that they will have a hard time finding foot,
shelter and clothes. They deceased because of the cold.&lt;/p&gt;
&lt;p&gt;The poor person was life, and your decision did cause their decession.
But is this murder? Man-slaughter? Any kind of statutory offense? No,
not really, it&amp;rsquo;s merely termination of voluntary support that you
provided for another person.&lt;/p&gt;
&lt;p&gt;There is a subtle, but eventually significant difference between helping
a person down the street and voluntary pregnency. (Involuntary pregnency
is basically &amp;ldquo;alright, here comes a person at your doorstep, you MUST
help them and keep them alive&amp;rdquo;, there&amp;rsquo;s not much to discuss there in my
opinion.)&lt;/p&gt;
&lt;p&gt;In the last example, the ethicalness of terminating support would be
different if you and the person receiving help signed an explicit
contract giving you the responsibility to help them but you terminate
the support when the contract is still valid.&lt;/p&gt;
&lt;p&gt;Indeed, the fetus did not sign a contract with the mother that obligates
the mother to carry to term. But similarly, children don&amp;rsquo;t sign
contracts with their parents to take care of them, but we consider
parents who don&amp;rsquo;t take care of their children and such to be child
abuse. But they are different.&lt;/p&gt;
&lt;p&gt;A scientific definition of life which includes bacteria, fungi,
parasites, plants, animals and many other forms of life doesn&amp;rsquo;t seem
inherently valuable to us—almost all of us don&amp;rsquo;t feel bad killing
bacteria with an ultraviolet lamp, don&amp;rsquo;t feel bad killing plants for
consumption, and don&amp;rsquo;t feel bad stepping on a mosquito. Many of us don&amp;rsquo;t
feel bad consuming animals for food. We value human life because it
allows us to pursue what we want and live a life. But a fetus cannot do
that: though the fetus is biologically a human, it doesn&amp;rsquo;t have the very
characteristics that make the life valuable: It doesn&amp;rsquo;t have meaningful
brain activity and cannot pursue what it wants.&lt;/p&gt;
&lt;p&gt;Abortion is just okay before the cerebrum (the part of the brain
responsible for thinking) develops, which is usually at the end of the
second trimester. Abortion after meaningful cerebrum activity is
detected should be considered with care because at that time the fetus&amp;rsquo;s
life would be considered valuable.&lt;/p&gt;
</description>
				</item><item>
					<title>On Free Software, Education in China and the COVID-19 Pandemic</title>
					<link>https://runxiyu.org/blog/freeswcovid/</link>
					<pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/freeswcovid/</guid>
					<description>&lt;p&gt;&lt;em&gt;This was originally an email to the Libreplanet-discuss mailing list.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I am a secondary school student from Shanghai, China. This email
discusses the problems I discovered in the Chinese educational system,
in terms of students&amp;rsquo; right to freedom in computing and options to
control the COVID-19 pandemic from the standpoint of a person living in
China.&lt;/p&gt;
&lt;p&gt;When COVID-19 broke out in 2020, students were required to watch lecture
videos produced by the city&amp;rsquo;s education department for twenty minutes,
then join the Tencent Meetings room to discuss in their own class for
10&amp;ndash;15 minutes.&lt;/p&gt;
&lt;p&gt;Watching the videos wasn&amp;rsquo;t an issue for me. Our apartment has cable TV,
where the videos are broadcast; there was also a website that played the
livestream without JavaScript. However, Tencent Meetings presented a
problem to me.&lt;/p&gt;
&lt;p&gt;At the time, I run Arch Linux. (Currently, I run Hyperbola
GNU/Linux-libre, a Free Software-only distribution, which would have
made this even harder.) Tencnet Meetings, claiming to support &amp;ldquo;all
operating systems and platforms&amp;rdquo;, only supports Windows and macOS. (I
wonder how they passed the resolution to display that statement, I
believe that they have many programmers who use GNU/Linux.) (As of
October 2021, a classmate noted that there is a &amp;ldquo;Linux versuon&amp;rdquo;.) School
required Tencent Meetings, therefore I went through a hard process to
setup QEMU running a Windows 7 virtual machine—I believed that 7 would
be slightly better than 10 in terms of privacy, though as always with
nonfree software, I can&amp;rsquo;t really know for sure. It was slightly
unstable, which is an annoyance, for example the connection from the
Windows audio server to pulseaudio would stop working from time to time,
but it was acceptable. Though my setup was okay (in the perspective of
my school), it left me in a psycological crisis about education and
freedom. More on that later.&lt;/p&gt;
&lt;p&gt;Offline classes resumed in May 2020, as most of China has minimal cases
of COVID-19. This freed me from using a proprietary
non-privacy-respecting bloated piece of software in a virtual machine,
but it did not free me from teachers&amp;rsquo; requirement to use WeChat (think
of it as the equiv of WhatsApp in China), Xiaoheiban (A proprietary
classroom information distribution system), or other pieces of nonfree
software.&lt;/p&gt;
&lt;p&gt;Similar to the beliefs stated in the GNU Education project, I believe
that schools and educaion are a means of sharing information and
knowledge. I understand that meeting software and lesson management
software are used as means of distributing knowledge, rather than the
knowledge being distributed themselves. However, I believe this doesn&amp;rsquo;t
lead to the argument that the mandate of proprietary software usage is
just, for three reasons as below.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;There are always going to be curious students who wonder how the
trchnology works. Proprietary software denies them this right.&lt;/li&gt;
&lt;li&gt;The usage of proprietary software when young may implant dependence
on it in the future.&lt;/li&gt;
&lt;li&gt;Education is a right and a responsility. Mandating nonfree software
in education adds unjust responsibilities on students.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Point 1 and 2 are explained well in the Education section of the GNU
website, therefore I am not going to focus on them. Focusing on the
third point:&lt;/p&gt;
&lt;p&gt;Under laws of almost all countries, citizens have the right to an
education. Traditionally, this involves going to school, meeting
teachers and classmates, listening to classes, taking notes, passing
exams (I have strong opinions that exam systems ought to change to
better represent individual talents, but this is out of scope of this
memo.) and finishing homework. Students loose a slight bit of their time
and freedom of movement (as in, it&amp;rsquo;s not easy to move to a house 100
miles away from school), in exchange for being educated.&lt;/p&gt;
&lt;p&gt;However, with schools requiring the use of nonfree software, in effect
students are required to give up their privacy, and digital freedom,
both crucial rights in modern society, as the effect of needing to use
nonfree software. The right to education has effectively turned into an
exchange for other basic rights. This is not acceptable.&lt;/p&gt;
&lt;p&gt;Furthermore, in countries like China, 9 years of education is mandatory
for children. I understand this law as a means to the goal of creating a
knowledgeble and educated society, which is good. However, when
mandatory edication mandates nonfree software, it deduces to &amp;ldquo;children
are required to use nonfree software&amp;rdquo;. So, being a child here is pretty
unlucky, because there goes your right to privacy, your independence,
and your freedom, because of a law that&amp;rsquo;s supposed to help society.&lt;/p&gt;
&lt;p&gt;We need to stop using nonfree software in education.&lt;/p&gt;
&lt;p&gt;In th beginning of this email, I mentioned COVID-19. You might be
wondering how the Chinese government fully put the pandemic under
control in just 5 months, which is seemingly impossible if all you know
is how the US dealt with this situation.&lt;/p&gt;
&lt;p&gt;The answer is that the Chinese government is implementing strict contact
tracing. This is extremely easy because of the prevaliance of
survillance. Many would argue that this is a benefit of survillance,
which I believe to be true. However, no comparisons were given between
losing privacy and increasing the risk or infection. Briefly inspecting
this idea in my head, it&amp;rsquo;s really hard to think about—privacy and
freedom is important in the long term, at the cost of many lives in the
pandemic. The lives of these dead are gone—they lose not only privacy
and computing freedom, they lose their lives, which costs them their
opportunity to pursue their dreams in this world, and they have no
freedom of choice, speech, etc as they aren&amp;rsquo;t alive. Once again, this is
hard to wrap my mind around, therefore I would especially like to invite
the community to discuss this.&lt;/p&gt;
&lt;p&gt;The contact tracing system used is not Free Software. At first I didn&amp;rsquo;t
understand why (except for the explanation that they want to profit from
harming citizens which is hopefully just a hypothetical &amp;ldquo;explanation&amp;rdquo;),
but I noticed that the authenticity and accuracy of the system may be
affected if users are allowed to modify their software. This seems to be
the core of some problems with regards to software freedom—here, the
user is not running software to complete their tasks. Rather, it&amp;rsquo;s the
government&amp;rsquo;s way to maintain public safety, therefore I believe that
whether users should be able to modify software in these conditions is
up to discussion. Back to the point, since a green-code proof from the
system is needed to get in a lot of places, a person basically needs to
use proprietary software to live a normal life (to get into coffee
shops, for example).&lt;/p&gt;
&lt;p&gt;In the US and other countries, things aren&amp;rsquo;t that good either. For one,
the pandemic isn&amp;rsquo;t controlled well. As a consequence, a lot of places
require negative COVID tests to do stuff. &lt;a href=&#34;https://lists.gnu.org/archive/html/libreplanet-discuss/2021-08/msg00008.html&#34;&gt;A thread on the LibrePlanet
mailing
list&lt;/a&gt;
discusses this issue, as a lot of these tests require nonfree software
on users&amp;rsquo; phones. Note that this thread spans several months long, as it
is a hot discussion, so look in the september and october archives too.
The thread explains the implications clearly, thus I am not discussing
it here.&lt;/p&gt;
&lt;p&gt;Additionally, I heard that some US courts require Zoom for online cases,
therefore it seems that a person&amp;rsquo; right to judicial justice comes at the
cost of digital freedom. I can&amp;rsquo;t confirm this, but if that&amp;rsquo;s true, I&amp;rsquo;m
truly disappointed at the judicial system, even though I&amp;rsquo;m not a US
citizen.&lt;/p&gt;
&lt;p&gt;I am looking forward to a freer society, or at least one where the above
problems get solved.&lt;/p&gt;
</description>
				</item><item>
					<title>Pragmatic Use of Nonfree Software</title>
					<link>https://runxiyu.org/blog/pragnonfree/</link>
					<pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/pragnonfree/</guid>
					<description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;
&lt;p&gt;Free Software is undoubtably a good thing for society. However, modern
computer users are stuck in the proprietary &amp;ldquo;ecosystem&amp;rdquo; for historical
reasons. This document describes the justification and best current
practices of using proprietary platforms to spread the ideas of Free
Software.&lt;/p&gt;
&lt;h2 id=&#34;status-of-this-memo&#34;&gt;Status of This Memo&lt;/h2&gt;
&lt;p&gt;This document describes the author&amp;rsquo;s viewpoint. This does not represent
the ideas of the Free Software Foundation or any other entity.
Distribution of this memo is unlimited.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Readers of this memo probably understand the ideals of the Free Software
Movement, and avoid proprietary software when possible. However, as most
outsiders are unaware and are deeply buried inside the proprietary
dystopia created by mostly multibillion-dollar technology corporations,
our methods of communicating with the masses are ineffective.&lt;/p&gt;
&lt;p&gt;In February 2022, the author decided to permit limited usage of nonfree
chat platforms to hopefully spread our ideas to the general public. This
was attempted by registering a Discord account, creating a Guild called
&amp;ldquo;Free Software Introductions&amp;rdquo;, and setting up a basic Discord-to-IRC
relay to #fsi on both irc.andrewyu.org (now irc.runxiyu.org) and
irc.libera.chat.&lt;/p&gt;
&lt;p&gt;One of the communities that he knows about, the VF-Technic Minetest
community, primarily uses Discord as a means of communication by players
not in-game. As the users inside are Minetest players, a Free Software
voxel sandbox game, similar to but much more flexible and
freedom-respecting than Minecraft, it is believed that the users have
some contact with Free Software, although they might not understand the
freedom part of the issue, i.e. they might be thinking in terms of &amp;ldquo;open
source&amp;rdquo; instead, and do not understand the harms of nonfree JavaScript
and services like Discord. After sharing the invite link in the
VF-Technic Guild, some people joined, and we&amp;rsquo;ve partially converted two
users.&lt;/p&gt;
&lt;h2 id=&#34;justification&#34;&gt;Justification&lt;/h2&gt;
&lt;p&gt;There are numerous free replacements to proprietary services such as
Discord, such as Internet Relay Chat, the Extensible Messaging and
Presence Protocol, the Matrix protocol, and email. As Free Software
activists, we generally prefer these protocols over nonfree services.
This section explains the reasons to consider nonfree services and
protocols.&lt;/p&gt;
&lt;p&gt;Generally, users on IRC and XMPP have a fair understanding of the Free
Software Movement, and it is quick and easy to inform them what we mean
by &amp;ldquo;free&amp;rdquo;, &amp;ldquo;the four freedoms&amp;rdquo;, and similar ideas. For users on the
Libera Chat IRC network, which by far has the most users of any network,
it is exceptionally easy to introduce a user into the #fsf channel for
discussions with people supporting Free Software. Introducing ignorant
users on these protocols and platforms are a day-to-day simple task.
Furthermore, the amount of users we can reach on these protocols are
rather limiting. Libera has around forty thousand users according to the
`LUSERS` command, and considering the fact that around 90% of these
people aren&amp;rsquo;t ignorant, there isn&amp;rsquo;t much we can do.&lt;/p&gt;
&lt;p&gt;Matrix users, in particular users of the matrix.org homeserver,
typically know but don&amp;rsquo;t completely understand Free Software. Rather
than using Matrix IDs to identify users, the Matrix specification
specifies that third-party platform identities, such as email and
GitHub, are how users should be referenced both internally by servers
and shown to other users. This is obviously an increadibly foolish idea,
especially considering the use of centralized identity servers (similar
to X509 certificate authorities) for 3PIDs. These are our first targets,
but these should also be easy to get the idea across.&lt;/p&gt;
&lt;p&gt;It is true that Libera Chat and similar IRC networks, though
multi-centered in a technical way (i.e. multiple IRC servers form an IRC
network), the network is politically centralized, controlled by one
entity, Libera. The Internet Relay Chat server-to-server protocol
implies that servers fully trust each other and are expected to not send
damaging commands, which in turn implies full trust between server
operators, no federation, and political centralization. The privacy
policy and network policy of Libera Chat are non-intrusive, therefore
the use of which is acceptable and is promoted by the FSF. (Obviously,
most methods of using IRC do not involve nonfree software.)&lt;/p&gt;
&lt;p&gt;We currently find it hard to continue spreading basic knowledge among
the masses through free communication protocols.&lt;/p&gt;
&lt;p&gt;Those that have never touched Free Software are often on giant
proprietary platforms, and take these as universal methods of
communication. Many people go months before checking their mailbox
(physical or electronic), refuse to use XMPP or IRC for its age.&lt;/p&gt;
&lt;p&gt;There is one special case where using some nonfree software, and even
urging others to use it, can be a positive thing. That&amp;rsquo;s when the use of
the nonfree software aims directly at putting an end to the use of that
very same nonfree software. The author believes that the following fall
within this scope:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developing a free project that requires nonfree environments to
bootstrap.&lt;/li&gt;
&lt;li&gt;To spread awareness of software freedom issues to users in nonfree
environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As almost all types of development can be done on most types of BSD and
GNU operating systems, the author hasn&amp;rsquo;t found any software that fit
this category. Extending the interpretation allows for using nonfree
software&amp;rsquo;s behavior as a reference in Free Software development, though
an arguable programming practice, may help the community to progress by
understanding common features that users of nonfree services use.&lt;/p&gt;
&lt;p&gt;The latter is more interesting, as explained above our methods of
spreading awareness is limited. Conservative usage of nonfree platforms
may bring us more users, and chances for more of the general public to
be enlightened.&lt;/p&gt;
&lt;h2 id=&#34;current-practices&#34;&gt;Current Practices&lt;/h2&gt;
&lt;p&gt;Activists &lt;strong&gt;MUST NOT&lt;/strong&gt; list such nonfree services in &amp;ldquo;Contact
Information&amp;rdquo; pages on their website or similar sources, unless followed
by a explanation that the purpose of the nonfree platform is to
introduce users thereof onto free protocols and to eventually
exterminate the nonfree platform. Whenever these references to nonfree
platforms appear, the author &lt;strong&gt;MUST&lt;/strong&gt; present free methods of
communication. Activists &lt;strong&gt;SHOULD&lt;/strong&gt; pragmatically use as many of the
popular free protocols as possible, to ensure that opportunities of
introductions are not lost. In cases involving competition between free
and nonfree protocols and platforms, ethical concerns (i.e. enabling
talking to a new user on any ethical platform) &lt;strong&gt;MUST&lt;/strong&gt; take precedence
over technical concerns (such as disliking the XMPP protocol for its
inefficient use of XML).&lt;/p&gt;
&lt;p&gt;Communities for introducing users to Free Software on nonfree platforms
&lt;strong&gt;MUST&lt;/strong&gt; be bridged to a free protocol in some obvious way, in order to
minimize the usage of nonfree platforms even for the purpose of
communicating ideology to new users and allow members of the Free
Software community refusing to use nonfree platforms in any way to
participate. Usages of nonfree platforms, besides part of the
user-introduction process that must happen on the nonfree platform,
&lt;strong&gt;SHOULD&lt;/strong&gt; be avoided. Free clients, if available, &lt;strong&gt;SHOULD&lt;/strong&gt; be used,
although many times usage is technically cumbersome.&lt;/p&gt;
&lt;p&gt;When both (all) sides of the communication are happy using a free
protocol, proprietary platforms &lt;strong&gt;MUST NOT&lt;/strong&gt; be used.&lt;/p&gt;
&lt;p&gt;During communications with users of nonfree platforms, activists
&lt;strong&gt;SHOULD&lt;/strong&gt; ask them what features of the nonfree platforms are
attractive to the user, besides having more users. This allows the
community to take usage by the general population into account when
developing new software or specifications.&lt;/p&gt;
&lt;p&gt;For example, the author created a Discord Guild called Free Software
Introductions, which is one-way-puppeted to #fsi on irc.andrewyu.org
(currently dormant), which is then one-way-puppeted to Libera. The relay
system is sort-of messed up, but it&amp;rsquo;s working. Inviting new users to
such Guilds (&lt;a href=&#34;https://discord.gg/7CYp7ntww7&#34;&gt;https://discord.gg/7CYp7ntww7&lt;/a&gt;) when perse refuses to or is
ignorant on how to use IRC helps conveying our ideas to users, but as
the author has made their own &amp;ldquo;sacrifice&amp;rdquo; already, there exists less of
a need for other existing Free Software activists to join and use it
instead of free protocols.&lt;/p&gt;
&lt;h2 id=&#34;technical-limitations&#34;&gt;Technical Limitations&lt;/h2&gt;
&lt;p&gt;The old and centralized nature of IRC, the insane 3PID recommendation of
Matrix, the bad routing and efficiency of XMPP, and the lack of
documentation on PSYC, has led us to develop a new protocol, Internet
Delay Chat, which aims to be free, modern (i.e. support for channel
groups and shared permission sets, non-text data with MIME types), sane
(i.e. TCP, UDP and SCTP-based, instead of HTTP POST APIs) and simple.&lt;/p&gt;
&lt;p&gt;Outsiders may point at these actions as cringeworthy because we are
depending on things we are against to achieve our goals. In this
situation, showing them this article should suffice.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The Free Software Community is constantly evolving; the majority of
computer users haven&amp;rsquo;t heard of us. While we improve our software, it is
important that our ideology and philosophy is sent out of our internal
circle. This demonstrates the necessity for momentarily sacrificing our
own principle for the greater good while minimizing the harms of such
pragmatic usage of nonfree software.&lt;/p&gt;
&lt;h2 id=&#34;informative-links&#34;&gt;Informative Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gnu.org/philosophy/is-ever-good-use-nonfree-program.en.html&#34;&gt;Richard Stallman on this
issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;./&#34;&gt;Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Runxi Yu&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;./pubdom.html&#34; rel=&#34;license&#34;&gt;Public Domain&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				</item><item>
					<title>WeChat sucks</title>
					<link>https://runxiyu.org/blog/wechat/</link>
					<pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
					
					<guid>https://runxiyu.org/blog/wechat/</guid>
					<description>&lt;p&gt;WeChat is a instant messaging program by the Chinese technology giant
Tencent. It is insanely popular in Mainland China.&lt;/p&gt;
&lt;p&gt;It sucks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WeChat&amp;rsquo;s client program is &lt;a href=&#34;https://www.gnu.org/proprietary/proprietary.html&#34;&gt;nonfree
software&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Many of WeChat&amp;rsquo;s features are &lt;a href=&#34;https://www.gnu.org/philosophy/who-does-that-server-really-serve.html&#34;&gt;Service as a Software
Substitute&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;WeChat&amp;rsquo;s servers are nonfree; the service is centralized.&lt;/li&gt;
&lt;li&gt;Tencent suspends WeChat accounts for sending &amp;ldquo;politically sensitive
chats&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Information collected by WeChat is given to the police of the PRC
without court warrants.&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Similar problems are present in other popular Instant Messaging services
such as &lt;a href=&#34;https://stallman.org/whatsapp.html&#34;&gt;WhatsApp&lt;/a&gt;,
&lt;a href=&#34;https://spyware.neocities.org/articles/discord.html&#34;&gt;Discord&lt;/a&gt;, Tencent
QQ, etc.&lt;/p&gt;
</description>
				</item>
	</channel>
</rss>
