<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>a-d.s - wiki</title><link href="https://aligot-death.space/" rel="alternate"></link><link href="https://aligot-death.space/feeds/wiki.atom.xml" rel="self"></link><id>https://aligot-death.space/</id><updated>2025-08-04T00:00:00+02:00</updated><entry><title>CHIRP</title><link href="https://aligot-death.space/wiki/misc/chirp-en" rel="alternate"></link><published>2025-06-13T00:00:00+02:00</published><updated>2025-06-13T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2025-06-13:/wiki/misc/chirp-en</id><summary type="html">&lt;p class="first last"&gt;personal settings for the chirp software&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#personal-settings" id="toc-entry-1"&gt;Personal settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#finding-which-port-arch-linux" id="toc-entry-2"&gt;Finding which port (Arch Linux)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#radio-did-not-respond" id="toc-entry-3"&gt;&amp;quot;Radio did not respond&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="personal-settings"&gt;
&lt;h2&gt;Personal settings&lt;a class="headerlink" href="#personal-settings" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;These are settings for the radios and setup I use. It's probably not very useful to anyone else.&lt;/em&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;port&lt;/strong&gt;: USB serial (/dev/)ttyUSB0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radio model&lt;/strong&gt;: UV-S9X3&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="finding-which-port-arch-linux"&gt;
&lt;h2&gt;Finding which port (Arch Linux)&lt;a class="headerlink" href="#finding-which-port-arch-linux" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To find on which port the radio is connected, open a terminal and type &lt;tt class="docutils literal"&gt;journalctl &lt;span class="pre"&gt;-f&lt;/span&gt; &lt;span class="pre"&gt;-n&lt;/span&gt; 50&lt;/tt&gt;, to see system log as they happen.
Connect the cable, and look at the logs. You should have something like this:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;Jun 13 01:35:41 niflheim kernel: usb 1-1: new full-speed USB device number 16 using xhci_hcd
&lt;span class="ln"&gt;2 &lt;/span&gt;Jun 13 01:35:42 niflheim kernel: usb 1-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
&lt;span class="ln"&gt;3 &lt;/span&gt;Jun 13 01:35:42 niflheim kernel: usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
&lt;span class="ln"&gt;4 &lt;/span&gt;Jun 13 01:35:42 niflheim kernel: usb 1-1: Product: USB Serial
&lt;span class="ln"&gt;5 &lt;/span&gt;Jun 13 01:35:42 niflheim kernel: ch341 1-1:1.0: ch341-uart converter detected
&lt;span class="ln"&gt;6 &lt;/span&gt;Jun 13 01:35:42 niflheim kernel: usb 1-1: ch341-uart converter now attached to ttyUSB0
&lt;/pre&gt;
&lt;p&gt;This last line &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;[...]&lt;/span&gt; attached to ttyUSB0&lt;/tt&gt; is what you're looking for. Either select that option in &amp;quot;port&amp;quot;, or select &amp;quot;custom&amp;quot; and enter &lt;tt class="docutils literal"&gt;/dev/ttyUSB0&lt;/tt&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="radio-did-not-respond"&gt;
&lt;h2&gt;&amp;quot;Radio did not respond&amp;quot;&lt;a class="headerlink" href="#radio-did-not-respond" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aside from typical troubleshooting (e.g. cable not seated properly, as it requires way more force than you may think), wrong selection of port can also trigger a &lt;tt class="docutils literal"&gt;Radio did not respond&lt;/tt&gt; error.&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Wordpress</title><link href="https://aligot-death.space/wiki/sysadmin/wordpress-en" rel="alternate"></link><published>2025-06-10T00:00:00+02:00</published><updated>2025-06-10T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2025-06-10:/wiki/sysadmin/wordpress-en</id><summary type="html">&lt;p class="first last"&gt;some notes on wordpress.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#security" id="toc-entry-1"&gt;Security&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#disable-xmlrpc-php" id="toc-entry-2"&gt;disable xmlrpc.php&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="security"&gt;
&lt;h2&gt;Security&lt;a class="headerlink" href="#security" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="disable-xmlrpc-php"&gt;
&lt;h3&gt;disable xmlrpc.php&lt;a class="headerlink" href="#disable-xmlrpc-php" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.hostinger.com/fr/tutoriels/xmlrpc-php"&gt;https://www.hostinger.com/fr/tutoriels/xmlrpc-php&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Games</title><link href="https://aligot-death.space/wiki/misc/games-en" rel="alternate"></link><published>2024-08-06T00:00:00+02:00</published><updated>2025-05-09T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2024-08-06:/wiki/misc/games-en</id><summary type="html">&lt;p class="first last"&gt;Various game tips&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#minecraft" id="toc-entry-1"&gt;Minecraft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ballisticng" id="toc-entry-2"&gt;BallisticNG&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#reset-progression-cloud" id="toc-entry-3"&gt;reset progression &amp;amp; cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ksp" id="toc-entry-4"&gt;KSP&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#launch-command" id="toc-entry-5"&gt;Launch command&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="minecraft"&gt;
&lt;h2&gt;Minecraft&lt;a class="headerlink" href="#minecraft" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Good tutorial on how to install Minecraft server on Linux: &lt;a class="reference external" href="https://www.shells.com/l/en-US/tutorial/0-A-Guide-to-Installing-a-Minecraft-Server-on-Linux-Ubuntu"&gt;https://www.shells.com/l/en-US/tutorial/0-A-Guide-to-Installing-a-Minecraft-Server-on-Linux-Ubuntu&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ballisticng"&gt;
&lt;h2&gt;BallisticNG&lt;a class="headerlink" href="#ballisticng" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="reset-progression-cloud"&gt;
&lt;h3&gt;reset progression &amp;amp; cloud&lt;a class="headerlink" href="#reset-progression-cloud" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Launch the game, go back to steam without closing it, right click &amp;gt; browse local files, delete &amp;quot;save&amp;quot; all while it runs, it should do the trick&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="ksp"&gt;
&lt;h2&gt;KSP&lt;a class="headerlink" href="#ksp" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="launch-command"&gt;
&lt;h3&gt;Launch command&lt;a class="headerlink" href="#launch-command" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Fixing various control and localization bugs, plus dGPU launch&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
DRI_PRIME=1 SDL_DYNAMIC_API=/usr/lib64/libSDL2.so LC_ALL=C  %command%
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Godot</title><link href="https://aligot-death.space/wiki/creation/godot-en" rel="alternate"></link><published>2023-10-24T00:00:00+02:00</published><updated>2023-10-24T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2023-10-24:/wiki/creation/godot-en</id><summary type="html">&lt;p class="first last"&gt;Some notes about godot&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#multimesh-buffer-s-layout" id="toc-entry-1"&gt;Multimesh buffer's layout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#multimeshinstance-2d" id="toc-entry-2"&gt;MultiMeshInstance (2D)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;I usually work in csharp but most of the code here can be easily translated
into godot's language &amp;quot;GDScript&amp;quot; &lt;em&gt;if necessary&lt;/em&gt; using the &lt;a class="reference external" href="https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_differences.html"&gt;API's guide&lt;/a&gt;.&lt;/p&gt;
&lt;div class="section" id="multimesh-buffer-s-layout"&gt;
&lt;h2&gt;Multimesh buffer's layout&lt;a class="headerlink" href="#multimesh-buffer-s-layout" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;Multimesh&lt;/tt&gt; property of a &lt;tt class="docutils literal"&gt;MultiMeshInstance3D&lt;/tt&gt; node exposes its raw data through a &lt;tt class="docutils literal"&gt;Buffer&lt;/tt&gt; property allowing for instance to apply updated data from a compute shader directly.&lt;/p&gt;
&lt;p&gt;Its layout is however fairly opaque and hidden in other wiki pages and in the source code: so here is a snippet to avoid (my) hours of headbanging research.&lt;/p&gt;
&lt;p&gt;Each instance has a &lt;tt class="docutils literal"&gt;Transform3D&lt;/tt&gt; property describing its position, rotate and scale, itself composed of an Vector3 &lt;tt class="docutils literal"&gt;Origin&lt;/tt&gt; describing its position, and a 3x Vector3 &lt;tt class="docutils literal"&gt;Basis&lt;/tt&gt; describing its rotation and scale. Each Vector3 is being made of three floats values, forming a set of &lt;strong&gt;12&lt;/strong&gt; float values in a (in my opinion) non-intuitive order.&lt;/p&gt;
&lt;p&gt;If you enable &lt;tt class="docutils literal"&gt;UseColors=true&lt;/tt&gt;, four additional values (R, G, B and A, as a &lt;tt class="docutils literal"&gt;Color&lt;/tt&gt; property) are added &lt;strong&gt;at the end&lt;/strong&gt; of this set.&lt;/p&gt;
&lt;p&gt;If you enable &lt;tt class="docutils literal"&gt;UseCustomData=true&lt;/tt&gt;, four additional values (for well, custom usages) are added &lt;strong&gt;at the end&lt;/strong&gt; of this set.&lt;/p&gt;
&lt;p&gt;Depending on the configuration, your data set will be of size  12, 16 or 20, and you need to offset you id's by that factor.&lt;/p&gt;
&lt;pre class="code csharp literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//3D base + color enabled, no custom data
&lt;/span&gt;&lt;span class="ln"&gt; 2 &lt;/span&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 3 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 4 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 5 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 6 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 7 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 8 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 9 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;10 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;11 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;12 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;13 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;14 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Basis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;15 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;16 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Origin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;17 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Origin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;18 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;11&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Origin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;19 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;20 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;21 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;22 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;23 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BufferId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="multimeshinstance-2d"&gt;
&lt;h2&gt;MultiMeshInstance (2D)&lt;a class="headerlink" href="#multimeshinstance-2d" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the case of 2D the same applies, but with &lt;tt class="docutils literal"&gt;Origin&lt;/tt&gt; being only a Vector2 and &lt;tt class="docutils literal"&gt;Basis&lt;/tt&gt; being only 2x Vector2, forming a 2+2x2[+ 4][+ 4] data set of size going from 6 to 14.&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="gamedev"></category></entry><entry><title>Krita</title><link href="https://aligot-death.space/wiki/creation/krita-en" rel="alternate"></link><published>2023-08-12T00:00:00+02:00</published><updated>2023-08-12T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2023-08-12:/wiki/creation/krita-en</id><summary type="html">&lt;p class="first last"&gt;Some Krita tips.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#brushes" id="toc-entry-1"&gt;Brushes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#multiple-columns-for-tools" id="toc-entry-2"&gt;multiple columns for tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#hide-title-in-canvas-mode" id="toc-entry-3"&gt;Hide title in canvas mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="brushes"&gt;
&lt;h2&gt;Brushes&lt;a class="headerlink" href="#brushes" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.davidrevoy.com/article953/krita-brushes-2023-01-bundle"&gt;Krita brushes 2023-01 bundle&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="multiple-columns-for-tools"&gt;
&lt;h2&gt;multiple columns for tools&lt;a class="headerlink" href="#multiple-columns-for-tools" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(eg: for tablet mode left-handed)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;first put dock next to other one (even if it doesn’t take whole height), then take the dock below and put it fully under.&lt;/p&gt;
&lt;p&gt;see: &lt;a class="reference external" href="https://www.youtube.com/watch?t=161&amp;amp;v=uYdEkOyFUn8&amp;amp;feature=youtu.be"&gt;https://www.youtube.com/watch?t=161&amp;amp;v=uYdEkOyFUn8&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="hide-title-in-canvas-mode"&gt;
&lt;h2&gt;Hide title in canvas mode&lt;a class="headerlink" href="#hide-title-in-canvas-mode" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;in settings, switch multiple documents from “tabs” to “subwindow”&lt;/p&gt;
&lt;p&gt;see: &lt;a class="reference external" href="https://krita-artists.org/t/hide-top-bar/13076/2"&gt;https://krita-artists.org/t/hide-top-bar/13076/2&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Thunderbolt 3 &amp; eGPU</title><link href="https://aligot-death.space/wiki/sysadmin/linux/thunderbolt3-egpu-en" rel="alternate"></link><published>2023-07-10T00:00:00+02:00</published><updated>2023-07-10T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2023-07-10:/wiki/sysadmin/linux/thunderbolt3-egpu-en</id><summary type="html">&lt;p class="first last"&gt;Thunderbolt3 eGPU linux tips&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#thunderbolt" id="toc-entry-1"&gt;thunderbolt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#egpu" id="toc-entry-2"&gt;eGPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#blender-renderer" id="toc-entry-3"&gt;Blender renderer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#external-screen-setup" id="toc-entry-4"&gt;External screen setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p class="alert"&gt;This is an old and chaotic list of tips: it's probably no longer relevant&lt;/p&gt;
&lt;div class="section" id="thunderbolt"&gt;
&lt;h2&gt;thunderbolt&lt;a class="headerlink" href="#thunderbolt" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://forum.manjaro.org/t/cant-get-extra-monitor-interface-to-show-up/28767/5"&gt;https://forum.manjaro.org/t/cant-get-extra-monitor-interface-to-show-up/28767/5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;blender 3.5&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;HSA_OVERRIDE_GFX_VERSION=10.3.0 DRI_PRIME=1 ./blender&lt;/tt&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="egpu"&gt;
&lt;h2&gt;eGPU&lt;a class="headerlink" href="#egpu" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://wiki.archlinux.org/title/PRIME"&gt;https://wiki.archlinux.org/title/PRIME&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;glxinfo | grep &amp;quot;OpenGL renderer&amp;quot;&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;vs&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;DRI_PRIME=1 glxinfo | grep &amp;quot;OpenGL renderer&amp;quot;&lt;/cite&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="blender-renderer"&gt;
&lt;h2&gt;Blender renderer&lt;a class="headerlink" href="#blender-renderer" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://developer.blender.org/T102018"&gt;https://developer.blender.org/T102018&lt;/a&gt; (5.4 is equivalent of 22.xx)&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://aur.archlinux.org/packages/ncurses5-compat-libs"&gt;https://aur.archlinux.org/packages/ncurses5-compat-libs&lt;/a&gt; with &lt;tt class="docutils literal"&gt;gpg &lt;span class="pre"&gt;--keyserver&lt;/span&gt;&lt;/tt&gt; keyserver.ubuntu.com &amp;lt;&lt;a class="reference external" href="http://keyserver.ubuntu.com/"&gt;http://keyserver.ubuntu.com/&lt;/a&gt;) --recv-keys 19882D92DDA4C400C22C0D56CC2AF4472167BE03&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;opencl-amd&lt;/span&gt;&lt;/tt&gt; &lt;a class="reference external" href="https://bbs.archlinux.org/viewtopic.php?id=268346"&gt;https://bbs.archlinux.org/viewtopic.php?id=268346&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;LoadLib(libhsa-amd-aqlprofile64.so)&lt;/span&gt; failed: &lt;span class="pre"&gt;libhsa-amd-aqlprofile64.so:&lt;/span&gt; cannot open shared object file: No such file or directory&lt;/tt&gt; → &lt;tt class="docutils literal"&gt;sudo pacman &lt;span class="pre"&gt;-S&lt;/span&gt; &lt;span class="pre"&gt;arch4edu/hsa-amd-aqlprofile-bin&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.notion.so/How-to-Install-RPM-Packages-on-Arch-Linux-marcelo-cubillos-527184f0335e4d419eedd27367b19698?pvs=21"&gt;How to Install RPM Packages on Arch Linux — marcelo cubillos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.notion.so/90-degree-8-pin-connector-Google-Search-3805e820f58344629770c573812b2f13?pvs=21"&gt;90 degree 8 pin connector - Google Search&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.notion.so/Support-for-RX6600XT-gfx1032-navi23-Issue-1698-RadeonOpenCompute-ROCm-GitHub-9cda95d9cc8a41f2a602f7d89e6cab32?pvs=21"&gt;Support for RX6600XT (gfx1032,navi23)? · Issue #1698 · RadeonOpenCompute/ROCm · GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="external-screen-setup"&gt;
&lt;h2&gt;External screen setup&lt;a class="headerlink" href="#external-screen-setup" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;with all-ways-egpu, enable only option 1, reboot, then &lt;cite&gt;sudo all-ways-egpu set-compositor-primary egpu`&lt;/cite&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Virtual machines on Linux</title><link href="https://aligot-death.space/wiki/sysadmin/linux/virtual-machines-on-linux-en" rel="alternate"></link><published>2022-06-03T12:40:00+02:00</published><updated>2022-06-03T12:40:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2022-06-03:/wiki/sysadmin/linux/virtual-machines-on-linux-en</id><summary type="html">&lt;p class="first last"&gt;Quick notes on working with VMs on Linux (debian)&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#installation-of-the-gaming-machine" id="toc-entry-1"&gt;Installation of the gaming machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#moving-a-vm" id="toc-entry-2"&gt;Moving a VM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation-of-the-gaming-machine"&gt;
&lt;h2&gt;Installation of the gaming machine&lt;a class="headerlink" href="#installation-of-the-gaming-machine" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;TODO&lt;/strong&gt; when reinstalling.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="moving-a-vm"&gt;
&lt;h2&gt;Moving a VM&lt;a class="headerlink" href="#moving-a-vm" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Based on `Moving KVM/QEMU VMs &amp;lt;https://kamprianis.eu/michalis/i.think/personal/200628-moving-kvmqemu-vms-.html&amp;gt;`__ on kamprianis.eu&lt;/em&gt;&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Shut VM down&lt;/li&gt;
&lt;li&gt;Use &lt;tt class="docutils literal"&gt;virsh list &lt;span class="pre"&gt;--all&lt;/span&gt;&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;sudo virsh list &lt;span class="pre"&gt;--all&lt;/span&gt;&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;sudo virsh &lt;span class="pre"&gt;pool-list&lt;/span&gt; &lt;span class="pre"&gt;--all&lt;/span&gt;&lt;/tt&gt; respectively to get infos&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo mv &lt;span class="pre"&gt;&amp;lt;old_path&amp;gt;/mv.qcow2&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;new_path&amp;gt;/mv.qcow2&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo service libvirtd restart&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo virsh &lt;span class="pre"&gt;vol-list&lt;/span&gt;&lt;/tt&gt; to check if machine is recognized&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo virsh edit debian10&lt;/tt&gt;, search for old path and replace it.&lt;/li&gt;
&lt;li&gt;boot VM to check if all is well.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Basic linux packages</title><link href="https://aligot-death.space/wiki/sysadmin/linux/basic-linux-packages-en" rel="alternate"></link><published>2022-02-03T18:30:00+01:00</published><updated>2022-02-03T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2022-02-03:/wiki/sysadmin/linux/basic-linux-packages-en</id><summary type="html">&lt;p class="first last"&gt;typical packages I install the first time I land on a linux.&lt;/p&gt;
</summary><content type="html">&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;vim&lt;span class="w"&gt; &lt;/span&gt;sysstat&lt;span class="w"&gt; &lt;/span&gt;mlocate&lt;span class="w"&gt; &lt;/span&gt;tmux&lt;span class="w"&gt; &lt;/span&gt;python3-pip&lt;span class="w"&gt; &lt;/span&gt;htop&lt;span class="w"&gt; &lt;/span&gt;rofi&lt;span class="w"&gt; &lt;/span&gt;xbindkeys&lt;span class="w"&gt; &lt;/span&gt;keepassxc&lt;span class="w"&gt; &lt;/span&gt;rsync&lt;span class="w"&gt; &lt;/span&gt;fd-find&lt;span class="w"&gt; &lt;/span&gt;hwinfo&lt;span class="w"&gt; &lt;/span&gt;gparted&lt;span class="w"&gt; &lt;/span&gt;curl
&lt;/pre&gt;
</content><category term="wiki"></category></entry><entry><title>Homebrew cloud gaming setup</title><link href="https://aligot-death.space/wiki/sysadmin/linux/homebrew-cloud-gaming-en" rel="alternate"></link><published>2022-02-03T18:30:00+01:00</published><updated>2022-02-03T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2022-02-03:/wiki/sysadmin/linux/homebrew-cloud-gaming-en</id><summary type="html">&lt;p class="first last"&gt;Cloud gaming is actually awesome when you are the one in control.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#installation-of-the-gaming-machine" id="toc-entry-1"&gt;Installation of the gaming machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#turning-the-machine-on-and-off-remotely" id="toc-entry-2"&gt;Turning the machine on and off remotely&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#turning-on" id="toc-entry-3"&gt;Turning on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#turning-off" id="toc-entry-4"&gt;Turning off&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#controlling-from-a-smartphone-yes" id="toc-entry-5"&gt;Controlling from a smartphone (yes!)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#troubleshooting" id="toc-entry-6"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation-of-the-gaming-machine"&gt;
&lt;h2&gt;Installation of the gaming machine&lt;a class="headerlink" href="#installation-of-the-gaming-machine" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to game on linux, see &lt;a class="reference external" href="/wiki/linux-gaming-setup-en"&gt;Linux gaming setup&lt;/a&gt; for a smooth Linux install.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="turning-the-machine-on-and-off-remotely"&gt;
&lt;h2&gt;Turning the machine on and off remotely&lt;a class="headerlink" href="#turning-the-machine-on-and-off-remotely" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is an optional step, as you can just leave your machine running 24/7. But if you care about electricity bill and your hardware, this is how to turn on and off your machine.&lt;/p&gt;
&lt;div class="section" id="turning-on"&gt;
&lt;h3&gt;Turning on&lt;a class="headerlink" href="#turning-on" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Use local server to wake up machine (require setting up Wake on LAN in gaming machine's BIOS/UEFI)&lt;/p&gt;
&lt;p&gt;You can use a SSH script and SSH key authentification to have a simple &amp;quot;turn on&amp;quot; shortcut on your remote machine running linux:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
nemecle&amp;#64;niflheim&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;wol_ultimatebob.sh&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;#!/bin/bash set -Eeuo pipefail
&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;nemecle&amp;#64;server.local&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;34423&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;wakeonlan&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;mac_address&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="turning-off"&gt;
&lt;h3&gt;Turning off&lt;a class="headerlink" href="#turning-off" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;From the Smartphone Steam link, simply use the &lt;a class="reference external" href="https://www.reddit.com/r/Steam_Link/comments/45iff2/remotely_turning_off_steam_host_pc/"&gt;dedicated button&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From a computer, add a non-steam game on the gaming computer, select any program, change the shortcut properties to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;&amp;quot;C:\Windows\System32\shutdown.exe&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;-s&lt;/span&gt; &lt;span class="pre"&gt;-t&lt;/span&gt; 00&lt;/tt&gt;, or &lt;tt class="docutils literal"&gt;/sbin/poweroff&lt;/tt&gt; if it runs on linux, and call that &amp;quot;game&amp;quot; &lt;tt class="docutils literal"&gt;remote shutdown&lt;/tt&gt;. When you want to turn off the computer remotely, simply &amp;quot;stream&amp;quot; the game.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://steamcommunity.com/groups/homestream/discussions/0/522728268876555995/"&gt;More info&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="controlling-from-a-smartphone-yes"&gt;
&lt;h2&gt;Controlling from a smartphone (yes!)&lt;a class="headerlink" href="#controlling-from-a-smartphone-yes" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It's actually possible to control the computer from a smartphone. Even over LTE, it is still playable, as long as you are confortable with using a controller rather than a keyboard-mouse setup.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Simply download the &lt;a class="reference external" href="https://play.google.com/store/apps/details?id=com.valvesoftware.steamlink&amp;amp;hl=en&amp;amp;gl=US"&gt;Steam Link&lt;/a&gt; (more info and other devices &lt;a class="reference external" href="https://store.steampowered.com/app/353380/Steam_Link/"&gt;here&lt;/a&gt;), Go to settings &lt;tt class="docutils literal"&gt;⚙️&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;Computer&lt;/tt&gt;, hit &lt;tt class="docutils literal"&gt;Other Computer&lt;/tt&gt;. Write down the PIN.&lt;/li&gt;
&lt;li&gt;On the computer, open Steam, go to &lt;tt class="docutils literal"&gt;Settings&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;Remote Play&lt;/tt&gt;, and &lt;tt class="docutils literal"&gt;PAIR STEAM LINK&lt;/tt&gt;, and enter the PIN.&lt;/li&gt;
&lt;li&gt;Get yourself a smartphone controller. Touch control is a sham.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tadaaaaa!&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/full/_DSC2346.JPG"&gt;
&lt;img alt="Un smartphone avec une manette, devant le PC qu'il contrôle, avec le jeu Borderlands 3." src="https://rsc.aligot-death.space/images/480/_DSC2346.JPG" /&gt;
&lt;/a&gt;
&lt;p class="caption"&gt;Borderlands 3, running on debian. What an era.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="troubleshooting"&gt;
&lt;h2&gt;Troubleshooting&lt;a class="headerlink" href="#troubleshooting" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If Steam shows &amp;quot;install&amp;quot; on remote machine despite game being installed on gaming machine, select remote machine with down arrow next to it and click &amp;quot;install&amp;quot; anyway: it will &lt;strong&gt;launch&lt;/strong&gt; game as stream anyway&lt;/p&gt;
&lt;p&gt;On a windows computer, Steam sometimes start as delayed, or doesn't start at all, when the computer is remotely shut down. It seems like the &lt;tt class="docutils literal"&gt;shutdown&lt;/tt&gt; command doesn't actually behaves like the shutdown button.&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Linux gaming setup</title><link href="https://aligot-death.space/wiki/sysadmin/linux/linux-gaming-setup-en" rel="alternate"></link><published>2022-02-03T18:30:00+01:00</published><updated>2022-02-03T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2022-02-03:/wiki/sysadmin/linux/linux-gaming-setup-en</id><summary type="html">&lt;p class="first last"&gt;How to game on linux, the (relatively) easy way.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#installation-of-the-gaming-machine" id="toc-entry-1"&gt;Installation of the gaming machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#remote-gaming" id="toc-entry-2"&gt;Remote gaming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation-of-the-gaming-machine"&gt;
&lt;h2&gt;Installation of the gaming machine&lt;a class="headerlink" href="#installation-of-the-gaming-machine" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For some reasons, typical &amp;quot;user-friendly&amp;quot; distributions are a shit circus. People usually system wide bugs with drivers that I don't with my own setup, so as I reinstalled my computer I took notes of what I did. It seems that beside the lack of necessary proprietary drivers for some features, Debian is simpler to use, even for gaming.&lt;/p&gt;
&lt;p&gt;Debian might seem like an odd choice for two reasons: for starter, it lags behind software updates (except security updates) to only use well tested software. This can be &amp;quot;solved&amp;quot; by using the &lt;tt class="docutils literal"&gt;Sid&lt;/tt&gt; unstable version, which is actually still quite stable and can be used for daily driving. Also, debian doesn't integrate proprietary software by default, so the corresponding repositories must be activated for Steam and Nvidia, even if it goes against debian philosophy.&lt;/p&gt;
&lt;p&gt;I believe that any &amp;quot;base&amp;quot; linux distribution might also offer the same benefits without these limitations, but I'll let someone else test that hypothese.&lt;/p&gt;
&lt;p&gt;Long story short, so called &amp;quot;end user friendly&amp;quot; distributions seem to actually be worse, and plenty of &amp;quot;base&amp;quot; distributions offer similar user friendly ecosystems &lt;a class="footnote-reference" href="#footnote-1" id="footnote-reference-1"&gt;[1]&lt;/a&gt;.&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="footnote-1" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label" /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Even though they also suffer from the usual &amp;quot;xxxx Is the Year of Linux on the Desktop!!!&amp;quot; syndrome.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;1: . Install Debian with Gnome or MATE. If you're not used to installing Linux, get in touch with free Open-Source software organisation near you or go to an Install party dedicated for non-power users.
2: Enable &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;non-free&lt;/span&gt;&lt;/tt&gt; AND &lt;tt class="docutils literal"&gt;contrib&lt;/tt&gt; repositories. Don't forget the last one or you'll debug missing packages for nothing (learn that the hard way).
3: Install Steam. It requires some commands, but nothing to scary. Just enter those lines in the terminal.&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;dpkg&lt;span class="w"&gt; &lt;/span&gt;--add-architecture&lt;span class="w"&gt; &lt;/span&gt;i386&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;2 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;update
&lt;/pre&gt;
&lt;p&gt;And install steam using the software provided by Gnome or MATE, or use this command:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;steam
&lt;/pre&gt;
&lt;p&gt;More info &lt;a class="reference external" href="https://wiki.debian.org/Steam"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;4: Install nvidia drivers and various utilities&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;nvidia-drivers&lt;span class="w"&gt; &lt;/span&gt;mesa-vulkan-drivers&lt;span class="w"&gt; &lt;/span&gt;libglx-mesa0:i386&lt;span class="w"&gt; &lt;/span&gt;mesa-vulkan-drivers:i386&lt;span class="w"&gt; &lt;/span&gt;libgl1-mesa-dri:i386
&lt;/pre&gt;
&lt;p&gt;Or once again, use the command line:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;nvidia-drivers&lt;span class="w"&gt; &lt;/span&gt;mesa-vulkan-drivers&lt;span class="w"&gt; &lt;/span&gt;libglx-mesa0:i386&lt;span class="w"&gt; &lt;/span&gt;mesa-vulkan-drivers:i386&lt;span class="w"&gt; &lt;/span&gt;libgl1-mesa-dri:i386
&lt;/pre&gt;
&lt;p&gt;Open Steam, log in, and then go to &lt;tt class="docutils literal"&gt;Settings&lt;/tt&gt; &amp;gt; &lt;tt class="docutils literal"&gt;Steam Play&lt;/tt&gt; &amp;gt; &lt;tt class="docutils literal"&gt;Enable Steam Play for all other titles&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Now, simply use Steam as usual.&lt;/p&gt;
&lt;p&gt;Games should then &lt;em&gt;actually&lt;/em&gt; work according to &lt;a class="reference external" href="protondb.com/"&gt;ProtonDB&lt;/a&gt; rating.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="remote-gaming"&gt;
&lt;h2&gt;Remote gaming&lt;a class="headerlink" href="#remote-gaming" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a class="reference external" href="/wiki/homebrew-cloud-gaming-en"&gt;Homebrew cloud gaming setup&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Self-hosted Spotify</title><link href="https://aligot-death.space/wiki/webdev/self-hosted-spotify-en" rel="alternate"></link><published>2021-05-19T18:30:00+02:00</published><updated>2021-05-19T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-19:/wiki/webdev/self-hosted-spotify-en</id><summary type="html">&lt;p class="first last"&gt;Self hosted streaming service with recommandation and such (WIP)&lt;/p&gt;
</summary><content type="html">&lt;p class="warning"&gt;The is a work in progress: this page is here to keep track of the project.&lt;/p&gt;
&lt;p&gt;The go-to reference in the self-hosting commnunity is very complex: &lt;a class="reference external" href="https://www.reddit.com/r/selfhosted/comments/9ya0or/selfhosted_music_playerspotify/ea0m2bk/"&gt;https://www.reddit.com/r/selfhosted/comments/9ya0or/selfhosted_music_playerspotify/ea0m2bk/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The goal is to build a simpler version of it.&lt;/p&gt;
&lt;p&gt;Nextcloud
Install &amp;quot;Music&amp;quot; App&lt;/p&gt;
&lt;p&gt;setup last.fm api key for informations&lt;/p&gt;
&lt;p&gt;Generate login-pwd for Ampache/subsonic&lt;/p&gt;
&lt;p class="alert"&gt;The logins for subsonic are not the user logins, but the generated login-pwd pair from the Music app&lt;/p&gt;
&lt;p&gt;use &amp;quot;Subsonic&amp;quot; android app for streaming from Nextcloud&lt;/p&gt;
&lt;p&gt;Use last.fm android app to scrobble listening music&lt;/p&gt;
&lt;p class="warning"&gt;Anything below is TODO&lt;/p&gt;
&lt;p&gt;Build Headphones (&lt;a class="reference external" href="https://github.com/rembo10/headphones"&gt;https://github.com/rembo10/headphones&lt;/a&gt;) -&amp;gt; Transmission -&amp;gt; beet -&amp;gt; Nextcloud Music pipeline&lt;/p&gt;
</content><category term="wiki"></category></entry><entry><title>Ansible</title><link href="https://aligot-death.space/wiki/sysadmin/ansible-en" rel="alternate"></link><published>2021-05-17T18:30:00+02:00</published><updated>2021-05-17T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-17:/wiki/sysadmin/ansible-en</id><summary type="html">&lt;p class="first last"&gt;Ansible tips and notes.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#on-client" id="toc-entry-1"&gt;On client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#ad-hoc-command" id="toc-entry-2"&gt;ad-hoc command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#on-server" id="toc-entry-3"&gt;On server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="on-client"&gt;
&lt;h2&gt;On client&lt;a class="headerlink" href="#on-client" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install ansible -t
&lt;span class="ln"&gt;2 &lt;/span&gt;git clone https://framagit.org/Nemecle/heimdall
&lt;span class="ln"&gt;3 &lt;/span&gt;cd heimdall
&lt;/pre&gt;
&lt;p&gt;to launch:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ansible-playbook -i inventory.ini site.yml
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="ad-hoc-command"&gt;
&lt;h2&gt;ad-hoc command&lt;a class="headerlink" href="#ad-hoc-command" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ansible  -i inventory.ini webservers -m ansible.builtin.file -a &amp;quot;dest=/etc/nginx/sites-available/wiki.nemecl.eu mode=600 owner=www-data group=www-data&amp;quot;  --become
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="on-server"&gt;
&lt;h2&gt;On server&lt;a class="headerlink" href="#on-server" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo adduser deploy
&lt;span class="ln"&gt;2 &lt;/span&gt;sudo groupadd wheel
&lt;span class="ln"&gt;3 &lt;/span&gt;sudo usermod -aG sudo deploy
&lt;span class="ln"&gt;4 &lt;/span&gt;sudo usermod -aG wheel deploy
&lt;/pre&gt;
&lt;p&gt;Then sudo visudo, add &lt;tt class="docutils literal"&gt;%wheel &lt;span class="pre"&gt;ALL=(ALL)&lt;/span&gt; NOPASSWD: ALL&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;And edit &lt;tt class="docutils literal"&gt;/etc/shadow&lt;/tt&gt; to add/edit &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;deploy:!!:[...]&lt;/span&gt;&lt;/tt&gt; for no password&lt;/p&gt;
&lt;p&gt;make sure to add user to &lt;tt class="docutils literal"&gt;AllowUsers&lt;/tt&gt; in &lt;tt class="docutils literal"&gt;sshd_config&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo service ssh reload
&lt;/pre&gt;
&lt;p&gt;Add ssh key:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ssh-copy-id -p &amp;lt;port&amp;gt; -i $HOME/.ssh/id_rsa.pub deploy&amp;#64;nemecl.eu
&lt;/pre&gt;
&lt;p&gt;(unecessary?) then:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo setfacl -R -m u:deploy:rwx /var/www/
&lt;/pre&gt;
&lt;p&gt;&lt;a class="reference external" href="https://linuxbuz.com/linuxhowto/what-is-ansible-playbook-and-how-it-works"&gt;https://linuxbuz.com/linuxhowto/what-is-ansible-playbook-and-how-it-works&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Software</title><link href="https://aligot-death.space/wiki/misc/software-en" rel="alternate"></link><published>2021-05-12T22:00:00+02:00</published><updated>2021-05-12T22:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-12:/wiki/misc/software-en</id><summary type="html">&lt;p class="first last"&gt;Interesting software&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#learning-education" id="toc-entry-1"&gt;Learning/Education&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#music" id="toc-entry-2"&gt;music&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#code" id="toc-entry-3"&gt;code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#graphics" id="toc-entry-4"&gt;Graphics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#learn" id="toc-entry-5"&gt;learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#fun" id="toc-entry-6"&gt;fun&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="learning-education"&gt;
&lt;h2&gt;Learning/Education&lt;a class="headerlink" href="#learning-education" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="music"&gt;
&lt;h3&gt;music&lt;a class="headerlink" href="#music" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.incredibox.com/"&gt;Incredibox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://splice.com/sounds/beatmaker"&gt;Beatmaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blokdust.com/"&gt;Blokdust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://sampulator.com/"&gt;Sampulator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://musiclab.chromeexperiments.com/"&gt;musiclab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://experiments.withgoogle.com/ai/drum-machine/view/"&gt;Drum Machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Collaborative music: &lt;a class="reference external" href="http://labs.dinahmoe.com/plink/"&gt;Plink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List of various sound editors &lt;a class="reference external" href="https://github.com/everestpipkin/tools-list#sound-editors"&gt;https://github.com/everestpipkin/tools-list#sound-editors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="code"&gt;
&lt;h2&gt;code&lt;a class="headerlink" href="#code" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;basic algorithms with shapes: &lt;a class="reference external" href="https://www.algoblocs.fr/"&gt;Algoblocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;actual python or javascript code: &lt;a class="reference external" href="https://codecombat.com/"&gt;CodeCombat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;visual programming: &lt;a class="reference external" href="https://cables.gl/"&gt;Cables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="graphics"&gt;
&lt;h2&gt;Graphics&lt;a class="headerlink" href="#graphics" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;For 2D animation and even interactive books: &lt;a class="reference external" href="https://www.wickeditor.com/"&gt;Wick Editor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="learn"&gt;
&lt;h2&gt;learn&lt;a class="headerlink" href="#learn" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;morse: &lt;a class="reference external" href="https://morse.withgoogle.com/learn/"&gt;https://morse.withgoogle.com/learn/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;keyboard &amp;quot;touch typing&amp;quot; : &lt;a class="reference external" href="https://zty.pe/"&gt;https://zty.pe/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;mouse agility: &lt;a class="reference external" href="https://kbhgames.com/game/ninja-glove"&gt;https://kbhgames.com/game/ninja-glove&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="fun"&gt;
&lt;h2&gt;fun&lt;a class="headerlink" href="#fun" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;3D/VR chat in the browser: &lt;a class="reference external" href="https://hubs.mozilla.com/"&gt;Hub by Mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Experiment with alchemy/cellular automata: &lt;a class="reference external" href="https://experiments.withgoogle.com/sandspiel"&gt;Sandspield&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3D puzzles &lt;a class="reference external" href="https://rotopo.com/shop"&gt;Rotopo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Move user folders in Windows</title><link href="https://aligot-death.space/wiki/sysadmin/windows/windows-move-user-folders-en" rel="alternate"></link><published>2021-05-12T18:30:00+02:00</published><updated>2021-05-12T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-12:/wiki/sysadmin/windows/windows-move-user-folders-en</id><summary type="html">&lt;p class="first last"&gt;Moving &amp;quot;Pictures&amp;quot;, &amp;quot;Documents&amp;quot; and other user's folders, to put them for instance on a secondary disk, without having to manually create the new folders nor moving their content.&lt;/p&gt;
</summary><content type="html">&lt;p class="blue"&gt;&lt;em&gt;The screenshot here are in french, but the corresponding translations are provided.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Following the configuration of new computers with an additional &amp;quot;Data&amp;quot; drive, I wanted to move users' folders (Downloads, Documents, Pictures, Videos,...) on it to keep the &amp;quot;system&amp;quot; disk for applications. Several &lt;a class="reference external" href="https://www.zdnet.com/article/dont-move-your-windows-user-profiles-folder-to-another-drive/"&gt;articles&lt;/a&gt; and &lt;a class="reference external" href="https://answers.microsoft.com/en-us/windows/forum/windows_10-files-winpc/moving-the-user-folder-in-its-entirety-from-c-to-d/e8a063cd-624c-4da4-a6fd-5d98fa797aef"&gt;forum posts&lt;/a&gt; online advise against moving the whole user folder because it can cause problems with updates and such.&lt;/p&gt;
&lt;p&gt;Also, most articles simply explain how to move it, but do not explain how to &amp;quot;recreate&amp;quot; the users' folder structure (which can actually be handled by Windows itself). Here is the quickest method I found without Active Directory and such.&lt;/p&gt;
&lt;p&gt;To start with, connect with one of the users, and open the file browser. Under &amp;quot;&lt;strong&gt;Quick access&lt;/strong&gt;&amp;quot;/&amp;quot;&lt;strong&gt;Shortcuts&lt;/strong&gt;&amp;quot;, right click on the corresponding shortcut, and click &amp;quot;&lt;strong&gt;Properties&lt;/strong&gt;&amp;quot;:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_0.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_0.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Then, go to the &amp;quot;&lt;strong&gt;location&lt;/strong&gt;&amp;quot; tab. You should have something that look like this, with the default location being &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;C:\users\&amp;lt;user&amp;gt;\Documents&lt;/span&gt;&lt;/tt&gt;:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_1.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_1.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Simply replace the &lt;tt class="docutils literal"&gt;C:&lt;/tt&gt; by &lt;tt class="docutils literal"&gt;D:&lt;/tt&gt;:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_2.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_2.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;A pop-up appears, warning you that the targeted folder does not exist. the first &amp;quot;trick&amp;quot; being that &lt;strong&gt;it suggests to create it for you!&lt;/strong&gt; Click on &amp;quot;&lt;strong&gt;yes&lt;/strong&gt;&amp;quot; to create it:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_3.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_3.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;A second pop-up will ask if you want to move the content of the old folder to the new: to which you can obviously answer &amp;quot;&lt;strong&gt;yes&lt;/strong&gt;&amp;quot;:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_4.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_4.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Apply this to all the folders that you want.&lt;/p&gt;
&lt;p&gt;The hierarchy and the folders are automatically created, and their content seemlessly moved:&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_5.png"&gt;
&lt;img alt="The screenshot corresponding to the text above." src="https://rsc.aligot-death.space/images/480/articles/windows_move_user_folder_5.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>File recovery</title><link href="https://aligot-death.space/wiki/sysadmin/file-recovery-en" rel="alternate"></link><published>2021-05-11T18:30:00+02:00</published><updated>2021-05-11T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-11:/wiki/sysadmin/file-recovery-en</id><summary type="html">&lt;p class="first last"&gt;Data recovery from damaged storage on Linux&lt;/p&gt;
</summary><content type="html">&lt;p class="warning"&gt;to redact&lt;/p&gt;
&lt;p&gt;basic extract: testdisk
(good tutorial: &lt;a class="reference external" href="https://itsfoss.com/recover-deleted-files-linux/"&gt;https://itsfoss.com/recover-deleted-files-linux/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;mp4fixer:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;perl /home/nemecle/Downloads/mp4fixer/fixer.pl /media/nemecle/HDD2/b/testdisk/DCIM/101_FUJI/DSCF0658.MOV /media/nemecle/HDD2/b/testdisk/DCIM/101_FUJI/video.MOV video.MOV_fixed;
&lt;/pre&gt;
&lt;p&gt;data carving: &lt;a class="reference external" href="https://github.com/sleuthkit/scalpel"&gt;https://github.com/sleuthkit/scalpel&lt;/a&gt; &lt;a class="reference external" href="https://www.cgsecurity.org/wiki/PhotoRec#How_PhotoRec_works"&gt;https://www.cgsecurity.org/wiki/PhotoRec#How_PhotoRec_works&lt;/a&gt; &lt;a class="reference external" href="http://foremost.sourceforge.net/"&gt;http://foremost.sourceforge.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;atom mov &lt;a class="reference external" href="https://video.stackexchange.com/questions/29073/need-help-to-fix-a-broken-mp4-which-lacks-a-moov-atom"&gt;https://video.stackexchange.com/questions/29073/need-help-to-fix-a-broken-mp4-which-lacks-a-moov-atom&lt;/a&gt;
&lt;a class="reference external" href="https://codecpack.co/download/recover-mp4.html"&gt;https://codecpack.co/download/recover-mp4.html&lt;/a&gt;
&lt;a class="reference external" href="https://stackoverflow.com/questions/35561846/recovering-corrupted-video-file"&gt;https://stackoverflow.com/questions/35561846/recovering-corrupted-video-file&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;data carving: &lt;a class="reference external" href="https://github.com/sleuthkit/scalpel"&gt;https://github.com/sleuthkit/scalpel&lt;/a&gt; &lt;a class="reference external" href="https://www.cgsecurity.org/wiki/PhotoRec#How_PhotoRec_works"&gt;https://www.cgsecurity.org/wiki/PhotoRec#How_PhotoRec_works&lt;/a&gt; &lt;a class="reference external" href="http://foremost.sourceforge.net/"&gt;http://foremost.sourceforge.net/&lt;/a&gt;&lt;/p&gt;
</content><category term="wiki"></category></entry><entry><title>Hardware</title><link href="https://aligot-death.space/wiki/sysadmin/hardware-en" rel="alternate"></link><published>2021-05-11T18:30:00+02:00</published><updated>2021-05-11T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-11:/wiki/sysadmin/hardware-en</id><summary type="html">&lt;p class="first last"&gt;Hardware tips and notes.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#storage" id="toc-entry-1"&gt;Storage&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#stuck-head" id="toc-entry-2"&gt;Stuck head&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#bricked-ssd" id="toc-entry-3"&gt;Bricked SSD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#connectors" id="toc-entry-4"&gt;Connectors&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#power-supply-cords" id="toc-entry-5"&gt;Power supply cords&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#in-computer-power-connectors" id="toc-entry-6"&gt;In-computer power connectors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#pc-building" id="toc-entry-7"&gt;Pc building&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#seemingly-dead-computer" id="toc-entry-8"&gt;Seemingly dead computer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="storage"&gt;
&lt;h2&gt;Storage&lt;a class="headerlink" href="#storage" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="stuck-head"&gt;
&lt;h3&gt;Stuck head&lt;a class="headerlink" href="#stuck-head" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Diagnosis: &amp;quot;tick tick tick&amp;quot; and/or screeching noises when starting drive.&lt;/p&gt;
&lt;p&gt;Either hit drive against a table (while unpowered) to unstuck: only do that with already fucked-up-to-be-backed-up drives.&lt;/p&gt;
&lt;blockquote class="pull-quote"&gt;
&lt;p&gt;(When I was a sysadmin, I heard a story of how old VAX drives would stall, so holes had been drilled in them with tape over the holes. When stalled, the sysadmin would peel back the tape and use their finger to spin-start them. Those even older drives must have been more tolerant of dust!)&lt;/p&gt;
&lt;p&gt;More than once I had a hard drive fail to start up after a power cycle (back then the drives only spun down when power was removed). First thing we tried was to remove the drive and give the whole drive a sharp spin on the axis of the platter. Due to inertia of the platter, this would tend to get the platter to move a bit and &amp;quot;unstick&amp;quot; it.&lt;/p&gt;
&lt;p&gt;My recollection is that it worked every time I had to do this. Of course, we would back up that drive and replace it as soon as possible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class="reference external" href="https://news.ycombinator.com/item?id=27105917"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="bricked-ssd"&gt;
&lt;h3&gt;Bricked SSD&lt;a class="headerlink" href="#bricked-ssd" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://fmad.io/blog-ssd-bricked-restore.html"&gt;Bricked SSD on Life Support&lt;/a&gt; (&lt;a class="reference external" href="https://web.archive.org/web/20210203052035/https://fmad.io/blog-ssd-bricked-restore.html"&gt;archive&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="connectors"&gt;
&lt;h2&gt;Connectors&lt;a class="headerlink" href="#connectors" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="power-supply-cords"&gt;
&lt;h3&gt;Power supply cords&lt;a class="headerlink" href="#power-supply-cords" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;On power unit, ampere is a maximum (an equipement using less will be fine), while voltage is an exact value, with a tolerance of ≈10%&lt;/p&gt;
&lt;p&gt;Plug &amp;quot;shape&amp;quot; is defined by &lt;a class="reference external" href="https://en.wikipedia.org/wiki/IEC_60320"&gt;IEC 60320&lt;/a&gt;&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;a class="reference external image-reference" href="/images/IEC_60320.png"&gt;
&lt;img alt="Diagram list of IEC 60320 power plugs" src="/images/IEC_60320.png" style="width: 400px;" /&gt;
&lt;/a&gt;
&lt;p class="caption"&gt;IEC 60320 norm as shown on Wikipedia&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="in-computer-power-connectors"&gt;
&lt;h3&gt;In-computer power connectors&lt;a class="headerlink" href="#in-computer-power-connectors" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.kitchentablecomputers.com/ppc.php"&gt;Power and Panel Cables and Connectors&lt;/a&gt; (&lt;a class="reference external" href="https://web.archive.org/web/20200812182356/https://www.kitchentablecomputers.com/ppc.php"&gt;archive&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Power supply labels on (mainly old) PSU connectors seems to have very little documentation. From &lt;a class="reference external" href="https://forums.tomshardware.com/threads/power-supply-confused.1678414/"&gt;here&lt;/a&gt; and &lt;a class="reference external" href="https://www.reddit.com/r/buildapc/comments/cemc2z/is_this_cable_mislabeled_if_so_what_is_it/eu3k8zv/?utm_source=reddit&amp;amp;utm_medium=web2x&amp;amp;context=3"&gt;here&lt;/a&gt; (&lt;a class="reference external" href="https://web.archive.org/web/20210511091228if_/https://www.reddit.com/r/buildapc/comments/cemc2z/is_this_cable_mislabeled_if_so_what_is_it/eu3k8zv/?context=3"&gt;archive&lt;/a&gt;), it seems to be:&lt;/p&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="17%" /&gt;
&lt;col width="83%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;label&lt;/th&gt;
&lt;th class="head"&gt;Corresponding equipement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;
&lt;td&gt;System board, 24-pin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;
&lt;td&gt;Diskette drive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;P3&lt;/td&gt;
&lt;td&gt;CPU power, 6-pin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;P4&lt;/td&gt;
&lt;td&gt;1st SATA hard drive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;P5&lt;/td&gt;
&lt;td&gt;2nd SATA hard drive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;P7&lt;/td&gt;
&lt;td&gt;Optical drive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="pc-building"&gt;
&lt;h2&gt;Pc building&lt;a class="headerlink" href="#pc-building" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://pcpartpicker.com/builds/#sort=rating"&gt;PC Part picker&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="seemingly-dead-computer"&gt;
&lt;h2&gt;Seemingly dead computer&lt;a class="headerlink" href="#seemingly-dead-computer" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If a computer no longer powers (typically, a laptop), unplug power supply, remove battery, then press and release power button for one second, 30 times, and put battery and power supply back. It will discharge static charges from capacitors, actually removing any leftover power, and might allow computer to come back online.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://www.masnick.com/2007/09/07/the-secret-thinkpad-powerbutton-code-to-bring-dead-laptops-back-to-life/"&gt;The Secret Thinkpad Powerbutton Code To Bring Dead Laptops Back To Life&lt;/a&gt; (Hacker News thread with more tips &lt;a class="reference external" href="https://news.ycombinator.com/item?id=26932247"&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>ROracle installation</title><link href="https://aligot-death.space/wiki/sysadmin/roracle-install-en" rel="alternate"></link><published>2021-05-11T18:30:00+02:00</published><updated>2021-05-11T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-05-11:/wiki/sysadmin/roracle-install-en</id><summary type="html">&lt;p class="first last"&gt;ROracle rough installation bash history&lt;/p&gt;
</summary><content type="html">&lt;p&gt;ROracle rough installation bash history&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;1008  [12/01/18 - 16:30:24] R CMD INSTALL ROracle_1.3-1.tar.gz
&lt;span class="ln"&gt; 2 &lt;/span&gt;1009  [12/01/18 - 16:33:07] yum list oracle
&lt;span class="ln"&gt; 3 &lt;/span&gt;1010  [12/01/18 - 16:33:16] yum search oracle
&lt;span class="ln"&gt; 4 &lt;/span&gt;1011  [12/01/18 - 16:33:50] yum install oracle-instantclient12.1-devel.x86_64
&lt;span class="ln"&gt; 5 &lt;/span&gt;1012  [12/01/18 - 16:34:06] locate oracle
&lt;span class="ln"&gt; 6 &lt;/span&gt;1013  [12/01/18 - 16:34:26] find /usr -name &amp;quot;oracle&amp;quot;
&lt;span class="ln"&gt; 7 &lt;/span&gt;1014  [12/01/18 - 16:34:46] R CMD INSTALL --configure-args='--with-oci-lib=/usr/lib/oracle/12.1/client64/lib --with-oci-inc=/usr/include/oracle/12.1/client64' ROracle_1.3-1.tar.gz
&lt;span class="ln"&gt; 8 &lt;/span&gt;1015  [12/01/18 - 16:35:33] stat /softwares/R/library/ROracle/libs/ROracle.so'
&lt;span class="ln"&gt; 9 &lt;/span&gt;1016  [12/01/18 - 16:35:35] stat /softwares/R/library/ROracle/libs/ROracle.so
&lt;span class="ln"&gt;10 &lt;/span&gt;1017  [12/01/18 - 16:39:27] stat =/opt/oracle/instantclient
&lt;span class="ln"&gt;11 &lt;/span&gt;1018  [12/01/18 - 16:39:30] stat /opt/oracle/instantclient
&lt;span class="ln"&gt;12 &lt;/span&gt;1019  [12/01/18 - 16:39:56] locate oracle
&lt;span class="ln"&gt;13 &lt;/span&gt;1020  [12/01/18 - 16:40:31] export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64:$LD_LIBRARY_PATH
&lt;span class="ln"&gt;14 &lt;/span&gt;1021  [12/01/18 - 16:40:34] R CMD INSTALL --configure-args='--with-oci-lib=/usr/lib/oracle/12.1/client64/lib --with-oci-inc=/usr/include/oracle/12.1/client64' ROracle_1.3-1.tar.gz
&lt;span class="ln"&gt;15 &lt;/span&gt;1022  [12/01/18 - 16:40:48] locate libclntsh.so.12.1
&lt;span class="ln"&gt;16 &lt;/span&gt;1023  [12/01/18 - 16:41:01] export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib:$LD_LIBRARY_PATH
&lt;span class="ln"&gt;17 &lt;/span&gt;1024  [12/01/18 - 16:41:02] R CMD INSTALL --configure-args='--with-oci-lib=/usr/lib/oracle/12.1/client64/lib --with-oci-inc=/usr/include/oracle/12.1/client64' ROracle_1.3-1.tar.gz
&lt;span class="ln"&gt;18 &lt;/span&gt;1025  [12/01/18 - 16:41:13] R
&lt;span class="ln"&gt;19 &lt;/span&gt;1026  [12/01/18 - 16:43:46] history
&lt;/pre&gt;
</content><category term="wiki"></category></entry><entry><title>CSS only masonry layout</title><link href="https://aligot-death.space/wiki/webdev/flex-masonry-en" rel="alternate"></link><published>2021-04-23T19:14:00+02:00</published><updated>2021-04-23T19:14:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-04-23:/wiki/webdev/flex-masonry-en</id><summary type="html">&lt;p class="first last"&gt;Building a &amp;quot;masonry&amp;quot; style image gallery with CSS only&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#what-is-a-masonry-layout" id="toc-entry-1"&gt;What is a masonry layout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#code" id="toc-entry-2"&gt;Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="what-is-a-masonry-layout"&gt;
&lt;h2&gt;What is a masonry layout&lt;a class="headerlink" href="#what-is-a-masonry-layout" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A masonry layout is simply a gallery of images in which elements are scaled to obtained a single block with straight borders on the left and the right (in the case of an horizontal layout).&lt;/p&gt;
&lt;p&gt;While doing a basic layout is relatively easy, it gets harder when the direct children of the gallery aren't the images themselves, for instance when they are links to the page containing its full size.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;div class = "flex-masonry-20" style = "background-color: var(--dark); padding: 5px;"&gt;
  &lt;a style = "margin: 5px;" href ="/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png"&gt;&lt;img src = "/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png" alt = "el lissitzky beat the whites with the red-wedge"&gt;&lt;/a&gt;
  &lt;a style = "margin: 5px;" href ="http://www.phrack.org/issues/61/1.html"&gt;&lt;img src = "/images/phrack61_intro.png" alt = "phrack61 zine intro"&gt;&lt;/a&gt;
  &lt;a style = "margin: 5px;" href ="/images/weingart.png"&gt;&lt;img src = "/images/weingart.png" alt = "weingart"&gt;&lt;/a&gt;
  &lt;a style = "margin: 5px;" href = "https://brandur.org/minimalism"&gt;&lt;img src = "/images/brandur.org.png"&gt;&lt;/a&gt;
  &lt;a style = "margin: 5px;" href = "http://cachestocaches.com/2018/9/ai-translation-more-language/"&gt;&lt;img src = "/images/cachestocaches.com.png"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="code"&gt;
&lt;h2&gt;Code&lt;a class="headerlink" href="#code" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;html&lt;/strong&gt; for the previous example:&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;flex-masonry&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 2 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 3 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;el lissitzky beat the whites with the red-wedge&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 5 &lt;/span&gt;
&lt;span class="ln"&gt; 6 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.phrack.org/issues/61/1.html&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/images/phrack61_intro.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;phrack61 zine intro&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 8 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 9 &lt;/span&gt;
&lt;span class="ln"&gt;10 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/images/weingart.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;11 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/images/weingart.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;weingart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;12 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;13 &lt;/span&gt;
&lt;span class="ln"&gt;14 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;https://brandur.org/minimalism&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;15 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/images/brandur.org.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;16 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;17 &lt;/span&gt;
&lt;span class="ln"&gt;18 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;http://cachestocaches.com/2018/9/ai-translation-more-language/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;19 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/images/cachestocaches.com.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;20 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;21 &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CSS:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt; .flex-masonry {
&lt;span class="ln"&gt; 2 &lt;/span&gt;   display: flex;
&lt;span class="ln"&gt; 3 &lt;/span&gt;   flex-wrap: wrap;
&lt;span class="ln"&gt; 4 &lt;/span&gt;   margin: auto;
&lt;span class="ln"&gt; 5 &lt;/span&gt; }
&lt;span class="ln"&gt; 6 &lt;/span&gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt; .flex-masonry a {
&lt;span class="ln"&gt; 8 &lt;/span&gt;   overflow: hidden;
&lt;span class="ln"&gt; 9 &lt;/span&gt; }
&lt;span class="ln"&gt;10 &lt;/span&gt;
&lt;span class="ln"&gt;11 &lt;/span&gt; .flex-masonry a img {
&lt;span class="ln"&gt;12 &lt;/span&gt;   max-height: 20vh;
&lt;span class="ln"&gt;13 &lt;/span&gt;   object-fit: cover;
&lt;span class="ln"&gt;14 &lt;/span&gt;   transform: scale(1);
&lt;span class="ln"&gt;15 &lt;/span&gt;   transition: all 0.3s ease;
&lt;span class="ln"&gt;16 &lt;/span&gt;   width: auto;
&lt;span class="ln"&gt;17 &lt;/span&gt; }
&lt;span class="ln"&gt;18 &lt;/span&gt;
&lt;span class="ln"&gt;19 &lt;/span&gt; .flex-masonry a img:hover {
&lt;span class="ln"&gt;20 &lt;/span&gt;   transform: scale(1.05);
&lt;span class="ln"&gt;21 &lt;/span&gt;  }
&lt;span class="ln"&gt;22 &lt;/span&gt;
&lt;span class="ln"&gt;23 &lt;/span&gt; /*https://medium.com/&amp;#64;iamryanyu/how-to-align-last-flex-item-to-right-73512e4e5912*/
&lt;span class="ln"&gt;24 &lt;/span&gt; .flex-masonry:last-child {
&lt;span class="ln"&gt;25 &lt;/span&gt;   margin-left: auto;
&lt;span class="ln"&gt;26 &lt;/span&gt; }
&lt;span class="ln"&gt;27 &lt;/span&gt;
&lt;span class="ln"&gt;28 &lt;/span&gt; .flex-masonry &amp;gt; a {
&lt;span class="ln"&gt;29 &lt;/span&gt;   align-items: stretch;
&lt;span class="ln"&gt;30 &lt;/span&gt;   display: flex;
&lt;span class="ln"&gt;31 &lt;/span&gt;   flex-direction: column;
&lt;span class="ln"&gt;32 &lt;/span&gt;   flex: auto;
&lt;span class="ln"&gt;33 &lt;/span&gt;   margin: 1px;
&lt;span class="ln"&gt;34 &lt;/span&gt; }
&lt;span class="ln"&gt;35 &lt;/span&gt;
&lt;span class="ln"&gt;36 &lt;/span&gt;
&lt;span class="ln"&gt;37 &lt;/span&gt; &amp;#64;media only screen and (max-width: 800px) {
&lt;span class="ln"&gt;38 &lt;/span&gt;   /* For mobile phones: */
&lt;span class="ln"&gt;39 &lt;/span&gt;   /* switch to one image per line, and no zoom effect */
&lt;span class="ln"&gt;40 &lt;/span&gt;   .flex-masonry a {
&lt;span class="ln"&gt;41 &lt;/span&gt;     max-width: none;
&lt;span class="ln"&gt;42 &lt;/span&gt;     display: initial;
&lt;span class="ln"&gt;43 &lt;/span&gt;   }
&lt;span class="ln"&gt;44 &lt;/span&gt;
&lt;span class="ln"&gt;45 &lt;/span&gt;   .flex-masonry a img {
&lt;span class="ln"&gt;46 &lt;/span&gt;     max-height: initial;
&lt;span class="ln"&gt;47 &lt;/span&gt;     min-height: initial;
&lt;span class="ln"&gt;48 &lt;/span&gt;     height: auto;
&lt;span class="ln"&gt;49 &lt;/span&gt;     width: 100%;
&lt;span class="ln"&gt;50 &lt;/span&gt;   }
&lt;span class="ln"&gt;51 &lt;/span&gt;
&lt;span class="ln"&gt;52 &lt;/span&gt;   .flex-masonry a:hover img {
&lt;span class="ln"&gt;53 &lt;/span&gt;     transform: none;
&lt;span class="ln"&gt;54 &lt;/span&gt;   }
&lt;span class="ln"&gt;55 &lt;/span&gt; }
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>strace</title><link href="https://aligot-death.space/wiki/sysadmin/strace-en" rel="alternate"></link><published>2021-04-23T19:05:00+02:00</published><updated>2021-04-23T19:05:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-04-23:/wiki/sysadmin/strace-en</id><summary type="html">&lt;p class="first last"&gt;A simple go-to guide for strace to quickly debug a program&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#what-strace-is" id="toc-entry-1"&gt;What strace is&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#basic-commands" id="toc-entry-2"&gt;Basic commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#filtering" id="toc-entry-3"&gt;Filtering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#reading-the-file-s" id="toc-entry-4"&gt;Reading the file(s)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="what-strace-is"&gt;
&lt;h2&gt;What strace is&lt;a class="headerlink" href="#what-strace-is" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A quick excerpt from the &lt;a class="reference external" href="https://man7.org/linux/man-pages/man1/strace.1.html"&gt;man page&lt;/a&gt; to learn what &lt;tt class="docutils literal"&gt;strace&lt;/tt&gt; is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
``strace`` is a useful diagnostic, instructional, and debugging tool [...] Each line in the trace contains the system call name, followed by its arguments in parentheses and its return value.
&lt;/pre&gt;
&lt;p&gt;A system call is simply what programs use to ask the system to do operations like opening a file, writing in it, creating a now process... etc. It is not necessary to understand every single system call to use strace.&lt;/p&gt;
&lt;p&gt;Once the package &lt;tt class="docutils literal"&gt;strace&lt;/tt&gt; is installed you can either trace a program when launching it, or hook yourself to an already running thread.&lt;/p&gt;
&lt;p&gt;Fair warning, &lt;tt class="docutils literal"&gt;strace&lt;/tt&gt; is quite resource intensive, and will slow down your program further if you simply print its output to your terminal instead of sending it into files, so it's better to send it to a file and &amp;quot;tail -f&amp;quot; it. Also, as &lt;tt class="docutils literal"&gt;strace&lt;/tt&gt; creates one file per process, so for multi-process app I advise creating a dedicated directory like /tmp/strace_my_program.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="basic-commands"&gt;
&lt;h2&gt;Basic commands&lt;a class="headerlink" href="#basic-commands" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to trace a program/script that as you launch it (arguments are explained below):&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;strace&lt;span class="w"&gt; &lt;/span&gt;-ffqttv&lt;span class="w"&gt; &lt;/span&gt;-s1000&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;/tmp/strace_0/strace.log&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;your_command_here&amp;gt;
&lt;/pre&gt;
&lt;p&gt;For instance:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;strace&lt;span class="w"&gt; &lt;/span&gt;-ffqttv&lt;span class="w"&gt; &lt;/span&gt;-s1000&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;/tmp/strace_0/strace.log&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;main.py&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;And if you want to attach yourself to an already running process:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;strace&lt;span class="w"&gt; &lt;/span&gt;-ffqttv&lt;span class="w"&gt; &lt;/span&gt;-s1000&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;/tmp/strace_0/strace.log&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;pid&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;process&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The additional arguments I put are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-ff&lt;/span&gt;&lt;/tt&gt;: follow 'forks' (children processes) and send their output into separate files;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-q&lt;/span&gt;&lt;/tt&gt;: remove &lt;tt class="docutils literal"&gt;strace&lt;/tt&gt; messages about &amp;quot;attaching&amp;quot; and &amp;quot;detaching&amp;quot;, which aren't really useful;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-tt&lt;/span&gt;&lt;/tt&gt;: add timestamps with milliseconds precision to the logs, especially useful to debug multi-process apps;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-v&lt;/span&gt;&lt;/tt&gt;: do not abbreviate calls' details, which can be useful;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-s1000&lt;/span&gt;&lt;/tt&gt;: specify maximum string size (default is 32, which is often too small);&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-o&lt;/span&gt; /tmp/strace_0/strace.log&lt;/tt&gt;: send the output to this file: if there are multiple processes, the files will be created as strace.log.&amp;lt;pid&amp;gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I really advised to use these parameters for more useful logs but you can obviously adapt them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="filtering"&gt;
&lt;h2&gt;Filtering&lt;a class="headerlink" href="#filtering" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you know what you're looking for, you can filter the output. For instance, you can filter system calls based on their category:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=file&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=process&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=network&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=signal&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=ipc&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=desc&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt; trace=memory&lt;/tt&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And even filter directly the system calls: for instance, see only when the program writes to standard (stdout) and error (stderr) output:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;write&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,2
&lt;/pre&gt;
&lt;p&gt;You can also narrow down the output based on a file path:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
-P&lt;span class="w"&gt; &lt;/span&gt;/var
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="reading-the-file-s"&gt;
&lt;h2&gt;Reading the file(s)&lt;a class="headerlink" href="#reading-the-file-s" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;strace is quite verbose, but as its output is standardized, you can use plugins or even settings in your text editor to highlight it. For instance in vim, simply type:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
:set&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;filetype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;strace
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>triggering i3lock on sleep</title><link href="https://aligot-death.space/wiki/sysadmin/i3lock-sleep-en" rel="alternate"></link><published>2021-04-22T18:34:00+02:00</published><updated>2021-04-22T18:34:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-04-22:/wiki/sysadmin/i3lock-sleep-en</id><summary type="html">&lt;p class="first last"&gt;Triggering i3lock when the computer goes to sleep&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;adapted from&lt;/em&gt; &lt;a class="reference external" href="https://wiki.debian.org/ScreenLockingOnSleep"&gt;https://wiki.debian.org/ScreenLockingOnSleep&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;/etc/systemd/system/i3lock.service&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 2 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;i3lock&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 3 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Before&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sleep.target&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 4 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 5 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 6 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nemecle&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 7 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forking&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 8 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DISPLAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;:0&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 9 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/nemecle/.bin/scripts/lock.sh&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;10 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;11 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;12 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sleep.target
&lt;/pre&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;lock.sh&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;span class="ln"&gt;2 &lt;/span&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;3 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;i3lock&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/Wallpaper_lock.png
&lt;/pre&gt;
</content><category term="wiki"></category></entry><entry><title>nemecl.eu's design</title><link href="https://aligot-death.space/wiki/webdev/ne-design-en" rel="alternate"></link><published>2021-04-21T18:23:00+02:00</published><updated>2021-04-21T18:23:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-04-21:/wiki/webdev/ne-design-en</id><summary type="html">&lt;p class="first last"&gt;nemecl.eu website style guide&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;The design will be perpetually changing&lt;/em&gt;&lt;/p&gt;
&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#general-idea" id="toc-entry-1"&gt;General idea&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#inspiration-board" id="toc-entry-2"&gt;Inspiration board&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#typefaces-and-fonts" id="toc-entry-3"&gt;Typefaces and fonts&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#typefaces" id="toc-entry-4"&gt;Typefaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#fonts" id="toc-entry-5"&gt;fonts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#colours" id="toc-entry-6"&gt;Colours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#design" id="toc-entry-7"&gt;Design&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#headings" id="toc-entry-8"&gt;Headings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#text-elements" id="toc-entry-9"&gt;Text elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#frames" id="toc-entry-10"&gt;&amp;quot;Frames&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#details-summary-element" id="toc-entry-11"&gt;Details-summary element&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#left-and-right-aligned-elements" id="toc-entry-12"&gt;left and right aligned elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#forms" id="toc-entry-13"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#code-highlighting" id="toc-entry-14"&gt;Code highlighting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="general-idea"&gt;
&lt;h2&gt;General idea&lt;a class="headerlink" href="#general-idea" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Look&lt;/strong&gt;: 80 hacker zines, terminal look, screen printed zines;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To explore&lt;/strong&gt;: constructivist look (e.g. El Lissitzky), swiss Punk typography, brutalist architecture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Execution&lt;/strong&gt;: monospace typefaces, spaced design, visual hierarchy through size, weight, position and colour rather than decoration, very few colours and generally low contrast colours to imitate print limitations, big blocks of colour.&lt;/p&gt;
&lt;div class="section" id="inspiration-board"&gt;
&lt;h3&gt;Inspiration board&lt;a class="headerlink" href="#inspiration-board" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class = "flex-masonry-20"&gt;
  &lt;a href ="/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png"&gt;&lt;img src = "/images/el-lissitzky_beat-the-whites-with-the-red-wedge.png" alt = "el lissitzky beat the whites with the red-wedge"&gt;&lt;/a&gt;
  &lt;a href ="http://www.phrack.org/issues/61/1.html"&gt;&lt;img src = "/images/phrack61_intro.png" alt = "phrack61 zine intro"&gt;&lt;/a&gt;
  &lt;a href ="/images/weingart.png"&gt;&lt;img src = "/images/weingart.png" alt = "weingart"&gt;&lt;/a&gt;
  &lt;a href = "https://brandur.org/minimalism"&gt;&lt;img src = "/images/brandur.org.png"&gt;&lt;/a&gt;
  &lt;a href = "http://cachestocaches.com/2018/9/ai-translation-more-language/"&gt;&lt;img src = "/images/cachestocaches.com.png"&gt;&lt;/a&gt;
  &lt;a href = "http://overlapping-grid.webflow.io/"&gt;&lt;img src = "/images/overlapping-grid.webflow.io.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.eff.org/"&gt;&lt;img src = "/images/eff.org.png"&gt;&lt;/a&gt;
  &lt;a href = "https://christine.website/blog"&gt;&lt;img src = "/images/christine.website-blog.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.destroyallsoftware.com/compendium/network-protocols?share_key=97d3ba4c24d21147"&gt;&lt;img src = "/images/www.destroyallsoftware.com.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.bakadesuyo.com/"&gt;&lt;img src = "/images/www.bakadesuyo.com.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.laquadrature.net/censureterro/"&gt;&lt;img src = "/images/www.laquadrature.net.png"&gt;&lt;/a&gt;
  &lt;a href = "https://zachholman.com/talk/utc-is-enough-for-everyone-right"&gt;&lt;img src = "/images/zachholman.com.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/"&gt;&lt;img src = "/images/www.hamvocke.com-blog.png"&gt;&lt;/a&gt;
  &lt;a href = "https://lord.io/"&gt;&lt;img src = "/images/lord.io.png"&gt;&lt;/a&gt;
  &lt;a href = "https://haywirez.com/iron-curtains-considered-harmful/"&gt;&lt;img src = "/images/haywirez.com.png"&gt;&lt;/a&gt;
  &lt;a href = "http://samedi.collectifs.net/"&gt;&lt;img src = "/images/samedi.collectifs.net.png"&gt;&lt;/a&gt;
  &lt;a href = "https://collapseos.org/forth.html"&gt;&lt;img src = "/images/collapseos.org.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.matuzo.at/blog/i-totally-forgot-about-print-style-sheets/"&gt;&lt;img src = "/images/www.matuzo.at-blog.png"&gt;&lt;/a&gt;
  &lt;a href = "https://bjornpagen.com/blog/linux-security"&gt;&lt;img src = "/images/bjornpagen.com-blog.png"&gt;&lt;/a&gt;
  &lt;a href = "https://www.libre-parcours.net/"&gt;&lt;img src = "/images/www.libre-parcours.net.png"&gt;&lt;/a&gt;
  &lt;a href = "https://julian.digital/"&gt;&lt;img src = "/images/julian.digital.png"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="typefaces-and-fonts"&gt;
&lt;h2&gt;Typefaces and fonts&lt;a class="headerlink" href="#typefaces-and-fonts" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="typefaces"&gt;
&lt;h3&gt;Typefaces&lt;a class="headerlink" href="#typefaces" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span style = "font-family: 'Inconsolata', monospace;"&gt;"Inconsolata" almost all elements by now&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style = "font-family: 'dejavusansmonobook', monospace;"&gt;Formely "Deja Vu Sans Mono Book" for title elements&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style = "font-family: 'Libre Baskerville', serif;"&gt;"Libre Baskerville" as potential non-monospace body typeface&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="section" id="fonts"&gt;
&lt;h3&gt;fonts&lt;a class="headerlink" href="#fonts" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Heavy use of various font weights, leveraging the fact that Inconsolata is available from 200 to 900.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Delivery of 900 seems to fail as of now&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span style = "font-size: 1.5em; font-weight: 900"&gt;900: Biggest, for special elements&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style = "font-size: 1.5em; font-weight: 700"&gt;700: Bold elements (and titles)&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style = "font-size: 1.5em; font-weight: 400"&gt;400: regular, for text body&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style = "font-size: 1.5em; font-weight: 200"&gt;200: Ultra thin, for visual elements or very big texts&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Example&lt;/p&gt;
&lt;p style = "font-size: 1.5em;"&gt;
  &lt;span style = "font-weight: 700"&gt;Billy and his shoes&lt;/span&gt; &lt;span style = "font-weight: 200"&gt; — &lt;/span&gt;20/10/2021 &lt;span style = "font-weight: 200"&gt;@&lt;/span&gt; THE DIRTY BARN&lt;/span&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="colours"&gt;
&lt;h2&gt;Colours&lt;a class="headerlink" href="#colours" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--text); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#002a38&lt;/strong&gt;&lt;br&gt;text&lt;/div&gt;
  &lt;div style = "background-color: var(--darkest); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#213e48&lt;/strong&gt;&lt;br&gt;darkest&lt;/div&gt;
  &lt;div style = "background-color: var(--darker); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#294d59&lt;/strong&gt;&lt;br&gt;darker&lt;/div&gt;
  &lt;div style = "background-color: var(--dark); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#355a65&lt;/strong&gt;&lt;br&gt;dark&lt;/div&gt;
  &lt;div style = "background-color: var(--intermediate); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#446874&lt;/strong&gt;&lt;br&gt;intermediate&lt;/div&gt;
  &lt;div style = "background-color: var(--light); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#86a6b0&lt;/strong&gt;&lt;br&gt;light&lt;/div&gt;
  &lt;div style = "background-color: var(--lighter); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#b4c9d0&lt;/strong&gt;&lt;br&gt;lighter&lt;/div&gt;
  &lt;div style = "background-color: var(--lightest); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#dbe5e9&lt;/strong&gt;&lt;br&gt;lightest&lt;/div&gt;
  &lt;div style = "background-color: var(--background); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#f6f5f0&lt;/strong&gt;&lt;br&gt;background&lt;/div&gt;
  &lt;div style = "background-color: var(--accent); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#a54747&lt;/strong&gt;&lt;br&gt;accent&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="design"&gt;
