<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Proycon&#x27;s website</title>
      <link>https://proycon.anaproy.nl</link>
      <description>Language enthusiast, polyglot, linux user, open-source advocate, programmer, computational linguist, amateur pianist, gay</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://proycon.anaproy.nl/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 02 Aug 2025 18:23:55 +0200</lastBuildDate>
      <item>
          <title>Fiducia Gocciolabile - Own composition - Piano</title>
          <pubDate>Sat, 02 Aug 2025 18:23:55 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/fiducia-gocciolabile/</link>
          <guid>https://proycon.anaproy.nl/posts/fiducia-gocciolabile/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/fiducia-gocciolabile/">&lt;h1 id=&quot;fiducia-consolabile&quot;&gt;Fiducia Consolabile&lt;&#x2F;h1&gt;
&lt;p&gt;This is my own composition. Licensed under the Creative Commons Attribution ShareAlike license (CC-BY-SA).&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;rwzn7RDqdkP6uCxwbH2kjB?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;A pure audio-only version is available &lt;a href=&quot;&#x2F;media&#x2F;fiducia_gocciolabile.opus&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Text processing on the Command Line - sharing my tools</title>
          <pubDate>Sun, 07 Jul 2024 13:48:28 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/my-cli-tools-for-text-processing/</link>
          <guid>https://proycon.anaproy.nl/posts/my-cli-tools-for-text-processing/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/my-cli-tools-for-text-processing/">&lt;h1 id=&quot;text-processing-on-the-command-line-sharing-my-tools&quot;&gt;Text processing on the command line - sharing my tools&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m quite fond of the command-line and spend a larger chunk of my life in a
