fosdem, day #0

I arrived in Brussels yesterday, and today feels like the day before the storm. Closing some work from the hotel room, meeting some people before the fosdem chaos, doing some preparatory stuff for foss-north.

Make sure to checkout the foss-north Community Day page. It is mostly scaffolding yet, but it will grow quite quickly. Also, if you bump in to me, grab a foss-north flyer and help spread the word!

Ordmonster

Spurred on by the mattemonster (maths monsters – it is available in English and Swedish) app that I created to make my sons homework a bit more exciting (everything is more exciting on a screen), I’ve decided to create another app. This time it is about basic reading and words. The title is ordmonster – swedish for word monsters. As this is work in progress, you can find it on my github. I’ll try to get the alpha play store listing done this week – but with fosdem coming up, I might run out of time.

The game can be run in two different modes – one word / many pictures, or one picture / many words. You can also select if you want four or nine items of the many category. Turns out nine images or four words seems ok. Right now reading nine words is a bit too tedious.

The first thing I’d like to point out that my fluency in Godot as a tool is starting to show of. I’m more happy with the code structure of ordmonster, and I start to feel that I don’t continuously bump into the sharp edges of Godot, but use the engine as it was meant to be used.

I also learned a couple of things. The first one is the Control::mouse_filter property. The GameButton nodes (the ones showing a word or a picture) consists of a Button with a Label for text and a TextureRect for holding the picture. The TextureRect sits inside a MarginContainer. It turns out the MarginContainer stops all mouse events from passing through, effectively disabling the Button. This took a while to figure out.

The second half has to do with how resource files can be traversed on Android. Resources are embedded into the executable produced by Godot. The words available in the game are stored as the filenames of the images, so that I don’t have to create a table and keep it in sync with the file names. Really smart idea – right? This smart idea cost me quite some time.

First up, it seems like you cannot have non-ASCII characters in asset filenames when building apk files for Android devices. Really annoying. The fix was using English for the filenames and having to add the words to my translation tables, so now I have a table to keep in sync with the filenames anyway.

The fun did not end here. Now it worked on desktop (both Linux and Windows), but my Android builds simply crashed on me. It turns out that the Directory::list_dir_begin and friends do not seem to work on Android, or the assets are not included in the apk. I’ll spend some time figuring out what is up, then I’ll probably file a bug report. In the mean time you can follow the current forum discussion. The code in question, including my Android hack (yet another list – sigh) is shown below:

func _init() -> void:
  if OS.get_name() == "Android":
    # TODO This is a really ugly HACK
    _words = ["ant", "apple", ... , "zebra"]
  else:
    var dir = Directory.new()
    if dir.open("res://assets/images/words") == OK:
      dir.list_dir_begin()
      var filename = dir.get_next()
      while (filename != ""):
        if filename.ends_with(".png"):
          _words.append(filename.left(filename.length()-4))
        filename = dir.get_next()

When working with internationalization of Godot apps, I really miss the Qt tools for extracting text needing translation. lrelease/lupdate – please come back, I forgive you and regret all my harsh words!

In other news, next week if fosdem. I’ll be there, so make sure to let me know if you want to meet and greet. Drop a mail at hello -at- e8johan.se, or ping me on twitter or mastodon.

Also, foss-north is approaching. The Call for Paper is still open – closing soon. Make sure to mark the dates March 29-31 in your calendar. Ticket sales will open soon.

gbgcpp – Ribbons using Qt

I’ve been involved in the gbgcpp group, a part of the larger Sweden C++ community, for a couple of years. It is fun to see that there is a lot of C++ developers out there, once you start looking for them.

In the next meetup, this Wednesday, there will be both C++ and Qt. The topic is to implement Ribbons in Qt, based on a seminar by Dag Brück. If you happen to be in the vicinity of Gothenburg, I recommend you to go there!

I’d also like reach out and thank Sylog for hosting the event!

Planning

A new year and a new decade means time for reflection. I try to do this more often than every ten years, but this seems to be a good time to discuss in public.