&lt;h2&gt;Design&lt;a class="headerlink" href="#design" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="headings"&gt;
&lt;h3&gt;Headings&lt;a class="headerlink" href="#headings" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style = "background-color: white; border-left: 1.5px dashed var(--intermediate);border-right: 1.5px dashed var(--intermediate);"&gt;
  &lt;h1&gt;Heading 1&lt;/h1&gt;
  &lt;h2&gt;Heading 2&lt;/h2&gt;
  &lt;h3&gt;Heading 3&lt;/h3&gt;
  &lt;h4&gt;Heading 4&lt;/h4&gt;
  &lt;p&gt;Paraphraph: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="text-elements"&gt;
&lt;h3&gt;Text elements&lt;a class="headerlink" href="#text-elements" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;drop-cap-word + block:&lt;/p&gt;
&lt;span class = "block drop-cap-word"&gt;INTRO&lt;/span&gt;&lt;p&gt;Paraphraph: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco &lt;span class = "block"&gt;laboris&lt;/span&gt; nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;&lt;/div&gt;
&lt;div class="section" id="frames"&gt;
&lt;h3&gt;&amp;quot;Frames&amp;quot;&lt;a class="headerlink" href="#frames" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px; text-align: center"&gt;
    default version
  &lt;/p&gt;
  &lt;p style = "width: 200px; text-align: center"&gt;
    "full" version
  &lt;/p&gt;
