<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>deaddabe</title><link href="https://deaddabe.fr/" rel="alternate"/><link href="https://deaddabe.fr/feeds/all.atom.xml" rel="self"/><id>https://deaddabe.fr/</id><updated>2022-09-02T00:00:00+02:00</updated><entry><title>Configuring Vimium-C bindings for BÉPO</title><link href="https://deaddabe.fr/blog/2022/09/02/configuring-vimium-c-bindings-for-bepo/" rel="alternate"/><published>2022-09-02T00:00:00+02:00</published><updated>2022-09-02T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-09-02:/blog/2022/09/02/configuring-vimium-c-bindings-for-bepo/</id><summary type="html">&lt;p&gt;&lt;a class="reference external" href="https://bepo.fr/wiki/Vim"&gt;Vimium-C&lt;/a&gt; is a browser extension for using Vim-like bindings while surfing.
Let’s see how we can configure it for the BÉPO keyboard layout.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="https://bepo.fr/wiki/Vim"&gt;Vimium-C&lt;/a&gt; is a browser extension for using Vim-like bindings while surfing.
Let’s see how we can configure it for the BÉPO keyboard layout.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://bepo.fr/wiki/Accueil"&gt;BÉPO&lt;/a&gt; is a French-focused keyboard layout. Every key binding in programs need
to be refined because the usual keybindings are more or less accessible. This
is especially true for vim-like software, where HJKL becomes CTSR.&lt;/p&gt;
&lt;div class="section" id="custom-key-mappings"&gt;
&lt;h2&gt;Custom key mappings&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://bepo.fr/wiki/Vim"&gt;Like in vim&lt;/a&gt;, the first step is to unbind the default key mappings, in order to
redefine them with a more ergonomic disposition:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# Scrolling

unmap j
unmap k
unmap h
unmap l

unmap t
#unmap s
#unmap c
unmap r

map t scrollDown
map s scrollUp
map c scrollLeft
map r scrollRight

# History
unmap H
unmap L
#unmap C
unmap R

map C goBack
map R goForward

# Tabs
unmap J
unmap K
unmap T
#unmap S

