<rss version="2.0"><channel><title>Yuchen Pei's microblog</title><description>Yuchen Pei's microblog</description><link>https://ypei.me/microblog.html</link><lastBuildDate>2025-05-06 08:16:00.434305</lastBuildDate><item><link>https://ypei.me/microblog.html#nc-nd</link><pubDate>2022-03-03</pubDate><title>The CC BY-NC-SA license is bad, don't use it</title><description><![CDATA[
<p>
The CC BY-NC-SA license permits remix, but forbids commercial use
(therefore nonfree).  It is a weird frankenstein that combines
copyleft with nonfree elements.  As a result, works under this license
will beget derived works, which will also be nonfree because of the
ShareAlike (SA).  It is a mistake by Creative Commons, which should
have not designed any noncommercial licenses, or if it really wanted
to, made noncommercial an optional clause of NoDerivative (ND)
licenses.
</p>

<p>
Please do the public a favour and don't release your work under the
NC-SA license.  If you really do not want to allow commercial use,
please use NC-ND instead to avoid nonfree derivatives.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#dns66</link><pubDate>2022-02-17</pubDate><title>dns66</title><description><![CDATA[
<p>
For some reason, the Google public DNS seems to have become a default
for many programs, including systemd.  After installing Lineage OS, I
noticed it also used Google public DNS as the default DNS for WiFi.
To make things even worse, it was not changeable.  I tried several
ways documented on the web, including changing it in the WiFi setting,
but none worked.  In the end, I was able to fix it with an app called
<a href="https://f-droid.org/en/packages/org.jak_linux.dns66/">DNS66</a>.  If you face the same problem, give it a try.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#reading-emacs</link><pubDate>2022-02-17</pubDate><title>Reading pdf or djvu in Emacs</title><description><![CDATA[
<p>
DocView mode is a versitile builtin major mode in emacs, with the
ability to display pdf, djvu, odt etc.
</p>

<p>
However, it is not really cut for the job for displaying large pdf or
djvu.  It can be slow, and may hang emacs when opening large djvu
files.
</p>

<p>
If you want to view pdf, <a href="https://github.com/politza/pdf-tools">pdf-tools</a> is a great alternative.  It is much
faster (I'd say as fast as external pdf viewers like zathura), and
offers an outline mode style toc navigation.  It also supports fast
regexp isearch as well as occur.  There's a nice demo which you can
view with mpv, youtube-dl
etc. <a href="http://www.dailymotion.com/video/x2bc1is_pdf-tools-tourdeforce_tech?forcedQuality%3Dhd720">http://www.dailymotion.com/video/x2bc1is_pdf-tools-tourdeforce_tech?forcedQuality%3Dhd720</a>
</p>

<p>
For djvu, I recommend use the <a href="https://elpa.gnu.org/packages/djvu.html">djvu mode</a> instead.  It does not make
emacs hang, and allows quick switch between image and text.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#google-analytics</link><pubDate>2022-02-15</pubDate><title>Google analytics alternatives</title><description><![CDATA[
<p>
<a href="https://techcrunch.com/2022/01/12/austrian-dpa-schrems-ii/">Austrian</a> and <a href="https://www.politico.eu/article/french-privacy-regulator-rules-against-use-of-google-analytics/">French</a> regulators ruled against Google Analytics based on
GDPR and data privacy.  Another big problem with Google Analytics is
that it is nonfree.  There are free alternatives like <a href="https://matomo.org/">Matomo</a> (GPLv3+)
and <a href="https://plausible.io/">Plausible</a> (AGPLv3+).  I used to self host Matomo and it was quite
decent, but I would like to try out self-hosted version of Plausible
soon due to its simplicity and lightweight.
</p>

<p>
H/t Michael McMahon
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#lineage-os</link><pubDate>2022-02-10</pubDate><title>Lineage OS helps you degoogle your phone</title><description><![CDATA[
<p>
Compared to <a href="https://replicant.us/">Replicant</a>, <a href="https://lineageos.org/">Lineage OS</a> is not fully free, as it contains
kernel blobs and nonfree drivers.  But if you are using stock android,
switching to Lineage OS will be a massive improvement.
</p>

<p>
The best part: there will be no more proprietary Google apps and
services spying on you.  No google play, google maps, gmail, chrome,
…  You can ensure that all apps are free software by installing them
from <a href="https://f-droid.org">F-droid</a>.
</p>

<p>
The stock apps that come with Lineage OS are nice too.  There's the
caffeine mode toggle switch in the status bar, which keep the screen
on for 5, 10, 30 minutes, or indefinitely.  I find this feature very
useful when say I need to check the phone while cooking and I don't
want it to go to lock screen.  The bundled browser comes with an
option to have all javascript disabled, fixing the Javascript Trap
with a sledgehammer.  By extension, apps with internal browsers like
<a href="https://f-droid.org/en/packages/io.github.hidroh.materialistic/">Materialistic Hacker news client</a> will also not accidentally execute
any Javascript.
</p>

<p>
It also seems like the phone battery lasts longer, which could be due
to a more lightweight system.
</p>

<p>
The only things I'm missing are in the I/O department: glide typing
and a Simplified Chinese input method.  I used the proprietary Google
keyboard on stock android that came with these features, but the input
methods available on F-droid are missing them.  I find myself typing
less after moving to Lineage OS because I can't type as fast as I used
to.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#mumble-mute-cue</link><pubDate>2022-02-10</pubDate><title>Mumble chirping when muted? Try toggling mute cue</title><description><![CDATA[
<p>
Recently when I connect to a mumble server and mute myself, I hear a
periodic chirp / beep once every two seconds or so.  It turns out that
I needed to deselect "mute cue" in settings, which seems to be doing
the opposite of what it is supposed to do.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#big-nonfree-gotcha</link><pubDate>2022-02-10</pubDate><title>Big nonfree gotcha</title><description><![CDATA[
<p>
I just came across my first big nonfree gotcha in formal verification.
</p>

<p>
<a href="https://compcert.org/">CompCert</a>, the verified C compiler, is nonfree.
</p>

<p>
And I learned there are no free alternatives.
</p>

<p>
And opam (the ocaml package manager) installed it without any warning,
possibly as a dep of VST, used in <a href="https://softwarefoundations.cis.upenn.edu/vc-current/index.html">Vol 5 of Software Foundations,
Verifiable C</a>.
</p>

<p>
But I also learned that the part of CompCert required for the study of
Verifiable C is free.  Someone should definitely extract out the free
part which I hope can be distributed on opam as say "compcert-free".
</p>

<p>
On a side note, I feel the GNU Project is missing some essential
functional packages, which could result in the proglang / formal
verification community having less aspirations for free software.  I
am not faulting the GNU Project for this, of course.  But by contrast,
all Emacs packages, be it independent or part of the GNU ELPA, are by
default licensed under GPLv3+, which could be caused by the GNU
Project having a strong foothold in Emacs.
</p>

<p>
H/t Kiran G and pgiarrusso.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#nov-el</link><pubDate>2022-02-03</pubDate><title>Reading EPUB in Emacs</title><description><![CDATA[
<p>
<a href="https://depp.brause.cc/nov.el/">nov.el</a> is pretty handy as an EPUB reader in Emacs.  Before that I was
using the calibre reader, which is slow and resource hungry.
</p>

<p>
Emacs integration also means you get the following for free:
</p>

<ol class="org-ol">
<li>Use <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Follow-Mode.html">follow-mode</a> to allow double- or triple-page display.  Note that
you may need to remove the header line for the text continuation to
be correct.</li>
<li>Annotation can be done with org-capture, which can easily get the
selected text and link to the EPUB with the correct position.</li>
</ol>

<p>
One feature that I am sorely missing from calibre reader is fulltext
search, which is <a href="https://depp.brause.cc/nov.el/TODO.org">an item in the todo list of the project</a>.
</p>

<p>
Another feature would be an equivalent to Info-index, which could
allow jumping to any section in the book, with completion.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#chilean-constitution</link><pubDate>2022-01-27</pubDate><title>New Hampshire and Chile free software politics</title><description><![CDATA[
<p>
News was that a New Hampshire bill to promote free software in
government services (especially mandating online government services
to be usable if nonfree javascript is blocked using tools like
LibreJS) is <a href="https://www.fsf.org/blogs/community/new-hampshire-residents-make-your-voice-heard-on-january-11th">on the table</a>, and <a href="https://drewdevault.com/2022/01/19/Help-Chile-promote-digital-freedoms.html">Chile</a> is rewriting its constitution,
with proposals to include free software values (Access to knowledge)
and related digital rights values (Technological and digital
sovereignty and Internet privacy).
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#emms</link><pubDate>2022-01-27</pubDate><title>EMMS and MPV</title><description><![CDATA[
<p>
<a href="https://www.gnu.org/software/emms/">EMMS</a> is a multimedia playlist management tool on emacs.  It allows
users to control the playback of audio, video and even images by
interacting with external players like mpv and vlc using IPC.
</p>

<p>
I've been using EMMS exclusively with mpv, and the separation of media
playlist management and playback, as well as moving playlist
management to a purely plaintext environment make perfect sense.
</p>

<p>
What is a playlist, but a list of urls?  As a simple experiment, you
can write a working m3u file by hand, with each line the raw path to a
media file.  It will load in EMMS, neat.
</p>

<p>
What's also neat is mpv, a media player able to handle any kind of url
you throw at it.  Local files?  Of course.  Remote file urls over
https?  Yup.  SFTP?  You don't even need to sshfs mount, just do <code>mpv
    sftp://host:port/path/to/media.file</code>.  How about Libreplanet videos?
It will work, through youtube-dl extractors, just do <code>mpv
    https://media.libreplanet.org/u/libreplanet/m/fsf-award-ceremony/</code>.
By the way, there's no mediagoblin extractor, but youtube-dl could
find the media file using its rather versitile generic extractor.
</p>

<p>
You can also create a playlist based on a youtube channel or playlist,
with the help of some elisp plumbing calling <code>youtube-dl -j
    &lt;playlist-or-channel-url&gt; | jq '.webpage_url'</code> and add the urls to a
playlist.  If you want, you can even bind a key to download a remote
media piece you like!
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#mu4e-gnus</link><pubDate>2022-01-27</pubDate><title>From mu4e to gnus</title><description><![CDATA[
<p>
mu4e is a very popular emacs email client, known for the ease of setup.
</p>

<p>
However it has its problems.  The search is not very good (for example
I had a hard time searching for patterns with special symbols like
subjects containg the string "[gnu.org #".  The indexing is part of the
program, which combined with its lack of concurrency, makes it rather
tricky to schedule update its index (on a side note elfeed has a
similar problem).  One may need to perform some hack by killing any mu
process running in emacs in a cron script before indexing.  I had been
doing manual indexing, and waiting for 30 seconds to index all the
mails whenever I want to check the mailbox for update was rather
distracting.
</p>

<p>
I made the move to gnus, which did not disappoint.  Its search is more
useful and natural - one does not have to worry about symbols.  If
gnus is configured with an imap server program like dovecot, indexing
becomes that program's job, which could run as a cron job without
bothering gnus.  Since the imap server handles concurrency, one can
even open up gnus in multiple emacs instance.  As an added benefit,
opening mailboxes is also much faster than mu4e.
</p>

<p>
As mentioned before, the popular RSS reader elfeed operates on a
similar model as mu4e, thus lacking concurrency.  In fact, it is even
more limited, as if one runs elfeed on two emacs, the update in one
does not reflect on the other!  I hope there could be an emacs RSS
reader with the simplicity of elfeed, but taking gnus approach,
leaving fetching, indexing and storage to a (local) server program,
while the reader itself simply acting as a local client.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#network-freedom</link><pubDate>2022-01-25</pubDate><title>User freedom on the web</title><description><![CDATA[
<p>
The user freedom issues on the web are slightly complicated.
</p>

<ul class="org-ul">
<li>Client-side: is code executed on the client machine (e.g. javascript)
free? If so then the user's freedom is protected.
<ul class="org-ul">
<li>Then there's also the case when the client blocks the execution of
nonfree javascript (e.g. by using <a href="https://www.gnu.org/software/librejs/">LibreJS</a>), in which case the
user's freedom is still protected.</li>
<li>There are also false positives when using LibreJS, when the
javascript code is free, but not labelled or annoated in a
LibreJS-compliant way.  In this case, since the client code is
free it is safe to whitelist the scripts.</li>
</ul></li>
<li>Server-side: is the server not under the user's (individual or
collective) control, doing computing on the user's behalf?  If so
then that's bad (SaaSS), otherwise user freedom respecting.
<ul class="org-ul">
<li>Examples of computing inherently one's own include translation,
photo editing etc.</li>
<li>Examples of computing not inherently one's own are generally
activities requiring communication with others' computers, include
accessing information published by others (e.g. reading a blog
post) and publishing information (e.g. tweeting).</li>
</ul></li>
</ul>

<p>
Case studies:
</p>
<dl class="org-dl">
<dt>Visiting <a href="https://fsf.org">the FSF homepage</a> in a graphical browser like Firefox</dt><dd>This
is fine, because all Javascript is trivial or LibreJS compliant.
Reading information published by the FSF is computing not inherently
one's own, so it's not SaaSS hence freedom respecting.</dd>
<dt>Tooting on Mastodon using its web client</dt><dd>This is generally fine, as
Mastodon webclient is free software, and some instances (like
hostux.social) are LibreJS-compliant.  Publishing microblogposts is
a communication act, thus the Mastodon service that does so is not
SasSS.</dd>
<dt>Watching videos on Peertube using its webclient</dt><dd>Even though
Peertube is unusable with LibreJS on, it is free software from
backend to frontend.  Whitelisting is generally safe.  Watching
videos is again access information published by others, thus not
SaaSS.</dd>
<dt>Recaptcha</dt><dd>Requires nonfree JS, bad.</dd>
<dt>Watching YouTube videos on an invidious proxy</dt><dd>similarly reading tweets on nitter, reading stuff on bibliogram or
doing these activities using a free software client.  This is
certainly OK on the frontend as well as backend since it's
communication.</dd>
<dt>Routing on osmand</dt><dd>Osmand is a free software client and all
computation happens locally so it's good.</dd>
<dt>Routing on osm.org</dt><dd>It depends whether the routing calculation is
done locally using free javascript programs, or remotely (SaaSS).</dd>
<dt>Reading github issues</dt><dd>Doable with LibreJS blocking all
non-trivial nonfree javascript, and it is communications.</dd>
<dt>Publishing tweets using free software clients</dt><dd>Using free clients
is fine on the client side, and publication counts as communication
i.e. not SaaSS.  <a href="https://www.fsf.org/twitter">This is what the FSF does</a>.</dd>
<dt>Get weather forecast</dt><dd>Even though the forecast is done by
computation on meteorological data, the user did not supply data,
thus such computation does not count as SaaSS.  It is similar to
when someone does computation in their head (to outline, draft and
revise) before publishing a blog post.</dd>
</dl>

<p>
We can spot some trends from these case studies:
</p>
<ul class="org-ul">
<li>Generally, a free software (not necessarily web) client is good.
Many tools offer help with this, including the alternative
frontends, haketilo and woot.tech.</li>
<li>F-droid Non-Free Network Service antifeature is not consistent with
the above method.  In fact, it is not clear what is the definition
of this antifeature.  For example, free alternative frontends like
<a href="https://f-droid.org/en/packages/org.schabi.newpipe/">NewPipe</a> and <a href="https://f-droid.org/en/packages/com.jonjomckay.fritter/">Fritter</a> are labelled with such antifeature, though by
the analysis above these are fine.</li>
<li>AGPL is mostly irrelevant in this discussion because it is mostly
concerned with the freedom of the service provider, even though it
is the best software license.</li>
<li>It's OK freedom-wise to use GAFAM service as long as the client is
free and the service does not count as SaaSS, though there are
separate concerns like user privacy.</li>
</ul>

<p>
Further readings:
</p>
<ul class="org-ul">
<li><a href="https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html">Who Does That Server Really Serve?</a></li>
<li><a href="https://www.gnu.org/philosophy/network-services-arent-free-or-nonfree.html">Network Services Aren't Free or Nonfree; They Raise Other Issues</a></li>
</ul>
]]>
</description></item><item><link>https://ypei.me/microblog.html#lxo-open-letter</link><pubDate>2022-01-25</pubDate><title>lxo open letter</title><description><![CDATA[
<p>
Alexandre Oliva (lxo) <a href="https://www.fsfla.org/ikiwiki/blogs/lxo/2021-12-24-open-letter.en.html">posted an email reply</a> to a celebrated feminist
leader regarding <a href="https://stallmansupport.org">https://stallmansupport.org</a> and the drama.  Yet
another powerful piece.
</p>

