AirPods Sound Quality Fixer


...And Battery Life Enhancer

Fixes sound quality drops when using AirPods with Macs. It forces the default audio input to be the built-in microphone instead of AirPods' microphone so MacOS doesn't have to mix down the output. It also increases battery life because AirPods doesn't have to broadcast sound back. If you have more input devices you can select which device you want to force over the AirPods microphone.

The app runs in the menu bar.

I want it now!


GitHub link

Other milgra utilities you might be interested in

Mac Media Key Forwarder ( for Mac )

Mac Audio Keepalive ( for Mac )

Fat Fingers Keyboard ( for iPhone )

Comment on AirPods Sound Quality Fixer

Fat Fingers Keyboard


No more typos!

Free and Open Source keyboard for iOS

Fat Fingers Keyboard knows when you mistype and doesn't let the bad character in. It also shows you the bad touch point so you can improve your grip. After a few minutes you will start to type faster than ever.

With the additional symbol row at the bottom and an optional accent ribbon on the top the need for page switching becomes minimal so typing speed becomes even more faster.

To move easily through words and lines just simply swipe left-right-top-bottom.

All keys are freely remappable, accent ribbon can be two pages wide so feel free to add your language's accented characters or create a ribbon with your commonly used symbols or emojis.

Double tap shift to turn on caps mode.

Fat fingers comes totally free, so if you like it please help me make more awesome utilities and donate in the app / on my homepage.

I want it now!

App Store link

GitHub link

Other milgra utilities you might be interested in

Mac Media Key Forwarder ( for Mac )

Mac Audio Keepalive ( for Mac )

AirPods Sound Quality Fixer ( for Mac )

I created Fat Fingers Keyboard because I have three main problems with soft keyboards :

  1. Software keys detect touches from edge to edge. These edge areas are grey zones, you never know which key you will press, especially with big fingers. I transformed these grey zones into dead zones, no touches will go through here, you will be notified about the problem instead and the nearby keys lit up so you can make a more precise decision. The area of this dead zone can be set in the app.

  2. Continuous page switching. Because of regularly used punctuation you have to switch to the number/symbol page often which slows typing down and just simply annoying. Fat Fingers keyboard has a fix punctuation line under spacebar with the most commonly used punctuation marks and there can be also an accent ribbon on the top of the keyboard activated by the lower right button. In foreign languages it can be useful for their accented characters, in english you can use it for more punctuation marks or smileys or anything.

  3. The force-touch touchpad on the iPhone is a very neat and useful feature but annoying at the same time : after you move the cursor to a specific position and release your force touch the cursor often jumps away one or two characters. FatFingers uses simple swipe to move the cursor and moves the cursor one character with every half-key swipe so it can be controlled precisely.

How to enable the keyboard and remap buttons :

Comment on Fat Fingers Keyboard



Termite is the ultimate psychedelic real-time action strategy experience. You are the leader of a termite hive with three objectives :

  • collect food
  • produce ants
  • destroy alien colonies

Select groups of termits, order them to collect food or attack aliens, use the speed slider to slow down/speed up time to have more control over your ants.

With Termite you get :

  • 31 levels of intense action and mass destruction
  • Random scene generator
  • Tons of particles
  • Voxel system based minimal design

Termite is open-source, feel free to learn how to write muti-platform C games here

I want it now!

for iOS - App Store link

for Android - Google Play link

for Windows/MacOS/Linux - Steam Store link

for RaspBerry - Download ( enable OpenGL / Full KMS Support in raspi-config )


Comment on Termite

The new Termite

Back in 2009 I released my first iOS game, Termite. There wasn't that many apps back then so it reached a wide audience and a lot of people loved it, they wrote heart-warming reviews. My favorite one was "Super game, it taught me a lot about teamwork!".

I just moved on to other games and project but I always wanted to update it somehow. Then after I completely fell in love with voxels it was clear : I have to create a 3D Termite based on voxels and with new things like walls but I also wanted to keep the mechanics and the levels of the original termite because it was somehow super playable.

So I started to work on it a year ago and despite my work and my other projects and other million distractions finally I finished it and I proudly release it for the raspberry for the first round. Enjoy!

Comment on The new Termite

Living and Developing on a Raspberry Pi

My new game will run on all platforms possible but the first supported platform will be the Raspberry Pi because of 80's nostalgia. I love the fact that there is a super cheap home computer again that ages well - they don't double the cpu speed every year, they still sell the first version so you can optimise for the hardware and you also have to because it's not that strong - and I love this fact.

