Releases galore!

Over the past week and a half, I have made releases for all of my projects. Most of them were pretty minor, and just amounted to updating the translations (and fixing an issue where the Qt-supplied translations were not being properly loaded). Packagers will now need to depend on lrelease, because I no longer include the precompiled binary .qm files.

The projects with actual feature releases were CuteMaze, Hexalate, Tanglet, and Tetzle. For the most part, the features added will not be obvious unless you have a 4K monitor, because the biggest thing I added was support for high-DPI displays. I did also finish moving my projects to be Qt 5 only, and to use C++11.

As usual, report any issues you have. Enjoy!

Development version numbers

Now that I am switching to release branches I am finally going to also tackle something that has always bothered me but I’ve never taken the time to solve: the development source code has the same version number as the most recent release. I have always wanted it to be some sort of automated number, but I wasn’t sure what I wanted it to be. And I didn’t want to have to update it myself with every single commit.

At first I had wondered about a number that gets incremented every time you compile the project, but I quickly realized that was a pointless thing to track. I may build a project 5,000 times and have a huge build number, but someone else might download the source and compile it only twice. Same source code, different version number. That’s frankly pretty silly.

Instead, I got inspired by the idea of using the git revision ID. It is obviously unique for each commit, and it identifies the specific source code for everyone. Of course, you can’t embed the revision ID because it is a hash that is created of the source code that you’re trying to embed it in. A hash that contains itself? Impossible! Of course, all you have to do instead is simply ask git for the revision ID, and pass that as a definition to the compiler:

VERSION = $$system(git rev-parse --short HEAD)
DEFINES += VERSIONSTR=\\\"git.$${VERSION}\\\"

The source code also needs to make use of the new compiler definition:

QCoreApplication::setApplicationVersion(VERSIONSTR);

This means that I finally have an automated version number for the development source code. I’ve only updated Kapow so far, but I am going to make this change to all of my projects.

The end of PowerPC support

I should have announced this sooner, but better late than never I suppose. I will no longer be creating new PowerPC builds of my programs. There are many reasons, but the biggest two are that my iBook G3 finally gave up the ghost, and that Qt has dropped support for PowerPC. I know that this is an inconvenience for some of my users, and I am sorry about that. Still, I hung in there as long as I could, but Apple has moved on.

More releases!

Good news, Tanglet fans! I have made a new release, version 1.2.0. This release includes some graphical improvements along with its new features. There is now the option to choosing how dense the board will be, as well as requiring words to start with more than 3 letters if you are looking for even more of a challenge. By default a list of how many words of each length that you have found is shown along the bottom. And finally, I made it a lot easier to share games by adding the option to import or export them.

I was getting tired of how the board was just a bunch of rounded rectangles, so I made the letters look like they are on actual dice. I also gave the timer bar some gloss as it was starting to look a little out of place next to the new board. These changes inspired me to create a completely new icon.

Many thanks go to Bentzy Sagiv for a Hebrew translation, and Bas Duineveld for a Dutch translation.

New Tanglet!

I have just released Tanglet 1.1.0. The two biggest features are the addition of several more timer modes, and the option of playing on a larger board. Some of the smaller changes include an option to see the maximum score (either during gameplay, or at the end of play), and an option to hide the missed words list.

I also tweaked the interface slightly. I added an outline to the text in the timer to make it easier to read. I also tweaked it so that the text highlight changes from a light blue to a darker blue when a word is long enough to be guessed.

New Tanglet release

I have just released Tanglet 1.0.1, which has a few small bug fixes and a French translation provided by Mehdi Yousfi-Monod, including a word list and dice set. If you have any questions or comments about this release, please let me know. Otherwise, enjoy!

A new game

A couple of months ago, my wife and I started playing the game Boggle. Neither of us could remember playing it before, but we were hooked right off of the start and couldn’t get enough of it.

Being me, I also couldn’t get the idea of writing a solver for the boards out of my head. I first wrote a stringlist matching solver, but that was incredibly slow. So I rewrote it to use a tree structure I designed specifically for walking through a list of words. I went looking online after I wrote my solver, and discovered that it is called a trie. And that they are a good way to solve Boggle. 🙂

I couldn’t stop tinkering with it, though, and soon found myself writing a computer version of Boggle. I have been working on a lot of things, so I didn’t focus on it solely and it ended up taking a couple of months to finish, although the amount of time I spent actually writing it was significantly less than that. Along with that I was sick recently, which delayed things a bit more.

I decided against having the computer version be multi-player for the reason that it is so easy to cheat. I had already written a simple GUI for solving boards, and it would take far less than 3 minutes to type the words into the solver and get the answers. I wouldn’t do that, but there would be no way to prevent other players from cheating.

After spending a little while thinking about it, I found what I think is a big improvement for a single player variant: you start with 30 seconds to find the words, but you get more time whenever you find a new word. I have found this to be a very addicting change.

I have released my computer variant of Boggle under the name of Tanglet. Enjoy!