<p>
In other news, with the <a href="https://www.fsf.org/news/fsf-expands-process-for-associate-members-to-nominate-new-members-of-the-board">FSF expanding process to allow associate
members to nominate new board members</a>, I hope lxo can be back on the
FSF Board.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#dependent-types</link><pubDate>2022-01-20</pubDate><title>Curry-Howard correspondence and Dependent types</title><description><![CDATA[
<p>
What is Curry-Howard correspondence?
</p>

<p>
Roughly speaking, it says there is a one-one correspondence between
world of propositions (proofs) and world of types (programs).
</p>

<p>
A simple illustration:
</p>

<p>
For any two propositions P and Q, the proposition that P implying Q,
i.e. P -&gt; Q, corresponds to: for any two types T and S, the functional
type T -&gt; S.
</p>

<p>
Finding a proof of P -&gt; Q corresponds to finding an element in T -&gt; S.
</p>

<p>
In a more simplified setting, proving a proposition P corresponds to
finding an element of T.
</p>

<p>
In coq, one can write:
</p>

<div class="org-src-container">
<pre class="src src-coq"><span style="font-weight: bold;">Theorem</span> <span style="font-weight: bold;">p_implies_q</span> : P -&gt; Q.
</pre>
</div>

<p>
Which looks exactly the same as, except the keywords <code>Theorem</code> and
<code>Definition</code>,
</p>

<div class="org-src-container">
<pre class="src src-coq"><span style="font-weight: bold;">Definition</span> <span style="font-weight: bold;">some_function</span> : T -&gt; S.
</pre>
</div>

<p>
To show the pun is genuine, if you want, you can prove a definition
and define a theorem:
</p>

<div class="org-src-container">
<pre class="src src-coq"><span style="font-weight: bold;">Definition</span> <span style="font-weight: bold;">add_one</span> : nat -&gt; nat.
<span style="font-weight: bold;">Proof</span>.
  <span style="text-decoration: underline;">intro</span> n.                      <span style="font-weight: bold; font-style: italic;">(* </span><span style="font-weight: bold; font-style: italic;">introduce the argument of the function to the context and call it n.</span><span style="font-weight: bold; font-style: italic;"> *)</span>
  <span style="text-decoration: underline;">apply</span> succ.                   <span style="font-weight: bold; font-style: italic;">(* </span><span style="font-weight: bold; font-style: italic;">apply succ to the "goal"</span><span style="font-weight: bold; font-style: italic;"> *)</span>
  <span style="text-decoration: underline;">apply</span> n.
<span style="font-weight: bold;">Defined</span>.

<span style="font-weight: bold;">Definition</span> <span style="font-weight: bold;">imp_refl</span> : <span style="font-weight: bold; text-decoration: underline;">forall</span> <span style="font-weight: bold; font-style: italic;">P</span> : <span style="font-weight: bold; text-decoration: underline;">Prop</span>, P -&gt; P := <span style="font-weight: bold; text-decoration: underline;">fun</span> <span style="font-weight: bold; font-style: italic;">P p</span> : P =&gt; p.
</pre>
</div>

<p>
It may still feel rather forced, as the proof of the definition is way
less readable than a direct definition, and the definition of the
theorem is just plain silly (Logical Foundations has a more reasonable
example - the evenness of a number).
</p>

<p>
How about an actual example, where one cannot do without the
correspondence?  Well, look no further than dependent types!
</p>

<p>
Say you want to work with vectors, which are lists of a certain
length, which is encoded as a pair (the list, the length) with a
condition:
</p>

