Blog
Time to read: 7 Minutes, 12 Seconds

Current Projects July 2023

As usual, I have a number of projects on the go that I'm slowly but surely working on. There's a few, but I thought I'd highlight a few that I think are worth sharing.

Leo's Music Manager

Did you used to have an iPod from back in the day? One of my favourite features was the ability to create "smart playlists" and sync them with a remote device. A "smart playlist" let you define rules that automatically generated the plalist tracks. For example, rating is greater than 3 stars, or date added to library is in the last 12 months, or both. Spotify, TIDAL, Apple Music, etc have lost this feature of smart playlists. I want to bring them back, plus the ability to sync your own music collection to a device, such as for example, a Hiby R3 Pro Saber (which I own) or another DAP (digital audio player). MP3 players are mostly dead, and have been replaced with premium "audiophile" DAPs which generally have very decent audio circuitry and of course the ability to play lossless (FLAC) files for the objectively-best audio experience (some still like their record players but to each their own).
Here's a screenshot:

My latest progress has been implementing a rating system, quite important for querying what are your favourite tracks. You can create a smart playlist as a JSON file, for example,

{
    "name": "Last 12 months top rated",
    "queries_and": [
        {"field": "date_modified", "expression": ">", "compare": "2022-04-25", "date_fmt": "YYYY-MM-DD"},
        {"field": "rating", "expression": ">", "compare": "3.5"}
    ]
}

This will use queries_and for logical AND and then date_modified > a certain date, with the appropriate date format (I might tidy that up later). Also, checking if they are rated 3.5/5 or more stars.
The program is a very slow work in progress, I can't remember when I started it, probably over a year ago. It uses Python and Kivy for the UI. I wanted something with a broad range of features and easy to develop (ie not C++/GTK). My first attempt at it was C++ and DearIMGUI, which I struggled with, with lots of little compiler errors and such. So after some research, I settled on Kivy. I'm slowly but surely becoming skilled with Kivy. Which is nice, it's a library that you can use on Android and iOS as well, could be useful.
Regarding licensing, I plan to keep the source private while under development. I'm unsure whether to make this open source or not, as it's a bigger project with niche but desirable features. It's a tough decision I don't plan to make too quickly. I could end up selling it, or making public releases like MusicBee.

Microblog for Leo

It was getting a bit embarassing and unprofessional, me rambling on, on Twitter and other social media. So, I made my own micro blog. I call it "Microblog for Leo" (or replace Leo with your name).
Basically I can make a post and it adds it to a feed that is a lot like Twitter and the now half a dozen popular clones.
Written in Python and Flask. It's very basic and just uses TinyDB as the database which stores posts in JSON format.
See screenshot:

As you can see, I've also added OpenAI ChatGPT functionality. You can get a guaranteed response! Plus a like count that's just a random number. I feel that on Twitter, the like count was basically random due to which people were on at a certain time to see your post anyway. You can also tick the "Make public" post. I haven't fully implemented that, but it will have a login system, and when logged in, only you can see the private posts, but everyone can see the public posts. I also plan to add RSS feed to make it like a normal blog, but shorter posts of course. And a few other features, like mardown formatting, embedded links (youtube etc), an edit button, image hosting, etc. I think it has the potential to be a desirable open source project which I'll host on GitHub or similar.

Steam Game Picker

As someone with a large Steam library, it can be quite difficult to decide which game to play next. My solution to this problem was to let you enter in each game manually (this might change later) and then pick your preference between two games selected randomly. I thought this was a good way of ranking your games. Previously, I was using a list such as in a todo app like Todoist, where you can manually re-arrange list items. The problem with this is that it's difficult to slide a game choice up the list as you're making lots of decisions as you're moving the game up or down the list. This just makes each decision between two games at a time. It takes the stress off the decision making which leads to a better resulting list. More fun games at the top. I've slowed down on this project but I think I will pick it up again. See a basic screenshot below:

Not many games at the moment. I started off using LocalStorage in Javascript, which saves the database to the current device's browser. Not great as soon as you switch device. So I re-designed it to use SQLite as it was easier to query than TinyDB which is my go-to for quick hacky apps. Had to take a step up from it. One issue I had was concurrency - making multiple queries in quick succession in the same thread. In Python I had to do:

self.db = sqlite3.connect("games.db", check_same_thread=False)

Which will let it make multiple queries in the same thread. Still seemed to work ok.

Leo's Virtual Pet Project

A hardware project. I Try to keep at least one hardware project under development. The virtual pet is like a Tamagotchi, a little electronic pet you can carry around with you. This one is fitness and health oriented. Like a fitness tracker band, this will count steps and track your sleep. But the difference is that the more steps you take, the happier the virtual pet will be, and the more normal your sleep is, the happier the pet will be as well. So it encourages you to stay healthy so your pet is healthy as well. Like my Internet Radio Alarm clock, a major motivation was to help improve my sleep habits. When you go to sleep at bad times, it will make the pet less happy and it might die if you sleep too poorly.
Due to the complexity of this project, my plan is to break it up into multiple versions, adding more features as I go. For version one, it has a basic 8x8 LED display, accelerometer and piezo speaker. See a photo below:

As you can see, I've designed and 3D printed a casing for it. Inside is the circuitry plus battery and charging circuit. You can see another little demo on my Instagram: https://www.instagram.com/p/Cq5GkgGM7Qx/

Games!

I couldn't finish this projects list without mentioning my games. After releasing Gravity Flux on Steam, I've been patching issues with that and fixing the gamepad support as I wrote about in my other blog: https://motleypixels.com/2023/02/07/more-than-4-xbox-controller-support-in-windows-in-godot-engine-how-to/. A cool little hack with Godot Engine.
After that, I've been working on my next major game, "Sentience", which is a game about a self-aware robot that is trying to prove it's humanity. Very, very early stages with that game and I know I have a lot ahead of me.
I've also been pushing along progress with my old game, Wizards with Rockets. The aim is to cut down on features and get it released sooner rather than later. Lately, I've been working on a dialogue system. Screenshot:
Generally, I aim to post more about my game development on my blog, https://motleypixels.com. So if you want to see more, head over there.

Overall

I have no shortage of side-projects to work on, that's for sure! And I do enjoy working on them, when I get a chance. Sadly, more and more responsibilities are creeping in (like community orgs, work, social evenets and mental health breaks) which are all very important and good, but that time to myself I am beginning to use more effectively, as it's becoming more sparse. I'd like to complete one of these projects in the not-too-distant future. I think they're pretty cool projects that no one else is working on. That's something that keeps me going, the fact that these projects are so unique, but still quite interesting, and useful to me at least. Not sure if they're monetisable, but they're pretty compelling.

Next Post Previous Post

Page views: 614