I just released version 1.3.0 of SFXR Qt, my Qt port of the SFXR sound effect generator.
There aren't that many new features for end users:
The new file format opens the road to adding new features. I have a few ideas in mind, will see how it goes.
Nevertheless, this release brings several under the hood changes:
I just released Pixel Wheels 0.13.0. This new release contains mostly fixes, small improvements and polishing. One of the most visible of these changes is the new "Championship finished" screen which appears if you finish a championship in the top 3:
I am also happy to report that an annoying bug causing white vertical lines to randomly appear on the road has finally been fixed. It turned out to be a "classic" case of texture bleeding. The white vertical lines were caused by the first column of the "crossroad" tile sometimes being drawn next to the "road" tile...
libGDX provides a tool called TiledMapPacker to repack tilesets and add padding around individual tiles to avoid tile bleeding. Unfortunately this tool uses some libGDX classes, so it requires an OpenGL display to run. This is a blocker for automated builds, so I wrote a simple script: pad-map-tiles. It only does tileset padding, but for Pixel Wheels I don't need the other features provided by TiledMapPacker.
Some behind the scene changes happened too: the code base now uses Java 1.8 (was about time!), a more recent version of Gradle and the APK contains 64 bit binaries, as required by Google Play nowadays.
I knew it had been a long time since the last Pixel Wheels release but I was surprised when I opened the changelog and realized version 0.11.0 was released in 2018... It's high time to get 0.12.0 out!
So what are the main changes in 0.12.0?
3 new vehicles
The 2-Deuch:
It is inspired from an car which was very popular in France in the second part of the 20th century.
The Harvester:
It comes from the country side, as you may have guessed. If you have ever watched or drove an harvester, you know the steering wheels are on the back. This makes this vehicle a bit special to handle, give it a try...
The Rocket:
A joint production from my son and me. This one is faaast!
Qt has a well established way to handle memory management: any QObject-based instance can be made a child of another QObject instance. When the parent instance is deleted it deletes all its children. Simple and efficient.
When a Qt method takes a QObject pointer one can rely on the documentation to know if the function takes ownership of the pointer. Same thing for functions returning a QObject pointer.
This is very Qt specific. In the rest of the C++ world, object ownership is more often managed through smart pointers like std::unique_ptr
and std::shared_ptr
.
I am used to the Qt way, but I like the harder to misuse and self documenting aspect of the unique_ptr
way. Look at this simple function:
Engine* createEngine();
With this signature we have no way to know if you are expected to delete the new engine. And the compiler cannot help us. This code builds:
{
Engine* engine = createEngine();
engine->start();
// Memory leak!
}
With this signature, on the other hand:
std::unique_ptr<Engine> createEngine();
It is clear and hard to ignore that ownership is passed to the caller. This won't build:
{
Engine* engine = createEngine();
engine->start();
}
But this builds and does not leak:
{
std::unique_ptr<Engine> engine = createEngine();
engine->start();
// No leak, Engine instance is deleted when going out of scope
}
(And we can use auto
to replace the lengthy std::unique_ptr<Engine>
declaration)
Time for a new Nanonote release!
This new version comes with several changes from Daniel Laidig: you can now use Ctrl+mouse wheel to make the text bigger or smaller and Ctrl+0 to reset the font to its default size.
He also fixed the way links are displayed: they now use the theme color instead of being hard-coded to blue. If you use a dark theme, this should make Nanonote more usable for you.
Nanonote now speaks German, thanks to Vinzenz Vietzke.
I just released version 1.2.0 of Yokadi, my command-line todo-list.
Several interesting changes landed in Nanonote recently, time to release version 1.1.0.
There are a few fancy indentation improvements: pressing Tab when the cursor is at the beginning of a list item now indents the whole line, making it fast to create sub lists. Thanks to Daniel Laidig for this contribution. Conversely, pressing Enter on an empty list item now unindents the line, then remove the list bullet.
URL detection has been improved to allow the +
, %
and ~
characters. This should greatly reduce the number of partially highlighted URLs.
The application is now available in Spanish and French, thanks to Victorhck for the Spanish translation.
The first release of Nanonote, my minimalist note-taking app, was a bit rushed: I broke indentation shortly before tagging version 1.0.0... meh.
So here is version 1.0.1. It fixes the indentation and adds the ability to indent or unindent whole lines with Tab and Shift+Tab, in addition to the existing Ctrl+I and Ctrl+U shortcuts.
Here is the last issue of release month! Today is the first release of Nanonote, a minimalist note-taking application.
Quoting the README:
It automatically saves anything you type in the screen on your disk. Being minimalist means it has no synchronisation, does not support multiple documents, images or any advanced formatting (the only formatting is highlighting urls). If you have long-lived notes you should store them in a more permanent place.