I’ve split this into three phases. Short-term is what I’d like to do in the coming month or so. This year is my goals for roughly a year, while decade really just means long-term.

Short-Term

Promote an ensure that foss-north 2020 is as successful as last year. You can help by submitting your paper. We’re also looking for sponsors and projects for the community day.

There is also some short-term work for foss-north, i.e. getting tickets sales up and running via our own infrastructure instead of using Eventbrite.

While planning foss-north, I’d also like to keep foss-gbg and gbgcpp active during the spring. Here, the travel part of my work means that I’m seriously short on time. The ambition would be ~10 meetups, but realistically it will be ~5-6.

A part from organizing events, I’m also attending. The next big one is fosdem, which I’m really looking forward to.

Then we have this blog. My goal is to write more, and I’ve been at it for a few months. I’ll try to keep this up.

When it comes to personal health, I try to run regularly. Since my little health dip last autumn, I’ve been fighing to get back and the current goal is to do 5km rounds every week.

This Year

For foss-north, my aim is to do at least one themed event, much like the cancelled foss-north Iot and Security Day planned for October last year. This event will be in the Øresund region or in Stockholm. Feel free to reach out to me if you want to help out.

On a 12 month time frame, I have some professional goals. I’m working with Mbition together with an amazing group of people. We are building a platform for future in-car software. There my goal is to be more focused in what I’m doing – to do more of what I do well better, and less of what I do badly.

Kuro Studio is also in an interesting phase, having a couple of start-ups underway and a constructive partnership in an interesting phase. Again, my personal goal here is to focus more.

Finally, I have my little one-man-box, Koderize, where I do smaller assignments. Here, my goal is to do a few more articles for various magazines, and possibly to find some small development project. Let’s see what I bump into.

Then we come to actual coding. A while ago I came to the conclusion that I need to down-size my projects a bit to actually finish them. Hence Mattemonster an app to teach basic maths for Android created using Godot. It started as a way to get my son to enjoy practicing maths, but this time I polished it just a little bit more and published it on the Play Store. I still have some features on my todo list, as well as publishing it to f-droid.

I also want to spend some time writing a proper Qt desktop application as well. I’ve got some basic ideas, but nothing crisp enough. I’ll probably not have time to dive into this unless I get a really good idea.

My health target this year is to do 5km under 30 minutes, and comfortably do 10km. The stretch goal is to do 10km under the hour.

Next Decade

When looking at a longer time-frame than a year, the goals become fuzzier. This might seem like speculation, but I embrace the fuzziness and use them to prioritize my short-term goal. If I run into something that seems fun, I map it to my long term goals to determine if I should do it or not.

On this time scale, I’d like for foss-north and foss-gbg, I want them to be more independent of me as an individual. To create more a role based setup and stable economical environment (currently the margins are super slim). If I can enjoy a foss-north conference as a visitor in 2030, I’ve achieved this.

For my Mbition work, I want us to reach multiple releases. The reason for the automotive industry to take on more responsibility for software is to increase the reusability. That is why it is key for Mbition to do multiple releases. Then we have proven that our existence makes sense.

For Kuro Studio, we want to continue doing start-ups, more partnerships, building a larger team, meeting more people, and doing more awesome stuff. Getting Kuro properly off the ground is very high on my list of priorities.

Another professional goal I have is to speak more at conferences and speak more about how open source is the way to do software. Transparency is the only way to ensure proper quality, maintainability, and trust – and what better way than open source is there to be transparent.

Since we’re on the really long-term goals part of this post, I’d also like to write another book. I’m not sure about the topic, nor when, but I would not consider myself a proper writer with only one title to my name.

Health wise, it is harder to set a more clear goal than staying healthy, which is what I intend to do. I’ll try to keep running and staying in reasonable shape. If I can still do 10km at a reasonable pace in 2029, when I turn 50, I’m happy.

Next Up

At the end of the day, these are goals and ambitions, not a roadmap for my life. Next up is fosdem. I hope to see you there!