Author Archives: [maven]

Some Game recommendations from 2018

  • Tacoma (“walking simulator” by Fullbright (who made “Gone Home”))
  • Zero Time Dilemma series (weird time travel visual novel + escape room puzzles)
  • Iconoclasts (metroidvania with strong puzzle focus
  • Life is Strange: Before the Storm (I thought I didn’t want to go back, but turns out, I did :))
  • Q.U.B.E and Q.U.B.E. 2 (first-person 3D puzzle games)
  • What Remains of Edith Finch (“walking simulator”)
  • Undertale (RPG by Toby Fox with an unusual battle system, good story and great music)
  • Yakuza 0 (prequel to the Yakuza series, good entry-point, and probably the best game in the series)
  • God of War (2018)
  • Monster Hunter World (still a bit obtuse, but the loop worked for me until the “now for the same monsters, but harder” part – which was 40-ish hours in)
  • Destiny 2: Forsaken (base D2 was a bit of a disappointment, but Forsaken managed another “Taken King” turn-around)
  • Celeste (excellent platformer, hard but fair (and teaches what you need to be able to do), great music, and interesting story)
  • ASTRO Bot Rescue Mission (charming VR platformer)
  • Marvel’s Spider Man (a bit repetitive, but ultimately OK)EXAPUNKS
  • 7 Billion Humans (sequel to Human Resource Machine, visual programming puzzle)

More (mechanical) keyboards and Mac key remapping

After browsing too much r/MechanicalKeyboards I bought some more keyboards… 😀

One is a white TKL CODE with 65g Zealios switches
White TKL CODE with 65g Zealios switches
(which is essentially the same as my current WASDv2 except for the case color, switches and lighting), which I bought because I was interested in the Zealios switches, and this is one of the few pre-made keyboards that offer them.

The other was a birthday present to myself and is a Leopold FC660C (Topre) in Grey & Blue:Leopold FC660C (Topre) in Grey & BlueThe Leopold does not have a Mac specific mode (although you can use its DIP switches to swap the Windows and Alt key, but that doesn’t get you ⌘ to the right of the space bar).

Therefore I fiddled a bit with remapping some keys for these keyboards for macOS use. One option for the Leopold FC660C is Hasu’s Alt Controller which replaces the controller board itself with a fully programmable one. Another option is to use Karabiner to remap the keys at the software level, but I found the CPU usage of Karabiner’s karabiner_grabber process a bit too high for what it should be doing. Since macOS 10.12 there’s another way to remap keys using hidutil.

My configuration (for both keyboards) looks as follows (stored inside ~/bin/ which is run on login, based on this script):

#!/usr/bin/env bash






# WASDv2 / CODE in Mac mode
hidutil property --matching '{"ProductID":0x269, "VendorID":0x4d9}' --set "{\"UserKeyMapping\":[
{$FROM: $F13,          $TO: $MEDIA_EJECT},
{$FROM: $F14,          $TO: $MEDIA_PREV},
{$FROM: $F15,          $TO: $MEDIA_NEXT},
# Leopold FC660C
hidutil property --matching '{"ProductID":0x134, "VendorID":0x853}' --set "{\"UserKeyMapping\":[
{$FROM: $PAUSE,        $TO: $MEDIA_NEXT},

Mainly this maps the modifier keys to be more Mac-like, caps lock to escape (which means I can run the Leopold’s escape key permanently in ` / ~ mode (using Fn + Q), as well as some media keys. The links in the header-comment of the script contain lists of supported pages and usages; the page is the upper 32-bit word and the usage the lower 32-bit word.

If you want to run this on login, you can use launchd by storing a plist in ~/Library/LaunchAgents/de.maven.remap_keys.plist for example containing

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "">
<plist version="1.0">

Happy hacking!

SoundPusher v1.0.0

And we have a release (which is fairly untested, but it works for me). This is first time I’ve released something post-Gatekeeper, so I hope I signed all the things correctly. Also the first time I’ve attempted an installer.

I’ve redone the synchronisation between the input and output thread about 5 times now, let’s hope this variant works out. It’s easy if you don’t care about latency, but trying to get that as low as possible without glitching and staying real-time is quite hard. By default, only AC3 encoding is enabled as DTS support in libavcodec is only experimental. EAC3 seems to distribute packets over multiple SPDIF frames, and thus seems to be a bad choice due to further increased latency.

Diablo 3 sounds quite different with 5.1 sound for example, as the different screen corners map to in front or behind your character (and thus the listener) due to the isometric perspective.

Report any issues or suggestions on the GitHub page. Happy multi-channel audio-ing! 🙂


I’ve been on a bit of a coding spree during my time off work, and managed to make some progress on my old attempt to provide a virtual 5.1 sound-card that does real-time AC3 encoding to a digital output connection. This time around, I didn’t actually stop a third of the way in and it actually works (and quite well at that — at least on my system — if I may say so).

The code is on GitHub. If you’re interested helping with testing, feel free to get in touch.

For some internals, I reduced the number of components to two, as I eschewed AudioUnits (and thus the separate encoder) altogether. There’s now just the user-space LoopbackAudio driver (AudioServerPlugIn) and the SoundPusher application that reads from the loopback-driver, compresses that and then sends it to the real digital output stream. Latency is reasonable from my experiments, as is CPU usage.

Puzzle Games

I really enjoy puzzle games. Here’s a list of some I’ve enjoyed:

  • 3D
    • Antichamber
    • Kairo
    • Portal (2)
    • The Talos Principle
  •  Platforming
    • Braid
    • FEZ
    • The Swapper
  • Pure
    • Hexcells (Plus / Infinite)
    • Picross 3D
    • Slitherlink
    • SpaceChem

All of these are well worth buying.