terminal emulator than I dare admit. I try to embrace the unix philosophy of
using tools that &lt;em&gt;&quot;do one thing only, and do it well&quot;&lt;&#x2F;em&gt; and &lt;em&gt;&quot;interconnect
largely via plain text formats&quot;&lt;&#x2F;em&gt;. Following this philosophy, the output of one
program can typically be the input to the next, for instance through the pipe
operator (&lt;code&gt;|&lt;&#x2F;code&gt;) in a command-line shell.&lt;&#x2F;p&gt;
&lt;p&gt;Chaining multiple heterogeneous tools in this way gives a great amount of power
and flexibility, something that&#x27;s much harder to achieve through complex
monolithic GUIs. It allows to quickly automate things in shell scripts and do
batch processing, even if the underlying tools are written in different
languages.&lt;&#x2F;p&gt;
&lt;p&gt;For text processing and data science, the &lt;em&gt;unix shell and environment&lt;&#x2F;em&gt; kind of
form the &lt;em&gt;lingua franca of data science&lt;&#x2F;em&gt;; a common foundation upon which we can
build our data processing pipelines. This environment is usually a unix-like
system such as Linux or macOS that offers a (POSIX-compliant) shell like bash
and a set of core utilities such as provided by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;coreutils&#x2F;coreutils.html&quot;&gt;GNU
coreutils&lt;&#x2F;a&gt; and friends,
by FreeBSD&#x2F;OpenBSD&#x2F;NetBSD&#x2F;macOS itself or by
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.busybox.net&quot;&gt;busybox&lt;&#x2F;a&gt;. All of these are different implementations
of the same core utilities, but following some standard specification (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;POSIX&quot;&gt;POSIX&lt;&#x2F;a&gt;).
Even Windows users have access to such a command-line environment via the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;wsl&#x2F;&quot;&gt;WSL&lt;&#x2F;a&gt;, or alternatively via
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cygwin.com&#x2F;&quot;&gt;Cygwin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll first mention some of these standard unix tools, then some additional tools, and
finally I&#x27;ll move on to what is the main subject of this writing: &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#my-tools&quot;&gt;my tools&lt;&#x2F;a&gt;; the text
processing tools for the command-line which I myself developed (or co-developed) and want to share with you.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;basic-standard-tools&quot;&gt;Basic standard tools&lt;&#x2F;h2&gt;
&lt;p&gt;Out of the box, a unix environment usually gives you text processing tools like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;awk&lt;&#x2F;code&gt; - pattern scanning and processing language&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cat&lt;&#x2F;code&gt; - print or concatenate text (or &lt;code&gt;tac&lt;&#x2F;code&gt; to do it in reverse)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cut&lt;&#x2F;code&gt; -  extract&#x2F;remove columns from lines&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;column&lt;&#x2F;code&gt; - format input into multiple columns&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;colrm&lt;&#x2F;code&gt; - remove columns from a file&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;comm&lt;&#x2F;code&gt; - compare two sorted files line by line&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;dos2unix&lt;&#x2F;code&gt; - convert DOS&#x2F;Windows line endings to UNIX (&lt;code&gt;\r\n&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;\n&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;diff&lt;&#x2F;code&gt; - compare files line by line and show where they &lt;em&gt;diff&lt;&#x2F;em&gt;er&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;echo&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;printf&lt;&#x2F;code&gt; - print text&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;expand&lt;&#x2F;code&gt; - convert tabs to spaces&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;fold&lt;&#x2F;code&gt; - wrap each input line to fit in a specified width&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;head&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;tail&lt;&#x2F;code&gt; - extract the first&#x2F;last lines of a text&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;&#x2F;code&gt; - print lines that match patterns (regular expressions)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;nl&lt;&#x2F;code&gt; - assign numbers to lines in a file&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;paste&lt;&#x2F;code&gt; - merge lines from multiple files into one&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rev&lt;&#x2F;code&gt; - &lt;em&gt;rev&lt;&#x2F;em&gt;erse lines character-wise&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;tr&lt;&#x2F;code&gt; - &lt;em&gt;tr&lt;&#x2F;em&gt;anslate or delete characters (here translation  is just a mapping between character, not between natural languages)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;sed&lt;&#x2F;code&gt; - &lt;em&gt;s&lt;&#x2F;em&gt;tream &lt;em&gt;ed&lt;&#x2F;em&gt;itor for filtering and transforming text&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;shuf&lt;&#x2F;code&gt; - shuffle lines in a random order&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;split&lt;&#x2F;code&gt; - split a file into several equally-sized pieces&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;sort&lt;&#x2F;code&gt; - sort lines&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;uniq&lt;&#x2F;code&gt; - remove duplicate lines&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;wc&lt;&#x2F;code&gt; - word count, line count, byte count&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;They shine when used together. Take the example of having a plain text file,
and wanting to extract a top 1000 frequency list of the words in it, all
lower-cased. All this can be captured in the following one-liner:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ sed -E &amp;#39;s&#x2F;\W+&#x2F;\n&#x2F;g&amp;#39; text.txt | tr &amp;#39;[:upper:]&amp;#39; &amp;#39;[:lower:]&amp;#39; | tr -s &amp;#39;\n&amp;#39; | sort | uniq -c | sort -rn | head -n 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An analysis of the many possibilities of these common unix tools for text
processing and data analysis is well out of scope for this writing. I do not
intend to write a tutorial here. If you are interested in such a thing, I can warmly
recommend the O&#x27;Reilly book &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jeroenjanssens.com&#x2F;dsatcl&#x2F;&quot;&gt;Data Science at the Command
Line&lt;&#x2F;a&gt; by Jeroen Janssens, freely accessible
on-line. It also covers some of the tools I mention in the next section, and more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;common-additional-tools&quot;&gt;Common additional tools&lt;&#x2F;h2&gt;
&lt;p&gt;In addition to these standard unix tools that are often part of the core system,
there are more specialised tools I can recommend for text &amp;amp; data processing. The following few work with
structured data like JSON, CSV or XML and overlap partially in functionality:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jqlang.github.io&#x2F;jq&#x2F;&quot;&gt;&lt;code&gt;jq&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - like &lt;code&gt;sed&lt;&#x2F;code&gt; but specifically for extracting and manipulating JSON data, written in C.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;johnkerl&#x2F;miller&quot;&gt;Miller&lt;&#x2F;a&gt; - &lt;code&gt;mlr&lt;&#x2F;code&gt; - like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. Written in Go.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BurntSushi&#x2F;xsv&quot;&gt;xsv&lt;&#x2F;a&gt; - CSV command line toolkit, written in Rust.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TomWright&#x2F;dasel&quot;&gt;&lt;code&gt;dasel&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;  - to query and modify JSON&#x2F;CSV&#x2F;YAML&#x2F;XML , written in Go.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wireservice&#x2F;csvkit&quot;&gt;csvkit&lt;&#x2F;a&gt; - suite of utilities for working with CSV (&lt;code&gt;csvlook&lt;&#x2F;code&gt;, &lt;code&gt;csvcut&lt;&#x2F;code&gt;, &lt;code&gt;csvgrep&lt;&#x2F;code&gt;,&lt;code&gt;csvjson&lt;&#x2F;code&gt;, &lt;code&gt;csvsql&lt;&#x2F;code&gt;, &lt;code&gt;csvstat&lt;&#x2F;code&gt;), written in Python.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xmllint&lt;&#x2F;code&gt; in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;GNOME&#x2F;libxml2&quot;&gt;libxml2&lt;&#x2F;a&gt;  - to validate and query XML files (xpath), written in C.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For visualisation purposes, I first have to give an honourable mention to
&lt;code&gt;less&lt;&#x2F;code&gt; and &lt;code&gt;more&lt;&#x2F;code&gt;, both of which do more or less the same (pun intended). They
serve as the so-called &lt;em&gt;pager&lt;&#x2F;em&gt;. For a richer experience, I can recommend the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;bat&quot;&gt;&lt;code&gt;bat&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - a &lt;code&gt;cat&lt;&#x2F;code&gt; clone and&#x2F;or &lt;code&gt;less&lt;&#x2F;code&gt; alternative with fancy features like syntax highlighting; great for viewer all kinds of files, written in Rust.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;charmbracelet&#x2F;glow&quot;&gt;&lt;code&gt;glow&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - a Markdown viewer, written in Go.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;csvlook&lt;&#x2F;code&gt; from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wireservice&#x2F;csvkit&quot;&gt;csvkit&lt;&#x2F;a&gt; - viewer for CSV files, written in Python.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;When it comes to conversion of texts, I recommend the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;&lt;code&gt;pandoc&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - A universal document converter. Converts between many document formats such as LaTeX&#x2F;Markdown&#x2F;ReStructuredText&#x2F;plain text&#x2F;Asciidoc&#x2F;Word&#x2F;Epub&#x2F;Roff&#x2F;etc... Written in Haskell.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;iconv&lt;&#x2F;code&gt; - convert plain text from one character encoding to another. Written in C.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;uconv&lt;&#x2F;code&gt; from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;icu.unicode.org&#x2F;&quot;&gt;icu&lt;&#x2F;a&gt; - convert plain text from one character encoding to another. Written in C.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To combine these and all kinds of other data processing tools into larger
automated pipelines, the most basic solution is to write a shell script.
Alternatively, you can write a &lt;code&gt;Makefile&lt;&#x2F;code&gt; that builds targets using
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;make&#x2F;&quot;&gt;&lt;code&gt;make&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. The latter also offers a certain
degree of parallelisation using the &lt;code&gt;-j&lt;&#x2F;code&gt; parameter. Another useful tool to
consider for parallelisation is
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;parallel&#x2F;&quot;&gt;&lt;code&gt;parallel&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and&#x2F;or &lt;code&gt;xargs&lt;&#x2F;code&gt; with the
&lt;code&gt;-P&lt;&#x2F;code&gt; parameter. The latter, &lt;code&gt;xargs&lt;&#x2F;code&gt;, is also a basic standard tool useful when
building sequential pipelines.&lt;&#x2F;p&gt;
&lt;p&gt;Remembering how to invoke all these command line tools may be rather daunting,
and nobody expects you to remember everything anyway. Of course, a manual page
should be available by simply running &lt;code&gt;man&lt;&#x2F;code&gt; followed by the command you need
help on. You should also be able to get usage information from the tool itself
by passing &lt;code&gt;-h&lt;&#x2F;code&gt; and&#x2F;or &lt;code&gt;--help&lt;&#x2F;code&gt;. If you&#x27;re lazy like me and prefer to quickly
get some very short concise usage examples for a number of common use cases for
a tool, then I can recommend
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tldr-pages&#x2F;tldr&quot;&gt;&lt;code&gt;tldr&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; (internet slang for &lt;em&gt;&quot;too
long; didn&#x27;t read&quot;&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;intermezzo-what-about-python-julia-r-etc&quot;&gt;Intermezzo: What about Python&#x2F;Julia&#x2F;R etc...?&lt;&#x2F;h2&gt;
&lt;p&gt;Bear with me before I finally get to show you my own tools. At this point some
readers may wonder: All this command-line stuff is fine, but why not just use
Python, or R, or Julia or whatever other open-source language implementation
you prefer? (this excludes proprietary ecosystems like Matlab and Wolfram which
I explicitly condemn). Languages like Python&#x2F;Julia&#x2F;R come with a solid standard
library and on top of that a wide range of third party libraries to accommodate
all kinds of text processing needs or whatever else a data scientist might
desire. Furthermore, they too come with an interactive shell or can be used in
the web-browser in the form of Notebooks
(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jupyter.org&#x2F;&quot;&gt;Jupyter&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;plutojl.org&#x2F;&quot;&gt;Pluto&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rmarkdown.rstudio.com&#x2F;lesson-10.html&quot;&gt;RStudio&lt;&#x2F;a&gt;),
Some may find the latter more appealing than a terminal, especially for data
stories and teaching.&lt;&#x2F;p&gt;
&lt;p&gt;Indeed, I say in response, these are all perfectly fine solutions and great
projects. Such language ecosystems tend to give you tighter coupling between
components and cleaner abstraction than the unix shell can. The shell often has
more archaic syntax and interoperability is not always optimal because each
tool can be very different. The shell, however, does provide a kind of
lowest-common denominator that no other can. It offers a great deal of
flexibility with regards to the tools you use. It&#x27;s been around for decades and
likely will last a while longer. Whether your command-line interface is written
in C, C++, Rust, Go, Zig, Hare, R, Python, Perl, Haskell, Lisp, Scheme, or God
forbid, even Java, it can all be readily mixed. Just by virtue of having a
command line interface and reading either from file or standard input, and
outputting to file or standard output. Committing yourself to a higher-level
language, on the other hand, adds an extra layer, often in the form of a
high-level language interpreter which has its own overhead and limits certain
choices. This has both benefits and drawbacks. The trade-off is often between
diversity and uniformity.&lt;&#x2F;p&gt;
&lt;p&gt;This is not a question of one method being inherently superior to the other, it
all depends on your use case, the complexity thereof, the technologies you and
those working with you are familiar and comfortable with, and your intended
audience; the users. You then choose the form of interface that fits these
conditions best; whether it is invoking tools via command-line interfaces,
calling functions in software libraries via an API, or WebAPI, or even clicking
buttons in GUIs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;my-tools&quot;&gt;My tools&lt;&#x2F;h2&gt;
&lt;p&gt;In this writing, I would like to introduce some of the tools I wrote over the
years for text processing, often in line of my work. As mentioned in the
introduction, these tools are largely specialised in doing one thing, and doing
it well, as per the unix philosophy. As the years go by, I&#x27;m more and more
drawn to &lt;em&gt;simpler&lt;&#x2F;em&gt; solutions, where &lt;em&gt;simple&lt;&#x2F;em&gt; entails:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;keeping the scope of a tool limited, constraining the amount of features&lt;&#x2F;li&gt;
&lt;li&gt;keeping a codebase maintainable by not letting it grow too large&lt;&#x2F;li&gt;
&lt;li&gt;limiting the number of dependencies (and in doing so limiting security vulnerabilities as well)&lt;&#x2F;li&gt;
&lt;li&gt;getting the job done with optimal performance, reducing the amount of unnecessary overhead.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;&quot;&gt;Rust&lt;&#x2F;a&gt; is my language of choice nowadays, as it
compiles to highly performant native code on a variety of platforms and
processor architectures. It offers important safety guarantees that prevents a
whole range of common memory bugs that are prevalent in other system&#x27;s
programming languages as C and C++. You will therefore find a lot of my tools
are written in Rust, often with a Python binding on top for accessibility for
researchers and developers from Python. All software I write is free open
source software available, almost always under the GNU General Public License
v3.&lt;&#x2F;p&gt;
&lt;p&gt;I will be listing the tools in approximate order from simpler to more complex tools:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#charfreq&quot;&gt;&lt;code&gt;charfreq&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Tiny tool that just counts unicode character frequencies from text it receives on standard input.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#hyphertool&quot;&gt;&lt;code&gt;hyphertool&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Hyphenation  tool, performs wordwrap at morphologically sensible places for a number of languages.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#ssam&quot;&gt;&lt;code&gt;ssam&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - &lt;em&gt;Split sampler&lt;&#x2F;em&gt; to draw train&#x2F;development&#x2F;test samples from plain text data using random sampling.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#lingua-cli&quot;&gt;&lt;code&gt;lingua-cli&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Language Detection&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#sesdiff&quot;&gt;&lt;code&gt;sesdiff&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; -  Computes a Shortest Edit Script that shows the difference between two strings on a character-level&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#lexmatch&quot;&gt;&lt;code&gt;lexmatch&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Matching texts against one or more lexicons&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The above tools were all fairly small, now we&#x27;re moving on to bigger software
projects, mostly developed in the scope of my work at the KNAW Humanities
Cluster and Radboud University Nijmegen, often under the umbrella of the
CLARIN-NL and CLARIAH projects.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#stam&quot;&gt;&lt;code&gt;stam&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Toolkit for stand-off annotation on text&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#ucto&quot;&gt;&lt;code&gt;ucto&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Unicode tokeniser&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#frog&quot;&gt;&lt;code&gt;frog&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - NLP suite for Dutch&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#analiticcl&quot;&gt;&lt;code&gt;analiticcl&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Fuzzy string-matching system used e.g. for spelling correction, text normalisation
or post-OCR correction.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#colibri-core&quot;&gt;&lt;code&gt;colibri-core&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Efficient pattern extraction (n-grams&#x2F;skipgrams&#x2F;flexgrams) and modelling from text.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#folia-tools&quot;&gt;&lt;code&gt;folia-tools&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Toolkit for working with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.github.io&#x2F;folia&quot;&gt;FoLiA XML format&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Last, a small tool that is a bit of an odd-one-out in this list, but which I wanted to include anyway:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;#vocage&quot;&gt;&lt;code&gt;vocage&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - Vocabulary training with flashcards (spaced-repetition system aka Leitner)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I&#x27;ll briefly discuss each of the mentioned programs. Click the above links to quickly jump to the relevant section.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;charfreq&quot;&gt;charfreq&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;charfreq&lt;&#x2F;code&gt; is a very simple tiny CLI tool that just computes (unicode) character frequencies from text received via standard input. Written in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;You can find &lt;code&gt;charfreq&lt;&#x2F;code&gt; on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;charfreq&quot;&gt;Sourcehut&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;charfreq&#x2F;&quot;&gt;Github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hyphertool&quot;&gt;hyphertool&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;hyphertool&lt;&#x2F;code&gt; does hyphenation and builds upon the third party
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;typst&#x2F;hypher&quot;&gt;hypher&lt;&#x2F;a&gt; library, which in turn uses rules from
the TeX hyphenation library. It is written in Rust.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ hyphertool --language nl --width 15 test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Dit is een test-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bestand. Kan je&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dit bestand mooi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;voor mij verwer-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ken?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Ik hoop op&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;een positief re-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sultaat.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It can also also output all syllables using hyphenation rules:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ hyphertool --language nl test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Dit is een test-be-stand. Kan je dit be-stand mooi voor mij ver-wer-ken?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Ik hoop op een po-si-tief re-sul-taat.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Or with character offsets:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ hyphertool --language nl --standoff test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Text	BeginOffset	EndOffset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Ik	68	70&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hoop	71	75&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;op	76	78&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;een	79	82&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;po	83	85&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;si	85	87&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tief	87	91&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;re	92	94&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sul	94	97&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;taat	97	101&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For more information, see &lt;code&gt;hyphertool&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;hyphertool&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;hyphertool&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;hyphertool&#x2F;&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;hyphertool&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ssam&quot;&gt;ssam&lt;&#x2F;h3&gt;
&lt;p&gt;I wrote &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;ssam&quot;&gt;ssam&lt;&#x2F;a&gt;, short for Split sampler, as a
simple program that splits one or more text-based input files into multiple sets using
random sampling. This is useful for splitting data into a training, test and
development sets, or whatever sets you desire. This software was written in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;It works nicely with multiple files when entries one the same lines correspond
(such as sentence-aligned parallel corpora). Suppose you a &lt;code&gt;sentences.txt&lt;&#x2F;code&gt; and a &lt;code&gt;sätze.txt&lt;&#x2F;code&gt; with the same
sentences in German (i.e. the same line numbers correspond
and contain translations). You can then make a dependent split as follows:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ssam --shuffle --sizes &amp;quot;0.1,0.1,*&amp;quot; --names &amp;quot;test,dev,train&amp;quot; sentences.txt sätze.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For more information, see &lt;code&gt;ssam&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;ssam&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;ssam&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;ssam&#x2F;&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;ssam&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sesdiff&quot;&gt;sesdiff&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;sesdiff&lt;&#x2F;code&gt; is a small and fast command-line tool and Rust library that reads a
two-column tab separated input from standard input and computes the shortest
edit script (Myers&#x27; diff algorithm) to go from the string in column A to the
string in column B. In other words, it computes &lt;em&gt;how strings difer&lt;&#x2F;em&gt;. It also
computes the edit distance (aka levenshtein distance). It builds upon the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;dissimilar&quot;&gt;dissimilar&lt;&#x2F;a&gt; library by David Tolnay for
the bulk of the computations.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ sesdiff &amp;lt; input.tsv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hablaron        hablar     =[hablar]-[on]                  2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;contaron        contar     =[contar]-[on]                  2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pidieron        pedir      =[p]-[i]+[e]=[di]-[eron]+[r]    6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;говорим         говорить   =[говори]-[м]+[ть]              3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The output is in a four-column tab separated format (reformatted for legibility
here, the first two columns correspond to the input).&lt;&#x2F;p&gt;
&lt;p&gt;It can also do the reverse, given a word and a edit recipe, compute the other string.&lt;&#x2F;p&gt;
&lt;p&gt;It was initially designed to compute training data for a lemmatiser.&lt;&#x2F;p&gt;
&lt;p&gt;For more information, see &lt;code&gt;sesdiff&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;sesdiff&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;sesdiff&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;sesdiff&#x2F;&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;sesdiff&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lingua-cli&quot;&gt;lingua-cli&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;lingua-cli&lt;&#x2F;code&gt; is a command-line tool for &lt;strong&gt;language detection&lt;&#x2F;strong&gt;. Given a text,
it will predict what language a text is in. It supports many languages. It can
also predict per line of the input, as the underlying algorithm is particularly
suited to deal with shorter text, or it can actively search the text for
languages and return offsets. This program is a mostly a wrapper around the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pemistahl&#x2F;lingua-rs&quot;&gt;lingua-rs&lt;&#x2F;a&gt; library by Peter M. Stahl. It is written in Rust. The
3rd party library is also available for
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pemistahl&#x2F;lingua-py&quot;&gt;python&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pemistahl&#x2F;lingua-go&quot;&gt;go&lt;&#x2F;a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pemistahl&#x2F;lingua-js&quot;&gt;Javascript via
WASM&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ echo -e &amp;quot;bonjour à tous\nhola a todos\nhallo allemaal&amp;quot; | lingua-cli --per-line --languages &amp;quot;fr,de,es,nl,en&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fr      0.9069164472389637      bonjour à tous&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;es      0.918273871035807       hola a todos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nl      0.988293648761749       hallo allemaal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Output is TSV and consists of an iso-639-1 language code, confidence score, and in line-by-line mode, a copy of the line.
In &lt;code&gt;--multi&lt;&#x2F;code&gt; mode, it will detect languages in running text and return UTF-8 byte offsets:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ lingua-cli --multi --languages fr,de,en &amp;lt; &#x2F;tmp&#x2F;test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0       23      fr      Parlez-vous français? &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;23      73      de      Ich spreche ein bisschen spreche Französisch ja. &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;73      110     en      A little bit is better than nothing.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For more information, see &lt;code&gt;lingua-cli&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;lingua-cli&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;lingua-cli&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;lingua-cli&#x2F;&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;lingua-cli&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lexmatch&quot;&gt;lexmatch&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;lexmatch&lt;&#x2F;code&gt; is a simple lexicon matching tool that, given a lexicon of words or
phrases, identifies all matches in a given target text, returning their exact
positions. It can be used compute a frequency list for a lexicon, on a target
corpus. The implementation uses either suffix arrays or hash tables. The
lexicon is in the form of one word or phrase per line. Multiple lexicons are supported. It is written in Rust.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ lexmatch --lexicon lexicon.lst corpus.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rather than take a lexicon, you can also directly supply lexical entries (words&#x2F;phrases) on the command line using &lt;code&gt;--query&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ lexmatch --query good --query bad &#x2F;nettmp&#x2F;republic.short.txt &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Reading text from &#x2F;tmp&#x2F;republic.short.txt...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Building suffix array (this may take a while)...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Searching...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;good    4       193     3307    3480    278&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bad     3       201     3315    3488&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;By default, you get a TSV file with a column for the text, the occurrence
count, and one with the begin position (UTF-8 byte position) for each match
(dynamic columns). In &lt;code&gt;--verbose&lt;&#x2F;code&gt; both you get cleaner TSV with separate UTF-8
byte offsets for each match:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ lexmatch --verbose --query good --query bad &#x2F;nettmp&#x2F;republic.short.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Text    BeginUtf8Offset EndUtf8Offset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Reading text from &#x2F;tmp&#x2F;republic.short.txt...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Building suffix array (this may take a while)...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Searching...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;good    193     197&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;good    3307    3311&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;good    3480    3484&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;good    278     282&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bad     201     204&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bad     3315    3318&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bad     3488    3491&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For more information, see &lt;code&gt;lexmatch&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;lexmatch&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;lexmatch&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;lexmatch&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;lexmatch&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stam&quot;&gt;stam&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-tools&quot;&gt;STAM Tools&lt;&#x2F;a&gt; is a collection of
command-line programs for working with stand-off annotations on plain text.
These all make use of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;annotation.github.io&#x2F;stam&quot;&gt;STAM&lt;&#x2F;a&gt; data model
and accompanying &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-rust&quot;&gt;library&lt;&#x2F;a&gt; for
representing annotations, which can also be exported as simple CSV or TSV. They
are written in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;Each can be accessed through the executable &lt;code&gt;stam&lt;&#x2F;code&gt; and a subcommand. I mention just a few for brevity:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;stam align&lt;&#x2F;code&gt;     - Align two similar texts, mapping their coordinate spaces. This looks for similar strings in each text using the Needleman-Wunsch or Smith-Waterman algorithm.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam fromxml&lt;&#x2F;code&gt;   - Turn text and annotations from XML-based formats (like xHTML, TEI) into plain text with separate stand-off annotations following the STAM model. This effectively &#x27;untangles&#x27; text and annotations.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam query&lt;&#x2F;code&gt; or &lt;code&gt;stam export&lt;&#x2F;code&gt;  -  Query an annotation store and export the output in tabular form to a simple TSV (Tab Separated Values) format. This is not lossless but provides a decent view on the data. It provides a lot of flexibility by allowing you to configure the output columns as you see fit.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam validate&lt;&#x2F;code&gt;  - Validate a STAM model, tests if all annotation offsets still point to the intended text selections.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam tag&lt;&#x2F;code&gt;       - Regular-expression based tagger on plain text, it also serves as a good tokeniser.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam transpose&lt;&#x2F;code&gt; - Given an alignment between text (as computed by &lt;code&gt;stam align&lt;&#x2F;code&gt;), converts annotations in one coordinate space to another.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;stam view&lt;&#x2F;code&gt;      - View annotations as queried by outputting to HTML (or ANSI coloured text).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A demo video is available that demonstrates all these and more:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;annotation.github.io&#x2F;stam&#x2F;assets&#x2F;stam.webm&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;stamvideothumbnail.jpg&quot; alt=&quot;STAM demo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;annotation.github.io&#x2F;stam&quot;&gt;STAM&lt;&#x2F;a&gt; for more information about the
data model and the general project, and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-tools&quot;&gt;stam-tools&lt;&#x2F;a&gt; for information
specifically about these command-line tools. A &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-python&quot;&gt;python
binding&lt;&#x2F;a&gt; is also available (&lt;code&gt;pip install stam&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ucto&quot;&gt;ucto&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;languagemachines.github.io&#x2F;ucto&#x2F;&quot;&gt;Ucto&lt;&#x2F;a&gt; is a regular-expression based
tokeniser. It comes with tokenisation rules for about a dozen languages. It is
written in C++, initially by me but then in much larger part by my colleague Ko
van der Sloot.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;blob&#x2F;master&#x2F;ucto.gif&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;uctovideothumbnail.jpg&quot; alt=&quot;Ucto demo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;languagemachines.github.io&#x2F;ucto&#x2F;&quot;&gt;the Ucto website&lt;&#x2F;a&gt; for more information. A Python binding
is also available (&lt;code&gt;pip install ucto&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;frog&quot;&gt;frog&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;LanguageMachines&#x2F;frog&quot;&gt;Frog&lt;&#x2F;a&gt; is a tool that integrates
various NLP modules for Dutch. Such as a tokeniser (ucto), part of speech
tagger, lemmatiser, dependency parser, named-entity recogniser, dependency
parser and more. It is written in C++ by Ko van der Sloot as lead developer,
and by myself, Antal van den Bosch and in its initial stages Bertjan Busser. It
has a long history containing various components that are also made possible by
Walter Daelemans, Jakub Zavrel, Sabine Buchholz, Sander Canisius, Gert Durieux
and Peter Berck.&lt;&#x2F;p&gt;
&lt;p&gt;Though parts of the Frog have been superseded by more recent advancements in
NLP, it is still a useful tool in many use-cases:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;blob&#x2F;master&#x2F;frog.gif&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;frogvideothumbnail.jpg&quot; alt=&quot;Frog demo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I also wrote a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;python-frog&quot;&gt;python binding&lt;&#x2F;a&gt; so you
can use Frog directly from Python (&lt;code&gt;pip install frog&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;languagemachines.github.io&#x2F;frog&#x2F;&quot;&gt;the Frog website&lt;&#x2F;a&gt; for more information.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;analiticcl&quot;&gt;analiticcl&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;analiticcl&quot;&gt;Analiticcl&lt;&#x2F;a&gt; is an approximate string
matching system. It can be used for spelling correction or text normalisation
and post-OCR correction. It does comparisons against one or more lexicons. This
may sound similar to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;lexmatch&quot;&gt;lexmatch&lt;&#x2F;a&gt; which I
introduced earlier. However, analiticcl goes a lot further than lexmatch. It does
not require exact matches with the lexicon but is designed to detect spelling
variants, and to do so efficiently. It is written in Rust and builds upon
earlier research by Martin Reynaert.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ analiticcl query --lexicon examples&#x2F;eng.aspell.lexicon --alphabet examples&#x2F;simple.alphabet.tsv --output-lexmatch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--json &amp;lt; input.tsv &amp;gt; output.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;input&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;seperate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;variants&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;separate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.734375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.734375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;desperate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;operate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;temperate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.6875&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;serrate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.65625&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.65625&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;separated&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.609375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.609375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;separates&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.609375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dist_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0.609375&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;freq_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;lexicons&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;examples&#x2F;eng.aspell.lexicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;blob&#x2F;master&#x2F;analiticcl.gif&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;analiticclvideothumbnail.jpg&quot; alt=&quot;Analiticcl demo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;analiticcl&quot;&gt;the analiticcl source repository&lt;&#x2F;a&gt; for more information. A python
binding is also available (&lt;code&gt;pip install analiticcl&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;colibri-core&quot;&gt;colibri-core&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.github.io&#x2F;colibri-core&#x2F;&quot;&gt;Colibri Core&lt;&#x2F;a&gt; is software to quickly
and efficiently count and extract patterns from large corpus data, to extract
various statistics on the extracted patterns, and to compute relations between
the extracted patterns. The employed notion of pattern or construction
encompasses ngrams, skipgrams and flexgrams (an abstract pattern with one or
more gaps of variable-size).&lt;&#x2F;p&gt;
&lt;p&gt;N-gram extraction may seem fairly trivial at first, with a few lines in your
favourite scripting language, you can move a simple sliding window of size n
over your corpus and store the results in some kind of hashmap. This trivial
approach however makes an unnecessarily high demand on memory resources, this
often becomes prohibitive if unleashed on large corpora. Colibri Core tries to
minimise these space requirements.&lt;&#x2F;p&gt;
&lt;p&gt;Colibri Core is written in C++, a python binding is also available.&lt;&#x2F;p&gt;
&lt;p&gt;A demo video is available:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;blob&#x2F;master&#x2F;colibri-core.gif&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;colibricorevideothumbnail.jpg&quot; alt=&quot;Colibri Core demo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.github.io&#x2F;colibri-core&#x2F;&quot;&gt;Colibri Core website&lt;&#x2F;a&gt; for
more information. A journal article &quot;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openresearchsoftware.metajnl.com&#x2F;articles&#x2F;10.5334&#x2F;jors.105&quot;&gt;Efficient n-gram, Skipgram and Flexgram
modelling with
colibri-core&lt;&#x2F;a&gt;&quot;
was published in the Journal of Open Research Software (2016), and was also
included in my PhD dissertation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;folia-tools&quot;&gt;folia-tools&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;foliatools&quot;&gt;FoLiA tools&lt;&#x2F;a&gt; is a set of numerous
command-line tools I wrote for working with the FoLiA format.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.github.io&quot;&gt;FoLiA&lt;&#x2F;a&gt; is an XML-based Format for Linguistic
Annotation. It is written in Python (&lt;code&gt;pip install folia-tools&lt;&#x2F;code&gt;). My colleague
Ko van der Sloot wrote complementary C++ tooling to work with the same format,
these are called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;LanguageMachines&#x2F;foliautils&quot;&gt;foliautils&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Both contain a wide variety of programs such as validators, converters from and to
other document and annotation formats (TEI, PageXML, Abby, plain text,
ReStructuredText, CONLL, STAM) etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vocage&quot;&gt;vocage&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;vocage&quot;&gt;Vocage&lt;&#x2F;a&gt; may be a bit of an odd-one out in
this list as it is not really a text processing tool as-such, but rather a TUI
(Terminal User Interface) for studying language vocabulary (which still counts
as text so is excuse enough for inclusion here). I wrote it in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;Vocage works by presenting flashcards using a spaced-repetition algorithm,
which means it shows cards (e.g. words) you know well less frequently than cards you do not know yet.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;my-cli-tools-for-text-processing&#x2F;vocage.gif&quot; alt=&quot;Vocage example&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The difference with more common software like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apps.ankiweb.net&#x2F;&quot;&gt;Anki&lt;&#x2F;a&gt;
is that vocage is fully terminal-based, has vim keybindings, and it stores its
data in a simple TSV format (both the wordlists as well as the learning
progress go in the same TSV file).&lt;&#x2F;p&gt;
&lt;p&gt;It was featured in a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NoilS3nbxs4&amp;amp;pp=ygUGdm9jYWdl&quot;&gt;video by Brodie Robertson&lt;&#x2F;a&gt; in 2021.&lt;&#x2F;p&gt;
&lt;p&gt;For more information, see &lt;code&gt;vocage&lt;&#x2F;code&gt; on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;proycon&#x2F;vocage&quot;&gt;Codeberg&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;vocage&quot;&gt;Sourcehut&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;vocage&quot;&gt;Github&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;vocage&quot;&gt;Crates.io&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h3&gt;
&lt;p&gt;I hope I have been able to convey some of my enthusiasm for the unix
command-line for text processing and natural language processing. Moreover, I
hope you find some of my software useful for some of your own projects.&lt;&#x2F;p&gt;
&lt;p&gt;You can publicly comment on this post &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;social.anaproy.nl&#x2F;@proycon&#x2F;112745066604887083&quot;&gt;on the fediverse&lt;&#x2F;a&gt; (e.g. using mastodon).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Do not Restrict Me! How copy protection (DRM) on e-books harms our freedom and what to do about it</title>
          <pubDate>Fri, 05 Jan 2024 20:39:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/do-not-restrict-me/</link>
          <guid>https://proycon.anaproy.nl/posts/do-not-restrict-me/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/do-not-restrict-me/">&lt;h1 id=&quot;do-not-restrict-me-how-copy-protection-drm-on-e-books-harms-our-freedom-and-what-to-do-about-it&quot;&gt;Do not Restrict Me! How copy protection (DRM) on e-books harms our freedom and what to do about it&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;part-i-drm-hell&quot;&gt;Part I: DRM Hell&lt;&#x2F;h2&gt;
&lt;p&gt;Like many people, I like reading books. My favourite genre is science fiction,
but I also like the occasional gay romance and I love to diversify by reading
books in different languages. My home isn&#x27;t too spacious, and with two
completely filled-up bookcases there&#x27;s little room left for more physical
books, so I&#x27;ve hopped on the e-book bandwagon over a decade ago, I generally
prefer things to be digital anyway. However, my love for all things digital
is significantly dampened by the nastiness that is DRM (Digital Rights
Management), the copy protection that encumbers the majority of e-books nowadays.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;proybooks.jpg&quot; alt=&quot;Me in front of my bookcases a few years ago&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been using a Kobo Aura e-reader for a long time, Over the years, I have
bought my fair share of books. Getting them from the Kobo store or the
Dutch bol.com (which has some kind of partnership with Kobo) onto the reader
was a breeze. Most consumers would be happy with such an experience, but for me
there was always this nagging feeling that I was being locked into an ecosystem
and never really own the books I bought.&lt;&#x2F;p&gt;
&lt;p&gt;What if my e-reader breaks? What if Kobo or Adobe goes bankrupt? Would I still have
access to all the books I bought? All my physical books will still be there
even in 50 years or so unless they befall to fire, burglary, rising sea levels,
or paper-devouring bookworms. With my normal digital data, I take
care to ensure similar longevity by making frequent backups and storing them in
simple interoperable formats that pass the test of time (like plain text, HTML,
etc). DRM encumbered data, however, is not normal digital data, it is encrypted
data. You can&#x27;t read it without having the proper key. Now data encryption as
such is fine and something I&#x27;m a big proponent and heavy user of, but it stands
or falls on who has ownership of the key! Spoiler alert, with DRM it&#x27;s not you!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;books-keys.png&quot; alt=&quot;A stack of books with keys on top&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When it comes to e-books with DRM, books are typically encrypted with a key
personalized for you, but &lt;em&gt;you don&#x27;t own the personalized key to decrypt your
own books&lt;&#x2F;em&gt;. Worse, the whole technology relies on &lt;em&gt;obfuscation&lt;&#x2F;em&gt; of this
decryption key. The use of obfuscation in data security is flawed in principle,
there will always be clever people capable of breaking it (this is also the case for DRM).
DRM is a flawed technological solution for what is in fact a legal or socio-economic problem.&lt;&#x2F;p&gt;
&lt;p&gt;The legal issue is that of copyright, the author or publisher of a book has the
exclusive right to sell copies of his&#x2F;her own work, others are not permitted to
do so. This sounds fair enough to me. The creator who created the work should
be the one receiving the monetary gains from it, if he&#x2F;she so desires. The
challenge is, whereas a physical book needs to be printed and shipped to the
customer, a digital resource copies effortlessly and can be sent all over the
world in no time. This means there is no longer any significant scarcity
involved in the distribution process from which value can be derived.&lt;&#x2F;p&gt;
&lt;p&gt;Those who enforce DRM upon us attempt to keep an old business model alive where
distribution was coupled to creation and tightly controlled, but this no longer
works. The &lt;em&gt;only&lt;&#x2F;em&gt; way to do so in a digital age is to place ever-further
restrictions on the user. When you watch a movie in a movie theatre, as opposed
to from your own home, you are in a fairly tightly controlled environment. You
play by the rules of the theatre and you pay essentially for a (single) viewing
experience. DRM software does something similar, it builds a tightly controlled
virtual theatre for you within the constraints of which you are allowed to do
your viewing. It never really works though, everything that you see on your
screen or hear from your speakers can in principle be copied. As cumbersome as
it might be, it&#x27;s theoretically possible to make photographs of pages of your
DRM-protected book on your e-reader and then have the text extracted via OCR
(optical character recognition), or to record an audio&#x2F;video stream with a
microphone and camera. In a real movie theatre there are rules against this:
you&#x27;re under some form of surveillance, you&#x27;ll probably be be kicked out if you
start recording the movie from your smartphone. In the software theatres that
DRM forces you into, you&#x27;re under an ever-encroaching kind of surveillance too
and you are shipped a crippled product that is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.defectivebydesign.org&#x2F;&quot;&gt;defective by
design&lt;&#x2F;a&gt;. The core tenet is: the
user&#x2F;consumer can not be trusted and the rights of the producer outweigh the
rights of the consumer.&lt;&#x2F;p&gt;
&lt;p&gt;The use of DRM means that only software that implements proprietary DRM
technology like Adobe DRM, can decrypt the book on your behalf and show it.
This is also how e-readers do it. Such software is, probably by contract with
the supplier of the DRM technology, bound to all kinds of restrictions designed
to &lt;em&gt;keep the actual data as far away from the user&lt;&#x2F;em&gt; as possible. Such software
is by definition fundamentally incompatible with the free and open source
software that I cherish and choose to use. DRM relies on obfuscation, openness
and freedom is its anti-thesis, DRM requires proprietary software libraries that usually
come with a licensing fee to be paid by whoever builds the viewer software to
the DRM technology supplier. DRM in itself is an industry, and whereas
supporting the authors that write the books I love is something I whole-
heartedly support, a major share of the profit ends up not with the author but
with publishers and platforms whose practises I do oppose.&lt;&#x2F;p&gt;
&lt;p&gt;More and more, our devices impact our privacy and monitor how we use them.
Knowing exactly what books we read (or what music we listen, videos we watch) is a
treasure trove for parties like Amazon, Google, Apple, Kobo, etc.. because it
allows them to 1) recommend and sell more similar books to us and 2) build up a
profile of our interests which has value (= can be sold) to anyone who wants to
target us with advertisements.&lt;&#x2F;p&gt;
&lt;p&gt;In democratic societies we tend to value freedom of opinion, without it our
democratic societies could not exist. The books we read, the information we
consume, are pivotal in a free society and says a lot about us. It may also
divulge a lot about us to potential adversaries (political or otherwise). It is
not a coincidence that dictatorships often start with book bannings and
burnings. I therefore think it is fundamentally important that information on
our reading habits and media consumption in general is not collected by any one
or few major players, be it companies or governments. The potential for abuse
is just too great.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;bramhall18-nydw.jpg&quot; alt=&quot;BramhHall 2018 - New York Daily News&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Technologies like DRM, aside from being technically flawed in principle, also provide the
wrong incentives, they hinder interoperability and lead to the emergence of one
or a few centralised solutions. Those who control these solutions then sit on a
treasure trove of potential data that is just waiting to be exploited. They
also hinder any alternative legitimate use I might have on the books I buy, say
I want to do scientific research by doing some kind of statistical analysis on
the text, or some kind of annotation on the text. I am a research software
developer developing precisely such (open) software. But all of this is not possible
on DRM encumbered e-books as the actual text is being deliberately kept as far away
from me as possible!&lt;&#x2F;p&gt;
&lt;p&gt;Likewise, I can&#x27;t just build an open e-reader software myself, say based on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;postmarketos.org&quot;&gt;postmarketOS&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sxmo.org&quot;&gt;SXMO&lt;&#x2F;a&gt;, both of
which have been &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ByvmEqJvZBU&quot;&gt;successfully tried on a Kobo Clara
HD&lt;&#x2F;a&gt;, because it would not be able
to open anything touched by DRM, making it pretty useless for the average
consumer. I&#x27;d be very interested in trying if I can get something like this
working on my Kobo Aura and read my books using our own Sxmo system! Or what if
I wanted to build a search index to search in the text of all the books I own?
If it were not for DRM, I could easily build this, but DRM makes me
reliant on third-party proprietary software. Normal competition is stifled as
the DRM provider acts as a gatekeeper that demands the user can only access a
crippled defective version of the actual product.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;part-ii-do-not-restrict-me&quot;&gt;Part II: Do not Restrict me!&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;readers-against-drm.png&quot; alt=&quot;Readers against DRM - by RAD! initiative&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m writing all of this because my Kobo reader has been having some
difficulties lately so I decided to look for a replacement.
This opened the gates to the DRM hell I depicted above.&lt;&#x2F;p&gt;
&lt;p&gt;Being aware of the ecosystem I was being locked into, I decided this was a good
moment to break with it and opt for more freedom and sustainability. I chose a
Pocketbook e-reader (the PocketBook Inkpad Color 3 to be precise) as this brand
seems to be one of the few e-readers that isn&#x27;t as tied to a store as for
example Amazon Kindles (they are the worst) or, to lesser extend, Kobo devices are. It&#x27;s a device
that can still be fully used without requiring you to log in with some kind of
cloud account. The exception being of course DRM, the device supports Adobe&#x27;s
DRM technology and you need an Adobe ID if you want to be able to read books
tainted by it. I reluctantly registered such an account.&lt;&#x2F;p&gt;
&lt;p&gt;So how do I transfer the DRM books I have on my old Kobo to my new Pocketbook? I
can&#x27;t grab the EPUB files from the Kobo because they&#x27;d be encrypted
specifically for that device using Kobo&#x27;s own DRM scheme. Stores like Kobo and
bol.com have a download option. This suggests you can download the e-books but
in fact, in case of Adobe DRM encumbered e-books you don&#x27;t even get the
encrypted EPUB files, but you get so-called ACSM files (Adobe Content Server
Message) instead. These are &lt;em&gt;not&lt;&#x2F;em&gt; the actual book but is merely a receipt that
a client can in turn send to Adobe&#x27;s server to obtain the (encrypted) book. The
message contains information such as your personal UUID and Adobe account details.&lt;&#x2F;p&gt;
&lt;p&gt;My PocketBook e-reader is supposed to support these ACSM files and obtain the
encrypted DRM-encumbered books for me. This would be the obvious route for the
normal user. However, it didn&#x27;t work for some unknown reason: I got a cryptic
&lt;code&gt;E_ADEPT_NO_FULFILLMENT_RESULT&lt;&#x2F;code&gt; error when trying to open the ACSM files
directly on my new reader. This shows that the technology is fragile and that
if things break, there&#x27;s not much you can do. For any normal non-technical user
things would have already gotten too difficult by now.&lt;&#x2F;p&gt;
&lt;p&gt;Fortunately I&#x27;m not a non-technical user and I don&#x27;t give up easily, my next
try was to go via a program called &quot;Adobe Digital Editions&quot;, this is
proprietary software that can read these ACSM files and obtains the encrypted
EPUB file for you. Both in this program as well as on the device, I register
the same Adobe ID, and then the encrypted EPUB files this program downlods can
be transferred and decrypted&#x2F;displayed by the e-reader.&lt;&#x2F;p&gt;
&lt;p&gt;A major caveat is that Adobe Digital Editions is proprietary software that is
available (free of charge), but only for Windows or macOS, or for Android or
iOS nowadays as well. But I have none of those systems nor intend to buy any of
them just so I can access my books! As a FOSS enthusiast I run on Linux systems
exclusively.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s a solution though, I (again, reluctantly) installed &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;appdb.winehq.org&#x2F;objectManager.php?sClass=version&amp;amp;iId=33276&quot;&gt;Adobe Digital
Editions
4.5&lt;&#x2F;a&gt; via
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;winehq.org&quot;&gt;Wine&lt;&#x2F;a&gt; on my Arch Linux system. I&#x27;ll guide you to the steps in case
anybody finds themselves in a similar conundrum:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;On Arch Linux, first &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Official_repositories#Enabling_multilib&quot;&gt;enable multilib&lt;&#x2F;a&gt; so you can install 32-bit software like Wine on a 64-bit system.&lt;&#x2F;li&gt;
&lt;li&gt;Then install wine and various dependencies you might need: &lt;code&gt;pacman -Syu wine winetricks wine-mono lib32-gnutls samba&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Set a new &lt;code&gt;WINEPREFIX&lt;&#x2F;code&gt; and &lt;code&gt;WINEARCH&lt;&#x2F;code&gt;: &lt;code&gt;export WINEPREFIX=~&#x2F;.adewine&#x2F; WINEARCH=win32&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Create the &lt;code&gt;WINEPREFIX&lt;&#x2F;code&gt;: &lt;code&gt;winecfg&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Install Adobe Digital Editions 4.5 via winetricks: &lt;code&gt;winetricks -q adobe_dige4&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Start Adobe Digital Editions:
&lt;code&gt;WINEPREFIX=~&#x2F;.adewine WINEARCH=win32 wine $WINEPREFIX&#x2F;drive_c&#x2F;Program\ Files&#x2F;Adobe&#x2F;Adobe\ Digital\ Editions\ 4.5&#x2F;DigitalEditions.exe&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Register your Adobe ID in the program.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;If that is all done, you can now import ACSM files in Adobe Digital Editions.
It will use the query the Adobe server to obtain the actual encrypted book and
puts encrypted EPUB or PDF files in a directory &lt;code&gt;My Digital Editions&lt;&#x2F;code&gt; in
&lt;code&gt;C:\users\$USERNAME\Documents\&lt;&#x2F;code&gt;. If you are lucky this is already mapped to
your &lt;code&gt;~&#x2F;Documents&lt;&#x2F;code&gt;. These you can transfer to your e-reader. You can also let
Adobe Digital Editions transfer things to your e-reader but I didn&#x27;t try that
as I prefer to let it do as little as possible and didn&#x27;t want to go into the
hassle of getting a USB device accessible via wine.&lt;&#x2F;p&gt;
&lt;p&gt;At this point I finally managed to get my encrypted books onto the e-reader and
the e-reader actually manages to open them. But... the books are still tainted
by DRM which is not what I want.&lt;&#x2F;p&gt;
&lt;p&gt;As DRM is a flawed technology to begin with, it should not be surprising that
it has been reverse engineered and broken. For Adobe ADEPT DRM this was
initially &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;i-u2665-cabbages.blogspot.com&#x2F;2009&#x2F;02&#x2F;circumventing-adobe-adept-drm-for-epub.html&quot;&gt;published back in 2009 by a user under the pseudonym
i♥cabbages&lt;&#x2F;a&gt;.
This software has been integrated into
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nodrm&#x2F;DeDRM_tools&quot;&gt;DeDRM-tools&lt;&#x2F;a&gt;, which is a plugin for the
open source e-book management software &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;calibre-ebook.com&#x2F;&quot;&gt;Calibre&lt;&#x2F;a&gt;. On Arch Linux,
install calibre with &lt;code&gt;pacman -Syu calibre&lt;&#x2F;code&gt; and install the plugin from the Arch
User Repository with &lt;code&gt;yay -S calibre-plugin-dedrm&lt;&#x2F;code&gt; (or whatever other AUR
helper you use).&lt;&#x2F;p&gt;
&lt;p&gt;I recommend you launch &lt;code&gt;calibre&lt;&#x2F;code&gt; from a terminal so you can see its standard error output.&lt;&#x2F;p&gt;
&lt;p&gt;If Adobe Digital Editions is installed and you now import a DRM-protected EPUB,
i.e. the ones you got from Adobe Digital Editions, the DeDRM plugin will
automatically extract the encryption key from the Adobe Digital Editions
installation and subsequently decrypt the book. The resulting EPUB will finally
be a normal one which you can read &lt;em&gt;anywhere&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;drm-free.png&quot; alt=&quot;All files are provided - DRM Free - without restrictive technologies (Defective by Design, Free Software Foundation)&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The caveat again is that this a bit tricky to get working since we run Adobe
Digital Editions in Wine. In the Calibre plugin settings for DeDRM tools, you need to explicitly set
the wine prefix to &lt;code&gt;~&#x2F;.adewine&lt;&#x2F;code&gt;. Moreover, the DeDRM scripts are written in Python and some of them will
have to run &lt;em&gt;inside&lt;&#x2F;em&gt; Wine, so we need a Python installation in our WINEPREFIX, I
installed one as follows:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Grab a 32-bit Windows installer version of Python 3: &lt;code&gt;wget https:&#x2F;&#x2F;www.python.org&#x2F;ftp&#x2F;python&#x2F;3.7.8&#x2F;python-3.7.8.exe&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Run the installer &lt;code&gt;WINEPREFIX=~&#x2F;.adewine WINEARCH=win32 wine python-3.7.8.exe&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Install the required cryptography module for Python: &lt;code&gt;WINEPREFIX=~&#x2F;.adewine WINEARCH=win32 wine ~&#x2F;.adewine&#x2F;drive_c&#x2F;users&#x2F;$USER&#x2F;AppData&#x2F;Local&#x2F;Programs&#x2F;Python&#x2F;Python37-32&#x2F;python.exe -m pip install pycryptodome&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Launch &lt;code&gt;calibre&lt;&#x2F;code&gt;, (make sure to set the wine prefix in the plugin configuration screen for DeDRM-tools), then import your DRM EPUBs.&lt;&#x2F;li&gt;
&lt;li&gt;The resulting EPUBs in your Calibre Library directory will now be fully decrypted, i.e.
not tainted by DRM. You can transfer them to your e-reader &lt;em&gt;or open them
with any normal EPUB viewer anywhere&lt;&#x2F;em&gt;!&lt;&#x2F;li&gt;
&lt;li&gt;Make sure to export your extracted key from Calibre&#x27;s plugin configuration screen for DeDRM-tools. This will be produce a &lt;code&gt;der&lt;&#x2F;code&gt; file. It ensures that even if Adobe at some point changes their obfuscation algorithm so key extraction no longer works, you still have the decrypted key and can import it back.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;When removing DRM you must of course take care not to redistribute&#x2F;share the
resulting files, that would be a clear violation of copyright law anywhere. I explicitly
&lt;em&gt;do NOT advocate for NOR encourage you to violate such laws&lt;&#x2F;em&gt;, I merely advocate
for software freedom, proper interoperability, long term sustainability,
consumer privacy and freedom from surveillance. I argue against DRM
technology because it is is detrimental to all those things and technologically
faulty by design because it relies on obfuscation.&lt;&#x2F;p&gt;
&lt;p&gt;As to the legality of removing DRM &lt;em&gt;from your own e-books without
redistributing them&lt;&#x2F;em&gt;, I am by no means a lawyer, but you can read this article
that provides a fairly thorough perspective: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;techyoulike.com&#x2F;is-removing-drm-illegal&#x2F;&quot;&gt;Is removing DRM illegal?
Demystifying the Legality of Removing Digital Rights
Management&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Last, but not least, I would like to urge the reader to seek out those
publishers and authors that sell DRM-free books and buy books from them
whenever possible. A notably one in the Science Fiction genre is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.tor.com&#x2F;&quot;&gt;Tor
Books&lt;&#x2F;a&gt; (not to be confused with the Tor Network which is
completely unrelated). Notable DRM-free stores are
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;smashwords.com&quot;&gt;Smashwords&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.lulu.com&#x2F;shop&quot;&gt;Lulu&lt;&#x2F;a&gt;, see
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.defectivebydesign.org&#x2F;guide&#x2F;ebooks&quot;&gt;Guide to DRM-Free Living:
Literature&lt;&#x2F;a&gt; for more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;credits-and-references&quot;&gt;Credits and references&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fsf.org&quot;&gt;Free Software Foundation&lt;&#x2F;a&gt; for their &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.defectivebydesign.org&quot;&gt;Defective by Design&lt;&#x2F;a&gt; campaign and the DRM-free imagery.
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.defectivebydesign.org&#x2F;guide&#x2F;ebooks&quot;&gt;Guide to DRM-Free Living: Literature&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nodrm&#x2F;DeDRM_tools&quot;&gt;DeDRM-tools&lt;&#x2F;a&gt; by Apprentice Harper, Apprentice Alf, NoDRM, i♥cabbages and many others.&lt;&#x2F;li&gt;
&lt;li&gt;Book burning comic by Bill Bramhall, Bramhall&#x27;s World as published in the New York Daily News (2018): &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nydailynews.com&#x2F;2018&#x2F;02&#x2F;01&#x2F;bramhall-cartoons-for-january-2018&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.nydailynews.com&#x2F;2018&#x2F;02&#x2F;01&#x2F;bramhall-cartoons-for-january-2018&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.brixit.nl&#x2F;&quot;&gt;Martijn Braam&lt;&#x2F;a&gt; for his work on showing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;postmarketos.org&quot;&gt;postmarketOS&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sxmo.org&quot;&gt;sxmo&lt;&#x2F;a&gt; on the Kobo Clara HD: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ByvmEqJvZBU&quot;&gt;video&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Willie Howard. TechYouLike. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;techyoulike.com&#x2F;is-removing-drm-illegal&#x2F;&quot;&gt;Is removing DRM illegal? Demystifying the Legality of Removing Digital Rights
Management&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;do-not-restrict-me&#x2F;https&#x2F;&#x2F;calibre-ebook.com&quot;&gt;Calibre&lt;&#x2F;a&gt; - e-book management software&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.tor.com&#x2F;&quot;&gt;Tor Books&lt;&#x2F;a&gt; - DRM-free publisher&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;smashwords.com&quot;&gt;Smashwords&lt;&#x2F;a&gt; - DRM-free store&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&quot;&gt;Openclipart.org&lt;&#x2F;a&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;320872&#x2F;woman-reading-in-sunset&quot;&gt;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;320872&#x2F;woman-reading-in-sunset&lt;&#x2F;a&gt; from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.publicdomainpictures.net&#x2F;en&#x2F;view-image.php?image=264941&amp;amp;picture=reading-read-peacefulwoman-dusk&quot;&gt;https:&#x2F;&#x2F;www.publicdomainpictures.net&#x2F;en&#x2F;view-image.php?image=264941&amp;amp;picture=reading-read-peacefulwoman-dusk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;38869&#x2F;stack-of-paperbacks&quot;&gt;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;38869&#x2F;stack-of-paperbacks&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;170514&#x2F;keys&quot;&gt;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;170514&#x2F;keys&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;68545&#x2F;padlock-icon-rounded&quot;&gt;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;68545&#x2F;padlock-icon-rounded&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;323509&#x2F;security-camera&quot;&gt;https:&#x2F;&#x2F;openclipart.org&#x2F;detail&#x2F;323509&#x2F;security-camera&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;discredits&quot;&gt;Discredits&lt;&#x2F;h2&gt;
&lt;p&gt;Adobe, Amazon, Google and all those many others enforcing DRM technology on end-users.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comments&quot;&gt;Comments&lt;&#x2F;h2&gt;
&lt;p&gt;You can comment on this post &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;social.anaproy.nl&#x2F;@proycon&#x2F;111705057662051402&quot;&gt;on the fediverse&#x2F;mastodon&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Canto Ostinato - Simeon Ten Holt - Piano solo</title>
          <pubDate>Mon, 01 Jan 2024 18:43:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/canto-ostinato/</link>
          <guid>https://proycon.anaproy.nl/posts/canto-ostinato/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/canto-ostinato/">&lt;h1 id=&quot;canto-ostinato-simeon-ten-holt&quot;&gt;Canto Ostinato - Simeon Ten Holt&lt;&#x2F;h1&gt;
&lt;p&gt;This is my own interpretation of (small part of) Simeon Ten Holt&#x27;s wonderful composition &quot;Canto Ostinato&quot;, famous for its repetitive nature.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;f9b1a162-8974-4f1d-82b0-6f2cd89ad331?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>My Default Apps</title>
          <pubDate>Tue, 07 Nov 2023 23:36:00 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/default-apps/</link>
          <guid>https://proycon.anaproy.nl/posts/default-apps/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/default-apps/">&lt;p&gt;There seems to be a bit of a hype going currently amongst bloggers where people post
what their so-called &lt;em&gt;&quot;default apps&quot;&lt;&#x2F;em&gt; or mostly used applications are, apparently
prompted by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;listen.hemisphericviews.com&#x2F;097&quot;&gt;this podcast&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;defaults.rknight.me&#x2F;&quot;&gt;Robb Knight&#x27;s list
&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I see most of the participants posting a variety of often Apple-based
proprietary software. I thought I&#x27;d join in on the fun from a purely FOSS (Free
Open Source Software) perspective. I have a strong preference for minimalistic
local-first software following the UNIX philosophy (do one thing only, do it well, and interconnect), and often prefer
terminal-based interfaces. I want to show that you can perfectly use FOSS tools
for all your everyday needs!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;📮 Mail Client: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aerc-mail.org&quot;&gt;aerc&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🌐 Web Browser: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🧮 Code&#x2F;Text Editor: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.org&quot;&gt;neovim&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;📜 Word Processing: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; (but more often via Markdown + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pandoc.org&quot;&gt;pandoc&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;📊 Presentations: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; with beamer (more often via Markdown + pandoc)&lt;&#x2F;li&gt;
&lt;li&gt;📜 PDF viewer: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pwmt.org&#x2F;projects&#x2F;zathura&#x2F;&quot;&gt;zathura&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🎥 Media Player: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mpv.io&quot;&gt;mpv&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🎵 Music: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rybczak.net&#x2F;ncmpcpp&#x2F;&quot;&gt;ncmpcpp&lt;&#x2F;a&gt; (client) + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;musicpd.org&quot;&gt;mpd&lt;&#x2F;a&gt; + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;badaix&#x2F;snapcast&quot;&gt;snapcast&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;📝 Notes: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.org&quot;&gt;neovim&lt;&#x2F;a&gt; and markdown files in a git repo&lt;&#x2F;li&gt;
&lt;li&gt;✅ To-Do: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;todotxt.org&quot;&gt;todo.txt&lt;&#x2F;a&gt; with my own &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&quot;&gt;todo.txt-more&lt;&#x2F;a&gt; extension.&lt;&#x2F;li&gt;
&lt;li&gt;📆 Calendar: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&quot;&gt;todo.txt-more&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🗞️ RSS Client:  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;newsboat.org&quot;&gt;newsboat&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🎤 Podcasts: podboat (comes with newsboat)&lt;&#x2F;li&gt;
&lt;li&gt;⌨️ Launcher:  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Cloudef&#x2F;bemenu&quot;&gt;bemenu&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🌅 Photo viewer: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~exec64&#x2F;imv&#x2F;&quot;&gt;imv&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🌅 Photo editing: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gimp.org&quot;&gt;gimp&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🌅 Image editing (vector): &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;inkscape.org&quot;&gt;inkscape&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;📹 Video editing: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kdenlive.org&quot;&gt;kdenlive&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;💬 Chat: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~taiite&#x2F;senpai&#x2F;&quot;&gt;senpai&lt;&#x2F;a&gt; + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~emersion&#x2F;soju&quot;&gt;soju&lt;&#x2F;a&gt; (IRC), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bitlbee.org&quot;&gt;bitlbee&lt;&#x2F;a&gt; (XMPP), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tulir&#x2F;gomuks&quot;&gt;gomuks&lt;&#x2F;a&gt; (Matrix), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;desktop.telegram.org&#x2F;&quot;&gt;Telegram&lt;&#x2F;a&gt; (or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;paul-nameless&#x2F;tg&quot;&gt;tg&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;🔖 Bookmarks: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jarun&#x2F;Buku&quot;&gt;buku&lt;&#x2F;a&gt; + bemenu script&lt;&#x2F;li&gt;
&lt;li&gt;🔐 Password Management: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.passwordstore.org&#x2F;&quot;&gt;pass&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🤦 Social Media: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;social.anaproy.nl&#x2F;@proycon&quot;&gt;Mastodon&lt;&#x2F;a&gt; (sometimes via &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RasmusLindroth&#x2F;tut&quot;&gt;tut&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Geek Bonus:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;🐧 OS: I use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&quot;&gt;Arch Linux&lt;&#x2F;a&gt; btw (on my desktop and laptop)
&lt;ul&gt;
&lt;li&gt;I use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;postmarketos.org&#x2F;&quot;&gt;postmarketOS&lt;&#x2F;a&gt; on my phone (based on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alpinelinux.org&quot;&gt;Alpine linux&lt;&#x2F;a&gt;), with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sxmo.org&quot;&gt;SXMO&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;On my server I use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ubuntu.com&quot;&gt;Ubuntu Linux&lt;&#x2F;a&gt; as host system, with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alpinelinux.org&quot;&gt;Alpine Linux&lt;&#x2F;a&gt; containers via &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;podman.io&quot;&gt;podman&lt;&#x2F;a&gt; for various self-hosted services, I posted about it &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;lemmy.world&#x2F;comment&#x2F;97324&quot;&gt;on lemmy&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Terminal: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;dnkl&#x2F;foot&quot;&gt;foot&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Terminal multiplexer: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tmux&#x2F;tmux&quot;&gt;tmux&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🐚 Shell: zsh&lt;&#x2F;li&gt;
&lt;li&gt;Compositor&#x2F;Window Manager: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hyprwm&#x2F;Hyprland&quot;&gt;Hyprland&lt;&#x2F;a&gt; on desktop&#x2F;laptop, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;swaywm.org&quot;&gt;sway&lt;&#x2F;a&gt; as part of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sxmo.org&quot;&gt;SXMO&lt;&#x2F;a&gt; on phone&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;dotfiles&quot;&gt;Dotfiles&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Rant against centralising e-mail in big-tech silos, and breaking the internet in the process</title>
          <pubDate>Mon, 13 Feb 2023 00:17:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/rant-against-centralising-e-mail/</link>
          <guid>https://proycon.anaproy.nl/posts/rant-against-centralising-e-mail/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/rant-against-centralising-e-mail/">&lt;h1 id=&quot;rant-against-centralising-e-mail-in-big-tech-silos-and-breaking-the-internet-in-the-process&quot;&gt;Rant against centralising e-mail in big-tech silos, and breaking the internet in the process&lt;&#x2F;h1&gt;
&lt;p&gt;Universities and research institutes used to be at the forefront when it comes
to development of the fundamental technologies that power the internet. As
early as 1965, researchers at MIT developed a kind of precursor to e-mail. In
1978, researchers at Berkeley leveraged the already existing unix tool &#x27;mail&#x27;
(1971) to communicate over a larger network. Universities and research
institutes were among the first to embrace this new way to communicate with
peers across ever greater distances and eventually, with the advent of the
internet, all over the globe.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m a rather dismayed to see those universities and institutes nowadays no
longer as pioneers and innovators in this area, but instead as mere consumers
of ready-made corporate solutions, following corporate interests and
centralising solutions. I have two employers, both academic, and both have
resorted to big-tech corporations that offer solutions like e-mail as a
service. E-mail &quot;in the cloud&quot;, as they say. In these particular instances it&#x27;s
Microsoft&#x27;s Office 365 solution that is being adopted, but I&#x27;d be just as vocal
in my opposition it were Apple, Google or Facebook.&lt;&#x2F;p&gt;
&lt;p&gt;By adopting such solutions, you, as the user, very conveniently get great
interoperability within a limited set of proprietary software tools (the ones
of the vendor of course). That may be great if you are indeed a user of those
tools and happy with it as you are. But as soon as you leave that vendor&#x27;s
ecosystem, the experience becomes less than stellar and often even a burden.
Using one of their tools nudges you to also use the others, because it&#x27;s
the most convenient. Worse, it may nudge your peers and they instead apply peer pressure
on you to use also those tools.&lt;&#x2F;p&gt;
&lt;p&gt;The average user may not care, but for those of us on the deep-end of the geek
spectrum, these trends have worrying implications for software freedom, open
standards, overall interoperability and net neutrality. Our concern is highly
political.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t know what the motivations of the institutes were to adopt this e-mail
service, nor who made the decisions, but I&#x27;m sure parties like Microsoft know
how to ply their wares enticingly. Their promise is, I would guess, most often
one of &lt;em&gt;convenience&lt;&#x2F;em&gt; and &lt;em&gt;security&lt;&#x2F;em&gt;. For an institute, outsourcing your e-mail
needs to a 3rd party who has the expertise is of course not a bad idea if you
lack the expertise yourself. It may be more convenient as you don&#x27;t have to
appoint system administrators yourself and secure your own mail infrastructure.
That in itself, however, is not the issue.&lt;&#x2F;p&gt;
&lt;p&gt;My issue is everyone converging on &lt;em&gt;the same extremely select group of service
providers&lt;&#x2F;em&gt;. This has already been ongoing for a long time for personal e-mail, with
end-users adopting mail services like hotmail and gmail, but it is a different
thing when we as academic institutions now follow suit and abandon any pretence of
contributing to a mature and properly decentralised infrastructure. In this
way, we are willingly contributing to centralisation, which if conducted on such a
scale, may fundamentally alter the nature and power-balance of a decentralised
network like the internet is in essence meant to be.&lt;&#x2F;p&gt;
&lt;p&gt;This centralisation has security implications too, because not just
institutes and users converge on the select group of service providers, but so
do attackers. When (I dare say when rather than if) a vulnerability is
discovered and exploited by a malicious actor at one point, tremendous
amount of e-mails might be compromised.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s take the political argument further, what is fundamentally at stake here is who
&lt;em&gt;owns&lt;&#x2F;em&gt; the world&#x27;s computing resources, the world&#x27;s communication infrastructure,
who &lt;em&gt;has access&lt;&#x2F;em&gt; to those, and to whose benefit are they employed. It is
all about fair ownership and fair distribution, and in the end, a fairer world. In
a digitised society, computing power as well as raw data will become ever more
important resources. The question who owns (or has access to) both matters and
should not be trivialised. E-mail in particular is quite a treasure trove of
data, if accumulated by any centralised party.&lt;&#x2F;p&gt;
&lt;p&gt;Whenever you centralize something, especially on such a scale, you grant power
to some entity (a private company in this case) and you have to ask whether
this trust is justified and whose interests are really served. How will it play
out over the long term? What if some eccentric right-wing billionaire takes
over the big-tech company and enforces his own agenda? We&#x27;ve seen it happen
already in the social media world, we&#x27;ve put all our microblogging needs in the
hands of Twitter and are now tasting the bitter results when such a platform
goes downhill rapidly. With centralised e-mail, we&#x27;d expose ourselves once more
to such risks. Or what if some state-actor takes a hold like in China and uses
the data for censorship and other repression? It&#x27;d be naive to think we&#x27;re
immune to all this in Western democracies. Technology choices made today shape
the internet, the digital society, of the future. Putting all eggs in any
single basket is a bad idea in principle. We need to nurture the decentralised
nature of the internet.&lt;&#x2F;p&gt;
&lt;p&gt;A few years ago, I already wrote in my post &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;break-free-do-not-be-a-prisoner-of-your-software&#x2F;&quot;&gt;Break free! Don&#x27;t be a prisoner of
your software
platform!&lt;&#x2F;a&gt;
that the internet is not in the best of states. It has become a
hyper-commercialised place in which users flock to free social media platforms,
usually advertisement companies at heart, to post their photos, blogs
and videos. This trend has developed for over almost two decades, in which
fundamental technologies that used to be fairly open were sealed off and turned
into walled-in gardens. Users were lured in en masse by the convenience of a
service free of charge, but they pay with their privacy by being tracked,
profiled and fed to an algorithm aimed to maximize their stay on their service.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s taken a while but in recent years societal awareness has finally increased
that this may not be all for the better. Is the technology still serving us or
are we now serving the technology, or the companies providing it to us?&lt;&#x2F;p&gt;
&lt;p&gt;I always maintain that technology choices and usage have real-life
implications; it&#x27;s probably fair to say that social media, as an example,
brought an unparalleled upsurge in disinformation, hate-speech, and a whole
array of psychological disorders such as attention problems. Things that
eventually affect the real world.&lt;&#x2F;p&gt;
&lt;p&gt;If you are, like I am, conscientiously choosing not to use centralised
communication platforms that lock you in, then you quickly hit a wall if you
don&#x27;t play along. I&#x27;m already excluded (self-imposed) from various instant
messaging groups because they use  WhatsApp (= Facebook aka Meta), which I&#x27;ve
always refused to use. Now at work the push towards M365 effectively locks me
out of my institutional mail; this used to be easily remedied with a simple
automatic mail forward, a basic mail function that&#x27;s been around for ages and
which everyone should have, but that option has been disabled. I get the
concern you may not want everybody wildly forwarding everything and prevent
sensitive information from landing on insecure servers, but a complete block is
unnecessarily inflexible. Now I have no say in where mail directed at me goes
anymore and am forced into Microsoft&#x27;s solution.&lt;&#x2F;p&gt;
&lt;p&gt;As a result, I have resorted to just telling people not to use my institutional
mail at all anymore, via a silly auto-reply. This is an option I&#x27;d rather not have taken
as that burdens the sender with something that should have been, and can
normally be, easily automated.&lt;&#x2F;p&gt;
&lt;p&gt;Aside from the political objections I also wanted to provide some further technical
arguments against M365, as they make several technical choices that go against
my idea of software freedom and how e-mail should work:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;M365 blocks various IP ranges which affects self-hosted SMTP servers. The
sender will have to explicitly register mail address and IP with M365 to be
let through. I get the need to combat spam, which is the major cancer of
e-mail. But this strictness breaks the decentralised spirit.&lt;&#x2F;li&gt;
&lt;li&gt;M365 rewrites URLs in mails, it &lt;em&gt;modifies&lt;&#x2F;em&gt; the incoming mail (which in my
view is a already big no-go by definition and breaks cryptographic signatures). It
makes all links go through their system (&lt;code&gt;safelinks.protection.outlook.com&lt;&#x2F;code&gt;).
Again, I understand this is to protect against phishing, which is the 2nd
most common problem with e-mail, but it misses the mark entirely, works
counter productive, and introduces a huge privacy problem whilst doing so.
Every link I click would go through their system and can potentially be
tracked! Moreover, I only use text mails (no HTML, so far less prone to
phishing) and their URL rewriting obfuscates the URLs, making it &lt;em&gt;harder&lt;&#x2F;em&gt;
for me to spot whether a link is legitimate or not. I can make that decision
on my own, I don&#x27;t need nor want MS to do it on my behalf.&lt;&#x2F;li&gt;
&lt;li&gt;The IMAP login procedure with two-factor authentication breaks more
traditional mail clients without OAuth2 support. Okay, then they should
implement OAuth2, fine, I don&#x27;t have an issue with 2FA in general. But the way it
is implemented in OAuth2 by big mail providers like M365, according to
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sourceforge.net&#x2F;p&#x2F;fetchmail&#x2F;mailman&#x2F;message&#x2F;37724737&#x2F;&quot;&gt;the fetchmail
developer&lt;&#x2F;a&gt;, obliges mail clients to register with the mail provider. This
gives more control to the companies and less to the user. The service
provider shouldn&#x27;t care what client I use, the only thing that matters is
that I &lt;em&gt;as user&lt;&#x2F;em&gt; have the right credentials to access my mail.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m using a rather specific mail workflow which I&#x27;ve optimised over the years
to work for me. Using my own mailserver, notmuch, neomutt and more. It&#x27;s
certainly not for everybody but it works for me (and it took me years to find
something I&#x27;m actually comfortable with, most mail solutions suck pretty bad,
or I suck at mail, probably a combination of both). Pulling in IMAP from M365
into my mail workflow would require me to spend a few nights &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;movementarian.org&#x2F;blog&#x2F;posts&#x2F;fetchmail-and-office-365&#x2F;&quot;&gt;setting up
complex
solutions&lt;&#x2F;a&gt;
which I don&#x27;t really need or want in the first place.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I may be a bit (okay, more than a bit) of an opinionated left-leaning idealist,
but the principles that formed the backbone of the internet are grounded in
interconnectivity of decentralised entities. Agreements like RFCs establish
protocols that specify how communication should proceed and what is expected of
implementations. Anyone is free to implement them. Communication especially
should be open, secure and interoperable, or we end up communicating only with people
in different walled-off corporate (or governmental) silos. Which is
sub-optimal. I strongly believe in federation, but that&#x27;s been under siege for
well over two decades because it&#x27;s 1) technically much more difficult to get
right 2) socially harder because it requires communication and coordination and
3) harder to exploit commercially, as trapping users in your own platform is
way more profitable.&lt;&#x2F;p&gt;
&lt;p&gt;In conclusion, I want to appeal to institutes and individuals alike to think
about this and contribute to a better decentralised yet interconnected digital
future, rather than be complacent in its demise: keep fundamental
technologies accessible to everybody, not just big commercial (or governmental)
players, and improve upon them where necessary.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven&#x27;t had enough after my rant on this subject, I strongly recommend you to also read
Carlos Fenollosa&#x27;s blogpost &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cfenollosa.com&#x2F;blog&#x2F;after-self-hosting-my-email-for-twenty-three-years-i-have-thrown-in-the-towel-the-oligopoly-has-won.html&quot;&gt;&quot;After self hosting my email for twenty-three
years, I have thrown in the towel. The oligopoly has
won.&quot;&lt;&#x2F;a&gt;
who makes compelling arguments in the same direction and explains the technical difficulties more in depth than I did here. I know I&#x27;m not alone in this struggle.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>STAM: Stand-off Text Annotation Model</title>
          <pubDate>Sun, 01 Jan 2023 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/stam/</link>
          <guid>https://proycon.anaproy.nl/software/stam/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/stam/">&lt;h1 id=&quot;stam-stand-off-text-annotation-model&quot;&gt;STAM: Stand-off Text Annotation Model&lt;&#x2F;h1&gt;
&lt;p&gt;STAM is a data model for &lt;strong&gt;stand-off text annotation&lt;&#x2F;strong&gt;. The underlying premise
is that any information on a text is represented as an &lt;em&gt;annotation&lt;&#x2F;em&gt;. We define
an annotation as any kind of remark, classification&#x2F;tagging on any particular
portion(s) of a text, or on the resource or annotation set as a whole, in which
case we can interpret annotations as &lt;em&gt;metadata&lt;&#x2F;em&gt;. Additionally, rather than
reference the text directly, annotations may point to other annotations
(higher-order annotation). Examples of annotation may be linguistic annotation,
structure&#x2F;layout annotation, editorial annotation, technical annotation, or
whatever comes to mind. Our model does not define any vocabularies whatsoever.&lt;&#x2F;p&gt;
&lt;p&gt;The underlying resource is taken in its most bare form without further
information; e.g. plain text (an ordered sequence of unicode points). &lt;em&gt;Any&lt;&#x2F;em&gt;
additional information would be considered an annotation in our model.
Interpreting and supporting particular formats&#x2F;encodings is up to the
implementations and opaque to the data model.&lt;&#x2F;p&gt;
&lt;p&gt;STAM does not depend on other more complex data models such as RDF, W3C Web
Annotations, TEI, FoLiA or whatever, but instead addresses the problem from a
more functional and pragmatic perspective. We separate pragmatics from
semantics and define a kind of lowest common denominator upon which further
solutions can be built. The user is free, and in fact encouraged, to use
vocabularies that are formalised elsewhere.&lt;&#x2F;p&gt;
&lt;p&gt;STAM is primarily intended as a model for data representation, and less so as a
format for data interchange. It is designed in such as way that an efficient
implementation (both speed &amp;amp; memory) is feasible. The form of such an
implementation either in a relational database, triple store, directly modelled
in memory, is left open to the implementation. Our model should also be
reducible to a more generalised acyclic directed graph model without much
difficulty.&lt;&#x2F;p&gt;
&lt;p&gt;Goals&#x2F;characteristics of STAM are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Simplicity&lt;&#x2F;em&gt; - the data model must be easy to understand for a user&#x2F;developer
to use and only contain what is needed, not more. We provide a &lt;strong&gt;minimal&lt;&#x2F;strong&gt;
foundation upon which other projects can build more complex solutions. These
are deliberately kept out of STAM itself. The notion that &lt;em&gt;everything is an
annotation&lt;&#x2F;em&gt; is at the core of STAM and one of the things that keeps it
simple.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Separation from semantics&lt;&#x2F;em&gt; - The data model does not commit to any
vocabulary or annotation paradigm. It must be flexible enough to express
whatever annotation paradigm a researcher wants to use, yet provide the
facilities to be specific enough for practical purposes. The model basically
allows for any kind of directed or undirected graph.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Standalone&lt;&#x2F;em&gt; - No dependency on other data models (e.g. RDF) aside from
Unicode and JSON for serialisation, no dependency on any software services.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Practical&lt;&#x2F;em&gt; - Rather than provide a theoretical framework, we primarily aim
to provide a practical specification and actual low-level tooling you can get
to work with right away.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Performant&lt;&#x2F;em&gt; - The data model is set up in such a way that it allows for
efficient&#x2F;performant implementations, with regard to processing requirements
but especially memory consumption. The model should be suitable for big data
(millions of annotations). We sit at a point where we deem to have an optimal
trade-off between simplicity, flexibility and performance.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Import &amp;amp; Export&lt;&#x2F;em&gt; - Reads&#x2F;writes a simple JSON format. But also designed with
export to more complex formats in mind (such as W3C Web Annotations &#x2F; RDF)
and imports from common formats such as CONLL. Note that although STAM puts
no constraints on annotation paradigms and vocabularies, higher data models
may.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The name STAM, an acronym for &lt;em&gt;&quot;Stand-off Text Annotation Model&quot;&lt;&#x2F;em&gt;, is Dutch,
Swedish, Afrikaans and Frisian for &lt;em&gt;&quot;trunk&quot;&lt;&#x2F;em&gt; (as in the trunk of a tree), the
name itself depicts a solid foundation upon which more elaborate solutions can be built.&lt;&#x2F;p&gt;
&lt;p&gt;STAM is introduced on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;annotation.github.io&#x2F;stam&quot;&gt;the STAM website&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;implementations&quot;&gt;Implementations&lt;&#x2F;h2&gt;
&lt;p&gt;The following implementations are available:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-rust&quot;&gt;stam-rust&lt;&#x2F;a&gt; - A STAM library written in Rust, aims to be a &lt;em&gt;full STAM implementation&lt;&#x2F;em&gt; with high performance and &lt;em&gt;memory-based&lt;&#x2F;em&gt; storage model.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-python&quot;&gt;stam-python&lt;&#x2F;a&gt; - A STAM Library for Python. This is not an independent implementation but it is a Python binding to the above Rust library.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;annotation&#x2F;stam-tools&quot;&gt;stam-tools&lt;&#x2F;a&gt; - A set of CLI tools for STAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Todo.txt-more: Efficiently managing your todo list and your time</title>
          <pubDate>Sat, 31 Dec 2022 17:07:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/todo/</link>
          <guid>https://proycon.anaproy.nl/posts/todo/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/todo/">&lt;h1 id=&quot;todo-txt-more-efficiently-managing-your-todo-list-and-your-time&quot;&gt;Todo.txt More: Efficiently managing your todo list and your time&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;I tend to get fairly enthusiastic when it comes to lists, even more so when there&#x27;s a chance to optimise my productivity. The end of the year is a time for looking backward and forward, so what better time to revise my time management solution than this?&lt;&#x2F;p&gt;
&lt;p&gt;Over the years, I&#x27;ve tried various ways of keeping todo lists. Some methods were more successful than others. Too often I found myself abandoning the lists I had because it introduced too much overhead (or I simply lacked the discipline to maintain them), or the lists themselves got too cluttered and I lost overview, or they were too detached from the places where I actually needed them.&lt;&#x2F;p&gt;
&lt;p&gt;Two things that did work well for me in recent years are the use of Github issues for software related tasks, and keeping track of todo tasks related to mails by tagging the mails (using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;notmuchmail.org&quot;&gt;notmuch&lt;&#x2F;a&gt;. However, that is already two different systems, and they don&#x27;t cover all possible todo tasks. Aside from Github I also use Sourcehut and Gitlab for software development, and at work they use Jira, so that would introduce even more systems to check. Such &lt;em&gt;context switches&lt;&#x2F;em&gt;, the need to check different systems, have an especially large negative impact on productivity. My aim is to minimize these.&lt;&#x2F;p&gt;
&lt;p&gt;What I want is one unified way to see and organise my todo tasks, regardless of where they come from. I also want to add tasks like simple household chores or hobby projects, with the main aim so I don&#x27;t forget them. I want to be able to efficiently search through them so I can easily get all tasks pertaining to a specific project, a specific employer, a specific priority, etc..&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m now coming back to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;todotxt.org&#x2F;&quot;&gt;todo.txt&lt;&#x2F;a&gt; to do all this. This is a simple minimalistic solution, developed by Gina Trapani, that&#x27;s already been around since 2006. It keeps todo tasks in a simple plain text file and introduces some basic syntax for tagging. A command line shell script called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;todotxt&#x2F;todo.txt-cli&quot;&gt;todo.txt-cli&lt;&#x2F;a&gt; is provided for various basic operations. It requires no complicated database solutions, no complex software implementations, and it can just be used from your favourite text editor (vim in my case) even without any bells and whistles.&lt;&#x2F;p&gt;
&lt;p&gt;Todo.txt has a simple tag syntax, tags starting with &lt;code&gt;+&lt;&#x2F;code&gt; are &lt;em&gt;projects&lt;&#x2F;em&gt;, tags starting with &lt;code&gt;@&lt;&#x2F;code&gt; indicate &lt;em&gt;contexts&lt;&#x2F;em&gt;, and I add &lt;code&gt;#&lt;&#x2F;code&gt; for other kinds of tags (hashtags). Then there is a simple tag for priorities. With todo.txt I&#x27;m making use of priorities A, B and C only (and D as a special category). I use them as follows that could also map to a kind of kanban-style:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;(A)&lt;&#x2F;em&gt; for tasks to do today&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;(B)&lt;&#x2F;em&gt; for tasks to do later this week&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;(C)&lt;&#x2F;em&gt; for tasks after this week (limited)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;(D)&lt;&#x2F;em&gt; for tasks that are temporarily blocked&#x2F;waiting on hold&lt;&#x2F;li&gt;
&lt;li&gt;Then there&#x27;s a whole &lt;em&gt;backlog&lt;&#x2F;em&gt; of tasks without a priority, these also act as a trove storing ideas I might or might not get to.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Priorities are adjusted as needed, corresponding to moving tasks between columns on a kanban board. I&#x27;m using three main &lt;em&gt;contexts&lt;&#x2F;em&gt; &lt;code&gt;@work&lt;&#x2F;code&gt; and &lt;code&gt;@hobby&lt;&#x2F;code&gt; and &lt;code&gt;@chore&lt;&#x2F;code&gt; to attempt to create a bit of a distinction between my work and private life.&lt;&#x2F;p&gt;
&lt;p&gt;There is already a wide variety of community software that handles &lt;code&gt;todo.txt&lt;&#x2F;code&gt;, but I was still missing some features, or they weren&#x27;t implemented in other extensions in the way I prefer. So I took towards improving the &lt;code&gt;todo.txt&lt;&#x2F;code&gt; experience. I will describe what I added and how it can be used in the remainder of this post.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;todo-txt-more&quot;&gt;Todo.txt More&lt;&#x2F;h2&gt;
&lt;p&gt;The &lt;code&gt;todo.txt&lt;&#x2F;code&gt; CLI implementation offers a nice way to extend it. I have done so and implemented various extensions which I felt were missing. I call this &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&quot;&gt;Todo.txt More&lt;&#x2F;a&gt;. Go to its &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&quot;&gt;Sourcehut page&lt;&#x2F;a&gt; to find the source code repository and installation instructions.&lt;&#x2F;p&gt;
&lt;p&gt;Todotxt More contains the following extensions to todo.txt-cli:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;more&lt;&#x2F;code&gt; -  Main entry point, shortcut invoking various underlying plugins. By default displays a list with better sorting (&lt;code&gt;relsort&lt;&#x2F;code&gt;) and colour highlighting (&lt;code&gt;format&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;edit&lt;&#x2F;code&gt; - Invokes editor to edit todo.txt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;show&lt;&#x2F;code&gt; - Show a single task based on item number&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;priup&lt;&#x2F;code&gt; - Priority up&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pridown&lt;&#x2F;code&gt; - Priority down (down to C, deprioritised after)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rofi&lt;&#x2F;code&gt; - Control todo.txt interactively via rofi (a menu program)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;fzf&lt;&#x2F;code&gt; - Control todo.txt interactively via fzf (a terminal based fuzzy finder)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;issue&lt;&#x2F;code&gt; - View and sync issues (sync with Github)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;timetrack&lt;&#x2F;code&gt; - Track time on projects and contexts, and produce summary reports&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;notmuch&lt;&#x2F;code&gt; - Sync with notmuch mail based on tags like &#x27;todo&#x27; and&#x2F;or &#x27;reply&#x27;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cal&lt;&#x2F;code&gt; - Import iCalendar&#x2F;vCalendar (ics) files&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;autoprio&lt;&#x2F;code&gt; - Automatically assign priorities (mostly based on due dates)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The following are usually not called directly:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;format&lt;&#x2F;code&gt; - Better coloured output, supports ANSI colours, pango, and html&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;relsort&lt;&#x2F;code&gt; -  Better sorting with relative dates&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;actionmenu&lt;&#x2F;code&gt; - The menu used in the fzf and rofi interfaces.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;One of the primary additions is a simple interactive interface powered by either &lt;code&gt;fzf&lt;&#x2F;code&gt; (terminal) or &lt;code&gt;rofi&lt;&#x2F;code&gt; (GUI). Both are fuzzy finders and allow to quickly navigate the todo tasks.&lt;&#x2F;p&gt;
&lt;p&gt;To display your tasks non-interactively, we recommend you use &lt;code&gt;todo.sh more&lt;&#x2F;code&gt; (short for &lt;code&gt;todo.sh more list&lt;&#x2F;code&gt;) rather than the traditional &lt;code&gt;todo.sh list&lt;&#x2F;code&gt;; &lt;code&gt;todo.sh more&lt;&#x2F;code&gt; redefines several built-in commands. A quick recommended way to use this from your shell is to set an alias &lt;code&gt;t=&quot;todo.sh more&quot;&lt;&#x2F;code&gt;, you can then do &lt;code&gt;t list&lt;&#x2F;code&gt; (or just &lt;code&gt;t&lt;&#x2F;code&gt; as a shortcut),&lt;code&gt;t add&lt;&#x2F;code&gt;,&lt;code&gt;t done&lt;&#x2F;code&gt; etc... All the regular commands as well as the extensions should be available.&lt;&#x2F;p&gt;
&lt;p&gt;Todo.txt-more will invoke the &lt;code&gt;format&lt;&#x2F;code&gt; and &lt;code&gt;relsort&lt;&#x2F;code&gt; extensions to do better colour highlighting and better relative sorting. You can pass any actions you also pass to &lt;code&gt;todo.sh&lt;&#x2F;code&gt;. Here is an example:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;morelist.png&quot; alt=&quot;todo.sh more list&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can note the following in this example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;todo.txt-more adds hashtags (starting with #) and will colour them differently (&lt;code&gt;todo.sh format&lt;&#x2F;code&gt;), context (&lt;code&gt;@&lt;&#x2F;code&gt;) and projects (&lt;code&gt;+&lt;&#x2F;code&gt;) will also get a distinctive colour.&lt;&#x2F;li&gt;
&lt;li&gt;tasks with priority will always be shown before any items without priority (&lt;code&gt;todo.sh relsort&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;tasks with a creation date will be shown using their relative date in days (e.g. &lt;em&gt;6d&lt;&#x2F;em&gt;) , and sorted accordingly.
&lt;ul&gt;
&lt;li&gt;though not shown in this example, tasks with a due date (&lt;code&gt;due:&lt;&#x2F;code&gt; attribute) will be shown using their relative date in days (e.g. 6d+), and sorted accordingly, this takes precedence over creation date.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;you see tasks synced from GitHub (&lt;code&gt;issue&lt;&#x2F;code&gt;) and from my mail (&lt;code&gt;notmuch&lt;&#x2F;code&gt;), more about this later...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Between the &lt;code&gt;more&lt;&#x2F;code&gt; and &lt;code&gt;lists&lt;&#x2F;code&gt; actions, you can inject the format you want for the output and the colouring.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ansi&lt;&#x2F;code&gt; - ANSI escape sequences, good for terminals, this is the default&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pango&lt;&#x2F;code&gt; - Pango markup, good when used with GUI applications like rofi, dmenu with pango patch, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;wayout&quot;&gt;wayout&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;html&lt;&#x2F;code&gt; - HTML, good for exporting to the web&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;markdown&lt;&#x2F;code&gt; - Markdown syntax&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;slack&lt;&#x2F;code&gt; - Slack&#x27;s butchered version of markdown syntax, good for pasting into Slack.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You might, however, prefer a more interactive view that allows you to do fuzzy search and makes the tasks directly actionable.
If you run &lt;code&gt;todo.sh fzf list @work&lt;&#x2F;code&gt;, you&#x27;d the see same view as the static one, but interactively using fzf:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;fzf.png&quot; alt=&quot;todo.sh fancy list&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Or run &lt;code&gt;todo.sh rofi list @work&lt;&#x2F;code&gt;, for the same thing in rofi, which opens a graphical menu. This is great to tie to a keybinding in your (tiling?) window manager:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;rofi.png&quot; alt=&quot;todo.sh rofi list&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Note that your rofi may look different depending on the theme you are using.&lt;&#x2F;p&gt;
&lt;p&gt;The rofi method even binds some shortcuts keys for quick actions like prioritisation and editing. Moreover, you can directly add new entries with rofi by just typing the full task entry in the search field and pressing enter. For existing items, once you select an item in either rofi or fzf, you&#x27;re presented with an action menu (&lt;code&gt;todo.sh actionmenu&lt;&#x2F;code&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;actionmenu.png&quot; alt=&quot;action menu&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;notifications&quot;&gt;Notifications&lt;&#x2F;h2&gt;
&lt;p&gt;You can enable feedback via your notification daemon (via &lt;code&gt;notify-send&lt;&#x2F;code&gt;) by setting environment variable &lt;code&gt;TODOTXT_NOTIFY=1&lt;&#x2F;code&gt;. If set, you will get feedback notifications on various actions.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;issue-syncing&quot;&gt;Issue syncing&lt;&#x2F;h3&gt;
&lt;p&gt;If you use Github extensively, like I do, its issue tracker is likely an important source of information for your todo tasks. However, it&#x27;s cumbersome to have issues separate from your todo.txt and effectively have two systems you need to check. The &lt;code&gt;issue&lt;&#x2F;code&gt; extension should solve this problem. Its job is to sync issues (including pull requests) from github with your todo.txt. It will sync &lt;em&gt;all issues assigned to you&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The sync works as follows:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All tasks that are issues are marked with &lt;code&gt;issue:&lt;&#x2F;code&gt; and the &lt;em&gt;full path&lt;&#x2F;em&gt; to the issue.&lt;&#x2F;li&gt;
&lt;li&gt;A sync is done by calling &lt;code&gt;todo.sh issue sync&lt;&#x2F;code&gt;, in order for this to work you need to have the environment variable &lt;code&gt;$GITHUB_TOKEN&lt;&#x2F;code&gt; set to a Github API token.&lt;&#x2F;li&gt;
&lt;li&gt;Any github issue that is &lt;em&gt;assigned to you&lt;&#x2F;em&gt; and not yet in &lt;code&gt;todo.txt&lt;&#x2F;code&gt; or &lt;code&gt;done.txt&lt;&#x2F;code&gt; will be added (without prioritisation)&lt;&#x2F;li&gt;
&lt;li&gt;The Github repository name is translated to a project name (e.g &lt;code&gt;proycon&#x2F;codemeta-harvester&lt;&#x2F;code&gt; becomes &lt;code&gt;+codemetaharvester&lt;&#x2F;code&gt;, punctuation etc is stripped and all is lowercased) and will be shown at the beginning of the task line.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;code&gt;todo.txt&lt;&#x2F;code&gt; contains just the issue title, its labels, project, not the body or comments. The rofi and fzf extensions offer an easy way to inspect an issue in the browser.&lt;&#x2F;li&gt;
&lt;li&gt;If you close a task that is also a github issue via the action menu in rofi&#x2F;fzf or via &lt;code&gt;task.sh issue done&lt;&#x2F;code&gt;, an API call will go out to GitHub to close the issue.&lt;&#x2F;li&gt;
&lt;li&gt;Projects may also translate to further projects or contexts, you can customize this in a JSON file and pass the JSON filename in environment variable &lt;code&gt;$TODO_ISSUE_INFERMAP&lt;&#x2F;code&gt;. Example:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;codemetapy&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@huc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@clariah&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;+wp2tooldiscovery&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;codemetaharvester&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@huc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@clariah&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;+wp2tooldiscovery&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;codemetaserver&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@huc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@clariah&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;+wp2tooldiscovery&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;These will all be appended to the end.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Github labels will be added as hashtags immediately after the project name.
You can optionally translate these through another map defined in a JSON file and filename in &lt;code&gt;$TODO_ISSUE_LABELMAP&lt;&#x2F;code&gt;. Example:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;feature&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;feat&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;enhancement&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;feat&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Tasks will have a creation date corresponding to the creation data of the issue.&lt;&#x2F;li&gt;
&lt;li&gt;An extra &lt;code&gt;updated:&lt;&#x2F;code&gt;  attribute is added with the last updated time. This is updated on sync.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There are a few limitations to be aware of:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The task description&#x2F;issue subject is synced from github to task.txt only once, editing it in either has no effect on the other.&lt;&#x2F;li&gt;
&lt;li&gt;When Github labels change, they will be synced back to todo.txt (but will appear at the end when they&#x27;re new). You can&#x27;t sync hashtags to github labels the other way round.&lt;&#x2F;li&gt;
&lt;li&gt;When an issue is closed and reopened, it won&#x27;t be detected in the sync&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Though currently limited to Github, I hope to add Gitlab and Sourcehut support as well at a later stage.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mail-syncing&quot;&gt;Mail syncing&lt;&#x2F;h3&gt;
&lt;p&gt;Another common source of todo tasks is email. I often receive mails that require some kind of follow-up action, or that I simply have to reply to. I am using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;notmuchmail.org&quot;&gt;notmuch&lt;&#x2F;a&gt; as a means to add tags to my mail and make it quickly searchable. I use a &lt;em&gt;reply&lt;&#x2F;em&gt; tag for mail I still have to reply to, and &lt;em&gt;todo&lt;&#x2F;em&gt; for mail that requires another follow-up actions. Of course, I want both in my &lt;code&gt;todo.txt&lt;&#x2F;code&gt; so I have everything in one place again.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;todo.txt notmuch&lt;&#x2F;code&gt; extension syncs with your notmuch database. It runs a query (defined in environment variable &lt;code&gt;$TODOTXT_NOTMUCH_SEARCH&lt;&#x2F;code&gt;, which defaults to &lt;code&gt;tag:todo or tag:reply&lt;&#x2F;code&gt; fitting my own use-case) and adds all threads it finds to &lt;code&gt;todo.txt&lt;&#x2F;code&gt;. It is a one-way sync. Synced mails receive the context &lt;code&gt;@mail&lt;&#x2F;code&gt; and the notmuch tag translates to a hashtag. Any further mappings between notmuch tags and todo.txt can be configured in a JSON file, filename stored in &lt;code&gt;$TODOTXT_NOTMUCH_MAP&lt;&#x2F;code&gt;. Example:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;personal&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@hobby&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;sxmo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;+sxmo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@hobby&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;folia&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;+folia&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@huc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;@work&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;time-tracking&quot;&gt;Time tracking&lt;&#x2F;h3&gt;
&lt;p&gt;Employers often require you to track your working hours, especially if you are working on a variety of distinct projects. Keeping track of this manually is a waste of time. If you have your &lt;code&gt;todo.txt&lt;&#x2F;code&gt; workflow in place, we can simply take advantage of this for tracking time as well. This is done using &lt;code&gt;todo.txt timetrack&lt;&#x2F;code&gt; and it can be invoked interactively via the action menu as presented by fzf or rofi. When you say &lt;em&gt;start task&lt;&#x2F;em&gt; a simply eentry of the full task line, prepended with the current date and time, is registered to a file &lt;code&gt;timetrack.txt&lt;&#x2F;code&gt; that lives alongside your &lt;code&gt;todo.txt&lt;&#x2F;code&gt; and &lt;code&gt;done.txt&lt;&#x2F;code&gt;. Only one task can be tracked at any given time (people suck at multitasking anyway, so better not pretend you can do it). When you start a new task the previous one ends. There is also &lt;code&gt;todo.sh timetrack stop&lt;&#x2F;code&gt; to stop tracking, which will simply register an &lt;em&gt;idle&lt;&#x2F;em&gt; entry in &lt;code&gt;timetrack.txt&lt;&#x2F;code&gt;. I recommend to automatically trigger this action when your screensaver&#x2F;screenlock kicks in so you don&#x27;t have to worry about it. The tracking will also be stopped automatically if you mark the currently tracked task as done via &lt;code&gt;todo.sh more done&lt;&#x2F;code&gt; or fzf&#x2F;rofi.&lt;&#x2F;p&gt;
&lt;p&gt;To see the task you are currently working on, run &lt;code&gt;todo.sh timetrack current&lt;&#x2F;code&gt;. This may be worth adding to whatever bar (waybar&#x2F;polybar&#x2F;dwm&#x27;s bar&#x2F;etc) you use so you can see it at all times.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ todo.sh timetrack current -d                  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1h13m +todotxtmore implement timetrack summary options @hobby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;timetrack.txt&lt;&#x2F;code&gt; log can be visualised with &lt;code&gt;todo.sh timetrack log&lt;&#x2F;code&gt;, it optionally takes a start date and an end date (non-inclusive) as parameters (YYYY-MM-DD). Add the &lt;code&gt;-d&lt;&#x2F;code&gt; option if you want to have relative time (durations), use &lt;code&gt;-s&lt;&#x2F;code&gt; instead if you want it in raw seconds, these are also available for &lt;code&gt;timetrack current&lt;&#x2F;code&gt; as shown above.&lt;&#x2F;p&gt;
&lt;p&gt;Using &lt;code&gt;todo.sh timetrack daysummary&lt;&#x2F;code&gt; you can get a summary of total time spent, per day, on specific contexts or projects. It aggregates for each day all projects (&lt;code&gt;+&lt;&#x2F;code&gt;) and contexts (&lt;code&gt;@&lt;&#x2F;code&gt;) mentioned in the log.&lt;&#x2F;p&gt;
&lt;p&gt;Example output:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ todo.sh timetrack daysummary 2022-12-29&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2022-12-29 Thu 8h52m @hobby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2022-12-29 Thu 4h8m +todotxtmore&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2022-12-29 Thu 14m @generic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2022-12-29 Thu 14m @entertainment&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Be aware that the contexts and projects used in aggregation are not mutually exclusive. You can use any combination you want.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, there is a &lt;code&gt;weeksummary&lt;&#x2F;code&gt; and &lt;code&gt;monthsummary&lt;&#x2F;code&gt; that aggregates per week&#x2F;month. You may add the &lt;code&gt;-all&lt;&#x2F;code&gt; parameter to see individual tasks again (rather than just contexts and projects).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;calendar&quot;&gt;Calendar&lt;&#x2F;h3&gt;
&lt;p&gt;There is a fair degree of overlap between todo lists and calendars, even though they are distinct perspectives on your time planning. Todo.txt traditionally caters towards todo lists  and not calendars, due dates are not in the initial design but can be easily using a &lt;code&gt;due&lt;&#x2F;code&gt; attribute, as many other implementations also do. Todo.txt-more follows this convention and takes &lt;code&gt;due&lt;&#x2F;code&gt; dates into account when sorting (&lt;code&gt;relsort&lt;&#x2F;code&gt;) and highlighting.&lt;&#x2F;p&gt;
&lt;p&gt;This opens up the road to expressing calendar items in &lt;code&gt;todo.txt&lt;&#x2F;code&gt;. The &lt;code&gt;cal&lt;&#x2F;code&gt; extension allows importing iCalendar (ics) format via &lt;code&gt;todo.sh cal import&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, you can export todo items to iCalendar format using &lt;code&gt;todo.sh cal export&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;cal&lt;&#x2F;code&gt; extension also has some specific visualisations via &lt;code&gt;todo.sh cal list&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;callist.png&quot; alt=&quot;todo.sh cal list&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Add the &lt;code&gt;--headers&lt;&#x2F;code&gt; parameter for a more verbose view grouped per day.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&#x2F;blob&#x2F;master&#x2F;doc&#x2F;callistheaders.png&quot; alt=&quot;todo.sh cal list --headers&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The latter is also what you get if you just run &lt;code&gt;todo.sh cal&lt;&#x2F;code&gt; without further arguments.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contribute&quot;&gt;Contribute&lt;&#x2F;h2&gt;
&lt;p&gt;If you want to contribute, git clone the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;todotxt-more&quot;&gt;source code repository&lt;&#x2F;a&gt; and send patches to my &lt;a href=&quot;mailto:~proycon&#x2F;public-inbox@lists.sr.ht&quot;&gt;public inbox&lt;&#x2F;a&gt;. Read about &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-send-email.io&#x2F;&quot;&gt;the git e-mail workflow&lt;&#x2F;a&gt; if you are not yet familiar with it.&lt;&#x2F;p&gt;
&lt;p&gt;The code is currently in a fairly early stage of development and needs further testing and cleanup.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Todo.txt More</title>
          <pubDate>Sat, 31 Dec 2022 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/todotxtmore/</link>
          <guid>https://proycon.anaproy.nl/software/todotxtmore/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/todotxtmore/">&lt;p&gt;This is a set of complementary extensions for todo.txt . I wrote an extensive [&#x2F;posts&#x2F;todo&#x2F;](blog post about it) which should give a good impression of what it can do.
The following extensions are implemented:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;more&lt;&#x2F;code&gt; -  Main entry point, shortcut invoking various underlying plugins. By default displays a list with better sorting (&lt;code&gt;relsort&lt;&#x2F;code&gt;) and colour highlighting (&lt;code&gt;format&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;edit&lt;&#x2F;code&gt; - Invokes editor to edit todo.txt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;show&lt;&#x2F;code&gt; - Show a single task based on item number&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;priup&lt;&#x2F;code&gt; - Priority up&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pridown&lt;&#x2F;code&gt; - Priority down (down to C, depriotitised after)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rofi&lt;&#x2F;code&gt; - Control todo.txt interactively via rofi (a menu program)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;fzf&lt;&#x2F;code&gt; - Control todo.txt interactively via fzf (a terminal based fuzzy finder)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;issue&lt;&#x2F;code&gt; - View and sync issues (sync with Github)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;timetrack&lt;&#x2F;code&gt; - Track time on projects and contexts, and produce summary reports&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;notmuch&lt;&#x2F;code&gt; - Sync with notmuch mail based on tags like &#x27;todo&#x27; and&#x2F;or &#x27;reply&#x27;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cal&lt;&#x2F;code&gt; - Import iCalendar&#x2F;vCalendar (ics) files&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;autoprio&lt;&#x2F;code&gt; - Automatically assign priorities (mostly based on due dates)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The following are usually not called directly:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;format&lt;&#x2F;code&gt; - Better coloured output, supports ANSI colours, pango, and html&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;relsort&lt;&#x2F;code&gt; -  Better sorting with relative dates&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;actionmenu&lt;&#x2F;code&gt; - The menu used in the fzf and rofi interfaces.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>codemeta-harvester</title>
          <pubDate>Tue, 17 May 2022 00:04:34 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/codemetaharvester/</link>
          <guid>https://proycon.anaproy.nl/software/codemetaharvester/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/codemetaharvester/">&lt;h1 id=&quot;codemeta-harvester&quot;&gt;Codemeta Harvester&lt;&#x2F;h1&gt;
&lt;p&gt;This is a harvester for software metadata. It actively attempts to detect and
convert software metadata in source code repositories and converts this to a
unified &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codemeta.github.io&quot;&gt;codemeta&lt;&#x2F;a&gt; representation.&lt;&#x2F;p&gt;
&lt;p&gt;The tool is implemented as a simple POSIX shell script that in turn invokes a number of tools to
do the actual work:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;codemetapy&quot;&gt;codemetapy&lt;&#x2F;a&gt; - Conversion to codemeta from various other metadata formats&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;citation-file-format&#x2F;cff-converter-python&quot;&gt;cffconvert&lt;&#x2F;a&gt; - Conversion from CITATION.cff to codemeta&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A few simple additional metadata extractions methods, as simple shell scripts, have been implemented alongside the main script.&lt;&#x2F;p&gt;
&lt;p&gt;This harvester can be used for two purposes:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;to harvest a possibly large number of software projects, for instance to make them available in some kind of search portal.&lt;&#x2F;li&gt;
&lt;li&gt;as a means to produce a &lt;code&gt;codemeta.json&lt;&#x2F;code&gt; file for your own project&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;presentation&quot;&gt;Presentation&lt;&#x2F;h2&gt;
&lt;p&gt;A presentation recorded presentation about the whole tool discovery pipeline, developed in the scope of the CLARIAH project, is available &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;w&#x2F;tKbjBLjtNvLZ11TsL9YHdu&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Analiticcl</title>
          <pubDate>Sat, 25 Sep 2021 00:04:34 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/analiticcl/</link>
          <guid>https://proycon.anaproy.nl/software/analiticcl/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/analiticcl/">&lt;h1 id=&quot;analiticcl&quot;&gt;Analiticcl&lt;&#x2F;h1&gt;
&lt;p&gt;Analiticcl is an approximate string matching or fuzzy-matching system that can
be used for spelling correction or text normalisation (such as post-OCR
correction or post-HTR correction). Texts can be checked against a validated or
corpus-derived lexicon (with or without frequency information) and spelling
variants will be returned.&lt;&#x2F;p&gt;
&lt;p&gt;The distinguishing feature of the system is the usage of anagram hashing to
drastically reduce the search space and make quick lookups possible even over
larger edit distances. The underlying idea is largely derived from prior work
TICCL (Reynaert 2010; Reynaert 2004), which was implemented in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;languagemachines&#x2F;ticcltools&quot;&gt;ticcltools&lt;&#x2F;a&gt;. This analiticcl
implementation attempts to re-implement the core of these ideas from scratch,
but also introduces some novelties, such as the introduction of prime factors
for improved anagram hashing. We aim at a high-performant implementation
written in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;Aside from reading &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;analiticcl&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;the
documentation&lt;&#x2F;a&gt;,
you can also view an in-depth &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;w&#x2F;rBeL5KEGdag1N2KVb8JkTe&quot;&gt;presentation
video&lt;&#x2F;a&gt; that was presented at the
KNAW Humanities Cluster in January 2022.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;master&#x2F;analiticcl.gif&quot; alt=&quot;Analiticcl demo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>wvkbd: On-screen keyboard for wlroots </title>
          <pubDate>Sun, 22 Aug 2021 16:04:34 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/wvkbd/</link>
          <guid>https://proycon.anaproy.nl/software/wvkbd/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/wvkbd/">&lt;h1 id=&quot;wvkbd-on-screen-keyboard-for-wl-roots&quot;&gt;wvkbd: On-screen keyboard for wl-roots&lt;&#x2F;h1&gt;
&lt;p&gt;This project aims to deliver a minimal but practically usable implementation of a wlroots on-screen keyboard in legible C.&lt;&#x2F;p&gt;
&lt;p&gt;It is not my original work. The project was started by John Sullivan. I and other Sxmo developers extended it and took over maintainership.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>SXMO: Simple X mobile - presented at AlpineConf 2021</title>
          <pubDate>Sat, 15 May 2021 16:30:00 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/sxmo-alpine-conf/</link>
          <guid>https://proycon.anaproy.nl/posts/sxmo-alpine-conf/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/sxmo-alpine-conf/">&lt;h1 id=&quot;sxmo-simple-x-mobile-a-minimalist-environment-for-linux-smartphones&quot;&gt;Sxmo: Simple X mobile - A minimalist environment for Linux smartphones&lt;&#x2F;h1&gt;
&lt;p&gt;We presented Sxmo at AlpineConf 2021:&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;video width=&quot;800&quot; height=&quot;600&quot; controls&gt;
        &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;anaproy.nl&amp;#x2F;proycon&amp;#x2F;pub&amp;#x2F;sxmo_alpineconf.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&#x2F;&gt;
    &lt;&#x2F;video&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Details shown in this video:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Hardware: Pinephone 1.2&lt;&#x2F;li&gt;
&lt;li&gt;Environment: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~mil&#x2F;Sxmo&quot;&gt;Sxmo&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Distribution: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;postmarketos.org&quot;&gt;PostmarketOS&lt;&#x2F;a&gt;, on top of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alpinelinux.org&quot;&gt;Alpine Linux&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Window Manager: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dwm.suckless.org&quot;&gt;dwm&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Terminal: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;st.suckless.org&quot;&gt;st&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Virtual Keyboard: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tools.suckless.org&#x2F;x&#x2F;svkbd&quot;&gt;svkbd&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Note: our IRC channel moved to oftc.net rather than Freenode (as shown in the video) due to the hostile takeover of the latter network.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>clickclack</title>
          <pubDate>Mon, 15 Mar 2021 16:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/clickclack/</link>
          <guid>https://proycon.anaproy.nl/software/clickclack/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/clickclack/">&lt;h1 id=&quot;clickclack&quot;&gt;Clickclack&lt;&#x2F;h1&gt;
&lt;p&gt;Clickclack is a simple haptic feedback and audio feedback tool. It does nothing more than emulate the clickclack sound and vibration when pressing keys.&lt;&#x2F;p&gt;
&lt;p&gt;This tools reads from standard input and emits a vibration and&#x2F;or a sound whenever it receives a character. It is intented to be used in combination with a virtual keyboard like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tools.suckless.org&#x2F;x&#x2F;svkbd&quot;&gt;svkbd&lt;&#x2F;a&gt; (X11) or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;wvkbd&quot;&gt;wvkbd&lt;&#x2F;a&gt; (wayland).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Een antwoord op corona-skepsis</title>
          <pubDate>Thu, 18 Feb 2021 09:25:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/corona-skepsis/</link>
          <guid>https://proycon.anaproy.nl/posts/corona-skepsis/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/corona-skepsis/">&lt;h1 id=&quot;een-antwoord-op-corona-skepsis&quot;&gt;Een antwoord op corona-skepsis&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;inleiding&quot;&gt;Inleiding&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;We zitten midden in een pandemie met ongekende maatregelen die de meeste van ons in het westen nog nooit gezien hebben.
Het coronavirus en alle maatregelen zorgen begrijpelijkerwijs wereldwijd voor opschudding. In dit opiniestuk reageer ik
op het verschijnsel van de coronaskepticus, of in extreme de complotdenker, en probeer ik mijn visie hierop voor mezelf
en anderen wat te duiden.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Toen de eerste signalen van het coronavirus uit China kwamen trok dit al snel mijn aandacht. In eerste instantie kwam
het voornamelijk vanuit burgerjournalistiek naar boven. Ik volgde o.a. Fang Bin en Chen Qiushi. De eerste reactie van de
overheid daar was om die geluiden hard te onderdrukken. Zo ook werden de allereerste corona-bevindingen van de arts Li
Wenliang onderdrukt. Hij zou later aan het virus overlijden. Je kan je afvragen of een sneller ingrijpen in plaats van
een typische repressie reactie de pandemie had kunnen voorkomen. Beide genoemde burgerjournalisten zijn overigens nog
steeds &#x27;vermist&#x27; in bepaalde vorm.  Mijn zorgen gingen niet alleen naar de gezondheidsrisico&#x27;s van het virus uit, maar
ook naar de omgang met informatie en maatregelen van de Chinese overheid. Een duidelijk beeld vormen over de situatie
daar was lastig als er van zo&#x27;n sterke censuur sprake is, maar dat er een uit de hand gelopen gezondheidssituatie
ontstond leek al snel niet meer te ontkennen. Later kondigde de overheid er strikte quarantaines af, ze waren erg
drastisch maar bleken wel effectief.&lt;&#x2F;p&gt;
&lt;p&gt;Ik kwam al vroeg op het spoor van Dr. John Campbell [^campbell], een gepensioneerde Britse verpleegkundige en academicus die een
beetje een youtube hit is geworden en al vanaf het begin nauwgezet allerlei ontwikkelingen rond het virus volgt. Hij
presenteert deze met zijn eigen duiding duidelijk en onvermoeibaar aan het algemene publiek; op karakteristieke wijze
met geprinte velletjes papier en een markeerpen.&lt;&#x2F;p&gt;
&lt;p&gt;Dat het virus mogelijk pandemische vormen aan zou kunnen nemen, hield ik al snel voor een realistische mogelijkheid. Met
het eerste SARS virus zijn we hier de dans ontsprongen gelukkig, maar vele wetenschappers voorspelden al langer dat het
een kwestie van tijd zou zijn eer een virus mondiaal om zich heen grijpt. Gegeven de globalisatie, grote
bevolkingsdichtheid, en omgang met dieren die vaak veel te wensen overlaat, was dit potentieel al geruime tijd aanwezig
en een reële dreiging volgens mij.&lt;&#x2F;p&gt;
&lt;p&gt;In die tijd nam ik ook maar het zekere voor het onzekere en kocht ik alvast een klein doosje FFP2 mondkapjes. Toen kon
het nog prima want het was voor de meeste mensen nog een ver-van-mijn-bed-show. Nu geef ik toe dat ik van karakter nogal
snel op m&#x27;n hoede ben als het om het oplopen van ziektes gaat, dus ik nam het risico snel serieus gegeven de tot dan toe
beschikbare informatie. Toen het in Italië opdook begon ik zelf al met wat beperkende voorzorgsmaatregelen. Ik werkte
sowieso altijd al vanuit huis en ben van nature vrij introvert, dus het is voor mij lang niet zo moeilijk als het voor
vele anderen is.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;flatten-the-curve&quot;&gt;Flatten the curve&lt;&#x2F;h2&gt;
&lt;p&gt;Dat er uiteindelijk maatregelen vanuit de overheid kwamen om de verspreiding van het virus in te dammen vond ik dus ook
zeer terecht en noodzakelijk. Ik zie het op zich ook als een erg positief teken van medemenselijkheid dat de
maatschappij in staat is zichzelf tijdelijk een halt toe te roepen om elkaar in bescherming te nemen. Dat een
centrum-rechts kabinet kabinet toch in staat is de economie niet voor alles te laten gaan vond ik persoonlijk wel een
hoopvol teken. Een andere hoopvol teken in deze lastige tijden vind ik dat er hiermee wellicht een hernieuwde waardering
is gekomen voor de publieke sector, de &#x27;verzorgingstaat&#x27; en de zogenaamde essentiële beroepen. Een derde hoopvolle
ontwikkeling is de enorme snelheid waarmee wetenschappers er in geslaagd zijn om succesvolle vaccins tegen dit virus te
ontwikkelen, waaronder een hele nieuwe generatie aan mRNA vaccins. De cijfers die we van vaccinatie-koploper Israël
krijgen zijn veelbelovend. Het is toch met deze oplossing dat we uit eindelijk het virus eronder zullen moeten krijgen,
als het zich niet tot een onschadelijkere variant muteert in de tussentijd.&lt;&#x2F;p&gt;
&lt;p&gt;Het argument dat er juist op het gebied van essentiële beroepen als de zorg veel afbreuk is gedaan deel ik wel. Is er
niet te veel bezuinigd op de zorg?  Hadden we niet veel meer IC-capaciteit moeten hebben, zoals bijvoorbeeld Duitsland?
Werkt de verregaande privatisering van de zorg en de marktwerking erin niet averechts? Op zich wil ik, zonder dat ik dit
in alle diepte uitgezocht heb, hier best ver in meegaan. Ik snap op zich dat zorgkosten stijgen met toenemende
vergrijzing en dat er een zekere kosten-efficiëntie moet zijn, maar dat we hierin in doorgeslagen zijn vind ik zeer
aannemelijk. [^vpro]&lt;&#x2F;p&gt;
&lt;p&gt;Dat gezegd hebbende is de gangbare visie dat geen elk zorgsysteem echt opgewassen is tegen een virus wat zich razendsnel
verspreid en een niet gering deel van de populatie hard raakt [^rtlnieuws]. Je hoort weleens de quote &quot;The greatest shortcoming
of the human race is our inability to understand the exponential function.&quot;. Ik ben
ervan overtuigd dat als er geen maatregelen genomen worden en men op oude voet doorgegaan zou zijn, je binnen niet
afzienbare tijd tegen de grenzen van welk systeem dan ook zou aanlopen.&lt;&#x2F;p&gt;
&lt;p&gt;Hier in Nederland hebben we tijdens de eerste golf al gezien dat mensen over ziekenhuizen verdeeld werden, en dat zie je
op tal van plekken gebeuren, in de EU ook geregeld over landsgrenzen heen. Die solidariteit vind ik ook wel weer een
lichtpuntje in deze tijd. Nu ik dit schrijf is de situatie in Portugal erg kritisch met overvolle ziekenhuizen, en zie
je Duitsland een militair vliegtuig sturen met extra personeel en materieel en eerder ook al patiënten overnemen
[^expresso] [^cmjornal].&lt;&#x2F;p&gt;
&lt;p&gt;Je zorgsysteem laten overstromen zal tot een verdere toename van het aantal ernstig zieken en doden leiden, je kunt ze
dan immers niet meer allemaal behandelen en moet gaan kiezen. Dit zie je dan ook al gebeuren op plekken waar het virus
hard om zich heen grijpt en het gezondheidssysteem minder sterk staat dan hier in Europa, kijk bijvoorbeeld naar Manaus
in Brazilië [^redebrasil], waar patiënten stierven omdat de zuurstof op was, sommigen liever vanuit het ziekenhuis
naar huis vluchten om daar te sterven [^folhapatoense], en de thuissterfte sowieso al toenam omdat mensen het ziekenhuis
niet eens meer bereikten [^amazoniareal]. Het wrange hier is ook dat Manaus in de eerste golf ook al hard getroffen was
en zowel zorg als uitvaartwezen overweldigde [^guardian]. Er was bij de tweede golf enige hoop op groepsimmuniteit was,
maar dat viel vies tegen, mogelijk mede door de mutatie aldaar [^sabino2021]. In de allereerste toespraak van Rutte
hoorde je de term groepsimmuniteit nog vallen, maar de strategie van het bereiken van gecontroleerde groepsimmuniteit is
al snel onrealistisch gebleken, ook in landen als het VK en Zweden waar ze er sterker op hadden ingezet.&lt;&#x2F;p&gt;
&lt;p&gt;De reden dat we onszelf beperkingen opleggen is om dat soort drama&#x27;s te voorkomen. Dat zijn ook geen gevolgen die een
respectabel politicus voor zijn&#x2F;haar rekening wil nemen. De volksgezondheid waarborgen is bij uitstek een taak die de
overheid is toebedeeld. Als we niks zouden doen zouden er veel meer mensen, voornamelijk ouderen en andere kwetsbare
groepen sterven [^flaxman2020]; ook dikke mannen van boven de 50 tellen mee als volwaardige mensen. De sterfgevallen zijn
uiteraard het topje van de ijsberg, de meeste mensen zijn in meer of minder mate ziek en herstellen uiteindelijk weer.
Een bijkomende zorg hier is nog wel het niet geringe aantal mensen wat lange tijd last blijft houden van de gevolgen van
de infectie (de zogenaamde long covid) [^volkskrant3], zoals ook een naaste collega van mij overkwam. Een overspoelde gezondheidszorg
heeft natuurlijk ook negatieve implicaties voor niet-covid patiënten. Als noodzakelijke zorg niet meer
geleverd kan worden omdat covid-19 alle zorg opeist, heb je ook daar een groot probleem, meer lijden en meer sterfte ook
onder mensen die niet met covid besmet zijn.&lt;&#x2F;p&gt;
&lt;p&gt;De oversterfte afgelopen jaar wordt ook duidelijk aangetoond [^cbs], al hoor je vanuit corona-skeptische kringen zoals het
Forum voor Democratie soms gekunstelde pogingen om het tegendeel te beweren [^sargasso]. Dat we toch nog hoge oversterfte hebben
juist in een context van harde maatregelen om virusverspreiding tegen te gaan, toont ook wel aan dat we ons in een
uitzonderlijke situatie bevinden. Die context kan je ook niet buiten beschouwing laten. De aanname dat het zonder
maatregelen om verspreiding tegen te gaan veel erger zou zijn met de oversterfte is een realistische, want er is een
direct causaal verband tussen corona besmetting, de covid-19 ziekte en sterfte. Beperking van besmetting leidt
logischerwijs tot beperking van sterfte. Hier kom ik later ook nog wel op terug.&lt;&#x2F;p&gt;
&lt;p&gt;De doelstelling van alle maatregelen is wat mij betreft, en ik heb het gevoel dat dit breed gedeeld wordt, om
alle gezondheidsschade die dit virus aanbrengt binnen de perken en controleerbaar te houden. Het in stand houden van het
gezondheidswezen is hierin een cruciale factor. Als de cijfers laag en beheersbaar zijn, kunnen we met veel testen en bron &amp;amp;
contactonderzoek gerichter opereren, en zijn we niet meer genoodzaakt om met een kanon op een mug te schieten.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;de-wetenschap&quot;&gt;De wetenschap&lt;&#x2F;h2&gt;
&lt;p&gt;Wat betreft het virus zelf. Nee, dit is (gegeven infectie) zeker niet zo&#x27;n killer als ebola, of als HIV lange tijd was, en
op plekken in Afrika waar de dure medicatie niet voorhanden is, nog steeds is. Het treft ook niet de jongeren op de
manier die we wel zagen bij de H1N1 influenza pandemie van 1918 die tientallen miljoenen doden tot gevolg had. De IFR
(Infection Fatality Rate) van corona valt gelukkig lager uit dan initieel gedacht, maar wordt altijd toch nog een
behoorlijke factor hoger geschat dan influenza, zeer afhankelijk uiteraard van de populatie en de mate van vergrijzing
daarin [^blackburn2021] [^levin2020].&lt;&#x2F;p&gt;
&lt;p&gt;Het belang van de IFR in deze is eigenlijk ook onderschikt aan het belang van het gemak&#x2F;ongemak waarmee een virus zich
verspreid; de besmettelijkheid. Als we een virus A hebben dat veel minder dodelijk (lage IFR) is maar zich veel sneller
verspreid (hoge R) dan een ander veel dodelijker virus B (hoge IFR, lage R), dan zal virus A uiteindelijk onder de
streep verreweg de meeste doden op zijn geweten hebben. Met dit coronavirus hebben we vooral te maken met het probleem
van snelle verspreiding (wat alleen maar toegenomen is door varianten als de Britse B1.1.7). In deze zin is het virus
wél vele male ernstiger dan bv. ebola. De snelle verspreiding komt nu ook mede doordat het een nieuw virus was waar
niemand nog antistoffen tegen heeft.&lt;&#x2F;p&gt;
&lt;p&gt;Voor ik verder ga over de wetenschap moeten me eerst even twee dingen van het hart. Ik wil een positief en een negatief
punt noemen wat betreft onze houding tegenover de wetenschap in deze kwestie. Ten eerste het positieve punt dat er
momenteel intensief naar de wetenschap gekeken wordt en dat ook overheidsbeleid van vele landen op de adviezen van
wetenschappelijke organen stoelt. Hier in Nederland middels het welbekende OMT. Dit vind ik een positief punt en staat
in contrast met landen waar dat veelal niet gebeurd of waar de autoriteit vaak in strijd is met we wetenschappelijk
consensus. We kennen in deze vooral Trump die er nog al een handje van had om voor zijn beurt uit te spreken met wilde
ideeën (&#x27;it will go away soon&#x27;) en in een persconferentie vrijuit speculeerde of bleekmiddelen geen rol zouden kunnen
spelen binnen het lichaam in het tegengaan van het virus; Fauci moest ingrijpen om ergere misverstanden te voorkomen.
Maar goed, ik maak hier dus juist een positief punt dat het goed is dat men zich op de wetenschap beroept, en ook dat
het goed is dat men zich in de wetenschap verdiept en dat de wetenschap er in slaagt binnen zo snelle tijd effectieve vaccins
te produceren die ons weer uit de pandemie zullen helpen.&lt;&#x2F;p&gt;
&lt;p&gt;Het tweede punt is een negatieve: er wordt weleens gekscherend gezegd dat we naast een virus-pandemie ook een
virologen-pandemie hebben. Iedereen hoort nu het één en ander over virologie en epidemiologie en sommigen lijken iets te
snel geneigd te denken expert te zijn. Dus laat ik bij mezelf beginnen en duidelijk stellen dat ik geen viroloog,
epidemioloog of arts ben. Ik zal proberen daarom in dit stuk niet te veel harde wetenschappelijke beweringen te doen
maar vooral te beschrijven hoe ik de handelingen van overheid en wetenschap duidt.&lt;&#x2F;p&gt;
&lt;p&gt;Wetenschapper mag ik mezelf officieel wel noemen, maar ik denk dat terughoudendheid op zijn plaats is zodra ik buiten
mijn vakgebied treed. Ik doe wel vaker peer reviews binnen mijn vakgebied uiteraard, en dat is al vaak lastig genoeg.
Bij papers op het gebied van epidemiologie en virologie ontbreekt het me al heel snel aan diepte én breedte van
kennis&#x2F;literatuur die nodig is om tot een volledig beeld te komen en het naar waarde te kunnen beoordelen. Deze
terughoudenheid is ook iets wat je van andere academici mag verwachten, al is dat niet altijd het geval. De tendens is
meestal; hoe meer je over iets weet, hoe beter je ook weet wat je allemaal juist nog niet weet. Wetenschap leidt in de
regel meestal tot meer nieuwe vragen dan het tot antwoorden leidt. Mijn punt hiermee is dat ik en wij allemaal ons dus
vooral moeten baseren op wat de experts op dit gebied onderzocht hebben en concluderen. Dit is ook een
vertrouwensrelatie, een vertrouwen in het wetenschappelijke proces. Ik begrijp dat dat soms beschadigd kan worden. Het
wetenschappelijk proces is een inherent sociaal en menselijk proces, want zelfs de briljantste persoon kan niet in zijn
eentje de breedte en diepte van allerlei verschillende kennisvelden zich eigen maken.  De beste manier om dit virus te
begrijpen en te verhelpen is via de wetenschap, tenzij je wellicht van mening bent dat we ons en masse in de kerken
moeten terugtrekken en de goden moeten bidden om verlossing. Het is belangrijk dat er publiek vertrouwen is in de
wetenschappelijke consensus die uit een een stapeling van onderzoek voortkomt, en in de ondermijning hiervan vanuit
sommige hoeken zie ik als een risico. Een opiniestuk van filosoof Maarten Boudry [^boudry] in de context van het
corona-skepticisme roept hier ook toe op en hij verwoordt het een stuk beter dan ik hier kan. In een openingscollege
voor een leerstoel aan de Universiteit Gent gaat hij hier ook verder op in [^boudry2].&lt;&#x2F;p&gt;
&lt;p&gt;Uiteraard kan in de wetenschap alles ter discussie worden gesteld, een kritische vragende houding is noodzakelijk voor
goede wetenschap. Dat moet ook zo. Dat verschillende opvattingen flink kunnen schuren zit ook in haar aard. Ik zal
verder ook de laatste zijn die zal ontkennen dat er niet veel fouten gemaakt worden, geklungeld wordt, en soms andere
belangen meespelen die objectiviteit in de weg zitten. Dat wetenschap op punten te diep met commercie of politiek
vervlochten is, is een zeer terecht punt van aandacht. Je ziet het OMT ook af en toe worstelen met druk vanuit de
politiek [^volkskrant2]. Zoals ik al zei, het is een onvolmaakt proces want het is uiteindelijk mensenwerk van een grote diverse
groep wetenschappers, en niets menselijks is hen vreemd. Een zekere marge van twijfel, onzekerheid en nuance is ook
inherent aan wetenschappelijke output.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kritiek&quot;&gt;Kritiek&lt;&#x2F;h2&gt;
&lt;p&gt;Vanuit corona-kritische hoek mis ik soms dit besef; men lijkt geneigd zich op een aantal specifieke bomen blind te
staren en het bos te missen, of in extreme gevallen het bestaan van het gehele bos te ontkennen. Er zullen ook altijd
wetenschappers zijn die wat verder van de heersende consensus af staan, als die er is, en dat is op zich ook prima
juist. Hun argumenten moeten nog steeds op hun eigen wetenschappelijke waarde beoordeeld worden, maar de buitenstaande
leek moet dan wel oppassen niet te snel met die argumenten aan de haal te gaan en de nuance te missen. Hier gaat het
vaak fout naar mijn idee. Als leek zijn we denk ik extra gevoelig voor &#x27;confirmation bias&#x27;, het aanhangen van bepaalde
theorieën omdat ze met ons resoneren en in ons straatje liggen, ook al zijn ze wellicht onjuist. Dit geldt denk ik extra
sterk als er heftige emoties (bv. woede of angst) mee verbonden zijn.&lt;&#x2F;p&gt;
&lt;p&gt;Ik vind het retraction paper van Borger et al. zo&#x27;n voorbeeld waar veel te veel mee aan de haal wordt gegaan door
corona-critici, zoals bijvoorbeeld op het Youtube kanaal BLCKBX van Flavio Pasquino die hier de kwalificatie PCR-gate
aan geeft, alsof er een groot schandaal achter schuilt. Borger et al. [^borger2019] claimen serieuze fouten te hebben
gevonden in het paper van Corman et al. [^corman2019] wat op haar beurt een belangrijk grondwerk is voor de PCR test ter
detectie van het coronabesmetting.  Ze vinden de fouten zo serieus om terugtrekking van dat paper eisen, een zwaar
middel. Het paper van zowel Borger et al.  als Corman et al. is voor de leek, ook voor mij dus, eigenlijk niet goed te
beoordelen. Sommige kritiek klinkt al snel best redelijk, maar is hij dat daadwerkelijk? Het antwoord van de editors van
het journal [^eurosurveillance] verwerpt stellig beschuldigingen die gedaan zijn met betrekking tot
belangenverstrengeling en het (zeer snelle) beoordelingsproces. Er zijn externe experts ingeschakeld die de inhoudelijke
kritiek hebben beoordeeld en ook daar geconcludeerd hebben dat het Corman paper adequaat was voor haar doel en in de
tijdsperiode van beperkte data waarin het onderzoek plaatsvond. De review van de geraadpleegde experts in deze is helaas
niet openbaar. Dat vind ik wel jammer en deels ook een gemiste kans waar ik vrees dat sommige coronaskeptici onterecht
kwade wil inzien. Op zich is het vanuit de normale gang van zaken best te begrijpen, want reviews zijn vrijwel nooit
openbaar en ook de auteurs zelfs zien niet wie hun reviewer is. Omgekeerd weten zelfs de reviewers idealiter ook niet
wie de auteur is (double blind), en dat was hier ook het geval. Ik geef toe dat ik niet weet in hoeverre een retraction
procedure hier verschilt van een normale review.  Wat ook nog wil toevoegen is dat het uiteraard ook niet de bedoeling
dat wetenschappelijke geschillen via retraction requests beslist worden, éénieder kan immers altijd het onderzoek van de
ander herhalen, verbeteren en bekritiseren in een nieuwe publicatie. Retractions zijn voor grove fouten,
belangenverstrengeling, plagiaat, e.d...&lt;&#x2F;p&gt;
&lt;p&gt;Terug naar de inhoud: gelukkig zijn er verschillende andere wetenschappers die wel in dit vakgebied bekwaam zijn en hun
kritiek op Borger et al. al wel kenbaar gemaakt hebben [^mckay] [^koopmans] [^publikum] [^visser] [^beyer]
[^kloptdatwel] [^wilson]. Ook Follow
The Money raadpleegde experts en wijdde er onlangs een uitgebreid artikel aan om het voor het grotere publiek op een rij
te zetten en behandelt elk punt van kritiek [^ftm].&lt;&#x2F;p&gt;
&lt;p&gt;Een veelgehoord argument uit onder ander dat retraction paper is dat de PCR-test te veel vals-positieve uitslagen zou
opleveren [^mckay] en dat veel besmette mensen niet besmettelijk zouden zijn. Het is inderdaad een bekend gegeven dat de
test geen actieve besmettelijkheid aantoont maar slechts aangeeft of de persoon het virus bij zich draagt (wat een
noodzakelijke voorwaarde voor besmettelijkheid is). In het aantonen van (fragmenten van) het virus heeft de test juist
een zeer hoge sensitiviteit [^sciencefeedback]. Om maar één punt uit te weerlegging als voorbeeld te nemen: Als er een
significante aantal vals-positieve uitslagen zou zijn zou je dat ook verwachten in landen als Australië, Nieuw Zeeland
en Ijsland, die een erg lage true positive rate hebben terwijl er nog steeds veel getest wordt [^ourworldindata]
[^wilson2]. Ook in Nederland zien we met name na de piek van eerste golf en de naderende zomer ook duidelijke perioden
van stijgende testafname met een dalend aandeel positieve uitslagen.&lt;&#x2F;p&gt;
&lt;p&gt;In de context van een snotterende persoon die voor een test aanklopt of iemand die nog asymptomatisch is maar
recentelijk (incubatietijd) wel in contact met een besmette persoon geweest is, heb je sterke grond om besmettelijkheid
te veronderstellen als de test een positieve uitslag geeft. In zo&#x27;n situatie neem je het zekere voor het onzekere, want
in het kader van het terugdringen van verspreiding van een virus is een vals positieve uitslag minder ernstig dan een
vals negatieve. Terugdringen van verspreiding is de primaire grond voor het testen en ook door het WHO aanbevolen
[^reuters].  Uiteraard wil je dat de test zo nauwkeurig mogelijk is en zo goed mogelijk gehanteerd wordt [^mckay2], de
vraag of het beter kan is nooit onterecht. De instrumenten die je hebt uit handen gooien omdat ze wellicht niet perfect
zijn, is wel onterecht. De besmettingscijfers die we dagelijks langs zien komen geven een goede indicatie van waar en
hoe ver het virus zich onder de populatie verspreid heeft en geeft ons de mogelijkheid geïnformeerde schattingen te doen
over het aantal ziekenhuisopnamen, IC-opnamen en sterfgevallen later in de tijd. Er is ook een duidelijk correlatie
tussen deze curves. De waarde zit dan ook met name in dit aspect en het feit of de trend stijgend of dalend is, dan in
de absolute getallen an sich.&lt;&#x2F;p&gt;
&lt;p&gt;Een ander veel gehoord kritiekpunt zit hem in het feit dat men uitgaat van zulke modellen om maatregelenbeleid op te
baseren, en de claim dat de modellen er vaak naast zitten. Ik begin met het eerste punt. Als je enige voorspellingen wil
doen over de toekomst ontkom je er nooit aan met modellen te werken, harde cijfers over de toekomst heb je nog niet want
het is nog niet gebeurd. Je extrapoleert op basis van beschikbare data uit het verleden wat de toekomst kan brengen.
Uiteraard geldt ook hier dat je wil dat je model zo nauwkeurig mogelijk is, en ben je je ervan bewust dat er altijd een
zekere onzekerheidsmarge mee gemoeid is. Bij nieuwe data stel je je model bij. Het is in deze aan de epidemiologen,
virologen, artsen e.d. om modellen te formuleren naar het beste van hun kunnen. Mijn repliek hier is dus; aan modelleren
ontkom je niet, zeker niet in beleidsvoering, want beleid gaat per definitie over het sturen van toekomstige
ontwikkelingen. Als je niet extrapoleert maar wacht met maatregelen tot de werkelijkheid je heeft ingehaald en wacht tot
bv. de IC&#x27;s vol liggen, dan ben je te laat met je maatregelen. Je gaat niet pas nieuwe dijken bouwen als de oude
doorbreekt.&lt;&#x2F;p&gt;
&lt;p&gt;Nu zouden modellen vaak niet kloppen zeggen de skeptici. Zeker in het begin van de pandemie zal dit ongetwijfeld veel
het geval geweest zijn, want er was nog weinig data en heel veel onzekerheid. Nog steeds is er heel veel onbekend, zeker
met de opkomst van mutaties als B.1.1.7 die zich anders gedragen; de onzekerheidsmarges zijn groot. Kijk bijvoorbeeld
naar een aantal mogelijke prognoses van het Duitse Robert Koch Instituut [^sueddeutsche]. We zien veelal zulke modellen met
schrikbarende exponentiële curves die uiteindelijk ver boven de zorgcapaciteit uitstijgen, uiteraard weer met een zekere
onzekerheidsmarge. Op basis van die modellen wordt strikter maatregelenbeleid gemaakt die juist de voorspelling van het
model probeert te voorkomen. Als je na het nemen van die maatregelen dan concludeert dat het model er faliekant naast
zat en het dus allemaal wel meevalt omdat het doemscenario niet waarheid is geworden, dan heb je de verkeerde conclusie
getrokken. Het model op haar juiste waarde schatten is een stuk complexer dan dat. Maarten Boudry schetst dit wederom
mooi in het artikel was ik al eerder aanhaalde [^boudry].&lt;&#x2F;p&gt;
&lt;p&gt;In het nemen van maatregelen in een pandemie waarvan sprake is van veel onzekerheid in de modellen, geldt ook een zekere
mate van &quot;better safe than sorry&quot;.  We proberen een punt in de tijd te vinden waar maatregelen effectief zijn tegen de
voorspellingen, en vooral de ergste voorspellingen daarmee te voorkomen. Tegelijkertijd moet dat punt in de tijd zo
liggen dat de maatregelen proportioneel zijn en nevenschade minimaal is. Dit maakt het juiste tijdstip voor de juiste
maatregel vinden een ingewikkelde opgave. Het is sowieso een kwestie van kiezen tussen twee kwaden, want linksom of
rechtsom zal er schade zijn; &quot;damned if you do, damned if you don&#x27;t&quot;, om er nog maar eens een Engelse expressie
tegenaan te gooien.&lt;&#x2F;p&gt;
&lt;p&gt;Als je liever naar het verleden terug wil kijken dan de toekomst wil modelleren, zijn er genoeg voorbeelden van
exponentiële groei en overstroming van de zorg te vinden. In Nederland zien we zelf al dat we massaal IC&#x27;s moesten
opschalen tijdens de eerste golf en het tij maar net op tijd hebben kunnen keren. De plotselinge opkomst van de
besmettelijkere B.1.1.7 variant in o.a. Engeland, Ierland en met stip Portugal, heeft daar tot grote verzadiging van de
zorg geleid, inclusief rijen wachtende ambulances. In Portugal en Ierland ging dat ook gepaard met ongelukkige
versoepelingen van de maatregelen rondom kerst, waarbij het daardoor onduidelijk is wat nu daar aan toe te schrijven is
aan hogere besmettelijkheid van de mutaties, en wat aan de versoepelingen. In het VK moest Boris Johnson zijn volk
teleurstellen en de reeds beloofde versoepelingen niet door laten gaan.&lt;&#x2F;p&gt;
&lt;p&gt;Een grote kwestie in de virusverspreiding is de factor asymptomatisch danwel presymptomatische verspreiding.  Het beeld
hierom is voor mij nog niet helemaal duidelijk, er lijken hier soms ook conflicterende data over naar buiten te komen
[^cnn]. Aanvankelijk werd het aandeel sowieso groter ingeschat dan gedacht. Een video van Dr. John Campbell [^campbell2] geeft een hele
aardige bespreking van een aantal studies op dat gebied, maar dateert wel van Augustus 2020. Hij legt daarin uit dat
studies aantonen dat besmettelijkheid (of preciezer gezegd viral load, wat niet hetzelfde is maar een stuk meetbaarder)
het hoogst is vlak voor en vlak na het begin van symptomen. Die symptomen kunnen in eerste instantie ook nog licht zijn.
Een latere studie van Cao et al. [^cao2020] in Wuhan identificeert juist geen enkele besmetting rondom asymptomatische
dragers, wat op het eerste oog een opmerkelijk resultaat lijkt. Hier moet wel meegenomen worden dat dit in een context
onderzocht is waar de pandemie na een lange zeer strikte lockdown onder controle is gebracht. De auteurs zeggen zelf ook
dat hun bevindingen niet zomaar generaliseerbaar zijn en dat de studie niet aantoont dat het virus niet door
asymptomatische dragers verpreid kan worden [^bmi].  Presymptomatische verspreiding is immers ook bij andere
luchtweginfecties als influenza gebruikelijk [^gu2011]. Afin, dit is niet mijn vakgebied en hier is het beeld voor mij dus
ook nog niet helemaal duidelijk. Wel is asymptomatische en presymptomatische verspreiding een zeer belangrijke
overweging in het coronabeleid, en ook een mikpunt voor coronacritici, en zou het goed verklaren waarom juist dit virus
zo&#x27;n pandemische vorm heeft aangenomen.&lt;&#x2F;p&gt;
&lt;p&gt;Een opiniestuk over coronaskepsis in Nederland zou onvolledig zijn zonder Maurice de Hond even kort te noemen. Hij is
bekend van zijn opiniepeilingen maar heeft ook omtrent corona een zeer duidelijk mening die geregeld ingaat tegen
overheid en OMT, en die hij niet schroomt te delen op zijn daarvoor ingerichte blog [^maurice] en in de media. Zo
bepleit hij dat verspreiding vooral via aerosolen gaat, daar waar de gangbare consensus grotere druppelvorming als de
voornaamste verspreidingsroute ziet [^who], en is hij daarom voorstander van goede ventilatie. Voor goede ventilatie is
ook wel degelijk het één en ander te zeggen uiteraard. Hij opereert mijns inziens in een wat grijs gebied tussen
terechte criticus, opiniemaker, maar ook zakenman en soms zelfs complotdenker.  Viroloog of epidemioloog is hij zeer
zeker niet, maar het zou te makkelijk hem daarom weg te zetten waartoe dit NRC artikel [^nrc2] of de TV rapportage van
Propaganda [^kroncrv] wel neigen. Hij haalt wel degelijk serieuze kritiek aan op bepaalde punten, maar het probleem is
hier vaak om dat te kunnen scheiden van de punten waar hij de plank misslaat en de echte experts een andere mening
toegedaan zijn. De grote stelligheid en overtuiging waarmee hij zijn beweringen over het algemeen doet maakt het niet
makkelijk dit onderscheid te maken.&lt;&#x2F;p&gt;
&lt;p&gt;Ik denk dat het belangrijk is om desinformatie en het daaruit voortvloeiende wantrouwen tegen te gaan. Er is in deze
tijd een ruime voedingsbodem voor desinformatie door de grote impact van maatregelen. De pandemie legt ook nog eens als
katalysator pijnpunten in ons systeem bloot die eerder verborgen bleven. Men is moe en lijdt begrijpelijkerwijs onder
alle gevolgen. Hier zie ik een risico dat onvrede over de maatregelen iemand ontvankelijker kan maken voor desinformatie
omtrent het virus an sich. Als er immers geen virus is, of het virus is lang niet zo erg als gedacht en de fundamenten
onder het testbeleid deugen niet, dan kunnen die maatregelen ook wel weg. Mijn inschatting zou zijn dat sommige
corona-critici op deze manier achterstevoren redeneren en hiermee het virus voor zichzelf en anderen bagatteliseren. Het
resultaat is dan denk ik wel een erg wantrouwende houding richting wetenschap, media en overheid die constant een beeld
propageren dat niet strookt met het eigen beeld.&lt;&#x2F;p&gt;
&lt;p&gt;Een extra gevaar hierbij is dat dit wantrouwen zich naast het virus en de maatregelen ook op de belangrijkste oplossing
richt: de vaccins.  Een hoge bereidheid om te vaccineren is juist nodig om uiteindelijk van alles maatregelen af te
komen. De antivaxxer bestond ook al lang voor corona, met bv. de hardnekkige mythe dat het autisme zou veroorzaken, maar ook
in corona skeptische kringen als bij de groep Viruswaarheid wordt zo&#x27;n antivax houding aanwakkerd.&lt;&#x2F;p&gt;
&lt;p&gt;Ik denk dat we een duidelijk onderscheid moeten maken tussen kritiek op specifieke maatregelen, of kritiek tegen
maatregelen in het algemeen en tegen de wetenschappelijk consensus in het bijzonder. Het is één ding om het virus
wetenschappelijk te duiden en het effect van potentiële maatregelen in te schatten, zoals het OMT doet. Het is weer een
hele andere tak van sport om daadwerkelijk beleid te voeren. In het voeren van beleid komen terecht meer vraagstukken op
tafel dan alleen de medisch-epidemiologische, terwijl het OMT zich juist tot de medisch-epidemiologische dient te
beperken, want alleen daar ligt haar expertise. Voor kritiek tegen maatregelen en overheids in het algemeen is ook
plaats zonder de wetenschappelijk consensus rondom het virus te ontkennen. Er is ook ruim plek voor onzekerheid en
twijfel, maar wellicht is dit juist het pijnpunt voor sommige mensen en kiezen ze liever voor de schijnzekerheid dat het
wel meevalt en men het en masse fout heeft.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;complot&quot;&gt;Complot&lt;&#x2F;h2&gt;
&lt;p&gt;Bij sommige mensen is sprake van een soort van radicaliseringsproces dat leidt tot heus complotdenken. Mensen als Willem
Engel en zijn Viruswaarheid lijken redelijk van het pad af als ze vergelijkingen met Jodenvervolging en genocide maken
en daarbij ook nog een davidster opspelden tijden demonstraties. Voor de hard-core complotdenker is corona is niet
langer iets dat ons zomaar is overkomen, maar iets waarachter kwade intenties zitten. Het is bijvoorbeeld gefabriceerd
en uit een lab ontsnapt, zoals Willem Engel terloops maar stellig beweert in de talkshow Op1 [^op1], of het is helemaal
geen virus maar de ziekte komt door de 5G masten, of het is slechts een list zodat Bill Gates ons allemaal een microchip
kan injecteren! Dit zijn extremen maar zo&#x27;n radicaliseringsproces is vaak wel een glijdende schaal die leidt tot dieper
geloof in het eigen gelijk en steeds wantrouwende houding jegens de ander. Dit is een ontwikkeling waar ik mij ernstige
zorgen over maak want mensen drijven zo steeds verder af van een genuanceerd en op wetenschap gestoeld wereldbeeld
richting steeds extremere visies waarin de kwade intenties van de gevestigde orde vaak de hoofdrol spelen.  Dit heeft
consequenties in de reële wereld. Ik denk dat de Capitoolbestorming in de VS een goed voorbeeld is dat laat zien dat
complotdenken wel degelijk massa&#x27;s aanhangers in beweging kan zetten en gevestigde instituties in gevaar kan brengen.
Het compleet afbreken van allerlei gevestigde instituties is juist vaak expliciet het doel van de complotdenker [^nrc],
om ze daarna naar eigen utopisch wereldbeeld op te bouwen. Het is een kwalijke ontwikkeling als politici,
wetenschappers, en journalisten in de reeële wereld bedreigingen ontvangen, vanuit welke extremistische hoek dan ook. We
zien dat de NOS besloot logo&#x27;s van hun busjes te moeten halen. We zien mensen (inclusief presidenten) die alles wat ze
niet bevalt als fakenews bestempelen en zo elk debat uit de weg gaan. We zien leden van het OMT die bedreigingen
ontvangen en bescherming moeten krijgen omdat een marginale groep ze ziet als een sinister complot.&lt;&#x2F;p&gt;
&lt;p&gt;Een probleem dat ik heb met de complotdenker in het algemeen is dat hij naar mijn mening veel te geneigd is overal
(kwaad) agentschap in te zien; de dingen zijn zoals ze zijn omdat iemand dat zo gewild en georchestreerd heeft. Het gaat
uit van een onterecht grote mate van maakbaarheid van de samenleving waarin de rol van toeval en het toelaten van
twijfel en nuance wordt gemarginaliseerd. Natuurlijk leven we in een wereld van mensen met allerlei botsende intenties,
en veel van die intenties zullen best op eigen gewin gericht zijn en niet erg altruïstisch van aard zijn; de
geschiedenis staat immers ook bol van oorlog en corruptie. Desalniettemin gaat het vaak te ver om daar één
overkoepelende regie in toe te kennen, de mate van regie wordt door de complotdenker sterk overschat denk ik. De gehele
samenleving met al haar instituties, ook al zijn ze door mensen zelf bedacht en opgericht, zijn toch ook aan een zekere
evolutie onderhevig en kan je in zekere zin bezien als een chaotisch systeem waarin echte regie ontbreekt.&lt;&#x2F;p&gt;
&lt;p&gt;Een complot impliceert vaak ook een hoge mate van geheimhouding tussen de samenzweerders, zo&#x27;n deceptie op wereldniveau
volhouden zou een bijna onmenselijke opgave zijn. De meeste misstanden in de wereld hebben geen sinistere &#x27;deep state&#x27;
nodig maar vinden vrij open en bloot plaats. Daar waar er sterke een autoritaire staat is en &#x27;geheime&#x27;
veiligheidsdiensten een grote vinger in de pap hebben, neem China en Rusland als voorbeeld, is dit vaak overduidelijk.
Ook als er wel een complot van de zijde van de machthebbers komt dit vaak snel aan het licht, neem bijvoorbeeld het
gebrekkige bewijs tegen massavernietigingswapens waarmee de VS ons in 2003 de Irak oorlog in gerommeld heeft, of de
vergiftiging van Aleksej Navalnij en het daarop volgende show-proces onlangs.&lt;&#x2F;p&gt;
&lt;p&gt;Ik zie in de complotdenker ook een zeker arrogantie; het idee dat hij, met een kleine groep trouwe volgers, de waarheid
in petto heeft daar waar de &#x27;mainstream&#x27; het geheel bij het verkeerde eind heeft, terwijl de experts juist, per
definitie zou ik zelfs zeggen, in de mainstream zitten. Iets meer zelf-skepsis zou op zijn plaats zijn. In de
coronakwestie roept de complotdenker vaak op tegen een angstcultuur die gezaaid zou worden door de overheid, maar met
hyperbolen als vergelijkingen met de tweede wereldoorlog en dictaturen draagt de complotdenker mijns inziens net zo goed
bij aan een angstcultuur. Het realiteitsbeeld dat de complotdenker schets waarin we door duistere machten gemanipuleerd
worden vind ik eerlijk gezegd beangstigender overkomen dan die van een pandemie.&lt;&#x2F;p&gt;
&lt;p&gt;Het helpt natuurlijk ook niet als er wel degelijk signalen van het bevorderen van een angstcultuur naar boven komen
zoals in het Duitse Panikpapier schandaal wat door Die Welt aan het licht is gebracht [^welt]. Wetenschappers waren
gevraagd om voor het Duitse ministerie van binnenlandse zaken in een intern document worst-case scenario&#x27;s uit te werken
die strikte corona-maatregelen rechtvaardigen. Een ietwat overijverige ambtenarij? Dit klinkt als &#x27;wetenschap op
bestelling&#x27; en is natuurlijk kolen op het vuur als je al een kwade overheid en corrupte wetenschap verondersteld. Hoewel
ik zeker ook van mening ben dat de Duitse ambtenaren en de wetenschappers die hieraan mee deden hier wel degelijk een
misstap hebben begaan, denk ik ook dat er meer nuance in deze zaak zit dan in eerste instantie lijkt [^gunnarkaiser].
Een complotdenker is waarschijnlijk geneigd hier snel een gegeneraliserende conclusie aan te verbinden, onder het motto
&lt;em&gt;&quot;waar rook is, is vuur&quot;&lt;&#x2F;em&gt;. Maar mijn stelling is eerder omgekeerd: het rookt overal wel een beetje, en het is ook zeer
terecht dat aan de kaak te stellen, maar dat betekent nog niet dat alles ook in lichterlaaie staat. Ik vermoed dat er
veel voorbeelden te vinden zijn waar complottheorieën wel degelijk deels op aantal terechte feitelijke kritiekpunten
stoelen, maar de complottheorie zelf veel te ver gaat. De kunst is juist vaak om de desinformatie van de echte
feitelijkheden te onderscheiden, en dat is zeker niet altijd zo simpel als het lijkt.&lt;&#x2F;p&gt;
&lt;p&gt;Na dit alles gezegd te hebben wil ik tot slot nog meegeven dat we zeker ook moeten oppassen niet gelijk iedereen met
kritiek als &#x27;complotdenker&#x27; of &#x27;wappie&#x27; te bestempelen en diskwalificeren, dit betoogde ik al in &lt;a href=&quot;&#x2F;posts&#x2F;disinformation-age&#x2F;&quot;&gt;mijn vorige
artikel&lt;&#x2F;a&gt; en dat is zeker ook niet mijn intentie met dit stuk. We moeten juist eventueel
onjuiste argumenten feitelijk ontkrachten, scheiden van terechte zorgen die er wellicht aan ten grondslag liggen, en
vooral niet de hele groep als zodanig proberen te negeren en denken dat het wel over gaat.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;maatregelen&quot;&gt;Maatregelen&lt;&#x2F;h2&gt;
&lt;p&gt;Hoewel ik zelf in de gelukkige positie ben dat de maatregelen geen al te grote impact hebben, besef ik goed dat dit voor
veel andere mensen niet zo is. Er zijn reële zorgen op allerlei vlakken die niet onderschat mogen worden. Van de
economische schade van alle bedrijven die gedwongen gesloten zijn tot aan mentale schade in de vorm van bijvoorbeeld
eenzaamheid, angst en depressie. Ik onderken deze ernst ook zeker. Hoe langer de situatie ook voortduurt, hoe zwaarder
het wordt het vol te houden. Feit dat de maatregelen ondanks nevenschade doorgaan wil ook niet zeggen dan deze mensen
niet gehoord worden, het blijft een constante afweging tussen de volksgezondheid en de andere belangen. Mijn impressie
is dat deze aspecten ook steeds meer en meer in de media aan bod komen. De bewering van de corona-criticus is vaak dat
het medicijn erger is dan de kwaal, maar dat is juist niet evident en ook iets wat per situatie
(land&#x2F;tijdsduur&#x2F;maatregelenpakket) zal verschillen en aan constante heroverweging onderhevig is.&lt;&#x2F;p&gt;
&lt;p&gt;Er is ook genoeg te bekritiseren op het optreden van de overheid, er gaan geregeld dingen fout. Van de langzame
vaccinatie tot het datalek bij de GGD en de blamage rondom de juridische grondslag voor de avondklok. Ook zal de ene
groep vinden dat er harder opgetreden had moeten worden, terwijl de andere groep bijvoorbeeld vanuit een principiëelere
grondslag tegen inperkingen van vrijheid is. Die verschillen mogen er ook zijn. Hoewel we natuurlijk fouten moeten
proberen te voorkomen en uit gemaakte fouten moeten leren, moet een zekere foutmarge zelfs de overheid gegund zijn.&lt;&#x2F;p&gt;
&lt;p&gt;Ik denk dat de meest succesvolle landen in het onder controle houden van de pandemie vaak de landen zijn die vrij snel
en met vrij forse maatregelen reageren zodra het virus opduikt. Ik denk aan landen als Taiwan, Zuid-Korea, Nieuw
Zeeland. Feit dat het effectief eilanden zijn, en twee ervan lessen hebben geleerd tijdens de eerste SARS epidemie,
speelt wellicht ook mee in dit succes. Zij zijn in staat het virus zo goed als uit te bannen waarna ze slechts constant
de vinger aan de pols hoeven te houden en eventuele oplevingen de kop indrukken. Ik denk dat als je die
strikte maatregelen maar zeer lokaal of voor korte duur hoeft toe te passen, de nadelige gevolgen beperkter
zijn dan wanneer het maanden doorsukkelt en je met grof geschut werkt om de cijfers weer controleerbaar te krijgen.&lt;&#x2F;p&gt;
&lt;p&gt;Dat maatregelen als lockdowns überhaupt niet zouden werken wordt soms ook opgevoerd. Dat zou wat mij betreft alleen het
geval kunnen zijn als ze er niet in slagen het aantal contactmomenten tussen potentieel besmettelijke mensen significant
te verlagen, dus als mensen zich er en masse niet aan houden.  De effectiviteit van lockdowns is uiteraard gelijk al een
onderwerp van onderzoek geweest [26]. Dat het niet altijd even makkelijk te evalueren is in een context van meerdere
maatregelen, is evident. Of een lockdown een proportioneel of geëigend middel is laat ik hier nog even buiten
beschouwing, daar kan je kritiek heb hebben. Als je een hypothetische lockdown in extrema zou doen en iedereen in een
eigen cel opsluit zodat niemand meer met niemand in contact komt gedurende een periode die de incubatietijd goed
overschrijdt, dan heb je het virus in relatief korte tijd uitgebannen. Praktisch en ethisch compleet onuitvoerbaar
uiteraard, maar het idee van contacten tussen mensen beperken lijkt me per definitie ook de verspreiding van
mens-op-mens overdraagbare virussen tegengaan. In deze corona-periode lijkt influenza overigens ook compleet uitgebannen
[^volkskrant]. Een Nieuw Zeelandse studie toont ook aan dat de maatregelen daar prima tegen influenza werken [^huang2021],
wat niemand denk ik zal verbazen.&lt;&#x2F;p&gt;
&lt;p&gt;In Europa viel Zweden in eerste instantie een buiten de boot doordat ze minder strenge maatregelen afkondigden en meer
dan anderen appelleerde op het eigen verantwoordelijkheidsgevoel van de bevolking, wat ik op zich ook wel mooi vind en
zeker voorstander van ben, als het werkt. In Nederland hebben we soortgelijke appellen gedaan maar zijn we uiteindelijk
toch richting dwingendere maatregelen moeten gaan, in Zweden uiteindelijk ook. In vergelijking met de andere
Scandinavische buren komt Zweden ook beduidend slechter uit de bus. Het relatieve dodental ligt daar beduidend hoger als
in alle omringende Scandinavische landen, die wel striktere lockdowns hebben afgekondigd. Vaak is het lastig
maatregelenpakketten in verschillende landen te vergelijken, maar deze landen liggen socio-economisch juist erg dicht
bij elkaar waardoor je hier wat beter conclusies kan trekken over de effectiviteit van aan aantal maatregelen waaronder
de lockdown. Het is uitzonderlijk dat zelfs de Zweedse koning oppert op televisie dat ze gefaald hebben in hun
coronabeleid [^svt].&lt;&#x2F;p&gt;
&lt;p&gt;In Duitsland zie je dat men zeer vergelijkbare maatregelen hanteert als hier, ook al hebben ze een beduidend hogere IC
capaciteit en zijn ze nooit bij kritieke bezetting geweest. Men beseft simpelweg dat als het virus eenmaal te veel
verspreidt, dat het dan heel snel uit de hand loopt en ook hun systeem uit haar voegen zal barsten. Zicht en controle
behouden is essentieel.&lt;&#x2F;p&gt;
&lt;p&gt;Idealiter heb je een verstandige bevolking die die netjes thuisblijft als men ziek is, om de ander niet te besmetten.
Ik vrees dat we hier wat minder optimistisch moeten zijn als we signalen horen van onderzoeken waarin mensen met
klachten toch naar buiten of zelfs naar het werk gaan [^rtl2]. Ik vind het persoonlijk ook erg betuttelend als de overheid
ons berispt dat we ons niet goed genoeg aan de te regels houden, maar het is blijkbaar nodig. Naast de groep van mensen
die het niet zo nauw nemen hebben we, zoals ik eerder al behandelde, ook de mensen die zich er simpelweg (nog) niet
bewust van zijn dat ze besmet danwel besmettelijk zijn. Juist vanwege deze ongrijpbaarheid zijn er grootschalige
preventieve maatregelen als afstand houden, groepsbeperking en mondkapjes ingevoerd.&lt;&#x2F;p&gt;
&lt;p&gt;Met name de situatie waar we nu in zitten voelt voor veel mensen erg tegenintuïtief, alle cijfers lijken te dalen, en
toch zijn we zelfs een avondklok ingegaan. Het is logisch dat dat vraagtekens oproept. Bij de critici die het handelen
van de overheid hierin toch al niet vertrouwen, roept het al snel grote verontwaardiging en zelfs woede op. De maatregel
is immers ook extreem grof en heftig.&lt;&#x2F;p&gt;
&lt;p&gt;Wij zijn geen China, en beperkingen op onze vrijheid raken ons vrij fundamenteel. Ik geloof ook niet dat de overheid
zulke maatregelen graag oplegt, zoals sommige complotdenkers beweren, maar het als een noodzakelijk kwaad zien. Dat de
maatregelen ook grote schade aanrichten lijkt me evident, maar verdedigbaar om nog grotere schade te voorkomen. Dit is
geen makkelijke afweging en is er een die we ook keer op keer opnieuw moeten blijven maken. Ik heb alle begrip voor
kritiek op maatregelen en voor zelfs principiële rode lijnen waar niet overheen gegaan kan worden ongeacht de
consequenties. Voor sommige ligt die bij de avondklok, een maatregel waar ik principieel ook erg veel moeite mee heb.
Voor anderen is die al lang gepasseerd of ligt die pas later bij bv. het actief monitoren en ingrijpen &quot;achter de
voordeur&quot; bij mensen thuis.  Dat zou voor mij zo&#x27;n principiële lijn zijn. Voor de maatregelen die we wel nemen moeten we
altijd zeer waakzaam blijven dat ze tijdelijk en doelgericht zijn, en geen precedent scheppen waar later misbruik van
gemaakt kan worden.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusie&quot;&gt;Conclusie&lt;&#x2F;h2&gt;
&lt;p&gt;De wijdverbreide consensus, waar ik me bij aansluit, is dat het virus en de daaruit voortkomende pandemie een zeer reëel
probleem vormen waar niet te lichtzinnig mee omgegaan moet worden. Dat het middel erger zou zijn dan de kwaal bestrijd
ik. Ik vind ook dat critici vooral geneigd zijn de kwaal weg te relativeren in plaats van betere oplossingen te
suggereren. Overheden hebben een terechte opgave om in deze kwestie pro-actief de volksgezondheid te beschermen.&lt;&#x2F;p&gt;
&lt;p&gt;Skeptisch de wetenschap volgen is uiteraard goed, maar vertrouwen hebben in de consensus die daaruit voorkomt is een
essentiële component hierin. Maarten Boudry formuleert het mooi als “Wetenschap is de juiste balans tussen twijfel en
vertrouwen” [^boudry2]. Ik onderstreep alle menselijke gebreken die ook wetenschappers eigen zijn maar vertrouw erop dat
deze in het grote geheel eerder gladgestreken dan uitvergroot worden. Ik verklaar de wetenschap en de wetenschapper
zeker niet heilig, maar zij zijn de beste manier om de wereld te duiden. Ik onderken ook het feit dat de media de
wetenschappelijke output zeker niet altijd met de juiste nuance vertolkt en dat er zowel in media als politiek uiteraard
conflicterende belangen kunnen spelen. De rolverdeling moet altijd zijn dat de politiek regeert, de wetenschap
adviseert, en de journalistiek rapporteert en controleert. Men moet hier niet op elkaars stoel gaan zitten.&lt;&#x2F;p&gt;
&lt;p&gt;Het gevaar van &#x27;confirmation-bias&#x27; of &#x27;cherry-picking&#x27; liggen al snel op de loer, ook voor de wetenschapper, maar
helemaal voor de leek. Het is lastig om wetenschappelijke geluiden die tegen de consensus ingaan op hun juiste waarde te
schatten als je de breedte van het veld niet goed in beeld hebt. Het is juist die breedte die de consensus vormt. We
zijn allemaal snel geneigd tot zelfoverschatting en tot het in een positieve-feedback loop geraken waar het om onze
overtuigingen gaat. Als we ruim gedragen consensus overboord zetten terwijl we zelf geen experts in de materie zijn, dan
draagt dit een extra risico dat we het bij het verkeerde eind hebben.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referenties&quot;&gt;Referenties&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;[^campbell] John Campbell, Youtube kanaal &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;c&#x2F;Campbellteaching&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;c&#x2F;Campbellteaching&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^vpro] VPRO Tegenlicht wijdde hier onlangs een interessante aflevering aan: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vpro.nl&#x2F;programmas&#x2F;tegenlicht&#x2F;kijk&#x2F;afleveringen&#x2F;2020-2021&#x2F;zorgen-voor-morgen.html#&quot;&gt;https:&#x2F;&#x2F;www.vpro.nl&#x2F;programmas&#x2F;tegenlicht&#x2F;kijk&#x2F;afleveringen&#x2F;2020-2021&#x2F;zorgen-voor-morgen.html#&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^rtlnieuws] RTL Nieuws - Kuipers: geen enkel zorgsysteem kan snelle verspreiding Britse coronavariant aan &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rtlnieuws.nl&#x2F;nieuws&#x2F;nederland&#x2F;artikel&#x2F;5208327&#x2F;kuipers-geen-enkel-zorgsysteem-kan-zeer-snelle-verspreiding-aan&quot;&gt;https:&#x2F;&#x2F;www.rtlnieuws.nl&#x2F;nieuws&#x2F;nederland&#x2F;artikel&#x2F;5208327&#x2F;kuipers-geen-enkel-zorgsysteem-kan-zeer-snelle-verspreiding-aan&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^expresso] Expresso - “É para isso que servem os amigos”: a equipa médica alemã já está em Portugal  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;expresso.pt&#x2F;coronavirus&#x2F;2021-02-03-E-para-isso-que-servem-os-amigos-a-equipa-medica-alema-ja-esta-em-Portugal&quot;&gt;https:&#x2F;&#x2F;expresso.pt&#x2F;coronavirus&#x2F;2021-02-03-E-para-isso-que-servem-os-amigos-a-equipa-medica-alema-ja-esta-em-Portugal&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^cmjornal] CM - Avião-hospital pronto a levar doentes portugueses com Covid-19 para a Alemanha &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cmjornal.pt&#x2F;sociedade&#x2F;detalhe&#x2F;aviao-hospital-pronto-a-levar-doentes-portugueses-com-covid-19-para-a-alemanha&quot;&gt;https:&#x2F;&#x2F;www.cmjornal.pt&#x2F;sociedade&#x2F;detalhe&#x2F;aviao-hospital-pronto-a-levar-doentes-portugueses-com-covid-19-para-a-alemanha&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^redebrasil] Rede Brasil Atual - Hospitais de Manaus ficam sem oxigênio, dois dias depois de Pazuello pressionar por cloroquina &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.redebrasilatual.com.br&#x2F;saude-e-ciencia&#x2F;2021&#x2F;01&#x2F;manaus-fica-sem-oxigenio-dois-dias-depois-de-ministro-oferecer-cloroquina&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.redebrasilatual.com.br&#x2F;saude-e-ciencia&#x2F;2021&#x2F;01&#x2F;manaus-fica-sem-oxigenio-dois-dias-depois-de-ministro-oferecer-cloroquina&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^folhapatoense] Folha Patoense - Pacientes fogem dos hospitais de Manaus para ‘morrer em casa’ &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.folhapatoense.com&#x2F;2021&#x2F;01&#x2F;20&#x2F;pacientes-fogem-dos-hospitais-de-manaus-para-morrer-em-casa&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.folhapatoense.com&#x2F;2021&#x2F;01&#x2F;20&#x2F;pacientes-fogem-dos-hospitais-de-manaus-para-morrer-em-casa&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^amazoniareal] Amazônia Real - Pandemia no Amazonas: Manaus volta a registrar mortes em casa &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amazoniareal.com.br&#x2F;manaus-volta-a-registrar-mortes-em-casa&#x2F;&quot;&gt;https:&#x2F;&#x2F;amazoniareal.com.br&#x2F;manaus-volta-a-registrar-mortes-em-casa&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^guardian] The Guardian - &#x27;Utter disaster&#x27;: Manaus fills mass graves as Covid-19 hits the Amazon&#x27;  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;world&#x2F;2020&#x2F;apr&#x2F;30&#x2F;brazil-manaus-coronavirus-mass-graves&quot;&gt;https:&#x2F;&#x2F;www.theguardian.com&#x2F;world&#x2F;2020&#x2F;apr&#x2F;30&#x2F;brazil-manaus-coronavirus-mass-graves&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^sabino2021] Ester C Sabino, Lewis F Buss, Maria P S Carvalho, Carlos A Prete Jr,  Myuki A E Crispim, Nelson A Fraiji et al. (2021). Resurgence of COVID-19 in Manaus, Brazil, despite high seroprevalence. The Lancet. DOI:&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0140-6736(21)00183-5&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0140-6736(21)00183-5&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^flaxman2020] Flaxman, S., Mishra, S., Gandy, A. et al. (2020). Estimating the effects of non-pharmaceutical interventions on COVID-19 in Europe. Nature 584, 257–261. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1038&#x2F;s41586-020-2405-7&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1038&#x2F;s41586-020-2405-7&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^volkskrant3] Volkskrant - Ook maanden na corona nog extreem moe: ‘Dit is een nieuwe ziekte. En een buitensporige’ &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;wetenschap&#x2F;ook-maanden-na-corona-nog-extreem-moe-dit-is-een-nieuwe-ziekte-en-een-buitensporige~bd35c456&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;wetenschap&#x2F;ook-maanden-na-corona-nog-extreem-moe-dit-is-een-nieuwe-ziekte-en-een-buitensporige~bd35c456&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^cbs] CBS Jaaroverzicht 2020 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cbs.nl&#x2F;nl-nl&#x2F;achtergrond&#x2F;2020&#x2F;53&#x2F;jaaroverzicht-2020&quot;&gt;https:&#x2F;&#x2F;www.cbs.nl&#x2F;nl-nl&#x2F;achtergrond&#x2F;2020&#x2F;53&#x2F;jaaroverzicht-2020&lt;&#x2F;a&gt; . Voor een aantal Europese landen: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.euromomo.eu&#x2F;graphs-and-maps#excess-mortality&quot;&gt;https:&#x2F;&#x2F;www.euromomo.eu&#x2F;graphs-and-maps#excess-mortality&lt;&#x2F;a&gt; . Het CBS heeft ook een mooi filmpje met uitleg over de berekening gemaakt: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=6E5e2PbvmwA&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=6E5e2PbvmwA&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^sargasso] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sargasso.nl&#x2F;hoe-fvd-met-visuele-trucs-sterfte-door-corona-wegpoetst-oversterfte&#x2F;&quot;&gt;https:&#x2F;&#x2F;sargasso.nl&#x2F;hoe-fvd-met-visuele-trucs-sterfte-door-corona-wegpoetst-oversterfte&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^blackburn2021] Blackburn et al (2021) - Infection Fatality Ratios for COVID-19 Among Noninstitutionalized Persons 12 and Older: Results of a Random-Sample Prevalence Study - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.acpjournals.org&#x2F;doi&#x2F;full&#x2F;10.7326&#x2F;M20-5352&quot;&gt;https:&#x2F;&#x2F;www.acpjournals.org&#x2F;doi&#x2F;full&#x2F;10.7326&#x2F;M20-5352&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^levin2020] Levin, A.T., Hanage, W.P., Owusu-Boaitey, N. et al. Assessing the age specificity of infection fatality rates for COVID-19: systematic review, meta-analysis, and public policy implications. Eur J Epidemiol 35, 1123–1138 (2020). &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s10654-020-00698-1&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s10654-020-00698-1&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^boudry] Maarten Boudry - Academici denken beter twee keer na voor ze hun gewicht verlenen aan corona-scepticisme - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;maartenboudry.be&#x2F;2020&#x2F;09&#x2F;academici-denken-beter-twee-keer-na-voor-ze-hun-gewicht-verlenen-aan-corona-scepticisme.html&quot;&gt;https:&#x2F;&#x2F;maartenboudry.be&#x2F;2020&#x2F;09&#x2F;academici-denken-beter-twee-keer-na-voor-ze-hun-gewicht-verlenen-aan-corona-scepticisme.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^boudry2] Maarten Boudry - “Wetenschap is de juiste balans tussen twijfel en vertrouwen” &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.durfdenken.be&#x2F;nl&#x2F;ugenters&#x2F;wetenschap-de-juiste-balans-tussen-twijfel-en-vertrouwen&quot;&gt;https:&#x2F;&#x2F;www.durfdenken.be&#x2F;nl&#x2F;ugenters&#x2F;wetenschap-de-juiste-balans-tussen-twijfel-en-vertrouwen&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^volkskrant2] Volkskrant - OMT-leden hadden zoveel moeite met de politieke druk dat ze overwogen op te stappen  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;nieuws-achtergrond&#x2F;omt-leden-hadden-zoveel-moeite-met-de-politieke-druk-dat-ze-overwogen-op-te-stappen~bbff108c&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;nieuws-achtergrond&#x2F;omt-leden-hadden-zoveel-moeite-met-de-politieke-druk-dat-ze-overwogen-op-te-stappen~bbff108c&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^borger2019] Borger et al (2019) - External Review and request to retract the paper of Corman et al, published in Eurosurveillance January 23, 2020. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cormandrostenreview.com&#x2F;retraction-request-letter-to-eurosurveillance-editorial-board&#x2F;&quot;&gt;https:&#x2F;&#x2F;cormandrostenreview.com&#x2F;retraction-request-letter-to-eurosurveillance-editorial-board&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^corman2019] Corman, V. M., Landt, O., Kaiser, M., Molenkamp, R., Meijer, A., Chu, D. K., Bleicker, T., Brünink, S., Schneider, J., Schmidt, M. L., Mulders, D. G., Haagmans, B. L., van der Veer, B., van den Brink, S., Wijsman, L., Goderski, G., Romette, J. L., Ellis, J., Zambon, M., Peiris, M., … Drosten, C. (2020). Detection of 2019 novel coronavirus (2019-nCoV) by real-time RT-PCR. Euro surveillance : bulletin Europeen sur les maladies transmissibles = European communicable disease bulletin, 25(3), 2000045. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.2807&#x2F;1560-7917.ES.2020.25.3.2000045&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.2807&#x2F;1560-7917.ES.2020.25.3.2000045&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^eurosurveillance] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.eurosurveillance.org&#x2F;content&#x2F;10.2807&#x2F;1560-7917.ES.2021.26.5.2102041&quot;&gt;https:&#x2F;&#x2F;www.eurosurveillance.org&#x2F;content&#x2F;10.2807&#x2F;1560-7917.ES.2021.26.5.2102041&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^mckay] Ian M. Mckay - The “false-positive PCR” problem is not a problem: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;virologydownunder.com&#x2F;the-false-positive-pcr-problem-is-not-a-problem&#x2F;&quot;&gt;https:&#x2F;&#x2F;virologydownunder.com&#x2F;the-false-positive-pcr-problem-is-not-a-problem&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^koopmans] Dr. Marion Koopmans (co-auteur van het Corman paper) reageert zelf ook in een twitter draadje: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;MarionKoopmans&#x2F;status&#x2F;1333002771738611712&quot;&gt;https:&#x2F;&#x2F;twitter.com&#x2F;MarionKoopmans&#x2F;status&#x2F;1333002771738611712&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^publikum] Publikum - Wie man die „Drosten-PCR“ zu SARS-CoV-2 ganz einfach nicht widerlegt &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;publikum.net&#x2F;wie-man-die-drosten-pcr-zu-sars-cov-2-ganz-einfach-nicht-widerlegt&#x2F;&quot;&gt;https:&#x2F;&#x2F;publikum.net&#x2F;wie-man-die-drosten-pcr-zu-sars-cov-2-ganz-einfach-nicht-widerlegt&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^visser] Deze bijdrage is van na het antwoord van Eurosurveillance: Frank Visser - The Corona Conspiracy Part 24: PCR-Gate 2: When Lockdown Skeptics Pose as Expert Scientists &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.integralworld.net&#x2F;visser198.html&quot;&gt;http:&#x2F;&#x2F;www.integralworld.net&#x2F;visser198.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^beyer] Prof. Andreas Beyer heeft de kritiek van Borger et al punt-voor-punt inline becomentarieerd: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;348732878_Pseudowissenschaftliche_Kritik_an_einem_von_der_Berliner_Charite_veroffentlichten_Coronavirus_SARS-CoV-2-Test_publiziert_von_Peter_Borger_und_Koautoren_Pseudoscientific_criticism_on_a_Coronavirus_SARS&quot;&gt;https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;348732878_Pseudowissenschaftliche_Kritik_an_einem_von_der_Berliner_Charite_veroffentlichten_Coronavirus_SARS-CoV-2-Test_publiziert_von_Peter_Borger_und_Koautoren_Pseudoscientific_criticism_on_a_Coronavirus_SARS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^kloptdatwel] Klopt dat wel? - Bedenkingen bij het ‘retraction paper’ voor de Corman-Drosten PCR-test &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kloptdatwel.nl&#x2F;2020&#x2F;12&#x2F;02&#x2F;retraction-paper-pcr&#x2F;&quot;&gt;https:&#x2F;&#x2F;kloptdatwel.nl&#x2F;2020&#x2F;12&#x2F;02&#x2F;retraction-paper-pcr&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^wilson] Video van moleculair bioloog Dr Wilson waarin hij de kritiek op de PCR-test behandelt: Were COVID PCR tests proven to be useless? No. - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kLODxwQj-ns&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kLODxwQj-ns&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^ftm] Follow The Money - Vivisectie op een twijfelzaaier in dertien bedrijven &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ftm.nl&#x2F;artikelen&#x2F;peter-borger-pcr-test-corona&quot;&gt;https:&#x2F;&#x2F;www.ftm.nl&#x2F;artikelen&#x2F;peter-borger-pcr-test-corona&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^sciencefeedback] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sciencefeedback.co&#x2F;claimreview&#x2F;claim-that-high-pcr-test-sensitivity-inflates-covid-19-cases-wrongly-conflates-the-issue-of-contagiousness-with-the-presence-of-infection&#x2F;&quot;&gt;https:&#x2F;&#x2F;sciencefeedback.co&#x2F;claimreview&#x2F;claim-that-high-pcr-test-sensitivity-inflates-covid-19-cases-wrongly-conflates-the-issue-of-contagiousness-with-the-presence-of-infection&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^ourworldindata] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ourworldindata.org&#x2F;coronavirus-testing&quot;&gt;https:&#x2F;&#x2F;ourworldindata.org&#x2F;coronavirus-testing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^wilson2] Dit punt komt ook duidelijk naar voren in een video van moleculair bioloog Dr Wilson waarin hij desinformatie van Dr. Mike Yeadon (een oud-medewerker van Pfizer populair in coronaskeptische kringen) weerlegt: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=8u-H5ihH8is&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=8u-H5ihH8is&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^reuters] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reuters.com&#x2F;article&#x2F;us-healthcare-coronavirus-who-idUSKBN2132S4&quot;&gt;https:&#x2F;&#x2F;www.reuters.com&#x2F;article&#x2F;us-healthcare-coronavirus-who-idUSKBN2132S4&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^mckay2] In corona-skeptische kringen gaat de claim rond dat zelfs het WHO waarschuwt voor PCR tests, een repliek daarop komt van Dr. Ian M. Mckay die stelt dat de skeptici meer in de WHO uitspraak lezen dan er is: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;virologydownunder.com&#x2F;who-to-new-pcr-users-read-the-damned-manual&#x2F;&quot;&gt;https:&#x2F;&#x2F;virologydownunder.com&#x2F;who-to-new-pcr-users-read-the-damned-manual&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^sueddeutsche] Die Unsichtbare Welle - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sueddeutsche.de&#x2F;wissen&#x2F;coronavirus-mutante-b117-daten-1.5197700&quot;&gt;https:&#x2F;&#x2F;www.sueddeutsche.de&#x2F;wissen&#x2F;coronavirus-mutante-b117-daten-1.5197700&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^cnn] CNN - Iceland lab&#x27;s testing suggests 50% of coronavirus cases have no symptoms &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;edition.cnn.com&#x2F;2020&#x2F;04&#x2F;01&#x2F;europe&#x2F;iceland-testing-coronavirus-intl&#x2F;index.html&quot;&gt;https:&#x2F;&#x2F;edition.cnn.com&#x2F;2020&#x2F;04&#x2F;01&#x2F;europe&#x2F;iceland-testing-coronavirus-intl&#x2F;index.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^campbell2] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bUfuF3Il4ik&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bUfuF3Il4ik&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^cao2020] Cao et al (2020) - Post-lockdown SARS-CoV-2 nucleic acid screening in nearly ten million residents of Wuhan, China - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pubmed.ncbi.nlm.nih.gov&#x2F;33219229&#x2F;&quot;&gt;https:&#x2F;&#x2F;pubmed.ncbi.nlm.nih.gov&#x2F;33219229&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^bmi] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bmj.com&#x2F;content&#x2F;371&#x2F;bmj.m4695&quot;&gt;https:&#x2F;&#x2F;www.bmj.com&#x2F;content&#x2F;371&#x2F;bmj.m4695&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^gu2011] Gu, Y., Komiya, N., Kamiya, H., Yasui, Y., Taniguchi, K., &amp;amp; Okabe, N. (2011). Pandemic (H1N1) 2009 Transmission during Presymptomatic Phase, Japan. Emerging Infectious Diseases, 17(9), 1737-1739. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dx.doi.org&#x2F;10.3201&#x2F;eid1709.101411&quot;&gt;https:&#x2F;&#x2F;dx.doi.org&#x2F;10.3201&#x2F;eid1709.101411&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^maurice] Maurice de Hond - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;maurice.nl&#x2F;&quot;&gt;https:&#x2F;&#x2F;maurice.nl&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^who] WHO - Transmission of SARS-CoV-2: implications for infection prevention precautions - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.who.int&#x2F;news-room&#x2F;commentaries&#x2F;detail&#x2F;transmission-of-sars-cov-2-implications-for-infection-prevention-precautions&quot;&gt;https:&#x2F;&#x2F;www.who.int&#x2F;news-room&#x2F;commentaries&#x2F;detail&#x2F;transmission-of-sars-cov-2-implications-for-infection-prevention-precautions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^nrc2] NRC - Maurice de Hond laveert tussen serieuze kritiek, onbewezen claims en viruswaanzin - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nrc.nl&#x2F;nieuws&#x2F;2021&#x2F;01&#x2F;28&#x2F;van-serieuze-kritiek-onbewezen-claims-en-viruswaanzin-a4029682&quot;&gt;https:&#x2F;&#x2F;www.nrc.nl&#x2F;nieuws&#x2F;2021&#x2F;01&#x2F;28&#x2F;van-serieuze-kritiek-onbewezen-claims-en-viruswaanzin-a4029682&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^kroncrv] KRO&#x2F;NRCV - Propaganda &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npo3.nl&#x2F;propaganda&#x2F;28-01-2021&#x2F;KN_1725469&quot;&gt;https:&#x2F;&#x2F;www.npo3.nl&#x2F;propaganda&#x2F;28-01-2021&#x2F;KN_1725469&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^op1] Uitzending van Op1 van 16 februari 2021&lt;&#x2F;li&gt;
&lt;li&gt;[^nrc] Ik haal hier wederom Wilem Engel als voorbeeld van de complotdenker aan: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nrc.nl&#x2F;nieuws&#x2F;2021&#x2F;02&#x2F;16&#x2F;de-familie-engel-gaat-altijd-voorop-in-de-strijd-tegen-de-overheid-a4032045&quot;&gt;https:&#x2F;&#x2F;www.nrc.nl&#x2F;nieuws&#x2F;2021&#x2F;02&#x2F;16&#x2F;de-familie-engel-gaat-altijd-voorop-in-de-strijd-tegen-de-overheid-a4032045&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^welt] Die Welt - Wenn der Staatssekretär Wissenschaftler zu „maximaler Kollaboration“ aufruft - &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.welt.de&#x2F;politik&#x2F;deutschland&#x2F;plus225868061&#x2F;Corona-Politik-Wie-das-Innenministerium-Wissenschaftler-einspannte.html&quot;&gt;https:&#x2F;&#x2F;www.welt.de&#x2F;politik&#x2F;deutschland&#x2F;plus225868061&#x2F;Corona-Politik-Wie-das-Innenministerium-Wissenschaftler-einspannte.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^gunnarkaiser] Gunnar Kaiser - Bestellte Wissenschaft - Einige Fragen - Anmerkungen und Fragen an die Journalisten der WELT zum Panikpapier des BMI &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gunnarkaiser.substack.com&#x2F;p&#x2F;bestellte-wissenschaft-einige-fragen&quot;&gt;https:&#x2F;&#x2F;gunnarkaiser.substack.com&#x2F;p&#x2F;bestellte-wissenschaft-einige-fragen&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^volkskrant] &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;columns-opinie&#x2F;de-griep-is-spoorloos-verdwenen-uit-de-statistieken-van-de-belangrijkste-gezondheidsorganisatie~bb2c9610&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.volkskrant.nl&#x2F;columns-opinie&#x2F;de-griep-is-spoorloos-verdwenen-uit-de-statistieken-van-de-belangrijkste-gezondheidsorganisatie~bb2c9610&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^huang2021] Huang, Q.S., Wood, T., Jelley, L. et al. Impact of the COVID-19 nonpharmaceutical interventions on influenza and other respiratory viral infections in New Zealand. Nat Commun 12, 1001 (2021). &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1038&#x2F;s41467-021-21157-9&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1038&#x2F;s41467-021-21157-9&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^svt] SVT - Kungen om pandemin: ”Jag anser att vi har misslyckats”  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svt.se&#x2F;nyheter&#x2F;inrikes&#x2F;kungen-jag-anser-att-vi-har-misslyckats&quot;&gt;https:&#x2F;&#x2F;www.svt.se&#x2F;nyheter&#x2F;inrikes&#x2F;kungen-jag-anser-att-vi-har-misslyckats&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;[^rtl2] RTL Nieuws - RIVM: 20 procent positief geteste mensen gaat toch naar buiten &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rtlnieuws.nl&#x2F;nieuws&#x2F;nederland&#x2F;artikel&#x2F;5190014&#x2F;rivm-20-procent-positief-geteste-mensen-gaat-naar-buiten&quot;&gt;https:&#x2F;&#x2F;www.rtlnieuws.nl&#x2F;nieuws&#x2F;nederland&#x2F;artikel&#x2F;5190014&#x2F;rivm-20-procent-positief-geteste-mensen-gaat-naar-buiten&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>The Disinformation age</title>
          <pubDate>Fri, 08 Jan 2021 18:33:28 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/disinformation-age/</link>
          <guid>https://proycon.anaproy.nl/posts/disinformation-age/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/disinformation-age/">&lt;h1 id=&quot;the-disinformation-age&quot;&gt;The Disinformation Age&lt;&#x2F;h1&gt;
&lt;p&gt;They say this is the Information Age, but it may as well be called the Disinformation Age given the state of current
affairs. This week, an angry mob stormed the US Capitol, whipped up for months, if not years, by an ever increasing
torrent of falsehoods from their President. The shock of how many people would follow such a person already struck me in
2016 when they, to my great surprise, actually elected him into office. Now, in 2020, he lost the election. This is not
a contested issue juridically by any means, but is only so in the view of his supporters, they claim fraud and injustice
and actually believe this with every fiber in their body.&lt;&#x2F;p&gt;
&lt;p&gt;Trumpists are storming the Capitol in the delusion their candidate won the presidential election. Others (well, there is
considerable overlap actually), are blatantly disregarding the fact that there is a dangerous virus sweeping the world,
some going as far to even deny the very existence of the virus, in complete disregard of the current stress on hospitals
all around the world. Despite widespread scientific consensus, many still deny humanity exacerbates climate change, or
refuse vaccination and turn to homeopathy instead. Hordes of religious folk probably even still reject evolution and
some fringe group even exerts that the earth is flat, whilst another claims Hillary Clinton runs a child abuse ring in
the basement of a New York pizzeria. Meanwhile, Putin&#x27;s Kremlin keeps pursuing an active policy of disinformation and
attempts to sow confusion and discord in the western world where they see an opportunity for their division to their own
political advantage. They&#x27;re currently denying their attempted murder of Navalny (not to mention the shooting down of
the MH17 plane and the annexation of Crimea by little green men), in spite of an actual accidental confession by the
murderer and the long line of precedence of people who did not live to see another day after opposing the Kremlin. China
keeps a tight lock on whatever information their citizens can access, and the Brits have finally left the EU after a
voting yes in a referendum where the Leave-campaign demonstrated a clear appetite for dishonesty. I could go on and on,
this is just the tip of the iceberg. I know I&#x27;m grouping a lot together here, but I just want to sketch the scene to
make a point: Disinformation reigns, how did things get this bad? Or is this something of all times?&lt;&#x2F;p&gt;
&lt;p&gt;I long for the days when I naively held the belief that reason always prevails in the end. If only you give people the
facts, they will come to the logical conclusion in the end. Make sound observations, clearly state your axioms and
premises, apply proper deduction, or I&#x27;ll even allow for induction if you please, and the truth will follow. A
scientific rigour of hypothesis and empirical verification or falsification thereof.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, we don&#x27;t have Vulcan minds like Mr. Spock, We are not made for pure logic, we are emotional beings. As
much as I value reason and like to pride myself as a rational being, I too have to admit that it is in fact mostly
emotion that rules my actions and thoughts and I&#x27;m not nearly as rational as I pretend to be. Especially strong negative
emotions such as fear and anger seem to play an important role in establishing and reinforcing our beliefs, they provide
a potent charge to our thoughts and beliefs and incline us to act upon them.&lt;&#x2F;p&gt;
&lt;p&gt;The beliefs that people hold are a function of their own perceptions and cognitions, whether that be through direct
personal experience through the senses, instilled through parents or schools, or through media or literature. Beliefs we
hold true need not be factually true of course. Whatever our beliefs are, they are just an interpretation of reality
filtered through our perception. We approximate reality but never fully capture it. The beliefs we hold can be at odds
with one another, and shift according to time and circumstances. We all live in our own reality in this sense, and these
views of reality may clash violently.&lt;&#x2F;p&gt;
&lt;p&gt;This human treat of differing perceptions and views, and the need to find a consensus and common course of action in
this diversity, probably constitutes the heart of politics. Gather people for your cause by convincing them that your
view of reality is right, and crush the opposition by pitting them against those who think differently. Spread your
message, teach in your schools, send out the heralds, evangelize the infidels, burn the heretics. Information gives a
form of power, it brings knowledge that can be acted upon to gain an advantage, it can be shared or it can be withheld.&lt;&#x2F;p&gt;
&lt;p&gt;Political power often lives by grace of control of the channels of information, this holds especially true for
authoritarian regimes. Entire nations and religions establish their own view of reality that often has more to do with
their own motives and need to retain order and power than an actual bearing on reality. Take a look the Chinese Communist
Party for example, there is no real independent media and they erected the great firewall to block their netizens from
being confronted with any views of reality that can threaten their regime. The tiananmen massacre of &#x27;89? Never
happened. If political powers have full control over the media, truth is the first casualty. Authoritarian leaders need
their own narrative to prevail if they are to keep power, so the machine of the state turns against any critical independent
media. I mention China and also Russia as notable examples out of many. But also in the EU there is already cause for
concern, especially in Orbán&#x27;s Hungary (and before that we had Berlusconi&#x27;s Italy). Separation of state and media is as
vital as that of state and church, if we want to live in a free society.&lt;&#x2F;p&gt;
&lt;p&gt;Even in the west where we do have independent media that can not be simply crushed by the state, we also find media
under siege. The siege can still come from the top echelons of the state, like in the US and Hungary, even though they
lack the brute force authoritarian regimes have. Trump is probably one of the most vocal and visible attackers of the
independent media nowadays. He simply brands everything he dislikes as &quot;fake news&quot; and repeats the message over and
over. To a sizable disenchanted part of the population, this message sticks, and the siege on the media now comes from
the disenchanted populace themselves. We see the consequences in the storm of Capitol Hill where the mob turn on press
equipment and trash it, and write &quot;Murder the Media&quot; on the door inside after forcing entry.&lt;&#x2F;p&gt;
&lt;p&gt;Even here in the Netherlands, we see that a prime public broadcaster, NOS, decided to remove their logos from their vans
after an increase of threats against their journalists from certain groups. We live in a strange time of a global
pandemic and exceptional lockdowns that probably triggers people in extra ways, the temporary restrictions of our
liberties are unprecedented and I think it is good to display some skepticism in such cases in principle. But certain
groups seem to go into overdrive and turn on the media in general, which I find a concerning development. They seem to
display a revulsion towards anything that is considered mainstream, have little no regard for professional journalism,
and instead obtain their news only from like-minded peers on social networks or fringe sources like a deranged tweeting
president or other self-proclaimed experts with little esteem in the communities they ought to represent. In the extreme
case, this leads to all kinds of conspiracy theories that are shared across the social networks.&lt;&#x2F;p&gt;
&lt;p&gt;A true journalist aspires to a high degree of objectivity. Journalism is an important profession that should act as a
vital control for our societies and the governing bodies within, constantly testing and reporting on what is going on
and sharing this information with the public. The high standard of objectivity and rigorous methodology of a journalist
distinguish her from the mere entertainer or entrepreneur. But of course, even the best journalist is not a Vulcan
either, she does not exist in a vacuum and has her own views that may colour the reporting, and may even actively
further a certain position, so may her employer which also has other interests at heart such as commercial ones. This
stresses the importance of getting news and information from various different sources, and the importance that these
multiple sources are in fact available in the society.  One of the main issues of this day and age, with the internet at
our fingertips and everybody being able to have their say, is the sheer overload of information that we&#x27;re never able to
sift through.  The difficulty becomes to separate the weed from the chaff. In a forest of an abundance of sources, those
who shout the loudest are often not the best to listen to, and the opinions of the loud next-door neighbour should not
carry the same weight as those of experts in a given field.&lt;&#x2F;p&gt;
&lt;p&gt;The conspiracy theorist is the extreme example that seems on the rise nowadays, having gone down a deep echoing well in
which only his own views resonate, more often than not accompanied by strong heartfelt emotions. The walls of the well
are often formed by the filter bubbles of social media. They put us in a spot where we find ourselves only amongst peers
with similar views. This can be the same political view, the same religious conviction, the same race, the same sexual
orientation, and so on.. Social media act as Indignation Machines inciting our rage against conflicting views, and
thereby reinforcing our view.  Eventually, we fuse with some views and they become a part of our identity, &quot;I am a
democrat&quot;, &quot;I am an American&quot;, &quot;I am a Christian&quot;, &quot;I am a black man&quot;, &quot;I am gay&quot; and it becomes even harder to distance
ourselves from the barrage of associated views; doing so would lead to a loss of self.&lt;&#x2F;p&gt;
&lt;p&gt;I do think that we are all by nature quite susceptible to confirmation bias and prefer to consult those sources that
reinforce the views we already hold and to seek the company of people who think alike. It&#x27;s the path of least resistance
and a bonding experience for social creatures like us. I&#x27;m not a psychologist, but I imagine it is more pleasant and to
be confirmed over and over again that you are in fact right and good and just than to have to expend energy to
accommodate conflicting views in your world-view or even be challenged in your core identity.&lt;&#x2F;p&gt;
&lt;p&gt;In light of this, we have to be careful not to brand every skeptic as a conspiracy theorist and in doing so shut them off.
We have to maintain open dialogue for as long as possible. I think skepticism in itself is a very commendable attitude
and one of the pillars of both good science and good journalism.  Like Socrates taught, through asking questions we can
learn and grow. Carefully evaluate your sources of information, a report has more validity if the source backed up by
other sources who do not share the same socio-political agenda. The information must also be weighed in its full
context, as it is easy to misconstrue something and make it out to be something it is not. Appearances can be deceiving.
Yet at the same time, don&#x27;t expect any source to be infallible and have everything straight, errare humanum est, this
does not immediately mean their entire perspective is worthless.&lt;&#x2F;p&gt;
&lt;p&gt;Ask questions like Socrates, but ask especially questions to yourself. This is where things often go wrong. I think the
primary focus for a skeptic should always be a kind of self-skepticism. Why do you hold the views you do? What
underlying emotions have charged the views you hold, and are they really justified? A true skeptic should actively
attempt to falsify his own views, and only in his inability to do so, can he validate his view.&lt;&#x2F;p&gt;
&lt;p&gt;We also have the option &lt;em&gt;not&lt;&#x2F;em&gt; to take a stance on a certain topic and to state we simply do not know, or have not made
up our mind yet, or changed our minds from the original position we held. Nowadays it seems as if we feel obliged to
take and hold a position, often a fairly black and white one: &quot;If you&#x27;re not with us you&#x27;re against us!&quot;. This makes us lose the
important ability of nuance. But the world is complex and composed of shades of gray instead of black and white, things
usually aren&#x27;t that clean-cut and can be seen from other perspectives. The ability to shift perspective, see something
from the other&#x27;s point of view, is also a question of empathy, of which we could use a bit more in my opinion as well.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Homepage update: from Hugo to Zola</title>
          <pubDate>Tue, 29 Dec 2020 18:56:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/hugo-to-zola/</link>
          <guid>https://proycon.anaproy.nl/posts/hugo-to-zola/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/hugo-to-zola/">&lt;h1 id=&quot;homepage-update-from-hugo-to-zola&quot;&gt;Homepage update: from Hugo to Zola&lt;&#x2F;h1&gt;
&lt;p&gt;At the start of 2019, I launched a new incarnation of my homepage (yes, I still
call it &quot;homepage&quot;, it has a nice nostalgic touch to it of a time where people
still bothered to create their own little corner on the internet instead of
joining corporate social networks en masse) .  I had chucked away my old site
that still relied on server-side processing (I believe it was Django-based at
the time), which stopped being the hip thing to do many years ago.  Instead, my
2019 site was statically generated with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&quot;&gt;Hugo&lt;&#x2F;a&gt; and powered
by the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;themes.gohugo.io&#x2F;academic&#x2F;&quot;&gt;Academic theme&lt;&#x2F;a&gt;, which I heavily modified
to suit my needs.&lt;&#x2F;p&gt;
&lt;p&gt;Things looked pretty slick and I was happy with the end result, but as always,
happiness is fleeting. As time progressed, both Hugo and the theme I was using
saw various updates, mostly consisting of features and additions I didn&#x27;t need
or want anyways, and I found that my site would no longer generate with either
the latest Hugo or the latest Academic theme.&lt;&#x2F;p&gt;
&lt;p&gt;My aim had been to build a website that was more manageable over time, but that
failed. Getting rid of server-side processing was a good thing, but my website
was still too complex. Moreover, it contained some javascript and external
resources that I really wanted to get rid of as this became more and more of an
affront to my ethical sensibilities.&lt;&#x2F;p&gt;
&lt;p&gt;One thing I never liked about Hugo was its templating syntax, but I do see the
value of having a good and powerful templating system. There are countless
static site generators out there, as evidenced by for example
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jamstack.org&#x2F;generators&#x2F;&quot;&gt;Jamstack&lt;&#x2F;a&gt;, so I set out to investigate a
bit. I wanted to have a solution where I could do most of the actual content
writing in Markdown, but still have some decent control over how things end up.&lt;&#x2F;p&gt;
&lt;p&gt;Drawn by minimalism, I even contemplated solutions such as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.romanzolotarev.com&#x2F;ssg.html&quot;&gt;ssg by Roman
Zolotarev&lt;&#x2F;a&gt; or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mkws.sh&#x2F;&quot;&gt;mkws&lt;&#x2F;a&gt;, but the former foregoes on templating altogether and
just sticks on a header and footer, and the latter uses shell scripting as
templating, which is not a syntactic improvement.&lt;&#x2F;p&gt;
&lt;p&gt;Although generating a site isn&#x27;t very performance-critical for me, I did want
something efficient and compiled in a single binary, in the hope that this
would be closer to achieving simplicity and minimalism.  Therefore, static site
generators in interpreted languages, like Ruby, Python or Javascript, were out
of scope for me. That ruled out things like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jekyllrb.com&#x2F;&quot;&gt;Jekyll&lt;&#x2F;a&gt;,
which I have some experience with for some other websites.&lt;&#x2F;p&gt;
&lt;p&gt;To make a long story short, I opted for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt; in the end.
A fairly simply static site generator written in Rust. This is one that looked
simple enough and up to do the job, without doing much more than that. It
features a nice templating engine with a decent Jinja2-like syntax and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;shortcodes&#x2F;&quot;&gt;shortcodes&lt;&#x2F;a&gt;. The
fact that it&#x27;s in Rust was a compelling argument for me too, as I know and like
Rust, so I&#x27;ll be able to contribute to the generator if needed.&lt;&#x2F;p&gt;
&lt;p&gt;I also decided I shouldn&#x27;t rely on an external template as a basis, but
make something from scratch and for my specific purpose, that way it can&#x27;t diverge
and it won&#x27;t contain things I won&#x27;t need or need to strip out.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll summarise my experience with Zola in a pro and cons list:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pro&quot;&gt;Pro&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Simple&lt;&#x2F;li&gt;
&lt;li&gt;No unnecessary bloat, things you may want (like galleries) are not predefined but you can accomplish easily through templates)&lt;&#x2F;li&gt;
&lt;li&gt;Good intuitive template syntax&lt;&#x2F;li&gt;
&lt;li&gt;Written in Rust, single binary&lt;&#x2F;li&gt;
&lt;li&gt;Responsive developer&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;con&quot;&gt;Con&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;The distinction between sections and pages was a bit limiting in some regards, can&#x27;t I have a section be a page at the same time? Building a navigation menu over both was a bit convoluted for me, but I may have misunderstood something perhaps.&lt;&#x2F;li&gt;
&lt;li&gt;Error feedback could be better in general, it would also be nice if we could set verbosity a bit higher whilst zola is running.&lt;&#x2F;li&gt;
&lt;li&gt;I had one actual crash&#x2F;panic (but I submitted an issue and this is already being fixed by the developer)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I think most of these issues come down to lacking some maturity still, but I&#x27;m
confident of the direction the development is proceeding in. I hope backward
compatibility will be better guaranteed than my experience with Hugo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m not the only one two has made the jump from Hugo to Zola, I found two other blog posts on the topic and found their stories insightful:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.xypnox.com&#x2F;blag&#x2F;posts&#x2F;migrating-to-zola&#x2F;&quot;&gt;by xypnox&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mrkaran.dev&#x2F;posts&#x2F;migrating-to-zola&#x2F;&quot;&gt;by Karan Sharma&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>SVKBD: Simple Virtual Keyboard</title>
          <pubDate>Tue, 29 Dec 2020 16:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/svkbd/</link>
          <guid>https://proycon.anaproy.nl/software/svkbd/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/svkbd/">&lt;h1 id=&quot;svkbd-simple-virtual-keyboard&quot;&gt;SVKBD: Simple Virtual Keyboard&lt;&#x2F;h1&gt;
&lt;p&gt;This is a simple virtual keyboard, intended to be used in environments where no physical keyboard is available.&lt;&#x2F;p&gt;
&lt;p&gt;This is a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;suckless.org&quot;&gt;suckless&lt;&#x2F;a&gt; tool and is not my original work, I simply extended this software with a lot
of functionality needed for &lt;a href=&quot;&#x2F;software&#x2F;sxmo&#x2F;&quot;&gt;sxmo&lt;&#x2F;a&gt;, a mobile environment for the pinephone.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Sxmo: Simple X Mobile</title>
          <pubDate>Tue, 29 Dec 2020 16:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/sxmo/</link>
          <guid>https://proycon.anaproy.nl/software/sxmo/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/sxmo/">&lt;h1 id=&quot;sxmo-simple-x-mobile&quot;&gt;Sxmo: Simple X Mobile&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;strong&gt;Sxmo&lt;&#x2F;strong&gt;, or Simple X Mobile, is a collection of simple and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;suckless.org&quot;&gt;suckless&lt;&#x2F;a&gt; X programs and scripts used together to create a fully
functional mobile UI adhering to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Unix_philosophy&quot;&gt;Unix philosophy&lt;&#x2F;a&gt; for the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pine64.org&#x2F;pinephone&#x2F;&quot;&gt;Pinephone&lt;&#x2F;a&gt;. You control the UI largely through using the
Pinephone buttons (press different numbers of times quickly for different actions) and swipe gestures.&lt;&#x2F;p&gt;
&lt;p&gt;This software project is an initiative by &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;milesalan.com&#x2F;&quot;&gt;Miles Alan&lt;&#x2F;a&gt;. I contributed in certain areas and am
currently a co-maintainer of this project.&lt;&#x2F;p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;&#x2F;posts&#x2F;sxmo-demo-video&#x2F;&quot;&gt;demo video&lt;&#x2F;a&gt; I made to get an impression of this software.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>SXMO: Simple X mobile - demo video on a pinephone</title>
          <pubDate>Mon, 14 Dec 2020 21:28:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/sxmo-demo-video/</link>
          <guid>https://proycon.anaproy.nl/posts/sxmo-demo-video/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/sxmo-demo-video/">&lt;h1 id=&quot;sxmo-simple-x-mobile-demo-video-on-a-pinephone&quot;&gt;SXMO: Simple X mobile - demo video on a pinephone&lt;&#x2F;h1&gt;
&lt;div &gt;
    &lt;video width=&quot;800&quot; height=&quot;600&quot; controls&gt;
        &lt;source src=&quot;https:&amp;#x2F;&amp;#x2F;anaproy.nl&amp;#x2F;proycon&amp;#x2F;pub&amp;#x2F;sxmodemo.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&#x2F;&gt;
    &lt;&#x2F;video&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Details shown in this video:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Hardware: Pinephone 1.2&lt;&#x2F;li&gt;
&lt;li&gt;Environment: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~mil&#x2F;Sxmo&quot;&gt;Sxmo&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Distribution: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;postmarketos.org&quot;&gt;PostmarketOS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Window Manager: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dwm.suckless.org&quot;&gt;dwm&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Terminal: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;st.suckless.org&quot;&gt;st&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Virtual Keyboard: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tools.suckless.org&#x2F;x&#x2F;svkbd&quot;&gt;svkbd&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Browser: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;surf.suckless.org&quot;&gt;surf&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The above are standard for sxmo, some customisations shown in the video:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Reddit client: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;tuir&quot;&gt;tuir&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Mail client: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neomutt.org&quot;&gt;neomutt&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Calendar: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;calcurse.org&quot;&gt;calcurse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Gruvbox theme&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;dotfiles&#x2F;tree&#x2F;master&#x2F;sxmo&quot;&gt;Dotfiles&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;dotfiles&#x2F;blob&#x2F;master&#x2F;media&#x2F;pine.jpg&quot;&gt;Wallpaper&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Vocage</title>
          <pubDate>Sat, 12 Sep 2020 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/vocage/</link>
          <guid>https://proycon.anaproy.nl/software/vocage/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/vocage/">&lt;h1 id=&quot;vocage&quot;&gt;Vocage&lt;&#x2F;h1&gt;
&lt;p&gt;Vocage is a minimalistic terminal-based vocabulary-learning tool. It presents flashcards using a spaced-repetition algorithm
(e.g. Leitner); words you know well will be presented less and less frequently and words you have problems with will be
repeated more often. You quickly move cards&#x2F;words between decks and each deck has an associated presentation interval.&lt;&#x2F;p&gt;
&lt;p&gt;You can use vocage for anything you&#x27;d use flashcards for and not necessarily limited
to learning languages.&lt;&#x2F;p&gt;
&lt;p&gt;The aim of this software is to keep things simple and minimalistic and to focus on one thing only (the unix philosphy).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;software&#x2F;vocage&#x2F;screen1.gif&quot; alt=&quot;Example of chinese vocabulary learning with vocage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Read more about vocage and get it from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;vocage&quot;&gt;Github&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~proycon&#x2F;vocage&quot;&gt;SourceHut&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Sesdiff</title>
          <pubDate>Fri, 04 Sep 2020 00:04:34 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/sesdiff/</link>
          <guid>https://proycon.anaproy.nl/software/sesdiff/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/sesdiff/">&lt;h1 id=&quot;sesdiff&quot;&gt;Sesdiff&lt;&#x2F;h1&gt;
&lt;p&gt;This is a small and fast command line tool and Rust library that reads a
two-column tab separated input from standard input and computes the shortest
edit script (Myers&#x27; diff algorithm) to go from the string in column A to the
string in column B. It also computed the edit distance (aka levenshtein
distance).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Break Free! Don&#x27;t be a prisoner of your sofware platform!</title>
          <pubDate>Sat, 06 Jun 2020 18:00:28 +0200</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/break-free-do-not-be-a-prisoner-of-your-software/</link>
          <guid>https://proycon.anaproy.nl/posts/break-free-do-not-be-a-prisoner-of-your-software/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/break-free-do-not-be-a-prisoner-of-your-software/">&lt;h1 id=&quot;break-free-don-t-be-a-prisoner-of-your-software-platform&quot;&gt;Break Free! Don&#x27;t be a prisoner of your software platform!&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;em&gt;&quot;An opinion piece on software, social media, and ethics&quot;, by Maarten van Gompel (proycon)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t use Windows or macOS, I don&#x27;t use Facebook or Instagram, I won&#x27;t use
WhatsApp, my Android phone has no Google Play store or Google services. I
minimize my use of Google as a search engine and I don&#x27;t like using Zoom,
Skype, Facetime or Slack to talk to people. And to add the cherry to the
cake, although you are of course free to choose for yourself, I don&#x27;t think you
should use any of these either!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&quot;Well, you sound like a fun person!&quot;&lt;&#x2F;em&gt;, you might think at this point, and
sometimes people indeed do wonder why I hold the views I do. I won&#x27;t deny that I
am a bit of an idealist. I don&#x27;t hold these views to be an annoyance or to cause
inconvenience, but where for most people these are probably rather
inconsequential choices, I do see them as being quite consequential, as I see an
important &lt;em&gt;ethical&lt;&#x2F;em&gt; dimension that needs to be addressed.&lt;&#x2F;p&gt;
&lt;p&gt;In this article I will explain my reasoning. I will argue that the increasing
role software plays in our lives, like in the form of social media platforms,
comes with considerable concerns. There is a massive intrusion on our privacy
ongoing, and we are being targetted psychologically in a manner that is not in
our best interest. This is has a direct impact on our societies, our politics,
and ultimately our freedom, which it at the heart of the issue. We must break
free from the walled-in prisons that software platforms lure us into and must
act more responsibly in our new digital role as both consumer and producer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;and-so-it-begins&quot;&gt;And so it begins...&lt;&#x2F;h2&gt;
&lt;p&gt;Already when I was in my early teens, I felt the need to break through the
constraints software platforms imposed on me. Our family had a state-of-the-art 486
running DOS and Windows 3.1 at a speedy 33Mhz (assuming the turbo button was
pressed). My dad had wisely put some extra constraints on it in the form of
a DOS-port of a unix shell, which came with some access control measures
preventing me from messing up the whole system.&lt;&#x2F;p&gt;
&lt;p&gt;As I discovered the art of Q-BASIC and the power granted by the SYSTEM command
within, true control over the family computer was quickly within my grasp and I
developed my own &quot;M-DOS&quot; shell; M being my initial; great inventions are often
named after their creator after all, and this is especially appealing if
you&#x27;re a 12 year-old boy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;break-free-do-not-be-a-prisoner-of-your-software&#x2F;younghacker1996.jpg&quot; alt=&quot;Young Hacker&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Being constrained by your own technology, not being able to use it to its full
potential, always felt wrong to me. At the end of the nineties, I got my actual
&#x27;own&#x27; Pentium computer that did not need be shared anymore by the family. I had grown
disenchanted with the Windows 95 platform we were running at the time, and
became increasingly intrigued by the fact that there were other operating
systems, more diversity, out there. Seeing my father run UNIX (SunOS) on his
SPARCstation for work was a likely a contributing factor to that.&lt;&#x2F;p&gt;
&lt;p&gt;So eventually I took the plunge and bought a copy of Red Hat Linux on 4 CD-ROMs.
In order to obtain those, I peddled several kilometers on my bike from my
hometown to a major bookstore in the nearest big city, something I had never done
before yet. To this day, this probably still counts as one of my great
achievements in the realm of physical exercise.&lt;&#x2F;p&gt;
&lt;p&gt;In the years leading up this, another new major development had started to
slowly begin taking the world: the advent of the Internet and the World Wide Web
in particular. The web brought a wealth of information and programs that
suddenly became available, my young brain was happy with the new torrent of
input, there was so much to learn and discover! The happiness was subdued only
by the resulting phone bill at the end of the month. Cable internet was new and
hadn&#x27;t reached our town yet, unfortunately.&lt;&#x2F;p&gt;
&lt;p&gt;The beauty of it all was not just the information you could consume, but
also the fact that you yourself could contribute and share things directly with
anybody in the world. I eagerly subscribed to something called GeoCities and
created my first homepage on the web, initially show-casing some Visual Basic
and Delphi software and some 3D art.&lt;&#x2F;p&gt;
&lt;p&gt;Then there was also Internet Relay Chat (IRC), a way to chat with people all
around the world. There were lots of IRC servers you could connect to, many of
them were grouped into networks. I made connections with many people on there,
founded a language-learning community with a lively IRC chat which I hosted on
my own server for years. I even met my boyfriend on an IRC channel, there were
no such things as Grindr or Tindr yet. To this day, I still actively use IRC,
especially for my daily work to keep in touch with colleagues.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;who-is-in-control&quot;&gt;Who is in control?&lt;&#x2F;h2&gt;
&lt;p&gt;In all the years, I have formed some pretty strong opinions about technology,
more specifically, about software, as that is what I am passionate about. I am also
not too inhibited to express these opinions, sometimes to the annoyance of the
recipient.  I choose the tools I use with care, rather than blindly accepting
what the majority of the people force upon you. I go for tools that are
open-source, tools that put the user in control rather than vice versa, and
that promote freedom of choice. I see this as a part of responsible consumerism
which I think should be practised more widely in general.&lt;&#x2F;p&gt;
&lt;p&gt;Even before I switched to Linux in the late nineties, my animosity towards
Microsoft had grown. Here we had this large US company, whose CEO, Bill Gates,
was the richest man in the world, having accumulated a fortune that I still
believe no single individual should ever be able to own. All this because his
company had developed an operating system (Windows), a software platform, that
almost everybody was using. This OS wasn&#x27;t even particularly good or innovative
from a technical point of view, but it was very cleverly and successfully
marketed at precisely the right time in history. The large majority of software
was written for it, it was hard to get around. It had accumulated a critical
mass that propelled it forward, growing like a snowball going down a snowy
hill. Winter was coming. Microsoft pursued aggressive litigation to
maintain its dominant position and tried their best to hinder the open source
movement in any way they could (in the end they failed and even they have to embrace open source now). A private
monopolist had risen, and this is never a healthy thing in my view.&lt;&#x2F;p&gt;
&lt;p&gt;Software does not just exist in a vacuum, there are societal, economic and,
yes, even moral implications to be be considered. This is about technology and
freedom, about responsible consumerism as I already mentioned earlier. Do the
tools you use give you the freedom to be creative, to be productive, to connect,
or do they ultimately restrain you? Are you controlling your tools or are the
tools ultimately controlling you? Appearances can be deceptive here.&lt;&#x2F;p&gt;
&lt;p&gt;If you are not in control of your software or your device, then someone else
is, and they may not have the same interests you have. Ultimately, a private
software development company seeks financial profit, which is a perfectly
legitimate goal by itself that I am not objecting to, but one has to be aware of
financial incentives that this creates for the vendor that are not in the best
interest of the user.&lt;&#x2F;p&gt;
&lt;p&gt;The internet and world wide web are actually astounding developments, and in a
way I think we can be very lucky that these have taken place as they did, and
that we did not end up with a proprietary internet controlled by a single
company (or by the US military who started it all), which by definition would never have been a
proper internet at all. The internet is all about inter-connectedness and
interoperability. Computers all over the world form a network together because
they speak to each-other, in a language all parties agree upon and can
understand. This language takes the form of communication protocols, such as IP,
TCP, DNS, FTP, IRC, HTTP, SMTP, IMAP and countless more.  These are open and
well documented and everybody with enough skill can write software that
implements these protocols. The whole collective of protocols can be visualised
in layers like that of an onion, where higher-level and more
application-specific protocols make use of lower-level protocols.&lt;&#x2F;p&gt;
&lt;p&gt;Everybody can start their own webserver (server software that implements HTTP),
their own mailserver (server software that implements SMTP), and near-instantly
connect with whomever in the world also speaks this protocol. This decentralised
foundation, also known as federation, is the true power of the internet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caught-in-the-sticky-web-of-hyper-commercialisation&quot;&gt;Caught in the sticky web of hyper-commercialisation&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;break-free-do-not-be-a-prisoner-of-your-software&#x2F;socialmediaweb.jpg&quot; alt=&quot;Social Media: Caught in the Sticky web of hyper-commercialisation&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yet, since the mid-2000&#x27;s, we&#x27;ve seen the internet change as it grew and grew
in popularity. Social media began its advent, in and of itself a great thing.
Allowing people from all over the world to connect and communicate better is a
worthy goal if you ask me. I am also by nature enthusiastic and
optimistic about true technological innovation. I was among the first
generation to sign-up for Facebook to see what it was like, back in the day
where you could only join with a e-mail address pertaining to a university.&lt;&#x2F;p&gt;
&lt;p&gt;But whereas the growth in the early days of the internet had taken shape in the
form of open protocols, adding new layers to the collective onion, now
the internet has become more and more commercialised and appropriated by big
tech companies. They built their own platforms without offering proper
interoperability. No longer were these platforms built to communicate with
like-minded platforms, allowing everybody to implement their own software for
it. Instead, they often did the reverse, appropriating existing technologies to
build a centralised system. Any users of the platform were effectively trapped
in it, as they can only connect to people using the very same proprietary
platform. As an analogy; how would you like it to be able to send e-mail only to
people who use the same very mail provider as you do? Even being forced to use
one particular e-mail app rather than one you choose?&lt;&#x2F;p&gt;
&lt;p&gt;Why would users pay to be trapped in a network? Well, aside from the fact that
I think most people simply don&#x27;t understand the implications a lack
of interoperability brings; they didn&#x27;t have to pay at all! It was all &quot;free&quot;! The
only concession there was to make is that you saw some advertisements here and
there. A new online business model had been born.&lt;&#x2F;p&gt;
&lt;p&gt;A fair price to pay? Things did not stop there, the business model got refined
to an extreme degree. Big social media platforms like Facebook, Google and
Twitter are in essence advertisement platforms. You are not the customer, the
customers are the advertisers, they are the ones that pay; you are the product
and the goal has become to learn as much as possible about you so you can be
presented with the advertisements you are most likely to be interested in and
click on. Computer algorithms of various companies hold real-time auctions
and the highest bidder gets to present you their ad, the money goes to the
platform.&lt;&#x2F;p&gt;
&lt;p&gt;This tracking is not limited to you visiting the platform, in order to learn
about you the big companies follow you on almost every website you go to. Every
site that has some sort of social media integration, a like button, a share
button, is part of an advanced tracking infrastructure. A treasure trove of data
is being collected on you and everybody else, and AI algorithms can learn from
all that has been gathered data to make even more educated guesses about you.
This collected data itself is offered for sale to whomever can afford it. Think
of this, do we want our health insurance to be able to see how often we check
online for symptoms of some malady? Do we want them to know the specific nature
of these symptoms?&lt;&#x2F;p&gt;
&lt;p&gt;Aside from the privacy aspect, there is also an important psychological
dimension, in an attempt to increase their ad revenue, big platforms have
perfected the art of capturing the attention of our monkey brains: Mechanisms
such a red notification dots near icons, likes&#x2F;hearts&#x2F;upvotes, pages that
scroll until the end of times, shouting headlines where each word is
capitalized like &quot;Eight Essential Tips For A Better Life You Must Know!&quot;,
colourful thumbnails featuring just the right amount of nudity, all dispersed
with carefully placed advertisements. All provide incentives to stay and
interact on a platform.  Surely you don&#x27;t want to miss out on all the
fascinating things your friends are posting? The hunger for new input, new
dopamine release, has detrimental effects on our attention span.  I am speaking
from my own experience here as I notice this myself as well, and from the
observation of seeing most people out in public glued to their phones.&lt;&#x2F;p&gt;
&lt;p&gt;In fact, I must compliment the reader at this point for sticking with me and
having read this article thus-far already. I know my writing, as eloquent as
it may be, is a bit long-winded and no match for that constant urge you feel to
check your phone, your Facebook, your Instagram, your mail, etc... Surely you
haven&#x27;t done any of these things whilst reading this, have you?&lt;&#x2F;p&gt;
&lt;p&gt;I think both the privacy and psychological aspects of social media are finally
getting more attention in recent years by the mainstream western public. I
think the word &#x27;western&#x27; is pivotal here, as it is important to realize that
there are two main camps, the western, often american, social media giants on
one side, and the Chinese tech platforms on the other side. These worlds are
largely separated, with The Great Firewall effectively blocking all western
social media, news outlets and countless more websites from corrupting the
minds of the obedient Chinese citizens. The Chinese effectively have their own
internet and social media, with the Chinese Communist Party as the sole
authority that decides what can be said&#x2F;shown and what can&#x27;t, and effectively
monitoring all its citizens. The violation of privacy this constitutes is clear
to any western reader, and the resulting indignation is often genuine. Imagine
such surveillance power in the hands of the East German Stasi, the Soviet KGB,
or even the Nazi regime if you have an appetite for a real dystopia; what would
the world have looked like then? In China it is a reality already, and once
their bots scan this article, the server that hosts this will be properly
banned, and I haven&#x27;t even expressed my sympathy for the Dalai Lama yet!
Surely things are not so bad here in the West? Perhaps not yet, but we should
not be blinded and we need to look with more far criticism at the platforms we
participate in ourselves, and wonder if we are not on quite a similar path
ourselves in the west.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;with-great-power-comes-great-responsibility&quot;&gt;With great power comes great responsibility...&lt;&#x2F;h2&gt;
&lt;p&gt;Concentration of power in the hands of very few, or one, is never a good thing.
Whether that power is wielded by an authoritarian regime like China or a private
company like Facebook or Google, even if either would have the best of intentions (spoiler
alert: they don&#x27;t), the implications are bad. Having one party to be the
moderator of what can be said and what can not be said, is a problem. Note that
this extends to foregoing on moderation. Online places can quickly turn into
places of hate or even incitement to violence, so moderation is needed but can
not be in the hands of one party. A balance needs to be found, and such a
balance is only possible if there is diversity and not all the stakes are owned
by a single party.&lt;&#x2F;p&gt;
&lt;p&gt;We see a continuous growth of the main big tech players, buying up other
successful platforms and integrating them into their own. WhatsApp, Instagram,
LinkedIn, GitHub; they all used to be independent companies and platforms, now
they have been swallowed up by respectively Facebook and Microsoft. Fair
competition has little chance against the amount of capital the main companies
have available.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a WhatsApp user, even when you&#x27;re not on Facebook, Facebook knows all
yours contacts and exactly with whom you communicate and how often (the actual
contents of the communication are properly encrypted fortunately, but the
metadata is not).  This data is a goldmine for a company whose business model
is getting to know you better and better so they can target their ads more
efficiently.  I don&#x27;t think this problem of ever-growing and fusing
mega-corporations is something limited to technology firms, but a systemic
problem in our economy that shows in multiple fields. In a way, big
monopolistic companies already have more power than most countries.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;break-free-do-not-be-a-prisoner-of-your-software&#x2F;socialmediapower.jpg&quot; alt=&quot;Social Media Power&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The power of the social network monopolies we have nowadays is not to be
underestimated, the Arab Spring revolts show how their platforms play an
important part in rallying the people against corrupt regimes, and even
toppling them in the end. That is precisely what the Chinese Communist Party is
afraid of and why all western platforms are banned; controlling a population
starts with controlling the information they get and steering the narrative.
Propaganda and censorship go hand in hand and are probably as old as humanity
itself, it has simply gone digital and has now has a scale that was
unimaginable before.&lt;&#x2F;p&gt;
&lt;p&gt;These days, the US has a president who wages a war against conventional media,
branding everything as fake news, and using angry erratic tweeting as his main
form of communication with his fan-base.  Twitter takes a bold step and places
a fact-check notice to one of his tweets (any normal Twitter user would long
have been banned for violation of the terms of service if they would behave as
Trump did), and Trump files an executive order targeting social media; nothing
less than an attempt at government-mandated censorship. What if someone like
him could truly gain control over our platforms?&lt;&#x2F;p&gt;
&lt;p&gt;The fact that he got elected in the first place, which nobody had thought
possible, is also in large part due to the role played by the big social media
platforms. Political campaigns are fought more and more on these platforms,
often resulting in a fair amount of polarisation and the emergence of so-called
&quot;echo chambers&quot; in which certain political messages resonate and amplify within
a subgroup. This relates to the psychological aspect I discussed earlier; things
that are more extreme, more outrageous tend to capture more attention than
well-balanced neutral viewpoints; therefore they get more clicks, more ads, and
more money for the platforms. Controversy sells, and if you have a susceptible
public, the result is more polarisation.&lt;&#x2F;p&gt;
&lt;p&gt;Putting all your eggs in one basket, by everyone being on a single platform,
creates another problem; a vulnerability that can be exploited by malevolent
actors. This has been demonstrated clearly by the Cambridge Analytics scandal
that came to light in 2018, where Facebook was used to harvest personal data of
millions of people without consent, to be used in pro-Trump political
advertising. Would he have won without this exploit? Would he have won if these
platforms didn&#x27;t exist at all in their current form?&lt;&#x2F;p&gt;
&lt;p&gt;Then there are of course the Russian Troll Factories, just to name an example.
These are, although officially and unbelievably denied by Putin, organizations
producing fake accounts and using those to post large amounts of messages in an
attempt to steer public opinion and even influence elections in some desired
direction. They have been actively stirring up populism in Europe, the US and
elsewhere. Of course this is not just a Russian phenomenon, many countries and
organizations do the same. It is easier to attack just one or two major
platforms than to attack a federation of tens of thousands of different
players.&lt;&#x2F;p&gt;
&lt;p&gt;My point with all this is to emphasise that there is an important ethical dimension to
software, and social networks are at heart just that after all; instances of
software (as a service). Their software computes what posts&#x2F;messages&#x2F;news you
see where and when and how you can interact with it, and that plays an important
role in what goes &#x27;viral&#x27; and what does not. My main claim in this whole article
is that &lt;em&gt;the walling-in of users in any single platform is ultimately antithetical
to freedom and detrimental to an open democratic society and a fair free-market
economy&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-free-are-you-your-choices-matter&quot;&gt;How free are you? Your choices matter&lt;&#x2F;h2&gt;
&lt;p&gt;As consumers, of whatever we consume, we have a certain moral responsibility.
For example, you can choose between being a vegan, a vegetarian, eating specific
meats, or basically anything that moves including cats and dogs.  Most people
will probably agree that there are moral aspects to consider here as your
actions have an impact on animal welfare, on the environment, on the economy ,
on cultural norms etc... For some, these moral decisions are even enshrined as
precepts in religious texts; a prohibition on eating pork, or cow, or mixing
certain meats.  The choices you make here have an impact on the industry and
society as a whole.  We make or break industries by our behaviour as consumers,
even though the role of the single individual may appear miniscule and
insignificant.&lt;&#x2F;p&gt;
&lt;p&gt;The situation for software is no different. It may not be as apparent to most,
but I hope to have illustrated that software, due to its every increasing role
in our societies, plays an important role and has a societal impact that can
make the world for the better, or worse. My plea therefore is for more
decentralisation&#x2F;federation, for more awareness in the general public that their
choices do matter and that participation in social networks is not as
inconsequential as it may seem.&lt;&#x2F;p&gt;
&lt;p&gt;And we must not be reduced to mere consumers, we are producers now too. We, all
of us, even featured as Person of the Year on the cover of TIME magazine in
2006. The internet gives us the ability to share whatever we like. This is
something we must cherish and use responsibly. Don&#x27;t let your creativity and
productivy be stiffled into the template of a big platform who ultimately reduces
you to a consumer to be profited off. We must break free of imposed constraints
and take back ownership into our own hands.&lt;&#x2F;p&gt;
&lt;p&gt;So no, I won&#x27;t use Facebook, I won&#x27;t install WhatsApp so it is &#x27;easier&#x27; for you
to communicate with me, I won&#x27;t disable my ad-blocker and be tracked, and I
won&#x27;t use your closed-source software platform; because I do not like the world
they&#x27;re forging if I do. It is not necessary to go that way and we will have a
brighter future if only we take some responsibility and agency back ourselves
again.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;break-free-do-not-be-a-prisoner-of-your-software&#x2F;timeforchange.jpg&quot; alt=&quot;Time for Change&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Photo Credits&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Young me behind a computer: probably taken by my father or mother (copyright, all rights reserved).&lt;&#x2F;li&gt;
&lt;li&gt;&#x27;Social media web&#x27; image composed by Maarten van Gompel (proycon), licensed under Creative Commons BY-NC, using the following free sources:
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pexels.com&#x2F;photo&#x2F;come-in-we-re-awesome-sign-1051747&#x2F;&quot;&gt;Come in sign by Artem Beliaikin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pexels.com&#x2F;photo&#x2F;close-up-photography-of-spider-web-167259&#x2F;&quot;&gt;Spiderweb photo by chivozol&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pexels.com&#x2F;photo&#x2F;equipment-pavement-security-security-camera-430208&#x2F;&quot;&gt;Security cameras by Scott Webb&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pixabay.com&#x2F;illustrations&#x2F;money-seem-fall-2082383&#x2F;&quot;&gt;Falling Money by Scr3amfr3ak&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&#x27;Social platforms&#x27; image with various platform logos (CC BY-NC), background: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pixabay.com&#x2F;illustrations&#x2F;network-earth-block-chain-globe-3537401&#x2F;&quot;&gt;Earth network image by Gerd Altmann&lt;&#x2F;a&gt;, logo additions are by me.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pexels.com&#x2F;photo&#x2F;time-for-change-sign-with-led-light-2277784&#x2F;&quot;&gt;Time for change photo by Alexas Fotos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Comments?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Contact me preferably on Mastodon (public) or by mail (private). See details
below. If I haven&#x27;t convinced you to ditch your social media, then the least
you can do is share this post if you liked it, sometimes change can be effectuated
from within. But no, I won&#x27;t provide any convenience buttons for that! My
website is a friendly no-tracking place :)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Context as Linguistic Bridges [PhD thesis]</title>
          <pubDate>Thu, 06 Feb 2020 16:25:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/colibri/</link>
          <guid>https://proycon.anaproy.nl/posts/colibri/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/colibri/">&lt;p&gt;My PhD thesis &lt;em&gt;Context as Linguistic Bridges&lt;&#x2F;em&gt; has been released and is to be defended soon:&lt;&#x2F;p&gt;
&lt;p&gt;Context as Linguistic Bridges is a study that focusses on the role of context information in machine translation, i.e.
automated translation by computers.  The underlying intuition is that the context in which a word or phrase appears is
an important cue for the translation of that word or phrase. Consider, for example, the two different meanings of the word
&lt;em&gt;bank&lt;&#x2F;em&gt; in the sentences &lt;em&gt;I put my money on the bank&lt;&#x2F;em&gt; and &lt;em&gt;The ship got stuck on the bank&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We developed classifier-based solutions that work well in Word Sense Disambiguation tasks like the above example, and
integrate these in a Statistical Machine Translation system.  Our main question is to find to what extent can we improve
automated translation by explicitly modelling such context information.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;thesiswithcover.pdf&quot;&gt;View&#x2F;download the full thesis (PDF)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Hanzigrid &amp; Learning chinese characters based on visual similarity</title>
          <pubDate>Sat, 04 Jan 2020 19:38:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/hanzigrid/</link>
          <guid>https://proycon.anaproy.nl/posts/hanzigrid/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/hanzigrid/">&lt;h1 id=&quot;hanzigrid-learning-chinese-characters-based-on-visual-similarity&quot;&gt;Hanzigrid &amp;amp; Learning chinese characters based on visual similarity&lt;&#x2F;h1&gt;
&lt;p&gt;大家好！&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been trying to learn Mandarin Chinese for quite a while, following the
vocabulary compiled for the HSK (汉语水平考试) tests. As every Chinese learner
will surely know, memorising all the characters is a rather daunting task. I
often find myself mixing up similarly looking characters (like 牛 and 午 or 手 and 毛).&lt;&#x2F;p&gt;
&lt;p&gt;In order to learn these properly, I need to see them next to eachother,
following a more horizontal vocabulary learning strategy nicely described by
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hackingchinese.com&#x2F;horizontal-vocabulary-learning&#x2F;&quot;&gt;Hacking
Chinese&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To facilitate my learning, I&#x27;ve compiled a list of hanzi I wish to study (based
on HSK mostly) and ordered them based on similarity, or my own subjective notion of
it. Then I wrote a little &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;hanzigrid&quot;&gt;software tool&lt;&#x2F;a&gt;
to generate what I call &lt;em&gt;hanzi grids&lt;&#x2F;em&gt;. A hanzi grid is a study grid or matrix
of chinese characters along with (optionally) pinyin and&#x2F;or words, often
coloured according to tone. The tool I wrote enables anyone to generate hanzi
grids in all kinds of sizes, also nice for printing on A1&#x2F;A0 paper and hanging on
your wall as a poster and constant study reminder!&lt;&#x2F;p&gt;
&lt;p&gt;The resulting hanzi grid using my confusible ordering looks as shown below. It
contains all of HSK 1 to 3 and some characters from higher levels:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;hanzigrid.png&quot; alt=&quot;Hanzi Grid&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The above is a just an example, you&#x27;ll want to use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;output&#x2F;confusibleorder_a1_1.svg&quot;&gt;the scalable (SVG)
version&lt;&#x2F;a&gt;
for printing. The character colours corresponds to the tones (red = first,
yellow = second&#x2F;rising, green = third, blue = fourth&#x2F;falling, black = neutral
or ambiguous), the background colours give an indication of the HSK level, so
you can skip the higher levels if you&#x27;re not up to it yet.&lt;&#x2F;p&gt;
&lt;p&gt;I also made an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;output&#x2F;confusibleorder_a4.html&quot;&gt;Interactive clickable variant (desktop version)&lt;&#x2F;a&gt;, on mobile devices you will want to try the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;output&#x2F;confusibleorder_narrow.html&quot;&gt;Mobile clickable variant&lt;&#x2F;a&gt; instead. In these versions you can click characters and get a list of all HSK words that use the character:
&lt;img src=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;hanzigrid_interactive.png&quot; alt=&quot;Screenshot Interactive Hanzi Grid&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re more interested in a conventional ordering by level or pinyin then that&#x27;s possible too:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;output&#x2F;hsk1to4_pinyinorder_a1_1.svg&quot;&gt;Example HSK 1 to 4 in pinyin order&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;pub&#x2F;hanzigrid&#x2F;output&#x2F;hsk1to4_a1_1.svg&quot;&gt;Example HSK 1 to 4 in level&#x2F;frequency order&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The tool I wrote allows you to include the pinyin in the grid itself, but I
deliberately did not make that the default, as the pinyin is something I need
to learn. Traditional characters instead of simplified is also possible.&lt;&#x2F;p&gt;
&lt;p&gt;For the software itself (free &amp;amp; open source!), more readily available grids, and a more detailed
explanation, see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;hanzigrid&quot;&gt;hanzigrid on github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;我希望这个《汉字格》对你有用！
Happy learning! :)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>GPS tracker integreren in home automation</title>
          <pubDate>Sun, 09 Dec 2018 12:38:28 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/gpstracker/</link>
          <guid>https://proycon.anaproy.nl/posts/gpstracker/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/gpstracker/">&lt;h1 id=&quot;gps-tracker-integreren-in-home-automation&quot;&gt;GPS tracker integreren in home automation&lt;&#x2F;h1&gt;
&lt;p&gt;Ik heb de GPS tracker die o.a. verkocht wordt als &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reptrek.com&#x2F;huisdieren&#x2F;gps-tracker-voor-kat-en-hond-minitrek&#x2F;&quot;&gt;Reptrek Minitrek&lt;&#x2F;a&gt; aangeschaft
om onze hond te kunnen tracken.&lt;&#x2F;p&gt;
&lt;p&gt;In plaats van de standaard beschreven SeTracker2 software (Chinese closed-source app voor Android en iOS) te gebruiken
wilde ik als home-automation hobbyist deze gps tracker in mijn home automation systeem integreren en wilde ik pertinent
niet dat de tracker via een server van derden (namelijk die van de SeTracker2 app) communiceert waarbij ik totaal niet
weet wat er met mijn data gebeurt.  Dit wil ik dus in eigen beheer hebben ook ivm privacy en veiligheid. (Let wel,
de tracker communiceert sowieso over GPRS zonder enige encryptie!)&lt;&#x2F;p&gt;
&lt;p&gt;Dit documentje biedt wat instructies en technische details om deze tracker met je eigen GPS tracking platform op te
zetten. Het geheel werkt goed, enige minpunt is dat de GPS module toch af en toe wat moeite heeft goed signaal te
krijgen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;benodigdheden&quot;&gt;Benodigdheden&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;De GPS tracker&lt;&#x2F;li&gt;
&lt;li&gt;Een SIM kaart met mogelijkheid tot bellen, SMS en data (GPRS), (KPN prepaid voldeed prima bij mij). Let op dat 2G
netwerk ondersteund is&#x2F;blijft  (is niet bij alle providers zo)
&lt;ul&gt;
&lt;li&gt;Zet de pincode vergrendeling uit (via bv. een andere mobiele telefoon) voor het gebruik in de tracker&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Een eigen server (bv. een raspberry pi voldoet al)
&lt;ul&gt;
&lt;li&gt;Installeer &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.traccar.org&quot;&gt;Traccar&lt;&#x2F;a&gt; - Open-source GPS tracking platform met web interface en eventueel app voor Android en iOS.&lt;&#x2F;li&gt;
&lt;li&gt;Open TCP poort 5093 voor de GPS tracker, en 8082 voor de webinterface&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;technische-details&quot;&gt;Technische Details&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;De tracker is de q36 (of een afgeleide daarvan) van chinese makelij, oorspronkelijk in de vorm van een gps horloge.&lt;&#x2F;li&gt;
&lt;li&gt;De chipset is MTK2503 van MediaTek.&lt;&#x2F;li&gt;
&lt;li&gt;Het GPRS communicatieprotocol is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dl.dropboxusercontent.com&#x2F;s&#x2F;2hid9vaa2vno4jr&#x2F;Communication%20Protocol.doc&quot;&gt;hier&lt;&#x2F;a&gt; beschreven, binnen de Traccar software wordt dit protocol als &lt;em&gt;watch&lt;&#x2F;em&gt; aangeduid.
&lt;ul&gt;
&lt;li&gt;De verschillende instructies kunnen als ook SMS naar de tracker gestuurd worden, het standaardwachtwoord is
&lt;code&gt;123456&lt;&#x2F;code&gt;. De syntax bestaat dan uit komma-gescheiden instructries&#x2F;parameters en een hekje als afsluiting.&lt;&#x2F;li&gt;
&lt;li&gt;SMS Voorbeeldinstructries:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pw,123456,ts#&lt;&#x2F;code&gt; - rapporteert (per SMS) de status en huidige instellingen, gebruik dit om te verifiëren of de
SIM werkt, en in later stadium of er GPRS en GPS verbinding is.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,pw,987654#&lt;&#x2F;code&gt; - wijzig het wachtwoord (in 987654, gebruik dus iets anders)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,lz,0,1#&lt;&#x2F;code&gt; - stelt taal en tijdszone in&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,apn,portalmmm.nl,,,20408#&lt;&#x2F;code&gt; - Activeert GPRS verkeer door het access point (APN) in te stellen, dit voorbeeld is voor
KPN. Zoek de APN gegevens van je SIM provider op.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,sos,+31612345678#&lt;&#x2F;code&gt; - stel één of meerder SOS telefoonnummers in&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,whitelist1,+31612345678#&lt;&#x2F;code&gt; - stel één of meerdere telefoonnummers in die mogen bellen naar de tracker&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,upload,120#&lt;&#x2F;code&gt; - zet de upload interval in seconden (120 hier)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,ip,127.0.0.1,5093#&lt;&#x2F;code&gt; - &lt;em&gt;Stel hier je eigen server in waar de GPS gegevens naartoe gestuurd worden&lt;&#x2F;em&gt; (vervang het lokale IP hier door het IP van je eigen Traccar server, we hanteren hier standaardpoort 5093)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,url#&lt;&#x2F;code&gt; - De tracker SMSt een google maps link terug met de huidige lokatie gemarkeerd (handig als
je puur via SMS wil werken en geen enkele app of server wil gebruiken).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,reset#&lt;&#x2F;code&gt; - Reboot de tracker&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;pw,123456,poweroff#&lt;&#x2F;code&gt; - Zet de tracker uit (daar is immers geen knopje voor)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;home-automation&quot;&gt;Home Automation&lt;&#x2F;h2&gt;
&lt;p&gt;Traccar integreert mooi met de open-source software &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.home-assistant.io&quot;&gt;Home Assistant&lt;&#x2F;a&gt;, middels het &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.home-assistant.io&#x2F;components&#x2F;device_tracker.traccar&#x2F;&quot;&gt;traccar component&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Labirinto</title>
          <pubDate>Sun, 22 Apr 2018 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/labirinto/</link>
          <guid>https://proycon.anaproy.nl/software/labirinto/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/labirinto/">&lt;h1 id=&quot;labirinto&quot;&gt;Labirinto&lt;&#x2F;h1&gt;
&lt;p&gt;Labirinto is a &lt;em&gt;virtual laboratory portal&lt;&#x2F;em&gt;, it makes a collection of software browseable and searchable for the
end-user. Labirinto presents the software&#x27;s metadata following the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codemeta.github.io&quot;&gt;CodeMeta&lt;&#x2F;a&gt; specification
in an intuitive way and allows the user to filter and perform a limited search.  The portal gives access to software if
it offers web-based interfaces.&lt;&#x2F;p&gt;
&lt;p&gt;This system is specifically geared towards research software, and for instance allows linking to relevant scientific publications for each tool.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;architecture&quot;&gt;Architecture&lt;&#x2F;h2&gt;
&lt;p&gt;Labirinto is a front-end only, it runs fully client-side and is written in Javascript using the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; framework.&lt;&#x2F;p&gt;
&lt;p&gt;Labirinto relies on software metadata specifications according to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codemeta.github.io&quot;&gt;CodeMeta&lt;&#x2F;a&gt; standard
(linked open data &#x2F; JSON-LD). Metadata of the desired software collection should be combined into a single registry
(JSON-LD), which can be hosted and obtained from wherever you want. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;codemetapy&quot;&gt;CodeMetaPy&lt;&#x2F;a&gt;
can be used to build such a registry from individual &lt;code&gt;codemeta.json&lt;&#x2F;code&gt; files.&lt;&#x2F;p&gt;
&lt;p&gt;Note that Labirinto does not and will never offer an editable database or metadata editor for the software metadata;
this is a front-end that does not even require a database backend or any server-side component for that matter. Our
philosophy is that software metadata should be in a simple format and either live right alongside the source code in a
version controlled repository (e.g. on github, bitbucket, etc), or be obtained from a software repository such as as the
Python Package Index, CRAN, CPAN, Maven Central and automatically converted to a unified format.&lt;&#x2F;p&gt;
&lt;p&gt;Labirinto is used by and included in the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proycon.github.io&#x2F;LaMachine&quot;&gt;LaMachine&lt;&#x2F;a&gt; software distribution,
providing an overview and access to all software installed in LaMachine. The metadata for tools participating in
LaMachine is, when not explicitly provided yet, &lt;em&gt;automatically&lt;&#x2F;em&gt; converted to the CodeMeta standard (by
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;codemetapy&quot;&gt;CodeMetaPy&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ropensci.github.io&#x2F;codemetar&#x2F;&quot;&gt;CodeMetar&lt;&#x2F;a&gt;), and
subsequently combined into a single registry for use with Labirinto.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>CodeMetaPy</title>
          <pubDate>Sun, 15 Apr 2018 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/codemetapy/</link>
          <guid>https://proycon.anaproy.nl/software/codemetapy/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/codemetapy/">&lt;h1 id=&quot;codemetapy&quot;&gt;CodeMetaPy&lt;&#x2F;h1&gt;
&lt;p&gt;The goal of CodeMetaPy is to generate the JSON-LD file, codemeta.json containing software metadata describing a Python package. For more general information about the CodeMeta Project for defining software metadata, see https:&#x2F;&#x2F;codemeta.github.io. In particular, new users might want to start with the User Guide, while those looking to learn more about JSON-LD and consuming existing codemeta files should see the Developer Guide.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Screenshots Linux Desktop August 2017</title>
          <pubDate>Mon, 21 Aug 2017 13:30:37 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/screenshots-linux-desktop-201708/</link>
          <guid>https://proycon.anaproy.nl/posts/screenshots-linux-desktop-201708/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/screenshots-linux-desktop-201708/">&lt;p&gt;I recently switched to the gruvbox colours and polybar.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Distribution: Arch Linux&lt;&#x2F;li&gt;
&lt;li&gt;WM: bspwm&lt;&#x2F;li&gt;
&lt;li&gt;Bar: polybar&lt;&#x2F;li&gt;
&lt;li&gt;Launcher: rofi&lt;&#x2F;li&gt;
&lt;li&gt;Multiplexer: tmux&lt;&#x2F;li&gt;
&lt;li&gt;Editor: neovim + gruvbox theme&lt;&#x2F;li&gt;
&lt;li&gt;Browser: Firefox&lt;&#x2F;li&gt;
&lt;li&gt;Terminal: urxvt + gruvbox theme&lt;&#x2F;li&gt;
&lt;li&gt;Music player: mpd + ncmpcpp&lt;&#x2F;li&gt;
&lt;li&gt;Chat: weechat&lt;&#x2F;li&gt;
&lt;li&gt;Mail: notmuch + alot&lt;&#x2F;li&gt;
&lt;li&gt;Browser: firefox&lt;&#x2F;li&gt;
&lt;li&gt;Spaceship: Stratios&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;dotfiles&#x2F;&quot;&gt;dotfiles&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wallpaperscraft.com&#x2F;wallpaper&#x2F;hummingbirds_birds_fly_swing_beak_52297&quot;&gt;Wallpaper&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;gallery&quot;&gt;

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_vim_python.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_vim_python.0ed85450e95da266.png&quot;
               title=&quot;ss201708_vim_python.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_vim_python.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_vim_python.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_vim_irc2.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_vim_irc2.eae29f113d3ffae1.png&quot;
               title=&quot;ss201708_vim_irc2.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_vim_irc2.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_vim_irc2.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_vim_cpp.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_vim_cpp.8a3e64788f3719fe.png&quot;
               title=&quot;ss201708_vim_cpp.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_vim_cpp.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_vim_cpp.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_tmux1.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_tmux1.cbeeab8942c1f3bc.png&quot;
               title=&quot;ss201708_tmux1.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_tmux1.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_tmux1.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_rofi_neofetch.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_rofi_neofetch.d913fcb60a25497a.png&quot;
               title=&quot;ss201708_rofi_neofetch.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_rofi_neofetch.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_rofi_neofetch.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_neofetch.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_neofetch.457909365d95f16d.png&quot;
               title=&quot;ss201708_neofetch.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_neofetch.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_neofetch.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_ncmpcpp_htop.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_ncmpcpp_htop.6653c7b2a4bea379.png&quot;
               title=&quot;ss201708_ncmpcpp_htop.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_ncmpcpp_htop.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_ncmpcpp_htop.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_mail.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_mail.9c9a72b465ffab06.png&quot;
               title=&quot;ss201708_mail.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_mail.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_mail.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_irc.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_irc.d417ef4795a43f72.png&quot;
               title=&quot;ss201708_irc.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_irc.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_irc.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_firefox_unixporn.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_firefox_unixporn.d8bec9d6a1157fc9.png&quot;
               title=&quot;ss201708_firefox_unixporn.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_firefox_unixporn.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_firefox_unixporn.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_firefox_homeassistant.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_firefox_homeassistant.dfb24654b33f9dbe.png&quot;
               title=&quot;ss201708_firefox_homeassistant.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_firefox_homeassistant.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_firefox_homeassistant.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_eve3.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_eve3.df7b352595eadc24.png&quot;
               title=&quot;ss201708_eve3.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_eve3.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_eve3.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_eve2.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_eve2.65fa4d99c9415af5.png&quot;
               title=&quot;ss201708_eve2.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_eve2.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_eve2.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_eve1.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_eve1.67156f8797c80ded.png&quot;
               title=&quot;ss201708_eve1.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_eve1.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_eve1.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

  
    &lt;div class=&quot;picture&quot;&gt;
        
        &lt;a href=&quot;https:&#x2F;&#x2F;proycon.anaproy.nl&#x2F;posts&#x2F;screenshots-linux-desktop-201708&#x2F;ss201708_empty.png&quot;&gt;
          &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;proycon.anaproy.nl&amp;#x2F;processed_images&amp;#x2F;ss201708_empty.ebcf3ebe9e8793a8.png&quot;
               title=&quot;ss201708_empty.png&quot;
          &#x2F;&gt;
        &lt;&#x2F;a&gt;
        &lt;div class=&quot;datetime&quot;&gt;ss201708_empty.png&lt;&#x2F;div&gt;
        &lt;label&gt;ss201708_empty.png&lt;&#x2F;label&gt;
    &lt;&#x2F;div&gt;
    &amp;ensp;
  

&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>The Shape of Things to Come</title>
          <pubDate>Fri, 30 Dec 2016 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/the-shape-of-things-to-come/</link>
          <guid>https://proycon.anaproy.nl/posts/the-shape-of-things-to-come/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/the-shape-of-things-to-come/">&lt;h1 id=&quot;the-shape-of-things-to-come&quot;&gt;The Shape of Things to Come&lt;&#x2F;h1&gt;
&lt;p&gt;From Battlestar Galactica, Composed by Bear McCreary. My performance is a bit sloppy here and there but I didn&#x27;t want to do it over again ;)&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;9709eb58-6034-4047-88ee-3b62df2b3283?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Light of the Seven</title>
          <pubDate>Tue, 30 Aug 2016 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/light-of-the-seven/</link>
          <guid>https://proycon.anaproy.nl/posts/light-of-the-seven/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/light-of-the-seven/">&lt;h1 id=&quot;light-of-the-seven&quot;&gt;Light of the Seven&lt;&#x2F;h1&gt;
&lt;p&gt;Seven blessings to you! Here I play the epic piece by Ramin Djawadi for the season 6 finale of Game of Thrones. This is my version based on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7-7V_80EqzY&quot;&gt;the score of Halcon&lt;&#x2F;a&gt; with some personal interpretation and some errors.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;4a461179-f77b-4b6f-a368-fc345eeb777a?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Star Wars Composition</title>
          <pubDate>Thu, 05 May 2016 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/star-wars-composition/</link>
          <guid>https://proycon.anaproy.nl/posts/star-wars-composition/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/star-wars-composition/">&lt;h1 id=&quot;star-wars-composition&quot;&gt;Star Wars Composition&lt;&#x2F;h1&gt;
&lt;p&gt;This is my Star Wars Composition, consisting of my interpretation of various medleys that appear throughout the eight Star Wars movies.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;dd6e4d85-3697-48b0-a0db-a380540a58f0?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Madredeus - O Pastor</title>
          <pubDate>Wed, 04 May 2016 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/o-pastor/</link>
          <guid>https://proycon.anaproy.nl/posts/o-pastor/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/o-pastor/">&lt;h1 id=&quot;madredeus-o-pastor&quot;&gt;Madredeus - O Pastor&lt;&#x2F;h1&gt;
&lt;p&gt;Há 8 anos gravei &quot;O Pastor&quot; de Madredeus no meu piano eletrônico, e fica um dos videos mais vistos do meu canal. Hoje em dia possuo um piano melhor e tento regravar a minha canção preferida de Madredeus com uma qualidade melhor. A interpretação é minha e pode ser distinto do original. O microfone é Samson C01U Pro. Partitura disso eu não tenho.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;d4ec2f6e-2688-41ca-b615-27e01153a6f8?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Prelude to War</title>
          <pubDate>Sat, 09 Jan 2016 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/prelude-to-war/</link>
          <guid>https://proycon.anaproy.nl/posts/prelude-to-war/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/prelude-to-war/">&lt;h1 id=&quot;prelude-to-war&quot;&gt;Prelude to war&lt;&#x2F;h1&gt;
&lt;p&gt;My version of epic piece Prelude to War from Battlestar Galactica, composed by Bear McCreary. My version may differ a bit from the original, and it has some mistakes.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;1da787c5-f86f-4fa3-b645-6fbe26809aa9?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Busy Bees - Five years of work in version control</title>
          <pubDate>Sat, 05 Dec 2015 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/busy-bees/</link>
          <guid>https://proycon.anaproy.nl/posts/busy-bees/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/busy-bees/">&lt;h1 id=&quot;busy-bees-five-years-of-work-in-version-control&quot;&gt;Busy Bees - Five years of work in version control&lt;&#x2F;h1&gt;
&lt;p&gt;The video below shows work on various of our software packages since January 2011. It includes work by the Language Machines research group and Centre for Language and Speech Technology (both part of the Centre for Language Studies at Radboud University Nijmegen). It also includes work by the Tilburg Centre for Cognition and Communication (Tilburg University) and one project currently maintained by Utrecht University. Some 3rd party contributors show up as well. All software is open-source and available from our github repositories:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;LanguageMachines&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;proycon&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;fkunneman&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;Woseseltops&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;ErkanBasar&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;naiaden&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The video was generated from various git repositories using gource. (https:&#x2F;&#x2F;github.com&#x2F;acaudwell&#x2F;Gource)&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;1qSjFBpmvr0?autoplay=1&quot;
        webkitallowfullscreen
        mozallowfullscreen
        allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;&#x2F;h2&gt;
&lt;p&gt;The various renditions of &quot;The flight of the Bumblebee&quot; are, in order:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Nuno Silva: https:&#x2F;&#x2F;soundcloud.com&#x2F;nunosilvatrumpet&#x2F;flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;Flavortone Studios: https:&#x2F;&#x2F;soundcloud.com&#x2F;flavortone-studios&#x2F;flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;Tavera Music: https:&#x2F;&#x2F;soundcloud.com&#x2F;taveramusic&#x2F;flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;Seis Cuerdas: https:&#x2F;&#x2F;soundcloud.com&#x2F;seis-cuerdas&#x2F;flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;Chris Ranier: https:&#x2F;&#x2F;soundcloud.com&#x2F;thebigmamou&#x2F;flight-of-the-bumblebee-temp&lt;&#x2F;li&gt;
&lt;li&gt;Ali Moghtadei: https:&#x2F;&#x2F;soundcloud.com&#x2F;ali-mkh&#x2F;flight-of-the-bumblebee-in&lt;&#x2F;li&gt;
&lt;li&gt;Chris Barker: https:&#x2F;&#x2F;soundcloud.com&#x2F;eduardo-alexis-6&#x2F;rimsky-korsakov-flight-of-the-bumblebee-metal-guitar-version-chris-barker&lt;&#x2F;li&gt;
&lt;li&gt;Perpetuum Jazzile: https:&#x2F;&#x2F;soundcloud.com&#x2F;perpetuum-jazzile&#x2F;flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;SoundTrack4u: https:&#x2F;&#x2F;soundcloud.com&#x2F;soundtrack4u&#x2F;the-flight-of-the-bumblebee&lt;&#x2F;li&gt;
&lt;li&gt;Piano in a Living Room (Olivier Lebra):  https:&#x2F;&#x2F;soundcloud.com&#x2F;didlybom&lt;&#x2F;li&gt;
&lt;li&gt;Dinle, rahatla: https:&#x2F;&#x2F;soundcloud.com&#x2F;user-302600111&#x2F;flight-of-the-bumblebee-rimskykorsakov&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Fireplace with Raspberry Pi and Neopixels</title>
          <pubDate>Wed, 04 Nov 2015 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/fireplace-with-neopixels/</link>
          <guid>https://proycon.anaproy.nl/posts/fireplace-with-neopixels/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/fireplace-with-neopixels/">&lt;h1 id=&quot;fireplace-with-raspberry-pi-and-neopixels&quot;&gt;Fireplace with Raspberry Pi and Neopixels&lt;&#x2F;h1&gt;
&lt;p&gt;Electronic fireplace, powered by a Raspberry Pi and Neopixel LED-strip. Fully integrated into our homeautomation system. The colour representation in the video is a bit off, it&#x27;s looks less red in reality. See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.adafruit.com&#x2F;neopixels-on-raspberry-pi?view=all&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;i18eXQIXzXg?autoplay=1&quot;
        webkitallowfullscreen
        mozallowfullscreen
        allowfullscreen&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Bang Bang - Dalida</title>
          <pubDate>Fri, 02 Oct 2015 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/bang-bang/</link>
          <guid>https://proycon.anaproy.nl/posts/bang-bang/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/bang-bang/">&lt;h1 id=&quot;bang-bang-dalida&quot;&gt;Bang Bang - Dalida&lt;&#x2F;h1&gt;
&lt;p&gt;Ecco la mia interpretazione della bella canzone &quot;Bang bang&quot; di Dalida (ma originalmente di Cher), e come visto nel bel film &quot;Les amours imaginaires&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Voici ma intérprétation de la belle chanson &quot;Bang bang&quot; de Dalida (mais originalment de Cher), comme vu aussi dans le film &quot;Les amours imaginaires&quot;&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;c90d6696-ed07-4929-a46b-119636d79a16?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>LaMachine</title>
          <pubDate>Sun, 17 May 2015 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/lamachine/</link>
          <guid>https://proycon.anaproy.nl/software/lamachine/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/lamachine/">&lt;h1 id=&quot;lamachine&quot;&gt;LaMachine&lt;&#x2F;h1&gt;
&lt;p&gt;LaMachine is a unified software distribution for Natural Language Processing. We integrate numerous open-source NLP
tools, programming libraries, web-services, and web-applications in a single Virtual Research Environment that can be
installed on a wide variety of machines.&lt;&#x2F;p&gt;
&lt;p&gt;The software included in LaMachine tends to be highly specialised and generally depends on a lot of other interdependent
software. Installing all this software can be a daunting task, compiling it from scratch even more so. LaMachine
attempts to make this process easier by offering pre-built recipes for a wide variety of systems, whether it is on your
home computer or whether you are setting up a dedicated production environment, LaMachine will safe you a lot of work.&lt;&#x2F;p&gt;
&lt;p&gt;We address various audiences; the bulk of the software is geared towards data scientists who are not afraid of the
command line and some programming. We give you the instruments and it is up to you to yield them. However, we also
attempt to accommodate researchers that require more high-level interfaces by incorporating webservices and websites
that expose some of the functionality to a larger audience.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>foliadocserve</title>
          <pubDate>Sun, 08 Feb 2015 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/foliadocserve/</link>
          <guid>https://proycon.anaproy.nl/software/foliadocserve/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/foliadocserve/">&lt;h1 id=&quot;folia-document-server&quot;&gt;FoLiA Document Server&lt;&#x2F;h1&gt;
&lt;p&gt;The FoLiA Document Server is a backend HTTP service to interact with documents
in the FoLiA format, a rich XML-based format for linguistic annotation
(http:&#x2F;&#x2F;proycon.github.io&#x2F;folia). It provides an interface to efficiently edit
FoLiA documents through the FoLiA Query Language (FQL).  However, it is not
designed as a multi-document search tool.&lt;&#x2F;p&gt;
&lt;p&gt;The FoLiA Document server is used by FLAT (https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;flat)&lt;&#x2F;p&gt;
&lt;p&gt;The FoLiA Document Server is written in Python 3, using the FoLiA library in
pynlpl and cherrypy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;architecture&quot;&gt;Architecture&lt;&#x2F;h2&gt;
&lt;p&gt;The FoLiA Document Server consists of a document store that groups documents
into namespaces, a namespace can correspond for instance to a user ID or a
project.&lt;&#x2F;p&gt;
&lt;p&gt;Documents are automatically loaded and unloaded as they are requested and
expire. Loaded documents are kept in memory fully to facilitate rapid access
and are serialised back to XML files on disk when unloaded.&lt;&#x2F;p&gt;
&lt;p&gt;The document server is a webservice that receives requests over HTTP. Requests
interacting with a FoLiA document consist of statements in FoLiA Query Language
(FQL). For some uses the Corpus Query Language (CQL) is also supported.
Responses are FoLiA XML or parsed into JSON (may contain HTML excerpts too), as
requested in the FQL queries themselves.&lt;&#x2F;p&gt;
&lt;p&gt;Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;webservice&lt;&#x2F;li&gt;
&lt;li&gt;queries using FQL,  or alternatively CQL (limited)&lt;&#x2F;li&gt;
&lt;li&gt;multiple return formats (FoLiA XML, JSON, FLAT)&lt;&#x2F;li&gt;
&lt;li&gt;versioning control support using git&lt;&#x2F;li&gt;
&lt;li&gt;full support for corrections, alternatives!&lt;&#x2F;li&gt;
&lt;li&gt;support for concurrency&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Note that this webservice is &lt;em&gt;NOT&lt;&#x2F;em&gt; intended to be publicly exposed, but rather
to be used as a back-end by another system. The document server does support
constraining namespaces to certain session ids, constraining FQL queries to not
violate their namespace, and constraining uploads by session id or namespace.
This is secure for public exposure only when explicitly enabled and used over
HTTPS.&lt;&#x2F;p&gt;
&lt;p&gt;If you are looking for a command line tool that interprets FQL&#x2F;CQL and queries
FoLiA documents, use the &lt;code&gt;foliaquery&lt;&#x2F;code&gt; tool from the FoLiA-tools package
rather than this document server, see https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;folia&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Gecco</title>
          <pubDate>Wed, 21 Jan 2015 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/gecco/</link>
          <guid>https://proycon.anaproy.nl/software/gecco/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/gecco/">&lt;h1 id=&quot;gecco&quot;&gt;Gecco&lt;&#x2F;h1&gt;
&lt;p&gt;Gecco is a generic modular and distributed framework for spelling correction. Aimed to build a complete context-aware
spelling correction system given your own data set. Most modules will be language-independent and trainable from a
source corpus. Training is explicitly included in the framework. The framework aims to easily extendible, modules can be
written in Python 3. Moreover, the framework is scalable and can be distributed over multiple servers.&lt;&#x2F;p&gt;
&lt;p&gt;Given an input text, Gecco will add various suggestions for correction.&lt;&#x2F;p&gt;
&lt;p&gt;The system can be invoked from the command-line, as a Python binding, as a RESTful webservice, or through the web
application (two interfaces).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The Rains of Castamere</title>
          <pubDate>Tue, 20 May 2014 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/the-rains-of-castamere/</link>
          <guid>https://proycon.anaproy.nl/posts/the-rains-of-castamere/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/the-rains-of-castamere/">&lt;h1 id=&quot;the-rains-of-castamere&quot;&gt;The Rains of Castamere&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play &quot;The rains of Castamere&quot; from Game of Thrones. My interpretation may differ from the original and the sound quality is not that great. Disclaimer: Nobody died during the making of this video.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;6d708ea1-edbb-4e90-beee-2adddf6b56d1?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>My Home Automation</title>
          <pubDate>Sat, 11 Jan 2014 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/homeautomation/</link>
          <guid>https://proycon.anaproy.nl/software/homeautomation/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/homeautomation/">&lt;h1 id=&quot;home-automation&quot;&gt;Home Automation&lt;&#x2F;h1&gt;
&lt;p&gt;This repository contains my elaborate home automation configuration, using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;home-assistant.io&quot;&gt;Home Assistant&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;Prior to Home Assistant, I ran my own custom-built home automation software. This got too time consuming to maintain and
expand so in the summer of 2017 I migrated everything to Home Assistant.&lt;&#x2F;p&gt;
&lt;p&gt;I have a main server and various Raspberry Pis distributed through the house (for wiring reasons). One of the challenges
was getting them to communicate properly with Home Assistant. I decided on simply running a Home Assistant instance on each
(EventStream solutions did not work properly for me), have the master instance control as much as possible, and the
slaves as bare as possible, with communication proceeding over MQTT.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;goals&quot;&gt;Goals&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Automate and integrate as much as possible:
&lt;ul&gt;
&lt;li&gt;Lights&lt;&#x2F;li&gt;
&lt;li&gt;TV&lt;&#x2F;li&gt;
&lt;li&gt;Audio&lt;&#x2F;li&gt;
&lt;li&gt;Cameras&lt;&#x2F;li&gt;
&lt;li&gt;Lots of environment sensors for automations&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Open-source&lt;&#x2F;strong&gt; and &lt;strong&gt;no&lt;&#x2F;strong&gt; third-party cloud solutions, I like to own and safeguard my data!&lt;&#x2F;li&gt;
&lt;li&gt;Security&#x2F;Alarm system&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;devices&quot;&gt;Devices&lt;&#x2F;h2&gt;
&lt;p&gt;I have the following devices:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Master:&lt;&#x2F;strong&gt; Main server (Ubuntu Linux)
&lt;ul&gt;
&lt;li&gt;Quad core&lt;&#x2F;li&gt;
&lt;li&gt;16GB RAM&lt;&#x2F;li&gt;
&lt;li&gt;Aeotec Z-Stick&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Webserver&lt;&#x2F;em&gt;: Apache&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;MQTT Broker:&lt;&#x2F;em&gt; Mosquitto&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Audio streaming:&lt;&#x2F;em&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mopidy.com&#x2F;&quot;&gt;Mopidy&lt;&#x2F;a&gt; (MPD) + Modidy-spotify + Iris + Icecast&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Messaging:&lt;&#x2F;em&gt; XMPP (Prosody)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Slave&lt;&#x2F;strong&gt;: Raspberry Pi 1 (Raspbian) (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;blob&#x2F;master&#x2F;docs&#x2F;pi1.svg&quot;&gt;GPIO wiring schematic&lt;&#x2F;a&gt;)
&lt;ul&gt;
&lt;li&gt;GPIO: 433.92Mhz Transmitter for lights (see also https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;433mhzforrpi&#x2F;)&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: Door&#x2F;doorbell sensors (wired, reed contacts)&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: IR LED for remote control of TV&#x2F;audio&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Slave&lt;&#x2F;strong&gt;: Raspberry Pi 2 (Raspbian) (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;blob&#x2F;master&#x2F;docs&#x2F;pi2.svg&quot;&gt;GPIO wiring schematic&lt;&#x2F;a&gt;)
&lt;ul&gt;
&lt;li&gt;GPIO: 433.92Mhz Transmitter for lights&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: Door&#x2F;window sensors (wired, reed contacts)&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: Neopixels LED for ambilight in living room&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: IR LED for remote control of TV&#x2F;audio&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: IR Receiver&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Slave&lt;&#x2F;strong&gt;: Raspberry Pi 3 (Raspbian)
&lt;ul&gt;
&lt;li&gt;GPIO: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.adafruit.com&#x2F;product&#x2F;385&quot;&gt;DH-22 temperature&#x2F;humidity sensor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: Neopixels LED fireplace (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=i18eXQIXzXg&quot;&gt;video&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;tree&#x2F;master&#x2F;scripts&#x2F;technofire&quot;&gt;sources&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;GPIO: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.adafruit.com&#x2F;product&#x2F;189&quot;&gt;PIR sensor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;IP Cams&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;Living room (D-Link 5222-L)&lt;&#x2F;li&gt;
&lt;li&gt;Street (Foscam)&lt;&#x2F;li&gt;
&lt;li&gt;Garden (Foscam)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Webcams&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;Front door&lt;&#x2F;li&gt;
&lt;li&gt;Hallway&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;433 Mhz&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;Many Klik-aan-klik-Uit Adapters or older ELRO adapters for all lights&lt;&#x2F;li&gt;
&lt;li&gt;1x &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.rflink.nl&#x2F;&quot;&gt;RFLink Transceiver&lt;&#x2F;a&gt;, based on Arduino Mega, connected to Pi2
&lt;ul&gt;
&lt;li&gt;1x ALECTO WS-4500 Weather Station (mounted outside for wind, rain, temperature)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Z-Wave&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;Aeotec Z-Stick&lt;&#x2F;li&gt;
&lt;li&gt;3x &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.fibaro.com&#x2F;en&#x2F;products&#x2F;motion-sensor&#x2F;&quot;&gt;Fibaro Motion&#x2F;light&#x2F;temperature sensor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;1x Neo Coolcam Door&#x2F;window sensor&lt;&#x2F;li&gt;
&lt;li&gt;2x Nodon Softremote buttons for scene selection&#x2F;quick remote functionality&lt;&#x2F;li&gt;
&lt;li&gt;1x Philiotech Temperature&#x2F;Humidity Sensor for bathroom&lt;&#x2F;li&gt;
&lt;li&gt;1x Remotec ZRC-90 remote&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Other&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Slimme Meter&lt;&#x2F;em&gt; for power consumption, connected to main server&lt;&#x2F;li&gt;
&lt;li&gt;Speakers throughout the house for text-to-speech notifications&lt;&#x2F;li&gt;
&lt;li&gt;Wake up timer through bedroom TV&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;interface&quot;&gt;Interface&lt;&#x2F;h2&gt;
&lt;p&gt;Some screenshots of the interface, featuring &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;c727&#x2F;home-assistant-tiles&#x2F;&quot;&gt;home assistant tiles&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;master&#x2F;docs&#x2F;screenshot_main.png&quot; alt=&quot;Main screenshot&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;master&#x2F;docs&#x2F;screenshot_tv.png&quot; alt=&quot;Media controls&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;proycon&#x2F;homeassistant-config&#x2F;master&#x2F;docs&#x2F;screenshot_cam.png&quot; alt=&quot;Camera&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Automation</title>
          <pubDate>Fri, 10 Jan 2014 22:10:53 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/homeautomation/</link>
          <guid>https://proycon.anaproy.nl/posts/homeautomation/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/homeautomation/">&lt;h1 id=&quot;home-automation&quot;&gt;Home Automation&lt;&#x2F;h1&gt;
&lt;p&gt;I&#x27;ve just recently started my do-it-yourself home automation project, it&#x27;s great fun! My goal is to have as much scriptable as possible, I&#x27;m mostly a software guy so want to delegate as much to my scripts as I can. Hardware-wise I want to keep things cheap and simple, so no expensive commercial solutions, but DIY work (well, I delegate some of the more practical tasks such as soldering and screwing things in place to my boyfriend) and 100% open-source.&lt;&#x2F;p&gt;
&lt;p&gt;Everything is controlled by my home server (Linux) and two Raspberry pi&#x27;s, though in theory a single Raspberry Pi would be sufficient as well. It&#x27;s all a fairly cheap solution if you&#x27;re okay with getting your hands dirty with electronics and programming. What I have thus-far:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;433.92Mhz RF transmitter (4 eur) hooked up to raspberry pi (35 eur), for remote-controlled lights and other electrical appliances (http:&#x2F;&#x2F;www.elroshop.eu&#x2F;3-schakelaars-met-afstandsbediening-ab440s-3c.html) (17 eur for 3 switches).&lt;&#x2F;li&gt;
&lt;li&gt;Door&#x2F;window sensors (simple wired reed switches), hooked up to Raspberry Pi (4 eur per sensor)&lt;&#x2F;li&gt;
&lt;li&gt;Standard doorbell (1 eur), hooked up to Raspberry Pi. A standard cheap PC speaker near the door to produce ding-dong sound.&lt;&#x2F;li&gt;
&lt;li&gt;Detection whether boyfriend or I are home based on presence of mobile phones in our wireless network.&lt;&#x2F;li&gt;
&lt;li&gt;Alarm sounds and mail notifications in case doors open when nobody is homs.&lt;&#x2F;li&gt;
&lt;li&gt;Lights automatically turn on and off based on time and presence, computed relative to sunrise &amp;amp; sunset.&lt;&#x2F;li&gt;
&lt;li&gt;Text-to-speech greeting me whenever we come home, get a visitor, or for other announcements :)&lt;&#x2F;li&gt;
&lt;li&gt;IP Cam (170eur) and normal static webcams (12eur) for surveillance, patrolling based on time-of-day and presence, automated snapshots (the IP cam is the only expensive part in this story). I&#x27;m using my own scripts to control the cam, rather than built-in firmware for patrols etc.&lt;&#x2F;li&gt;
&lt;li&gt;Media center on TVs (via Raspberry Pis), allowing viewing of videos, youtube, music (mpd daemon &amp;amp; icecast stream), images (fbi), etc.. TV can turn on automatically through CEC, for the other older model I&#x27;m gonna hook an IR led to the pi and pretend to be a remote.&lt;&#x2F;li&gt;
&lt;li&gt;Server-side consists of a master Python script and some additional services (light daemon, door daemon)&lt;&#x2F;li&gt;
&lt;li&gt;Front-end is a nice and secure web-based interface (custom built), to access it all from computer, tablet, or phone&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Projects still planned:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Build my own thermostat (I just received my temperature sensors (1 eur each) in the mail, going to hook them up to Raspberry Pi soon)&lt;&#x2F;li&gt;
&lt;li&gt;Speech recognition &#x2F; Voice commands&lt;&#x2F;li&gt;
&lt;li&gt;More logging and nice graphs&lt;&#x2F;li&gt;
&lt;li&gt;Tracking of our whereabouts (phones) using GPS&lt;&#x2F;li&gt;
&lt;li&gt;Smoke detectors connected to server&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>FLAT</title>
          <pubDate>Sun, 29 Dec 2013 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/flat/</link>
          <guid>https://proycon.anaproy.nl/software/flat/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/flat/">&lt;h1 id=&quot;flat&quot;&gt;FLAT&lt;&#x2F;h1&gt;
&lt;p&gt;FLAT is a web-based linguistic annotation environment based around the FoLiA format (http:&#x2F;&#x2F;proycon.github.io&#x2F;folia), a rich XML-based format for linguistic annotation. FLAT allows users to view annotated FoLiA documents and enrich these documents with new annotations, a wide variety of linguistic annotation types is supported through the FoLiA paradigm. It is a document-centric tool that fully preserves and visualises document structure.&lt;&#x2F;p&gt;
&lt;p&gt;FLAT is written in Python using the Django framework. The user interface is written using javascript with jquery. The FoLiA Document Server (https:&#x2F;&#x2F;github.com&#x2F;proycon&#x2F;foliadocserve) , the back-end of the system, is written in Python with CherryPy and is used as a RESTful webservice.&lt;&#x2F;p&gt;
&lt;p&gt;FLAT is open source software developed at the Centre of Language and Speech Technology, Radboud University Nijmegen. It is licensed under the GNU Public License v3. The project is funded in the scope of the larger CLARIAH project.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mhysa</title>
          <pubDate>Sat, 14 Dec 2013 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/mhysa/</link>
          <guid>https://proycon.anaproy.nl/posts/mhysa/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/mhysa/">&lt;h1 id=&quot;mhysa&quot;&gt;Mhysa&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play the epic music &quot;Mhysa&quot; (mother) from the season 3 finale of Game of Thrones.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;b8fd3a99-ec88-4fca-83d4-66510f02c8c5?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Colibri Core</title>
          <pubDate>Sun, 15 Sep 2013 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/colibri-core/</link>
          <guid>https://proycon.anaproy.nl/software/colibri-core/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/colibri-core/">&lt;h1 id=&quot;colibri-core&quot;&gt;Colibri Core&lt;&#x2F;h1&gt;
&lt;p&gt;Colibri Core is software to quickly and efficiently count and extract patterns
from large corpus data, to extract various statistics on the extracted
patterns, and to compute relations between the extracted patterns. The employed
notion of pattern or construction encompasses the following categories:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;n-gram&lt;&#x2F;strong&gt; -- &lt;em&gt;n&lt;&#x2F;em&gt; consecutive words&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;skipgram&lt;&#x2F;strong&gt; -- An abstract pattern of predetermined length with one or multiple gaps (of specific size).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;flexgram&lt;&#x2F;strong&gt; -- An abstract pattern with one or more gaps of variable-size.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;N-gram extraction may seem fairly trivial at first, with a few lines in your
favourite scripting language, you can move a simple sliding window of size &lt;strong&gt;n&lt;&#x2F;strong&gt;
over your corpus and store the results in some kind of hashmap. This trivial
approach however makes an unnecessarily high demand on memory resources, this
often becomes prohibitive if unleashed on large corpora. Colibri Core tries to
minimise these space requirements in several ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compressed binary representation&lt;&#x2F;strong&gt; -- Each word type is assigned a numeric class, which is encoded in a compact binary format in which highly frequent classes take less space than less frequent classes. Colibri core always uses this representation rather than a full string representation, both on disk and in memory.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Informed iterative counting&lt;&#x2F;strong&gt; -- Counting is performed more intelligently by iteratively processing the corpus in several passes and quickly discarding patterns that won&#x27;t reach the desired occurrence threshold.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Skipgram and flexgram extraction are computationally more demanding but have
been implemented with similar optimisations. Skipgrams are computed by
abstracting over n-grams, and flexgrams in turn are computed either by
abstracting over skipgrams, or directly from n-grams on the basis of
co-occurrence information (mutual pointwise information).&lt;&#x2F;p&gt;
&lt;p&gt;At the heart of the sofware is the notion of pattern models. The core tool, to
be used from the command-line, is &lt;code&gt;colibri-patternmodeller&lt;&#x2F;code&gt; which enables you
to build pattern models, generate statistical reports, query for specific
patterns and relations, and manipulate models.&lt;&#x2F;p&gt;
&lt;p&gt;A pattern model is simply a collection of extracted patterns (any of the three
categories) and their counts from a specific corpus. Pattern models come in two
varieties:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unindexed Pattern Model&lt;&#x2F;strong&gt; -- The simplest form, which simply stores the patterns and their count.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Indexed Pattern Model&lt;&#x2F;strong&gt; -- The more informed form, which retains all indices to the original corpus, at the cost of more memory&#x2F;diskspace.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The Indexed Pattern Model is much more powerful, and allows more statistics and
relations to be inferred.&lt;&#x2F;p&gt;
&lt;p&gt;The generation of pattern models is optionally parametrised by a minimum
occurrence threshold, a maximum pattern length, and a lower-boundary on the
different types that may instantiate a skipgram (i.e. possible fillings of the
gaps).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;technical-details&quot;&gt;Technical Details&lt;&#x2F;h2&gt;
&lt;p&gt;Colibri Core is available as a collection of &lt;strong&gt;standalone command-line tools&lt;&#x2F;strong&gt;,
as a &lt;strong&gt;C++ library&lt;&#x2F;strong&gt;, and as a &lt;strong&gt;Python library&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Please consult the full documentation at https:&#x2F;&#x2F;proycon.github.io&#x2F;colibri-core&lt;&#x2F;p&gt;
&lt;p&gt;Installation instructions are here:  https:&#x2F;&#x2F;proycon.github.io&#x2F;colibri-core&#x2F;doc&#x2F;#installation&lt;&#x2F;p&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;CLARIAH&#x2F;wp3-demos&#x2F;master&#x2F;colibri-core.gif&quot; alt=&quot;Colibri Core Demo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;publication&quot;&gt;Publication&lt;&#x2F;h2&gt;
&lt;p&gt;This software is extensively described in the following peer-reviewed publication:&lt;&#x2F;p&gt;
&lt;p&gt;van Gompel, M and van den Bosch, A (2016)
Efficient n-gram, Skipgram and Flexgram Modelling with Colibri Core.
&lt;em&gt;Journal of Open Research Software&lt;&#x2F;em&gt;
4: e30, DOI: http:&#x2F;&#x2F;dx.doi.org&#x2F;10.5334&#x2F;jors.105&lt;&#x2F;p&gt;
&lt;p&gt;Click the link to access the publication and please cite it if you make use of
Colibri Core in your work.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ao longe do mar</title>
          <pubDate>Mon, 08 Jul 2013 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/ao-longe-do-mar/</link>
          <guid>https://proycon.anaproy.nl/posts/ao-longe-do-mar/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/ao-longe-do-mar/">&lt;h1 id=&quot;ao-longe-do-mar&quot;&gt;Ao Longe do Mar&lt;&#x2F;h1&gt;
&lt;p&gt;Aqui eu toco a música &quot;Ao Longe do Mar&quot; de Madredeus, no piano e na casa dos meus pais. A qualidade do som e um pouco pior porque estão a arrumar coisas na cozinha. O meu namorado gravou este video com o novo cam dele.. Como sempre, a minha versão pode ser distinta do original.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;7f6ec4d8-0ac2-4e56-a76e-4b4b85eea29c?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Dotfiles</title>
          <pubDate>Sun, 26 May 2013 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/dotfiles/</link>
          <guid>https://proycon.anaproy.nl/software/dotfiles/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/dotfiles/">&lt;p&gt;Current setup:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&quot;&gt;Arch Linux&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Compositor&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hyprland.org&quot;&gt;Hyprland&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bar&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Alexays&#x2F;Waybar&quot;&gt;waybar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Shell&lt;&#x2F;strong&gt;: zsh&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Terminal:&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;dnkl&#x2F;foot&quot;&gt;foot&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Terminal Multiplexer&lt;&#x2F;strong&gt;: tmux&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Editor&lt;&#x2F;strong&gt;: neovim&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Browser&lt;&#x2F;strong&gt;: firefox&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Music player&lt;&#x2F;strong&gt;: ncmpcpp + mopidy&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mail&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aerc-mail.org&#x2F;&quot;&gt;aerc&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chat&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~taiite&#x2F;senpai&#x2F;&quot;&gt;senpai&lt;&#x2F;a&gt; (IRC client), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~emersion&#x2F;soju&quot;&gt;soju&lt;&#x2F;a&gt; (IRC bouncer), bitlbee (XMPP), gomuks (matrix), tg (telegram)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>O Pomar das Laranjeiras</title>
          <pubDate>Sat, 27 Apr 2013 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/o-pomar-das-laranjeiras/</link>
          <guid>https://proycon.anaproy.nl/posts/o-pomar-das-laranjeiras/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/o-pomar-das-laranjeiras/">&lt;h1 id=&quot;o-pomar-das-laranjeiras&quot;&gt;O Pomar das Laranjeiras&lt;&#x2F;h1&gt;
&lt;p&gt;Faz tempo que gravei uma nova música! Depois de ouvir um bom concerto de Madredeus aqui na minha cidade há uns meses, decidi de tocar &quot;O Pomar das Laranjeiras&quot; no piano. A minha interpretação pode variar um pouco do original. Não tenho partitura, usualmente toco de ouvido.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;2ac1ee89-ec8c-4e54-b1f0-6591544c3aee?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Game of Thrones - Song of Ice and Fire</title>
          <pubDate>Sat, 01 Sep 2012 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/game-of-thrones/</link>
          <guid>https://proycon.anaproy.nl/posts/game-of-thrones/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/game-of-thrones/">&lt;h1 id=&quot;game-of-thrones-song-of-ice-and-fire&quot;&gt;Game of Thrones - Song of Ice and Fire&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play the theme song of Game of Thrones. My version may differ from the original.&lt;&#x2F;p&gt;
&lt;p&gt;{{  peertube(id=&quot;90789235-f71a-4c82-9778-b143b1d394e0) }}&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Roslin and Adama</title>
          <pubDate>Thu, 26 Jul 2012 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/roslin-and-adama/</link>
          <guid>https://proycon.anaproy.nl/posts/roslin-and-adama/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/roslin-and-adama/">&lt;h1 id=&quot;roslin-and-adama&quot;&gt;Roslin and Adama&lt;&#x2F;h1&gt;
&lt;p&gt;This is the wonderful song Roslin &amp;amp; Adama, from the TV series Battlestar Galactica, composed by Bear McCreary. My version may differ from the original.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;d9daefa7-1f6e-4bf4-96c1-fe30ed6f25e6?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Gaeta&#x27;s Lament</title>
          <pubDate>Sun, 28 Aug 2011 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/gaetas-lament/</link>
          <guid>https://proycon.anaproy.nl/posts/gaetas-lament/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/gaetas-lament/">&lt;h1 id=&quot;gaeta-s-lament&quot;&gt;Gaeta&#x27;s Lament&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play the wonderful song Gaeta&#x27;s Lament, composed by Bear McCreary for the Battlestar Galactica TV series. In the series it is beautifully sung by Mr. Gaeta after his leg has been cut off. Unfortunately, I&#x27;m not a great singer so you&#x27;ll have to do with an instrumental version.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;85a47ba0-bf7e-49ee-9b47-749fdae789c1?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Battlestar Galactica Composition</title>
          <pubDate>Thu, 11 Aug 2011 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/battlestar-galactica-composition/</link>
          <guid>https://proycon.anaproy.nl/posts/battlestar-galactica-composition/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/battlestar-galactica-composition/">&lt;h1 id=&quot;battlestar-galactica-composition&quot;&gt;Battlestar Galactica Composition&lt;&#x2F;h1&gt;
&lt;p&gt;In tribute to the Battlestar Galactica Sci-fi series and the wonderful music in it by composer Bear McCreary, here is my Battlestar Galactica Composition, in which the true BSG fan will be able to discern part a few of the melodies heard in the series: - Intro - The shape of things to come - Allegro - Passacaglia - All along the Watchtower &#x2F; Kara Remembers - The original 1978 theme song Played in part by ear and in part using Bear McCreary&#x27;s fantastic piano solo book (featured on the piano in the video).&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;e19d4bc3-868e-4eea-8b18-80b1ad3992aa?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>FoLiA</title>
          <pubDate>Sun, 09 Jan 2011 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/folia/</link>
          <guid>https://proycon.anaproy.nl/software/folia/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/folia/">&lt;h1 id=&quot;folia-format-for-linguistic-annotation&quot;&gt;FoLiA: Format for Linguistic Annotation&lt;&#x2F;h1&gt;
&lt;p&gt;FoLiA is an XML-based annotation format, suitable for the representation
of linguistically annotated language resources. FoLiA’s intended use is
as a format for storing and&#x2F;or exchanging language resources, including
corpora. Our aim is to introduce a single rich format that can
accommodate a wide variety of linguistic annotation types through a
single generalised paradigm. We do not commit to any label set, language
or linguistic theory. This is always left to the developer of the
language resource, and provides maximum flexibility.&lt;&#x2F;p&gt;
&lt;p&gt;XML is an inherently hierarchic format. FoLiA does justice to this by
maximally utilising a hierarchic, inline, setup. We inherit from the
D-Coi format, which posits to be loosely based on a minimal subset of
TEI. Because of the introduction of a new and much broader paradigm,
FoLiA is not backwards-compatible with D-Coi, i.e. validators for D-Coi
will not accept FoLiA XML. It is however easy to convert FoLiA to less
complex or verbose formats such as the D-Coi format, or plain-text.
Converters are provided.&lt;&#x2F;p&gt;
&lt;p&gt;The main characteristics of FoLiA are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generalised paradigm&lt;&#x2F;strong&gt; - We use a generalised paradigm, with as few
ad-hoc provisions for annotation types as possible.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Expressivity&lt;&#x2F;strong&gt; - The format is highly expressive, annotations can
be expressed in great detail and with flexibility to the user’s
needs, without forcing unwanted details. Moreover, FoLiA has
generalised support for representing annotation alternatives, and
annotation metadata such as information on annotator, time of
annotation, and annotation confidence.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Extensible&lt;&#x2F;strong&gt; - Due to the generalised paradigm and the fact that
the format does not commit to any label set, FoLiA is fairly easily
extensible.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Formalised&lt;&#x2F;strong&gt; - The format is formalised, and can be validated on
both a shallow and a deep level (the latter including tagset
validation), and easily machine parsable, for which tools are
provided.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Practical&lt;&#x2F;strong&gt; - FoLiA has been developed in a bottom-up fashion right
alongside applications, libraries, and other toolkits and converters.
Whilst the format is rich, we try to maintain it as simple and
straightforward as possible, minimising the learning curve and making
it easy to adopt FoLiA in practical applications.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The FoLiA format makes mixed-use of inline and stand-off annotation.
Inline annotation is used for annotations pertaining to single tokens,
whilst stand-off annotation in a separate annotation layers is adopted
for annotation types that span over multiple tokens. This provides FoLiA
with the necessary flexibility and extensibility to deal with various
kinds of annotations.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;features&quot;&gt;Features&lt;&#x2F;h3&gt;
&lt;p&gt;Notable features are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;XML-based, UTF-8 encoded&lt;&#x2F;li&gt;
&lt;li&gt;Language and tagset independent&lt;&#x2F;li&gt;
&lt;li&gt;Can encode both tokenised as well as untokenised text + partial
reconstructability of untokenised form even after tokenisation.&lt;&#x2F;li&gt;
&lt;li&gt;Generalised paradigm, extensible and flexible&lt;&#x2F;li&gt;
&lt;li&gt;Provenance support for all linguistic annotations: annotator, type
(automatic or manual), time.&lt;&#x2F;li&gt;
&lt;li&gt;Used by various software projects and corpora, especially in the
Dutch-Flemish NLP community&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;publications&quot;&gt;Publications&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Maarten van Gompel &amp;amp; Martin Reynaert (2014). &lt;strong&gt;FoLiA: A practical XML
format for linguistic annotation - a descriptive and comparative
study;&lt;&#x2F;strong&gt; Computational Linguistics in the Netherlands Journal;
3:63-81; 2013.&lt;&#x2F;li&gt;
&lt;li&gt;Maarten van Gompel (2014). &lt;strong&gt;FoLiA: Format for Linguistic Annotation.
Documentation.&lt;&#x2F;strong&gt; Language and Speech Technology Technical Report
Series LST-14-01. Radboud University Nijmegen.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>In Dreams</title>
          <pubDate>Wed, 29 Dec 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/in-dreams/</link>
          <guid>https://proycon.anaproy.nl/posts/in-dreams/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/in-dreams/">&lt;h1 id=&quot;in-dreams&quot;&gt;In Dreams&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play music from the movie Lord of the Rings. Original music by Howard Shore. Mostly played from sheet, with some enrichment of my own.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;0b1e7740-bcd9-4c0a-a6c7-aa25051c809c?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Stormwind</title>
          <pubDate>Sun, 14 Nov 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/stormwind/</link>
          <guid>https://proycon.anaproy.nl/posts/stormwind/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/stormwind/">&lt;h1 id=&quot;stormwind&quot;&gt;Stormwind&lt;&#x2F;h1&gt;
&lt;p&gt;Here I play the song of the city of Stormwind, from the game World of Warcraft. A great majestic piece of music in my opinion, very suitable for piano! I partially used the Guri Fater arrangement (from www.gamemusicthemes.com), along with my own interpretation.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;16b1c83e-e11f-48c7-b3a5-225c3e6c4a65?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Maisha</title>
          <pubDate>Fri, 09 Jul 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/maisha/</link>
          <guid>https://proycon.anaproy.nl/posts/maisha/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/maisha/">&lt;h1 id=&quot;maisha&quot;&gt;Maisha&lt;&#x2F;h1&gt;
&lt;p&gt;This is my interpretation on piano of the wonderful song Maisha, of the Idan Raichel project. One of the many fantastic songs he made. The original is with Swahili vocals, but my version is instrumental only (I&#x27;m a very bad singer unfortunately :) ). The original version can be found &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-j9bpSQNYw4&quot;&gt;here&lt;&#x2F;a&gt;, with English and Polish subtitles:  . As always, my interpretation may vary from the original, and no, I don&#x27;t have any score.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;47cd9191-e7c3-4727-b90a-f216ad8dbef3?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>PyNLPl</title>
          <pubDate>Sun, 23 May 2010 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/pynlpl/</link>
          <guid>https://proycon.anaproy.nl/software/pynlpl/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/pynlpl/">&lt;h1 id=&quot;pynlpl&quot;&gt;PyNLPl&lt;&#x2F;h1&gt;
&lt;p&gt;PyNLPl, pronounced as &#x27;pineapple&#x27;, is a Python library for Natural Language Processing. It contains various modules useful for common, and less common, NLP tasks. PyNLPl can be used for basic tasks such as the extraction of n-grams and frequency lists, and to build simple language model. There are also more complex data types and algorithms. Moreover, there are parsers for file formats common in NLP (e.g. FoLiA&#x2F;Giza&#x2F;Moses&#x2F;ARPA&#x2F;Timbl&#x2F;CQL). There are also clients to interface with various NLP specific servers. PyNLPl most notably features a very extensive library for working with FoLiA XML (Format for Linguistic Annotatation).&lt;&#x2F;p&gt;
&lt;p&gt;The library is a divided into several packages and modules. It works on Python 2.7, as well as Python 3.&lt;&#x2F;p&gt;
&lt;p&gt;The following modules are available:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;pynlpl.datatypes - Extra datatypes (priority queues, patterns, tries)&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.evaluation - Evaluation &amp;amp; experiment classes (parameter search, wrapped progressive sampling, class evaluation (precision&#x2F;recall&#x2F;f-score&#x2F;auc), sampler, confusion matrix, multithreaded experiment pool)&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.cgn - Module for parsing CGN (Corpus Gesproken Nederlands) part-of-speech tags&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.folia - Extensive library for reading and manipulating the documents in FoLiA format (Format for Linguistic Annotation).&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.fql - Extensive library for the FoLiA Query Language (FQL), built on top of pynlpl.formats.folia. FQL is currently documented here.&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.cql - Parser for the Corpus Query Language (CQL), as also used by Corpus Workbench and Sketch Engine. Contains a convertor to FQL.&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.giza - Module for reading GIZA++ word alignment data&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.moses - Module for reading Moses phrase-translation tables.&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.sonar - Largely obsolete module for pre-releases of the SoNaR corpus, use pynlpl.formats.folia instead.&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.formats.timbl - Module for reading Timbl output (consider using python-timbl instead though)&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.lm.lm - Module for simple language model and reader for ARPA language model data as well (used by SRILM).&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.search - Various search algorithms (Breadth-first, depth-first, beam-search, hill climbing, A star, various variants of each)&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.statistics - Frequency lists, Levenshtein, common statistics and information theory functions&lt;&#x2F;li&gt;
&lt;li&gt;pynlpl.textprocessors - Simple tokeniser, n-gram extraction&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Comptine d&#x27;un autre été</title>
          <pubDate>Sat, 10 Apr 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/comptine-d-un-autre-ete/</link>
          <guid>https://proycon.anaproy.nl/posts/comptine-d-un-autre-ete/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/comptine-d-un-autre-ete/">&lt;h1 id=&quot;comptine-d-un-autre-ete&quot;&gt;Comptine d&#x27;un autre été&lt;&#x2F;h1&gt;
&lt;p&gt;Dans cette vidéo je joue la musique &quot;Comptine d&#x27;un autre été: l&#x27;après-midi&quot;, par Yann Tiersen. Je suis désolé que la vidéo est assez sombre, mais le son est le plus important. Comme toujours, mon interprétation peut être différente de l&#x27;originale.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;fd64c73b-973d-4559-872f-3c132e96bedb?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Cada Día</title>
          <pubDate>Fri, 02 Apr 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/cada-dia/</link>
          <guid>https://proycon.anaproy.nl/posts/cada-dia/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/cada-dia/">&lt;h1 id=&quot;cada-dia&quot;&gt;Cada día&lt;&#x2F;h1&gt;
&lt;p&gt;En este video toco la bellísima canción &quot;Cada día&quot; del Idan Raichel Project, un artisto israelita. En la versión original canta Marta Gómez. No tengo ningunas partituras de esta canción, esta versión es mi interpretación personal del original.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;f7253269-8d34-447e-a9b6-bc31c714668e?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>CLAM</title>
          <pubDate>Sun, 21 Mar 2010 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/clam/</link>
          <guid>https://proycon.anaproy.nl/software/clam/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/clam/">&lt;h1 id=&quot;clam&quot;&gt;CLAM&lt;&#x2F;h1&gt;
&lt;p&gt;CLAM allows you to quickly and transparently transform your application into a RESTful
webservice, with which both human end-users as well as automated clients can interact. CLAM takes a description of your
system and wraps itself around the system, allowing end-users or automated clients to upload input files to your
application, start your application with specific parameters of their choice, and download and view the output of the
application once it is completed.&lt;&#x2F;p&gt;
&lt;p&gt;CLAM is set up in a universal fashion, requiring minimal effort on the part of the service developer. Your actual NLP
application is treated as a black box, of which only the parameters, input formats and output formats need to be
described. Your application itself needs not be network aware in any way, nor aware of CLAM, and the handling and
validation of input can be taken care of by CLAM.&lt;&#x2F;p&gt;
&lt;p&gt;CLAM is entirely written in Python, runs on UNIX-derived systems, and is available as open source under the GNU Public
License (v3). It is set up in a modular fashion, and offers an API, and as such is easily extendable. CLAM communicates
in a transparent XML format, and using XSL transformation offers a full web 2.0 web-interface for human end users.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>River flows in you</title>
          <pubDate>Sat, 16 Jan 2010 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/river-flows-in-you/</link>
          <guid>https://proycon.anaproy.nl/posts/river-flows-in-you/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/river-flows-in-you/">&lt;h1 id=&quot;river-flows-in-you&quot;&gt;River flows in you&lt;&#x2F;h1&gt;
&lt;p&gt;This is River flows in you, by Yiruma, played on my new piano !!! As always, my interpretation may vary from the original&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;730ec682-af3c-4347-8c66-d37b8b279c02?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Valkuil.net</title>
          <pubDate>Fri, 01 Jan 2010 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/valkuil/</link>
          <guid>https://proycon.anaproy.nl/software/valkuil/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/valkuil/">&lt;h1 id=&quot;valkuil-net&quot;&gt;Valkuil.net&lt;&#x2F;h1&gt;
&lt;p&gt;Valkuil.net is een automatische spellingcorrector voor het Nederlands die zowel gewone typefouten als grammaticale fouten en verwarringen tussen bestaande woorden opspoort. Op zoek naar spellingcorrectie voor het Engels? Ga dan naar dan Fowlt.net.&lt;&#x2F;p&gt;
&lt;p&gt;Valkuil.net is gebaseerd op grote hoeveelheden Nederlandse tekst, en niet op taalkundige kennis of een vaste woordenlijst. De meeste modules in valkuil.net zijn contextgebaseerd en statistisch: ze slaan alarm wanneer ze een woord tegenkomen dat ze niet verwachten op basis van de omgeving waarin dat woord staat. Het enthousiasme waarmee ze alarm slaan is instelbaar (klik op &#x27;Toon geavanceerde opties&#x27; in het invoerscherm).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ucto</title>
          <pubDate>Tue, 01 Dec 2009 00:04:34 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/software/ucto/</link>
          <guid>https://proycon.anaproy.nl/software/ucto/</guid>
          <description xml:base="https://proycon.anaproy.nl/software/ucto/">&lt;h1 id=&quot;ucto&quot;&gt;Ucto&lt;&#x2F;h1&gt;
&lt;p&gt;Ucto tokenizes text files: it separates words from punctuation, and splits sentences. It offers several other basic preprocessing steps such as changing case that you can all use to make your text suited for further processing such as indexing, part-of-speech tagging, or machine translation.&lt;&#x2F;p&gt;
&lt;p&gt;Ucto comes with tokenisation rules for several languages and can be easily extended to suit other languages. It has been incorporated for tokenizing Dutch text in Frog, our Dutch morpho-syntactic processor.
Features&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Comes with tokenization rules for English, Dutch, French, Italian, and Swedish; easily extendible to other languages.&lt;&#x2F;li&gt;
&lt;li&gt;Recognizes dates, times, units, currencies, abbreviations.&lt;&#x2F;li&gt;
&lt;li&gt;Recognizes paired quote spans, sentences, and paragraphs.&lt;&#x2F;li&gt;
&lt;li&gt;Produces UTF8 encoding and NFC output normalization, optionally accepts other encodings as input.&lt;&#x2F;li&gt;
&lt;li&gt;Optional conversion to all lowercase or uppercase.&lt;&#x2F;li&gt;
&lt;li&gt;Supports FoLiA XML&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Ucto was written by Maarten van Gompel and Ko van der Sloot. Work on Ucto was funded by NWO, the Netherlands Organisation for Scientific Research, under the Implicit Linguistics project and the CLARIN-NL program.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Babylon 5 Music Composition</title>
          <pubDate>Sat, 29 Mar 2008 11:48:55 +0100</pubDate>
          <author>Unknown</author>
          <link>https://proycon.anaproy.nl/posts/babylon-5-music-composition/</link>
          <guid>https://proycon.anaproy.nl/posts/babylon-5-music-composition/</guid>
          <description xml:base="https://proycon.anaproy.nl/posts/babylon-5-music-composition/">&lt;h1 id=&quot;babylon-5-music-composition&quot;&gt;Babylon 5 Music Composition&lt;&#x2F;h1&gt;
&lt;p&gt;I am a big Babylon 5 fan and a while ago I already posted a Music Composition. Now as I have been in the progress of rewatching all episodes, I have made a refined composition in chronological order, you thus hear &lt;em&gt;my own interpretation&lt;&#x2F;em&gt; of all five seasons, glued together in one composition in chronological order.&lt;&#x2F;p&gt;
&lt;p&gt;Note that this is my personal interpretation, derived from simply listening to the various theme songs, and it may differ from the actual music. For the same reason I do not have any kind of sheet music available whatsoever.&lt;&#x2F;p&gt;
&lt;div &gt;
    &lt;iframe
        src=&quot;https:&#x2F;&#x2F;video.anaproy.nl&#x2F;videos&#x2F;embed&#x2F;04e06164-9a27-4fec-b708-e1c4144c1e8c?autoplay=1&quot;
        frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; sandbox=&quot;allow-same-origin allow-scripts allow-popups allow-forms&quot;&gt;
    &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
    </channel>
</rss>
