Hi! My name is Michał Góral, I am software developer (currently at Nokia) and this is my personal website. You can read more about me on a separate page if you’re curious.

You can contact me by e-mail: dev@goral.net.pl. My PGP key fingerprint is: 0423 DE59 98D1 2C33 E599 CDCF E3DD DA4D C45F 58CB.

Changelog

Jucho 2

, .

I bought an album: 2 by Jucho. (sidenote: Justyna Chowaniak) Spoiled by near-instant deliveries of internet marketplaces, I had nervously waited for 2 weeks until it arrived. The wait was worth it. The music is great, lyrics are incredible, and release quality is superb. My whole family loves both Jucho and her previous project, Domowe Melodie.

But the best part is QR code attached to the album which allows download of MP3s. It’s… just a link. No password, no personalised download, no session, no tracking. Ordinary a link. Oh, but it includes a “secret” phrase! I love it!

little things like this makes me feel more like a human being. I feel that there’s a person on the other end of the cable who trusts me to not share the link with whole internet. In return this person respects me and doesn’t make my life miserable with DRM or some other bullshit. No EULAs or privacy policies. I don’t have to accept anything or sell my kidney. This small link feels like the original spirit of Free Software translated to the world of music.

I love supporting people like this.

Cover Art of Jucho's album '2' which shows a painted face with a red mushroom hat and 2 ribbons going from the hat to the sides of the image

Jucho - 2

Certificates Expired

, .

Not everything went well after upgrade to Debian Trixy on the server. Apparently, Trixy is missing OVH DNS plugin for certbot and I learned about it a month after the upgrade, when my Let’s Encrypt certificates expired. (sidenote: Resolution: install certbot and the plugin from PyPI.) I didn’t notice it when inspecting removed packages. Good that I have some experience how communication with server which doesn’t serve valid certificates looks like from the client side, so I could debug it quickly. God forbid if I tried to get anything from the bot spam in nginx logs.

Niri

, .

I tried niri, which is a “scrollable-tiling” Wayland compositor. It’s inspired by PaperWM, which lays windows in an infinite, horizontally-scrolled workspace. The idea sounds neat and I must admit, 10 minutes of my test were rather pleasant and I think it could improve my workflow…

…Ultimately. Because I guess I’m too old to tinker with new software and some things required tinkering. For example, gammastep, a blue light filter, didn’t start when spawned by niri, but it worked from the child terminal. I don’t have time to hunt environment variables which probably caused the error. On top of that, I’d have to rewrite all my keybindings and window rules. There’s no added value in this, so I’ll stick with my trusty sway.

Maybe I’ll try scroll. Apparently it implements the same “scrollable-tiling” paradigm as niri, but it’s a fork of Sway and promises that most of existing configurations should just work. It’s also written in C (contrary to niri being written in Rust), which should also make it easier to create a proper Debian package for myself.

Two Phones

, .

With direction Android is heading, I see more and more software developers considering buying two phones. They’re going to keep one in Faraday’s cage and use it infrequently for banking or age verification, (sidenote: In European Union) while the other one will be the actual personal computing device — a “Linux phone”. This is cool idea and I hate it, because it throws away needs of everyone else. “I’ll get my privacy no matter what and fuck everyone else, especially the poor, kids, elders and non tech-savvy, so circa 95% of smartphone users”. It also doubles the environmental cost of producing 2 phones instead of one.

We mustn’t agree to limit rights of people to develop and install software on the phones which they rightfully own. We mustn’t agree to lock down apps only because we installed OS not affiliated with Google and its partners. It’s developers’ duty to protect the rights of users, as they are inherently less privileged ones, even without taking their social standing into account. Strength before weakness.

It’s a shame that during technical interviews we spend exactly no time discussing ethics of software development.

Creations

Synchronization

I synchronize a lot of things, each of them differently. Let's take a look how to write a simple Bash script which automates and parallels that.

Generacja wersji [PL]

Presentation of simple scripts and techniques allowing automatic generation of program's version.

Working on TWC Formatting

Formatting is one of these parts of TWC which I disliked the most. This has finally changed with release of TWC 0.9 and complete rewrite of formatting strings syntax.

Dotfiles [PL]

-

Description of my old custom system of keeping and deploying dotfiles.

Commenter [PL]

Presentation of my program for toggling file comments depending on a list of keywords in a language similar to preprocesor.

Singleton w i3 [PL]

With markorapp, a script which I wrote, it's easy to create "singletons" in i3. Singletons are applications which should have only one instance, like a particular terminal.

Creations: Release Notes

kpsh 1.0

First stable release of kpsh

SubConvert 0.8.2 [PL]