&lt;/div&gt;

&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "alert"&gt;
    &lt;strong style = "font-weight: 900"&gt;Alert&lt;/strong&gt;&lt;br&gt;
    zis is alert
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "alert-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;Aleeeert&lt;/strong&gt;&lt;br&gt;
    aaaaaaaaa
  &lt;/p&gt;
&lt;/div&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "warning"&gt;
    &lt;strong style = "font-weight: 900"&gt;Warning&lt;/strong&gt;&lt;br&gt;
    Things are bad
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "warning-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;Waaarning&lt;/strong&gt;&lt;br&gt;
    You may panic
  &lt;/p&gt;
&lt;/div&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "success"&gt;
    &lt;strong style = "font-weight: 900"&gt;Success&lt;/strong&gt;&lt;br&gt;
    Everything is cool
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "success-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;Succeeeesss&lt;/strong&gt;&lt;br&gt;
    But you're full of it
  &lt;/p&gt;
&lt;/div&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "blue"&gt;
    &lt;strong style = "font-weight: 900"&gt;Blue&lt;/strong&gt;&lt;br&gt;
    Nice blue hey
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "blue-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;Bluuuue&lt;/strong&gt;&lt;br&gt;
    Lot of it
  &lt;/p&gt;
&lt;/div&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "dark"&gt;
    &lt;strong style = "font-weight: 900"&gt;Dark&lt;/strong&gt;&lt;br&gt;
    Dark end
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "dark-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;So dark&lt;/strong&gt;&lt;br&gt;
    Dark end
  &lt;/p&gt;
