<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tales</title>
    <link>https://tales.mbivert.com/</link>
    <description>Recent content on Tales</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Sat, 27 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://tales.mbivert.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>On bits of code: printb_flags()</title>
      <link>https://tales.mbivert.com/on-bits-of-code-printb-flags/</link>
      <pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-bits-of-code-printb-flags/</guid>
      <description>Reflexion, oil on canvas, 1905 by William-Adolphe Bouguereau through wikimedia.org – Public domain
While browsing OpenBSD&amp;rsquo;s httpd&amp;rsquo;s code, I stumbled upon &amp;ldquo;weird&amp;rdquo; flags packed to a char *, used via a function printb_flags(). Turn&amp;rsquo;s out the way it works is quite fun; here&amp;rsquo;s a runnable excerpt:
#include &amp;lt;ctype.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdint.h&amp;gt; #include &amp;lt;string.h&amp;gt; #define SRVFLAG_BITS	\ &amp;#34;\10\01INDEX\02NO_INDEX\03AUTO_INDEX\04NO_AUTO_INDEX&amp;#34;	\ &amp;#34;\05ROOT\06LOCATION\07FCGI\10NO_FCGI\11LOG\12NO_LOG\13ERRDOCS&amp;#34;	\ &amp;#34;\14SYSLOG\15NO_SYSLOG\16TLS\17ACCESS_LOG\20ERROR_LOG&amp;#34;	\ &amp;#34;\21AUTH\22NO_AUTH\23BLOCK\24NO_BLOCK\25LOCATION_MATCH&amp;#34;	\ &amp;#34;\26SERVER_MATCH\27SERVER_HSTS\30DEFAULT_TYPE\31PATH_REWRITE&amp;#34;	\ &amp;#34;\32NO_PATH_REWRITE\34NO_BANNER\33GZIP_STATIC\37LOCATION_FOUND&amp;#34;	\ &amp;#34;\40LOCATION_NOT_FOUND&amp;#34; const char * printb_flags(const uint32_t v, const char *bits) { static char buf[2][BUFSIZ]; static int idx = 0; int i, any = 0; char c, *p, *r; p = r = buf[++idx % 2]; memset(p, 0, BUFSIZ); if (bits) { bits++; while ((i = *bits++)) { if (v &amp;amp; (1 &amp;lt;&amp;lt; (i - 1))) { if (any) { *p++ = &amp;#39;,&amp;#39;; *p++ = &amp;#39; &amp;#39;; } any = 1; for (; (c = *bits) &amp;gt; 32; bits++) { if (c == &amp;#39;_&amp;#39;) *p++ = &amp;#39; &amp;#39;; else *p++ = tolower((unsigned char)c); } } else for (; *bits &amp;gt; 32; bits++) ; } } return (r); } int main(void) { printf(&amp;#34;%s\n&amp;#34;, printb_flags((1 &amp;lt;&amp;lt; 0) | (1 &amp;lt;&amp;lt; 3) | (1 &amp;lt;&amp;lt; 30), SRVFLAG_BITS)); return 0; } Below&amp;rsquo;s a commented version of the previous excerpt; I encourage you to think about it on your own though.</description>
    </item>
    
    <item>
      <title>On exceptions in Go</title>
      <link>https://tales.mbivert.com/on-exceptions-in-golang/</link>
      <pubDate>Sun, 22 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-exceptions-in-golang/</guid>
      <description>Gouache study for a kids&amp;rsquo; course by M. Bivert through instagram.com Error handling in Go is typically performed by returning an additional error value. The pros/cons of it has been largely debated: essentially, it&amp;rsquo;s more verbose that what we could have had, but it&amp;rsquo;s dumb, simple, and tend to encourage a thorough handling of error cases.
By comparison, a crucial drawback of a major alternative to this approach &amp;ndash; exceptions &amp;ndash; is that they&amp;rsquo;re essentially a non-local goto: in practice, they tend to hide where/when an error can occur, require a smart IDE to understand which functions in a try{} block can throw() what; lazy programmers&amp;rsquo;s Gotta Catch &amp;lsquo;Em All!</description>
    </item>
    
    <item>
      <title>On a 𝕏-like service part. 1: user handling (Django tutorial)</title>
      <link>https://tales.mbivert.com/on-a-x-like-service-user-handling-django-tutorial/</link>
      <pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-a-x-like-service-user-handling-django-tutorial/</guid>
      <description>(WIP)
We propose a step-by-step implementation of a 𝕏-like service, with a specification essentially based on CS50&amp;rsquo;s Project 4&amp;rsquo;s. We&amp;rsquo;ll focus in this article on custom user handling.
As for the previous project, the code is available on github.
Setting up # Create a directory and get in % mkdir django-network % cd django-network # I&amp;#39;d recommend to version things with git(1). You can version # things after every exercices for example.</description>
    </item>
    
    <item>
      <title>On a paste service (Django tutorial)</title>
      <link>https://tales.mbivert.com/on-a-paste-service-django-tutorial/</link>
      <pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-a-paste-service-django-tutorial/</guid>
      <description>The Django tutorial is a great first resource to get a feel for how Django works. However, Django being rather sophisticated, I think it&amp;rsquo;s best to repeat some of those steps a few times in slightly different settings to help internalize the knowledge.
We build here on said tutorial: for the most part, we repeat very similar steps, encouraging the reader to use his memory over googling around, and also progressively incorporate bits that haven&amp;rsquo;t been explored in the tutorial.</description>
    </item>
    
    <item>
      <title>On &#34;pure&#34; refactoring</title>
      <link>https://tales.mbivert.com/on-pure-refactoring/</link>
      <pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-pure-refactoring/</guid>
      <description>I&amp;rsquo;m confident there&amp;rsquo;s nothing new here, but I&amp;rsquo;ve never saw this approach being linked to (functional) purity, as in, side-effects free.
Let&amp;rsquo;s say that you have a piece of code to be refactored. What we&amp;rsquo;ll do is implement, aside of the current implementation, the new implementation. Saying it otherwise, the old implementation won&amp;rsquo;t be removed until the refactoring is complete, and guaranteed to be correct.
A pleasant addition to this is to have extra layer of indirection(s), allowing to isolate both implementations, and eventually select either one via a configuration flag.</description>
    </item>
    
    <item>
      <title>On writing OpenBSD services (e.g. for chrooted Go servers)</title>
      <link>https://tales.mbivert.com/on-writing-openbsd-services/</link>
      <pubDate>Mon, 29 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-writing-openbsd-services/</guid>
      <description>Introduction Services are sh(1) scripts, installed in the /etc/rc.d/ directory. Enabled services are executable (chmod +x /etc/rc.d/$service); disabled services aren&amp;rsquo;t.
rc.subr(8) clarifies what such a service is supposed to be doing:
Every script under /etc/rc.d follows this pattern: Define the daemon variable. Define service-specific defaults for one or more daemon_* variables (optional). Source rc.subr, which defines default shell functions and variable values. Override the pexp variable or any of the rc_* functions and set the rc_bg or rc_reload variables, if needed.</description>
    </item>
    
    <item>
      <title>On doing OOP with Scheme</title>
      <link>https://tales.mbivert.com/on-oop-with-scheme/</link>
      <pubDate>Mon, 22 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-oop-with-scheme/</guid>
      <description>I struggled to find something similar last time I googled around, and had to unearthed this from a venerable, fragile hard drive (school project, 10/15 years ago). It doesn&amp;rsquo;t compile (racket) anymore as-is (something something &amp;ldquo;unholly macros usage&amp;rdquo;). I&amp;rsquo;ll eventually clean it up one day, but in the mean time, if it may help or be of curiosity to anyone.
Pygmalion adoring his statue, 1717, oil on canvas by Jean Raoux through wikimedia.</description>
    </item>
    
    <item>
      <title>On denotational, operational and axiomatic semantics</title>
      <link>https://tales.mbivert.com/on-denotational-operational-axiomatic-semantics/</link>
      <pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-denotational-operational-axiomatic-semantics/</guid>
      <description>Bethsabée, 1889. Oil on canvas, 60.5×100 cm (23.8×39.3 in). Louvre, Paris by Jean-Léon Gérôme through wikimedia.org – Public domain
The notion of the syntax of a programming language is usually well-understood: it&amp;rsquo;s essentially the grammar, the rules for writing &amp;ldquo;correct&amp;rdquo; sentences within this language. Amusingly, the way people usually describe semantics is much less clear, for example:
In programming language theory, semantics is the rigorous mathematical study of the meaning of programming languages.</description>
    </item>
    
    <item>
      <title>On cars vs. trains &amp; public transports: Ford, GM&#39;s influence</title>
      <link>https://tales.mbivert.com/on-cars-vs-trains/</link>
      <pubDate>Thu, 27 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-cars-vs-trains/</guid>
      <description>A short note, mainly quoting a few references for those who ever wondered about why cars are so prominent, and why public transports or trains aren&amp;rsquo;t better developed.
Think of the amount of needless:
deaths by accidents; direct and indirect pollution, and related health hazards; waste caused by &amp;ldquo;forced&amp;rdquo; car updates every few years or so; systematic noise pollution in every city; oil related conflicts; space and soil wasted for roads/motorways/parking; time spent driving; etc.</description>
    </item>
    
    <item>
      <title>On some tips for oil painting</title>
      <link>https://tales.mbivert.com/on-tips-for-oil-painting/</link>
      <pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-tips-for-oil-painting/</guid>
      <description>Introduction Note: This is a WIP; I&amp;rsquo;ll slowly add to this article over time, and probably restructure it later once I&amp;rsquo;ve got most of it down.
Painting is complex enough of an activity to require a precise adjustment of many bolts and nuts to systematically achieve a predictable result. I&amp;rsquo;ll try to document here a few things pertaining to oil painting that I&amp;rsquo;ve learned over the years.
You may also be interested in this series about watercolor material.</description>
    </item>
    
    <item>
      <title>On composition: Leonardo&#39;s Virgin of the rocks</title>
      <link>https://tales.mbivert.com/on-composition-virgin-of-the-rocks/</link>
      <pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-composition-virgin-of-the-rocks/</guid>
      <description>This has been generated from \(\LaTeX\) by Pandoc; the corresponding pdf file looks better.
A key observation Consider first where Jesus, the bottom right child, is looking at:
At first sight, one may think that he’s looking at John the Baptist (the second child). But upon closer investigation, paying attention in particular to Jesus’s chest and eyes, we can see that he’s looking beyond.
More precisely, he’s looking in the direction of the Source of Light – an obvious metaphor for God in a Christian setting – which can be estimated from the position of highlights and shadow patterns.</description>
    </item>
    
    <item>
      <title>On the multi-dimensional chain-rule</title>
      <link>https://tales.mbivert.com/on-the-multi-dimensional-chain-rule/</link>
      <pubDate>Sun, 10 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-multi-dimensional-chain-rule/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note&lt;/u&gt;&lt;/strong&gt;: This article has been generated from a \(\LaTeX\) file
