https://agateau.com/tags/clyde/feedPosts tagged clyde2024-01-09T08:59:37+01:00Aurélien Gâteaupython-feedgenhttps://agateau.com/2022/10-updateOctober 2022 monthly update2022-11-07T19:07:21+01:00<h2>Introduction</h2>
<p>As expected, this month was not very productive because of <a href="https://agateau.com/2022/inktober">Inktober</a>. I made some progress on Pixel Wheels and Clyde though.</p>
<h2>Pixel Wheels</h2>
<h3>Android API Level</h3>
<p>I am preparing the next release of Pixel Wheels. Google notified Android developers they would start requiring Android API Level 31 for updated applications on November 1st, I had to bump dependencies for the release. I try to avoid dependencies update right before a release because I want to have enough time to test the game after updates, but there was no choice here. Updating the Android SDK to API Level 31, in turn required an update of the Android Gradle Plugin, which itself required an update of Java and Gradle 😅.</p>
<p>After the usual battle with the build system, I managed to get the game to work again on desktop and Android, using Android SDK 31. We are good to go for the release!</p>
<h3>Getting "turbo-blocked"</h3>
<p>The new track features some shortcuts among the trees, with turbo cells to avoid loosing too much time by driving in the snow:</p>
<p><img alt="Snow shortcut" src="https://agateau.com/2022/10-update/snow-shortcut.png"/></p>
<p>This triggered an "interesting" behavior: if you hit a tree while on a turbo cell, the turbo would continuously trigger, making it impossible to unstuck yourself. I modified the way turbo cells work to avoid that bug: now a turbo cell won't trigger again until your wheels have left it.</p>
<!-- break -->
<h3>Android TV launcher fixes</h3>
<p>I fixed the listing of the game on Android TV, so that it appears in "games" and not in "apps" (<a href="https://github.com/agateau/pixelwheels/issues/276">#276</a>).</p>
<h3>XDG support</h3>
<p>A <a href="https://github.com/flathub/com.agateau.PixelWheels/issues/1">bug report</a> on the Flatpak package, reminded me that while Pixel Wheels uses the default directories suggested by the <a href="https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory</a> specification, it did not support the XDG environment variables. I fixed this, but I still have to test it solve the issue.</p>
<h3>Translations</h3>
<p>Translators have been busy updating their translation. The following languages are ready:</p>
<ul>
<li>Basque</li>
<li>Chinese</li>
<li>German</li>
<li>Russian</li>
<li>Swedish</li>
</ul>
<h2>Clyde</h2>
<h3><code>package-dir</code> support has been merged</h3>
<p><code>package-dir</code> support, the ability to define a package as a directory containing an <code>index.yaml</code> file has been merged in the main branch. This support makes it possible to ship extra files and opens the way to define a custom fetch script.</p>
<p>A custom fetch script would make it possible to automate package update for packages hosted everywhere, instead of only supporting packages hosted on GitHub. I haven't decided yet the "API" of this script and whether I want to force a particular language to write them.</p>
<h3>Activation script improvements</h3>
<p>Clyde activation script now defines the <code>$XDG_DATA_DIR</code> and <code>$CLYDE_INST_DIR</code> environment variables. The first one helps improving integration on Linux systems. The second one can be useful for Clyde-specific scripts installed by packages.</p>
<p>Since the activation script now requires being updated, <code>clyde setup</code> learned the <code>--update-scripts</code> option. When using this option, the command update existing activation scripts, instead of preparing a new Clyde installation.</p>
<h2>Clyde store</h2>
<p>Not a lot of changes on the store beside the regular version updates:</p>
<ul>
<li>one new package: <a href="https://github.com/svartalf/rust-battop">battop</a></li>
<li>git-filter-repo now works on macOS, but only in the <code>next</code> branch, as the fix needs some unreleased change on Clyde side</li>
</ul>
<h2>What's coming next?</h2>
<p>For November, I want to release Pixel Wheels 0.24.0, and a new version of Clyde. Let's see if I can get this done!</p>2022-11-07T19:07:21+01:00https://agateau.com/2022/11-updateNovember 2022 monthly update, lots of releases!2022-12-07T08:37:11+01:00<h2>Introduction</h2>
<p>This month is pretty packed with releases! A new Pixel Wheels, a new Git Bonsai and two Clyde releases!</p>
<!-- break -->
<h2>Pixel Wheels</h2>
<p>I finally released version 0.24.0. This release includes a new track: "Up, up, up and down!" and a new vehicle, the "Broster Truck". It comes quite a few other changes too, have a look at the <a href="https://agateau.com/2022/pixelwheels-0-24-0">release announcement</a> to learn more.</p>
<p>A few issues have been reported on this release, so I may have to publish a 0.24.1, we'll see.</p>
<p>Pixel Wheels also got an article in <a href="https://fullcirclemagazine.org/2022/11/25/full-circle-magazine-187/">issue 187</a> of Full Circle Magazine, an independent magazine about Ubuntu. Pretty happy about it!</p>
<h2>Git Bonsai</h2>
<p>I didn't plan to work on Git Bonsai, but I got annoyed enough by it not properly dealing with repositories whose default branch is not called "master" that I fixed that.</p>
<p>While I was at it, I made a bunch of clean-ups, such as adding a pre-commit configuration (and making the CI run them) and making <code>cargo clippy</code> happy. This is the curse of projects which get touched only so often: every time you return to them, the Rust tool-chain has updated and Clippy has learned to detect new sub-optimal code :)</p>
<p>Once this was done I released <a href="https://github.com/agateau/git-bonsai/releases/0.3.0">version 0.3.0</a>.</p>
<h2>Clyde</h2>
<p>This month I released not one, but two versions of <a href="https://github.com/agateau/clyde">Clyde</a>! The changes introduced by these new versions are mostly useful to create packages.</p>
<p>The first significant change is the ability to ship extra files with a package. I planned to make use of this to package Firefox: it works, but I did not take into account the fact that the prebuilt Firefox auto-updates itself. This is a nice feature, especially for a browser, but it makes packaging it with Clyde odd, since it can change versions without Clyde being aware of it... I am probably going to use this extra files feature to package more AppImage-based applications instead.</p>
<p>The second significant change is the ability to define tests. Tests are commands run by <code>clydetools check</code> (and thus by the CI). If one of them fails, the package update is not merged in the store. This is important to ensure new packages work on all supported platforms. This second feature was released a bit too fast, and... did not work properly on Windows, hence the 0.4.1 release.</p>
<p>Finally, work is on-going to make it easier for <code>clydetools fetch</code> to automatically fetch updates for all packages, not only GitHub hosted ones. This is issue <a href="https://github.com/agateau/clyde/issues/119">#119</a>.</p>
<h2>Clyde store</h2>
<p>Beside the regular updates, I added 3 new packages:</p>
<ul>
<li><a href="https://github.com/jesseduffield/lazydocker">lazydocker</a></li>
<li><a href="https://github.com/alexhallam/tv">tv</a></li>
<li><a href="https://github.com/BurntSushi/xsv">xsv</a></li>
</ul>
<p>Another important change was adding tests to most packages. Doing so highlighted a CI issue: some packages cannot be tested because the CI cannot run them (see <a href="https://github.com/agateau/clyde/issues/124">#124</a>).</p>
<h2>What's coming next?</h2>
<p>For December, besides preparing for Christmas 🎅, I am going to fix the issues reported on Pixel Wheels and maybe publish a bug fix release. On Clyde front, I plan to continue the work to be able to fetch updates for packages not hosted on GitHub.</p>2022-12-07T08:37:11+01:00https://agateau.com/2023/2022-12-updateDecember 2022 monthly update2023-01-09T18:44:41+01:00<h2>Introduction</h2>
<p>Happy new year! Wish you the best for 2023!</p>
<p>This update is not about 2023 though, but rather about the last month of 2022. It contains the usual mix of Pixel Wheels and Clyde work, and some unexpected time spent on... Yokadi!</p>
<p>Let's get started.</p>
<!-- break -->
<h2>Pixel Wheels</h2>
<h3>0.24.1</h3>
<p>Last month I shipped Pixel Wheels 0.24.1, which fixed a few annoying bugs found in 0.24.0:</p>
<ul>
<li>
<p>On devices with a screen ratio different from 16:9 the vehicle selection screen was stretched and made the buttons non responsive (<a href="https://github.com/agateau/pixelwheels/issues/296">#296</a>).</p>
</li>
<li>
<p>Fix Chinese translation looking wrong because of missing glyphs in the font (<a href="https://github.com/agateau/pixelwheels/issues/297">#297</a>).</p>
</li>
<li>
<p>Fixed a bug in the rescue copter mechanism: on the River track, after being dropped by the rescue copter on the bridge, the rescued vehicle would sometimes go through the bridge wall and fall on the other side (<a href="https://github.com/agateau/pixelwheels/issues/302">#302</a>).</p>
</li>
</ul>
<h3>More translations</h3>
<p>Maybe it's Christmas, but at the end of December, Pixel Wheels received 2 new translations:</p>
<ul>
<li>Hungarian, by Balázs Úr</li>
<li>Esperanto, by Jorge Maldonado Ventura</li>
</ul>
<p>And... (2023 spoiler alert!): nxjosephofficial followed up shortly after with a Turkish translation in January!</p>
<p>This is, of course, totally awesome.</p>
<p>I even had to make the language selection list use two columns because the language list would not fit the screen anymore!</p>
<p><img alt="Language selector" src="https://agateau.com/2023/2022-12-update/language-selector.png"/></p>
<h2>Yokadi</h2>
<p><a href="https://github.com/agateau/yokadi">Yokadi</a> is a command-line tool I use to manage my TODO lists and keep notes around.</p>
<p>It's an old but trusty command-line tool written in Python. And when I say old I mean started-in-2008 old. From a time when I wrote mostly Qt and KDE code and haven't heard of PEP8, so it uses lowerCamelCase for functions (how embarrassing).</p>
<p>Anyway, it might be old, but it works fine and I still use it, so when GitHub dependabot told me some dependencies had security issues, I had to fix them. Updating them was a bit of work though.</p>
<p>First the project was still using Travis, which is the Schrödinger cat of CI at this point, so I switched it to GitHub actions.</p>
<p>Then it turned out the <code>pyreadline</code> package used to make readline work on Windows does not work anymore with recent versions of Python, so I had to switch to my Windows partition to fix these. After some back and forth, I managed to get readline support to work again using <a href="https://pypi.org/project/pyreadline3/">pyreadline3</a>, but then I realized the task lists were looking really bad, filled with Unix ANSI terminal escape codes. I considered biting the bullet and rewriting the output using the wonderful <a href="https://pypi.org/project/rich/">Rich</a>, but that was too invasive, so I felt back to using <a href="https://pypi.org/project/colorama/">Colorama</a> instead.</p>
<p>Finally, there was a bit more breakage to sort out, like the syntax for SQL Alchemy database URL having changed, or icalendar support being so broken that I just disabled its tests for now.</p>
<p>It's all good now (well, except for icalendar support), CI is green again.</p>
<p>I should probably do a release.</p>
<p>Fun fact: Yokadi has a <code>sync</code> feature branch to implement synchronization between different instances using Git. It's the branch I use. It has to be the oldest still-working non-merged feature branch of all my projects: it's multiple years old at this point! Maybe one day I'll merge it.</p>
<h2>Clyde</h2>
<p>Clyde work was once again focused on improving <code>clydetools fetch</code>, the command used to fetch latest versions of supported packages.</p>
<ul>
<li><code>clydetools fetch</code> can now fetch updates for projects hosted on gitlab.com.</li>
<li><code>clydetools fetch</code> learned that <code>osx</code> in a filename indicates a macOS asset. This fixed fetch not finding macOS archives for the rclone package.</li>
<li>It is now possible to define a default OS and/or architecture for a package. This was required to be able to package ninja.</li>
</ul>
<h2>Clyde store</h2>
<p>New packages of the month are:</p>
<ul>
<li><a href="https://github.com/terrastruct/d2">d2</a></li>
<li><a href="https://ninja-build.org">ninja</a></li>
<li><a href="https://sourceforge.net/projects/unix-utils/">icoutils</a></li>
<li><a href="https://www.vaultproject.io">vault</a></li>
</ul>
<p>I also took the time to add tests command to most packages. Unfortunately, some packages cannot currently be tested because they depend on libraries not installed on the CI runners, such as libxcb or fuse. Will have to figure out something for these.</p>
<h2>What's coming next?</h2>
<p>For January, I am working on Pixel Wheels. Since new translations have been added, I am probably going to release a 0.24.2 version to include them, and a few other bug fixes.</p>
<p>We are already January 12, there isn't that much time left, so I am not going to promise too much :)</p>
<p>Thanks for reading, if you want to support my FOSS work, head over to the <a href="https://agateau.com/support">support page</a>. Thanks a ton!</p>2023-01-09T18:44:41+01:00https://agateau.com/2023/2023-01-updateJanuary 2023 monthly update2023-02-07T07:49:58+01:00<h2>Introduction</h2>
<p>Welcome to this January 2023 monthly update! This month comes with some Pixel Wheels work, an interesting Clyde store story, an update on Nanonote(!) and a new small project: TMFI. Let's get started!</p>
<!-- break -->
<h2>Pixel Wheels</h2>
<p>On <a href="https://agateau.com/projects/pixelwheels/">Pixel Wheels</a> front, Hendursaga fixed mouse navigation in the language selection screen as well as the font used for Esperanto, thanks!</p>
<p>On my side, I fixed a tricky bug which caused the player rank to be wrong on championships in the 2nd and 3rd race. I also fixed a potential stuttering issue. It should help keep the game smooth on screens with refresh rates higher than 60 Hz.</p>
<p>Finally, I have been making some R&D, trying to evaluate how much work would be required to add LAN-based multiplayer support! That's potentially a large Pandora box, so I am approaching this with caution. I actually wrote an article about <a href="https://agateau.com/2023/opening-another-pandora-box">Pixel Wheels Pandora boxes</a>.</p>
<p>As explained in the article, I am building a very simple network-based Pong game. Since the Pandora boxes article I managed to keep two machines synchronized reliably, so I can move to the next step: introduce Box2D in the game.</p>
<p><img alt="NPong screenshot" src="https://agateau.com/2023/2023-01-update/npong.png"/></p>
<h2>Clyde store</h2>
<p>Things have been calm on <a href="https://github.com/agateau/clyde/">Clyde</a> development front, but the Clyde store gained new packages:</p>
<ul>
<li><a href="https://github.com/dandavison/delta">Delta</a></li>
<li><a href="https://github.com/extrawurst/gitui">GitUI</a></li>
<li><a href="https://github.com/hadolint/hadolint">Hadolint</a></li>
<li><a href="https://github.com/sylver-dev/sylver-cli">Sylver-cli</a></li>
<li><a href="https://www.vaultproject.io">Vault</a></li>
</ul>
<p>I also streamlined package updates a bit more. I am close to the point where they can be fully automated 🎉.</p>
<p>Something interesting happened with the Vault package. Because of CircleCI's January 3, 2023 security alert, Hashicorp <a href="https://support.hashicorp.com/hc/en-us/articles/13177506317203">decided to rotate the certificate</a> used to sign Vault macOS binaries. They also re-signed and re-uploaded all their already released binaries.</p>
<p>The Clyde Store repository CI checks all packages every day. This is meant to detect if a binary goes away, or if it has been tampered with. This check worked well: the day Hashicorp re-upload Vault macOS binary, Clyde Store CI turned red. It stayed red until I dug into the problem (at first I thought Hashicorp had been breached, but it would have been surprising if it had gone undetected), found about the re-upload and updated Vault macOS checksum.</p>
<h2>TMFI - The Missing Firefox Installer</h2>
<p>This is a very small project I put together as a simple way to install Firefox on the machines I maintain. Mozilla provides prebuilt Firefox binaries for all OSes, including Linux, but their Linux support is rough. It comes in the form of a plain tarball with no integration: no Firefox launcher in the desktop menu, no <code>firefox</code> binary in <code>$PATH</code>. <a href="https://github.com/agateau/tmfi/">TMFI</a> fixes that. When you run <code>tmfi</code>, it:</p>
<ul>
<li>Downloads the latest binary</li>
<li>Installs it in <code>~/.cache/firefox</code></li>
<li>Creates a desktop menu entry for it</li>
<li>Creates a <code>firefox</code> symbolic link in <code>~/.local/bin</code></li>
</ul>
<p>Since the prebuilt binaries automatically update themselves, you never have to worry about your installation being outdated. This is the reason I ended up creating TMFI instead of adding Firefox to Clyde store: it's no good if you install a package at vN and behind Clyde back the package changes itself to vN+1, adding and removing files without Clyde knowing about it.</p>
<p><img alt="TMFI screenshot" src="https://agateau.com/2023/2023-01-update/tmfi.png"/></p>
<h2>Nanonote</h2>
<p><a href="https://github.com/agateau/nanonote/">Nanonote</a> is a minimalist note taking application I built a few years ago. I haven't worked on it for literally years, but I use it every day! This week I received a pull request from Daniel Laidig fixing keyboard shortcuts not showing in Nanonote context menu on macOS. This is all the more welcome now that I don't have a macOS machine to test Nanonote anymore. Daniel is also busy working on another interesting feature, which should hopefully land in February 🤞.</p>
<p><img alt="Nanonote screenshot" src="https://agateau.com/2023/2023-01-update/nanonote.png"/></p>
<p>The CI was not happy with the PR. Not because of Daniel work, but because some dependencies had not been pinned so some jobs did not pass out of the box... This prompted me to refresh the CI a bit: moving the coding-style step to a separate job, updating Qt (required much wrestling with <a href="https://github.com/miurahr/aqtinstall/">aqtinstall</a>), SingleApplication and Catch 2 to more recent versions.</p>
<p>I am mostly done with the fixes, but I am considering simplifying the dependency installation code, which is very messy, by using Clyde. The CI is an interesting use-case because Clyde makes it easy to install pinned versions of required tools on all platforms.</p>
<h2>What's coming next?</h2>
<p>We are already in February at the time I write this, so I can confidently say I am going to release Pixel Wheels 0.24.2, since it's already been released 2 days ago :) Apart from this, I plan to continue working on the network Pong game, and spend some time helping Daniel land his new feature in Nanonote!</p>2023-02-07T07:49:58+01:00https://agateau.com/2023/2023-02-updateFebruary 2023 monthly update2023-03-07T08:50:58+01:00<h2>Introduction</h2>
<p>Welcome to this new monthly update!</p>
<p>This month I worked on the usual projects: Pixel Wheels and Clyde but also on Nanonote and an old one: Cat Avatar Generator. Let's get started.</p>
<h2>Pixel Wheels</h2>
<p>As announced in January update, <a href="https://agateau.com/2023/pixelwheels-0-24-2/">Pixel Wheels 0.24.2 has been released</a>, adding 3 new translations (Hungarian, Esperanto and Turkish) and fixing 2 bugs:</p>
<ul>
<li>The display would sometimes stutter during races.</li>
<li>In championships, the player rank could sometimes be wrong in the 2nd or 3rd race.</li>
</ul>
<p>Since then, I fixed another bug which occurred while editing configuration keys (<a href="https://github.com/agateau/pixelwheels/issues/326">#326</a>). I also included another translation, this time it's Italian, thanks to Dario Canossi 🇮🇹!</p>
<h3>NPong</h3>
<p>I continued working on my NPong proof-of-concept network game. I added Android support, host discovery and introduced Box2D, making the game closer to Pixel Wheels. This might actually work 🤞!</p>
<!-- break -->
<h2>Cat Avatar Generator</h2>
<p><a href="https://github.com/agateau/cat-avatar-generator-app">Cat Avatar Generator</a> is a small Android app I built a long time ago to... generate cat avatars (how surprising!) based on David Revoy excellent <a href="https://www.peppercarrot.com/extras/html/2016_cat-generator/index.php">Cat Avatar Generator</a>.</p>
<p>It had not been updated for a few years, and Google warned me it would be removed from Google Play if it did not receive a new update, so... I did update it.</p>
<p>The internals have been modernized a bit and the dependencies updated:</p>
<ul>
<li>Gradle: 2.14.1 → 7.5.1</li>
<li>AGP: 2.2.3 → 7.4.1</li>
<li>SDK: 23 → 33</li>
</ul>
<p>I also made the launcher icon adaptive, giving the app a more modern look, then released 0.2.1.</p>
<p><img alt="Cat Avatar Generator screenshot" src="https://agateau.com/2023/2023-02-update/catgen.png"/></p>
<h2>Nanonote</h2>
<p>Thanks to Daniel Laidig, <a href="https://github.com/agateau/nanonote">Nanonote</a> now has support for Markdown-style tasks in lists!</p>
<p>When creating a list entry with <code>- [ ]</code>, the next entry automatically starts with the same text checkbox. Ticking and un-ticking the box can be done with either Ctrl+Enter anywhere in the line of the entry or with Ctrl+Left click on the checkbox.</p>
<p>On my side, I worked on making sure standard actions like Copy or Paste are translated, on all OSes.</p>
<p>Now it only needs a new release!</p>
<h2>Clyde</h2>
<p>A bunch of nice-to-have changes landed in <a href="https://github.com/agateau/clyde">Clyde</a> this month:</p>
<ul>
<li>Clyde now tries 3 times to download assets before giving up. This makes it cope better with unreliable hosts.</li>
<li><code>clydetools fetch</code> now recognizes <code>aarch_64</code> in asset filenames as ARM 64bit architecture. This fixes fetching updates for Envoy.</li>
<li>I reworked the file cache to avoid "corrupted assets" error messages when downloading assets whose names do not include version numbers (looking at you, <a href="https://github.com/Wilfred/difftastic">Difftastic</a>!).</li>
<li><code>clyde setup</code> now makes a shallow clone of the store repository, reducing bandwidth usage.</li>
<li>The URL for Clyde store can now be defined with <code>clyde setup --url STORE_URL</code></li>
</ul>
<h2>Clyde Store</h2>
<p>Only one new entry this month: <a href="https://github.com/wagoodman/dive">dive</a>.</p>
<h2>What's coming next?</h2>
<p>In March, I am going to:</p>
<ul>
<li>continue working on NPong;</li>
<li>release a new version of Nanonote;</li>
<li>if all goes well, release a new version of Clyde.</li>
</ul>2023-03-07T08:50:58+01:00https://agateau.com/2023/2023-03-updateMarch 2023 monthly update2023-03-31T09:29:57+02:00<h2>Introduction</h2>
<p>Welcome to this monthly update! This month Pixel Wheels did not receive much work, but I made an important decision. I worked on Clyde, Nanonote and TMFI.</p>
<h2>Pixel Wheels</h2>
<p>I spent more time on NPong, but I eventually decided against <a href="https://agateau.com/2023/opening-another-pandora-box">opening the Pandora box of network play</a>. I want to get Pixel Wheels 1.0 out in 2023, and I don't see this happening if I try to get network play in. Instead I am going to resurrect the old split-screen multiplayer mode, and extend it to 4 players.</p>
<p>Depending on how the game evolves after 1.0, I may revisit this idea of network play, but right now I just want to be done with it.</p>
<!-- break -->
<h2>Clyde</h2>
<p>I released <a href="https://github.com/agateau/clyde/releases/0.5.0">version 0.5.0 of Clyde</a>. The main changes in this release are:</p>
<ul>
<li>
<p>Support for Bash and Zsh completion. This is quite nice, even if it's not widely supported for now (I should really add completion to Clyde itself 😅).</p>
</li>
<li>
<p>A package can now be reinstalled with <code>clyde install --reinstall <package></code>. This is useful for completion, see below.</p>
</li>
<li>
<p>Some network improvements: first, <code>clyde setup</code> now creates a shallow clone of the store, making initial setup faster. Second, when a download times out, Clyde now retries 2 times before giving up.</p>
</li>
<li>
<p>More work on making it possible to automatically find new releases for packages not hosted on GitHub: gitlab.com is now supported and there is work in progress to add a more generic "fetcher" to support other hosts.</p>
</li>
</ul>
<p>Under the hood, I drastically improved the functional test suite. It used to consist of a bunch of shell scripts. I rewrote it using <a href="https://pytest.org">pytest</a>. This makes it easier to add new tests.</p>
<p>If you already use Clyde (awesome!) and want to make completion work you need to:</p>
<ul>
<li>Update Clyde activation script with <code>clyde setup -u</code>;</li>
<li>Reinstall the package for which you want to use completion with <code>clyde install --reinstall <package></code> (see next section for the list of packages supporting it).</li>
</ul>
<p>I planned to make a more formal announcement about this new version, but while writing it I realized the "new user experience" was not good enough to make for a good demo. Blog Driven Development strikes again 😅. I shelved the announcement for now. Next version should be good enough!</p>
<h2>Clyde Store</h2>
<p>4 new packages have been added this month:</p>
<ul>
<li><a href="https://github.com/muttleyxd/clang-tools-static-binaries">clang-format</a></li>
<li><a href="https://docs.docker.com/compose/">docker-compose</a></li>
<li><a href="https://dprint.dev">dprint</a></li>
<li><a href="https://helm.sh/">helm</a></li>
</ul>
<p>The Helm package made me particularly happy: not because I use Helm, but because it is the first package created by someone else, thank you <a href="https://github.com/xaocon">xaocon</a> for your contribution!</p>
<p>The following packages now support completion:</p>
<ul>
<li>bat</li>
<li>fd</li>
<li>fzf</li>
<li>gum</li>
<li>ripgrep</li>
<li>xh</li>
</ul>
<h2>Nanonote</h2>
<p>I experimented with highlighting Markdown-like headings in <a href="https://github.com/agateau/nanonote">Nanonote</a> and ended up liking it, so I merged the changes in. It looks like this:</p>
<p><img alt="Highlighting Markdown-like headings" src="https://agateau.com/2023/2023-03-update/nanonote.png"/></p>
<p>In other news, Nanonote should get a Flatpak package soon! The work was started in <a href="https://github.com/agateau/nanonote/issues/44">#44</a> by Justin Zobel (Thanks a lot!), and I continued it. Nanonote should therefore be available on Flathub in April 🤞.</p>
<p>I also fixed some minor bugs:</p>
<ul>
<li>The close button of the search bar used an unusual cross character which was not available in all fonts. I changed it to a more common character.</li>
<li>When holding Control over the text to click on links, the cursor no longer changes to a pointing-hand until the cursor is actually over a link.</li>
</ul>
<p>I expected to release a new version of Nanonote this month, but I ended up releasing only a pre-version, so I'd say March objective is half done...</p>
<h2>TMFI</h2>
<p>A couple minor changes went into <a href="https://github.com/agateau/tmfi">TMFI</a>, The Missing Firefox Installer.</p>
<p>First, it no longer tries to resume interrupted downloads. Resuming downloads was not reliable because Firefox archive filename does not change between versions, so a download could have been started for version N and continued with version N+1.</p>
<p>Second, the categories in the .desktop file have been fixed, so the launcher icon now correctly appears in the desktop menu.</p>
<h2>What's next?</h2>
<p>In April, I want to:</p>
<ul>
<li>finally release version 1.4.0 of Nanonote, with a Flatpak package;</li>
<li>continue working on Clyde, improving the new-user experience, so that I can publish that announcement article I postponed this month;</li>
<li>resume work on Pixel Wheels, notably resurrect the split mode.</li>
</ul>2023-03-31T09:29:57+02:00https://agateau.com/2023/2023-04-updateApril 2023 monthly update2023-05-05T08:55:07+02:00<h2>Introduction</h2>
<p>April has been a busy month. I worked on reviving 2-player split screen for Pixel Wheels and preparing to crank it to <strike>11</strike> 4. I also made some Nanonote releases and put some work on Clyde too. Finally I started refreshing Burger Party to keep it on Google Play!</p>
<h2>Pixel Wheels</h2>
<p>As I <a href="https://agateau.com/2023/split-screen-revival-progress">wrote earlier</a>, split-screen is back in Pixel Wheels. 2-player split screen already works and I am busy getting the game ready for 4 players. The engine already supports 4 players. I "just" need to update the UI to do the same, but it's easier said than done.</p>
<p>So far the vehicle selection can select up to 4 players and the internals support 4 different inputs.</p>
<p>What remains to do is:</p>
<ul>
<li>Make it possible to select the number of players</li>
<li>Rework the settings screens to support configuring 4 different inputs</li>
</ul>
<!-- break -->
<h2>Nanonote</h2>
<p>This month I released 2 release candidates of Nanonote. Then I integrated a Czech translation from Amerey (thanks!) right before releasing <a href="https://agateau.com/2023/nanonote-1-4-0">Nanonote 1.4.0</a>.</p>
<p>There may be a new patch release later with new translations, but for now I am going to leave Nanonote as it is for a while.</p>
<h2>Clyde</h2>
<p>Clyde received an important fix to make upgrades of itself smoother: when it detects itself in the upgrade list, it only upgrades itself and ask the user to restart the upgrade.</p>
<p>The reason for this is that sometimes Clyde vN+1 comes with support for a new feature in the package format. If other packages to upgrade make use of this new feature, trying to install them with Clyde vN is likely going to fail. By upgrading Clyde first we can be sure the other packages are installed with Clyde vN+1.</p>
<p>Clyde also gained support for installing completion files for Fish shell (that is a good example of a new feature in the package format...). I also added completion files to Clyde itself.</p>
<h2>Clyde store</h2>
<p>Clyde store gained 3 new packages this month:</p>
<ul>
<li><a href="https://github.com/arxanas/git-branchless">git-branchless</a></li>
<li><a href="https://mkcert.dev">mkcert</a></li>
<li><a href="https://github.com/charmbracelet/vhs">vhs</a></li>
</ul>
<p>I also revisited packages with shell completion to make sure they install Fish shell completion files if they support it. This is in the <code>next</code> branch for now until the next Clyde release.</p>
<h2>Burger Party</h2>
<p>After updating Cat Avatar Generator in <a href="https://agateau.com/2023/2023-02-update">February</a>, I am updating <a href="https://agateau.com/projects/burgerparty">Burger Party</a> so that it stays on Google Play.</p>
<p>So far I made a massive dependencies update:</p>
<ul>
<li>libgdx: 0.9.9 → 1.9.1</li>
<li>Android SDK: 26 → 33</li>
<li>Java: 1.6 → 11</li>
<li>Gradle: 3.3 → 7.3.3</li>
<li>Android Gradle Project: 2.3.3 → 7.2.2</li>
</ul>
<p>This is what happens when a project is left alone for 5 years 😅.</p>
<p>I have some unfinished business with Burger Party: the game currently does not have an "end scene". There are sketches for it in the repository but at the time I drew them I just wanted to be done with the game and did not integrate them. That's why you only get a "Congratulations, you finished the game!" placeholder message, which is underwhelming to say the least.</p>
<p>That has always stayed nagging in a corner of my mind. Since I am refreshing the game, I decided to go ahead and finally integrate this end scene. It's mostly done, and I am quite happy I finally did it!</p>
<h2>What's next?</h2>
<p>In May I plan to finish my Burger Party update and release it. Then finish Pixel Wheels 4 player support... and probably a bit of Clyde, we'll see!</p>2023-05-05T08:55:07+02:00https://agateau.com/2023/2023-1011-updateOctober-November 2023 monthly update2023-12-08T07:05:30+01:00<h2>Introduction</h2>
<p>Another double monthly update. Turns out moving to a new house is a voracious time eater… (who knew?). Here is what I still managed to get done when I was not busy emptying one house, filling another one, trying to give/trash as much crap as possible in the (still ongoing!) process.</p>
<h2>Pixel Wheels</h2>
<p>On Pixel Wheels, I worked on the third track for the "Pixel Cities" championship. It's mostly ready and now has a name: "The island".</p>
<p><img alt="Pixel Wheels "The Island" track" src="https://agateau.com/2023/2023-1011-update/pixelwheels-the-island.png"/></p>
<p>This new track was the opportunity to make some improvements on the tile engine. Creating obstacles requires less manual work now, making it faster to iterate and experiment.</p>
<!-- break -->
<p>I also made a user interface change: the focus indicator now glows, making it more explicit that it is the element controlled by the player. This is useful on the new track selection screen, to remove the ambiguity with the background of the selected championship.</p>
<p>On Tiny-sur-Mer, the lighthouse shadow now looks nicer.</p>
<p>Finally I worked on the AI pilot: it now tries to avoid other vehicles.</p>
<h2>Burger Party</h2>
<p>At the end of October, I released version 1.4.3 of Burger Party.</p>
<p>This was a translation release:</p>
<ul>
<li>Burger party now speaks Basque, thanks to Josu Igoa</li>
<li>Spanish translation has been updated, thanks to Victor Hck</li>
</ul>
<p><img alt="Burger Party speaking Basque" src="https://agateau.com/2023/2023-1011-update/burgerparty-eu.png"/></p>
<h2>Nanonote</h2>
<p>I was a bit late on this one but I'll count it as November. At the very very end of November (as in, around November 31th 😉), I released version 1.4.1 of Nanonote.</p>
<p>This one was also a translation release. Nanonote learned to speak:</p>
<ul>
<li>Danish, thanks to Morgenkaff,</li>
<li>Dutch, thanks to Heimen Stoffels,</li>
<li>Polish, thanks to Marek Szumny,</li>
<li>Norwegian, thanks to Vidar Karlsen.</li>
</ul>
<p><img alt="Nanonote speaking Polish" src="https://agateau.com/2023/2023-1011-update/nanonote-pl.png"/></p>
<h2>Clyde</h2>
<p>I made a small change to <code>clyde upgrade</code>: it now lists blocked upgrades. Blocked upgrades are upgrades which can't be installed because you pinned a version number. This is helpful in case you pinned to version N because N+1 had a bug. Now that N+2 is out, listing the blocked upgrade can remind you to unpin and try this new version.</p>
<p><img alt="Clyde blocked upgrade" src="https://agateau.com/2023/2023-1011-update/clyde-blocked-upgrade.png"/></p>
<h2>Clyde Store</h2>
<p>The CI of the Clyde store has an auto-update mechanism to automatically fetch new versions and update the packages. I improved this auto-update mechanism to overwrite the update branch if it exists. It is now one step closer to being runnable automatically on a regular basis.</p>
<h2>What's next</h2>
<p>I had this optimistic hope of releasing Pixel Wheels 1.0 for Christmas, but seeing how most of my leisure time is taken by getting the new house in shape, it's not going to happen. I am going to continue working on the new Pixel Wheels track, though, and the related game engine work (in particular it's triggering some bugs in rescue helicopters). On Clyde front, it's been too long since the last release, so Santa may bring you may a new Clyde version! 🎁</p>2023-12-08T07:05:30+01:00https://agateau.com/2023/introducing-clydeClyde: a cross-platform package manager for pre-built applications2023-12-31T19:17:40+01:00<h2>Introduction</h2>
<p>The popularity of Go and Rust and their ability to produce self-contained static binaries has made it easier for developers to publish builds of their applications working reliably on all platforms.</p>
<p>Downloading standalone binaries is easy and fast when one wants to try a new application (no need to build from source, no need to add a third-party repository...). On the other hand, keeping track of these applications over time is tedious and time consuming. This is what <a href="https://github.com/agateau/clyde">Clyde</a> is here to solve: Clyde is a cross-platform package manager for pre-built applications.</p>
<p>Installing <a href="https://github.com/sharkdp/fd">fd</a>, for example, can be done with <code>clyde install fd</code>.</p>
<p>Keeping installed applications updated consists of running <code>clyde update</code> to get an up-to-date list of packages, then <code>clyde upgrade</code> to install the latest version of all installed packages.</p>
<p><a href="https://asciinema.org/a/629496"><img alt="Clyde demo" src="https://asciinema.org/a/629496.svg"/></a>
<em>Recording of setting up Clyde and installing fd</em></p>
<!-- break -->
<h2>Other niceties</h2>
<p>In addition to making it easy to keep applications up to date, Clyde provides other niceties such as installing man pages or making auto-completion work out-of-the-box.</p>
<p>It is also simple to rollback to a previous version and pin it if the latest one does not work for you for some reason.</p>
<p>Finally, Clyde is cross-platform. It supports 3 OS: Linux, macOS and Windows, and 3 architectures: x86, x86-64 and Aarch64 (aka ARM64). Future versions may add other OS or architectures.</p>
<h2>Yet another package manager developers must take care of?</h2>
<p>No: compared to other package managers, Clyde does not require application developers to do anything when they release a new version: as long as the layout of the published archive does not change from one version to another, the Clyde store will pick up new releases and make them available.</p>
<h2>Getting started in 2 minutes</h2>
<ul>
<li>Download version 0.6.0 for your machine from the <a href="https://github.com/agateau/clyde/releases/0.6.0">release page</a>.</li>
<li>Unpack it and set it up:</li>
</ul>
<div class="codehilite"><pre><span/><code>$ tar xf clyde-0.6.0.tar.gz
$ cd clyde-0.6.0
$ ./clyde setup
(...)
All set! To activate your Clyde installation, add this line to your shell startup script:
. /home/demo/.cache/clyde/scripts/activate.sh
</code></pre></div>
<ul>
<li>
<p>Add the <code>activate.sh</code> script to your shell startup script as suggested (the path to <code>activate.sh</code> will be different on macOS and Windows)</p>
</li>
<li>
<p>Restart your shell</p>
</li>
</ul>
<p>You can now:</p>
<ul>
<li>search for packages with <code>clyde search <something></code>,</li>
<li>install a package with <code>clyde install <package></code>,</li>
<li>show package info with <code>clyde show <package></code>,</li>
<li>show package files with <code>clyde show -l <package></code>,</li>
<li>list installed packages with <code>clyde list</code>,</li>
<li>uninstall a package with <code>clyde uninstall <package></code>.</li>
</ul>
<h2>Under the hood</h2>
<h3>The installation directory</h3>
<p>Clyde installs all applications in "Clyde home directory": a directory created in the default cache directory of your home directory.</p>
<p>The hierarchy of Clyde home directory looks like this:</p>
<ul>
<li><code>$CLYDE_HOME</code><ul>
<li><code>inst</code>: Clyde "prefix": where package files are installed<ul>
<li><code>bin</code></li>
<li><code>share</code></li>
<li><code>opt</code></li>
</ul>
</li>
<li><code>download</code>: where Clyde downloads package assets</li>
<li><code>store</code>: Clyde store (see below)</li>
<li><code>scripts</code>: activation scripts</li>
<li><code>tmp</code>: used while installing</li>
<li><code>clyde.sqlite</code>: installed packages database</li>
</ul>
</li>
</ul>
<p>Clyde activation script ensures <code>$CLYDE_HOME/inst/bin</code> is in <code>$PATH</code> and other environment variables are set up accordingly.</p>
<h3>The Clyde store</h3>
<p>The Clyde store is a <a href="https://github.com/agateau/clyde-store">git repository</a> holding all Clyde packages.</p>
<p>A package is a YAML file containing:</p>
<ul>
<li>some metadata about the package (name, URL for its home and repository...)</li>
<li>for each version, a list of asset URLs with their sha256 checksum.</li>
<li>installation directives, telling Clyde where to put which files.</li>
<li>test commands. These are used by the store CI: after updating a package, the CI installs the new version and runs these test commands.</li>
</ul>
<p>You can learn more about the package format by reading <a href="https://github.com/agateau/clyde/blob/620a86dcc037d59666ad893a41f92b0a519a3afb/docs/package-file-format.md">its documentation</a>.</p>
<h2>What's next?</h2>
<p>Clyde itself is fully usable at this point, though a few new features are planned. What's needed is more packages! If you like the idea but do not see your favorite application, do not hesitate to add new packages. There is <a href="https://github.com/agateau/clyde/blob/620a86dcc037d59666ad893a41f92b0a519a3afb/docs/creating-a-package.md">a tutorial</a> to get you started, and I am always happy to answer any questions!</p>2023-12-31T19:17:40+01:00https://agateau.com/2024/2023-wrap-up2023 Wrap Up2024-01-09T08:59:37+01:00<h2>Introduction</h2>
<p>It's the start of 2024, so I want to reflect on how 2023 went, regarding my FLOSS activities.</p>
<h2>Releases</h2>
<p>In 2023 I made 17 releases:</p>
<table>
<thead>
<tr>
<th>Date</th>
<th>Project</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>2023-02-05</td>
<td>Pixel Wheels</td>
<td>0.24.2</td>
</tr>
<tr>
<td>2023-02-14</td>
<td>Cat Avatar Generator</td>
<td>0.2.1</td>
</tr>
<tr>
<td>2023-03-12</td>
<td>Nanonote</td>
<td>1.3.91</td>
</tr>
<tr>
<td>2023-03-20</td>
<td>Clyde</td>
<td>0.5.0</td>
</tr>
<tr>
<td>2023-04-02</td>
<td>Nanonote</td>
<td>1.3.92</td>
</tr>
<tr>
<td>2023-04-03</td>
<td>Nanonote</td>
<td>1.3.93</td>
</tr>
<tr>
<td>2023-04-11</td>
<td>Nanonote</td>
<td>1.4.0</td>
</tr>
<tr>
<td>2023-05-08</td>
<td>Burger Party</td>
<td>1.4.0</td>
</tr>
<tr>
<td>2023-05-20</td>
<td>Burger Party</td>
<td>1.4.1</td>
</tr>
<tr>
<td>2023-06-14</td>
<td>Burger Party</td>
<td>1.4.2</td>
</tr>
<tr>
<td>2023-07-03</td>
<td>Poglyph</td>
<td>0.0.1</td>
</tr>
<tr>
<td>2023-07-05</td>
<td>Poglyph</td>
<td>0.0.2</td>
</tr>
<tr>
<td>2023-08-30</td>
<td>Pixel Wheels</td>
<td>0.25.0</td>
</tr>
<tr>
<td>2023-09-21</td>
<td>Pixel Wheels</td>
<td>0.25.1</td>
</tr>
<tr>
<td>2023-11-02</td>
<td>Burger Party</td>
<td>1.4.3</td>
</tr>
<tr>
<td>2023-12-01</td>
<td>Nanonote</td>
<td>1.4.1</td>
</tr>
<tr>
<td>2023-12-28</td>
<td>Clyde</td>
<td>0.6.0</td>
</tr>
</tbody>
</table>
<p>or, grouped by project:</p>
<table>
<thead>
<tr>
<th>Project</th>
<th>Versions</th>
</tr>
</thead>
<tbody>
<tr>
<td>Burger Party</td>
<td>1.4.0, 1.4.1, 1.4.2, 1.4.3</td>
</tr>
<tr>
<td>Cat Avatar Generator</td>
<td>0.2.1</td>
</tr>
<tr>
<td>Clyde</td>
<td>0.5.0, 0.6.0</td>
</tr>
<tr>
<td>Nanonote</td>
<td>1.3.91, 1.3.92, 1.3.93, 1.4.0, 1.4.1</td>
</tr>
<tr>
<td>Pixel Wheels</td>
<td>0.24.2, 0.25.0, 0.25.1</td>
</tr>
<tr>
<td>Poglyph</td>
<td>0.0.1, 0.0.2</td>
</tr>
</tbody>
</table>
<p>(I haven't written about <a href="https://gitlab.com/agateau/poglyph">Poglyph</a> yet. It's a set of two small CLI tools to find missing glyphs in fonts. I extracted it from an internal Pixel Wheels tool and now use it in Burger Party)</p>
<p>I was happily surprised by the number of releases I managed to push. It's a bit more than I expected.</p>
<h2>Pixel Wheels</h2>
<p>I had the secret goal of getting <a href="https://agateau.com/projects/pixelwheels">Pixel Wheels</a> 1.0.0 out for the end of the year, but that did not happen. Moving houses ended up taking way more time than I expected :)</p>
<p>Still the game is in a good shape for a 1.0.0 release. The missing track is mostly done, I may add multiple difficulty levels (some equivalent to the 50cc, 100cc, 150cc and 200cc in Mario Kart) and that will be it.</p>
<h2>Burger Party</h2>
<p><a href="https://agateau.com/projects/burgerparty">Burger Party</a> made a surprising come-back this year! Google requesting the game to be updated otherwise it would no longer be available on Google Play finally got me working on it after leaving it untouched for 5 years.</p>
<p>I am happy that I finally got to add the end sequence I had in mind and that I pushed the game on F-Droid. This had the unexpected side-effect of gathering interest from several translators: the game received an update to the Spanish translation from a native speaker and got translated in Basque, Dutch and Polish! And it's not over yet: I recently merged an Hungarian translation too.</p>
<h2>Clyde</h2>
<p>I had high hopes on <a href="https://github.com/agateau/clyde">Clyde</a>, but it has failed to gain traction for now. Marketing is definitely not my forte, but I keep trying :). At least it's useful for me, and creating it was a nice way to gain more knowledge in Rust.</p>
<h2>Support</h2>
<p>I have a <a href="https://agateau.com/support">support page</a>, with links to various ways to give me money.</p>
<p>The thing is, even critical infrastructure projects struggle to get funded (<a href="https://xkcd.com/2347/">mandatory XKCD link</a>). Me, I just make tools and games. I am also not starving, there are more important projects or causes than supporting me. Still I would love to be able to reduce my time at $JOB to a 4 day week, keeping one day for my own projects, as I once did several years ago.</p>
<p>Support in 2023 breaks down to this:</p>
<table>
<thead>
<tr>
<th>Source</th>
<th align="right">Number</th>
<th align="right">Amount</th>
</tr>
</thead>
<tbody>
<tr>
<td>Patreon supporters</td>
<td align="right">2</td>
<td align="right">100.25€</td>
</tr>
<tr>
<td>Liberapay supporters</td>
<td align="right">1</td>
<td align="right">5.43€</td>
</tr>
<tr>
<td>One-time Ko-fi donations</td>
<td align="right">4</td>
<td align="right">25.42€</td>
</tr>
<tr>
<td>Itch.io sales</td>
<td align="right">1</td>
<td align="right">4.32€</td>
</tr>
<tr>
<td>GitHub sponsors</td>
<td align="right">0</td>
<td align="right">0€</td>
</tr>
<tr>
<td><em>Total</em></td>
<td align="right"/>
<td align="right"><em>135.42€</em></td>
</tr>
</tbody>
</table>
<p>The tricky part of being on platforms like Patreon or Ko-fi is they encourage you to give some rewards to supporters. It makes sense, but it does not match well with open-source work: I don't have any secret agenda I could share with insiders, all my work is in the open. As such I feel the least I can do is write monthly status updates, but it takes quite some time to do so, and I have no idea if they are useful. When I look back at them I often find them boring to read.</p>
<p>I actually like writing, and I'd like to write more interesting pieces than status updates. I am considering focusing on one interesting topic for each month, and write on it instead. What do you think?</p>
<h2>What to expect for 2024?</h2>
<p>My primary goal for 2024 is to get Pixel Wheels 1.0.0 out. I don't want to write down any other goal for now, we'll see when it's out! Once this one is achieved I am sure I am going to feel a huge relief :)</p>2024-01-09T08:59:37+01:00