&lt;/div&gt;
&lt;div style = "display: flex; justify-content: space-between; width: 410px;"&gt;
  &lt;p style = "width: 200px;" class = "charcoal"&gt;
    &lt;strong style = "font-weight: 900"&gt;Charcoal&lt;/strong&gt;&lt;br&gt;
    Dark end
  &lt;/p&gt;
  &lt;p style = "width: 200px;" class = "charcoal-full"&gt;
    &lt;strong style = "font-weight: 900"&gt;So Charcoal&lt;/strong&gt;&lt;br&gt;
    Dark end
  &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="details-summary-element"&gt;
&lt;h3&gt;Details-summary element&lt;a class="headerlink" href="#details-summary-element" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Here is a summary.&lt;/b&gt;&lt;br&gt;
this is a summary that can be clicked to view/hide its details &lt;/summary&gt;
Even though there is not much to see here.
&lt;/details&gt;&lt;/div&gt;
&lt;div class="section" id="left-and-right-aligned-elements"&gt;
&lt;h3&gt;left and right aligned elements&lt;a class="headerlink" href="#left-and-right-aligned-elements" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="figure align-left"&gt;
  &lt;p class="caption"&gt;I'm here here.&lt;/p&gt;
&lt;/div&gt;&lt;div class="figure align-right"&gt;
  &lt;p class="caption"&gt;And here.&lt;/p&gt;
&lt;/div&gt;&lt;div style = "width: 600px"&gt;
  &lt;p&gt;
    These elements are not meant for this text layout, so they might overlap.
  &lt;/p&gt;
  &lt;p&gt;
    But they are responsive, as they will merge within the text as a float element on tablets, and as a full width block on mobile.
  &lt;/p&gt;&lt;p&gt;Footnotes are by default right-aligned, but will also turn into a full-width element if the viewport is not wide enough. &lt;a class="footnote-reference" href="#footnote-1" id="footnote-reference-1"&gt;[1]&lt;/a&gt;.&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="footnote-1" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label" /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Like so. Likewise, those are not meant for this text layout.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div class="section" id="forms"&gt;
&lt;h3&gt;Forms&lt;a class="headerlink" href="#forms" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;form&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;Contact&lt;/legend&gt;
    &lt;p&gt;
      &lt;label&gt;Name&lt;/label&gt;
      &lt;input type="text" name="name" value="" id="name"&gt;
    &lt;/p&gt;
    &lt;p&gt;
      &lt;label&gt;Email&lt;/label&gt;
      &lt;input type="text" name="city" value="" id="email"&gt;
    &lt;/p&gt;
    &lt;p&gt;
      &lt;label&gt;Message:&lt;/label&gt;
      &lt;textarea name="comment" rows="8" cols="40"&gt;&lt;/textarea&gt;
    &lt;/p&gt;
    &lt;p style = "text-align: right"&gt;
     &lt;button&gt;Send&lt;/button&gt;
    &lt;/p&gt;
  &lt;/fieldset&gt;
  &lt;p&gt;
    &lt;input type="checkbox" name="Yes" value="" id="Yes"&gt; &lt;label&gt;Yes&lt;/label&gt;
    &lt;input type="checkbox" name="No" value="" id="No"&gt; &lt;label&gt;No&lt;/label&gt;
    &lt;input type="checkbox" name="Maybe" value="" id="Maybe"&gt; &lt;label&gt;Maybe&lt;/label&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;input type="radio" name="One" value="" id="One"&gt; &lt;label&gt;One&lt;/label&gt;
    &lt;input type="radio" name="Two" value="" id="Two"&gt; &lt;label&gt;Two&lt;/label&gt;
    &lt;input type="radio" name="Three" value="" id="Three"&gt;Three&lt;label&gt;
  &lt;/p&gt;

