The most common Python trap & how to find it

We had a near miss with a mutable default argument in one of my Python projects.

Mutable defaults are an old and well-documented problem in Python, arguably a language design mistake. Given its notoriety, I was running under the assumption that it's the kind of obvious Python bug that any linter would immediately pick up and flag. I were to explain to a 6-year-old what a "python linter" is, I'd probably say someting like "a tool that finds typical bugs, like mutable default function arguments".

Turns out I was being optimistic!

We caught the bug before it went live, but I resolved to find which static analysis tools actually check for this problem.

Read more…

My Asteroids Adventures

You might doubt if there's really something going on between me and Asteroids remakes, but if you look closer, you'll probably be suspicious the moment you look at the games I tried to make over the years: a good chunk of them might have been attempts at an Asteroids-themed game, and the one I completed was somewhat well-received too.

I don't think it's a coincidence; I'd easily contribute that to the numerous Asteroid-themed games I played back in the 90's. Let's dig in.

Read more…

I hosted my own music streaming service

My Spotify subscription is years old, I think it might easily be my oldest online service. I've been generally happy with it, save for the regular, unexpected changes to user interface. If Spotify was a person, it would be a roommate who studies interior design and randomly re-arranges your furniture ("this way is better, you'll see!")

However, things have been getting worse: I hear more and more often about Spotify offering bad deals to niche, emerging artists. Possibly for this reason, my favourite songs tend to disappear. When the Iconoclasts soundtrack vanished from Spotify, leaving a big hole in my favourite Indie OST playlist, I decided it's time to take matters into my own hands...

Turns out it's extremely simple to host your own music streaming service! Follow along to find out what setup I ended up with.

Read more…

A look back at X-COM: Terror From The Deep

I’m the last person to the party, attempting to review the UFO Defense’s sequel when it’s about to turn 30 years old. Given that the game still visits me every few years, I feel obligated to write something about it. Instead of reviewing, let me frame this post as a love letter of some sort.

Here's the catch: It’s difficult for me to share the experience of playing TFTD. I’m not sure if I’d say it “aged well” as a game: It’s very much playable for me nowadays (to say the least), but that’s only thanks to the time we spent together. All the unnecessary complexity, labyrinthine menus and seemingly-unfair gameplay make the game unapproachable today (and have been rightfully corrected in the 2012 reboot) So the least I can do is put in writing why the game feels so important to me.

Battlescape screenshot. Isometric view of sea bed. On the left, a gold silhuette of an alien craft. In the center, a lone lobsterman is facing a damaged X-COM underwater vehicle next to a landed Triton transport craft. X-COM agents are hiding in smoke particles next to the Triton. On the bottom there's the game's user interface that depicts the currently selected unit, labeled "Coelacanth/G.cannon". The yellow UI has two rows of gray buttons for various in-game actions.

Read more…

Chaos Communication Camp 2019

Chaos Communication Camp is a conference / festival event that happens in Germany every four years. The theme covers a wide range of topics around technology, society, and how they interact. But most importantly, it's a gathering of various hackerspaces from all around the Europe and more. I had a chance to attend this year's edition and the event surprised me in a lot of ways. It's difficult to summarise the experience (unless you make a whole documentary, but I collected some observations and memories here.

Read more…

How not to fix burnout

January is a good time for retrospectives. As I'm writing this, my team is planning a "best failure of 2018" contest, so I thought it's a good opportunity to write down my personal entry.

Here's the story of that time when I left a team to fight burnout, and lost something more important in the process.

Read more…

Multiplayer in retro games

Old NES games typically supported two-player mode, but the designers' approach towards multiplayer was often surprising, especially with cooperative titles. Some of modern game design principles simply didn't exist at the time, which led to curious situation that we learned to take for granted.

Let's look at some examples:

Read more…

Document-Driven Meetings

In my previous post, I argued that meetings tend to be much better if they have a driver and a well-defined objective.

I'd like to invite you to a little thought experiment. Assume there's only one possible meeting objective: to collaboratively write a document. Can you fit each of your meetings into this shape?

Read more…

Fun Facts about Tetris

The original release of Tetris was pretty comprehensive already, even though the graphics used text mode.

At least three versions of Tetris have been released on NES:

  • BPS
  • Nintendo
  • Tengen (Atari)

The BPS version was the first to be released, but it was tough to play due to very awkward controls. Nintendo's version plays much better. Tengen's own version (dubbed TETЯIS) has a long story to it since it was subject of a copyright dispute. It ended up being quickly pulled off the shelves after Atari's loss in court. This is a pity, because it had a two-player mode and a lot of polish. Here in Poland it was often available on bootleg "9999 in 1" cartridges. (Note that in the 90s in Poland there was no official distribution of Nintendo products, but every flea market sold Famicom clones and bootleg carts.)

Read more…

Efficient meetings

If you asked me a few years ago about my biggest issue at work, chances are I'd mention "too many meetings". A lot of things improved since then, but the theme seems to be popular, especially since useless meetings are known to occupy a large part of the 4th circle of developer hell.

Let's look at some reasons.

Read more…