For a week I used my Raspberry Pi 3 as my main computer. And it was surprisingly usable, it is like a machine from the early 2000's. Overall desktop experience is okay, the terminal and file manager works well, LibreOffice and normal applications run fast enough, I used Code::Blocks for programming, the current raspbian apt version ( 16.04 ) is terribly buggy, I had to compile the latest one ( 17.12 ) on the raspberry which needed a few hours but it worked flawlessly after. Chromium, the now-default browser is the weakest point, it is a monstrous software and it had to run modern javascript which is also a monstrous task. Javascript intensive pages ( facebook and modern "portals" ) kill the board in two tabs, youtube can be in 6-7 tabs and it handles simple sites well. But it is advised to use only 1-2 tabs whatever you do.

Since my game doesn't use any framework and it's quite simple the board compiled it in a few seconds so development was rapid.

To summarise my experience : modern web is not for the raspberry pi but it is good for everything else, it is a super cheap and capable home computer.

Comment on Living and Developing on a Raspberry Pi

Headerless C programming with a single preprocessor macro line

Header files in C can be painful. They duplicate the file count, increase complexity heavily, make refactoring painful. There are solutions to get rid of them. It's possible to use header generators ( - makeheaders ), write you own headerless c dialect with a precompiler like me ( class-c ) or use "#ifdef FOO_IMPLEMENTATION" blocks inside header files to define everything in one file but they are unelegant and confusing and have a lot of other problems.

The ultimate solution seems to be using the __INCLUDE_LEVEL__ preprocessor macro. It's value is zero if we are in a source file that was added directly to the compiler as parameter and greater than zero if we are in a file that was included as a header file from an other file.

So just create a single file, write the header declarations at the top, write the implementation under that and guard the implementation with an #if __INCLUDE_LEVEL__ == 0 macro and you never have to use header files again. You can include all files written this way as header files and add these files as source files to the compiler, everything will work as before.

Example : mtvec.c

#ifndef mtvec_h
#define mtvec_h

#include <stdio.h>
#include <stdint.h>

typedef struct mtvec_t mtvec_t;

struct mtvec_t
    void** data;
    uint32_t length;
    uint32_t length_real;

mtvec_t* mtvec_alloc(void);
void mtvec_dealloc( void* vector );
void mtvec_reset( mtvec_t* vector );


#if __INCLUDE_LEVEL__ == 0

mtvec_t* mtvec_alloc( )
    mtvec_t* vector = mtmem_calloc( sizeof( mtvec_t ) , mtvec_dealloc );
    vector->data = mtmem_calloc( sizeof( void* ) * 10 , NULL );
    vector->length = 0;
    vector->length_real = 10;
    return vector;

void mtvec_dealloc( void* pointer )
    mtvec_t* vector = pointer;

    for ( uint32_t index = 0 ; index < vector->length ; index++ ) {
    mtmem_release( vector->data[index] );
    mtmem_release( vector->data );

void mtvec_reset( mtvec_t* vector )
    for ( uint32_t index = 0 ; index < vector->length ; index++ ) 
        mtmem_release( vector->data[index] );

    vector->length = 0;


At the moment I don't see any pitfalls in this solution, do you? Please add your thoughts in the issues, thank you.

check out the github project

Comment on Headerless C programming with a single preprocessor macro line

File System Change Logger

Running a program or installing a dev environment pollutes the computer with a lot of visible/hidden/unknown of files. If you are as curious as me about file changes/additions/removals on the file system try my new tool called fschangelog. It creates lightweight file system snapshots using the file size and last modified date only and compares these snapshot files. It groups the results in three groups : added, removed and updated. It is on github with a public domain license, just download the project and compile the *.c files and there you are.

fschangelog on github

Comment on File System Change Logger

Programming Concepts For Children

I'm always thinking about how programming should be introduced to children and how to reach real programming languages with them. Here is what I've figured out so far. Feel free to contribute by comments or through github.

GitHub project

Comment on Programming Concepts For Children

Merry Christmas!

I sing in a jazz choir and it is a very important part of my life, I'm really grateful that altough I'm just a gifted amateur they accepted me. Please listen to one of my favorite Keep Smiling Jazz Vocal songs - Michelle, originally from the Beatles.

Comment on Merry Christmas!

Shockwaves of a quickly written app

High Sierra Media Key Enabler is the most successful app in my life and it took the shortest time to write. It soon reaches ten thousand downloads and it took me about 30 minutes to write it and test it. Funny. Sometimes you really have to be in the right place at the right time - wrong place at the right time or wrong time in the right place is not enough :)

I just thougt that it would be useful for others - but after a few days thanking and praising comments started to appear under my post, feature requests came and then new pull requests and issues appeared under the github project. I was super amazed. A friend told me that I should put a paypal link at the top of my homepage - and I did. And donations started to come. Right now the amount of donations reached the price of the dev license I had to buy to raise trust in the app - Thank you!

You requested a secured app, explicitly selectable players - I was against the idea first but you convinced me, automatically starting players, bugfixes, features that couldn't be added or have to be inspected, you sent issues and pull requests implementing the requested features, you are super!

Thank you, beautiful people.

Comment on Shockwaves of a quickly written app