&lt;/form&gt;&lt;/div&gt;
&lt;div class="section" id="code-highlighting"&gt;
&lt;h3&gt;Code highlighting&lt;a class="headerlink" href="#code-highlighting" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here is an inline literal element: &lt;tt class="docutils literal"&gt;cat base_* &amp;gt; base.css&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Docutils, the software used by pelican to generate this page from RestructuredText, seems to turn inline literals into &lt;tt class="docutils literal"&gt;&amp;lt;tt&amp;gt;&lt;/tt&gt; elements &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tt"&gt;which are deprecated&lt;/a&gt; instead of &lt;tt class="docutils literal"&gt;&amp;lt;code&amp;gt;&lt;/tt&gt; elements. Might need to be looked into.&lt;/p&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;&amp;lt;pre&amp;gt;&lt;/tt&gt; blocks are as of now a loose implementation of the &lt;a class="reference external" href="https://nordtheme.com/"&gt;Nord colour theme&lt;/a&gt; and remained to be defined. The line numbers disappear on hover to avoid interfering with copy-pasting.&lt;/p&gt;
&lt;p&gt;Code (without highlighting):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;usermod nemecle -aG sudo
&lt;/pre&gt;
&lt;p&gt;Code (with highlighting):&lt;/p&gt;
&lt;pre class="code python literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt; &lt;span class="c1"&gt;#!/usr/bin/python3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 2 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;
&lt;/span&gt;&lt;span class="ln"&gt; 3 &lt;/span&gt;&lt;span class="sd"&gt; this is a test script.
&lt;/span&gt;&lt;span class="ln"&gt; 4 &lt;/span&gt;&lt;span class="sd"&gt; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 5 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 6 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 7 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 8 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt; 9 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;10 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;PNG&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;11 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;12 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;13 &lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;
&lt;/span&gt;&lt;span class="ln"&gt;14 &lt;/span&gt;&lt;span class="sd"&gt;     main loop
&lt;/span&gt;&lt;span class="ln"&gt;15 &lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;16 &lt;/span&gt;&lt;span class="sd"&gt;     &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;17 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;18 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;     &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Hello world&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;19 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;20 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;     &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;21 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;         &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;22 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;     &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;23 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;24 &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;25 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;26 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;     &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Setting IPv6 on a server</title><link href="https://aligot-death.space/wiki/webdev/ipv6-webserver-en" rel="alternate"></link><published>2021-04-19T18:10:00+02:00</published><updated>2021-04-19T18:10:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-04-19:/wiki/webdev/ipv6-webserver-en</id><summary type="html">&lt;p class="first last"&gt;Setting up a modern web server with IPv6&lt;/p&gt;
</summary><content type="html">&lt;p class="warning"&gt;Potentially out of date&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on&lt;/em&gt; &lt;a class="reference external" href="https://docs.ovh.com/gb/en/dedicated/network-ipv6/"&gt;this documentation from OVH&lt;/a&gt; &lt;em&gt;adapted for my own uses, on a debian-nginx server&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First, add to the file &lt;tt class="docutils literal"&gt;/etc/sysctl.conf&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt; net.ipv6.conf.all.autoconf=0
&lt;span class="ln"&gt;2 &lt;/span&gt; net.ipv6.conf.all.accept_ra=0
&lt;/pre&gt;
&lt;p&gt;Then to apply changes:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo sysctl -p
&lt;/pre&gt;
&lt;p&gt;add to /etc/network/interfaces (or /etc/network/interfaces.d/50-cloud-init.cfg for OVH):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt; iface eth0 inet6 static
&lt;span class="ln"&gt;2 &lt;/span&gt; address YOUR_IPv6
&lt;span class="ln"&gt;3 &lt;/span&gt; netmask 128
&lt;span class="ln"&gt;4 &lt;/span&gt;
&lt;span class="ln"&gt;5 &lt;/span&gt; post-up /sbin/ip -f inet6 route add IPv6_GATEWAY dev eth0
&lt;span class="ln"&gt;6 &lt;/span&gt; post-up /sbin/ip -f inet6 route add default via IPv6_GATEWAY
&lt;span class="ln"&gt;7 &lt;/span&gt; pre-down /sbin/ip -f inet6 route del IPv6_GATEWAY dev eth0
&lt;span class="ln"&gt;8 &lt;/span&gt; pre-down /sbin/ip -f inet6 route del default via IPv6_GATEWAY
&lt;/pre&gt;
&lt;p&gt;For some reasons guides add a indentation but it seems to be counter productive (note to self, read documentation more carefully)&lt;/p&gt;
&lt;p&gt;And finally to apply it (make sure to have a KVM on hand in case network interfaces fail to come back):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo /etc/init.d/networking reload
&lt;/pre&gt;
&lt;p&gt;The reload command gives more verbose logs.&lt;/p&gt;
&lt;p&gt;Then add AAAA record on registrar.&lt;/p&gt;
&lt;p&gt;And finally add to website configuration (nginx):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt; listen [::]:443 ssl http2 default_server;
&lt;/pre&gt;
&lt;p&gt;And to apply:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo service nginx reload
&lt;/pre&gt;
</content><category term="wiki"></category></entry><entry><title>Use two different IPs on a single web server</title><link href="https://aligot-death.space/wiki/sysadmin/2-ips-1-webserver-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-04-14T15:23:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/2-ips-1-webserver-en</id><summary type="html">&lt;p class="first last"&gt;Linux tips and notes.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;see &amp;quot;two ip one vps&amp;quot;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;auto ens3
&lt;span class="ln"&gt; 2 &lt;/span&gt;iface ens3 inet dhcp
&lt;span class="ln"&gt; 3 &lt;/span&gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;auto ens3:0
&lt;span class="ln"&gt; 5 &lt;/span&gt;iface ens3:0 inet static
&lt;span class="ln"&gt; 6 &lt;/span&gt;address &amp;lt;ip#1&amp;gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt;netmask 255.255.255.255
&lt;span class="ln"&gt; 8 &lt;/span&gt;
&lt;span class="ln"&gt; 9 &lt;/span&gt;auto ens3:1
&lt;span class="ln"&gt;10 &lt;/span&gt;iface ens3:1 inet static
&lt;span class="ln"&gt;11 &lt;/span&gt;address &amp;lt;ip#2&amp;gt;
&lt;span class="ln"&gt;12 &lt;/span&gt;netmask 255.255.255.255
&lt;/pre&gt;
&lt;p&gt;Will say &amp;quot;failed to raise interface&amp;quot;, but ip addr shows it works fine&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://docs.ovh.com/gb/en/public-cloud/configure_a_failover_ip/"&gt;https://docs.ovh.com/gb/en/public-cloud/configure_a_failover_ip/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Configure a failover IP with Debian
Configuring the network interface&lt;/p&gt;
&lt;p&gt;For example purposes, we’re using the following variables:&lt;/p&gt;
&lt;p&gt;Network interface = ens3&lt;/p&gt;
&lt;p&gt;Failover IP address = your_ip_address&lt;/p&gt;
&lt;p&gt;IP alias = 1&lt;/p&gt;
&lt;p&gt;First, connect to your instance via the command line and open up your the network configuration file.&lt;/p&gt;
&lt;p&gt;# nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg&lt;/p&gt;
&lt;p&gt;Next, edit the file with the configuration shown below. This will prevent changes from being made to your network configuration automatically.&lt;/p&gt;
&lt;p&gt;# network: {config: disabled}&lt;/p&gt;
&lt;p&gt;Next, open the network configuration file for editing with the following command:&lt;/p&gt;
&lt;p&gt;# nano /etc/network/interfaces.d/50-cloud-init.cfg&lt;/p&gt;
&lt;p&gt;Then edit the file with the following configuration:&lt;/p&gt;
&lt;p&gt;auto ens3
iface ens3 inet dhcp&lt;/p&gt;
&lt;p&gt;auto ens3:0
iface ens3:0 inet static
address your_ip_address 0
netmask 255.255.255.255&lt;/p&gt;
&lt;p&gt;auto ens3:1
iface ens3:1 inet static
address your_ip_address 1
netmask 255.255.255.255&lt;/p&gt;
&lt;p&gt;Restarting the network service&lt;/p&gt;
&lt;p&gt;Finally, restart the network service with the following command:&lt;/p&gt;
&lt;p&gt;service networking restart&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Ardour</title><link href="https://aligot-death.space/wiki/creation/ardour-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-05-18T18:30:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/creation/ardour-en</id><summary type="html">&lt;p class="first last"&gt;Setting up Ardour on Debian.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#installation" id="toc-entry-1"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#jack-qjackctl" id="toc-entry-2"&gt;JACK/QjackCtl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#midi-keyboard" id="toc-entry-3"&gt;Midi keyboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#plugins" id="toc-entry-4"&gt;plugins&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#noise-gate-reverber-flanger-sidechain-compressor" id="toc-entry-5"&gt;Noise gate, reverber, flanger, sidechain compressor...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#graphic-eq" id="toc-entry-6"&gt;Graphic EQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#synthesiser-helm" id="toc-entry-7"&gt;Synthesiser: Helm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#geonkick" id="toc-entry-8"&gt;Geonkick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#syn-fusion" id="toc-entry-9"&gt;syn-fusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#sound-removal" id="toc-entry-10"&gt;Sound removal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#audio-tips" id="toc-entry-11"&gt;Audio tips&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#recording" id="toc-entry-12"&gt;Recording&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#mixing" id="toc-entry-13"&gt;Mixing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#editing" id="toc-entry-14"&gt;Editing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation"&gt;
&lt;h2&gt;Installation&lt;a class="headerlink" href="#installation" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class="warning"&gt;This guide was tested on Debian.&lt;/p&gt;
&lt;p&gt;install package:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install ardour
&lt;/pre&gt;
&lt;p&gt;follow &lt;a class="reference external" href="https://wiki.debian.org/Ardour"&gt;debian wiki&lt;/a&gt; regarding real time capabilities (make sure user is still in the audio group):&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Add to  the end of the file &lt;tt class="docutils literal"&gt;/etc/security/limits.conf&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&amp;#64;audio                -       memlock         unlimited
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Add to file &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/etc/pam.d/common-session&lt;/span&gt;&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
session required pam_limits.so
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;And you &lt;strong&gt;need&lt;/strong&gt; (contrary to some guides which say that it is a eventuality) to add your own user to the aformentionned &lt;tt class="docutils literal"&gt;audio&lt;/tt&gt; group:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo usermod -aG audio nemecle
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;if no sound, &lt;a class="reference external" href="https://discourse.ardour.org/t/no-sound/90327/2"&gt;https://discourse.ardour.org/t/no-sound/90327/2&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Start QJackCTL and click on setup.&lt;/p&gt;
&lt;p&gt;Then locate the box named “Interface” and click the arrow on the right side of it pointing to the right (do not confuse this with the drop down menu arrow that points down). Here you can see the list of sound devices on your system, select the one you want to use and click “Ok”.&lt;/p&gt;
&lt;p&gt;Click on “Start” on the QJackCTL interface to start Jack.&lt;/p&gt;
&lt;p&gt;Now start Ardour and Select Jack as the audio Backend&lt;/p&gt;
&lt;p&gt;In this picture I have selected Presonus Audiobox 1818VSL as the audio device.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol class="arabic simple" start="4"&gt;
&lt;li&gt;Basic plugins&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install eq10q x42-eq calf-plugins
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="jack-qjackctl"&gt;
&lt;h2&gt;JACK/QjackCtl&lt;a class="headerlink" href="#jack-qjackctl" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you use an audio interface or something, go to settings &amp;gt; advanced and set the input device (might require to fumble around to find the display name for your interface).&lt;/p&gt;
&lt;p&gt;The &amp;quot;connect&amp;quot; window acts like a literal connection bay: for instance, select the input device on the left and the virtual amp on the right and connect them. You can then simply build a circuit like:&lt;/p&gt;
&lt;p&gt;[guitar -&amp;gt; ] audio interface -&amp;gt; virtual amp -&amp;gt; Ardour -&amp;gt; system output (headphones/speakers)&lt;/p&gt;
&lt;p&gt;devices names:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Behringer Q502USB:  &amp;quot;hw:1 USB Audio CODEC&amp;quot;&lt;/li&gt;
&lt;li&gt;my laptop (output): &amp;quot;hw: PCH,1 (ALC3232)&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="midi-keyboard"&gt;
&lt;h2&gt;Midi keyboard&lt;a class="headerlink" href="#midi-keyboard" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://manual.ardour.org/setting-up-your-system/setting-up-midi/midi-on-linux/"&gt;https://manual.ardour.org/setting-up-your-system/setting-up-midi/midi-on-linux/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="plugins"&gt;
&lt;h2&gt;plugins&lt;a class="headerlink" href="#plugins" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="noise-gate-reverber-flanger-sidechain-compressor"&gt;
&lt;h3&gt;Noise gate, reverber, flanger, sidechain compressor...&lt;a class="headerlink" href="#noise-gate-reverber-flanger-sidechain-compressor" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install calf-plugins
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="graphic-eq"&gt;
&lt;h3&gt;Graphic EQ&lt;a class="headerlink" href="#graphic-eq" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;eq10q and x42-eq, both available as packages on debian-based distributions:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install eq10q x42-eq
&lt;/pre&gt;
&lt;p&gt;The EQ10Q (under the category &amp;quot;plugins&amp;quot; for some reasons) does the job well.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="synthesiser-helm"&gt;
&lt;h3&gt;Synthesiser: Helm&lt;a class="headerlink" href="#synthesiser-helm" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="section" id="geonkick"&gt;
&lt;h3&gt;Geonkick&lt;a class="headerlink" href="#geonkick" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;(drums)
&lt;a class="reference external" href="https://github.com/geontime/geonkick"&gt;https://github.com/geontime/geonkick&lt;/a&gt;
install redkite as told
then dependencies
libjack-jackd2-dev, &lt;strong&gt;NOT&lt;/strong&gt; libjack-dev
&amp;gt; apt-get install build-essential cmake qjackctl libjack-jackd2-dev libsndfile-dev rapidjson-dev lv2-dev&lt;/p&gt;
&lt;p&gt;-&amp;gt; open issue once installed ?&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="syn-fusion"&gt;
&lt;h3&gt;syn-fusion&lt;a class="headerlink" href="#syn-fusion" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="section" id="sound-removal"&gt;
&lt;h3&gt;Sound removal&lt;a class="headerlink" href="#sound-removal" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p class="warning"&gt;This program is actually a standalone.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://isse.sourceforge.net/index.html"&gt;http://isse.sourceforge.net/index.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="audio-tips"&gt;
&lt;h2&gt;Audio tips&lt;a class="headerlink" href="#audio-tips" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="recording"&gt;
&lt;h3&gt;Recording&lt;a class="headerlink" href="#recording" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;44kHz/16bit info
&lt;a class="reference external" href="https://www.youtube.com/watch?v=cIQ9IXSUzuM"&gt;https://www.youtube.com/watch?v=cIQ9IXSUzuM&lt;/a&gt; A-&amp;gt;D-&amp;gt;A&lt;/p&gt;
&lt;p&gt;More than just avoiding the &amp;quot;red zone&amp;quot;, stay well below it: modern 16bit precision means that even a rather &amp;quot;low&amp;quot; sound still has a lot a definition and can be safely amplified. Avoid at all cost a signal that is &amp;quot;too hot&amp;quot; (i.e. close to that danger zone), or dynamics management will be a nightmare.&lt;/p&gt;
&lt;p&gt;Guitarix (available as a apt package) does a very good job as a virtual amp, as long as the input device is not garbage (i.e. do not use the default mic input on your computer unless you want to make low-cost &lt;a class="reference external" href="https://www.youtube.com/watch?v=PBaAmg3-RTM"&gt;Lightning Bolt&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="mixing"&gt;
&lt;h3&gt;Mixing&lt;a class="headerlink" href="#mixing" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Ensure that individual tracks stay just below -3dB&lt;/li&gt;
&lt;li&gt;Compress a bit to kill potential hard sound and keep dynamics under control&lt;/li&gt;
&lt;li&gt;EQ:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Boost wide, cut narrow&lt;/li&gt;
&lt;li&gt;add high shelf and low shelf to keep only useful frequencies&lt;/li&gt;
&lt;li&gt;chase parasites by setting a narrow &lt;strong&gt;positive&lt;/strong&gt; filter, move it around until something starts resonating, and cut it off&lt;/li&gt;
&lt;li&gt;boost based on feeling, according to this chart:https://web.archive.org/web/20190417040339/https://www.independentrecording.net/irn/resources/freqchart/main_display.htm&lt;/li&gt;
&lt;/ul&gt;
&lt;ol class="arabic simple" start="4"&gt;
&lt;li&gt;de-essing (reduction of &amp;quot;sss&amp;quot; clashing sounds) on human voice if necessary (plugin to find, check &lt;a class="reference external" href="http://www.linuxdsp.co.uk/download/lv2/download_dsr500/index.html"&gt;http://www.linuxdsp.co.uk/download/lv2/download_dsr500/index.html&lt;/a&gt; and &lt;a class="reference external" href="https://twinysam.github.io/FreeAudioPluginList/"&gt;https://twinysam.github.io/FreeAudioPluginList/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pan &amp;amp; wide&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="section" id="editing"&gt;
&lt;h3&gt;Editing&lt;a class="headerlink" href="#editing" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="figure align-right"&gt;
&lt;a class="reference external image-reference" href="/images/pop_mismatch_amplitude.svg"&gt;
&lt;object data="/images/pop_mismatch_amplitude.svg" style="width: 300px;" type="image/svg+xml"&gt;The screenshot corresponding to the text above.&lt;/object&gt;
&lt;/a&gt;
&lt;p class="caption"&gt;The amplitude of the first audio ends at the bottom ,and the next one start at the top: the speaker will quickly transition between the two, creating a pop.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Be careful with &amp;quot;mismatched amplitude&amp;quot; when sticking two audio elements, including when doing video editing. Avoid it by either:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;doing &amp;quot;snap-to-zero crossing&amp;quot; (always cutting when the amplitude is at zero, but this is not trivial in a video editing software);&lt;/li&gt;
&lt;li&gt;do a small cross fade;&lt;/li&gt;
&lt;li&gt;slightly reduce the sound on the last frame of each element;&lt;/li&gt;
&lt;li&gt;add in the background the &amp;quot;room tone&amp;quot; (i.e., the background sound of the recorded place without any other sound)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Mediawiki</title><link href="https://aligot-death.space/wiki/sysadmin/mediawiki-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-03-22T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/mediawiki-en</id><summary type="html">&lt;p class="first last"&gt;Tips and notes for mediawiki&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#installation" id="toc-entry-1"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#update" id="toc-entry-2"&gt;Update&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation"&gt;
&lt;h2&gt;Installation&lt;a class="headerlink" href="#installation" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;To do during ansible script creation&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="update"&gt;
&lt;h2&gt;Update&lt;a class="headerlink" href="#update" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, backup the database. The &amp;quot;set history +o&amp;quot; disables the shell history to avoid storing passwords:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
set +o history
sudo mysqldump --user=&amp;lt;user&amp;gt; --password=&amp;lt;password&amp;gt; &amp;lt;database&amp;gt; &amp;gt; /var/backup/&amp;lt;database&amp;gt;/&amp;lt;database&amp;gt;-`date +%d-%m-%y`.sql
sudo mysqldump --user=&amp;lt;user&amp;gt; --password=&amp;lt;password&amp;gt; &amp;lt;database&amp;gt; --xml &amp;gt; /var/backup/&amp;lt;database&amp;gt;/&amp;lt;database&amp;gt;-`date +%d-%m-%y`.xml
set -o history
&lt;/pre&gt;
&lt;p&gt;Then download and extract the release:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
cd /tmp
wget https://releases.wikimedia.org/mediawiki/1.35/mediawiki-1.35.1.tar.gz
tar -xvzf mediawiki-1.35.1.tar.gz
&lt;/pre&gt;
&lt;p&gt;Copy the existing data and settings into the new release:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo cp -r wiki/LocalSettings.php wiki_1.35/
sudo cp -r wiki/images/ wiki_1.35/
sudo cp -r wiki/extensions/* wiki_1.35/extensions/
sudo cp -r wiki/resources/assets/logo.png wiki_1.35/resources/assets/
sudo cp -r wiki/skins/* wiki_1.35/skins/
&lt;/pre&gt;
&lt;p&gt;Then switch directory&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
mv wiki wiki_old &amp;amp;&amp;amp; mv wiki_1.35 wiki
&lt;/pre&gt;
&lt;p&gt;finally:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
cd maintenance/
sudo php update.php
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Nextcloud</title><link href="https://aligot-death.space/wiki/sysadmin/nextcloud-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-03-22T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/nextcloud-en</id><summary type="html">&lt;p class="first last"&gt;Nextcloudtips and notes.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="https://websiteforstudents.com/install-nextcloud-on-ubuntu-17-04-17-10-with-nginx-mariadb-and-php/"&gt;https://websiteforstudents.com/install-nextcloud-on-ubuntu-17-04-17-10-with-nginx-mariadb-and-php/&lt;/a&gt;&lt;/p&gt;
&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#basic-install" id="toc-entry-1"&gt;Basic install&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#use-usb-connected-drive-as-data-directory" id="toc-entry-2"&gt;Use USB connected drive as data directory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#nfs" id="toc-entry-3"&gt;NFS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#nginx" id="toc-entry-4"&gt;nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#mariadb" id="toc-entry-5"&gt;mariadb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#php-mcrypt" id="toc-entry-6"&gt;php-mcrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#live-dns" id="toc-entry-7"&gt;Live DNS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#logging" id="toc-entry-8"&gt;Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#troubleshooting" id="toc-entry-9"&gt;Troubleshooting&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#cannot-login-always-goes-back-to-login-page" id="toc-entry-10"&gt;Cannot login, always goes back to login page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#php-settings-ignored" id="toc-entry-11"&gt;php settings ignored&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#error-423" id="toc-entry-12"&gt;Error 423&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#error-504-error-when-assembling-chunk" id="toc-entry-13"&gt;Error 504 &amp;quot;Error when assembling chunk&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#nextcloud-locked-files" id="toc-entry-14"&gt;nextcloud locked files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#update-fails-on-intergrity-and-stuck-on-step-5" id="toc-entry-15"&gt;Update fails on intergrity and stuck on step 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#importing-contacts-in-contacts-apps-errors" id="toc-entry-16"&gt;Importing contacts in &amp;quot;Contacts&amp;quot; apps errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#uploads-fail-silently-on-android" id="toc-entry-17"&gt;Uploads fail silently on android&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="basic-install"&gt;
&lt;h2&gt;Basic install&lt;a class="headerlink" href="#basic-install" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="use-usb-connected-drive-as-data-directory"&gt;
&lt;h3&gt;Use USB connected drive as data directory&lt;a class="headerlink" href="#use-usb-connected-drive-as-data-directory" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;/etc/fstab:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
UUID=360C3D2F0C3CEB8D /var/external_drive ntfs-3g uid=33,gid=1001,rw,user,exec,umask=007 0 0
&lt;/pre&gt;
&lt;p&gt;Then in config/config.php, set &amp;quot;var/external_drive&amp;quot; as directory (might require
to install package for NTFS)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="nfs"&gt;
&lt;h3&gt;NFS&lt;a class="headerlink" href="#nfs" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="code literal-block"&gt;
sudo apt update
sudo apt install nfs-common
&lt;/pre&gt;
&lt;p&gt;test:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo mount -t nfs 192.168.1.152:/volume1/data /var/data
&lt;/pre&gt;
&lt;p&gt;fstab :&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
192.168.1.152:/volume1/data  /var/data   nfs      rw,sync,hard,intr  0     0
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="nginx"&gt;
&lt;h3&gt;nginx&lt;a class="headerlink" href="#nginx" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="code literal-block"&gt;
sudo systemctl stop apache2
sudo systemctl disable apache2

sudo apt install nginx
sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="mariadb"&gt;
&lt;h3&gt;mariadb&lt;a class="headerlink" href="#mariadb" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install mariadb-server mariadb-client
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
sudo mysql_secure_installation
&lt;/pre&gt;
&lt;pre class="code literal-block"&gt;
Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y
&lt;/pre&gt;
&lt;pre class="code literal-block"&gt;
sudo systemctl restart mariadb.service
&lt;/pre&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install php-fpm php-mbstring php-xmlrpc php-soap php-apcu php-smbclient php-ldap php-redis php-gd php-xml php-intl php-json php-imagick php-mysql php-cli php-ldap php-zip php-curl unzip
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="php-mcrypt"&gt;
&lt;h3&gt;php-mcrypt&lt;a class="headerlink" href="#php-mcrypt" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p class="alert"&gt;&lt;strong&gt;DEPRECATED&lt;/strong&gt;. See this &lt;a class="reference external" href="https://github.com/nextcloud/server/issues/8265#issuecomment-712957283"&gt;issue&lt;/a&gt;&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER '&amp;lt;user&amp;gt;'&amp;#64;'localhost' IDENTIFIED BY 'new_password_here';
GRANT ALL ON nextcloud.* TO '&amp;lt;user&amp;gt;'&amp;#64;'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;

cd /tmp &amp;amp;&amp;amp; wget https://download.nextcloud.com/server/releases/nextcloud-&amp;lt;release&amp;gt;.0.1.zip
unzip nextcloud-17.0.1.zip
sudo mv nextcloud /var/www/html/nextcloud/

sudo chown -R www-data:www-data /var/www/html/nextcloud/
sudo chmod -R 755 /var/www/html/nextcloud/

sudo nano /etc/nginx/sites-available/nextcloud

sudo ln -s /etc/nginx/sites-available/frigg_nemecl /etc/nginx/sites-enabled/
&lt;/pre&gt;
&lt;p&gt;# if network mount:&lt;/p&gt;
&lt;p&gt;(select /var/data)
(chown /var/data)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="live-dns"&gt;
&lt;h3&gt;Live DNS&lt;a class="headerlink" href="#live-dns" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/cavebeat/gandi-live-dns"&gt;https://github.com/cavebeat/gandi-live-dns&lt;/a&gt;&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade &amp;amp;&amp;amp; sudo apt install unzip python-requests python-args python-simplejson
&lt;/pre&gt;
&lt;pre class="code literal-block"&gt;
cd /tmp &amp;amp;&amp;amp; git clone https://github.com/cavebeat/gandi-live-dns.git
sudo mv /tmp/gandi-live-dns /opt
&lt;/pre&gt;
&lt;p&gt;# Settings:
(&lt;a class="reference external" href="https://forum.yunohost.org/t/configuration-nextcloud-php-fpm-pm-max-children/10911"&gt;https://forum.yunohost.org/t/configuration-nextcloud-php-fpm-pm-max-children/10911&lt;/a&gt;)
in /etc/php/7.x/fpm/pool.d/www.conf:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
pm = static
pm.max_children setting = 8 ; depends on CPU, good on Pi 3
&lt;/pre&gt;
&lt;p&gt;and:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo service php7.3-fpm restart
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="logging"&gt;
&lt;h2&gt;Logging&lt;a class="headerlink" href="#logging" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Add:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&amp;quot;log_type&amp;quot; =&amp;gt; &amp;quot;file&amp;quot;,
&amp;quot;logfile&amp;quot; =&amp;gt; &amp;quot;nextcloud.log&amp;quot;,
&amp;quot;loglevel&amp;quot; =&amp;gt; 3,
&amp;quot;logdateformat&amp;quot; =&amp;gt; &amp;quot;F d, Y H:i:s&amp;quot;,
&lt;/pre&gt;
&lt;p&gt;to config/config.php&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/logging_configuration.html#file"&gt;https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/logging_configuration.html#file&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="troubleshooting"&gt;
&lt;h2&gt;Troubleshooting&lt;a class="headerlink" href="#troubleshooting" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="cannot-login-always-goes-back-to-login-page"&gt;
&lt;h3&gt;Cannot login, always goes back to login page&lt;a class="headerlink" href="#cannot-login-always-goes-back-to-login-page" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;More often than not, that indicates a permission issue, namely in the nextcloud directory. Simply do (adapt it if needed):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo chown -R www-data:www-data /var/www/html/nextcloud/
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="php-settings-ignored"&gt;
&lt;h3&gt;php settings ignored&lt;a class="headerlink" href="#php-settings-ignored" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Also applies for any modification like adding Redis (&lt;tt class="docutils literal"&gt;Redis server went away&lt;/tt&gt;)
If some php settings (typically, &lt;tt class="docutils literal"&gt;memory_limit&lt;/tt&gt;, as shown in &lt;em&gt;settings &amp;gt; Administration &amp;gt; System&lt;/em&gt;) seem to be ignored, you might need to restart the &lt;strong&gt;php-fpm service as well&lt;/strong&gt;. For instance:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo service php7.3-fpm restart
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="error-423"&gt;
&lt;h3&gt;Error 423&lt;a class="headerlink" href="#error-423" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;sudo -u www-data php occ files:scan --all&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="error-504-error-when-assembling-chunk"&gt;
&lt;h3&gt;Error 504 &amp;quot;Error when assembling chunk&amp;quot;&lt;a class="headerlink" href="#error-504-error-when-assembling-chunk" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If some php settings (typically, &lt;tt class="docutils literal"&gt;memory_limit&lt;/tt&gt;, as shown in &lt;em&gt;settings &amp;gt; Administration &amp;gt; System&lt;/em&gt;) seem to be ignored, you might need to restart the &lt;strong&gt;php-fpm service as well&lt;/strong&gt;. For instance:&lt;/p&gt;
&lt;p&gt;in /etc/php/7.x/fpm/pool.d/www.conf, if &lt;tt class="docutils literal"&gt;max_execution_time&lt;/tt&gt; is low (e.g. 30), raise it to 3600 :&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
max_execution_time = 3600
&lt;/pre&gt;
&lt;p&gt;Then restart fpm service:
.. code:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
sudo service php7.3-fpm restart
&lt;/pre&gt;
&lt;p&gt;&lt;a class="reference external" href="https://help.nextcloud.com/t/error-when-assembling-chunks-status-code-504/56751/2"&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="nextcloud-locked-files"&gt;
&lt;h3&gt;nextcloud locked files&lt;a class="headerlink" href="#nextcloud-locked-files" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://help.nextcloud.com/t/file-is-locked-how-to-unlock/1883"&gt;https://help.nextcloud.com/t/file-is-locked-how-to-unlock/1883&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can’t access files because they are locked and you find such errors in your logfile:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
{&amp;quot;reqId&amp;quot;:&amp;quot;0DijSqEkfOg2iyh9VD8J&amp;quot;,&amp;quot;remoteAddr&amp;quot;:&amp;quot;xx.xx.xx.xx&amp;quot;,&amp;quot;app&amp;quot;:&amp;quot;webdav&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;Exception: {\&amp;quot;Message\&amp;quot;:\&amp;quot;HTTP\\\/1.1 423 \\\&amp;quot;path\\\/file.extension\\\&amp;quot; is locked\&amp;quot;,\&amp;quot;Exception\&amp;quot;:\&amp;quot;OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Exception\\\\FileLocked\&amp;quot;,\&amp;quot;Code\&amp;quot;:0,\&amp;quot;Trace\&amp;quot;:\&amp;quot;#0
&lt;/pre&gt;
&lt;p&gt;Manually disable locking state:&lt;/p&gt;
&lt;p&gt;put Nextcloud in maintenance mode: edit config/config.php and change this line:
'maintenance' =&amp;gt; true,
Empty table oc_file_locks: Use tools such as phpmyadmin or connect directly to your database and run (the default table prefix is &amp;quot;oc&amp;lt;underscore&amp;gt;&amp;quot;, this prefix can be different or even empty):
DELETE FROM oc_file_locks WHERE 1
disable maintenance mode (undo first step).
Make sure your cron-jobs run properly (you admin page tells you when cron ran the last time): &lt;a class="reference external" href="https://docs.nextcloud.org/server/13/admin_manual/configuration_server/background_jobs_configuration.html"&gt;https://docs.nextcloud.org/server/13/admin_manual/configuration_server/background_jobs_configuration.html&lt;/a&gt; 1.7k&lt;/p&gt;
&lt;p&gt;Permanent solution (if it happens regularly)&lt;/p&gt;
&lt;p&gt;on your own server: Use redis for this feature. It is faster and so far no problems have been reported. You can follow the instructions for memory-caching in the docs: &lt;a class="reference external" href="https://docs.nextcloud.org/server/13/admin_manual/configuration_server/caching_configuration.html#id4"&gt;https://docs.nextcloud.org/server/13/admin_manual/configuration_server/caching_configuration.html#id4&lt;/a&gt; 6.1k
Shared hosting (others who can’t install redis): You can disable the file locking, edit your configuration file config/config.php:
'filelocking.enabled' =&amp;gt; false,
However, disabling is not a good solution. You can run into problems when several processes try to write to a file (especially online editors in the web-interface). In single-user and single-client environments, it’s probably less of a problem.&lt;/p&gt;
&lt;p&gt;&amp;gt; sudo service php7.3-fpm restart&lt;/p&gt;
&lt;p&gt;In addition to the package &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;nextcloud-desktop&lt;/span&gt;&lt;/tt&gt;, you can search for integrations for file managers. For instance &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;caja-nextcloud&lt;/span&gt;&lt;/tt&gt; for MATE.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="update-fails-on-intergrity-and-stuck-on-step-5"&gt;
&lt;h3&gt;Update fails on intergrity and stuck on step 5&lt;a class="headerlink" href="#update-fails-on-intergrity-and-stuck-on-step-5" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;when trying to start update from web interface, updater fails on integrity check, and when page is reloaded it is stuck on &amp;quot;Step 5 is currently in process. Please reload this page later.&amp;quot;&lt;/p&gt;
&lt;div class="section" id="typical-root-cause"&gt;
&lt;h4&gt;Typical root cause&lt;a class="headerlink" href="#typical-root-cause" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Check web server logs (for instance, in &lt;tt class="docutils literal"&gt;/var/log/nginx/&lt;/tt&gt;, do &lt;tt class="docutils literal"&gt;sudo grep &lt;span class="pre"&gt;-rn&lt;/span&gt; &amp;quot;bytes exhausted&amp;quot;&lt;/tt&gt;) if a message &amp;quot;Allowed memory size of xxx bytes exhausted&amp;quot; appears. if so, server ran out of memory when updating and fails to restart updating process.&lt;/p&gt;
&lt;p&gt;go into php server setting files (for instance in my case, &lt;tt class="docutils literal"&gt;/etc/php/7.3/fpm/php.ini&lt;/tt&gt;), and change &lt;tt class="docutils literal"&gt;memory_limit&lt;/tt&gt; to a higher value, or check &lt;a class="reference internal" href="#php-settings-ignored"&gt;php settings ignored&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="unlocking-updater"&gt;
&lt;h4&gt;Unlocking updater&lt;a class="headerlink" href="#unlocking-updater" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Once the problem is solved, unlock the updater by logging as the owner of the Nextcloud directory (typically &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;www-data&lt;/span&gt;&lt;/tt&gt;), browse to the directory, and launch:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
php occ maintenance:repair
&lt;/pre&gt;
&lt;p&gt;The updater should be right back again.&lt;/p&gt;
&lt;p&gt;Source: &lt;a class="reference external" href="https://github.com/nextcloud/updater/issues/316"&gt;issue #316 on Github&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="importing-contacts-in-contacts-apps-errors"&gt;
&lt;h2&gt;Importing contacts in &amp;quot;Contacts&amp;quot; apps errors&lt;a class="headerlink" href="#importing-contacts-in-contacts-apps-errors" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When trying to import contacts from a .vcf file, all fail (e.g.: 200 contacts = 200 errors).&lt;/p&gt;
&lt;p&gt;Probably has to do with vcf version. Follow this forum post: &lt;a class="reference external" href="https://help.nextcloud.com/t/import-vcard-2-1-to-address-book/102812"&gt;https://help.nextcloud.com/t/import-vcard-2-1-to-address-book/102812&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="uploads-fail-silently-on-android"&gt;
&lt;h2&gt;Uploads fail silently on android&lt;a class="headerlink" href="#uploads-fail-silently-on-android" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When uploading files from the android file, everything seems fine but files do not appear on server. With Auto-upload, files stop uploading alltogether.&lt;/p&gt;
&lt;p&gt;Open side panel, go to &amp;quot;uploads&amp;quot;: if files (including auto-uploads) show &amp;quot;Local file not found&amp;quot;, this is it.&lt;/p&gt;
&lt;p&gt;Open android settings, and go to &lt;tt class="docutils literal"&gt;Apps &amp;gt; Special app access &amp;gt; All files access &amp;gt; Nextcloud&lt;/tt&gt; (or search &amp;quot;all files access&amp;quot; and enable it.&lt;/p&gt;
&lt;p&gt;source: &lt;a class="reference external" href="https://www.reddit.com/r/NextCloud/comments/1lu2ba7/local_file_not_found_android_upload/"&gt;https://www.reddit.com/r/NextCloud/comments/1lu2ba7/local_file_not_found_android_upload/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Siril</title><link href="https://aligot-death.space/wiki/creation/siril-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-03-22T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/creation/siril-en</id><summary type="html">&lt;p class="first last"&gt;Quick run down of Siril&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#bias-offset" id="toc-entry-1"&gt;Bias/offset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#dark" id="toc-entry-2"&gt;Dark&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#basic" id="toc-entry-3"&gt;basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#most-optimal" id="toc-entry-4"&gt;most optimal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#lights" id="toc-entry-5"&gt;Lights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#comets" id="toc-entry-6"&gt;Comets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#sources" id="toc-entry-7"&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="bias-offset"&gt;
&lt;h2&gt;Bias/offset&lt;a class="headerlink" href="#bias-offset" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;inherent noise of sensor
Can be taken once and used for months
Temp doesn't matter very much for most cams
Take 20-40 frames with lens cap on, shortest exposure available, same ISO&lt;/p&gt;
&lt;p&gt;Open Siril, set work dir, add all raws, convert (no debayer /!, keep all channels)
Then stacking &amp;gt; median stacking, no normalisation&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="dark"&gt;
&lt;h2&gt;Dark&lt;a class="headerlink" href="#dark" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thermal noise
during or  After shooting (temp important), same params but with lens cap on&lt;/p&gt;
&lt;p&gt;Open Siril, set work dir by clicking on &amp;quot;house&amp;quot; icon&amp;quot;), select sequence name (for instance, &amp;quot;neowise_dark&amp;quot;), add all raws, convert (no debayer /!, keep all channels)&lt;/p&gt;
&lt;p&gt;Then go to stacking&lt;/p&gt;
&lt;div class="section" id="basic"&gt;
&lt;h3&gt;basic&lt;a class="headerlink" href="#basic" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Then stacking &amp;gt; median stacking, no normalisation&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="most-optimal"&gt;
&lt;h3&gt;most optimal&lt;a class="headerlink" href="#most-optimal" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;average stacking with rejection, no normalisation, Winsorized sigma clipping (if rejection ends up &amp;gt; 0.5%, fall back to median stacking, no norm)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="lights"&gt;
&lt;h2&gt;Lights&lt;a class="headerlink" href="#lights" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Simple photos of the object&lt;/p&gt;
&lt;p&gt;In siril, change dir, set seq name, convert WITH debayer&lt;/p&gt;
&lt;p&gt;Registration: registration method &amp;quot;Global star&amp;quot;, else don't change settings&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="comets"&gt;
&lt;h2&gt;Comets&lt;a class="headerlink" href="#comets" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Register sequence using global sking sequence tab, display first image, select comet, then using sequence tab again select last image et pick object in #2&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="sources"&gt;
&lt;h2&gt;Sources&lt;a class="headerlink" href="#sources" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;basics: &lt;a class="reference external" href="https://www.youtube.com/watch?v=qYXd0rrAzjg"&gt;https://www.youtube.com/watch?v=qYXd0rrAzjg&lt;/a&gt;
pre-process: &lt;a class="reference external" href="https://www.youtube.com/watch?v=RswLpEE7EZ4"&gt;https://www.youtube.com/watch?v=RswLpEE7EZ4&lt;/a&gt;
&lt;a class="reference external" href="https://free-astro.org/index.php/Siril:Tutorial_preprocessing"&gt;https://free-astro.org/index.php/Siril:Tutorial_preprocessing&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="astrophotography"></category></entry><entry><title>Updating linux</title><link href="https://aligot-death.space/wiki/sysadmin/linux/updating-linux-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-04-14T15:23:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/updating-linux-en</id><summary type="html">&lt;p class="first last"&gt;Properly updating linux from CLI&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#updating-linux-1" id="toc-entry-1"&gt;Updating Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="updating-linux-1"&gt;
&lt;h2&gt;Updating Linux&lt;a class="headerlink" href="#updating-linux-1" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo apt upgrade &amp;amp;&amp;amp; dist-upgrade &amp;amp;&amp;amp; autoremove &amp;amp;&amp;amp; autoclean
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Web development</title><link href="https://aligot-death.space/wiki/webdev/webdev-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2025-05-09T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/webdev/webdev-en</id><summary type="html">&lt;p class="first last"&gt;web development tips and notes.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#writing" id="toc-entry-1"&gt;Writing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#colours" id="toc-entry-2"&gt;Colours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#design" id="toc-entry-3"&gt;Design&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#typography" id="toc-entry-4"&gt;Typography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#html5" id="toc-entry-5"&gt;html5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#css" id="toc-entry-6"&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#serving" id="toc-entry-7"&gt;Serving&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#default-catch-all-nginx-server-block" id="toc-entry-8"&gt;Default &amp;quot;catch all&amp;quot; nginx server block&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#allow-window-print-with-content-security-policy" id="toc-entry-9"&gt;Allow &amp;quot;window.print()&amp;quot; with Content Security Policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#test" id="toc-entry-10"&gt;Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#security" id="toc-entry-11"&gt;Security&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#https-sll" id="toc-entry-12"&gt;https/SLL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#cors" id="toc-entry-13"&gt;CORS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#performance" id="toc-entry-14"&gt;Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#accessibility" id="toc-entry-15"&gt;Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#seo" id="toc-entry-16"&gt;SEO&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#link-sharing" id="toc-entry-17"&gt;link sharing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="writing"&gt;
&lt;h2&gt;Writing&lt;a class="headerlink" href="#writing" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="section" id="colours"&gt;
&lt;h2&gt;Colours&lt;a class="headerlink" href="#colours" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is no &amp;quot;systematic&amp;quot; approach to colours: it's all a matter of design decision. Do not fall into the whole &amp;quot;triad/split complementaries&amp;quot; trap from palette creation tools. Choose a main &amp;quot;colour&amp;quot; with multiples shades and tints, and a main accent colour. Build a palette from that, and add necessary colours (e.g. warnings and success texts) based on how good they look with the rest.&lt;/p&gt;
&lt;p&gt;An interesting article on the subject: &lt;a class="reference external" href="https://refactoringui.com/previews/building-your-color-palette/"&gt;Building Your Color Palette&lt;/a&gt; on refactoringui.com.&lt;/p&gt;
&lt;p&gt;The only framework for palette creation is AA(A) colour constrasts (see &lt;a class="reference internal" href="#accessibility"&gt;Accessibility&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For instance, first choose a text colour and a background color:&lt;/p&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--text); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#002a38&lt;/strong&gt;&lt;br&gt;text&lt;/div&gt;
  &lt;div style = "background-color: var(--background); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#f6f5f0&lt;/strong&gt;&lt;br&gt;background&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The choose an &amp;quot;accent&amp;quot; colour for elements that need to pop:&lt;/p&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--text); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#002a38&lt;/strong&gt;&lt;br&gt;text&lt;/div&gt;
  &lt;div style = "background-color: var(--background); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#f6f5f0&lt;/strong&gt;&lt;br&gt;background&lt;/div&gt;
  &lt;div style = "background-color: var(--accent); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#a54747&lt;/strong&gt;&lt;br&gt;accent&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then choose intermediate colours, for nuance and more or less important elements:&lt;/p&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--text); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#002a38&lt;/strong&gt;&lt;br&gt;text&lt;/div&gt;
  &lt;div style = "background-color: var(--darker); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#294d59&lt;/strong&gt;&lt;br&gt;darker&lt;/div&gt;
  &lt;div style = "background-color: var(--intermediate); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#446874&lt;/strong&gt;&lt;br&gt;intermediate&lt;/div&gt;
  &lt;div style = "background-color: var(--lighter); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#b4c9d0&lt;/strong&gt;&lt;br&gt;lighter&lt;/div&gt;
  &lt;div style = "background-color: var(--background); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#f6f5f0&lt;/strong&gt;&lt;br&gt;background&lt;/div&gt;
  &lt;div style = "background-color: var(--accent); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#a54747&lt;/strong&gt;&lt;br&gt;accent&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Depending on your needs, you might require more nuances:&lt;/p&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--text); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#002a38&lt;/strong&gt;&lt;br&gt;text&lt;/div&gt;
  &lt;div style = "background-color: var(--darkest); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#213e48&lt;/strong&gt;&lt;br&gt;darkest&lt;/div&gt;
  &lt;div style = "background-color: var(--darker); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#294d59&lt;/strong&gt;&lt;br&gt;darker&lt;/div&gt;
  &lt;div style = "background-color: var(--dark); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#355a65&lt;/strong&gt;&lt;br&gt;dark&lt;/div&gt;
  &lt;div style = "background-color: var(--intermediate); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#446874&lt;/strong&gt;&lt;br&gt;intermediate&lt;/div&gt;
  &lt;div style = "background-color: var(--light); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#86a6b0&lt;/strong&gt;&lt;br&gt;light&lt;/div&gt;
  &lt;div style = "background-color: var(--lighter); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#b4c9d0&lt;/strong&gt;&lt;br&gt;lighter&lt;/div&gt;
  &lt;div style = "background-color: var(--lightest); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#dbe5e9&lt;/strong&gt;&lt;br&gt;lightest&lt;/div&gt;
  &lt;div style = "background-color: var(--background); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#f6f5f0&lt;/strong&gt;&lt;br&gt;background&lt;/div&gt;
  &lt;div style = "background-color: var(--accent); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#a54747&lt;/strong&gt;&lt;br&gt;accent&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;And finally add colours for specific cases such as error messages, warning… etc:&lt;/p&gt;
&lt;div class = "flex-1line"&gt;
  &lt;div style = "background-color: var(--red); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#c72323;&lt;/strong&gt;&lt;br&gt;red&lt;/div&gt;
  &lt;div style = "background-color: var(--orange); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#eea828;&lt;/strong&gt;&lt;br&gt;orange&lt;/div&gt;
  &lt;div style = "background-color: var(--yellow); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#e8e852;&lt;/strong&gt;&lt;br&gt;yellow&lt;/div&gt;
  &lt;div style = "background-color: var(--green); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#47b787;&lt;/strong&gt;&lt;br&gt;green&lt;/div&gt;
  &lt;div style = "background-color: var(--blue); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#5057ba;&lt;/strong&gt;&lt;br&gt;blue&lt;/div&gt;
  &lt;div style = "background-color: var(--purple); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#7d517d;&lt;/strong&gt;&lt;br&gt;purple&lt;/div&gt;
  &lt;div style = "background-color: var(--lila); color: var(--text); text-align: center;"&gt;&lt;strong&gt;#ffe3ff;&lt;/strong&gt;&lt;br&gt;lila&lt;/div&gt;
  &lt;div style = "background-color: var(--flat-green); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#88b4a8;&lt;/strong&gt;&lt;br&gt;flat-green&lt;/div&gt;
  &lt;div style = "background-color: var(--charcoal); color: var(--background); text-align: center;"&gt;&lt;strong&gt;#333333;&lt;/strong&gt;&lt;br&gt;charcoal&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The colours should be defined using &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/CSS/var()"&gt;CSS's variables&lt;/a&gt; to ensure consistency between elements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="design"&gt;
&lt;h2&gt;Design&lt;a class="headerlink" href="#design" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="typography"&gt;
&lt;h3&gt;Typography&lt;a class="headerlink" href="#typography" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="section" id="knowledge"&gt;
&lt;h4&gt;Knowledge&lt;a class="headerlink" href="#knowledge" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;better typography CSS &lt;a class="reference external" href="https://betterwebtype.com/articles/2018/10/15/rhythm-in-web-typography/"&gt;https://betterwebtype.com/articles/2018/10/15/rhythm-in-web-typography/&lt;/a&gt;
web typography &lt;a class="reference external" href="https://css-tricks.com/typography-for-developers/"&gt;https://css-tricks.com/typography-for-developers/&lt;/a&gt;
webfont guide &lt;a class="reference external" href="https://www.freecodecamp.org/news/web-fonts-in-2018-f191a48367e8/"&gt;https://www.freecodecamp.org/news/web-fonts-in-2018-f191a48367e8/&lt;/a&gt;
vertical rythm &lt;a class="reference external" href="https://www.gridlover.net/try"&gt;https://www.gridlover.net/try&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="notable-typefaces"&gt;
&lt;h4&gt;Notable typefaces&lt;a class="headerlink" href="#notable-typefaces" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;atypical open-source typefaces &lt;a class="reference external" href="http://velvetyne.fr/"&gt;http://velvetyne.fr/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tools"&gt;
&lt;h4&gt;Tools&lt;a class="headerlink" href="#tools" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;(Kind of broken) &amp;#64;font-face CSS rules and various format generator (woff woff2 ttf) &lt;a class="reference external" href="https://transfonter.org/"&gt;https://transfonter.org/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="typical-workflow"&gt;
&lt;h4&gt;Typical workflow&lt;a class="headerlink" href="#typical-workflow" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;typeface/font downloader ttf woff woff2 &lt;a class="reference external" href="https://google-webfonts-helper.herokuapp.com/fonts/zilla-slab?subsets=latin,latin-ext"&gt;https://google-webfonts-helper.herokuapp.com/fonts/zilla-slab?subsets=latin,latin-ext&lt;/a&gt;
Add latin-ext if available
Copy and paste font-face CSS rules, add font-display: swap;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="html5"&gt;
&lt;h3&gt;html5&lt;a class="headerlink" href="#html5" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="section" id="favicon"&gt;
&lt;h4&gt;favicon&lt;a class="headerlink" href="#favicon" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a class="reference external" href="https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs"&gt;How to Favicon in 2025: Three files that fit most needs&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="boilerplate"&gt;
&lt;h4&gt;boilerplate&lt;a class="headerlink" href="#boilerplate" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Partially inspired by &lt;a class="reference external" href="https://www.matuzo.at/blog/html-boilerplate/"&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt; &lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 2 &lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;xml:lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;xmlns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 3 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 5 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;viewport&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;width=device-width,
&lt;/span&gt;&lt;span class="ln"&gt; 6 &lt;/span&gt;&lt;span class="s"&gt;     initial-scale=1.0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;home | nemecl.eu&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 8 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;base&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://nemecl.eu/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt; 9 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;title&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;home | nemecl.eu&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;10 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;description&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Homepage for nemecl.eu. Homemade interwebz, some kind of chaos garden.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;11 &lt;/span&gt;
&lt;span class="ln"&gt;12 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/favicon.ico&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;32x32&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;13 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/favicon.svg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;image/svg+xml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;14 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;apple-touch-icon&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/apple-touch-icon.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cm"&gt;&amp;lt;!-- 180×180 --&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;15 &lt;/span&gt;
&lt;span class="ln"&gt;16 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;preload&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;main.css&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;style&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;17 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;preload&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://rsc.aligot-death.space/css/base.css&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;style&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;18 &lt;/span&gt;
&lt;span class="ln"&gt;19 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;preload&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/rsc/webfonts/inconsolata/inconsolata-v20-latin-ext_latin-regular.woff2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;font&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;font/woff2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;anonymous&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;20 &lt;/span&gt;
&lt;span class="ln"&gt;21 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://rsc.aligot-death.space/css/base.css&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;22 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;main.css&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;23 &lt;/span&gt;
&lt;span class="ln"&gt;24 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;canonical&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://nemecl.eu/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;25 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:title&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;home | nemecl.eu&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:locale&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;en_GB&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;26 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:type&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;website&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;27 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:url&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://nemecl.eu/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;28 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:description&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Homepage for nemecl.eu. Homemade interwebz, some kind of chaos garden.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;29 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;og:image&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://rsc.aligot-death.space/images/favicon.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;30 &lt;/span&gt;
&lt;span class="ln"&gt;31 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:card&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;summary&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;32 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:title&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nemecl.eu&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;33 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:url&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://nemecl.eu&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;34 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:site&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;#64;nemecle&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;35 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:description&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Welcome to my small patch of homemade interwebz, some kind of chaos garden.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;36 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:image&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://rsc.aligot-death.space/images/favicon.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;37 &lt;/span&gt;     &lt;span class="cm"&gt;&amp;lt;!--&amp;lt;base href = &amp;quot;https://nemecl.eu&amp;quot;/&amp;gt;--&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;38 &lt;/span&gt;
&lt;span class="ln"&gt;39 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;theme-color&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#eaeaea&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;40 &lt;/span&gt;
&lt;span class="ln"&gt;41 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://rsc.aligot-death.space/scripts/instant-page_5.1.0.js&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;module&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;42 &lt;/span&gt;
&lt;span class="ln"&gt;43 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;format-detection&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;telephone=no&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;44 &lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:dnt&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;on&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;45 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;46 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;article&amp;gt;&lt;/tt&gt; is not &amp;quot;article&amp;quot; as in blog post, but as in &amp;quot;shop article&amp;quot;: you can use it for instance for a list of articles. An article would simply be in a &lt;tt class="docutils literal"&gt;&amp;lt;main&amp;gt;&lt;/tt&gt; element, under a &lt;tt class="docutils literal"&gt;&amp;lt;section&amp;gt;&lt;/tt&gt; in necessary&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="css"&gt;
&lt;h3&gt;CSS&lt;a class="headerlink" href="#css" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;sort CSS properties by alphabetical order&lt;/strong&gt; &lt;a class="reference external" href="https://jerrylowm.medium.com/alphabetize-your-css-properties-for-crying-out-loud-780eb1852153"&gt;https://jerrylowm.medium.com/alphabetize-your-css-properties-for-crying-out-loud-780eb1852153&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;classless&amp;quot; CSS&lt;/strong&gt; is a framework that doesn't use html classes or IDs, and only leverages html elements. It's not necessarly a good idea to apply it to everything but using as little classes and IDs as possible makes writing pages easier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avoid margin&lt;/strong&gt; to simplify layout management: &lt;a class="reference external" href="https://mxstbr.com/thoughts/margin/"&gt;Margin considered harmful&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;full-bleed&amp;quot; layout&lt;/strong&gt;: a flexible layout for width-contrained content, while allowing exceptions. See &lt;a class="reference external" href="https://joshwcomeau.com/css/full-bleed/"&gt;this article&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="serving"&gt;
&lt;h2&gt;Serving&lt;a class="headerlink" href="#serving" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="default-catch-all-nginx-server-block"&gt;
&lt;h3&gt;Default &amp;quot;catch all&amp;quot; nginx server block&lt;a class="headerlink" href="#default-catch-all-nginx-server-block" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;from &lt;a class="reference external" href="https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/"&gt;nginx documentation&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt; http {
&lt;span class="ln"&gt; 2 &lt;/span&gt;   index index.html;
&lt;span class="ln"&gt; 3 &lt;/span&gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;   server {
&lt;span class="ln"&gt; 5 &lt;/span&gt;     listen 80 default_server;
&lt;span class="ln"&gt; 6 &lt;/span&gt;     server_name _; # This is just an invalid value which will never trigger on a real hostname.
&lt;span class="ln"&gt; 7 &lt;/span&gt;     access_log logs/default.access.log main;
&lt;span class="ln"&gt; 8 &lt;/span&gt;
&lt;span class="ln"&gt; 9 &lt;/span&gt;     server_name_in_redirect off;
&lt;span class="ln"&gt;10 &lt;/span&gt;
&lt;span class="ln"&gt;11 &lt;/span&gt;     root  /var/www/default/htdocs;
&lt;span class="ln"&gt;12 &lt;/span&gt;   }
&lt;span class="ln"&gt;13 &lt;/span&gt; }
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="allow-window-print-with-content-security-policy"&gt;
&lt;h3&gt;Allow &amp;quot;window.print()&amp;quot; with Content Security Policy&lt;a class="headerlink" href="#allow-window-print-with-content-security-policy" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Need to add &lt;tt class="docutils literal"&gt;sandbox &lt;span class="pre"&gt;allow-modals&lt;/span&gt;&lt;/tt&gt; to CSP header&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="test"&gt;
&lt;h2&gt;Test&lt;a class="headerlink" href="#test" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;General test for DNS, HTTPS, content...: &lt;a class="reference external" href="https://check-your-website.server-daten.de/?q=nemecl.eu"&gt;https://check-your-website.server-daten.de/?q=nemecl.eu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;ct.css&lt;/tt&gt;: check html head informations &lt;a class="reference external" href="https://github.com/csswizardry/ct"&gt;https://github.com/csswizardry/ct&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="security"&gt;
&lt;h2&gt;Security&lt;a class="headerlink" href="#security" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://infosec.mozilla.org/guidelines/web_security"&gt;https://infosec.mozilla.org/guidelines/web_security&lt;/a&gt;
&lt;a class="reference external" href="https://blog.vnaik.com/posts/web-attacks.html"&gt;https://blog.vnaik.com/posts/web-attacks.html&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="https-sll"&gt;
&lt;h3&gt;https/SLL&lt;a class="headerlink" href="#https-sll" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="section" id="certbot-cron"&gt;
&lt;h4&gt;certbot cron&lt;a class="headerlink" href="#certbot-cron" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt; 0 2 * * 1 certbot certonly --agree-tos -m nemecle&amp;#64;riseup.net -n --webroot -w /var/www/txt.nemecl.eu -d txt.nemecl.eu &amp;amp;&amp;amp; service nginx reload
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="csp-for-simple-static-website"&gt;
&lt;h4&gt;CSP for simple static website&lt;a class="headerlink" href="#csp-for-simple-static-website" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt; add_header Content-Security-Policy &amp;quot;default-src self https://rsc.aligot-death.space; child-src 'none'; object-src 'none'; require-trusted-types-for 'script';&amp;quot;;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="cors"&gt;
&lt;h3&gt;CORS&lt;a class="headerlink" href="#cors" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;if CORS &amp;quot;was blocked because of a disallowed MIME type (“text/html”).&amp;quot; for a js file, might 404/40*&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="performance"&gt;
&lt;h2&gt;Performance&lt;a class="headerlink" href="#performance" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://web.dev/measure/"&gt;https://web.dev/measure/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="accessibility"&gt;
&lt;h2&gt;Accessibility&lt;a class="headerlink" href="#accessibility" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;log in: two steps is bad: let enter email&amp;amp;passwd, and if no account expand second passwd field etc&lt;/p&gt;
&lt;p&gt;accessibility test: ctrl+win+enter for windows narrator&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.matuzo.at/blog/i-totally-forgot-about-print-style-sheets/"&gt;https://www.matuzo.at/blog/i-totally-forgot-about-print-style-sheets/&lt;/a&gt;
Testing print style: &lt;a class="reference external" href="https://www.matuzo.at/blog/i-totally-forgot-about-print-style-sheets/"&gt;https://www.matuzo.at/blog/i-totally-forgot-about-print-style-sheets/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tota11y, accessiblity tool in the browser&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://webaim.org/resources/contrastchecker/"&gt;https://webaim.org/resources/contrastchecker/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/rpsthecoder/js-speech-synthesis"&gt;Simple speech synthesis&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="seo"&gt;
&lt;h2&gt;SEO&lt;a class="headerlink" href="#seo" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Test twitter integration: &lt;a class="reference external" href="https://cards-dev.twitter.com/validator"&gt;https://cards-dev.twitter.com/validator&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="link-sharing"&gt;
&lt;h3&gt;link sharing&lt;a class="headerlink" href="#link-sharing" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;!-- code::html
:number-lines:

 &lt;a href = "https://twitter.com/intent/tweet?via=nemecle&amp;text={{ article.title }}&amp;url=&amp;#x007B;&amp;#x007B; article.url }}"&gt;twitter&lt;/a&gt;
 &lt;a href = "https://reddit.com/submit?url=&amp;#x007B;&amp;#x007B; article.url }}&amp;title={{ article.title }}"&gt;reddit&lt;/a&gt;
 &lt;a href = "&amp;#x007B;&amp;#x007B; article.url }}"&gt;(article link)&lt;/a&gt; --&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Windows</title><link href="https://aligot-death.space/wiki/sysadmin/windows/windows-en" rel="alternate"></link><published>2021-03-22T18:30:00+01:00</published><updated>2021-03-22T18:30:00+01:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/windows/windows-en</id><summary type="html">&lt;p class="first last"&gt;A few windows tips and notes&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#error-80004005-when-connecting-to-a-network-drive" id="toc-entry-1"&gt;Error &amp;quot;80004005&amp;quot; when connecting to a network drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#oculus-rift-nvidia-drivers" id="toc-entry-2"&gt;Oculus Rift &amp;amp; Nvidia drivers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#windows-process-audit" id="toc-entry-3"&gt;Windows Process audit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#reinstall-windows-store-from-powershell" id="toc-entry-4"&gt;Reinstall Windows Store from Powershell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="error-80004005-when-connecting-to-a-network-drive"&gt;
&lt;h2&gt;Error &amp;quot;80004005&amp;quot; when connecting to a network drive&lt;a class="headerlink" href="#error-80004005-when-connecting-to-a-network-drive" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;if you can ping (but uses IPv6) and access it through web interface, but Windows Explorer gives &amp;quot;80004005&amp;quot; error, &lt;strong&gt;disable IPv6&lt;/strong&gt; and flush dns cache by launching from &lt;tt class="docutils literal"&gt;cmd&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ipconfig /flushdns
&lt;/pre&gt;
&lt;p&gt;Given that everyone keeps giving ipv6 literal .net, I guess SMB in windows can't ipv6
&lt;a class="reference external" href="https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.cdot-famg-cifs%2FGUID-37002578-913C-4883-8328-731FB1EAB558.html"&gt;https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.cdot-famg-cifs%2FGUID-37002578-913C-4883-8328-731FB1EAB558.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;but might be a protocol mismatch in some cases: try &lt;a class="reference external" href="https://answers.microsoft.com/en-us/windows/forum/windows_10-networking/cant-connect-to-network-share-get-error-0x80004005/7f12471c-2e33-472b-9b0b-6643666a4ef4"&gt;disabling SMB 1.0&lt;/a&gt; (&lt;a class="reference external" href="https://web.archive.org/web/20200927145104/https://answers.microsoft.com/en-us/windows/forum/windows_10-networking/cant-connect-to-network-share-get-error-0x80004005/7f12471c-2e33-472b-9b0b-6643666a4ef4"&gt;archive&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="oculus-rift-nvidia-drivers"&gt;
&lt;h2&gt;Oculus Rift &amp;amp; Nvidia drivers&lt;a class="headerlink" href="#oculus-rift-nvidia-drivers" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Oculus &amp;quot;Update your graphics card drivers&amp;quot; : update it from Geforce Experience, not from website DL&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="windows-process-audit"&gt;
&lt;h2&gt;Windows Process audit&lt;a class="headerlink" href="#windows-process-audit" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://processhacker.sourceforge.io/"&gt;https://processhacker.sourceforge.io/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="reinstall-windows-store-from-powershell"&gt;
&lt;h2&gt;Reinstall Windows Store from Powershell&lt;a class="headerlink" href="#reinstall-windows-store-from-powershell" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.winhelponline.com/blog/restore-windows-store-windows-10-uninstall-with-powershell/"&gt;https://www.winhelponline.com/blog/restore-windows-store-windows-10-uninstall-with-powershell/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="wiki"></category></entry><entry><title>Avoid have to type SSH passphrase everytime</title><link href="https://aligot-death.space/wiki/sysadmin/linux/avoid-typing-ssh-password-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/avoid-typing-ssh-password-en</id><summary type="html"></summary><content type="html">&lt;p&gt;from &lt;a class="reference external" href="https://unix.stackexchange.com/questions/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket"&gt;How to avoid being asked passphrase each time I push to Bitbucket&lt;/a&gt;&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ssh-add
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>"can't read superblock"</title><link href="https://aligot-death.space/wiki/sysadmin/linux/cant-read-superblock-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/cant-read-superblock-en</id><summary type="html"></summary><content type="html">&lt;p&gt;Not necessarly a drive fault, can for instance mean that it doesn't have enough power for external drive &lt;a class="reference external" href="https://askubuntu.com/questions/539880/cant-mount-an-ide-hdd-cant-read-superblock-error-message"&gt;https://askubuntu.com/questions/539880/cant-mount-an-ide-hdd-cant-read-superblock-error-message&lt;/a&gt;&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Direct kernel communication</title><link href="https://aligot-death.space/wiki/sysadmin/linux/direct-kernel-communication-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/direct-kernel-communication-en</id><summary type="html"></summary><content type="html">&lt;p&gt;Can be useful in case of partially stalled or locked system&lt;/p&gt;
&lt;p&gt;Alt, press &lt;tt class="docutils literal"&gt;SysRq&lt;/tt&gt; (The &lt;tt class="docutils literal"&gt;SysRq&lt;/tt&gt; being the &lt;tt class="docutils literal"&gt;Print Screen&lt;/tt&gt; key), release &lt;tt class="docutils literal"&gt;SysRq&lt;/tt&gt;, press &lt;tt class="docutils literal"&gt;&amp;lt;command key&amp;gt;&lt;/tt&gt;, Hit &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;ALT-SysRq-&amp;lt;command&lt;/span&gt; key&amp;gt;&lt;/tt&gt;, release everything.&lt;/p&gt;
&lt;p&gt;Or if possible,&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;echo t &amp;gt; /proc/sysrq-trigger
&lt;/pre&gt;
&lt;p&gt;with &lt;tt class="docutils literal"&gt;t&lt;/tt&gt; being the command key.&lt;/p&gt;
&lt;p&gt;See the wikipedia page for full &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Magic_SysRq_key#Commands"&gt;command key list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Can't beat a tool that has a &amp;quot;Perform a system crash&amp;quot; feature.&lt;/em&gt;&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>ffmpeg</title><link href="https://aligot-death.space/wiki/sysadmin/linux/ffmpeg-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/ffmpeg-en</id><summary type="html">&lt;p class="first last"&gt;ffmpeg tricks.&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#creating-a-timelapse" id="toc-entry-1"&gt;Creating a timelapse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#concatenate-ts-files-from-local-record" id="toc-entry-2"&gt;Concatenate &amp;quot;.ts&amp;quot; files from local record&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="creating-a-timelapse"&gt;
&lt;h2&gt;Creating a timelapse&lt;a class="headerlink" href="#creating-a-timelapse" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;1080p/30i with jpg files:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' -c:v libx264 -r 30 -pix_fmt yuv420p -s hd1080 out.mp4
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="concatenate-ts-files-from-local-record"&gt;
&lt;h2&gt;Concatenate &amp;quot;.ts&amp;quot; files from local record&lt;a class="headerlink" href="#concatenate-ts-files-from-local-record" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;For instance, if you made a local record using OBS&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Create file list:&lt;/p&gt;
&lt;p class="warning"&gt;File order might be wrong, to fix&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;(for %i in (*.ts) do &amp;#64;echo file '%i') &amp;gt; mylist.txt
&lt;/pre&gt;
&lt;p&gt;Then concatenate to a single mp4 file:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ffmpeg -f concat -i mylist.txt -c copy output.mp4
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Changing the theme for GTK from CLI</title><link href="https://aligot-death.space/wiki/sysadmin/linux/gtk-theme-cli-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/gtk-theme-cli-en</id><summary type="html">&lt;p class="first last"&gt;Using thin breaking spaces with Plasma&lt;/p&gt;
</summary><content type="html">&lt;p&gt;(for instance, If you use typical GTK utilities in i3)&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;vim $HOME/.config/gtk-3.0/settings.ini
&lt;/pre&gt;
&lt;p&gt;Example config:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;[Settings]
&lt;span class="ln"&gt;2 &lt;/span&gt;gtk-icon-theme-name = Paper
&lt;span class="ln"&gt;3 &lt;/span&gt;gtk-theme-name = Arc-Darker
&lt;span class="ln"&gt;4 &lt;/span&gt;gtk-font-name = DejaVu Sans 11
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Managing multiple screens from CLI/i3wm</title><link href="https://aligot-death.space/wiki/sysadmin/linux/i3-multiple-screens-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/i3-multiple-screens-en</id><summary type="html"></summary><content type="html">&lt;p&gt;install xrandr. On debian, do:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
sudo apt install x11-xserver-utils
&lt;/pre&gt;
&lt;p&gt;More often than not, this is enough:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
xrandr --auto
&lt;/pre&gt;
&lt;p&gt;to see possible settings, type:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
xrandr
&lt;/pre&gt;
&lt;p&gt;to add a second screen next to a 2560x1440, plugged on HDMI2:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
xrandr --output HDMI-2 --pos 2560x0 --mode 1920x1080 --rate 60
&lt;/pre&gt;
&lt;p&gt;Remove a screen:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
xrandr --output HDMI-2 --off
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Linux</title><link href="https://aligot-death.space/wiki/sysadmin/linux-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-05-12T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux-en</id><summary type="html">&lt;p class="first last"&gt;Linux tips and notes.&lt;/p&gt;
</summary><content type="html"></content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Linux performance monitoring tools</title><link href="https://aligot-death.space/wiki/sysadmin/linux/linux-performance-tools-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/linux-performance-tools-en</id><summary type="html"></summary><content type="html">&lt;p&gt;See &lt;a class="reference external" href="http://www.brendangregg.com/linuxperf.html"&gt;http://www.brendangregg.com/linuxperf.html&lt;/a&gt;&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Mounting secondary drive on boot</title><link href="https://aligot-death.space/wiki/sysadmin/linux/mount-secondary-drive-boot-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/mount-secondary-drive-boot-en</id><summary type="html">&lt;p class="first last"&gt;Mounting secondary drive on boot&lt;/p&gt;
</summary><content type="html">&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#emergency-mode" id="toc-entry-1"&gt;Emergency mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo blkid&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;sudo umount /mnt/xxx&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;vim /etc/fstab&lt;/tt&gt;: if in doubt, just pu UUID, mount point, FS type and &amp;quot;defaults 0 0&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="section" id="emergency-mode"&gt;
&lt;h2&gt;Emergency mode&lt;a class="headerlink" href="#emergency-mode" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Happened to me as I changed my DATA HDD. because I added it to &lt;tt class="docutils literal"&gt;/etc/fstab&lt;/tt&gt;
and the disk wasn't the same anymore, the system would drop into emergency
mode.&lt;/p&gt;
&lt;p&gt;Once connected, try mounting all mount points and see errors:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
mount -a
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Easy network management from terminal</title><link href="https://aligot-death.space/wiki/sysadmin/linux/network-cli-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/network-cli-en</id><summary type="html">&lt;p class="first last"&gt;Simple utility to manage network interfaces from cli&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Might requires to install nmcli on some distros. Make sure to do it before you're disconnected.&lt;/p&gt;
&lt;p&gt;the nmcli utility is very easy and useful to manage network settings, including Wi-fi connections.&lt;/p&gt;
&lt;p&gt;For instance, listing available Wi-Fi networks:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;nmcli&lt;span class="w"&gt; &lt;/span&gt;d&lt;span class="w"&gt; &lt;/span&gt;wifi&lt;span class="w"&gt; &lt;/span&gt;list
&lt;/pre&gt;
&lt;p&gt;Connecting to a wifi network:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;nmcli&lt;span class="w"&gt; &lt;/span&gt;d&lt;span class="w"&gt; &lt;/span&gt;wifi&lt;span class="w"&gt; &lt;/span&gt;connect&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Super Wifi&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;password&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;John19970612&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>pelican</title><link href="https://aligot-death.space/wiki/webdev/pelican-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2021-08-25T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/webdev/pelican-en</id><summary type="html">&lt;p class="first last"&gt;A few tips and notes on the static site generator pelican&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="https://blog.getpelican.com/"&gt;Pelican&lt;/a&gt; is a static site generator in python which is not necessarily beautiful out of the box, but offers a lot of control on the generation process.&lt;/p&gt;
&lt;div class="contents topic" id="content"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#more-practical-work-environment" id="toc-entry-1"&gt;More practical work environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#writing" id="toc-entry-2"&gt;Writing&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#easy-styling" id="toc-entry-3"&gt;Easy styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#using-html-within-a-rst-file" id="toc-entry-4"&gt;using html within a .rst file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#table-of-content" id="toc-entry-5"&gt;Table of content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#linting-code" id="toc-entry-6"&gt;Linting code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#link-management" id="toc-entry-7"&gt;Link management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#clean-urls" id="toc-entry-8"&gt;clean URLs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#theming" id="toc-entry-9"&gt;Theming&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#using-article-summary" id="toc-entry-10"&gt;Using article &amp;quot;summary&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#article-ordering" id="toc-entry-11"&gt;Article ordering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#translation-switch-for-custom-pages" id="toc-entry-12"&gt;Translation switch for custom pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#custom-home-page" id="toc-entry-13"&gt;Custom home page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#navigation-menu-with-article-list" id="toc-entry-14"&gt;Navigation menu with article list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#articles-listed-per-year" id="toc-entry-15"&gt;Articles listed per year&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#list-x-articles" id="toc-entry-16"&gt;List x articles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#must-have-plugins" id="toc-entry-17"&gt;Must have plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#troubleshooting" id="toc-entry-18"&gt;Troubleshooting&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#typeerror-not-all-arguments-converted-during-string-formatting" id="toc-entry-19"&gt;&amp;quot;TypeError: not all arguments converted during string formatting&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="more-practical-work-environment"&gt;
&lt;h2&gt;More practical work environment&lt;a class="headerlink" href="#more-practical-work-environment" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Add to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;~/.bashrc&lt;/span&gt;&lt;/tt&gt; the following aliases:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="nb"&gt;alias&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;pc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pelican content&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="ln"&gt;2 &lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nb"&gt;alias&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;pl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pelican --listen&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;simply build the website py typing &lt;tt class="docutils literal"&gt;pc&lt;/tt&gt; from the directory, and &lt;tt class="docutils literal"&gt;pl&lt;/tt&gt; to launch Pelican’s web server.&lt;/p&gt;
&lt;p&gt;The website can be build without shutting down the server, so you can simply launch the &lt;tt class="docutils literal"&gt;pl&lt;/tt&gt; command in another terminal (or typically, in another &lt;tt class="docutils literal"&gt;tmux&lt;/tt&gt; pane) and build the website on the fly.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="writing"&gt;
&lt;h2&gt;Writing&lt;a class="headerlink" href="#writing" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class="warning"&gt;This part assumes that you use &lt;strong&gt;RestructuredText&lt;/strong&gt; format for your articles.&lt;/p&gt;
&lt;div class="section" id="easy-styling"&gt;
&lt;h3&gt;Easy styling&lt;a class="headerlink" href="#easy-styling" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;to add a class to a paragraph, use (be careful with the whitespaces to avoid errors):&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;.. class:: warning
&lt;span class="ln"&gt;2 &lt;/span&gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;This part assumes that you use RestructuredText format for your articles.
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: the warning just above (assuming you've created the corresponding CSS class)!&lt;/p&gt;
&lt;p&gt;Multiple &lt;tt class="docutils literal"&gt;..class&lt;/tt&gt; can be nested, as long as the empty lines are respected. For instance:&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;.. class:: align-right
&lt;span class="ln"&gt;2 &lt;/span&gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;.. class:: side-note
&lt;span class="ln"&gt;4 &lt;/span&gt;
&lt;span class="ln"&gt;5 &lt;/span&gt;**Le Règlement Général sur la Protection des Données (RGPD) c'est quoi ?**
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="using-html-within-a-rst-file"&gt;
&lt;h3&gt;using html within a .rst file&lt;a class="headerlink" href="#using-html-within-a-rst-file" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Use:&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;.. raw:: html
&lt;span class="ln"&gt;2 &lt;/span&gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;details&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;4 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Here is a summary.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;5 &lt;/span&gt;   this is a summary that can be clicked to view/hide its details &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;6 &lt;/span&gt;   Even though there is not much to see here.
&lt;span class="ln"&gt;7 &lt;/span&gt;   &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;details&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Here is a summary.&lt;/b&gt;&lt;br&gt;
this is a summary that can be clicked to view/hide its details &lt;/summary&gt;
Even though there is not much to see here.
&lt;/details&gt;&lt;/div&gt;
&lt;div class="section" id="table-of-content"&gt;
&lt;h3&gt;Table of content&lt;a class="headerlink" href="#table-of-content" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simply add above your first part title (or anywhere, really):&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;.. contents:: &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ToC&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;2 &lt;/span&gt;:depth: 2
&lt;span class="ln"&gt;3 &lt;/span&gt;:backlinks: none
&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;div class="contents topic" id="topic-1"&gt;
&lt;p class="topic-title"&gt;&lt;a class="reference internal" href="#top"&gt;Content&lt;/a&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#more-practical-work-environment" id="toc-entry-20"&gt;More practical work environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#writing" id="toc-entry-21"&gt;Writing&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#easy-styling" id="toc-entry-22"&gt;Easy styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#using-html-within-a-rst-file" id="toc-entry-23"&gt;using html within a .rst file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#table-of-content" id="toc-entry-24"&gt;Table of content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#linting-code" id="toc-entry-25"&gt;Linting code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#link-management" id="toc-entry-26"&gt;Link management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#clean-urls" id="toc-entry-27"&gt;clean URLs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#theming" id="toc-entry-28"&gt;Theming&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#using-article-summary" id="toc-entry-29"&gt;Using article &amp;quot;summary&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#article-ordering" id="toc-entry-30"&gt;Article ordering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#translation-switch-for-custom-pages" id="toc-entry-31"&gt;Translation switch for custom pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#custom-home-page" id="toc-entry-32"&gt;Custom home page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#navigation-menu-with-article-list" id="toc-entry-33"&gt;Navigation menu with article list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#articles-listed-per-year" id="toc-entry-34"&gt;Articles listed per year&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#list-x-articles" id="toc-entry-35"&gt;List x articles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#must-have-plugins" id="toc-entry-36"&gt;Must have plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#troubleshooting" id="toc-entry-37"&gt;Troubleshooting&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#typeerror-not-all-arguments-converted-during-string-formatting" id="toc-entry-38"&gt;&amp;quot;TypeError: not all arguments converted during string formatting&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="linting-code"&gt;
&lt;h3&gt;Linting code&lt;a class="headerlink" href="#linting-code" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can find the list of available languages for the &lt;tt class="docutils literal"&gt;code&lt;/tt&gt; block &lt;a class="reference external" href="https://pygments.org/docs/lexers/"&gt;here&lt;/a&gt;
Configuration
=============&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="link-management"&gt;
&lt;h3&gt;Link management&lt;a class="headerlink" href="#link-management" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To ensure proper links, working page anchors and website structure:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;&amp;lt;base &lt;span class="pre"&gt;href=&amp;quot;{{&lt;/span&gt; SITEURL &lt;span class="pre"&gt;}}/{{&lt;/span&gt; output_file &lt;span class="pre"&gt;}}&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/tt&gt; to HTML header&lt;/li&gt;
&lt;li&gt;add &lt;tt class="docutils literal"&gt;RELATIVE_URLS = False&lt;/tt&gt; to &lt;tt class="docutils literal"&gt;pelicanconf.py&lt;/tt&gt; (and do not override it to &lt;tt class="docutils literal"&gt;True&lt;/tt&gt; in &lt;tt class="docutils literal"&gt;publishconf.py&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;Make sure to use &lt;tt class="docutils literal"&gt;{{ SITEURL }}/&lt;/tt&gt; in templates, such as &lt;tt class="docutils literal"&gt;href = &amp;quot;{{ SITEURL &lt;span class="pre"&gt;}}/{{&lt;/span&gt; article.url }}&amp;quot;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Use relative links prefixed with &amp;quot;/&amp;quot; to ensure that they start from the root of your website.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="clean-urls"&gt;
&lt;h3&gt;clean URLs&lt;a class="headerlink" href="#clean-urls" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the &lt;tt class="docutils literal"&gt;pelicanconf.py&lt;/tt&gt; file, set the following variables:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="nv"&gt;TAGS_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;tags&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;CATEGORIES_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;categories&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;ARCHIVES_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;archives&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;ARTICLE_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{slug}&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;ARTICLE_LANG_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{slug}-{lang}'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;PAGE_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{slug}&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;PAGE_SAVE_AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{slug}.html&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;PAGE_LANG_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'pages/{slug}-{lang}'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;CATEGORY_SAVE_AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'categories/{slug}.html'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;CATEGORY_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'categories/{slug}'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;TAG_SAVE_AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'tags/{slug}.html'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;TAG_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'tags/{slug}'&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The result will be urls of the form &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;example.com/making-soup&lt;/span&gt;&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;example.com/categories/linux&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;To ensure that these links are used, you also need to configure the web server. In the case of &lt;tt class="docutils literal"&gt;nginx&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="nv"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;index&lt;span class="w"&gt; &lt;/span&gt;index.html&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;location&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;/var/www/example.com/&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;try_files&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;.html&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="theming"&gt;
&lt;h2&gt;Theming&lt;a class="headerlink" href="#theming" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="using-article-summary"&gt;
&lt;h3&gt;Using article &amp;quot;summary&amp;quot;&lt;a class="headerlink" href="#using-article-summary" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Use the &lt;tt class="docutils literal"&gt;striptags&lt;/tt&gt; filter to avoid having &lt;tt class="docutils literal"&gt;&amp;lt;p class = &amp;quot;first&amp;quot;&amp;gt;&lt;/tt&gt; garbage in your meta description:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;{% if  article.summary  %}
&lt;span class="ln"&gt;2 &lt;/span&gt;&amp;lt;meta property=&amp;quot;og:description&amp;quot; content=&amp;quot;{{ article.summary|striptags|safe  }}&amp;quot;&amp;gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;{% endif %}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="article-ordering"&gt;
&lt;h3&gt;Article ordering&lt;a class="headerlink" href="#article-ordering" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;By default articles are ordered in &amp;quot;reverse-date&amp;quot;. But any metadata (with a &amp;quot;reverse-&amp;quot; prefix to... reverse) can be used: for instance, this wiki uses &amp;quot;title&amp;quot;, like this in &lt;tt class="docutils literal"&gt;pelicanconf.py&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="nv"&gt;ARTICLE_ORDER_BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://docs.getpelican.com/en/stable/settings.html#ordering-content"&gt;Ordering content&lt;/a&gt; for more details.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="translation-switch-for-custom-pages"&gt;
&lt;h3&gt;Translation switch for custom pages&lt;a class="headerlink" href="#translation-switch-for-custom-pages" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To get translation links for custom page (&lt;tt class="docutils literal"&gt;:save_as:&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;:template:&lt;/tt&gt;), edit the translations.html from the theme and the following new macro:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;{% macro translations_for_page(page) %}
&lt;span class="ln"&gt; 2 &lt;/span&gt;&amp;lt;div&amp;gt;
&lt;span class="ln"&gt; 3 &lt;/span&gt;{% if page.translations %}
&lt;span class="ln"&gt; 4 &lt;/span&gt;&amp;lt;span class = &amp;quot;block&amp;quot;&amp;gt;{{ page.lang }}&amp;lt;/span&amp;gt;
&lt;span class="ln"&gt; 5 &lt;/span&gt;{% for translation in page.translations %}
&lt;span class="ln"&gt; 6 &lt;/span&gt;&amp;lt;a class = &amp;quot;inverted-block&amp;quot; href=&amp;quot;{{ SITEURL }}/{{ translation.url }}&amp;quot; hreflang=&amp;quot;{{ translation.lang }}&amp;quot;&amp;gt;{{ translation.lang }}&amp;lt;/a&amp;gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt;{% endfor %}
&lt;span class="ln"&gt; 8 &lt;/span&gt;{% endif %}
&lt;span class="ln"&gt; 9 &lt;/span&gt;&amp;lt;/div&amp;gt;
&lt;span class="ln"&gt;10 &lt;/span&gt;{% endmacro %}
&lt;/pre&gt;
&lt;p&gt;This new macro is called &lt;tt class="docutils literal"&gt;translation for page&lt;/tt&gt;.
And then call it using the following jinja code (or copy-paste it from another template and adapt it):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;{% import 'translations.html' as translations with context %}
&lt;span class="ln"&gt;2 &lt;/span&gt;{% if translations.translations_for_page(page) %}
&lt;span class="ln"&gt;3 &lt;/span&gt;  {{ translations.translations_for_page(page) }}
&lt;span class="ln"&gt;4 &lt;/span&gt;{% endif %}
&lt;/pre&gt;
&lt;p&gt;For good mesure, here is the content of the file &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;content/pages/index_wiki-fr.rst&lt;/span&gt;&lt;/tt&gt;, which corresponds to the &lt;a class="reference external" href="/wiki/index-fr"&gt;french homepage of this wiki&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;Wiki
&lt;span class="ln"&gt; 2 &lt;/span&gt;########
&lt;span class="ln"&gt; 3 &lt;/span&gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;:date: 2021-09-29
&lt;span class="ln"&gt; 5 &lt;/span&gt;:template: custom/index_wiki
&lt;span class="ln"&gt; 6 &lt;/span&gt;:save_as: wiki/index-fr.html
&lt;span class="ln"&gt; 7 &lt;/span&gt;:slug: wiki/index
&lt;span class="ln"&gt; 8 &lt;/span&gt;:category: wiki
&lt;span class="ln"&gt; 9 &lt;/span&gt;:lang: fr
&lt;span class="ln"&gt;10 &lt;/span&gt;:status: published
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="custom-home-page"&gt;
&lt;h3&gt;Custom home page&lt;a class="headerlink" href="#custom-home-page" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p class="warning"&gt;To write properly&lt;/p&gt;
&lt;p&gt;Do not modify the &amp;quot;index.html&amp;quot; file hoping to change the homepage: this file is also used for the category, tags and archives pages, which will probably be messed up if you change it. Instead, create a custom template.&lt;/p&gt;
&lt;p&gt;follow &lt;a class="reference external" href="https://stackoverflow.com/questions/55363180/how-do-i-choose-a-category-page-to-be-the-home-page-for-a-pelican-site"&gt;https://stackoverflow.com/questions/55363180/how-do-i-choose-a-category-page-to-be-the-home-page-for-a-pelican-site&lt;/a&gt;
/!template &amp;quot;homepage&amp;quot; must be in content/templates and exclude it, as weird as it is
then,
&lt;a class="reference external" href="https://stackoverflow.com/questions/19283880/querying-for-specific-articles-via-tag-category-in-pelican-themes"&gt;https://stackoverflow.com/questions/19283880/querying-for-specific-articles-via-tag-category-in-pelican-themes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="navigation-menu-with-article-list"&gt;
&lt;h3&gt;Navigation menu with article list&lt;a class="headerlink" href="#navigation-menu-with-article-list" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;lt;-- &lt;em&gt;As an example, this wiki uses this.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Both the &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/pelican/themes/notmyidea/templates/base.html#L33"&gt;default&lt;/a&gt; (and most popular) theme &amp;quot;notmyidea&amp;quot; and the basic &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/pelican/themes/simple/templates/base.html#L49"&gt;boiletplate theme&lt;/a&gt; &amp;quot;simple&amp;quot; gives a confusing example: the way they iterate on categories is:&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;{% for cat, null in categories %}
&lt;span class="ln"&gt;2 &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="err"&gt;{%&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;cat &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt; &lt;span class="err"&gt;%}&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;active&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;{%&lt;/span&gt; &lt;span class="na"&gt;endif&lt;/span&gt; &lt;span class="err"&gt;%}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ SITEURL }}/{{ cat.url }}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ cat }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;{% endfor %}
&lt;/pre&gt;
&lt;p&gt;It would be tempting to add a loop under it iterating every articles and checking if the current category being processed is the same, but as it turns out the return value being negated by the &amp;quot;null&amp;quot; is the list of the articles in the given category. So simply do:&lt;/p&gt;
&lt;pre class="code html literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;{% for cat, category_articles in categories %}
&lt;span class="ln"&gt;2 &lt;/span&gt;  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;category&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ SITEURL }}/{{ cat.url }}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ cat }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;3 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;4 &lt;/span&gt;        {% for artic in category_articles %}&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;{{ artic.url }}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ artic.title }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;5 &lt;/span&gt;        {% endfor %}
&lt;span class="ln"&gt;6 &lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ln"&gt;7 &lt;/span&gt;{% endfor %}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="articles-listed-per-year"&gt;
&lt;h3&gt;Articles listed per year&lt;a class="headerlink" href="#articles-listed-per-year" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A common way to list articles on personal websites nowaday is to list them by year like so:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2021&lt;/strong&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;I saw a nice rock yesterday&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2020&lt;/strong&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;I'm giving up on that blog&lt;/li&gt;
&lt;li&gt;More articles to come this year!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2019&lt;/strong&gt;&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;A long essay on consciousness&lt;/li&gt;
&lt;li&gt;New blog!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To do so in pelican, here is a skeleton template to use within &lt;tt class="docutils literal"&gt;templates.index.html&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt; 1 &lt;/span&gt;&amp;lt;ul class = &amp;quot;article-list&amp;quot;&amp;gt;
&lt;span class="ln"&gt; 2 &lt;/span&gt;{% for year, year_posts in articles_page.object_list|groupby('date.year')|reverse %}
&lt;span class="ln"&gt; 3 &lt;/span&gt;  &amp;lt;h2&amp;gt;{{year}}&amp;lt;/h2&amp;gt;
&lt;span class="ln"&gt; 4 &lt;/span&gt;      {% for article in year_posts %}
&lt;span class="ln"&gt; 5 &lt;/span&gt;          &amp;lt;li&amp;gt;
&lt;span class="ln"&gt; 6 &lt;/span&gt;            &amp;lt;article&amp;gt;
&lt;span class="ln"&gt; 7 &lt;/span&gt;              &amp;lt;header&amp;gt;
&lt;span class="ln"&gt; 8 &lt;/span&gt;                &amp;lt;h2&amp;gt;
&lt;span class="ln"&gt; 9 &lt;/span&gt;                  &amp;lt;a href=&amp;quot;{{ SITEURL }}/{{ article.url }}&amp;quot; rel=&amp;quot;bookmark&amp;quot; title=&amp;quot;Permalink to {{ article.title|striptags }}&amp;quot;&amp;gt;
&lt;span class="ln"&gt;10 &lt;/span&gt;                    {{ article.title }}
&lt;span class="ln"&gt;11 &lt;/span&gt;                  &amp;lt;/a&amp;gt;
&lt;span class="ln"&gt;12 &lt;/span&gt;                &amp;lt;/h2&amp;gt;
&lt;span class="ln"&gt;13 &lt;/span&gt;              &amp;lt;/header&amp;gt;
&lt;span class="ln"&gt;14 &lt;/span&gt;            &amp;lt;/article&amp;gt;
&lt;span class="ln"&gt;15 &lt;/span&gt;          &amp;lt;/li&amp;gt;
&lt;span class="ln"&gt;16 &lt;/span&gt;      {% endfor %}
&lt;span class="ln"&gt;17 &lt;/span&gt;  {% endfor %}
&lt;span class="ln"&gt;18 &lt;/span&gt;&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Explanation&lt;/strong&gt;: the heavylifting is done by the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;articles_page.object_list|groupby('date.year')|reverse&lt;/span&gt;&lt;/tt&gt; which groups articles per year with the newest ones at the top. The resulting list is unpacked as the year + the list of articles for that year, the latter being iterated on by a second loop.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="list-x-articles"&gt;
&lt;h3&gt;List x articles&lt;a class="headerlink" href="#list-x-articles" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
If for instance you only want to list the first three articles of a category, you can use the &lt;tt class="docutils literal"&gt;counter&lt;/tt&gt; tag like so (in this example, 3 articles will be listed):&lt;/blockquote&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;  &amp;lt;div class = &amp;quot;image-gallery&amp;quot;&amp;gt;
&lt;span class="ln"&gt;2 &lt;/span&gt;    {% set counter = namespace(value=0) %}{% for article in articles if (&amp;quot;miscellaneous_digital_drawings&amp;quot; in article.subcategories and counter.value &amp;lt; 3) %}&amp;lt;a href = &amp;quot;{{ SITEURL }}/{{ article.url }}&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;{{ article.cover_image }}&amp;quot; alt=&amp;quot;{{ counter.value }}&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;{% set counter.value = counter.value + 1 %}
&lt;span class="ln"&gt;3 &lt;/span&gt;    {% endfor %}
&lt;span class="ln"&gt;4 &lt;/span&gt;  &amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="must-have-plugins"&gt;
&lt;h2&gt;Must have plugins&lt;a class="headerlink" href="#must-have-plugins" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Refer yourself to the `pelican-plugins&amp;lt;https://github.com/getpelican/pelican-plugins/&amp;gt;`__ repository for more informations&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;headerid&lt;/strong&gt;: adds relative links to section headers&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="troubleshooting"&gt;
&lt;h2&gt;Troubleshooting&lt;a class="headerlink" href="#troubleshooting" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="typeerror-not-all-arguments-converted-during-string-formatting"&gt;
&lt;h3&gt;&amp;quot;TypeError: not all arguments converted during string formatting&amp;quot;&lt;a class="headerlink" href="#typeerror-not-all-arguments-converted-during-string-formatting" title="Permalink to this headline"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://stackoverflow.com/questions/54047848/pelican-not-all-arguments-converted-during-string-formatting/55130515#55130515"&gt;https://stackoverflow.com/questions/54047848/pelican-not-all-arguments-converted-during-string-formatting/55130515#55130515&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="wiki"></category><category term="pelican"></category></entry><entry><title>Post-install</title><link href="https://aligot-death.space/wiki/sysadmin/linux/post-install-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/post-install-en</id><summary type="html">&lt;p class="first last"&gt;basic personal setup post-install&lt;/p&gt;
</summary><content type="html">&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;usermod&lt;span class="w"&gt; &lt;/span&gt;nemecle&lt;span class="w"&gt; &lt;/span&gt;-aG&lt;span class="w"&gt; &lt;/span&gt;sudo
&lt;/pre&gt;
&lt;p&gt;To install missing firmware (as printed during boot sequence), this command might be enough:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;firmware
&lt;/pre&gt;
&lt;p&gt;Basic packages to install:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;vim&lt;span class="w"&gt; &lt;/span&gt;sysstat&lt;span class="w"&gt; &lt;/span&gt;mlocate&lt;span class="w"&gt; &lt;/span&gt;tmux&lt;span class="w"&gt; &lt;/span&gt;python3-pip&lt;span class="w"&gt; &lt;/span&gt;htop&lt;span class="w"&gt; &lt;/span&gt;rofi&lt;span class="w"&gt; &lt;/span&gt;xbindkeys&lt;span class="w"&gt; &lt;/span&gt;keepassxc&lt;span class="w"&gt; &lt;/span&gt;rsync&lt;span class="w"&gt; &lt;/span&gt;fd-find&lt;span class="w"&gt; &lt;/span&gt;hwinfo&lt;span class="w"&gt; &lt;/span&gt;gparted&lt;span class="w"&gt; &lt;/span&gt;curl
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Recovering from deleted /boot/efi (dual boot)</title><link href="https://aligot-death.space/wiki/sysadmin/linux/recover-deleted-efi-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/recover-deleted-efi-en</id><summary type="html">&lt;p class="first last"&gt;When shit hits the fan.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;the &amp;quot;/boot/efi&amp;quot; partition used to boot is not exclusive to Linux: it is shared with Windows, and thus you can (and should) provide it to utility tools that fix boot. It is usually on /dev/sda2. You can&lt;/em&gt; &lt;tt class="docutils literal"&gt;ls &lt;span class="pre"&gt;-l&lt;/span&gt; /boot/efi&lt;/tt&gt; &lt;em&gt;from a functioning linux to check its content.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The command to &amp;quot;install&amp;quot; grub requires to provide the disk, not a specific partition (e.g. /dev/sda, not /dev/sda2)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The following lines are a crude hint, the full operation might require some other mounting.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First, create a live USB/CD system, and boot on it.&lt;/p&gt;
&lt;p&gt;Then we mount the dead system to be able to work with it:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B /mnt$i; done
&lt;/pre&gt;
&lt;p&gt;And we &lt;tt class="docutils literal"&gt;chroot&lt;/tt&gt; to act as if we were on the dead system:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;chroot /mnt
&lt;/pre&gt;
&lt;p&gt;Then we mount the EFI partition:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;mount /dev/sda2 /boot/efi
&lt;/pre&gt;
&lt;p&gt;And finally we execute the &amp;quot;grub-install&amp;quot; command: The bootloader-id argument will be the name appearing in the EFI boot list if you go to the boot menu. &lt;strong&gt;Type the following command very carefully&lt;/strong&gt;, a lot of people online seem to have errors simply due to typos:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --debug /dev/sda
&lt;/pre&gt;
&lt;p&gt;You may eventually do (once you left chroot with &lt;tt class="docutils literal"&gt;exit&lt;/tt&gt; like any shell instance):&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;update-grub
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Safe bash script boilerplate</title><link href="https://aligot-death.space/wiki/sysadmin/linux/safe-bash-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/safe-bash-en</id><summary type="html"></summary><content type="html">&lt;p&gt;from full boilerplate here &lt;a class="reference external" href="https://betterdev.blog/minimal-safe-bash-script-template/"&gt;https://betterdev.blog/minimal-safe-bash-script-template/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add right after shebang:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;set -Eeuo pipefail
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Using SSH as a VPN</title><link href="https://aligot-death.space/wiki/sysadmin/linux/ssh-as-vpn-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/ssh-as-vpn-en</id><summary type="html">&lt;p class="first last"&gt;Using SSH as a VPN&lt;/p&gt;
</summary><content type="html">&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ssh -NTCD 12345 SSH_remote_host_IP
&lt;/pre&gt;
&lt;p&gt;Then in firefox Preference &amp;gt; Network Setting &amp;gt; Settings… proxy as socks with 127.1:12345
Or for a SSH&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;ssh -o ProxyCommand='nc -x localhost:12345 %h %p' username&amp;#64;Far_Away_Host
&lt;/pre&gt;
&lt;p&gt;from: &lt;a class="reference external" href="https://blog.gwlab.page/vpn-over-ssh-the-socks-proxy-8a8d7bdc7028"&gt;https://blog.gwlab.page/vpn-over-ssh-the-socks-proxy-8a8d7bdc7028&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;or sshuttle&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>SSH tunnel</title><link href="https://aligot-death.space/wiki/sysadmin/linux/ssh-tunnel-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/ssh-tunnel-en</id><summary type="html">&lt;p class="first last"&gt;Using ssh as a tunnel to remote host on local network&lt;/p&gt;
</summary><content type="html">&lt;pre class="code bash literal-block"&gt;
ssh&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;34423&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;nemecle&amp;#64;frigg.nemecl.eu&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5001&lt;/span&gt;:192.168.1.152:5000&lt;span class="w"&gt; &lt;/span&gt;-N
&lt;/pre&gt;
&lt;p&gt;Then open browser and go to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;http(s)://localhost:5001&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Use "thin non-breaking space"</title><link href="https://aligot-death.space/wiki/sysadmin/linux/thin-breaking-space-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/thin-breaking-space-en</id><summary type="html">&lt;p class="first last"&gt;Using thin breaking spaces with Plasma&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Useful for french typography.&lt;/p&gt;
&lt;p&gt;On Plasma Desktop:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Settings &amp;gt; Keyboard  &amp;gt; Key Bindings&lt;/li&gt;
&lt;li&gt;check &amp;quot;Configure keyboard options&amp;quot;&lt;/li&gt;
&lt;li&gt;search for &amp;quot;non-breaking&amp;quot;&lt;/li&gt;
&lt;li&gt;check &amp;quot;non-breaking space at the third level for Alt-Gr + Space&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(for other combinations like Shift + Space, see &lt;a class="reference external" href="https://forums.linuxmint.com/viewtopic.php?t=362965"&gt;https://forums.linuxmint.com/viewtopic.php?t=362965&lt;/a&gt;)&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>vim battle hardened config</title><link href="https://aligot-death.space/wiki/sysadmin/linux/vim-config-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/vim-config-en</id><summary type="html">&lt;p class="first last"&gt;My personal base config for vim.&lt;/p&gt;
</summary><content type="html">&lt;pre class="code literal-block"&gt;
&amp;quot; BASIC CONFIG
set encoding=utf-8
syntax on
set nu
set rnu
set hls
set sm
set smarttab
set nocompatible
set scrolloff=30
set backspace=indent,eol,start &amp;quot; backspace over everything in insert mode
set ignorecase  &amp;quot; do case insensitive search
set incsearch   &amp;quot; show incremental search results as you type


&amp;quot; STYLE
&amp;quot; colorscheme peachpuff
highlight LineNr ctermfg=black ctermbg=grey
let g:indentLine_color_term = 239


&amp;quot; MAPPING
noremap &amp;lt;space&amp;gt; :
nnoremap &amp;lt;F2&amp;gt; za &amp;quot; Enable folding with F2

&amp;quot; Always show statusline
set laststatus=2
set t_Co=256&amp;quot;


set foldmethod=indent
set foldlevel=99

set tabstop=4
set softtabstop=4
set shiftwidth=4
set textwidth=79
set wrapmargin=0
set expandtab
set autoindent
set fileformat=unix

&amp;quot; web
au BufNewFile,BufRead *.html,*.css,*js
    \ set tabstop=2 |
    \ set softtabstop=2 |
    \ set shiftwidth=2

autocmd BufRead,BufNewFile /etc/nginx/sites-*/* setfiletype conf

&amp;quot; to test
&amp;quot; Bind  key to run python3
&amp;quot; map  :w\|!python3 %
&amp;quot; &amp;quot; Bind  key to run doctests in a python3 module
&amp;quot; map  :w\|!python3 -m doctest %
&amp;quot; &amp;quot; Bind  key to run doctests with verbose output
&amp;quot; map  :w\|!python3 -m doctest -v %
&amp;quot; &amp;quot; Bind  key to run pep8 Python style checker
&amp;quot; map  :w\|!pep8 %
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>WAcom tablet configuration</title><link href="https://aligot-death.space/wiki/sysadmin/linux/wacom-config-en-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/wacom-config-en-en</id><summary type="html">&lt;p class="first last"&gt;left-handed wacom configuration&lt;/p&gt;
</summary><content type="html">&lt;p&gt;CLI commands for left-handed, second screen excluded:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;
&lt;span class="ln"&gt;1 &lt;/span&gt;xsetwacom set &amp;quot;Wacom Bamboo 16FG 4x5 Pen stylus&amp;quot; rotate HALF
&lt;span class="ln"&gt;2 &lt;/span&gt;xsetwacom set &amp;quot;Wacom Bamboo 16FG 4x5 Pen eraser&amp;quot; rotate HALF
&lt;span class="ln"&gt;3 &lt;/span&gt;xsetwacom set &amp;quot;Wacom Bamboo 16FG 4x5 Pen stylus&amp;quot; MapToOutPut 1920x1080+0+0
&lt;span class="ln"&gt;4 &lt;/span&gt;xsetwacom set &amp;quot;Wacom Bamboo 16FG 4x5 Pen eraser&amp;quot; MapToOutPut 1920x1080+0+0
&lt;/pre&gt;
&lt;p&gt;To debug:
(from &lt;a class="reference external" href="http://migueleonardortiz.com.ar/linux/measuring-level-of-pressure-in-wacom-tablets-or-other-devices/1988"&gt;Measuring level of pressure in wacom, tablets or other devices&lt;/a&gt;)&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Windows:  java JWinPointer.&lt;/li&gt;
&lt;li&gt;Linux sudo &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;apt-get&lt;/span&gt; install &lt;span class="pre"&gt;evemu-tools&lt;/span&gt; evtest&lt;/tt&gt;, then &lt;tt class="docutils literal"&gt;sudo evtest&lt;/tt&gt; (&lt;strong&gt;sudo is necessary&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;the GIMP configuration: &lt;a class="reference external" href="https://digimend.github.io/support/howto/apps/gimp/"&gt;https://digimend.github.io/support/howto/apps/gimp/&lt;/a&gt;&lt;/p&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry><entry><title>Simple log analyzer for web traffic</title><link href="https://aligot-death.space/wiki/sysadmin/linux/web-log-analyzer-en" rel="alternate"></link><published>2021-03-22T00:00:00+01:00</published><updated>2025-08-04T00:00:00+02:00</updated><author><name>nemecle</name></author><id>tag:aligot-death.space,2021-03-22:/wiki/sysadmin/linux/web-log-analyzer-en</id><summary type="html">&lt;p class="first last"&gt;Simple log analyzer tool&lt;/p&gt;
</summary><content type="html">&lt;pre class="code bash literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;goaccess
&lt;/pre&gt;
&lt;p&gt;Then use like:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/var/log/nginx&lt;span class="w"&gt;
&lt;/span&gt;goaccess&lt;span class="w"&gt; &lt;/span&gt;example.com.access.log
&lt;/pre&gt;
&lt;p&gt;If your logs are setup as &amp;quot;combined&amp;quot; (multiple vhosts per file):&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
goaccess&lt;span class="w"&gt; &lt;/span&gt;example.com.access.log&lt;span class="w"&gt; &lt;/span&gt;--log-format&lt;span class="o"&gt;=&lt;/span&gt;COMBINED
&lt;/pre&gt;
&lt;p&gt;To concatenate multiple files:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;zcat&lt;span class="w"&gt; &lt;/span&gt;aligot-death.space.access.log.*.gz&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;goaccess&lt;span class="w"&gt; &lt;/span&gt;--log-format&lt;span class="o"&gt;=&lt;/span&gt;COMBINED
&lt;/pre&gt;
</content><category term="wiki"></category><category term="system administration"></category></entry></feed>