November 22, 2020

DK30 October 2020 - Towers

I participated in the DayKnights 30-day projects, Oct 15th to Nov 15th. One week after the deadline, I am done with everything I wanted to do. The game is by no means complete, but it’s playable and challegning (sometimes). I enjoyed making something new, and will probably continue working on this. Maybe I’ll post another update in a while. The game is playable at: Here is the project page: Read more

August 28, 2020

Using cf-remote to download and install CFEngine nightlies

This is a work related post. Nightly packages are very useful for testing new features of CFEngine. Right now, nightly packages can be used to test out these new features: Compliance Reports. Mission Portal Dark Mode. New host info page with variable pinning and copy buttons. Note that these features are in development, some parts may be unfinished or buggy. Nightly packages are not supported and should not be used in production environments. Read more

July 15, 2019

Generating markdown changelogs using git

Sometimes I want to create changelogs for my personal projects and add them to blog posts. It’s extra neat to have all changelog entries link to individual commits on GitHub. git log allows you to specify a custom format, and is perfect for the task: $ git log --pretty=format:"* [%s](" 09facd30..HEAD Update the GitHub URL with your project, and the commit SHA with the last commit from the previous changelog. The log will have newest changes first, and won’t include the commit which the SHA references, only commits since then. Read more

June 19, 2019

MRPG #1 - Turn based RPG combat and GUI improvements

Recently, I’ve done a lot of work on my unnamed game project, MRPG, so I thought I’d share some of it. The game is turn based, open source, written in python, with a focus on the combat system, and inspired by famous JRPGs such as Final Fantasy and Pok√©mon. It’s been a while since I posted about it. GUI A lot of improvements were made to the GUI version of the game. Read more

April 10, 2019

Running cf-runagent as non-root

I work at, developing CFEngine, a configuration management system. This is a work (CFEngine) related post. cf-runagent is a component for triggering remote agent runs using the CFEngine network protocol. It does not allow for arbitrary commands to be executed, but rather asks the remote host to run the policy it already has. To trigger cf-runagent from other systems or web interfaces, you want to be able to run it as non-root. Read more

March 18, 2019

Editing windows registry using PowerShell

CFEngine Enterprise supports Windows and Windows Registry manipulation. In CFEngine policy you can both read from and write to the registry. I needed a way to test these features, and I prefer ssh access over GUI, so I made this short reference. View See keys (folders) at a path: Get-ChildItem -Path "HKLM:\SOFTWARE\" See all properties (values) in key: Get-Item -Path "HKLM:\SOFTWARE\CFEngine\" See specific property in key: Get-ItemProperty -Path "HKLM:\SOFTWARE\CFEngine\" -Name "VERSION" Create Create a new key (folder) at a path: Read more

March 12, 2019

Fixing your mac keyboard in X11 (RHEL 7)

Alternatively: How xkb works, and how to change keys which are wrong. On OS X, there is no alt+gr. Combinations of shift and alt are used instead. Both alt keys behave the same. You can make your Apple internal or external keyboard behave like this on Linux. This blog post shows how, but please note that it changes the behavior of your alt keys. So keyboard shortcuts which rely on alt might not work any more. Read more

March 11, 2019

Introducing cf-remote: Tooling to deploy CFEngine

I work at, developing CFEngine, a configuration management system. This is a work (CFEngine) related post. About a year ago, I wrote a small python script to automate installing and bootstrapping CFEngine on virtual machines in AWS. It had some hard coded IP addresses that I needed to update when I spawned new hosts, but other than that, it worked well. During manual testing, it saved me a lot of time instead of having to do things manually. Read more

November 11, 2018

Scanning unsigned types in C

printf and scanf are the C standard library functions for printing out and reading in data. They have string counterparts, prefixed with s, which work on strings (sprintf and sscanf). All these functions use a format string to match parts of the string with C variables. As an example, %lu in the format string corresponds to an unsigned long, a positive integer type in C. Scanning unsigned types What happens if you try to sscanf a negative number using %lu? Read more

October 20, 2018

Unknown type name 'u_int'

I ran across the error message (Unknown type name 'u_int', 'u_long', 'u_char' etc.) when trying to incorporate some old C code into a more modern project. It shows up in system headers, like sys/attr.h, and I was confused. After quite some time I figured out what the problem was, so I thought I’d share. Simplified example The source code, when simplified, looked something like this: $ cat test.c #define _XOPEN_SOURCE 500 #include <sys/attr. Read more

© Ole Herman Schumacher Elgesem 2021

Powered by Hugo & Kiss.