map T previousTab
map S nextTab
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="characters-used-for-links"&gt;
&lt;h2&gt;Characters used for links&lt;/h2&gt;
&lt;p&gt;When using the leader key for navigating links, the default keys will be
accessible on a QWERTY keyboard. As you have guessed, we will need to change
this setting as well in order to have an ergonomic experience with our BÉPO
layout:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# Default is `sadjklewcmpgh`
ubitsrpaxnj,c
&lt;/pre&gt;
&lt;p&gt;Aaaand… that’s it!&lt;/p&gt;
&lt;p&gt;This article is mostly for myself, so that when I install the extension on a
new browser I can just copy/paste it from here. If it can help others BÉPOists,
even better!&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="vim"/></entry><entry><title>Finishing my first cybersecurity challenge</title><link href="https://deaddabe.fr/blog/2022/06/01/finishing-my-first-cybersecurity-challenge/" rel="alternate"/><published>2022-06-01T00:00:00+02:00</published><updated>2022-06-01T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-06-01:/blog/2022/06/01/finishing-my-first-cybersecurity-challenge/</id><summary type="html">&lt;p&gt;I have completed my first “CTF”, or kind of; it was for beginners, but fun!&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have completed my first “CTF”, or kind of; it was for beginners, but fun!&lt;/p&gt;
&lt;p&gt;Yesterday I started (and finished) the very first &lt;a class="reference external" href="https://overthewire.org/wargames/"&gt;wargame&lt;/a&gt; offered by
&lt;a class="reference external" href="https://overthewire.org/information/donate.html"&gt;OverTheWire&lt;/a&gt;, named &lt;a class="reference external" href="https://overthewire.org/wargames/bandit/"&gt;Bandit&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
The Bandit wargame is aimed at absolute beginners. It will teach the basics
needed to be able to play other wargames. If you notice something essential
is missing or have ideas for new levels, please let us know!&lt;/blockquote&gt;
&lt;p&gt;I found the link to this website on a &lt;a class="reference external" href="https://news.ycombinator.com/item?id=31559117"&gt;Hacker News discussion&lt;/a&gt; about hacking
satellites.&lt;/p&gt;
&lt;p&gt;The levels go from &lt;a class="reference external" href="https://overthewire.org/wargames/bandit/bandit0.html"&gt;0&lt;/a&gt; to &lt;a class="reference external" href="https://overthewire.org/wargames/bandit/bandit34.html"&gt;34&lt;/a&gt;. I just wanted to start the first one, but then
was curious about the next one, and the next one… and finally did all of the
levels in a few hours. Despite the website asking to not share info about how
to get to the next level, answers can be found online. I did have to look for
them for challenges &lt;a class="reference external" href="https://overthewire.org/wargames/bandit/bandit26.html"&gt;26&lt;/a&gt; and &lt;a class="reference external" href="https://overthewire.org/wargames/bandit/bandit33.html"&gt;33&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Of the few things that has helped me, I retained the following advices for
future challenges:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;keep a big file for taking notes (I used &lt;a class="reference external" href="https://obsidian.md/"&gt;Obsidian&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://manpages.debian.org/bullseye/man-db/man.1.en.html"&gt;manpages, manpages, manpages&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;mktemp &lt;span class="pre"&gt;-d&lt;/span&gt;&lt;/tt&gt; to create a temporary directory;&lt;/li&gt;
&lt;li&gt;use &lt;tt class="docutils literal"&gt;openssl&lt;/tt&gt; to connect to TCP TLS servers;&lt;/li&gt;
&lt;li&gt;use &lt;tt class="docutils literal"&gt;nmap&lt;/tt&gt; to scan ports; &lt;em&gt;and&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;more&lt;/tt&gt; is not a secure shell.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I really enjoyed this challenge. The website recommends to switch to one of
these other wargames after this one:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://overthewire.org/wargames/leviathan/"&gt;Leviathan&lt;/a&gt; (SSH intrusion, similar to Bandit but without help);&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://overthewire.org/wargames/natas/"&gt;Natas&lt;/a&gt; (HTTP intrusion);&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://overthewire.org/wargames/krypton/krypton0.html"&gt;Krypton&lt;/a&gt; (cryptography challenges).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think I will try the Leviathan challenge next. Having no help could be a real
challenge but it is closer to real penetration testing. Another thing I would
like to do is &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Reverse_engineering#Software"&gt;reverse-engineering&lt;/a&gt; of binary files and proprietary
transmission protocols.&lt;/p&gt;
&lt;p&gt;Stay tuned!&lt;/p&gt;
</content><category term="articles"/></entry><entry><title>Status update, May 2022</title><link href="https://deaddabe.fr/blog/2022/05/20/status-update-may-2022/" rel="alternate"/><published>2022-05-20T00:00:00+02:00</published><updated>2022-05-20T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-05-20:/blog/2022/05/20/status-update-may-2022/</id><summary type="html">&lt;p&gt;Boing, time for another status update.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Boing, time for another status update.&lt;/p&gt;
&lt;div class="section" id="debian-work"&gt;
&lt;h2&gt;Debian work&lt;/h2&gt;
&lt;p&gt;I have finally found how to make my &lt;a class="reference external" href="https://tracker.debian.org/pkg/fonts-creep2"&gt;fonts-creep2&lt;/a&gt; package work on my Debian
machines. The solution was to not use the TTF file that contains the Bitmap
glyphs, but instead &lt;a class="reference external" href="https://salsa.debian.org/fonts-team/fonts-creep2/-/commit/e3c2fdda265190b624869c2ae6ec2cdae484e950"&gt;generate&lt;/a&gt; an OTB file, which is an &lt;a class="reference external" href="https://en.wikipedia.org/wiki/OpenType"&gt;OpenType&lt;/a&gt; format for
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Computer_font#BITMAP="&gt;Bitmap fonts&lt;/a&gt;.&lt;/p&gt;
&lt;img alt="Creep2 font used in htop command" src="https://deaddabe.fr/blog/2022/05/20/status-update-may-2022/creep2-htop.png"/&gt;
&lt;p&gt;This means that I can &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008785"&gt;close the fonts-creep ITP bug&lt;/a&gt; altogether and rely on
this &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;fonts-creep2&lt;/span&gt;&lt;/tt&gt; package instead. Hopefully it will be reviewed and
uploaded soon by a certified™ Debian Developer.&lt;/p&gt;
&lt;p&gt;This font is too small for daily usage, but imagine the quantity of data you
could display on an auxiliary screen with poor resolution (and poor pixel
density eventually).&lt;/p&gt;
&lt;p&gt;Here is a meme I created for the occasion:&lt;/p&gt;
&lt;img alt="Hide the pain Harold meme. First: Package software and its gazillion dependencies. Second: Popcon says I'm the only user." src="https://deaddabe.fr/blog/2022/05/20/status-update-may-2022/debian-meme-itp.png"/&gt;
&lt;p&gt;Checks out.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rust-work"&gt;
&lt;h2&gt;Rust work&lt;/h2&gt;
&lt;p&gt;I have &lt;em&gt;obsoleted&lt;/em&gt; my most popular Rust crate, &lt;a class="reference external" href="https://crates.io/crates/gladis"&gt;gladis&lt;/a&gt;.&lt;/p&gt;
&lt;img alt="Screenshot of the Gladis Github README" src="https://deaddabe.fr/blog/2022/05/20/status-update-may-2022/gladis-github-screenshot.png"/&gt;
&lt;p&gt;Indeed, the GTK folks have managed to develop a similar solution named
&lt;a class="reference external" href="https://gtk-rs.org/gtk4-rs/stable/latest/book/composite_templates.html"&gt;CompositeTemplate&lt;/a&gt;, that is available in both &lt;a class="reference external" href="https://crates.io/crates/gtk3-macros"&gt;gtk3-macros&lt;/a&gt; and &lt;a class="reference external" href="https://crates.io/crates/gtk4-macros"&gt;gtk4-macros&lt;/a&gt;
crates. I did not investigate from how long this has been available before I
created this crate. Hopefully it did not exist before I developed it.&lt;/p&gt;
&lt;p&gt;I have learnt a lot about Rust crates development with this crate, and managed
to put in place a &lt;a class="reference external" href="https://github.com/MicroJoe/gladis/blob/main/release.toml"&gt;semi-automated release flow&lt;/a&gt; that I will surely use in other
future crates.&lt;/p&gt;
&lt;p&gt;See ya.&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="status_update"/><category term="debian"/><category term="rust"/></entry><entry><title>Git aliases for Gerrit-based workflow</title><link href="https://deaddabe.fr/blog/2022/05/03/git-aliases-for-gerrit-based-workflow/" rel="alternate"/><published>2022-05-03T00:00:00+02:00</published><updated>2022-05-03T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-05-03:/blog/2022/05/03/git-aliases-for-gerrit-based-workflow/</id><summary type="html">&lt;p&gt;After using Gerrit professionally for almost 5 years, I have came up with a set
of 6 simple git aliases to ease things up.&lt;/p&gt;</summary><content type="html">&lt;p&gt;After using Gerrit professionally for almost 5 years, I have came up with a set
of 6 simple git aliases to ease things up.&lt;/p&gt;
&lt;div class="section" id="one-does-not-push-force"&gt;
&lt;h2&gt;One does not push force&lt;/h2&gt;
&lt;p&gt;I now really like &lt;a class="reference external" href="https://www.gerritcodereview.com/"&gt;Gerrit&lt;/a&gt; compared to &lt;a class="reference external" href="https://github.com/"&gt;Github&lt;/a&gt; and &lt;a class="reference external" href="https://about.gitlab.com/"&gt;Gitlab&lt;/a&gt;-based merge requests
workflow. One of the main reasons is that Gerrit allows you to refine your
commit using multiple &lt;a class="reference external" href="https://gerrit-review.googlesource.com/Documentation/concept-patch-sets.html"&gt;patchsets&lt;/a&gt;, until is is good enough to be merged. In the
&lt;a class="reference external" href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests"&gt;PR/MR&lt;/a&gt; way, from my observations, you push many fix commits into your
development branch — or eventually push-force to your branch a refined commit.&lt;/p&gt;
&lt;p&gt;This PR/MR workflow leads to commit pollution because of all of the extra fix
commits and merge commits, or hard-to-review PR/MR if a force push is used
because the interface does not keep track of “patchset revisions” like Gerrit.&lt;/p&gt;
&lt;p&gt;The Gerrit flow however comes with an extra cost: having to put a &lt;a class="reference external" href="https://gerrit-review.googlesource.com/Documentation/user-changeid.html"&gt;Change-Id&lt;/a&gt;
trailer in every commit message. For me this is fine as long as doing
closed-source work. When upstreaming, one has to remember to remove these
&lt;a class="reference external" href="https://git-scm.com/docs/git-interpret-trailers"&gt;trailers&lt;/a&gt; from the patchset.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="pushing-to-review"&gt;
&lt;h2&gt;Pushing to review&lt;/h2&gt;
&lt;p&gt;You basically interact from Git to Gerrit using two commands:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Creating a review: &lt;tt class="docutils literal"&gt;git push origin &lt;span class="pre"&gt;HEAD:refs/for/your-branch%topic=your-topic&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Updating a review: &lt;tt class="docutils literal"&gt;git push origin &lt;span class="pre"&gt;HEAD:refs/for/your-branch&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of your work will be targeting the &lt;tt class="docutils literal"&gt;master&lt;/tt&gt; branches; probably &lt;tt class="docutils literal"&gt;main&lt;/tt&gt;
for newer repositories with an up-to-date Gerrit version (or not, depends on
upstream and company policy). This assumption allows us to create the first
alias for updating reviews to the &lt;tt class="docutils literal"&gt;master&lt;/tt&gt; branch:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# update gerrit, master
ug = git push origin HEAD:refs/for/master
&lt;/pre&gt;
&lt;p&gt;If your want to update to a branch other than main, we can create another alias
that can take a parameter. Because git aliases is very basic, it does not allow
us to compose strings. This is fine if you want to pass arguments as-is to
other programs, but we will need to make a bit of string concatenation for our
next alias to work. Hopefully, on Debian systems &lt;tt class="docutils literal"&gt;sh&lt;/tt&gt; is &lt;tt class="docutils literal"&gt;dash&lt;/tt&gt; and is
very fast to fork, so we can use it to concatenate the strings:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# update gerrit, custom branch
ugb = "!sh -c \"git push origin HEAD:refs/for/$1\""
&lt;/pre&gt;
&lt;p&gt;Now that we have this trick, we can create two other aliases for creating
reviews by taking the topic as a parameter:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
# create gerrit, master
cg = "!sh -c \"git push origin HEAD:refs/for/master%topic=$1\""
# create gerrit, custom branch
cgb = "!sh -c \"git push origin HEAD:refs/for/$1%topic=$2\""
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="final-aliases"&gt;
&lt;h2&gt;Final aliases&lt;/h2&gt;
&lt;p&gt;This provides us with the final aliases to work comfortably with Gerrit:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
cg = "!sh -c \"git push origin HEAD:refs/for/master%topic=$1\""
cgb = "!sh -c \"git push origin HEAD:refs/for/$1%topic=$2\""
ug = git push origin HEAD:refs/for/master
ugb = "!sh -c \"git push origin HEAD:refs/for/$1\""
&lt;/pre&gt;
&lt;p&gt;Here are two bonus aliases, just for your eyes (and for my future self):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
fix = commit --amend --no-edit
fixmodules = "!sh -c \"git st --porcelain | awk '/M/ {print \\$2}' | tee | xargs -n1 git submodule update\""
&lt;/pre&gt;
&lt;p&gt;The first one is because you will be reworking the same commit again and again,
instead of pushing fix commits. So better get used to do this quickly.&lt;/p&gt;
&lt;p&gt;The last one will fix out-of-date checked-out &lt;a class="reference external" href="https://git-scm.com/book/en/v2/Git-Tools-Submodules"&gt;submodules&lt;/a&gt; only. Using &lt;tt class="docutils literal"&gt;git
submodule update&lt;/tt&gt; would update all of the submodules, even the ones that are
not currently checked out, and this is will take hours on our system.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="git"/></entry><entry><title>Exporting MOV and MP4 animations from GIMP</title><link href="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/" rel="alternate"/><published>2022-04-27T00:00:00+02:00</published><updated>2022-04-27T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-04-27:/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/</id><summary type="html">&lt;p&gt;To this date, the GIMP can export to GIF and WEBP animations. But what about
video formats? We are not there yet, but ImageMagick and FFMPEG can help us.
Warning: contains rent againt GIMP animation support.&lt;/p&gt;</summary><content type="html">&lt;p&gt;To this date, the GIMP can export to GIF and WEBP animations. But what about
video formats? We are not there yet, but ImageMagick and FFMPEG can help us.
Warning: contains rent againt GIMP animation support.&lt;/p&gt;
&lt;div class="section" id="the-need-obs-studio-animations"&gt;
&lt;h2&gt;The need: OBS Studio animations&lt;/h2&gt;
&lt;p&gt;Why would you want to export animations in video formats in the first place?
Well, video recording and streaming software like &lt;a class="reference external" href="https://obsproject.com/fr/"&gt;OBS Studio&lt;/a&gt; does not
support animated &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebP"&gt;WebP&lt;/a&gt; images as a media input.&lt;/p&gt;
&lt;p&gt;There is still the possibility of using the old &lt;a class="reference external" href="https://en.wikipedia.org/wiki/GIF"&gt;GIF&lt;/a&gt; format for that, but the
quality is going to be degraded for images with a lot of colors. &lt;a class="reference external" href="https://en.wikipedia.org/wiki/APNG"&gt;APNG&lt;/a&gt; and &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Multiple-image_Network_Graphics"&gt;MNG&lt;/a&gt;
are not supported either as animated inputs.&lt;/p&gt;
&lt;p&gt;This leaves us with a few &lt;em&gt;video&lt;/em&gt; formats for importing our videos into OBS:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/QuickTime_File_Format"&gt;MOV&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/MPEG-4_Part_14"&gt;MP4&lt;/a&gt; (not tested); &lt;em&gt;and&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebM"&gt;WebM&lt;/a&gt; (not tested).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, it seems that using compressed codecs may have some overhead during
playback, &lt;a class="reference external" href="https://www.reddit.com/r/obs/comments/lkhrua/comment/hhqwstl/?context=3"&gt;at least for WebM&lt;/a&gt; that does not seem to have hardware decoding.
This may be different for MP4.&lt;/p&gt;
&lt;p&gt;I did not want to take the risk and went to the old battle-tested MOV format
for my experiment.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="gimp-animations-are-just-layers"&gt;
&lt;h2&gt;GIMP animations are just layers&lt;/h2&gt;
&lt;p&gt;GIMP has a &lt;a class="reference external" href="https://www.gimp.org/tutorials/Simple_Animations/"&gt;very basic support of animation playback&lt;/a&gt;, in the form of
displaying and masking layers or adding them on each other. Given the look of
this web page, you can guess that the support for animations is not a priority
nor has seen big changes in the last years:&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="Old screenshot of the GIMP" src="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/gimp_oldschool.png"/&gt;
&lt;p class="caption"&gt;This probably dates from 2002 according to the Copyright date of the page.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;After creating an animation, you have a lot of layers that represent the
different frames.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="exporting-layers-is-hard"&gt;
&lt;h2&gt;Exporting layers is hard!&lt;/h2&gt;
&lt;p&gt;Since the GIMP is not able to export in any video format, we will just have to
create one using FFMPEG by combining all of the layers ourselves. But wait! The
GIMP has no way to export all layers!&lt;/p&gt;
&lt;p&gt;This is &lt;a class="reference external" href="https://askubuntu.com/questions/485917/gimp-export-every-layer-as-a-separate-png-image"&gt;a known issue from a long time&lt;/a&gt;. There is a &lt;a class="reference external" href="https://khalim19.github.io/gimp-plugin-export-layers/sections/Usage.html"&gt;plugin&lt;/a&gt; that is supposed
to fix that, but it does not appear in the GIMP's plugin manager interface. As
I did not want to spend time figuring how to install plugins manually, I went
the hard way: &lt;em&gt;exporting to MNG&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;MNG is not widely used and &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Multiple-image_Network_Graphics"&gt;even its support in the GIMP is partial&lt;/a&gt;. It is
based on putting together a bunch of PNG files, and was eventually replaced by
APNG, which GIMP only support by an &lt;a class="reference external" href="https://web.archive.org/web/20140525213646/http://registry.gimp.org/node/24394"&gt;outdated plugin&lt;/a&gt;. So we will use MNG to
export our animation, even if no software can play it back. ¯_(ツ)_/¯&lt;/p&gt;
&lt;img alt="MNG export dialog from GIMP" class="image-process-article-image" src="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/derivatives/article-image/export_mng.png"/&gt;
&lt;p&gt;The MNG exporter does not show us any progress bar, so we have to wait. WebP
does provide a progress bar, but it is way slower than MNG at exporting since
it compresses more — even when lossless is activated — and there is no way to
tell it to not compress that much in the export window:&lt;/p&gt;
&lt;img alt="WebP export dialog from GIMP" class="image-process-article-image" src="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/derivatives/article-image/export_webp.png"/&gt;
&lt;/div&gt;
&lt;div class="section" id="converting-mng-to-mov-and-mp4"&gt;
&lt;h2&gt;Converting MNG to MOV and MP4&lt;/h2&gt;
&lt;p&gt;Now that the MNG image is generated, we can extract the layers using
&lt;a class="reference external" href="https://imagemagick.org/"&gt;ImageMagick&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ convert animation.mng frame%03d.png
&lt;/pre&gt;
&lt;p&gt;This results in many files being created as excepted: be sure to run this
command inside of a dedicated directory.&lt;/p&gt;
&lt;img alt="Screenshot of the first generated PNG files" src="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/frames.png"/&gt;
&lt;p&gt;And regroup the frames using FFMPEG into a MOV and MP4 clip at the desired
framerate:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ ffmpeg -r 30 -i frame%03d.png out.mov
$ ffmpeg -r 30 -i frame%03d.png out.mp4
&lt;/pre&gt;
&lt;p&gt;I will use the MOV file into OBS in order to not make the CPU load too much,
but I guess I could also use MP4 inside of OBS if the decoding is not that
slow.&lt;/p&gt;
&lt;p&gt;Here is the result:&lt;/p&gt;
&lt;video autoplay="" loop=""&gt;
&lt;source src="out.webm" type="video/webm"/&gt;
&lt;source src="out.mp4" type="video/mp4"/&gt;
    Sorry, your browser does not support embedded videos.
&lt;/video&gt;&lt;!-- Need to link the videos, elsewise they will not be attached to the article.
Should be fixed when upstream docutils support video tag or something. --&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/out.webm"&gt;WebM video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://deaddabe.fr/blog/2022/04/27/exporting-mov-and-mp4-animations-from-gimp/out.mp4"&gt;MP4 video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;It boggles my mind that GIMP is not able to natively export layers as distinct
images. I guess next time I will try the plugin — or you can do it and come
back to me with your results!&lt;/p&gt;
&lt;p&gt;See ya.&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/></entry><entry><title>Status update, April 2022</title><link href="https://deaddabe.fr/blog/2022/04/13/status-update-april-2022/" rel="alternate"/><published>2022-04-13T00:00:00+02:00</published><updated>2022-04-13T00:00:00+02:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-04-13:/blog/2022/04/13/status-update-april-2022/</id><summary type="html">&lt;p&gt;After missing the previous March update, here we go again!&lt;/p&gt;</summary><content type="html">&lt;p&gt;After missing the previous March update, here we go again!&lt;/p&gt;
&lt;div class="section" id="new-avatar"&gt;
&lt;h2&gt;New avatar&lt;/h2&gt;
&lt;p&gt;I created myself a new avatar! Of course, I designed it as a pixel-art picture
— as you should know if you have been following the &lt;a class="reference external" href="https://deaddabe.fr/blog/2022/03/01/status-update-february-2022/"&gt;previous status update&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since I am still trying to &lt;a class="reference external" href="drawabox.com/"&gt;learn to draw stuff&lt;/a&gt;, I used my previous avatar
that I created with a &lt;a class="reference external" href="https://picrew.me/"&gt;Picrew&lt;/a&gt; generator as a base.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://deaddabe.fr/blog/2022/04/13/status-update-april-2022/avatar-creation-process.png"&gt;&lt;img alt="First taking the image, then manually painting it to pixel art" src="https://deaddabe.fr/blog/2022/04/13/status-update-april-2022/avatar-creation-process.png"/&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Creation process of the avatar&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nothing fancy here. I imported the avatar in &lt;a class="reference external" href="https://www.aseprite.org/"&gt;Aseprite&lt;/a&gt; and then draw over it.
Well, it took me some time nonetheless. I estimate it to be around 2 or 3
hours. Note that I am still a beginner, so this (may) explain that.&lt;/p&gt;
&lt;p&gt;If you ask me, I am very happy with the result.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="lospec-palette-scrapper"&gt;
&lt;h2&gt;Lospec palette scrapper&lt;/h2&gt;
&lt;p&gt;I have cleaned up my little scrapper script for the &lt;a class="reference external" href="https://lospec.com/palette-list"&gt;Lospec palettes&lt;/a&gt;, and have
&lt;a class="reference external" href="https://github.com/MicroJoe/lospec-palette-scrapper"&gt;uploaded the project on Github&lt;/a&gt;. Lospec is a website that I have been using
for retrieving cool color palettes for doing pixel art.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://deaddabe.fr/blog/2022/04/13/status-update-april-2022/lospec-palette-scrapper-logo.png"&gt;&lt;img alt="Logo of the lospec-palette-scrapper project" src="https://deaddabe.fr/blog/2022/04/13/status-update-april-2022/lospec-palette-scrapper-logo.png"/&gt;&lt;/a&gt;
&lt;p&gt;I quickly drafter a logo, ironically in vectorial format using Inkscape.&lt;/p&gt;
&lt;p&gt;I also took the opportunity to upload the scrapped data directly into the
repository, because who knows how may the Lospec website author may react to
this. Whatever happens, the data will stay available in the repository.&lt;/p&gt;
&lt;p&gt;The initial goal of this side project was to create an offline-first palette
browser in GTK4, but I first needed the data. To be continued (?).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="debian-work"&gt;
&lt;h2&gt;Debian work&lt;/h2&gt;
&lt;p&gt;The Debian work still continues, although it has calmed down. I am still trying
to figure out &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1006953"&gt;how to make font-creep2 recognised in various software&lt;/a&gt; — if
not giving up &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008785"&gt;by proposing to package its original variant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also made a lot of progress on my personal (semi-private) dashboard to track
my progression of packaging work. This is something that I should be able to
present soon to the other Debianites, if the proposed presentation is accepted
by the reviewers. I will be sure to make a case in point here if in any case.&lt;/p&gt;
&lt;p&gt;Until then, happy coding!&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="status_update"/><category term="arts"/><category term="debian"/></entry><entry><title>Status update, February 2022</title><link href="https://deaddabe.fr/blog/2022/03/01/status-update-february-2022/" rel="alternate"/><published>2022-03-01T00:00:00+01:00</published><updated>2022-03-01T00:00:00+01:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-03-01:/blog/2022/03/01/status-update-february-2022/</id><summary type="html">&lt;p&gt;Published one day late because of &lt;em&gt;reasons&lt;/em&gt;, here is another status update.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Published one day late because of &lt;em&gt;reasons&lt;/em&gt;, here is another status update.&lt;/p&gt;
&lt;div class="section" id="arts"&gt;
&lt;h2&gt;Arts&lt;/h2&gt;
&lt;p&gt;This comes first, because it is what I dedicated most of my time recently.
Well, I still have a problem regarding the “art” word as I am really not that
great but more of a beginner.&lt;/p&gt;
&lt;p&gt;Mostly, I am currently trying to learn and practising:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Pixel-art; &lt;em&gt;and&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Hand-drawing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I started with pixel-art first — but as someone who does not know how to draw
things properly, I realised that pixel art is not a magical shortcut. One &lt;em&gt;still
needs to know how to draw&lt;/em&gt;, even if twiddling with pixels.&lt;/p&gt;
&lt;p&gt;Here is one realization of mine, using cubes because I can’t draw much more:&lt;/p&gt;
&lt;img alt="Small cube lifting off from a bigger cube." src="https://deaddabe.fr/blog/2022/03/01/status-update-february-2022/CubeLaunch.gif"/&gt;
&lt;p&gt;For hand drawing I am using &lt;a class="reference external" href="https://drawabox.com/"&gt;Drawabox&lt;/a&gt;, and I have nothing special to show here.
I am doing the exercises as well as practising on white paper and notebooks,
nothing fancy (mostly boxes and triangles, if you &lt;em&gt;really&lt;/em&gt; want to be
disappointed).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rust-work"&gt;
&lt;h2&gt;Rust work&lt;/h2&gt;
&lt;div class="section" id="gladis"&gt;
&lt;h3&gt;Gladis&lt;/h3&gt;
&lt;p&gt;I have released a new major version of &lt;a class="reference external" href="https://github.com/MicroJoe/gladis"&gt;gladis&lt;/a&gt;, named 2.0. This is a breaking
change, because it is now requiring the latest 0.15 &lt;a class="reference external" href="https://github.com/gtk-rs/gtk3-rs"&gt;gtk-rs&lt;/a&gt; crate, instead of
the previous 0.14 version in the 1.x versions series.&lt;/p&gt;
&lt;p&gt;There are no major changes regarding the code itself, but there have been many
changes in “chore” tasks like described in the &lt;a class="reference external" href="https://github.com/MicroJoe/gladis/blob/main/CHANGELOG.md#200---2022-02-17"&gt;CHANGELOG&lt;/a&gt;. Mainly, these have
been:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Making the project &lt;em&gt;REUSE-compliant&lt;/em&gt;; &lt;em&gt;and&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Making &lt;em&gt;publishing new versions a lot easier&lt;/em&gt;, using automated tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section" id="making-projects-reuse-compliant"&gt;
&lt;h4&gt;Making projects REUSE-compliant&lt;/h4&gt;
&lt;p&gt;For the first point, I am now on making my new and maintained projects adhere
to the &lt;a class="reference external" href="https://reuse.software/"&gt;software REUSE specification&lt;/a&gt;. I think that this is a great
initiative.&lt;/p&gt;
&lt;p&gt;Indeed, as a Debian individual contributor, figuring out the
Copyright holders of big projects is always a mess. And if someone else from
Redhat or another distribution wants to package the software, but does not know
that this copyright checking has already been done in Debian, this madness has
to be done again!&lt;/p&gt;
&lt;p&gt;Detailing copyright holders directly in upstream using an automated format,
instead of distributions, is the sanest solution in my opinion to transfer this
burden to upstream (sometimes we are even “gessing” copyright holders by deep
inspection of the commit history…).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="making-releasing-easy"&gt;
&lt;h4&gt;Making releasing easy&lt;/h4&gt;
&lt;p&gt;Maintaining a package with two crates and keeping their versions synchronised
is an “interesting” problem. I have been doing this manually for most of the
history of this crate, but I am done with it. I am now using a set of related
tools in order to release new versions (be it &lt;em&gt;patch&lt;/em&gt;, &lt;em&gt;minor&lt;/em&gt; or &lt;em&gt;major&lt;/em&gt;) a
breeze.&lt;/p&gt;
&lt;p&gt;The tools that I have selected for this purpose are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/orhun/git-cliff"&gt;git-cliff&lt;/a&gt; for automatic CHANGELOG generation; &lt;em&gt;and&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/crate-ci/cargo-release"&gt;cargo-release&lt;/a&gt; for automating the release process in general (calls
git-cliff).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This process probably be more detailed in a dedicated article in the future.
It can be (and will eventually be) reused in other crates in order to
facilitate releasing.&lt;/p&gt;
&lt;p&gt;I am also looking into creating a template for starting out new projects with
everything configured, but it seems that &lt;a class="reference external" href="https://github.com/rust-lang/rfcs/pull/2922"&gt;Cargo templates&lt;/a&gt; are not available yet,
so I will probably create a dedicated git repository for that.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="debian-work"&gt;
&lt;h3&gt;Debian work&lt;/h3&gt;
&lt;p&gt;I have packaged two new fonts:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://tracker.debian.org/pkg/fonts-national-park"&gt;fonts-national-park&lt;/a&gt; (available in &lt;em&gt;unstable&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;fonts-routed-gothic (still in NEW, see &lt;a class="reference external" href="https://bugs.debian.org/1004995"&gt;ITP #1004995&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also updated the popular &lt;a class="reference external" href="https://tracker.debian.org/pkg/fonts-ebgaramond"&gt;fonts-ebgaramond&lt;/a&gt; to its latest git version in
order to get some fixes that have not been published into a new, dedicated
version by upstream.&lt;/p&gt;
&lt;p&gt;Finally I have started packaging python-dt-schema (&lt;a class="reference external" href="https://bugs.debian.org/1005301"&gt;ITP #1005301&lt;/a&gt;) for my kernel tweaking needs, but after some
yak shaking I am now blocked by dependencies planned to be packaged by other
individuals, but actually not packaged yet.&lt;/p&gt;
&lt;p&gt;Aaaand… that’s all! See you next time.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="status_update"/><category term="debian"/><category term="rust"/><category term="arts"/></entry><entry><title>Automating Git commit messages with the prepare-commit-msg hook</title><link href="https://deaddabe.fr/blog/2022/01/21/automating-git-commit-messages-with-the-prepare-commit-msg-hook/" rel="alternate"/><published>2022-01-21T00:00:00+01:00</published><updated>2022-01-21T00:00:00+01:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-01-21:/blog/2022/01/21/automating-git-commit-messages-with-the-prepare-commit-msg-hook/</id><summary type="html">&lt;p&gt;Some commit messages can be automated. For example, I usually create a commit
each time I am adding a new blog entry like this one. Instead of
copy-pasting the article name in the commit message, we can detect that and
fill the commit message automatically. ✨&lt;/p&gt;</summary><content type="html">&lt;p&gt;Some commit messages can be automated. For example, I usually create a commit
each time I am adding a new blog entry like this one. Instead of
copy-pasting the article name in the commit message, we can detect that and
fill the commit message automatically. ✨&lt;/p&gt;
&lt;div class="section" id="previous-workflow"&gt;
&lt;h2&gt;Previous workflow&lt;/h2&gt;
&lt;p&gt;Let's have a look at the history of commits for this blog at some point in the
past:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
introduce scripts/new_image.py
new article: 2021-10-06_sending-templated-emails-using-python-and-msmtp.rst
new article: 2021-09-29_git-pre-commit-hook-for-rust-projects.rst
new article: 2021-09-20_status-update-september-2021.rst
new_status_update: add tags
tasks: rename livereload to live
new article: 2021-08-18_status-update-august-2021.rst
&lt;/pre&gt;
&lt;p&gt;Indeed, each time I add an article, I type the same &lt;tt class="docutils literal"&gt;new article:&lt;/tt&gt; prefix,
and then yank and paste the name of the added file from the comment included in
the commit message's default body.&lt;/p&gt;
&lt;p&gt;In order to publish more often and with less friction, I want to automate this
&lt;tt class="docutils literal"&gt;git commit&lt;/tt&gt; part when adding a new article — which is the nominal use case
for a blog.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="intermediate-solution-use-a-script"&gt;
&lt;h2&gt;Intermediate solution: use a script?&lt;/h2&gt;
&lt;p&gt;The fist naive solution was to write a &lt;tt class="docutils literal"&gt;scripts/commit_new_article.sh&lt;/tt&gt; file,
&lt;tt class="docutils literal"&gt;chmod +x&lt;/tt&gt; it and hope that I will remember to use it instead of the
mechanical &lt;tt class="docutils literal"&gt;git commit&lt;/tt&gt; habit that I have built over time.&lt;/p&gt;
&lt;p&gt;Here was the content of the script, for your eyes only:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
#!/bin/sh

set -eu

P=$(git status --porcelain | awk '/^A/ { print $2; }')

if [ "$P" = "" ]
then
       &amp;gt;&amp;amp;2 echo "Error: please 'git add' first"
       exit 1
fi

NAME=$(basename "$P")

git commit -m"new article: $NAME"
&lt;/pre&gt;
&lt;p&gt;But let's face it: I will &lt;em&gt;never&lt;/em&gt; remember to use such script. What I will only
remember is to use &lt;tt class="docutils literal"&gt;git add . &amp;amp;&amp;amp; git commit&lt;/tt&gt; to save my fresh new article
into the repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="final-solution-using-the-prepare-commit-msg-hook"&gt;
&lt;h2&gt;Final solution: using the prepare-commit-msg hook&lt;/h2&gt;
&lt;p&gt;This hook is called before &lt;tt class="docutils literal"&gt;$EDITOR&lt;/tt&gt; is fired up and asks you to edit the
commit message. The strategy is the following: if we detect that only an
article was added, then we pre-fill the commit message using a template.&lt;/p&gt;
&lt;p&gt;This strategy is implemented in the following lines in the
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.git/hooks/prepare-commit-msg&lt;/span&gt;&lt;/tt&gt; executable text file:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
#!/bin/sh

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

P=$(git status --porcelain | awk '/A\s+content\/articles\// { print $2; }')
if [ "$P" != "" ]
then
        A=$(echo $P | \
                xargs basename -s .rst | \
                cut -d'_' -f2- | \
                awk '{ print "📝️ " $0; }'
        )

        if test -z "$COMMIT_SOURCE"
        then
                /usr/bin/perl -i.bak -pe "print \"$A\n\" if !\$first_line++" "$COMMIT_MSG_FILE"
        fi
fi
&lt;/pre&gt;
&lt;p&gt;Note that I have changed the prefix from “new article” to just using an
appropriate “📝️” emoji. This way it is easier for me to see in the log when I
have added new articles. Also this blog is a pet project — and the sources are
not public yet — so I can do whatever I please!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="demo"&gt;
&lt;h2&gt;Demo&lt;/h2&gt;
&lt;p&gt;Using this very article, lets see how things work out!&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ git add .
$ git commit
&lt;/pre&gt;
&lt;p&gt;And here is the result:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
[master 892b1a1] 📝️ automating-git-commit-messages-with-the-prepare-commit-msg-hook
 1 file changed, 109 insertions(+)
 create mode 100644 content/articles/2022-01-21_automating-git-commit-messages-with-the-prepare-commit-msg-hook.rst
&lt;/pre&gt;
&lt;p&gt;Perfect! I could use the real title inside of the file instead of its slug.
This is left as an exercise for the attentive reader.&lt;/p&gt;
&lt;p&gt;Now, whenever I am adding a new article, the commit message will be pre-written
for me. When modifying scripts or other tooling — which &lt;em&gt;should&lt;/em&gt; be a minor,
part-part-time job — the commit message will be empty as expected.&lt;/p&gt;
&lt;p&gt;One less excuse to not frequently write down my thoughts down there.&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/></entry><entry><title>Status update, January 2022</title><link href="https://deaddabe.fr/blog/2022/01/20/status-update-january-2022/" rel="alternate"/><published>2022-01-20T00:00:00+01:00</published><updated>2022-01-20T00:00:00+01:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2022-01-20:/blog/2022/01/20/status-update-january-2022/</id><summary type="html">&lt;p&gt;Let’s hope for the best for this new year. I think that compaired to the last
two, it will be refreshening and full of possibilities — with the perspective of
the global pandemic finally coming to an end.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Let’s hope for the best for this new year. I think that compaired to the last
two, it will be refreshening and full of possibilities — with the perspective of
the global pandemic finally coming to an end.&lt;/p&gt;
&lt;div class="section" id="resolutions"&gt;
&lt;h2&gt;Resolutions&lt;/h2&gt;
&lt;p&gt;I take the “adopt new resolutions on a new year” thing quite seriously — even
if it seems unpopular these days for some reason that I ignore. Changing habits
is a hard thing, and January the 1st of every year, one gets the occasion to
kickstart new things.&lt;/p&gt;
&lt;p&gt;I will not detail every change that I will start to make this year in this
small update. Still, some of them are described in this article and some others
will come in later publications. This looks like a teasing indeed, so &lt;em&gt;stay
tuned&lt;/em&gt;!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="debian-work"&gt;
&lt;h2&gt;Debian work&lt;/h2&gt;
&lt;p&gt;Here is one resolution for this new year: reduce my Debian involvement &lt;em&gt;to the
parts that I enjoy the most&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Last year, on multiple times, I have found myself creating or maintaining
packages that did not bring me direct usefulness in my day to day developer
life. When something becomes a burden — and you do it on your free time — you
should seek to stop the burden and do something that brings you satisfaction
instead.&lt;/p&gt;
&lt;p&gt;From now, this is the philosophy that I will &lt;em&gt;try&lt;/em&gt; to stick to concerning my
Debian involvment &lt;em&gt;on my free time&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This means that I will stop working on the following packages:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://salsa.debian.org/python-team/packages/python-ppft"&gt;python-ppft&lt;/a&gt; (RFA &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003846"&gt;#1003846&lt;/a&gt; created)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://salsa.debian.org/python-team/packages/python-pox"&gt;python-pox&lt;/a&gt; (ITP &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992509"&gt;#992509&lt;/a&gt; closed)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://salsa.debian.org/python-team/packages/python-pathos"&gt;python-pathos&lt;/a&gt; (ITP &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992511"&gt;#992511&lt;/a&gt; closed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They were packaged by mistake: I misread a dependency name in a package, and
yak-shaving led me to package these as sub-dependencies.&lt;/p&gt;
&lt;p&gt;I wanted to “archive” the Git repositories on Salsa, but I could not find the
corresponding option in the “Settings/Advanced” section of the Gitlab
interface ; the repositories will probably stay as-is for now.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="meta"&gt;
&lt;h2&gt;Meta&lt;/h2&gt;
&lt;p&gt;Concerning this blog:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Updated pelican to the latest &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.7.1"&gt;4.7.1 release&lt;/a&gt;. This release contains
my &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2764"&gt;pull request&lt;/a&gt; for automatically starting the brower when writing an
article.&lt;/li&gt;
&lt;li&gt;Migrated rudimentary &lt;tt class="docutils literal"&gt;requirements.txt&lt;/tt&gt; dependency tracking to &lt;a class="reference external" href="https://python-poetry.org/"&gt;Poetry&lt;/a&gt;,
using &lt;tt class="docutils literal"&gt;pyproject.toml&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;poetry.lock&lt;/tt&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="esperanto"&gt;
&lt;h2&gt;Esperanto&lt;/h2&gt;
&lt;p&gt;I am still actively learning Esperanto, but failing to use it in real-life
situations (online or offline). Still, this little mental challenge is nice to
have. I think that when the COVID-19 pandemic situation will have chilled —
hopefully soon with this Ο-variant &lt;a class="footnote-reference" href="#f" id="footnote-reference-1"&gt;[1]&lt;/a&gt; — I will look forward to meet IRL
people in order to speak the “lingvo” out loud.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="final-thoughs"&gt;
&lt;h2&gt;Final thoughs&lt;/h2&gt;
&lt;p&gt;One of the other resolutions is to — as every year — write a little bit more on
this very blog. It is first and foremost a tool that I use to empty my mind and
clarify subjects that I find interresting. And, as a byproduct, a publication
platform that can be read by others.&lt;/p&gt;
&lt;p&gt;I have so many ideas of things to try this year, so, as always, see you soon!&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="f" 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;Yes, this is a real “omicron” greek leter. Thanks &lt;a class="reference external" href="https://en.wikipedia.org/wiki/B%C3%89PO"&gt;BÉPO&lt;/a&gt; for letting me access so many
fancy symbols.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="status_update"/><category term="meta"/><category term="debian"/></entry><entry><title>Status update, November 2021</title><link href="https://deaddabe.fr/blog/2021/11/20/status-update-november-2021/" rel="alternate"/><published>2021-11-20T00:00:00+01:00</published><updated>2021-11-20T00:00:00+01:00</updated><author><name>deaddabe</name></author><id>tag:deaddabe.fr,2021-11-20:/blog/2021/11/20/status-update-november-2021/</id><summary type="html">&lt;p&gt;Winter is coming. Let’s see what has been achieved during the last ~30 days.
As before, this status update is written from a local coffee. Let’s try to keep
this monthly habbit!&lt;/p&gt;</summary><content type="html">&lt;p&gt;Winter is coming. Let’s see what has been achieved during the last ~30 days.
As before, this status update is written from a local coffee. Let’s try to keep
this monthly habbit!&lt;/p&gt;
&lt;div class="section" id="vimium-ff"&gt;
&lt;h2&gt;Vimium-FF&lt;/h2&gt;
&lt;p&gt;I discovered and installed &lt;a class="reference internal" href="#vimium-ff"&gt;Vimium-FF&lt;/a&gt;, after reading about it on a &lt;a class="reference external" href="https://news.ycombinator.com/item?id=22640054"&gt;thread&lt;/a&gt; on
an alternative hacker news browser. It is awesome.&lt;/p&gt;
&lt;p&gt;The default key mapping is for the QWERTY layout. I had to reconfigure it for
the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/B%C3%89PO"&gt;BÉPO&lt;/a&gt; keyboard layout that I am using.&lt;/p&gt;
&lt;p&gt;Caveats: shortcuts do not work in reader mode. It is a shame because this makes
me switch back to arrow keys to scroll through reading material instead of
using the ergonomic HJKL keys (well, CTSR in bépo).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="project-euler"&gt;
&lt;h2&gt;Project Euler&lt;/h2&gt;
&lt;p&gt;In quest of intellectual stimulation, I have started to participate in the
&lt;a class="reference external" href="https://projecteuler.net/"&gt;Project Euler&lt;/a&gt; online challenges. I already participated when I was a
student, but only made it through the 10 first because of time scarity. I
participated in Python at the time, which caused some performance challenges as
I was bruteforcing some solutions.&lt;/p&gt;
&lt;p&gt;This time I am participating in my favorite programming language for
non-scripting usage: Rust. The great performance and functional constructions
available (generators, filters, …) make it an ideal choice for implementing the
algorithms. Pencil and paper are valuable as well for constructing the final
solution.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="debian-work"&gt;
&lt;h2&gt;Debian work&lt;/h2&gt;
&lt;div class="section" id="new-gftools-release"&gt;
&lt;h3&gt;New gftools release&lt;/h3&gt;
&lt;p&gt;I am trying to bring the new &lt;a class="reference external" href="https://github.com/googlefonts/gftools"&gt;gftools&lt;/a&gt; release &lt;a class="reference external" href="https://tracker.debian.org/pkg/gftools"&gt;to Debian&lt;/a&gt;, but the new
required dependencies cannot be ported because &lt;a class="reference external" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984824"&gt;PEP-517/518 are not supported
yet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As more and more Python packages that I need to package are blocked
because of this issue, it may be the time to take a break from packaging Python
packages in Debian for me. Especially since the &lt;a class="reference external" href="https://ftp-master.debian.org/new.html"&gt;NEW&lt;/a&gt; queue is full again, so
packages uploaded today may arrive in unstable in months anyways.&lt;/p&gt;
&lt;p&gt;I have trouble of keeping track of bug dependencies between my different ITPs.
I managed to create &lt;a class="reference external" href="https://graphviz.org/"&gt;graphviz&lt;/a&gt; diagrams of the dependencies by querying the
&lt;a class="reference external" href="https://wiki.debian.org/UltimateDebianDatabase"&gt;Ultimate Debian Database&lt;/a&gt; with some Python scripts. However this is still
very manual. I hope this idea can gain some traction in the community, but I
need to find energy to promote it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="notion-dashboard"&gt;
&lt;h3&gt;Notion dashboard&lt;/h3&gt;
&lt;p&gt;I created myself a dashboard on &lt;a class="reference external" href="https://notion.so"&gt;Notion&lt;/a&gt;, a SaaS product that I wanted to try
given the hype it recently received in the tech scene. The idea is to track the
progress of (most of) my ongoing Debian packages that are not available in
unstable yet.&lt;/p&gt;
&lt;p&gt;For this, I have created a set of columns that directly represents the states
of the packages &lt;em&gt;in my own interpretation&lt;/em&gt; of the Debian delivery process:&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://deaddabe.fr/blog/2021/11/20/status-update-november-2021/debian-notion-dashboard.png"&gt;&lt;img alt="Screenshot of the Notion dashboard" class="image-process-article-hidpi" src="https://deaddabe.fr/blog/2021/11/20/status-update-november-2021/derivatives/article-hidpi/1x/debian-notion-dashboard.png" srcset="https://deaddabe.fr/blog/2021/11/20/status-update-november-2021/derivatives/article-hidpi/1x/debian-notion-dashboard.png 1x, https://deaddabe.fr/blog/2021/11/20/status-update-november-2021/derivatives/article-hidpi/2x/debian-notion-dashboard.png 2x"/&gt;&lt;/a&gt;
&lt;p&gt;This is not optimal and manually updated. But I think there is an idea behind
this that could be explored. Maybe oneday I will pursue down this rabbit
hole and create myself an automatic dashboard.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="esperanto"&gt;
&lt;h2&gt;Esperanto&lt;/h2&gt;
&lt;p&gt;Ekde kvar semanaj mi lernas la esperanton. Mi estas komencanto. La lingvo estas
facile. Mi usas DuoLingon kaj esperantan vortaron. Fojfoje mi usas "Google
Translate" pro konfirmiĝi mian vortumijn. Mi ŝatas la esperanton pli ol la
hispanon, kiu mi lernis al liceo.&lt;/p&gt;
&lt;p&gt;Eble mi skribos esperantajn artiklojn se mi ŝatas la lingvo ankoraŭ. Sed sur
otro blogo, ĉar ĝi blogo estas nur pro la teknikajn artiklojn en angla.&lt;/p&gt;
&lt;p&gt;Ĝis la revido!&lt;/p&gt;
&lt;/div&gt;
</content><category term="articles"/><category term="status_update"/><category term="debian"/></entry></feed>