I got an interesting problem to solve the other day. A few friends have a local radio show and we want to put the recordings of it online. Of course, there are very different rules on how music can be played on radio as opposed to how is can be shared in a downloadable/podcast format so we have to remove the music from the recording. I offered to help with that, started up Audacity and got to work.
It was quickly very clear to me though, that at least in theses particular recordings, it was obvious just by looking at the wave forms where the music was. So I thought.. if I can see it, the computer can see it. And then instead of doing the work I was supposed to, I set off to solve the problem in code.
I think the work of removing all the music from all the audio files manually would have taken a couple of hours. But I opted for spending a couple of days rather to solve it.
This is a simple website, written in Django, using django-q to distribute the work to workers when there is any real work to do (as it is quite heavy to remove the music from hours of radio and my free Heroku tier would be eaten up pretty fast, the worker is an old mac-mini running Linux. It’s not fast, but it gets the work done. Eventually). The files are stored on IBM Object Storage while being processed.
The algorithm I came up with for removing music is quite simple and works for the radio recordings I had. It may work for others but there has been no extensive testing. Feel free to try it out.
I made a small game a while back. I made it in C++, since well, that is how things get done, and all was fine. Until I wanted to change stuff in it and it all just became complicated (my code was a bit of a mess). So I tried out Unity, Unreal and Godot, and in the end settled on using Godot.
So here it is. A small math puzzle I made when thinking of ways to help my daughter with her math.
The game is a bit more complex than it needs to be (implementation wise), but I wanted to test making a networked game. So this game is running in a browser but has a server backend (also written in Godot) that is running on IBM Cloud Engine and that in turn has a database/API written in Django-REST on pythonanywhere. In theory, this should all scale pretty well if that would ever be needed 🙂
If you feel like playing it, just log in with whatever username you want and a password. If the username doesn’t exist a user is created. Else you just get an error so you have to chose another name. Then select a game and play. The highscores are live, so your see how you are doing compared to everyone else that has played.
Note: Since this was written the game has been moved from both IBM Cloud Engine and pythonanywhere.
Moved the "Show All" checkbox to a menu
Added a "Stay on top" menu item
Fixed github issue 25 - Deleting of creation date
Added version information in Mac Build / Bundle
Added ability to change what character is used for "NOT" in search
Add a due: or t: if using a rec: without any due: or t:
* Undo/Redo support
* Bug: Search string could not include multiple spaces
* Qt 5.15.0
* Added possibility to remove duplicate lines (the mobile client I use for todo.txt has started adding doublets)
* Bug: Title not updated when automatic refresh
Todour 2.18 is a very small update again, but it’s available now.
* Possibility to change the application font size
* Updated Qt to 5.13
* Fixed interpreting UTF-8 in done.txt that was missed (thanks @fuchsmich)
* Fixed a segfault when exiting the program (thanks @richarddribeiro)
This is a very small update that mostly fixes a couple of Linux issues.
* Added support for "p" in rec: - This means that a reccurance can be random (note that this is non-standard) * Removed the +procrastinated label from automatically being added when using "p" * Fixed logout issues in KDE where the dock could stop logout from happening
Also, there was an issue with the Linux/.deb packaging. The application is built on a 32-bit machine but the package didn’t state that anywhere so on 64 bit system without 32 bit libraries the application simply wouldn’t run (and give no good error message). This is now fixed and the .deb file will require i386 dependencies.
To install on Ubuntu/Debian or similar that does not have the correct libraries already installed, something like the following is required:
The new rec: feature has been a great addition to how I use my todo-lists and I am using it quite a lot. Probably a bit more than I should be, but it’s nice with reminders “sneaking in” to the todo-list like they do using this feature, as I am not a very big fan of reminders popping up in my phone.
I though just thought of a little use-case I would like to have for things I want to be reminded of, but not all the time. Like for example working on Todour. I don’t have a schedule for it and I don’t want one, but it would be an idea having it pop up a bit randomly (I have lots of small projects that I would like to have like that).
Anyway, I added the “p” (as in procrastination) to the rec: key just now in my development branch and it’s actually pretty neat. Example:
Work with +todour t:2019-01-30 rec:15p
This line will show up at 30/1 due to the threshold and the rec: switch will create a line just like this one when I cross out this line. The new date in t: will now be the finished date + 1-15 days. So somewhere in the coming 15 day it will pop up again.
I don’t know if this is actually useful, and it’s completely non-standard of course, but it was easy to do and now it’s there to be delivered in the next version.
Time for some updates of Todour. This time the star is the rec: tag that has been added.
The rec: tag works by adding time as specified to any t: and due: tag you may have on an item.
My item rec:1d due:2019-01-10
Will create a new item when this one is crossed out as
My item rec:1d due:2019-01-11
As usual there are multiple ways of specifying the time to be added. d is for days, w for weeks, m for months, y for years, p for random (!?) and b for business days. A special thing to note is that all of this can be prepended with a + sign (rec:+1d) to make the recurrence strict. Then the recurrent date will not be from the date the item got checked, but rather from the date specified in the t and due fields. Please experiment with this.
Here is the complete change log
* Multiple thresholds supported on each line * Added a Quit menu item * More robust autoreload * Qt 5.12 * Dark Mode support on macOS * Support for rec: * Support for "b" in shorthand and in rec: for business days