by &lt;a href=&#34;https://pandoc.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Pandoc&lt;/a&gt;; some things are/may be broken. The
&lt;a href=&#34;https://tales.mbivert.com/on-the-multi-dimensional-chain-rule.pdf&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;.pdf&lt;/a&gt; is available.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On piping a Go text/template to/from a shell command</title>
      <link>https://tales.mbivert.com/on-piping-go-templates-to-shell/</link>
      <pubDate>Mon, 14 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-piping-go-templates-to-shell/</guid>
      <description>This article shows how to send the content of a Go template to the stdin of an arbitrary command, and capture its output. To make things clearer, consider the following example: assume you&amp;rsquo;ve installed pygmentize(1), the command line interface for the famous Pygments syntax highlighter, and want to use it to highlight a chunk of code, say, in the context of a static site generator.
The idea is to first define a template containing the code to highlight: {{- define &amp;#34;the-code-to-highlight&amp;#34; -}} #include &amp;lt;stdio.</description>
    </item>
    
    <item>
      <title>On a pool of Go text/template</title>
      <link>https://tales.mbivert.com/on-a-pool-of-go-templates/</link>
      <pubDate>Mon, 31 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-a-pool-of-go-templates/</guid>
      <description>The goal here is to see how:
to load a first batch of templates from a toolbox/ directory, and how to use them while iterating on a second set of templates. As a syntactical refinement, we&amp;rsquo;ll see how to call the first batch of templates from the second one as functions. Meaning, if you have a template toolbox/tool.tmpl, we&amp;rsquo;ll see how to use it from the second set of templates as: {{ tool arg0 arg1 }}</description>
    </item>
    
    <item>
      <title>On Parseval&#39;s theorem (proof)</title>
      <link>https://tales.mbivert.com/on-parseval-theorem-proof/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-parseval-theorem-proof/</guid>
      <description>PDF: schuller-QM18-parseval.pdf.
Commented proof for Parseval’s theorem, used in F. Schuller - QM18 - Fourier Operator1.
Note that this theorem seems to also be referred to as Plancherel identity/theorem, for example in Teschl.
Definition 1. The Fourier operator is the linear map \(\mathcal{F} : S(\mathbb{R}^d) \rightarrow S(\mathbb{R}^d)\) defined for \(x\in\mathbb{R}^d\) by: \[\boxed{( \mathcal{F}(f))(x) := \frac1{(2\pi)^{d/2}}\int_{\mathbb{R}^d} \exp{(-ixy)}f(y)d^dy }\]
Theorem 1. \(\mathcal{F} : S(\mathbb{R}^d) \rightarrow S(\mathbb{R}^d)\) is invertible and: \[\boxed{ (\mathcal{F}^{-1}(g))(x) = \frac1{(2\pi)^{d/2}}\int_{\mathbb{R}^d} \exp{(ipx)}g(p)d^dp }\]</description>
    </item>
    
    <item>
      <title>On the inverse Fourier transform (proof)</title>
      <link>https://tales.mbivert.com/on-fourier-transform-inverse-proof/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-fourier-transform-inverse-proof/</guid>
      <description>PDF: schuller-QM18-fourier-inverse.pdf.
Commented demonstration of the invertibility of the Fourier transform on Schwartz space. Reworked from:
F. Schuller QM18 - Fourier Operator;
Corresponding lectures notes (Simon Rea &amp;amp; Richie Dadhley)
Definition 1. The Fourier operator is the linear map \(\mathcal{F} : S(\mathbb{R}^d) \rightarrow S(\mathbb{R}^d)\) defined for \(x\in\mathbb{R}^d\) by: \[\boxed{( \mathcal{F}(f))(x) := \frac1{(2\pi)^{d/2}}\int_{\mathbb{R}^d} \exp{(-ixy)}f(y)d^dy }\]
Result 1. A well-known integration result, recalled in the lecture: \[\boxed{\int_{\mathbb{R}}\exp{(-\sigma x^2)}dx = \sqrt{\frac\pi\sigma}}\] Which generalizes to \(\mathbb{R}^d\) to: \[\boxed{\int_{\mathbb{R}^d}\exp{(-\sigma x^2)}d^dx = \left(\frac\pi\sigma\right)^{d/2}}\]</description>
    </item>
    
    <item>
      <title>On R&#39;s language: Introduction</title>
      <link>https://tales.mbivert.com/on-r-language/</link>
      <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-r-language/</guid>
      <description>Introduction This is a basic introduction to R, showcasing features and idiosyncrasies that I&amp;rsquo;ve needed/stumbled upon while automatize some matrix computations. For completeness, I&amp;rsquo;ve included the resulting script at the end.
The Rainbow Valley Conservation Reserve, located about 75km south of Alice Springs in the Northern Territory of Australia, is known for its spectacular red sandstone bluffs. Panaroma shot of eight portrait format pictures, taken in the late afternoon by Christian Mehlführer through wikimedia.</description>
    </item>
    
    <item>
      <title>On exporting complex matrices from R to LaTeX via xtable</title>
      <link>https://tales.mbivert.com/on-exporting-r-complex-matrix-latex/</link>
      <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-exporting-r-complex-matrix-latex/</guid>
      <description>The xtable (pdf) R package generates \(\LaTeX\) code for tables, in particular for matrices. However, exporting a complex (as in \(\mathbb{C}\)) matrix fails (mind the boilerplate, which strips the default, full-blown table display):
library(&amp;#34;xtable&amp;#34;) sigma_y &amp;lt;- matrix(c(0, 1i, -1i, 0), 2, 2) m &amp;lt;- xtable( sigma_y, align=rep(&amp;#34;&amp;#34;,ncol(sigma_y)+1)) digits(m) &amp;lt;- xdigits(m) print(m, floating = FALSE, tabular.environment = &amp;#34;pmatrix&amp;#34;, hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE ) Error in x &amp;lt; 0 : invalid comparison with complex values Calls: print -&amp;gt; print.</description>
    </item>
    
    <item>
      <title>On the best (figure) drawing course</title>
      <link>https://tales.mbivert.com/on-the-best-figure-drawing-course/</link>
      <pubDate>Mon, 10 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-best-figure-drawing-course/</guid>
      <description>Despite the popularity of the question, a honest answer must be disappointing: there&amp;rsquo;s no such thing. Some options will be generally better than others, but you&amp;rsquo;ll generally want to balance multiple sources of knowledge.
That&amp;rsquo;s where having an experienced teacher, or following a well-established curriculum can help.
Young man carying an old man on his back, sanguine on paper, 1514 by Raphael (Raffaello Sanzio) through artsandculture.google.com wikimedia.org – Public domain</description>
    </item>
    
    <item>
      <title>On the (real) spectral theorem</title>
      <link>https://tales.mbivert.com/on-the-real-spectral-theorem/</link>
      <pubDate>Wed, 05 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-real-spectral-theorem/</guid>
      <description>&lt;p&gt;What follows is a partial proof of the (real) spectral theorem,
as a complement of the first exercise, third lesson, of &lt;a href=&#34;https://theoreticalminimum.com/biography&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Leonard Susskind&lt;/a&gt;&amp;rsquo;s
&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Theoretical_Minimum&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;The Theoretical Minimum: Quantum Mechanics&lt;/a&gt; book.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in solutions to other exercises, you may want to
&lt;a href=&#34;https://tales.mbivert.com/on-the-theoretical-minimum-solutions/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;head here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note&lt;/u&gt;&lt;/strong&gt;: This article has been generated from &lt;a href=&#34;https://github.com/mbivert/ttm/blob/master/qm/L03E01.tex&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;.tex&lt;/a&gt; files
by &lt;a href=&#34;https://pandoc.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Pandoc&lt;/a&gt;. Pandoc works reasonably well, but tackles a sophisticated
problem, full of corner cases; I&amp;rsquo;ve tried to fix a few issues, but for instance,
references to labels are broken. If that really bothers you, you can still
read the &lt;a href=&#34;https://github.com/mbivert/ttm/blob/master/qm/L03E01.pdf&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note&lt;/u&gt;&lt;/strong&gt;: In a near future, this should be included in a series of
notes on linear algebra, covering all the sufficient background (matrix
representation, inverses, diagonalization, all in finite dimension).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On using YouTube&#39;s API with Go</title>
      <link>https://tales.mbivert.com/on-youtube-api-golang/</link>
      <pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-youtube-api-golang/</guid>
      <description>YouTube&amp;rsquo;s UI is a bit limited when it comes to exploring the content of rich channels (e.g. MIT OpenCourseWare, which has over 7k videos): in such cases, text tables with playlists / available videos are much easier and lighter to inspect, with a bare text editor or Unix CLI tools.
This is the kind of simple use of the API that I&amp;rsquo;ll present here, but it should get you started for more sophisticated use cases.</description>
    </item>
    
    <item>
      <title>On pencils for Bargue&#39;s drawing course</title>
      <link>https://tales.mbivert.com/on-pencils-for-bargue/</link>
      <pubDate>Wed, 29 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-pencils-for-bargue/</guid>
      <description>Native graphite from Chardonnet in Haute-Savoie, France, given by Mr Gaultier of Chambéry. Gallery of Mineralogy of the Muséum National d&amp;rsquo;Histoire Naturelle in Paris. by Jastrom (Marie-Lan Nguyen) through wikimedia.org – CC-BY-SA-4.0
Following on paper recommendations for Bargue&amp;rsquo;s course, here&amp;rsquo;s a follow-up on pencils &amp;amp; cie. You may also enjoy the following series:
On Bargue&amp;#39;s drawing course: introduction (1/3) On Bargue&amp;#39;s drawing course: a holistic teaching (2/3) On Bargue&amp;#39;s drawing course: going further, drawing &amp;#39;gong-fu&amp;#39; (3/3) Short answer: Bargue plates are often copied religiously rigorously, and they most often present a smooth rendering.</description>
    </item>
    
    <item>
      <title>On Frameworkless JavaScript</title>
      <link>https://tales.mbivert.com/on-frameworkless-js/</link>
      <pubDate>Wed, 15 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-frameworkless-js/</guid>
      <description>Introduction I&amp;rsquo;ve recently been reworking zhongmu&amp;rsquo;s UI, which so far managed not to use any framework. But, some aspects of the code were a bit clumsy, so I decided to see if I couldn&amp;rsquo;t use a variant of a previous framework I wrote to make it nicer. It did bring some improvements, but there were still a few subtle bits.
It turns out, after reading a few React tutorials, that there&amp;rsquo;s an even simpler way to write non-trivial UIs without relying on any framework:</description>
    </item>
    
    <item>
      <title>On tagging files simply</title>
      <link>https://tales.mbivert.com/on-tagging-files-simply/</link>
      <pubDate>Fri, 10 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-tagging-files-simply/</guid>
      <description>2018, Toulouse, France by M. Bivert – CC-BY-SA-4.0
It&amp;rsquo;s common to need to organize large filesets (pictures, papers, etc.). There are specialized programs, but they can get hairy quickly, and simple prototypes are easy to think of, e.g.: have a special directory containing one subdirectory per tag, and use ln(1) to tag files, by storing links under such directories. There are a few drawbacks, for example:
Not resilient to file renaming (or requires at least to duplicate files); Some queries (e.</description>
    </item>
    
    <item>
      <title>On Plan9&#39;s Acme: events management, shortcuts</title>
      <link>https://tales.mbivert.com/on-acme-events/</link>
      <pubDate>Tue, 31 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-acme-events/</guid>
      <description>Introduction One can poll various acme(1) events via its 9P file system, documented in acme(4). For some general ideas about acme(1), see this article; for some extra tools, see this article.
Regarding events, some aspects are unclear from the man pages, hence this little article.
There are two sources of events, that we&amp;rsquo;ll explore in the following two sections. A third section demonstrates with an example how to use events to implement shortcuts.</description>
    </item>
    
    <item>
      <title>On Heraeus&#39;s Winter School missing tutorials/PDFs (Gravity and Light)</title>
      <link>https://tales.mbivert.com/on-heraeus-winter-school-tutorials/</link>
      <pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-heraeus-winter-school-tutorials/</guid>
      <description>Introduction In 2015, a course (International Winter School on Gravity and Light), on the mathematical foundations of general relativity (manifolds, differential geometry, etc.) was held by Frederic P. Schuller (and others) at the Johannes Kepler University, Linz, Austria, 2015.
There are two main playlists on YouTube:
Central lecture course; Tutorials. And, somewhat complementary, some unofficial notes (.pdf) by Richie Dadhley.
Finally, it seems that a considerable amount of time was dedicated to workshops (10h over two weeks, &amp;ldquo;where more advanced problems are solved in teams&amp;rdquo;, by comparison with the tutorials, 12h, &amp;ldquo;to practice the basics&amp;rdquo;), but unfortunately, nothing has been found pertaining to their content1.</description>
    </item>
    
    <item>
      <title>On Plan9&#39;s Acme</title>
      <link>https://tales.mbivert.com/on-plan9-acme/</link>
      <pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-plan9-acme/</guid>
      <description>&lt;p&gt;Tools shape one&amp;rsquo;s perceptions and thinking. Programming languages constitute
a common example: consider for instance how regular iteration encourages a
certain mindset, while recursion coupled with purity encourages different
trains of thoughts.&lt;/p&gt;
&lt;p&gt;What is true with languages remains true, for instance
with text editors. And is maintained outside of the programming realm.&lt;/p&gt;
&lt;p&gt;A side-effect is that, once we&amp;rsquo;re comfortable with a given
way to achieve a certain result, it can be psychologically
demanding to switch to another approach.&lt;/p&gt;
&lt;p&gt;As an example, however great debuggers are, not having a debugger
forces you to read code more carefully, and to think more.
Perhaps then, it&amp;rsquo;s not much of a loss not to have a debugger
in the long run (over decades). But that doesn&amp;rsquo;t mean debuggers
should be absolutely avoided either.&lt;/p&gt;
&lt;p&gt;In particular, &lt;a href=&#34;http://man.cat-v.org/plan_9/1/acme&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;acme(1)&lt;/a&gt; encourages a peculiar mindset,
by comparison with mainstream editors. I&amp;rsquo;ll try in this article to
explore this difference, while highlighting a similar dichotomy in
woodworking.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Lambda calculus interpreter</title>
      <link>https://tales.mbivert.com/on-nix-language-lambda-calculus/</link>
      <pubDate>Sun, 11 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language-lambda-calculus/</guid>
      <description>&lt;p&gt;This is the last article of this series. It&amp;rsquo;ll be a bit different
than the previous ones: most of it will be about a step-by-step
implementation of a &lt;a href=&#34;https://en.wikipedia.org/wiki/Lambda_calculus&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;λ-calculus&lt;/a&gt; interpreter (I&amp;rsquo;ll give
you some starting points, in case you want to do it on your own).&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve already brushed upon the λ-calculus in the
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-closures/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;third article of this series&lt;/a&gt;
on closures: Church encoding of booleans/integers/lists originates in the
λ-calculus, where the only computation mean available precisely are
functions/closures.&lt;/p&gt;
&lt;p&gt;As a final conclusion, I&amp;rsquo;ll give you a few
suggestions of code to read, and ideas to help you push your skills
further, in continuation to what has been developed in those articles.&lt;/p&gt;
&lt;p&gt;The code for this series remains available on &lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Mathematical expressions, Brainf*ck</title>
      <link>https://tales.mbivert.com/on-nix-language-maths-expressions-brainfuck/</link>
      <pubDate>Thu, 08 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language-maths-expressions-brainfuck/</guid>
      <description>&lt;p&gt;A great thing about Nix (the language) is that it&amp;rsquo;s tiny. Tiny
enough that besides some &lt;code&gt;builtins&lt;/code&gt; and a few NixOS/Nixpkgs centered
features (e.g. paths), we&amp;rsquo;ve covered, for most intent and purposes,
all of it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://tales.mbivert.com/on-nix-language-lambda-calculus/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;next article&lt;/a&gt;
will be about writing a λ-calculus interpreter.
In preparation, we&amp;rsquo;ll focus here on implementing three small projects:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A prefix/polish expression evaluator (e.g. something that reads
a string like &lt;code&gt;+ + 3 * 5 + 2 2 19&lt;/code&gt;, and interprets it as &lt;code&gt;3+5*(2+2)+19=42&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;A Brainf*ck evaluator (if you don&amp;rsquo;t know what it is, I guess an
example wouldn&amp;rsquo;t help much);&lt;/li&gt;
&lt;li&gt;A  mathematical expression evaluator (e.g.
something that reads and interprets &lt;code&gt;3+5*(2+2)+19&lt;/code&gt;);&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The code for this series is still available on &lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Pragmatism, laziness</title>
      <link>https://tales.mbivert.com/on-nix-language-pragmatism-laziness/</link>
      <pubDate>Mon, 05 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language-pragmatism-laziness/</guid>
      <description>&lt;p&gt;Lately, we&amp;rsquo;ve been hanging around a rather theoretical corner
of computer science. However interesting and insightful, that
aspect must almost always be balanced. For instance, Church
booleans/integers are, at least on modern ordinary hardware,
impractical compared to fixed-size 32/64 bits integers.&lt;/p&gt;
&lt;p&gt;Often in engineering, &lt;em&gt;pragmatism&lt;/em&gt; is a decisive way to select between
multiple options, an approach which often leads to simple(r/st) choices.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll use some aspects of the design of Nix itself to exemplify this point.
Our roadmap for this article will include some more details on laziness,
as in lazy evaluation (and not as a variant of &amp;ldquo;pragmatism&amp;rdquo;), and genuine Nix
lists/sets. Genuine in the sense, &lt;em&gt;not&lt;/em&gt; some hand-implemented ones out of
closures, but the ones provided by the language.&lt;/p&gt;
&lt;p&gt;Again, the code for this series is available on &lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Closures</title>
      <link>https://tales.mbivert.com/on-nix-language-closures/</link>
      <pubDate>Wed, 16 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language-closures/</guid>
      <description>&lt;p&gt;We saw by the end of the
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-recursive-functions/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;previous article&lt;/a&gt;
a first example of &lt;a href=&#34;https://en.wikipedia.org/wiki/Closure_%28computer_programming%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;&amp;ldquo;closure&amp;rdquo;&lt;/a&gt;, which you can
grossly think of as &amp;ldquo;function&amp;rdquo;. We&amp;rsquo;re going to progressively
explore this notion in-depth here: we&amp;rsquo;ll see in particular how they can
be used to &lt;em&gt;encode&lt;/em&gt; all kinds of data structures: lists, integers,
booleans, objects, graphs, etc.&lt;/p&gt;
&lt;p&gt;Some tiny programming languages like the &lt;strong&gt;λ-calculus&lt;/strong&gt;, of which
we&amp;rsquo;ll implement an interpreter
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-lambda-calculus/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;to conclude this series&lt;/a&gt;,
is essentially reduced to closures: this minimalism is convenient for
theoretical/mathematical analysis, or for programming practice. But
it&amp;rsquo;s naturally ill-suited for real-life programming.&lt;/p&gt;
&lt;p&gt;Besides, we&amp;rsquo;ll also re-implement many ordinary functions on lists, using
an ad hoc, closure-based list implementation, instead of genuine Nix&amp;rsquo;s lists,
genuine lists that we&amp;rsquo;ll explore
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-pragmatism-laziness/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;soon enough&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As always, the code for this series is available on &lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Recursive functions</title>
      <link>https://tales.mbivert.com/on-nix-language-recursive-functions/</link>
      <pubDate>Mon, 07 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language-recursive-functions/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve &lt;a href=&#34;https://tales.mbivert.com/on-nix-language/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;previously&lt;/a&gt; explored
how to run Nix code, and basic Nix features: variables, conditions,
&amp;ldquo;print/debug&amp;rdquo; &amp;ldquo;statement&amp;rdquo;, etc. But, we still haven&amp;rsquo;t saw anything
analogue to loops, providing us with iteration. &lt;em&gt;This&lt;/em&gt;, will be
our subject for today, and will allow us to start writing something
more substantial than a &lt;code&gt;hello world&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I assume little to no experience in functional programming from
the reader; I  however assume familiarity with programming.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/strong&gt; I won&amp;rsquo;t bother with performances in general
in this series: the focus is on correctness (well, hopefully&amp;hellip;),
and on developing an understanding of functional programming. But
&lt;em&gt;why&lt;/em&gt; can&amp;rsquo;t I still care about performances, and why do people often
treat them as second-class citizens?
I think there are two main reasons. In tutorials, focusing on
performances adds noise, thus making the transmission of core concepts
more difficult. Furthermore, in real life, they are to be
&lt;a href=&#34;https://softwareengineering.stackexchange.com/questions/80084/is-premature-optimization-really-the-root-of-all-evil&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;treated&lt;/a&gt; &lt;a href=&#34;https://users.ece.utexas.edu/~adnan/pike.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;cautiously&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;optimizations have a cost: they can make the code more subtle, more
complex, more difficult to write and maintain;&lt;/li&gt;
&lt;li&gt;intuition can be wrong: you may &lt;em&gt;think&lt;/em&gt; some function is slow
and spend considerable time fixing it, but proper instrumentation/measurements
may reveal unexpected bottlenecks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Systematically improving performances locally, without proper instrumentation,
is a great way to degrade the quality of a codebase.&lt;/p&gt;
&lt;p&gt;Parenthesis aside, the code for this series is available on
&lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Plotting Complex Curves Transformations (Gnuplot, PGF/TikZ, PGFPlots)</title>
      <link>https://tales.mbivert.com/on-plotting-complex-curves-transformations/</link>
      <pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-plotting-complex-curves-transformations/</guid>
      <description>Typical early examples in Complex analysis involve plotting simple complex (as in \(\mathbb{C}\)) curves under (complex) transformations. This help gain intuition on otherwise rather opaque transformations; see for instance those two videos from Michael Penn&amp;rsquo;s Youtube channel:
Plotting such curves, regardless of the software (Mathematica, Gnuplot, etc.) is performed in three steps:
parametrize the curves; compute the transformation by applying it to the parametrization; isolate the real and imaginary parts of the last result.</description>
    </item>
    
    <item>
      <title>On Nix&#39;s language: Introduction</title>
      <link>https://tales.mbivert.com/on-nix-language/</link>
      <pubDate>Thu, 03 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-nix-language/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/NixOS&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;NixOS&lt;/a&gt; is, to my surprise, an already 20+ years old
&lt;a href=&#34;https://en.wikipedia.org/wiki/Linux_distribution&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Linux distribution&lt;/a&gt; (as of 2023), based on
the &lt;a href=&#34;https://en.wikipedia.org/wiki/Nix_%28package_manager%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Nix package manager&lt;/a&gt;, itself
based on the &lt;strong&gt;&lt;a href=&#34;https://nixos.wiki/wiki/Overview_of_the_Nix_Language&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Nix expression language&lt;/a&gt;&lt;/strong&gt;,
which will be the focus of this article and this series
(I &lt;i&gt;won&amp;rsquo;t&lt;/i&gt; talk about NixOS, nor about the Nix
package manager, neither about how to use Nix&amp;rsquo;s language to
interact with Nix package manager).&lt;/p&gt;
&lt;p&gt;Nix&amp;rsquo;s language is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Functional_programming&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;functional&lt;/a&gt;: essentially,
&lt;a href=&#34;https://en.wikipedia.org/wiki/Lambda_calculus&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;λ-calculus&lt;/a&gt; based;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Lazy_evaluation&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;lazy&lt;/a&gt;: expressions&amp;rsquo;s evaluation is delayed as much as possible;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Type_system#Dynamic_type_checking_and_runtime_type_information&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;dynamically typed&lt;/a&gt;: typing is performed during evaluation,
not at compilation (i.e. not statically);&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Purely_functional_programming&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;pure&lt;/a&gt;: in the modern, practical sense, we can still do I/O for instance;&lt;/li&gt;
&lt;li&gt;minimal: the language has been designed for a peculiar/narrow purpose;
its feature set is limited, and it isn&amp;rsquo;t the most sensible choice for
general purpose computing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It &amp;ldquo;feels&amp;rdquo; either like a lazy &lt;a href=&#34;https://en.wikipedia.org/wiki/Scheme_%28programming_language%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Scheme&lt;/a&gt;
(&lt;a href=&#34;https://en.wikipedia.org/wiki/Tuple&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;tuples&lt;/a&gt;, dynamic typing), or a stripped-down &lt;a href=&#34;https://en.wikipedia.org/wiki/Haskell&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Haskell&lt;/a&gt;
(laziness, not a &lt;a href=&#34;https://en.wikipedia.org/wiki/S-expression&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;S-expression&lt;/a&gt; based syntax).&lt;/p&gt;
&lt;p&gt;The goal of the current article is to introduce elementary technical elements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installation;&lt;/li&gt;
&lt;li&gt;Running code;&lt;/li&gt;
&lt;li&gt;Major language features (variables, functions, conditions, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ll later use this knowledge to explore recursive functions in the
next &lt;a href=&#34;https://tales.mbivert.com/on-nix-language-recursive-functions/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;two&lt;/a&gt;
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-closures/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;articles&lt;/a&gt;, and show how much
we can achieve with mere recursive functions. We&amp;rsquo;ll then shift our
focus on &lt;a href=&#34;https://tales.mbivert.com/on-nix-language-pragmatism-laziness/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;Nix&amp;rsquo;s lists &amp;amp; sets&lt;/a&gt;,
before concluding with
&lt;a href=&#34;https://tales.mbivert.com/on-nix-language-maths-expressions-brainfuck/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;two project-based articles&lt;/a&gt;,
the &lt;a href=&#34;https://tales.mbivert.com/on-nix-language-lambda-calculus/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;last one&lt;/a&gt; being
about implementing a simple λ-calculus interpreter, which is the main goal of this
series.&lt;/p&gt;
&lt;p&gt;All the code is available on &lt;a href=&#34;https://github.com/mbivert/nix-series-code&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/strong&gt; Thanks &lt;a href=&#34;https://github.com/pdietl&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Pete Dietl&lt;/a&gt; for the various suggestions!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On httpd(8) logs parsing on OpenBSD</title>
      <link>https://tales.mbivert.com/on-openbsd-log-parsing/</link>
      <pubDate>Thu, 27 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-openbsd-log-parsing/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve &amp;ldquo;recently&amp;rdquo; wrote a &lt;a href=&#34;https://github.com/mbivert/log-tools&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;few tools (github)&lt;/a&gt; to
help parsing logs on OpenBSD, mainly &lt;a href=&#34;https://man.openbsd.org/httpd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;httpd(8)&lt;/a&gt; logs;
this can for instance be used to provide basic, JS-free analytics.&lt;/p&gt;
&lt;p&gt;From there, parsing other logs, or doing other kind
of analysis isn&amp;rsquo;t much more complicated either. The code
could be refined and extended in many ways, but so far, it
covers all my needs, so I&amp;rsquo;ve got little incentive to push it
further.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On papers for Bargue&#39;s drawing course</title>
      <link>https://tales.mbivert.com/on-which-paper-for-bargue/</link>
      <pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-which-paper-for-bargue/</guid>
      <description>An accurate answer would depend on the medium you&amp;rsquo;re using (graphite, charcoal, etc.), whether you want to use tinted paper, have control over the tint, on your personal preferences, on what&amp;rsquo;s available to you (e.g. price, physical availability), etc.
That being said, for graphite1, I guess the best option would be 100% cotton, white, hot pressed (smooth) watercolor paper (e.g. by Arches or Fabriano):
stretchable: if thick enough (≥300gsm; some artists prefer to work on stretched paper); tintable: using lightfast watercolors paints (have a look at this page and handprint.</description>
    </item>
    
    <item>
      <title>On watercolor material: Palettes, easel</title>
      <link>https://tales.mbivert.com/on-watercolor-material-palettes-easel/</link>
      <pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-material-palettes-easel/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On watercolor material: Paper</title>
      <link>https://tales.mbivert.com/on-watercolor-material-paper/</link>
      <pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-material-paper/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On watercolor material: Pigments</title>
      <link>https://tales.mbivert.com/on-watercolor-material-pigments/</link>
      <pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-material-pigments/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On watercolor material: Tubes, pans, paint grades</title>
      <link>https://tales.mbivert.com/on-watercolor-material-tubes-pans-paint-grade/</link>
      <pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-material-tubes-pans-paint-grade/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On using Google&#39;s Search Console API with Go</title>
      <link>https://tales.mbivert.com/on-google-search-console-api-golang/</link>
      <pubDate>Wed, 14 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-google-search-console-api-golang/</guid>
      <description>&lt;p&gt;Google&amp;rsquo;s Search Console API provides statistics regarding how
users interact with your websites via Google search (keywords,
impressions, clicks, etc.)&lt;/p&gt;
&lt;p&gt;While Google provides a &lt;a href=&#34;https://search.google.com/search-console/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Web Console&lt;/a&gt;, it
can be convenient to programmatically access the API, for instance
to be forwarded analytics in a daily/weekly/monthly email. The
article:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introduces the necessary boilerplate to use the Search API
(create a project, a specific user, a key for that user, how
to allow that user to access stats for a given site);&lt;/li&gt;
&lt;li&gt;Presents how to use the &lt;a href=&#34;https://pkg.go.dev/google.golang.org/api/searchconsole/v1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;official Go wrapper&lt;/a&gt;
to
&lt;ul&gt;
&lt;li&gt;list domains;&lt;/li&gt;
&lt;li&gt;access statistics for the most recent day for which there is
analytics data;&lt;/li&gt;
&lt;li&gt;and perform a bit of server-side filtering to look for the
Google search queries matching a given page.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/mbivert/google-tools/blob/master/search-console.go&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;&lt;code&gt;search-console&lt;/code&gt;&lt;/a&gt; is a small tool,
wrapping the Go code presented in this article.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On figure drawing: mannequin handling</title>
      <link>https://tales.mbivert.com/on-figure-drawing-mannequin-handling/</link>
      <pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-figure-drawing-mannequin-handling/</guid>
      <description>Maybe you&amp;rsquo;ve been studying simplified anatomy/mannequinization, got yourself a virtual 3D model, bought a old school wooden mannequin, or a fancier one, perhaps convinced by some great, dynamic pictures.
Basic wooden mannequin by Hannah Alkadi through wikimedia.org – Public domain
Ink on toned paper, likely in preparation of a painting, mid 1500s by Luca Cambiaso (1527 – 1585) through drawingseeing.blogspot.com mountshang.blogspot.com – Public domain
Lay figure made by Albrecht Dürer (1471-1528) c.</description>
    </item>
    
    <item>
      <title>On solutions to the Theoretical minimum (classical/quantum mechanics)</title>
      <link>https://tales.mbivert.com/on-the-theoretical-minimum-solutions/</link>
      <pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-theoretical-minimum-solutions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Theoretical_Minimum&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;The Theoretical Minimum&lt;/a&gt; is a book series by &lt;a href=&#34;https://theoreticalminimum.com/biography&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Leonard Susskind&lt;/a&gt;,
and others, containing three books, with a fourth one to be published soon:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Classical Mechanics&lt;/em&gt;, with &lt;a href=&#34;http://www.madscitech.org/members/geh.htm&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;George Hrabovsky&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Quantum Mechanics&lt;/em&gt;, with Art Friedman;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Special Relativity and Classical Field Theory&lt;/em&gt;, with Art Friedman again;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;General Relativity&lt;/em&gt;, with &lt;a href=&#34;https://www.lapasserelle.com/webmaster.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;André Cabannes&lt;/a&gt;, who contributed
to the French translation of the three previous works.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The books are relatively short (say, compared to &lt;a href=&#34;https://www.feynmanlectures.caltech.edu/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Feynman&amp;rsquo;s lectures&lt;/a&gt;),
self-contained (well, depending on how curious you are; they do go as far as to
cover a great deal of mathematical background, but they just can&amp;rsquo;t be exhaustive
either), and, at least for the &lt;em&gt;Classical Mechanics&lt;/em&gt; one, aimed at presenting
general theoretical formulations: the &lt;a href=&#34;https://en.wikipedia.org/wiki/Lagrangian_mechanics&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Lagrangian&lt;/a&gt;
and &lt;a href=&#34;https://en.wikipedia.org/wiki/Hamiltonian_mechanics&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Hamiltonian&lt;/a&gt; formalisms, based
on the &lt;a href=&#34;https://en.wikipedia.org/wiki/Stationary-action_principle&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;stationary-action principle&lt;/a&gt; and
&lt;a href=&#34;https://en.wikipedia.org/wiki/Conservation_of_energy&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;the principle of conservation of energy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;They all come with a few exercises, often rather simple, focused
on making sure you understand the key concepts.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On the harmonic oscillator</title>
      <link>https://tales.mbivert.com/on-the-harmonic-oscillator/</link>
      <pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-harmonic-oscillator/</guid>
      <description>&lt;p&gt;What follows is an introduction to the &lt;a href=&#34;https://en.wikipedia.org/wiki/Harmonic_oscillator&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;harmonic oscillator&lt;/a&gt;,
as a complement of the fourth exercise, third lesson, of &lt;a href=&#34;https://theoreticalminimum.com/biography&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Leonard Susskind&lt;/a&gt;&amp;rsquo;s
&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Theoretical_Minimum&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;The Theoretical Minimum: Classical Mechanics&lt;/a&gt; book.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in solutions to other exercises, you may want to
&lt;a href=&#34;https://tales.mbivert.com/on-the-theoretical-minimum-solutions/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;head here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note&lt;/u&gt;&lt;/strong&gt;: This article has been generated from &lt;a href=&#34;https://github.com/mbivert/ttm/blob/master/cm/L03E04.tex&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;.tex&lt;/a&gt; files
by &lt;a href=&#34;https://pandoc.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Pandoc&lt;/a&gt;. Pandoc works reasonably well, but tackles a sophisticated
problem, full of corner cases; I&amp;rsquo;ve tried to fix a few issues, but for instance,
references to labels are broken. If that really bothers you, you can still
read the &lt;a href=&#34;https://github.com/mbivert/ttm/blob/master/cm/L03E04.pdf&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;.pdf&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On using OVH&#39;s API</title>
      <link>https://tales.mbivert.com/on-using-ovh-api/</link>
      <pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-using-ovh-api/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://ovh.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;OVH&lt;/a&gt; provides a &lt;a href=&#34;https://api.ovh.com/console/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;HTTP(s) API&lt;/a&gt; to
automatize various tasks. There are multiple official wrappers
(&lt;a href=&#34;https://github.com/ovh/python-ovh&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Python&lt;/a&gt;, &lt;a href=&#34;https://github.com/ovh/php-ovh&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;PHP&lt;/a&gt;, &lt;a href=&#34;https://github.com/ovh/java-ovh&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Java&lt;/a&gt;,
etc.); I&amp;rsquo;ll use here the &lt;a href=&#34;https://go.dev/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Go&lt;/a&gt; &lt;a href=&#34;https://github.com/ovh/go-ovh&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;one&lt;/a&gt;
(static typing, cross-compilation with a single static binary)&lt;/p&gt;
&lt;p&gt;All the code presented below can be found in this &lt;a href=&#34;https://github.com/mbivert/ovh-tools/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github repository&lt;/a&gt;,
containing a small CLI tool, &lt;a href=&#34;https://github.com/mbivert/ovh-tools/blob/master/ovh-do.go&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;&lt;code&gt;ovh-do&lt;/code&gt;&lt;/a&gt;,
that can be used to access the API from the CLI and
&lt;a href=&#34;https://man.openbsd.org/sh.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sh(1)&lt;/a&gt; scripts.&lt;/p&gt;
&lt;p&gt;Our end goal here is to automatically re-install the latest
&lt;a href=&#34;https://www.debian.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Debian&lt;/a&gt; image on an existing VPS, with a pre-installed
&lt;a href=&#34;https://man.openbsd.org/ssh.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;ssh(1)&lt;/a&gt; key.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On art pricing</title>
      <link>https://tales.mbivert.com/on-art-pricing/</link>
      <pubDate>Sun, 14 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-art-pricing/</guid>
      <description>&lt;p&gt;Nowadays, art pricing can be confusing, as the price of an artwork
isn&amp;rsquo;t necessarily correlated to a certain skillset, effort or
subject.&lt;/p&gt;
&lt;p&gt;We put into perspective traditional and modern perceptions of art,
and propose a few pricing criteria, that can be weight so as to
capture both ancient and present mindsets.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On evaluating art</title>
      <link>https://tales.mbivert.com/on-evaluating-art/</link>
      <pubDate>Sun, 14 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-evaluating-art/</guid>
      <description>&lt;p&gt;Relativity of art appreciation is nowadays common knowledge.&lt;/p&gt;
&lt;p&gt;The same work will move different people in different manners,
at a different intensity. Even the same work can move the same
individual in various ways, depending on various factors
(mood, education, observation time, etc.)&lt;/p&gt;
&lt;p&gt;Yet, despite this intrinsic subjectiveness, there are objective
ways to appreciate a work of art.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On master studies</title>
      <link>https://tales.mbivert.com/on-master-studies/</link>
      <pubDate>Sun, 14 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-master-studies/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Of the order of learning to draw&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First draw from drawings by good masters done from works of
art and from nature, and not from memory; &lt;br /&gt;
then from plastic work, with the guidance of the drawing done
from it; &lt;br /&gt;
and then from good natural models and this you must put into practice.&lt;/p&gt;
&lt;p&gt;&amp;ndash; Leonardo Da Vinci, &lt;a href=&#34;https://en.wikisource.org/wiki/The_Notebooks_of_Leonardo_Da_Vinci/IX&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Notebooks, Vol. 1, IX. The Practice of Painting&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Master study is &lt;em&gt;the&lt;/em&gt; archetypal drawing exercise, East and West,
where the student is expected to learn from a master by studying, often
copying, his work.&lt;/p&gt;
&lt;p&gt;This is similar to how classical musicians start their journey by learning
the works of great composers (&lt;a href=&#34;https://en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Mozart&lt;/a&gt;,
&lt;a href=&#34;https://en.wikipedia.org/wiki/Johann_Christian_Bach&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Bach&lt;/a&gt;, etc.)&lt;/p&gt;
&lt;p&gt;This article merely introduces the concept; for a more in-depth
exploration, the series on &lt;a href=&#34;https://en.wikipedia.org/wiki/Charles_Bargue&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Bargue&lt;/a&gt;&amp;rsquo;s drawing
course provides a nice example:&lt;/p&gt;


&lt;ul id=&#34;serie&#34;&gt;
	
	
	
		&lt;li class=&#34;list&#34;&gt;
			&lt;a href=&#34;https://tales.mbivert.com/on-bargue-drawing-course/&#34;&gt;On Bargue&amp;#39;s drawing course: introduction (1/3)&lt;/a&gt;
		&lt;/li&gt;
	
		&lt;li class=&#34;list&#34;&gt;
			&lt;a href=&#34;https://tales.mbivert.com/on-bargue-drawing-course-holistic-teaching/&#34;&gt;On Bargue&amp;#39;s drawing course: a holistic teaching (2/3)&lt;/a&gt;
		&lt;/li&gt;
	
		&lt;li class=&#34;list&#34;&gt;
			&lt;a href=&#34;https://tales.mbivert.com/on-bargue-drawing-course-going-further/&#34;&gt;On Bargue&amp;#39;s drawing course: going further, drawing &amp;#39;gong-fu&amp;#39; (3/3)&lt;/a&gt;
		&lt;/li&gt;
	
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>On simple software: examples</title>
      <link>https://tales.mbivert.com/on-simple-software-examples/</link>
      <pubDate>Mon, 08 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-simple-software-examples/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;When in doubt, use brute force.&lt;br/&gt;
One of my most productive days was throwing away 1000 lines of code.&lt;/p&gt;
&lt;p&gt;&amp;ndash; Both quotes by &lt;a href=&#34;https://en.wikipedia.org/wiki/Ken_Thompson&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Ken Thompson&lt;/a&gt; (&lt;a href=&#34;https://en.wikipedia.org/wiki/UTF-8&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;UTF-8&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Plan9&lt;/a&gt;,
&lt;a href=&#34;https://man.openbsd.org/grep.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;grep(1)&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Go_%28programming_language%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Golang&lt;/a&gt;, etc.)&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>On OpenBSD&#39;s sendmail(8) and gmail</title>
      <link>https://tales.mbivert.com/on-openbsd-sendmail-and-gmail/</link>
      <pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-openbsd-sendmail-and-gmail/</guid>
      <description>&lt;p&gt;The following explores the configuration of an OpenBSD base install to send
emails from the CLI (&lt;a href=&#34;https://man.openbsd.org/mail.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;mail(1)&lt;/a&gt;, &lt;a href=&#34;https://man.openbsd.org/sendmail.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sendmail(8)&lt;/a&gt;, etc.),
relaying them to an existing &lt;a href=&#34;https://gmail.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Gmail&lt;/a&gt; account. We&amp;rsquo;re not touching upon
&lt;em&gt;reading&lt;/em&gt; emails here; we&amp;rsquo;ll present some tools to help with attachments.&lt;/p&gt;
&lt;p&gt;Essential bits of &lt;a href=&#34;https://man.openbsd.org/smtpd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;smtpd(8)&lt;/a&gt; configuration to achieve email relaying
are actually the first example setup from &lt;a href=&#34;https://man.openbsd.org/smtpd.conf.5&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;smtpd.conf(5)&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EXAMPLES
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     The default smtpd.conf file which ships with OpenBSD listens on the
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     loopback network interface &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;lo0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; and allows &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; mail from users and
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     daemons on the local machine, as well as permitting email to remote
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     servers.  Some more complex configurations are given below.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     This first example is similar to the default configuration, but all
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     outgoing mail is forwarded to a remote SMTP server.  A secrets file is
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     needed to specify a username and password:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#75715e&#34;&gt;# touch /etc/mail/secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#75715e&#34;&gt;# chmod 640 /etc/mail/secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#75715e&#34;&gt;# chown root:_smtpd /etc/mail/secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#75715e&#34;&gt;# echo &amp;#34;bob username:password&amp;#34; &amp;gt; /etc/mail/secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     smtpd.conf would look like this:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           table aliases file:/etc/mail/aliases
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           table secrets file:/etc/mail/secrets
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           listen on lo0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           action &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;local_mail&amp;#34;&lt;/span&gt; mbox alias &amp;lt;aliases&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           action &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;outbound&amp;#34;&lt;/span&gt; relay host smtp+tls://bob@smtp.example.com &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;                   auth &amp;lt;secrets&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           match from local &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; local action &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;local_mail&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           match from local &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; any action &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;outbound&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>On simple software: unimpressiveness</title>
      <link>https://tales.mbivert.com/on-simple-software-unimpressiveness/</link>
      <pubDate>Sat, 23 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-simple-software-unimpressiveness/</guid>
      <description>&lt;p&gt;This is perhaps one key characteristic of simple software. It&amp;rsquo;s
humble, doesn&amp;rsquo;t look like much, its potential is not always easy to understand,
nor is the underlying trade-offs balance.&lt;/p&gt;
&lt;p&gt;The issue isn&amp;rsquo;t specific to software, but in fact arises
in unrelated areas: simplicity tend to be overlooked,
and to require a certain degree of mastery to be appreciated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Simplicity is the ultimate sophistication.&lt;/p&gt;
&lt;p&gt;&amp;ndash; Leonardo Da Vinci&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>On a function-based test framework/pattern</title>
      <link>https://tales.mbivert.com/on-a-function-based-test-framework/</link>
      <pubDate>Sat, 09 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-a-function-based-test-framework/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Simplicity is the ultimate sophistication&lt;/p&gt;
&lt;p&gt;&amp;ndash; Leonardo Da Vinci&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s plenty of tests frameworks out there, but I am often left
disgruntled by their sheer amount of complexity, and by lack of uniformity
of the tests/inability to programmatically manipulate them.&lt;/p&gt;
&lt;p&gt;This article presents what is arguably the &lt;em&gt;simplest&lt;/em&gt; test framework for
function-based code: each test is basically about ensuring that
applying a function on some input yields the expected output.&lt;/p&gt;
&lt;p&gt;All tests have the exact same format, and can be stored in an array,
and thus altered programmatically/systematically. Sophisticated cases
(e.g. objects, side effects) can be managed by involving a few ad-hoc
lambdas to alter the input/output so as to fit in this format.&lt;/p&gt;
&lt;p&gt;In the end, it&amp;rsquo;s costless to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;implement;&lt;/li&gt;
&lt;li&gt;audit;&lt;/li&gt;
&lt;li&gt;add to an existing codebase, even alongside an already existing
test framework;&lt;/li&gt;
&lt;li&gt;migrate away from in the future (perhaps not costless,
but definitely easier than your usual tests);&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, most importantly, makes it effortless to write
batches of straightforward tests in almost any language. Its main requirement
is for the implementation language to easily allow deep-comparison; in the
worst cases, this can often be achieved by comparing JSON dumps, or more
generally, text dumps.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Let&#39;s Encrypt on OpenBSD</title>
      <link>https://tales.mbivert.com/on-letsencrypt-on-openbsd/</link>
      <pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-letsencrypt-on-openbsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://letsencrypt.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Let&amp;rsquo;s encrypt&lt;/a&gt; is a widely used, free &lt;a href=&#34;https://en.wikipedia.org/wiki/Transport_Layer_Security&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;TLS&lt;/a&gt;
certificate provider. &lt;a href=&#34;https://www.openbsd.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;OpenBSD&lt;/a&gt;&amp;rsquo;s base system comes with
everything needed to setup a basic secure web server, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://man.openbsd.org/httpd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;httpd(8)&lt;/a&gt;: a &lt;a href=&#34;https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;HTTP&lt;/a&gt; server;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://man.openbsd.org/relayd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;relayd(8)&lt;/a&gt;: a load-balancer, gateway, etc.;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://man.openbsd.org/acme-client.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;acme-client(1)&lt;/a&gt;: an &lt;abbr title=&#34;Automatic Certificate Management
Environment&#34;&gt;ACME&lt;/abbr&gt; client, to manage &lt;a href=&#34;https://en.wikipedia.org/wiki/Transport_Layer_Security&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;TLS&lt;/a&gt; certificates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article will start by building a few simple sample setups. The goal
being to make sure that the configuration is fully understood, and not
something that happens to work &amp;ldquo;by accident&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Then, we&amp;rsquo;ll quickly present how to fully automate the certificates
renewal/acquisition with &lt;a href=&#34;https://github.com/mbivert/sugar/tree/master/sugar.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sugar(1)&lt;/a&gt;, a small (~150LOC shell)
remote server administration tool. Code for the final automated setup is
available &lt;a href=&#34;https://github.com/mbivert/sugard-openbsd/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/strong&gt; This article is most suitable for people with limited
experience with OpenBSD. For a more succinct approach, see
&lt;a href=&#34;https://romanzolotarev.com/m/ow.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;this blog post&lt;/a&gt; by &lt;a href=&#34;https://romanzolotarev.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Roman Zolotarev&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On figure drawing: gesture</title>
      <link>https://tales.mbivert.com/on-figure-drawing-gesture/</link>
      <pubDate>Sun, 29 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-figure-drawing-gesture/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://tales.mbivert.com/on-figure-drawing/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;previous article&lt;/a&gt;,
we&amp;rsquo;ve already skimmed over &lt;em&gt;&amp;ldquo;gesture&amp;rdquo;&lt;/em&gt; and its confusing, loose
definitions, such as &amp;ldquo;the flow of the form&amp;rdquo;. Some authors have even
more peculiar use of the term, and will happily call a bunch of
hasty scribbles &amp;ldquo;gesture&amp;rdquo;, while others will talk about
&amp;ldquo;gesture&amp;rdquo; within a landscape.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll dissolve the confusion progressively, by actually
studying &lt;em&gt;how&lt;/em&gt; can gesture, as a tool, be of use for a draftsman.&lt;/p&gt;
&lt;p&gt;That being said, to help make things clear, from a practical
point of view, one can think of gesture as
&lt;a href=&#34;https://tales.mbivert.com/on-composition/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;composition lines&lt;/a&gt;, generally
applied to the human figure.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On figure drawing</title>
      <link>https://tales.mbivert.com/on-figure-drawing/</link>
      <pubDate>Wed, 11 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-figure-drawing/</guid>
      <description>&lt;p&gt;Historically, human figure depiction has always been a fundamental
aspect of Western fine-art. The gracefulness of the poses, the subtle
variations of volumes, induced by a complex underlying anatomy,
often geometrically simplified, the diversity of &lt;a href=&#34;https://en.wikipedia.org/wiki/Complexion&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;complexions&lt;/a&gt;,
our high-sensibility to its visual correctness, its semantical
role in artworks, all contribute to making it a key part of a
painter&amp;rsquo;s education.&lt;/p&gt;
&lt;p&gt;As for &lt;a href=&#34;https://tales.mbivert.com/on-watercolor-painting-tutorials/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;watercolors&lt;/a&gt;
or &lt;a href=&#34;https://tales.mbivert.com/on-bargue-drawing-course/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;drawing courses&lt;/a&gt;, a
contemporary issue isn&amp;rsquo;t the scarcity of instruction, as it once was,
but rather its abundance, potentially confusing for
(self-taught) students.&lt;/p&gt;
&lt;p&gt;As such, the goal of this series, rather than to contribute to the noise,
is to  provide a map, to help navigate the existing material.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On sugar, a sweeter Salt: Annexes</title>
      <link>https://tales.mbivert.com/on-sugar-annexes/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-sugar-annexes/</guid>
      <description>&lt;p&gt;The complete code is available on &lt;a href=&#34;https://github.com/mbivert/sugar/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;github&lt;/a&gt;; the OpenBSD setup
scripts, hooks, templates &amp;amp; all are available in a
&lt;a href=&#34;https://github.com/mbivert/sugard-openbsd/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;distinct repository&lt;/a&gt;. We include below a few excerpts
to give an idea on how some features actually are implemented.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On sugar, a sweeter Salt: documentation</title>
      <link>https://tales.mbivert.com/on-sugar-docs/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-sugar-docs/</guid>
      <description>&lt;p&gt;Before diving into example usage, reader may find below an
excerpt from the documentation and from the code, to help
fix ideas.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On sugar, a sweeter Salt: multiple systems</title>
      <link>https://tales.mbivert.com/on-sugar-multiple-systems/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-sugar-multiple-systems/</guid>
      <description>&lt;p&gt;We add a bit of complexity to the previous setup, by
sharing code &amp;amp; data between multiple OpenBSD boxes, and exploring &lt;em&gt;one&lt;/em&gt; way
of writing &lt;a href=&#34;https://man.openbsd.org/sh.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sh(1)&lt;/a&gt; OS-agnostic code for &lt;a href=&#34;https://github.com/mbivert/sugar/tree/master/sugar.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sugar(1)&lt;/a&gt;,
using a well-known &amp;ldquo;ducktyping&amp;rdquo; method.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On sugar, a sweeter Salt: one OpenBSD box</title>
      <link>https://tales.mbivert.com/on-sugar-one-openbsd/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-sugar-one-openbsd/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Update&lt;/u&gt;&lt;/strong&gt;: While this article focuses on bringing up an OpenBSD
box with a configured &lt;a href=&#34;https://man.openbsd.org/pf.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;pf(8)&lt;/a&gt; and &lt;a href=&#34;https://man.openbsd.org/sshd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sshd(8)&lt;/a&gt;, the
&lt;a href=&#34;https://github.com/mbivert/sugard-openbsd/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;underlying code&lt;/a&gt; has been updated to support
&lt;a href=&#34;https://tales.mbivert.com/on-letsencrypt-on-openbsd/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;SSL/TLS via Let&amp;rsquo;s Encrypt&lt;/a&gt;,
and thus also manage &lt;a href=&#34;https://man.openbsd.org/httpd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;httpd(8)&lt;/a&gt; and &lt;a href=&#34;https://man.openbsd.org/relayd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;relayd(8)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is the main article of the series, explaining how to automatize a typical
OpenBSD box setup via &lt;a href=&#34;https://github.com/mbivert/sugar/tree/master/sugar.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sugar(1)&lt;/a&gt;, focusing on basic services
(&lt;a href=&#34;https://man.openbsd.org/httpd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;httpd(8)&lt;/a&gt;, &lt;a href=&#34;https://man.openbsd.org/pf.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;pf(8)&lt;/a&gt; and &lt;a href=&#34;https://man.openbsd.org/sshd.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sshd(8)&lt;/a&gt;). By the end
of this article, a complete, idempotent setup of the box can be performed
by a single command (think, salt&amp;rsquo;s &lt;a href=&#34;https://stackoverflow.com/questions/33779564/what-are-states-when-using-saltstack&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;highstate&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;local&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;% sugar -s $name setup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-pre-setup-pf                       : Preparing pf.conf &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; sync...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-pre-setup-pf                       : Ensure we have a backup ssh link...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-pre-setup-sshd                     : Preparing sshd_config &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; sync...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-pre-setup-sshd                     : Ensure we have a backup ssh link...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-pf                                : Asserting pf is enabled...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-pf                                : Installing pf.conf...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-pf                                : Checking pf.conf syntax...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-pf                                : Loading pf with new pf.conf...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-sshd                              : Asserting sshd is enabled...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-sshd                              : Installing /etc/ssh/sshd_config...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-sshd                              : Checking sshd_config...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setup-sshd                              : Restarting sshd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-post-setup-pf                      : Ensuring port &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; is closed from outside...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-post-setup-pf                      : Ensuring ssh port is opened from outside...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hook-post-setup-pf                      : Close backup ssh link...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>On Bargue&#39;s drawing course: a holistic teaching</title>
      <link>https://tales.mbivert.com/on-bargue-drawing-course-holistic-teaching/</link>
      <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-bargue-drawing-course-holistic-teaching/</guid>
      <description>&lt;p&gt;In the West, over the course of a few centuries, people have
progressively rationalized, studied and decomposed the act of
drawing as a collection of primitive skills. Learning
to draw is then a matter of mastering such sub-skills individually,
and understand how they interact with each other.&lt;/p&gt;
&lt;p&gt;For instance, &lt;em&gt;reproducing what you see&lt;/em&gt; could be one skill, &lt;em&gt;composing&lt;/em&gt;
an other, and by combining the two, you could alter your visual perception
to answer specific æsthetical criteria, which is a key aspect of realism,
and a reason why realism differs from photography: the greatest
paintings are better than life.&lt;/p&gt;

&lt;figure&gt;
	&lt;a href=&#34;https://tales.mbivert.com/bierstadt-among-the-sierra-nevada.jpg&#34;&gt;
		&lt;img class=&#34;framed&#34; loading=&#34;lazy&#34; alt=&#34;Among the Sierra Nevada, California, oil on canvas, 1868&#34; src=&#34;https://tales.mbivert.com/thumbs/bierstadt-among-the-sierra-nevada.jpg&#34; /&gt;
	&lt;/a&gt;&lt;meta property=&#34;license&#34; content=&#34;https://creativecommons.org/publicdomain/zero/1.0/&#34; /&gt;&lt;meta property=&#34;acquireLicensePage&#34; content=&#34;https://commons.wikimedia.org/wiki/File:Albert_Bierstadt_-_Among_the_Sierra_Nevada,_California_-_Google_Art_Project.jpg&#34; /&gt;&lt;figcaption&gt;
			&lt;p&gt;Among the Sierra Nevada, California, oil on canvas, 1868
				by
				&lt;a href=&#34;https://en.wikipedia.org/wiki/Albert_Bierstadt&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Albert Bierstadt&lt;/a&gt;&lt;nil&gt;
			
			
				through
				
					&lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Albert_Bierstadt_-_Among_the_Sierra_Nevada,_California_-_Google_Art_Project.jpg&#34; title=&#34;→ wikimedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;wikimedia.org&lt;/a&gt;
				– &lt;a href=&#34;https://creativecommons.org/publicdomain/zero/1.0/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Public domain&lt;/a&gt;&lt;/p&gt;
		&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;Regarding Bargue&amp;rsquo;s course, many of those sub-skills are silently taught,
entangled with each other. It&amp;rsquo;s interesting to note that, some of the skills
may become more or less developed, more or less consciously, depending on
the student&amp;rsquo;s curiosity and critical thinking. A good teacher should be
able to perceive students&amp;rsquo; issues on specific sub-skills, and to help them
to train more efficiently.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Bargue&#39;s drawing course: going further, drawing &#39;gong-fu&#39;</title>
      <link>https://tales.mbivert.com/on-bargue-drawing-course-going-further/</link>
      <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-bargue-drawing-course-going-further/</guid>
      <description>&lt;p&gt;For students willing to go the extra-mile, the following exercises
can be used to foster one&amp;rsquo;s handling of material, and progressively
develop the ability to draw from imagination. Bargue&amp;rsquo;s plates,
because of their simplicity and diversity, make very good models
for such technical drills.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Bargue&#39;s drawing course: introduction</title>
      <link>https://tales.mbivert.com/on-bargue-drawing-course/</link>
      <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-bargue-drawing-course/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Charles_Bargue&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Charles Bargue (c. 1826 - 1883)&lt;/a&gt;&amp;rsquo;s drawing course is
often used and recommended as a first stepping stone in modern realistic
art education.&lt;/p&gt;
&lt;p&gt;The course itself, created under the supervision of
&lt;a href=&#34;https://en.wikipedia.org/wiki/Jean-L%C3%A9on_G%C3%A9r%C3%B4me&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Jean-Léon Gérôme (1824 - 1904)&lt;/a&gt;, consists of a series of
wordless plates (&lt;a href=&#34;https://en.wikipedia.org/wiki/Lithography&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;lithographies&lt;/a&gt;), divided in 3
sections, which have recently been compiled into a
&lt;a href=&#34;https://archive.org/details/C.BargueDrawingCourse/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;book (pdf)&lt;/a&gt; by
&lt;a href=&#34;https://en.wikipedia.org/wiki/Gerald_M._Ackerman&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Gerald M. Ackerman (1928 - 2016)&lt;/a&gt;, thereby augmenting
the plates with some notes, recommendations and models&amp;rsquo; pictures.&lt;/p&gt;
&lt;p&gt;The upcoming articles are technical, written for self-taught students
confused about Bargue plates, or willing to study them most efficiently.
This first article introduces the course, and the most common way
of studying the course.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On &#34;same-size&#34;: a better sight-size for copying from the flat</title>
      <link>https://tales.mbivert.com/on-same-size/</link>
      <pubDate>Sat, 05 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-same-size/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.sightsize.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Sight-size&lt;/a&gt; is a drawing method currently taught at
some modern &lt;em&gt;ateliers&lt;/em&gt;, where students are expected to reproduce
what they perceive with great exactitude.&lt;/p&gt;
&lt;p&gt;The method as a few advantages, such as easing comparisons between
models and copies, useful for people with underdeveloped vision,
but it shows some limitations early on, especially when working from
living subjects. On the other hand, comparative measurements and
constructed approaches are often much more flexible, but perhaps
less suitable for replicating things with perfect accuracy.&lt;/p&gt;
&lt;p&gt;As far as copying from the flat is concerned, that is, copying
existing drawings, which &lt;a href=&#34;https://tales.mbivert.com/on-bargue-drawing-course/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;is&lt;/a&gt;
and has always been a core element in students education, we suggest to
use what we could call a &lt;em&gt;same-size&lt;/em&gt; approach, which is basically about
using non-sight-size technique with a sight-size-like setting, and which
in essence, is very similar to what was used traditionally since the
&lt;a href=&#34;https://en.wikipedia.org/wiki/Renaissance&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Renaissance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This article aims at being useful to self-taught students,
especially those confused about whether to use sight-size or
not.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On the academic block-in as an optimized grid system</title>
      <link>https://tales.mbivert.com/on-academic-block-in-as-optimized-grid-system/</link>
      <pubDate>Sat, 26 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-academic-block-in-as-optimized-grid-system/</guid>
      <description>&lt;p&gt;We argue that what we call the &amp;ldquo;academic block-in&amp;rdquo;, which mainly consists
in indicating the main volumes of a subject on a sheet of paper, through a
set of lines, often mostly straight nowadays, is actually a refined grid
system, that may sacrifice a bit in accuracy to greatly improve fluidity
and speed, thus making the drawing process more enjoyable.&lt;/p&gt;
&lt;p&gt;This point of view may help people overusing grid systems; this article
assumes the reader has at least some experience with drawing.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On sugar, a sweeter Salt/Chef/Ansible/Puppet</title>
      <link>https://tales.mbivert.com/on-sugar/</link>
      <pubDate>Sat, 19 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-sugar/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/mbivert/sugar/tree/master/sugar.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sugar(1)&lt;/a&gt; is a simple remote servers management tool, written
in POSIX &lt;a href=&#34;https://man.openbsd.org/sh.1&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;sh(1)&lt;/a&gt;, slightly more complex/complete than &lt;a href=&#34;https://dataswamp.org/~solene/page-drist-official-website.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;drist&lt;/a&gt;
or &lt;a href=&#34;https://github.com/lloeki/apply&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;apply&lt;/a&gt;, still much simpler than &lt;a href=&#34;https://sources.debian.org/src/slack/1:0.15.2-9/src/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;slack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And, as it aims to solve a different problem space, orders of magnitude simpler
than &lt;a href=&#34;https://en.wikipedia.org/wiki/Ansible_%28software%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Ansible&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Salt_%28software%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Salt&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Chef_%28software%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Chef&lt;/a&gt;,
&lt;a href=&#34;https://en.wikipedia.org/wiki/Puppet_%28software%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Puppet&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;etc.&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its main purpose is to provide a thin layer of abstraction, just thick
enough to automate typical UNIX servers manual administration.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On OpenBSD automatic installation an OVH&#39;s VPS</title>
      <link>https://tales.mbivert.com/on-openbsd-ovh-vps-automatic-installation/</link>
      <pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-openbsd-ovh-vps-automatic-installation/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Update:&lt;/u&gt;&lt;/strong&gt; I&amp;rsquo;ve just &lt;a href=&#34;https://community.ovh.com/en/t/installing-operating-system-from-custom-image-on-ovh-vps-centos-8-tutorial/3561&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;learnt&lt;/a&gt; that OVH provides a rescue mode
for its VPSs, from which we can boot a &lt;code&gt;qemu(1)&lt;/code&gt; instance, configured
to use the VPS&amp;rsquo;s disk as a drive. From there, we should be able to leverage
&lt;code&gt;qemu(1)&lt;/code&gt; abilities (for instance, its tftp server) to avoid tweaking the
&lt;code&gt;bsd.rd&lt;/code&gt; through an existing OpenBSD instance, which definitely
is &lt;em&gt;the&lt;/em&gt; sore point of the procedure below. Unfortunately, it seems
rebooting the VPS in rescue mode can&amp;rsquo;t be performed from the API (yet?).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ovh.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;OVH&lt;/a&gt; does not provide a default &lt;a href=&#34;https://www.openbsd.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;OpenBSD&lt;/a&gt; image for
its VPSs, nor, AFAIK, does it provide the ability to use one own
image (e.g. &lt;a href=&#34;https://en.wikipedia.org/wiki/Qcow&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;qcow2&lt;/a&gt;) for VPSs, while the feature is available for
&lt;a href=&#34;https://docs.ovh.com/sg/en/public-cloud/uploading-your-own-image/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;other services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, OVH does provide an &lt;a href=&#34;https://api.ovh.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;API&lt;/a&gt; allowing to automatize
default images (re)installation, including setting up SSH&amp;rsquo;s authorized
keys. Besides, OpenBSD &lt;a href=&#34;https://kaip.iki.fi/2021/01/02/openbsd.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;can&lt;/a&gt; &lt;a href=&#34;https://raby.sh/installing-openbsd-on-ovhs-vps-2016-kvm-machines.html&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;be&lt;/a&gt;
manually installed on such VPSs; &lt;a href=&#34;https://man.openbsd.org/autoinstall.8&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;autoinstall(8)&lt;/a&gt; provides
a way to automate the installation process.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On watercolor painting tutorials</title>
      <link>https://tales.mbivert.com/on-watercolor-painting-tutorials/</link>
      <pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-painting-tutorials/</guid>
      <description>&lt;p&gt;In order to complete the
&lt;a href=&#34;https://tales.mbivert.com/on-watercolor-material/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;article on watercolor material&lt;/a&gt;,
we provide here links to some watercolor painting YouTube video tutorials,
by established artists/instructors.&lt;/p&gt;
&lt;p&gt;There is an abundance of literature and video courses covering this
topic, to the point that having a few cherry-picked courses might
be helpful for beginners.&lt;/p&gt;
&lt;p&gt;Were you to want to dig deeper, most of the artists quoted here provide
more complete materials, books of video tutorials, usually on their
website.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On drawing and computer science</title>
      <link>https://tales.mbivert.com/on-drawing-and-computer-science/</link>
      <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-drawing-and-computer-science/</guid>
      <description>&lt;p&gt;From the outside, drawing/painting and computer science may look irreconcilably
different. Yet, many aspects of both fields can be drawn together: put into
mathematical language, we can establish some sort of &lt;a href=&#34;https://en.wikipedia.org/wiki/Morphism&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;morphism&lt;/a&gt;
between the two fields (I wonder how rigorously such a connection can be made).&lt;/p&gt;
&lt;p&gt;Note the informality of the mapping: the goal is, by squinting a little, to
help artists and computer scientists to navigate the theoretical aspects of
an unknown field through familiar notions.&lt;/p&gt;
&lt;p&gt;Note also that we will use &amp;ldquo;drawing&amp;rdquo; and &amp;ldquo;painting&amp;rdquo; interchangeably. Finally, we
will mostly focus on fine-art, to be defined as a technically involved realistic
depiction. Most of what we&amp;rsquo;re expressing would also be valid for abstract
or naive forms of visual arts, but the situation, although fascinating, is
too &lt;a href=&#34;https://daily.jstor.org/was-modern-art-really-a-cia-psy-op/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;complicated&lt;/a&gt; to be explored here.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On drawing and computer science: a shape based painting process, axioms and Turing machines</title>
      <link>https://tales.mbivert.com/on-drawing-and-computer-science-axioms-turing-shapes/</link>
      <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-drawing-and-computer-science-axioms-turing-shapes/</guid>
      <description>&lt;p&gt;In the old days, the painting process was often unrefined
&lt;a href=&#34;https://en.wikipedia.org/wiki/Cennino_Cennini&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Cennino Cennini&lt;/a&gt;&amp;rsquo;s &lt;a href=&#34;https://resources.warburg.sas.ac.uk/pdf/cnh925b2209242.pdf&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Il libro dell&amp;rsquo;arte&lt;/a&gt;
is an example of accumulation of techniques aiming at specific subjects&amp;rsquo; depiction.
Those processes have progressively been abstracted and some some elements of
science, such as its understanding of &lt;a href=&#34;https://en.wikipedia.org/wiki/Light&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;light&lt;/a&gt;, have been assimilated.&lt;/p&gt;
&lt;p&gt;To the point that nowadays, we can take a shortcut and talk about
an &lt;a href=&#34;https://en.wikipedia.org/wiki/Axiomatic_system&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;&lt;em&gt;axiomatisation&lt;/em&gt; of the painting process&lt;/a&gt;: there
are small sets of rules, axioms, that can be combined at will to help create
a wide variety of artwork. This is even closer to be true for digital art.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On watercolor material: Introduction</title>
      <link>https://tales.mbivert.com/on-watercolor-material/</link>
      <pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-watercolor-material/</guid>
      <description>&lt;p&gt;This series is an introduction to &lt;a href=&#34;https://en.wikipedia.org/wiki/Watercolor_painting&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;watercolor&lt;/a&gt;
&lt;em&gt;material&lt;/em&gt;, with some practical advices on how to use watercolors.
This is &lt;em&gt;not&lt;/em&gt; an introduction watercolor painting: if that&amp;rsquo;s what
you&amp;rsquo;re looking for, this &lt;a href=&#34;https://tales.mbivert.com/on-watercolor-painting-tutorials/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;article&lt;/a&gt;
is a selection of YouTube (free video) tutorials and demonstrations,
by established artists, that better serves such a purpose.&lt;/p&gt;
&lt;p&gt;I try to condense here a few years of experimentation with the medium.
Despite being rather extensive, it&amp;rsquo;s still far from exhaustive; one
can refer to Bruce MacEvoy&amp;rsquo;s &lt;a href=&#34;https://www.handprint.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;website (handprint.com)&lt;/a&gt; for a
far more complete, encyclopedic exposé.&lt;/p&gt;
&lt;p&gt;This first article quickly introduces the medium and distinguishes it
from its closest peers (gouache and tempera).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>About</title>
      <link>https://tales.mbivert.com/about/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/about/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On some tools for Plan9&#39;s acme</title>
      <link>https://tales.mbivert.com/on-some-tools-for-plan9-acme/</link>
      <pubDate>Wed, 18 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-some-tools-for-plan9-acme/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Acme_%28text_editor%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Acme&lt;/a&gt; is a text editor/IDE developed by
&lt;a href=&#34;https://en.wikipedia.org/wiki/Rob_Pike&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Rob Pike&lt;/a&gt; (&lt;a href=&#34;http://golang.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Go&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/UTF-8&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;UTF-8&lt;/a&gt;,
&lt;a href=&#34;https://en.wikipedia.org/wiki/Sam_%28text_editor%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Sam&lt;/a&gt;, &lt;a href=&#34;http://genius.cat-v.org/rob-pike/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;etc.&lt;/a&gt;)
for the &lt;a href=&#34;https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;Plan9&lt;/a&gt; operating system; the editor is
available via e.g. &lt;a href=&#34;https://9fans.github.io/plan9port/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Plan 9 from User Space&lt;/a&gt; on UNIX.&lt;/p&gt;
&lt;p&gt;In comparison to &lt;a href=&#34;https://en.wikipedia.org/wiki/Vim_%28text_editor%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;other&lt;/a&gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Sublime_Text&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;modern&lt;/a&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/Emacs&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;editors&lt;/a&gt;, it is characterized by a restricted features
set. The editor is succinctly presented, followed by a quick presentation
of some &lt;a href=&#34;http://github.com/mbivert/acme-tools/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;scripts&lt;/a&gt; aiming at improving
&lt;a href=&#34;http://man.cat-v.org/plan_9/1/acme&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;acme(1)&lt;/a&gt;&amp;rsquo; usability/programmability.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On composition study: Videos thumbnails</title>
      <link>https://tales.mbivert.com/on-composition-study-videos-thumbnails/</link>
      <pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-composition-study-videos-thumbnails/</guid>
      <description>&lt;p&gt;Video thumbnails for &lt;a href=&#34;https://www.youtube.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://www.dailymotion.com/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;Dailymotion&lt;/a&gt;,
&lt;a href=&#34;https://joinpeertube.org/&#34; title=&#34;&#34; ZgotmplZ class=&#34;&#34;&gt;PeerTube&lt;/a&gt;, etc. give personality to the content, and
imprint durable &lt;a href=&#34;https://en.wikipedia.org/wiki/First_impression_%28psychology%29&#34; title=&#34;→ wikipedia&#34; ZgotmplZ class=&#34;wp-link&#34;&gt;first impressions&lt;/a&gt;, as
would a person&amp;rsquo;s appearance.&lt;/p&gt;
&lt;p&gt;As such, it&amp;rsquo;s only natural to cautiously design them.&lt;/p&gt;
&lt;p&gt;Not only is this a great subject to apply and expand our knowledge of
&lt;a href=&#34;https://tales.mbivert.com/on-composition/&#34; title=&#34;internal link&#34; ZgotmplZ class=&#34;int-link&#34;&gt;composition&lt;/a&gt;, beyond fine-art,
but also to understand &lt;em&gt;how&lt;/em&gt; subtle design decisions can (un)consciously
affect ourselves/others, thus, a good starting point in advertisement study.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On composition</title>
      <link>https://tales.mbivert.com/on-composition/</link>
      <pubDate>Thu, 29 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-composition/</guid>
      <description>&lt;p&gt;Composition is the key to a pleasant painting; proper lighting
ennobles to the eyes even the most modest subjects. The study
of composition is a way to understand &lt;em&gt;why&lt;/em&gt; something is, or isn&amp;rsquo;t,
beautiful.&lt;/p&gt;
&lt;p&gt;In essence, the rules of composition reflect either the inner-working
of human vision and/or archetypal natural structures, like our eyes
being attracted to &lt;strong&gt;strong contrasts&lt;/strong&gt;, repetition of similar
shapes in vegetation, or the common grouping/alternation between
warm (orange-ish) and cool (blue-ish) colors.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Chinese language</title>
      <link>https://tales.mbivert.com/on-chinese-language/</link>
      <pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-chinese-language/</guid>
      <description>&lt;p&gt;Visually, Chinese language clearly exposes what somehow corresponds
to Western&amp;rsquo;s languages Greek/Latin etymology, and which is, to most
westerners, hidden by languages&amp;rsquo; evolutions.&lt;/p&gt;
&lt;p&gt;We propose here to clarify this point through to study of a few Chinese
characters. There doesn&amp;rsquo;t seem to be a consensus regarding how to interpret
characters, but regardless, such studies still have values as mnemonic.&lt;/p&gt;
&lt;p&gt;I encourage the reader to extend such analyses as he sees fit.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On composition study: Empty Space in Chinese paintings</title>
      <link>https://tales.mbivert.com/on-composition-study-empty-space-in-chinese-paintings/</link>
      <pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-composition-study-empty-space-in-chinese-paintings/</guid>
      <description>&lt;p&gt;Lots of Chinese paintings contain a great deal of empty space,
emanating a certain calm, tranquility, serenity.&lt;/p&gt;
&lt;p&gt;This peculiar æsthetical choice could at least be unconsciously rooted
in a fundamental Eastern philosophical concept: &lt;em&gt;emptiness&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On composition study: Zhang Lu - Laozi Riding an Ox</title>
      <link>https://tales.mbivert.com/on-composition-study-zhang-lu-laozi-riding-an-ox/</link>
      <pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-composition-study-zhang-lu-laozi-riding-an-ox/</guid>
      <description>&lt;p&gt;A composition exegesis proposal based on Chinese language, allowed
by a broadness of interpretation rooted in the simplicity of the notions
involved.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On simple software: the benefits of complex software</title>
      <link>https://tales.mbivert.com/on-the-benefits-of-complex-software/</link>
      <pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://tales.mbivert.com/on-the-benefits-of-complex-software/</guid>
      <description>&lt;p&gt;Experienced programmers tend to appreciate
simplicity for its numerous blessings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;less code;&lt;/li&gt;
&lt;li&gt;less potential bugs;&lt;/li&gt;
&lt;li&gt;generally less cognitive effort to read, write, understand, maintain,
augment the code;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such benefits growing virtuously over time.&lt;/p&gt;
&lt;p&gt;Nevertheless, human nature at work, those &lt;em&gt;local&lt;/em&gt; benefits
don&amp;rsquo;t necessarily scale as virtuously.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
