New gtk-rs release and more

The latest gtk-rs release is officially available since today. The perfect time to explain some of the contributions I made.

Docs, docs, docs …

A huge amount of effort went into documentation for this release. The people working on gtk-rs gir provided huge improvements to the automatically generated docs! I also tried to contribute to those efforts and, among other things, updated the content of the crate landing pages.

Landing page generated by gir-rustdoc.

Besides the content there was another ongoing problem with docs: For license and technical reasons gtk-rs docs cannot be on docs.rs. That also meant that there was no real solution for handling docs for different versions. While it felt pretty wrong to redo things that docs.rs already does, I created gir-rustdoc. It generates a landing page listing the documentation links for different releases. It ensures that references to gtk-rs crates work and automatically links to the correct version. On GitLab the script collects different doc versions from artifacts and merges them to one GitLab page. And finally, it hacks a warning about outdated and development versions into the documentation pages. I tried ensure that the use of the script needs very little configuration and integrates as seamless as possible. However, I should have created a test repository for GitHub as well before things landed on the gtk-rs repos there. Debugging in CI with a real project usually isn’t fun.

Redesign of gtk-rs.org

What originally started as a small design improvement ended up in a complete redesign of the website. The original website was from the very early days of the project. I’m very happy that we developed the start page into a direction that provides space for many aspects of the gtk-rs projects. These include crates, the GTK 4 in Rust book, related rust bindings like libadwaita-rs and the documentation of gtk-rs gir.

x

A lot of work went into consolidating documentations, tutorials and examples. I am optimistic that all those efforts will simplify onboarding a lot.

I have not touched web design for many years. Having features like flex-boxes available really simplifies web-design a lot. That was quite a nice experience 🙂

Rust Handy bindings

Besides updating the Handy bindings to work with the new gtk-rs version I also fixed a bunch of broken links in the documentation and added a basic example. Last but not least, there is now support for Handy 1.2. So the new libhandy-rs 0.8 release is already available and compatible with the latest gtk-rs release!

Beyond Pika Backup 0.3

Pika Backup is an app focused on backups for personal data for the average user. It’s internally based on borg-backup and provides fast incremental backups.

With version 0.3 out of the door, it’s time to look at the future of Pika Backup.

By far the most requested feature is support for scheduled backups. Using borg-backup as backend, even hourly backups should be no problem in many circumstances. If only Pika would support it. While the basic concept for scheduled backups is clear, the devil is in the detail. There is a huge potential for grinding somebody gears with a flood of notifications while it’s equally dangerous to let backups silently fail too often. Also, there are metered connections, laptops running on batteries, USB devices that are not connected, people that are travelling and so much more. Therefore, the main task is to find a set of rules for all of these cases with different setups that work well. I also loosely experimented with collecting »user stories« to get some insight into more use cases. This already turned out to be quite valuable while creating some connections to the people that are using Pika Backup. I really liked like the approach so far 🙂

Another feature that is sorely missing is a proper support for recovery. It’s a feature that’s causing me headaches. What if you want to migrate to a new computer and your uid has changed? How to read your data from an ext3 drive? What do we do if the username has changed? Those are very basic and valid use cases but they will probably need some plumbing. However, achieving a recovery dialog that greets you with your Avatar and your old user name, is a goal that keeps me motivating. Just imagine the relieve if a user sees a dialog like this after their hard drive failed.

Tentative Design for a »Migration App« by Jakub Steiner (2020)