<div class="org-src-container">
<pre class="src src-coq"><span style="font-weight: bold;">Definition</span> <span style="font-weight: bold;">vector</span> (<span style="font-weight: bold; font-style: italic;">X</span> : <span style="font-weight: bold; text-decoration: underline;">Type</span>) :=
  { '(xs, n) : list X * nat | length xs = n }.
</pre>
</div>

<p>
This is called a dependent sum type, or sigma type, where the vertical
bar <code>|</code> serves the same role as in set theory, meaning "such that".
</p>

<p>
The full definition is a bit more involved which we will skip.
</p>

<p>
Now, how do you define a concat function that takes two vectors of
length m and n and returns a concatenated vector of length m + n?  You
will have to do two things in such a definition:
</p>

<ul class="org-ul">
<li><b>Define</b> the resulting pair.</li>
<li><b>Prove</b> the length of the resulting list is m + n.</li>
</ul>

<p>
Now there's no escaping the pun!
</p>

<p>
To learn more about this, check out <a href="https://softwarefoundations.cis.upenn.edu/lf-current/index.html">Logical Foundations</a> and <a href="https://softwarefoundations.cis.upenn.edu/vfa-current/index.html">Verified
Functional Algorithms</a>.  More specifically, <a href="https://softwarefoundations.cis.upenn.edu/lf-current/ProofObjects.html">ProofObjects: The
Curry-Howard Correspondence</a> and <a href="https://softwarefoundations.cis.upenn.edu/vfa-current/ADT.html#lab168">ADT: Abstract Data Types</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#djokovic</link><pubDate>2022-01-18</pubDate><title>The Djokovic case</title><description><![CDATA[
<blockquote>
<p>
Rules are rules the Prime Minister declared, especially when it comes
to our borders. Rules weren't rules last year, when celebrities
travelled to and from Australia while ordinary people were denied a
permit to leave, or even more scandalously, not afforded the most
basic right of a citizen to return to their country. Now though, when
Australia chooses to insist on a medical procedure as a condition of
entry to Australia the rules are suddenly rigid.
</p>
</blockquote>

<ul class="org-ul">
<li><a href="https://www.smh.com.au/national/djokovic-case-will-perpetuate-the-worst-aspects-of-the-pandemic-20220113-p59o4x.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_national">Djokovic case will perpetuate the worst aspects of the pandemic</a></li>
</ul>

<p>
Meanwhile, <a href="https://www.sbs.com.au/news/asylum-seekers-beg-australians-don-t-forget-us-when-djokovic-leaves/a1705542-309c-4f99-add2-86321ad450eb">asylum seekers beg Australians: ‘Don’t forget us when
Djokovic leaves’</a>, and <a href="https://www.theguardian.com/australia-news/2022/jan/17/pm-accused-of-outright-lie-after-claiming-detainees-in-melbourne-hotel-are-not-refugees?CMP=Share_AndroidApp_Other">PM accused of ‘outright lie’ after claiming
detainees in Melbourne hotel are not refugees</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#theyvoteforyou</link><pubDate>2022-01-18</pubDate><title>theyvoteforyou.org.au</title><description><![CDATA[
<p>
<a href="https://theyvoteforyou.org.au/">theyvoteforyou.org.au</a> looks like <a href="https://yewtu.be/watch?v=ygeZdbgOuV8">a very useful resource for democracy</a>
and shouldn't be shut down.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#lxo-digital-tyranny</link><pubDate>2022-01-18</pubDate><title>Free software vs. open source</title><description><![CDATA[
<p>
Alexandre Oliva's post <a href="https://www.fsfla.org/ikiwiki/blogs/lxo/pub/against-software-tyranny.en.html">Against Software Tyranny</a> is a good read on the
difference between free software and open source.  Free software is
the liberation of computing, whereas open source is to hope for the
corporations to be enlightened.  Much like copyleft vs. pushover and
dare I say progressives vs. liberals.
</p>

<p>
Corporations view "open source" software as commons, just like natural
resources, free for their taking.  This is the key cause of
unsustainable free software development recently under discussion.
This is also why I don't really like to refer to the free world as
commons.
</p>

<p>
A commons is too weak to protect our computing freedom, and only makes
sense if nonfree software is eliminated.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#google-antitrust-bully</link><pubDate>2022-01-18</pubDate><title>Warren, Jayapal Demand Google Stop Trying to 'Bully' DOJ Antitrust Official</title><description><![CDATA[
<p>
<a href="https://www.commondreams.org/news/2022/01/05/warren-jayapal-demand-google-stop-trying-bully-doj-antitrust-official">Warren, Jayapal Demand Google Stop Trying to 'Bully' DOJ Antitrust Official</a>
</p>

<p>
Google is too big and powerful and should be broken up.  Everyone
should read the antitrust filings against Google, easpecially the <a href="https://storage.courtlistener.com/recap/gov.uscourts.nysd.564903/gov.uscourts.nysd.564903.152.0_1.pdf">one
led by the Texas AG</a>.  Another good read which the filing was
apparently built on, with more comprehensive introduction of the
relevant technologies is <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3500919">Why Google Dominates Advertising Markets</a> by
Srinivasan.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#why-software-foundations</link><pubDate>2022-01-13</pubDate><title>Why you should read Software Foundations</title><description><![CDATA[
<p>
I finished reading the <a href="https://softwarefoundations.cis.upenn.edu/lf-current/index.html">Logical Foundations</a>, the first volume of
<a href="https://softwarefoundations.cis.upenn.edu/">Software Foundations</a>.  What an amazing book.
</p>

<p>
I learned about formal proofs before, by playing the <a href="https://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_game/">natural number game</a>
designed by Kevin Buzzard, which is in Lean.
</p>

<p>
Logical Foundations covers all that and goes much deeper.
</p>

<p>
There are many great things about this book.  You can download it,
ignore the html files, and just burn through the coq .v files, which
are actually the source of the webpages.  The texts are basically
comments in the .v files, but the readability is not worse than the
html files, and actually much better in emacs.  It is almost like
literate programming.
</p>

<p>
As an aside, initially I had some problems with getting org-babel to
work, but the files were deleted years ago.  After reading LF I
realised org-babel is not really important, since I can just happily
work through the giant .v files in <a href="https://proofgeneral.github.io/">Proof General</a> (which you can
easily install manually without MELPA).
</p>

<p>
Another neat thing about LF is that it really demonstrates the
parallel between propositions and types, by using the same arrow
notations for implication and function, by making no notational
distinctions with proofs of a theorem and elements of type.  A Proof
is a Definition, and a property of numbers is a dependent type.  If
you want to understand Curry-Howard Correspondence, you can't go wrong
with Logical Foundations.
</p>

<p>
By the end of book, you will have worked through the implementation of
a mini imperative language called Imp, and proved some simple
properties of programs written in Imp - great value for your time!
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#get-australia-weather</link><pubDate>2022-01-13</pubDate><title>A simple shell script to get Australian weather forecast from BoM</title><description><![CDATA[
<p>
In this micropost I'll show how to write your own android weather app
("app" in a liberal sense) to retrieve weather for an Australian town,
using Melbourne as an example.
</p>

<p>
The short form (précis) 7-day forecasts, containing min / max
temperature, humidity level and chances of precipitation are available
as xml files <a href="http://www.bom.gov.au/catalogue/data-feeds.shtml">provided by the BoM</a> - simply go there and get the link
for the state you are interested in.  For Victoria it is
<a href="ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10753.xml">ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10753.xml</a>.
</p>

<p>
So the first step is to download the xml to a temp directory, which
can be done with wget:
</p>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold;">cd</span> $<span style="font-weight: bold; font-style: italic;">PREFIX</span>/tmp
rm IDV10753.xml || true
wget ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10753.xml
</pre>
</div>

<p>
Next one needs to query the xml file for the relevant data.  Locate
the city name, date, temperatures and chance of pricipitation using
the nice <a href="https://en.wikipedia.org/wiki/XMLStarlet">xmlstarlet</a> tool and format them nicely.
</p>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold; font-style: italic;">result</span>=<span style="font-weight: bold;">`xml sel -t -m '//area[@description="Melbourne"]/forecast-period'\</span>
<span style="font-weight: bold;"> -v "substring-before(@start-time-local, 'T')" \</span>
<span style="font-weight: bold;"> -o " - min: " -v "element[@type='air_temperature_minimum']" \</span>
<span style="font-weight: bold;"> -o " - max: " -v "element[@type='air_temperature_maximum']" \</span>
<span style="font-weight: bold;"> -o " - " -v "text[@type='precis']" \</span>
<span style="font-weight: bold;"> -o " - chance of precipitation: " -v "text[@type='probability_of_precipitation']" \</span>
<span style="font-weight: bold;"> -n IDV10753.xml`</span>
</pre>
</div>

<p>
And finally, send the forecast to yourself using <a href="https://f-droid.org/en/packages/com.termux.api">Termux:API</a>.
</p>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold;">echo</span> -e <span style="font-style: italic;">"7-day weather forecast in Melbourne:\n${result}"</span> | <span style="font-style: italic;">\</span>
    termux-sms-send -n 044444444 <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">replace 044444444 with your phone number</span>
</pre>
</div>

<p>
To use it in termux, it doesn't hurt to specify the location of the
shell in a shebang:
</p>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold; font-style: italic;">#</span><span style="font-weight: bold; font-style: italic;">!/data/data/com.termux/files/usr/bin/</span><span style="font-weight: bold;">bash</span>
</pre>
</div>

<p>
Finally, to make the script a bit more convenient to invoke, use
<a href="https://f-droid.org/en/packages/com.termux.widget/">Termux:Widget</a>, and copy the script to <code>~/.shortcut</code>, and you can make
it appear as a button in a desktop widget.
</p>

<p>
Enjoy the Melbourne weather!
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#think-apac</link><pubDate>2022-01-11</pubDate><title>Virtual event organisers, please think of people in the APAC region</title><description><![CDATA[
<p>
It is impossible to hold an online event that works for people from
America, Europe and Asia-Pacific (APAC) regions at the same time.
Normally one region will be dropped in favour of the other two.  Most
online tech events are organised by people located in Europe or
America.  98% of them are set at a time that accommodates people in
both regions, thus not work for people in APAC.  Perhaps this is
because not as many from the APAC region attend in an APAC-friendly
time, compared to the number of participants from Europe in an
Europe-friendly time (say) when the event is organised by someone in
the States, which could be an effect as well, of events not
accommodating APAC time.
</p>

<p>
As such, if organisers in Europe or America sometimes set events time
to be APAC-friendly say 40% of the time, instead of accommodating
those across the pond, a more diverse and vibrant community may
result.  More concretely, that roughly translates to 12am-12pm UTC for
Europe-based organisers, 7pm-7am UTC-5 for US East Coast, and 3pm-3am
for US West Coast.
</p>

<p>
Thank you!
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#coq-is-cool</link><pubDate>2022-01-06</pubDate><title>Coq is cool</title><description><![CDATA[
<p>
Having written emacs lisp for a while and grown my emacs init file to thousands of lines, I decided to revisit the <i><a href="http://landoflisp.com/">Land of Lisp</a></i>, a fanstastically and humorously written book about lisp.
</p>

<p>
The book said that lisp is basically lambda calculus, which got me thinking.  How is it lambda calculus?
</p>

<p>
So I went back into the rabbit hole that drew me in a few years ago, not knowing that's where I was going.  I started by refreshing my knowledge reading <i><a href="https://www.cis.upenn.edu/~bcpierce/tapl/">Types and Programming Languages</a></i> (TAPL).  After reading it I still didn't quite get how lisp is basically lambda calculus.
</p>

<p>
TAPL mentioned Curry-Howard correspondence, a theory that connects logic systems with type systems.  I wanted to know what each of the 8 vertices of the <a href="https://en.wikipedia.org/wiki/Lambda_cube">lambda cube</a> corresponds to and how, which was not covered in TAPL.  After a failed web surfing session in an attempt to find quick answers to my question, I was reminded of the <i><a href="https://softwarefoundations.cis.upenn.edu/">Software Foundations</a></i> series, and indeed, it talked about Curry-Howard correspondence with real code.
</p>

<p>
So I went on to read the first volume titled <i><a href="https://softwarefoundations.cis.upenn.edu/lf-current/index.html">Logic Foundations</a></i>.  Previously I had an (irrational?) aversion towards logic, fearing much of it was all dry tautology and not as fun as more "useful" mathematics like probably theory.  Boy was I wrong.  <i>Logic Foundations</i> introduces coq, which I didn't touch due to the same aversion.  But as it turned out, coq answered most of my questions about formal mathematics, and fully developed my (unoriginal) <a href="https://toywiki.xyz/">ideas of formalising mathematics</a>.  Maths is code.  Theorems are identified by their proofs.  You can apply a theorem in the proof of another theorem, matching terms.  You can parameterise theorems etc. etc.  Coq is something I wish I knew when I was a PhD student.  The logic system is constrained in CoC, calculus of constructions, which is the top vertex in the lambda cube.  I am still reading the book and can't wait to find out the extent of mathematics covered by it and what can be done about non-constructive systems (like the classical maths where you can cheat with excluded middle) using coq or other formal systems.
</p>

<p>
If one day programs and proofs are indistinguishable, the two traditions will blend.  Maths has no copyright, but advanced maths can be hard to understand, though written in well-commented code it will be more accessible.  Computer programs are the opposite, heavily copyrighted under good free licenses like (A)GPLv3+ and evil proprietary licenses, but more accessible (though code obfuscation is also thing but it cannot have gaps).  My hope is this will bring the best of both worlds, that is, an elimination of copyright in computer programs (look, it is all maths, and copyrighting theorems and proofs are absurd!), and a more accessible corpus of advanced mathematics.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#emacs-switch</link><pubDate>2021-12-30</pubDate><title>Emacs is cool</title><description><![CDATA[
<p>
Emacs blows Vim out of water.
</p>

<p>
I started using vim in late 2000s, perhaps 2010, as I was drawn by the marketing slogan with vim "what you think is what you get".
</p>

<p>
I tried to get vi keybinding on everything, in browser (vimperator), pdf viewer (zathura), window manager (i3) etc.  I used vimwiki heavily for knowledge and task management, and even wrote the initial version of the pandoc vimwiki reader.
</p>

<p>
About 18 months ago (around end of June 2020) I decided to give Emacs a try.  The reason for this decision was more ideological than technical - I was fed up with a free software hostile environment, and Emacs always striked me as a centre piece of the GNU project.
</p>

<p>
I started the official Emacs distribution with an empty config file, and read the emacs tutorial.  Coming from vim, it was quite uncomfortable to go without the convenient keys from hjkl for basic navigation to C-d for scrolling down half page and . for repeating the last action.
</p>

<p>
Org mode came as a double culture shock for someone used to vimwiki.  Why would anyone think having a level-8 heading is a good idea?  The link format was also a bit more verbose.  Online resources focused more on GTD workflow than describing the markup syntax.  And the table auto-align was nothing fancy - we have that in vimwiki.
</p>

<p>
But soon enough, I found out Emacs is indeed way better than vim.  It can be used for almost about every computing task, including web browsing, emails, media player, executing shell commands, reading epub, managing files, version control, and of course, text editing.  Days without emacs now seemed like dark ages.
</p>

<p>
Some aha moments in my Emacs journey:
</p>

<ul class="org-ul">
<li>When I discovered icomplete and fido, completion and function / variable discovery became so much easier.</li>
<li>When I combined icomplete with (setq org-refile-use-outline-path t), (setq org-refile-use-cache t), and (setq org-outline-path-complete-in-steps nil), which allows me to jump to any entry in a huge org file within seconds.</li>
<li>When I learned about emacsclient, so that I can have a long running emacs server so that I can share states across multiple emacs frames (or "windows" in a DE / WM context), and I don't lose anything when accidentally typing C-x C-c and quitting emacs.</li>
<li>When I found out EMMS to be the only media player with persistent playlists that I can switch and control with ease, and with the help of mpv, it can play urls in multiple schemes from http to sftp, and with the help you youtube-dl, it can play mediagoblin webpages, which allowed me to go through talks at <a href="https://audio-video.gnu.org/video/">https://audio-video.gnu.org/video/</a> and <a href="https://media.libreplanet.org/videos">https://media.libreplanet.org/videos</a> without losing track.</li>
<li>When I read the GTD book, despite not having a secretary to bring me the tickler folder or a koi pond to for me pave around with a wine glass in hand, I could finally put the design of org mode in context and vastly improve my workflow by implementing my version of GTD.</li>
<li>When I switched from webmail to mu4e, I learned how to get mails as a client and that emails are basically plaintext files (e.g. maildir) which can be read and written to locally and synced to remote server, and that smtp and imap are completely separate areas of concern; when I switched from mu4e to gnus, I learned how to serve mails using dovecot as an imap server and talk to a mail server using telnet, as well as the nice thing about offloading indexing to an external party (updating mails in gnus is instant, compared to mu4e-update-index).</li>
</ul>

<p>
The most useful tool, the killer feature for me, is of course org mode.  I spent most of my emacs screen time in org mode.  I can't think of any aha moments related to it, but the process of adoption was gradual and there are so many nice features.  I approached org mode with starting using one new feature every few weeks:  speed command, org agenda, links, properties, org capture, effort estimate, clocking, tagging, refiling, attachment, online image display, citing…  The problem with marketing org mode, and emacs in general, is that it integrates so much in my life and its workflow is so involved, that it is rather difficult to come up with a quick demo to impress people.
</p>

<p>
One final point is that my usage is pretty vanilla, in that I strongly prefer the core distribution and GNU ELPA.  I also installed a few packages from NonGNU ELPA, but I don't use MELPA at all, both for ideological reasons and simplicity.  In the rare occasions when I really need a package not in core / NonGNU ELPA, I normally install it manually with make / add-to-list load-path and require / autoload.
</p>

<p>
Enough rambling…
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#curve25519</link><pubDate>2021-12-23</pubDate><title>Curve25519</title><description><![CDATA[
<p>
<a href="https://research.nccgroup.com/wp-content/uploads/2020/02/A_Tour_of_Curve25519_in_Erlang-1.pdf">A tour of Curve25519</a> is a great introduction on elliptic curve encryption.  It explains how EC is like modular arithmetic, with the analogue what multiplication to EC is what exponentiation to modular arithmetic.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#bitcoin-theory</link><pubDate>2021-12-23</pubDate><title>Theory of Bitcoin</title><description><![CDATA[
<p>
The theoretical model of bitcoin is surprisingly simple.  A transaction is a list of inputs and outputs, where the inputs trace to outputs of previous transactions.  Transactions form blocks, and blocks form the blockchain with each block verifying the previous ones, going all the way back to the <a href="https://live.blockcypher.com/btc/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f/">genesis block</a>.  Proof of work requires finding a nonce that hashes to a sufficiently small number.  One new block every 10 minutes, transaction fees and award of 6.25BTC (halving every 210k blocks) goes to whoever created the block (aka miner).  A total of 21mil BTC, running out by ~2140.
</p>

<p>
By the way, the whitepaper is not very useful for understanding the theory of bitcoin, but Wikipedia and the <a href="https://en.bitcoin.it/wiki/Main_Page/">bitcoin wiki</a> are far better resources IMO.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#ombudsman-border</link><pubDate>2021-12-09</pubDate><title>Ombudsman finds Victoria border permit system 'unjust'</title><description><![CDATA[
<p>
<a href="https://www.theage.com.au/politics/victoria/ombudsman-border-permits-were-downright-unjust-even-inhumane-20211206-p59fat.html">Link</a>. Not the first time the Ombudsman has such findings about <a href="https://www.bbc.com/news/world-australia-55342990">pandemic measures taken by the Victorian Government</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#streaming-emacsconf</link><pubDate>2021-12-08</pubDate><title>EmacsConf 2021 alternate streaming solution</title><description><![CDATA[
<p>
<a href="https://libreau.org">LibreAustralia</a> hosted an <a href="https://libreau.org/past.html#emacsconf21">alternate EmacsConf 2021 stream for APAC timezones</a> on 28th November.  It was a fun event to organise.
</p>

<p>
How to stream an event like this with a fully free software stack?  Initially I envisioned a server streaming solution like I did with the inaugural event, by using ffmpeg to feed a local video file to icecast:
</p>

<div class="org-src-container">
<pre class="src src-sh">ffmpeg -re -i ./video.webm -codec copy -content_type video/webm icecast://source:password@localhost:8000/live.webm
</pre>
</div>

<p>
This works very well with one video, but with multiple videos one will need to <a href="https://trac.ffmpeg.org/wiki/Concatenate">concatenate them</a>.  The concat idea has two problems:
</p>

<ol class="org-ol">
<li>Not all videos can be concatenated.  In fact, in most of my experiments, the output video could not play after the the portion corresponding to the first input video.</li>
<li>There's absolutely no control of the playback.  Once the stream started, the whole event is scripted, and to adjust the schedule one has to kill the stream first.</li>
</ol>

<p>
Problem 2 can be fixed by utilising the fallback mountpoint with fallback-override:
</p>

<div class="org-src-container">
<pre class="src src-xml">&lt;<span style="font-weight: bold;">mount</span>&gt;
  &lt;<span style="font-weight: bold;">mount-name</span>&gt;/live.webm&lt;/<span style="font-weight: bold;">mount-name</span>&gt;
  &lt;<span style="font-weight: bold;">fallback-mount</span>&gt;/fallback.webm&lt;/<span style="font-weight: bold;">fallback-mount</span>&gt;
  &lt;<span style="font-weight: bold;">fallback-override</span>&gt;1&lt;/<span style="font-weight: bold;">fallback-override</span>&gt;
&lt;/<span style="font-weight: bold;">mount</span>&gt;
</pre>
</div>

<p>
This way the stream never dies, provided a standby video plays on on the fallback mountpoint.
</p>

<p>
Unfortunately not all videos can move smoothly between the main and the fallback mountpoints.  Some transitions cause unpleasant visual artefacts lasting for a dozen seconds, others (even worse) with audio turning into high-pitch scratching noise and never recovering.  For certain videos these problems even occur when a video transitions to itself.
</p>

<p>
It may be possible to use ffmpeg to reencode videos that transitions smoothly, which is something to figure out for the future.
</p>

<p>
That's pretty much a deadend in server streaming.
</p>

<p>
On to desktop streaming, which offers the ultimate flexibility of playback control, but is heavier on bandwidth and computing resources.  One idea was OBS Studio, which unfortunately does not have icecast as one of its <i>streaming</i> options, but rather requires a hack to <i>recording</i> to an icecast mountpoint.
</p>

<p>
I experimented with a setup from <a href="https://kelar.org/~bandali/">Amin Bandali</a>, which seems to me like using OBS Studio as an ffmpeg wrapper.  Unfortunately I would get segfault unless the stream is done with a minimal resolution.
</p>

<p>
Inspired by <a href="https://libremiami.org">LibreMiami</a>'s watch party, I decided to try out <a href="https://owncast.online/">Owncast</a>.  It was extremely easy to set up, and I could get an acceptable streaming performance with some low settings.
</p>

<p>
However, as pointed out by Amin, owncast uses rtmp as the streaming protocol, which probably encodes to mp4, <a href="https://audio-video.gnu.org/docs/formatguide.html">a patent encumbered format</a>.
</p>

<p>
How about streaming to BBB with screen share + monitor system audio as source?  A test with <a href="https://zaeph.net/">Leo Vivier</a> showed that it has a similar performance to owncast.  The downside with BBB is that it requires javascript and is less accssible than icecast for viewers.
</p>

<p>
What worked, in the end, was an direct ffmpeg to icecast streaming (thanks to <a href="https://sachachua.com">Sacha Chua</a>):
</p>

<div class="org-src-container">
<pre class="src src-sh">ffmpeg -loglevel 0 -ar 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0+0,20  -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4  -f webm  icecast://source:pass@host:8000/live.webm
</pre>
</div>

<p>
The captured area is shifted by 20 pixels in order not to grab the title bar of the player and emacs window.
</p>

<p>
The performance of this approach was better than any of the other desktop streaming solutions, probably due to its bare ffmpeg setup without any bells and whistles.
</p>

<p>
I also used an <a href="https://www.gnu.org/software/emms/">EMMS</a> playlist to interlace the talk videos with standby music tracks.  If the buffer times between talks were not so short, the whole event could have been autopiloted with elisp <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Timers.html"><code>run-at-time</code></a>!
</p>


<div id="orgbaac638" class="figure">
<p><img src="../assets/e21stream.png" alt="e21stream.png"/>
</p>
<p><span class="figure-number">Figure 1: </span>Standby emacs session during the stream</p>
</div>
]]>
</description></item><item><link>https://ypei.me/microblog.html#gpl-or-later</link><pubDate>2021-12-06</pubDate><title>The useful GPL "or later" clause</title><description><![CDATA[
<p>
Ariadne Conill wrote a piece on GPL "or later" clause.  I made a comment about two weeks ago, which was under moderation but has not appeared as of today.  So I decided to publish it below (with some minor edits).
</p>

<p>
The article says:
</p>

<blockquote>
<p>
The primary motive for the version upgrade clause, at the time, was quite simple: the concept of using copyright to enforce software freedom, was, at the time, a new and novel concept, and there was a concern that the license might have flaws or need clarifications.
</p>
</blockquote>

<p>
The main purpose of the -or-later clause is compatibility.  Any two (strong) copyleft licenses are incompatible.  If a program is licensed under GPLv2-only, it is incompatible with GPLv3.  Same goes for version 3: a GPLv3'd program will likely not be combinable with future GPLv4'd programs.
</p>

<p>
The article continues:
</p>

<blockquote>
<p>
However, for all of the success of the GPLv3 drafting process, it must be noted that the GPL is ultimately published by the Free Software Foundation, an organization that many have questioned the long-term viability of lately.
</p>
</blockquote>

<p>
What long-term viability? According to <a href="https://www.fsf.org/news/fsf-board-frequently-asked-questions-faq#FSFfinancialstatus">https://www.fsf.org/news/fsf-board-frequently-asked-questions-faq#FSFfinancialstatus</a>:
</p>

<blockquote>
<p>
The FSF is in good financial health. As is the case with many organizations, the pandemic affected the FSF, impacting donors, making it impossible to host or attend in-person events, and disrupting operations. Fortunately, conservative financial planning over the years provided the FSF with sufficient reserves to weather these difficulties.
</p>

<p>
The rating organization Charity Navigator recently gave the FSF its 8th consecutive 4-star rating and, for the first time ever, a perfect overall score: <a href="https://www.fsf.org/news/free-software-foundation-awarded-perfect-score-from-charity-navigator-plus-eighth-consecutive-four-star-rating">https://www.fsf.org/news/free-software-foundation-awarded-perfect-score-from-charity-navigator-plus-eighth-consecutive-four-star-rating</a>.
</p>

<p>
The FSF does not depend on large single sources of funding. It accepts and appreciates support from corporations who want to give back by contributing to the development and advocacy for free software, but direct corporate support accounted for less than 3% of FSF revenue in its most recently audited fiscal year.
</p>

<p>
The vast majority of FSF’s financial support comes from individuals – many, but not all, of whom choose to become associate members. At this moment, the FSF has more associate members than at any time in its history.
</p>
</blockquote>

<p>
The original article continues:
</p>

<blockquote>
<p>
And this is ultimately the problem: what happens if the FSF shuts down, and has to liquidate? What if an intellectual property troll acquires the GNU copyright assignments, or acquires the trademark rights to the FSF name, and publishes a new GPL version? There are many possibilities to be concerned about, but developers can do two things to mitigate the damage.
</p>
</blockquote>

<p>
It is baked into GPL terms that future versions of the license have to be similar to the current version in spirit, see Section 14 of GPLv3 text, which protects GPL from the FSF:
</p>

<blockquote>
<p>
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
</p>
</blockquote>

<p>
On the other hand, GPLv3-or-later, as its name implies, offers a <b>choice</b>.  The recipient of a program under this license can choose to apply GPLv3, or a future version e.g. GPLv4, and if the future version is bad all is not lost:
</p>

<p>
<a href="https://www.gnu.org/licenses/gpl-faq.html#VersionThreeOrLater">https://www.gnu.org/licenses/gpl-faq.html#VersionThreeOrLater</a>
</p>

<blockquote>
<p>
Suppose a program says “Version 3 of the GPL or any later version” and a new version of the GPL is released. If the new GPL version gives additional permission, that permission will be available immediately to all the users of the program. But if the new GPL version has a tighter requirement, it will not restrict use of the current version of the program, because it can still be used under GPL version 3. When a program says “Version 3 of the GPL or any later version”, users will always be permitted to use it, and even change it, according to the terms of GPL version 3—even after later versions of the GPL are available.
</p>

<p>
If a tighter requirement in a new version of the GPL need not be obeyed for existing software, how is it useful? Once GPL version 4 is available, the developers of most GPL-covered programs will release subsequent versions of their programs specifying “Version 4 of the GPL or any later version”. Then users will have to follow the tighter requirements in GPL version 4, for subsequent versions of the program.
</p>

<p>
However, developers are not obligated to do this; developers can continue allowing use of the previous version of the GPL, if that is their preference.
</p>
</blockquote>

<p>
Continues on the original article:
</p>

<blockquote>
<p>
First, they can stop using the “or later” clause in new GPL-licensed code.
</p>
</blockquote>

<p>
This is a bad idea and likely harmful to the free software movement, because programs licensed under newer GPL will not be compatible with programs licensed under GPLv3-only.
</p>

<blockquote>
<p>
Second, they can stop assigning copyright to the FSF. In the event that the FSF becomes compromised, for example, by an intellectual property troll, this limits the scope of their possible war chest for malicious GPL enforcement litigation. As we have learned from the McHardy cases involving Netfilter, in a project with multiple copyright holders, effective GPL enforcement litigation is most effective when done as a class action. In this way, dilution of the FSF copyright assignment pool protects the commons over time from exposure to malicious litigation by a compromised FSF.
</p>
</blockquote>

<p>
The copyright assignment enables the FSF as the copyright holder to enforce GPL effectively.
</p>

<p>
The assignment contract safeguards the future of assigned work <a href="https://www.fsf.org/bulletin/2014/spring/copyright-assignment-at-the-fsf">https://www.fsf.org/bulletin/2014/spring/copyright-assignment-at-the-fsf</a>:
</p>

<blockquote>
<p>
But the most important element of the assignment contract is the promise we make to every contributor and community member: We promise to always keep the software free. This promise extends to any successors in the copyright, meaning that even if the FSF were to go away the freedom of all users to share in the contributions wouldn't.
</p>
</blockquote>

<p>
Finally, note there is a difference between Creative Commons licenses and GPL regarding the -or-later variants.  GPL offers people the choice to use -only or -or-later, though FSF recommends the latter.  Contrast that with Creative Commons licenses where -or-later is built-in, and the recipient has no choice.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#stallmansupport</link><pubDate>2021-07-14</pubDate><title>Support Richard M. Stallman</title><description><![CDATA[
<p>
Finally I found some time to write about this.
</p>

<p>
In LibrePlanet 2021 in late March, Richard Stallman announced in his talk that he was returning to the Board of Directors of the Free Software Foundation. This was after he was forced to resign by a smear campaign in September 2019.
</p>

<p>
It was great news! It was a relief and like some kind of belated justice for him.
</p>

<p>
The events took a dark turn soon after. An "open letter" labelling Stallman many things he is not gained support from a group of established people in the "open source" community, and organisations in the same community, including Creative Commons, Mozilla, The Tor Project and Framasoft. The letter called for the removal of Stallman from his life's work, and cited defamatory materials as evidence.
</p>

<p>
Other organisations also joined in, including Software Freedom Conservancy, Free Software Foundation Europe and Electronic Frontier Foundation and published letters condemning the imaginary crimes committed by Stallman and issued sanctions against him and the FSF.
</p>

<p>
These groups and people refused to engage in discussions and some outright censored disagreements on this matter.
</p>

<p>
It was a religious inquisition, a lynch mob, and a textbook case of ritual defamation. It damaged the free software movement and harmed the Free Software Foundation. The management team resigned, leaving the organisation in a bad shape, which was likely capitalised by opportunists in the GCC Steering Committee to remove Stallman, and remove the copyright assignment requirement from the project without community consultation, which further set a precedence and other GNU projects were planning on a similar move. The dilution of copyright will make GPL enforcement harder for these projects.
</p>

<p>
I condemn the defamatory attacks and <a href="https://rms-support-letter.github.io/">support Richard M. Stallman</a> and I hope you join me. Please see also <a href="https://stallmansupport.org">https://stallmansupport.org</a>.
</p>

<p>
P.S. Alexandre Oliva wrote <a href="http://www.fsfla.org/ikiwiki/blogs/lxo/2021-03-28-pursuing-justice-and-freedom.en.html">a very insightful piece on the drama</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#ia-lawsuit</link><pubDate>2020-08-02</pubDate><title>ia lawsuit</title><description><![CDATA[
<p>
The four big publishers Hachette, HarperCollins, Wiley, and Penguin
Random House are still pursuing Internet Archive.
</p>

<blockquote>
<p>
[Their] lawsuit does not stop at seeking to end the practice of
Controlled Digital Lending. These publishers call for the destruction
of the 1.5 million digital books that Internet Archive makes available
to our patrons. This form of digital book burning is unprecedented and
unfairly disadvantages people with print disabilities. For the blind,
ebooks are a lifeline, yet less than one in ten exists in accessible
formats. Since 2010, Internet Archive has made our lending library
available to the blind and print disabled community, in addition to
sighted users. If the publishers are successful with their lawsuit,
more than a million of those books would be deleted from the
Internet's digital shelves forever.
</p>
</blockquote>

<p>
<a href="https://blog.archive.org/2020/07/29/internet-archive-responds-to-publishers-lawsuit/">Libraries
lend books, and must continue to lend books: Internet Archive responds
to publishers' lawsuit</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#fsf-membership</link><pubDate>2020-08-02</pubDate><title>fsf-membership</title><description><![CDATA[
<p>
I am a proud associate member of Free Software Freedom. For me the
philosophy of Free Software is about ensuring the enrichment of a
digital commons, so that knowledge and information are not concentrated
in the hands of selected privileged people and locked up as
"intellectual property". The genius of copyleft licenses like GNU (A)GPL
ensures software released for the public, remains public. Open source
does not care about that.
</p>

<p>
If you also care about the public good, the hacker ethics, or the spirit
of the web, please take a moment to consider joining FSF as an associate
member. It comes with <a href="https://www.fsf.org/associate/benefits">numerous
perks and benefits</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#how-can-you-help-ia</link><pubDate>2020-06-21</pubDate><title>how-can-you-help-ia</title><description><![CDATA[
<p>
<a href="https://blog.archive.org/2020/06/14/how-can-you-help-the-internet-archive/">How
can you help the Internet Archive?</a> Use it. It's more than the Wayback
Machine. And get involved.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#open-library</link><pubDate>2020-06-12</pubDate><title>open-library</title><description><![CDATA[
<p>
Open Library was cofounded by Aaron Swartz. As part of the Internet
Archive, it has done good work to spread knowledge. However it is
currently
<a href="https://arstechnica.com/tech-policy/2020/06/internet-archive-ends-emergency-library-early-to-appease-publishers/">being
sued by four major publishers</a> for the
<a href="https://archive.org/details/nationalemergencylibrary">National
Emergency Library</a>. IA decided to
<a href="https://blog.archive.org/2020/06/10/temporary-national-emergency-library-to-close-2-weeks-early-returning-to-traditional-controlled-digital-lending/">close
the NEL two weeks earlier than planned</a>, but the lawsuit is not over,
which in the worst case scenario has the danger of resulting in
Controlled Digital Lending being considered illegal and (less likely)
bancruptcy of the Internet Archive. If this happens it will be a big
setback of the free-culture movement.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#sanders-suspend-campaign</link><pubDate>2020-04-15</pubDate><title>sanders-suspend-campaign</title><description><![CDATA[
<p>
Suspending the campaign is different from dropping out of the race.
Bernie Sanders remains on the ballot, and indeed in his campaign
suspension speech he encouraged people to continue voting for him in the
democratic primaries to push for changes in the convention.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#defense-stallman</link><pubDate>2019-09-30</pubDate><title>defense-stallman</title><description><![CDATA[
<p>
Someone wrote a bold article titled
<a href="https://geoff.greer.fm/2019/09/30/in-defense-of-richard-stallman/">"In
Defense of Richard Stallman"</a>. Kudos to him.
</p>

<p>
Also, an interesting read:
<a href="https://cfenollosa.com/blog/famous-computer-public-figure-suffers-the-consequences-for-asshole-ish-behavior.html">Famous
public figure in tech suffers the consequences for asshole-ish
behavior</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#stallman-resign</link><pubDate>2019-09-29</pubDate><title>stallman-resign</title><description><![CDATA[
<p>
Last week Richard Stallman resigned from FSF. It is a great loss for the
free software movement.
</p>

<p>
The apparent cause of his resignation and the events that triggered it
reflect some alarming trends of the zeitgeist. Here is a detailed review
of what happened: <a href="https://sterling-archermedes.github.io/">Low grade
"journalists" and internet mob attack RMS with lies. In-depth review.</a>.
Some interesting articles on this are:
<a href="https://jackbaruth.com/?p=16779">Weekly Roundup: The Passion Of Saint
iGNUcius Edition</a>,
<a href="http://techrights.org/2019/09/17/rms-witch-hunt/">Why I Once Called
for Richard Stallman to Step Down</a>.
</p>

<p>
Dishonest and misleading media pieces involved in this incident include
<a href="https://www.thedailybeast.com/famed-mit-computer-scientist-richard-stallman-defends-epstein-victims-were-entirely-willing">The
Daily Beast</a>,
<a href="https://www.vice.com/en_us/article/9ke3ke/famed-computer-scientist-richard-stallman-described-epstein-victims-as-entirely-willing">Vice</a>,
<a href="https://techcrunch.com/2019/09/16/computer-scientist-richard-stallman-who-defended-jeffrey-epstein-resigns-from-mit-csail-and-the-free-software-foundation/">Tech
Crunch</a>,
<a href="https://www.wired.com/story/richard-stallmans-exit-heralds-a-new-era-in-tech/">Wired</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#decss-haiku</link><pubDate>2019-03-16</pubDate><title>decss-haiku</title><description><![CDATA[
<blockquote>
<pre class="example" id="org227c1ce">
Muse!  When we learned to
count, little did we know all
the things we could do

some day by shuffling
those numbers: Pythagoras
said "All is number"

long before he saw
computers and their effects,
or what they could do

by computation,
naive and mechanical
fast arithmetic.

It changed the world, it
changed our consciousness and lives
to have such fast math

available to
us and anyone who cared
to learn programming.

Now help me, Muse, for
I wish to tell a piece of
controversial math,

for which the lawyers
of DVD CCA
don't forbear to sue:

that they alone should
know or have the right to teach
these skills and these rules.

(Do they understand
the content, or is it just
the effects they see?)

And all mathematics
is full of stories (just read
Eric Temple Bell);

and CSS is
no exception to this rule.
Sing, Muse, decryption

once secret, as all
knowledge, once unknown: how to
decrypt DVDs.
</pre>
</blockquote>

<p>
Seth Schoen, <a href="https://en.wikipedia.org/wiki/DeCSS_haiku">DeCSS haiku</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#learning-undecidable</link><pubDate>2019-01-27</pubDate><title>learning-undecidable</title><description><![CDATA[
<p>
My take on the
<a href="https://www.nature.com/articles/s42256-018-0002-3">Nature paper
<i>Learning can be undecidable</i></a>:
</p>

<p>
Fantastic article, very clearly written.
</p>

<p>
So it reduces a kind of learninability called estimating the maximum
(EMX) to the cardinality of real numbers which is undecidable.
</p>

<p>
When it comes to the relation between EMX and the rest of machine
learning framework, the article mentions that EMX belongs to "extensions
of PAC learnability include Vapnik's statistical learning setting and
the equivalent general learning setting by Shalev-Shwartz and
colleagues" (I have no idea what these two things are), but it does not
say whether EMX is representative of or reduces to common learning
tasks. So it is not clear whether its undecidability applies to ML at
large.
</p>

<p>
Another condition to the main theorem is the union bounded closure
assumption. It seems a reasonable property of a family of sets, but then
again I wonder how that translates to learning.
</p>

<p>
The article says "By now, we know of quite a few independence [from
mathematical axioms] results, mostly for set theoretic questions like
the continuum hypothesis, but also for results in algebra, analysis,
infinite combinatorics and more. Machine learning, so far, has escaped
this fate." but the description of the EMX learnability makes it more
like a classical mathematical / theoretical computer science problem
rather than machine learning.
</p>

<p>
An insightful conclusion: "How come learnability can neither be proved
nor refuted? A closer look reveals that the source of the problem is in
defining learnability as the existence of a learning function rather
than the existence of a learning algorithm. In contrast with the
existence of algorithms, the existence of functions over infinite
domains is a (logically) subtle issue."
</p>

<p>
In relation to practical problems, it uses an example of ad targeting.
However, A lot is lost in translation from the main theorem to this ad
example.
</p>

<p>
The EMX problem states: given a domain X, a distribution P over X which
is unknown, some samples from P, and a family of subsets of X called F,
find A in F that approximately maximises P(A).
</p>

<p>
The undecidability rests on X being the continuous [0, 1] interval, and
from the insight, we know the problem comes from the cardinality of
subsets of the [0, 1] interval, which is "logically subtle".
</p>

<p>
In the ad problem, the domain X is all potential visitors, which is
finite because there are finite number of people in the world. In this
case P is a categorical distribution over the 1..n where n is the
population of the world. One can have a good estimate of the parameters
of a categorical distribution by asking for sufficiently large number of
samples and computing the empirical distribution. Let's call the
estimated distribution Q. One can choose the from F (also finite) the
set that maximises Q(A) which will be a solution to EMX.
</p>

<p>
In other words, the theorem states: EMX is undecidable because not all
EMX instances are decidable, because there are some nasty ones due to
infinities. That does not mean no EMX instance is decidable. And I think
the ad instance is decidable. Is there a learning task that actually
corresponds to an undecidable EMX instance? I don't know, but I will not
believe the result of this paper is useful until I see one.
</p>

<p>
h/t Reynaldo Boulogne
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#gavin-belson</link><pubDate>2018-12-11</pubDate><title>gavin-belson</title><description><![CDATA[
<blockquote>
<p>
I don't know about you people, but I don't want to live in a world
where someone else makes the world a better place better than we do.
</p>
</blockquote>

<p>
Gavin Belson, Silicon Valley S2E1.
</p>

<p>
I came across this quote in
<a href="https://slate.com/business/2018/12/facebook-emails-lawsuit-embarrassing-mark-zuckerberg.html">a
Slate post about Facebook</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#margins</link><pubDate>2018-10-05</pubDate><title>margins</title><description><![CDATA[
<p>
With Fermat's Library's new tool
<a href="https://fermatslibrary.com/margins">margins</a>, you can host your own
journal club.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#rnn-turing</link><pubDate>2018-09-18</pubDate><title>rnn-turing</title><description><![CDATA[
<p>
Just some non-rigorous guess / thought: Feedforward networks are like
combinatorial logic, and recurrent networks are like sequential logic
(e.g. data flip-flop is like the feedback connection in RNN). Since NAND
</p>
<ul class="org-ul">
<li>combinatorial logic + sequential logic = von Neumann machine which is</li>
</ul>
<p>
an approximation of the Turing machine, it is not surprising that RNN
(with feedforward networks) is Turing complete (assuming that neural
networks can learn the NAND gate).
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#zitierkartell</link><pubDate>2018-09-07</pubDate><title>zitierkartell</title><description><![CDATA[
<p>
<a href="https://academia.stackexchange.com/questions/116489/counter-strategy-against-group-that-repeatedly-does-strategic-self-citations-and">Counter
strategy against group that repeatedly does strategic self-citations and
ignores other relevant research</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#short-science</link><pubDate>2018-09-05</pubDate><title>short-science</title><description><![CDATA[
<blockquote>
<p>
  
</p>

<ul class="org-ul">
<li>ShortScience.org is a platform for post-publication discussion
aiming to improve accessibility and reproducibility of research
ideas.</li>
<li>The website has over 800 summaries, mostly in machine learning,
written by the community and organized by paper, conference, and
year.</li>
<li>Reading summaries of papers is useful to obtain the perspective and
insight of another reader, why they liked or disliked it, and their
attempt to demystify complicated sections.</li>
<li>Also, writing summaries is a good exercise to understand the content
of a paper because you are forced to challenge your assumptions when
explaining it.</li>
<li>Finally, you can keep up to date with the flood of research by
reading the latest summaries on our Twitter and Facebook pages.</li>
</ul>
</blockquote>

<p>
<a href="https://shortscience.org">ShortScience.org</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#darknet-diaries</link><pubDate>2018-08-13</pubDate><title>darknet-diaries</title><description><![CDATA[
<p>
<a href="https://darknetdiaries.com">Darknet Diaries</a> is a cool podcast.
According to its about page it covers "true stories from the dark side
of the Internet. Stories about hackers, defenders, threats, malware,
botnets, breaches, and privacy."
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#coursera-basic-income</link><pubDate>2018-06-20</pubDate><title>coursera-basic-income</title><description><![CDATA[
<p>
Coursera is having
<a href="https://www.coursera.org/learn/exploring-basic-income-in-a-changing-economy">a
Teach-Out on Basic Income</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#pun-generator</link><pubDate>2018-06-19</pubDate><title>pun-generator</title><description><![CDATA[
<p>
<a href="https://en.wikipedia.org/wiki/Computational_humor#Pun_generation">Pun
generators exist</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#hackers-excerpt</link><pubDate>2018-06-15</pubDate><title>hackers-excerpt</title><description><![CDATA[
<blockquote>
<p>
But as more nontechnical people bought computers, the things that
impressed hackers were not as essential. While the programs themselves
had to maintain a certain standard of quality, it was quite possible
that the most exacting standards—those applied by a hacker who
wanted to add one more feature, or wouldn't let go of a project until
it was demonstrably faster than anything else around—were probably
counterproductive. What seemed more important was marketing. There
were plenty of brilliant programs which no one knew about. Sometimes
hackers would write programs and put them in the public domain, give
them away as easily as John Harris had lent his early copy of
Jawbreaker to the guys at the Fresno computer store. But rarely would
people ask for public domain programs by name: they wanted the ones
they saw advertised and discussed in magazines, demonstrated in
computer stores. It was not so important to have amazingly clever
algorithms. Users would put up with more commonplace ones.
</p>

<p>
The Hacker Ethic, of course, held that every program should be as good
as you could make it (or better), infinitely flexible, admired for its
brilliance of concept and execution, and designed to extend the user's
powers. Selling computer programs like toothpaste was heresy. But it
was happening. Consider the prescription for success offered by one of
a panel of high-tech venture capitalists, gathered at a 1982 software
show: "I can summarize what it takes in three words: marketing,
marketing, marketing." When computers are sold like toasters, programs
will be sold like toothpaste. The Hacker Ethic notwithstanding.
</p>
</blockquote>

<p>
<a href="http://www.stevenlevy.com/index.php/books/hackers">Hackers: Heroes of
Computer Revolution</a>, by Steven Levy.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#catalan-overflow</link><pubDate>2018-06-11</pubDate><title>catalan-overflow</title><description><![CDATA[
<p>
To compute Catalan numbers without unnecessary overflow, use the
recurrence formula \(C_n = {4 n - 2 \over n + 1} C_{n - 1}\).
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#boyer-moore</link><pubDate>2018-06-04</pubDate><title>boyer-moore</title><description><![CDATA[
<p>
The
<a href="https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm">Boyer-Moore
algorithm for finding the majority of a sequence of elements</a> falls in
the category of "very clever algorithms".
</p>

<div class="org-src-container">
<pre class="src src-c++"><span style="font-weight: bold; text-decoration: underline;">int</span> <span style="font-weight: bold;">majorityElement</span>(<span style="font-weight: bold; text-decoration: underline;">vector</span>&lt;<span style="font-weight: bold; text-decoration: underline;">int</span>&gt;&amp; <span style="font-weight: bold; font-style: italic;">xs</span>) {
    <span style="font-weight: bold; text-decoration: underline;">int</span> <span style="font-weight: bold; font-style: italic;">count</span> = 0;
    <span style="font-weight: bold; text-decoration: underline;">int</span> <span style="font-weight: bold; font-style: italic;">maj</span> = xs[0];
    <span style="font-weight: bold;">for</span> (<span style="font-weight: bold;">auto</span> <span style="font-weight: bold; font-style: italic;">x</span> : xs) {
        <span style="font-weight: bold;">if</span> (x == maj) count++;
        <span style="font-weight: bold;">else</span> <span style="font-weight: bold;">if</span> (count == 0) maj = x;
        <span style="font-weight: bold;">else</span> count--;
    }
    <span style="font-weight: bold;">return</span> maj;
}
</pre>
</div>
]]>
</description></item><item><link>https://ypei.me/microblog.html#how-to-learn-on-your-own</link><pubDate>2018-05-30</pubDate><title>how-to-learn-on-your-own</title><description><![CDATA[
<p>
Roger Grosse's post
<a href="https://metacademy.org/roadmaps/rgrosse/learn_on_your_own">How to
learn on your own (2015)</a> is an excellent modern guide on how to learn
and research technical stuff (especially machine learning and maths) on
one's own.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#2048-mdp</link><pubDate>2018-05-25</pubDate><title>2048-mdp</title><description><![CDATA[
<p>
<a href="http://jdlm.info/articles/2018/03/18/markov-decision-process-2048.html">This
post</a> models 2048 as an MDP and solves it using policy iteration and
backward induction.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#ats</link><pubDate>2018-05-22</pubDate><title>ats</title><description><![CDATA[
<blockquote>
<p>
ATS (Applied Type System) is a programming language designed to unify
programming with formal specification. ATS has support for combining
theorem proving with practical programming through the use of advanced
type systems. A past version of The Computer Language Benchmarks Game
has demonstrated that the performance of ATS is comparable to that of
the C and C++ programming languages. By using theorem proving and
strict type checking, the compiler can detect and prove that its
implemented functions are not susceptible to bugs such as division by
zero, memory leaks, buffer overflow, and other forms of memory
corruption by verifying pointer arithmetic and reference counting
before the program compiles. Additionally, by using the integrated
theorem-proving system of ATS (ATS/LF), the programmer may make use of
static constructs that are intertwined with the operative code to
prove that a function attains its specification.
</p>
</blockquote>

<p>
<a href="https://en.wikipedia.org/wiki/ATS_(programming_language)">Wikipedia
entry on ATS</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#bostoncalling</link><pubDate>2018-05-20</pubDate><title>bostoncalling</title><description><![CDATA[
<p>
(5-second fame) I sent a picture of my kitchen sink to BBC and got
mentioned in the <a href="https://www.bbc.co.uk/programmes/w3cswg8c">latest
Boston Calling episode</a> (listen at 25:54).
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#colah-blog</link><pubDate>2018-05-18</pubDate><title>colah-blog</title><description><![CDATA[
<p>
<a href="https://colah.github.io/">colah's blog</a> has a cool feature that
allows you to comment on any paragraph of a blog post. Here's an
<a href="https://colah.github.io/posts/2015-08-Understanding-LSTMs/">example</a>.
If it is doable on a static site hosted on Github pages, I suppose it
shouldn't be too hard to implement. This also seems to work more
seamlessly than <a href="https://fermatslibrary.com/">Fermat's Library</a>,
because the latter has to embed pdfs in webpages. Now fantasy time:
imagine that one day arXiv shows html versions of papers (through author
uploading or conversion from TeX) with this feature.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#random-forests</link><pubDate>2018-05-15</pubDate><title>random-forests</title><description><![CDATA[
<p>
<a href="https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/info">Stanford
Lagunita's statistical learning course</a> has some excellent lectures on
random forests. It starts with explanations of decision trees, followed
by bagged trees and random forests, and ends with boosting. From these
lectures it seems that:
</p>

<ol class="org-ol">
<li>The term "predictors" in statistical learning = "features" in machine
learning.</li>
<li>The main idea of random forests of dropping predictors for individual
trees and aggregate by majority or average is the same as the idea of
dropout in neural networks, where a proportion of neurons in the
hidden layers are dropped temporarily during different minibatches of
training, effectively averaging over an emsemble of subnetworks. Both
tricks are used as regularisations, i.e. to reduce the variance. The
only difference is: in random forests, all but a square root number
of the total number of features are dropped, whereas the dropout
ratio in neural networks is usually a half.</li>
</ol>

<p>
By the way, here's a comparison between statistical learning and machine
learning from the slides of the Statistcal Learning course:
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#open-review-net</link><pubDate>2018-05-14</pubDate><title>open-review-net</title><description><![CDATA[
<p>
Open peer review means peer review process where communications
e.g. comments and responses are public.
</p>

<p>
Like <a href="https://scipost.org/">SciPost</a> mentioned in
<a href="/posts/2018-04-10-update-open-research.html">my post</a>,
<a href="https://openreview.net">OpenReview.net</a> is an example of open peer
review in research. It looks like their focus is machine learning. Their
<a href="https://openreview.net/about">about page</a> states their mission, and
here's <a href="https://openreview.net/group?id=ICLR.cc/2018/Conference">an
example</a> where you can click on each entry to see what it is like. We
definitely need this in the maths research community.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#rnn-fsm</link><pubDate>2018-05-11</pubDate><title>rnn-fsm</title><description><![CDATA[
<p>
Related to <a href="#neural-turing-machine">a previous micropost</a>.
</p>

<p>
<a href="http://www.cs.toronto.edu/~rgrosse/csc321/lec9.pdf">These slides from
Toronto</a> are a nice introduction to RNN (recurrent neural network) from
a computational point of view. It states that RNN can simulate any FSM
(finite state machine, a.k.a. finite automata abbr. FA) with a toy
example computing the parity of a binary string.
</p>

<p>
<a href="http://www.deeplearningbook.org/contents/rnn.html">Goodfellow et.
al.'s book</a> (see page 372 and 374) goes one step further, stating that
RNN with a hidden-to-hidden layer can simulate Turing machines, and not
only that, but also the <i>universal</i> Turing machine abbr. UTM (the book
referenced
<a href="https://www.sciencedirect.com/science/article/pii/S0022000085710136">Siegelmann-Sontag</a>),
a property not shared by the weaker network where the hidden-to-hidden
layer is replaced by an output-to-hidden layer (page 376).
</p>

<p>
By the way, the RNN with a hidden-to-hidden layer has the same
architecture as the so-called linear dynamical system mentioned in
<a href="https://www.coursera.org/learn/neural-networks/lecture/Fpa7y/modeling-sequences-a-brief-overview">Hinton's
video</a>.
</p>

<p>
From what I have learned, the universality of RNN and feedforward
networks are therefore due to different arguments, the former coming
from Turing machines and the latter from an analytical view of
approximation by step functions.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#math-writing-decoupling</link><pubDate>2018-05-10</pubDate><title>math-writing-decoupling</title><description><![CDATA[
<p>
One way to write readable mathematics is to decouple concepts. One idea
is the following template. First write a toy example with all the
important components present in this example, then analyse each
component individually and elaborate how (perhaps more complex)
variations of the component can extend the toy example and induce more
complex or powerful versions of the toy example. Through such
incremental development, one should be able to arrive at any result in
cutting edge research after a pleasant journey.
</p>

<p>
It's a bit like the UNIX philosophy, where you have a basic system of
modules like IO, memory management, graphics etc, and modify / improve
each module individually (H/t <a href="http://nand2tetris.org/">NAND2Tetris</a>).
</p>

<p>
The book <a href="http://neuralnetworksanddeeplearning.com/">Neutral networks
and deep learning</a> by Michael Nielsen is an example of such approach.
It begins the journey with a very simple neutral net with one hidden
layer, no regularisation, and sigmoid activations. It then analyses each
component including cost functions, the back propagation algorithm, the
activation functions, regularisation and the overall architecture (from
fully connected to CNN) individually and improve the toy example
incrementally. Over the course the accuracy of the example of mnist
grows incrementally from 95.42% to 99.67%.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#neural-turing-machine</link><pubDate>2018-05-09</pubDate><title>neural-turing-machine</title><description><![CDATA[
<blockquote>
<p>
One way RNNs are currently being used is to connect neural networks
more closely to traditional ways of thinking about algorithms, ways of
thinking based on concepts such as Turing machines and (conventional)
programming languages. <a href="https://arxiv.org/abs/1410.4615">A 2014
paper</a> developed an RNN which could take as input a
character-by-character description of a (very, very simple!) Python
program, and use that description to predict the output. Informally,
the network is learning to "understand" certain Python programs.
<a href="https://arxiv.org/abs/1410.5401">A second paper, also from 2014</a>,
used RNNs as a starting point to develop what they called a neural
Turing machine (NTM). This is a universal computer whose entire
structure can be trained using gradient descent. They trained their
NTM to infer algorithms for several simple problems, such as sorting
and copying.
</p>

<p>
As it stands, these are extremely simple toy models. Learning to
execute the Python program <code>print(398345+42598)</code> doesn't make a
network into a full-fledged Python interpreter! It's not clear how
much further it will be possible to push the ideas. Still, the results
are intriguing. Historically, neural networks have done well at
pattern recognition problems where conventional algorithmic approaches
have trouble. Vice versa, conventional algorithmic approaches are good
at solving problems that neural nets aren't so good at. No-one today
implements a web server or a database program using a neural network!
It'd be great to develop unified models that integrate the strengths
of both neural networks and more traditional approaches to algorithms.
RNNs and ideas inspired by RNNs may help us do that.
</p>
</blockquote>

<p>
Michael Nielsen,
<a href="http://neuralnetworksanddeeplearning.com/chap6.html#other_approaches_to_deep_neural_nets">Neural
networks and deep learning</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#neural-nets-activation</link><pubDate>2018-05-09</pubDate><title>neural-nets-activation</title><description><![CDATA[
<blockquote>
<p>
What makes the rectified linear activation function better than the
sigmoid or tanh functions? At present, we have a poor understanding of
the answer to this question. Indeed, rectified linear units have only
begun to be widely used in the past few years. The reason for that
recent adoption is empirical: a few people tried rectified linear
units, often on the basis of hunches or heuristic arguments. They got
good results classifying benchmark data sets, and the practice has
spread. In an ideal world we'd have a theory telling us which
activation function to pick for which application. But at present
we're a long way from such a world. I should not be at all surprised
if further major improvements can be obtained by an even better choice
of activation function. And I also expect that in coming decades a
powerful theory of activation functions will be developed. Today, we
still have to rely on poorly understood rules of thumb and experience.
</p>
</blockquote>

<p>
Michael Nielsen,
<a href="http://neuralnetworksanddeeplearning.com/chap6.html#convolutional_neural_networks_in_practice">Neutral
networks and deep learning</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#nlp-arxiv</link><pubDate>2018-05-08</pubDate><title>nlp-arxiv</title><description><![CDATA[
<p>
Primer Science is a tool by a startup called Primer that uses NLP to
summarize contents (but not single papers, yet) on arxiv. A developer of
this tool predicts in
<a href="https://twimlai.com/twiml-talk-136-taming-arxiv-w-natural-language-processing-with-john-bohannon/#">an
interview</a> that progress on AI's ability to extract meanings from AI
research papers will be the biggest accelerant on AI research.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#sql-injection-video</link><pubDate>2018-05-08</pubDate><title>sql-injection-video</title><description><![CDATA[
<p>
Computerphile has some brilliant educational videos on computer science,
like <a href="https://www.youtube.com/watch?v=ciNHn38EyRc">a demo of SQL
injection</a>, <a href="https://www.youtube.com/watch?v=eis11j_iGMs">a toy
example of the lambda calculus</a>, and
<a href="https://www.youtube.com/watch?v=9T8A89jgeTI">explaining the Y
combinator</a>.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#neural-nets-regularization</link><pubDate>2018-05-08</pubDate><title>neural-nets-regularization</title><description><![CDATA[
<blockquote>
<p>
no-one has yet developed an entirely convincing theoretical
explanation for why regularization helps networks generalize. Indeed,
researchers continue to write papers where they try different
approaches to regularization, compare them to see which works better,
and attempt to understand why different approaches work better or
worse. And so you can view regularization as something of a kludge.
While it often helps, we don't have an entirely satisfactory
systematic understanding of what's going on, merely incomplete
heuristics and rules of thumb.
</p>

<p>
There's a deeper set of issues here, issues which go to the heart of
science. It's the question of how we generalize. Regularization may
give us a computational magic wand that helps our networks generalize
better, but it doesn't give us a principled understanding of how
generalization works, nor of what the best approach is.
</p>
</blockquote>

<p>
Michael Nielsen,
<a href="http://neuralnetworksanddeeplearning.com/chap3.html#why_does_regularization_help_reduce_overfitting">Neural
networks and deep learning</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#learning-knowledge-graph-reddit-journal-club</link><pubDate>2018-05-07</pubDate><title>learning-knowledge-graph-reddit-journal-club</title><description><![CDATA[
<p>
It is a natural idea to look for ways to learn things like going through
a skill tree in a computer RPG.
</p>

<p>
For example I made a
<a href="https://ypei.me/posts/2015-04-02-juggling-skill-tree.html">DAG for
juggling</a>.
</p>

<p>
Websites like <a href="https://knowen.org">Knowen</a> and
<a href="https://metacademy.org">Metacademy</a> explore this idea with added
flavour of open collaboration.
</p>

<p>
The design of Metacademy looks quite promising. It also has a nice
tagline: "your package manager for knowledge".
</p>

<p>
There are so so many tools to assist learning / research / knowledge
sharing today, and we should keep experimenting, in the hope that
eventually one of them will scale.
</p>

<p>
On another note, I often complain about the lack of a place to discuss
math research online, but today I found on Reddit some journal clubs on
machine learning:
<a href="https://www.reddit.com/r/MachineLearning/comments/8aluhs/d_machine_learning_wayr_what_are_you_reading_week/">1</a>,
<a href="https://www.reddit.com/r/MachineLearning/comments/8elmd8/d_anyone_having_trouble_reading_a_particular/">2</a>.
If only we had this for maths. On the other hand r/math does have some
interesting recurring threads as well:
<a href="https://www.reddit.com/r/math/wiki/everythingaboutx">Everything about
X</a> and
<a href="https://www.reddit.com/r/math/search?q=what+are+you+working+on?+author:automoderator+&amp;sort=new&amp;restrict_sr=on&amp;t=all">What
Are You Working On?</a>. Hopefully these threads can last for years to
come.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#simple-solution-lack-of-math-rendering</link><pubDate>2018-05-02</pubDate><title>simple-solution-lack-of-math-rendering</title><description><![CDATA[
<p>
The lack of maths rendering in major online communication platforms like
instant messaging, email or Github has been a minor obsession of mine
for quite a while, as I saw it as a big factor preventing people from
talking more maths online. But today I realised this is totally a
non-issue. Just do what people on IRC have been doing since the
inception of the universe: use a (latex) pastebin.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#neural-networks-programming-paradigm</link><pubDate>2018-05-01</pubDate><title>neural-networks-programming-paradigm</title><description><![CDATA[
<blockquote>
<p>
Neural networks are one of the most beautiful programming paradigms
ever invented. In the conventional approach to programming, we tell
the computer what to do, breaking big problems up into many small,
precisely defined tasks that the computer can easily perform. By
contrast, in a neural network we don't tell the computer how to solve
our problem. Instead, it learns from observational data, figuring out
its own solution to the problem at hand.
</p>
</blockquote>

<p>
Michael Nielsen -
<a href="http://neuralnetworksanddeeplearning.com/about.html">What this book
(Neural Networks and Deep Learning) is about</a>
</p>

<p>
Unrelated to the quote, note that Nielsen's book is licensed under
<a href="https://creativecommons.org/licenses/by-nc/3.0/deed.en_GB">CC BY-NC</a>,
so one can build on it and redistribute non-commercially.
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#google-search-not-ai</link><pubDate>2018-04-30</pubDate><title>google-search-not-ai</title><description><![CDATA[
<blockquote>
<p>
But, users have learned to accommodate to Google not the other way
around. We know what kinds of things we can type into Google and what
we can't and we keep our searches to things that Google is likely to
help with. We know we are looking for texts and not answers to start a
conversation with an entity that knows what we really need to talk
about. People learn from conversation and Google can't have one. It
can pretend to have one using Siri but really those conversations tend
to get tiresome when you are past asking about where to eat.
</p>
</blockquote>

<p>
Roger Schank -
<a href="http://www.rogerschank.com/fraudulent-claims-made-by-IBM-about-Watson-and-AI">Fraudulent
claims made by IBM about Watson and AI</a>
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#hacker-ethics</link><pubDate>2018-04-06</pubDate><title>hacker-ethics</title><description><![CDATA[
<blockquote>
<p>
  
</p>

<ul class="org-ul">
<li>Access to computers—and anything that might teach you something
about the way the world works—should be unlimited and total.
Always yield to the Hands-On Imperative!</li>
<li>All information should be free.</li>
<li>Mistrust Authority—Promote Decentralization.</li>
<li>Hackers should be judged by their hacking, not bogus criteria such
as degrees, age, race, or position.</li>
<li>You can create art and beauty on a computer.</li>
<li>Computers can change your life for the better.</li>
</ul>
</blockquote>

<p>
<a href="https://en.wikipedia.org/wiki/Hacker_ethic">The Hacker Ethic</a>,
<a href="https://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers:
Heroes of Computer Revolution</a>, by Steven Levy
</p>
]]>
</description></item><item><link>https://ypei.me/microblog.html#static-site-generator</link><pubDate>2018-03-23</pubDate><title>static-site-generator</title><description><![CDATA[
<blockquote>
<p>
"Static site generators seem like music databases, in that everyone
eventually writes their own crappy one that just barely scratches the
itch they had (and I'm no exception)."
</p>
</blockquote>

<p>
_<sub>david</sub>__@hackernews
</p>

<p>
So did I.</p>
]]>
</description></item></channel></rss>