I released a new version of SubConvert, a program to convert between various video subtitle formats.

Software Design

Computer Tools

Polish Git

How to force Git to speak English.

Describe Merges!

-

Changelog is important, but we can simplify our lives and generate it, at least partially.

Kupfer [PL]

Kupfer is a program launcher written in Python.

Desktop Systems

State of Wayland [draft]

Current state of Wayland on desktop PCs, its quirks and workarounds

Xsession in Debian

Xsession is a default way of starting X sessions in Debian, but for some reason it remains a mystery for many people. Here I try to shed some light on it.

Git Credential Helper [PL]

Git has capabilities of writing custom credential helpers, which can fill passwords for accessing HTTP repos for us.

Zmiana monitorów w i3 [PL]

I did it! I forced a buggy xrandr to toggle screens and not kill X session!

Sysadmin

I Blocked Bots

-

Every month bots eat my server's traffic, so I blocked them.

Job Queue in GWS

Examples of using job queues in GWS to run a lightweight CI/CD

Home Automation

C++

Najważniejszy const [PL]

There is one const usage in C++ which is a little different than the others. Andrei Alexandrescu called it the most important const.

std::move [draft]

-

A short introduction to one of the most breakthrough features of C++11: rvalue references and move semantics.

Zwracanie wartości z funkcji [PL]

The article about Return Value Optimization - one of the most important features of C++ compilers.

Structured Bindings [PL]

Structured Bindings is a new way to decompose values returned from functions. It's similar to some other programming languages and greatly simplifies the code.

Problem dependant names [PL]

How C++ handles dependant names and why we must use typename keyword everywhere.

Name hiding [PL]

Name hiding is a surprising feature of C++. Here we'll learn a little more about it.

Polimorfizm [PL]

Introduction to C++ polymorhpism.

Urbana meeting [PL]

A short summary of C++ comitee meeting in Urbana-Champaign.

Python

Conversion Descriptor

Clever descriptor which automatically converts assigned values to the annotated type.

Cleanup

Application cleanup in Python inspired by weakref finalizer objects

Timeout Anything

Writing a generic function for timing out blocking operations

Naughty Python

A short thing about how Python prints its version number.

Zamykanie aplikacji PyQt [PL]

Graceful shutdown of PyQt applications might be harder than it looks like. This article presents the problem and a way to resolve it.

Bash

Process substitution [PL]

Process substitution in Bash is a powerful technique which allows us to redirect command's output to programs which only accept files.

Technology

Internet mobilny [PL]

Few quick thoughts about the mobile internet.

Computer Science

Matlab engine [PL]

-

How to use Matlab Engine in C++

Software Freedom

Doom 3 GPL

Doom 3 source code has been released.

Philosophy

Life is Creating

To live our lifes and not merely exist, we, the humanity, must create

Politics

Invasion

Yesterday Russia invaded Ukraine.

Your Pain Is Bigger Than Mine

Even though I almost entirely stopped listening to it, I can't stay silent about recent events in Polish Radio Trójka.

Books

Cosmere [draft]

-

Field notes about Cosmere.

Warbreaker

Review of Warbreaker by Brandon Sanderson

Reviews

Nikon D5300

-

First thoughts about the new camera

SDF

SDF is a public access UNIX System which I recommend visiting sometimes.

Android Apps [PL] [rework]

-

Reviews of some interesting Android Apps

Writing

Cross References in Notes

Notes should be pretty too, because why not? Here I'll show you my method of rendering them to HTML.

Notes on Notetaking

-

Some things which I have learned over the years of notetaking.

I Want a To-Do App

It seems that we have a curse of abundance: so many to-do apps and methodologies that we can no longer choose one.

Personal

Migadu [in progress]

Trying something new for mail provider: a small company from Switzerland called Migadu.

PrintScreen

A short story about a prank which I unknowingly did to myself.

Wishlist

-

Things which I wouldn't mind to receive

The Blackout

Yesterday early morning there was a blackout.

Personal: Site

Digital Garden

-

Default chronological order of posts on this blog might not be the best.

Sidenotes [draft]

Implementation of sidenotes/margin notes on this blog

10 years

10 years of blogging on my own.

Blog changes

Introduction of new blog theme: Tale.

New Year's resolution

It's a little late to make a New Year's resolution, but I'll make one nevertheless.

Hugo [PL]

Switching to another static site generator: Hugo.

Parenthood

I have forked

What is a fork() and what PID it returns?

Double fork

Here we will learn about so-called double fork technique... More-less.

First Drawing

Przemek's first drawing presenting his whole family.

Practical

When I Die

-

What will happen when I die - a plan for my family

Photography

Niesulice

Niesulice is a small village over Niesłysz lake.