Josh Kunz

Systems researcher at the University of Utah.

Read this first

Selective “force” re-sync with syncthing

To synchronize files from one of my servers to my local machine I use syncthing with the server’s folder in “Send Only” mode. Usually this works flawlessly. As files are added to the directory, syncthing copies them to my local machine without a hitch. However, sometimes it doesn’t work, and the remote files will just never show up. In this case syncthing provides the “Override Changes” button, but this is usually not what I want to do. I don’t want to re-sync all of the files from master to my local machine, I just want to sync a single file, or folders worth of files.

In this case there’s a neat little trick you can do, which is obvious in hindsight but it took me a while to think of it: just update the mtimes. SSH onto the server and run something like:

$ find /path/to/folder/to/force/sync -type f -print0 | xargs -0 -n1 touch

This will go through every file in the folder we want

Continue reading →

Bit-field Packing in GCC and Clang

Recently for a school assignment we were given a C bit-field and tasked with packing a similar struct into the bit-field without the help of the compiler. All struct and bit-field manipulations had be be done manually using only the bytes of the structures. Amazingly, I didn’t even know what a bit-field was before starting this assignment, so I’ll give a little background before getting into the nitty-gritty details.

 What is a bit-field?

So, almost anyone familiar with C knows that it allows you to pack a group of variables into a new type called a ‘struct’. They look like this in C code:

struct mystruct {
    int a;
    short b;
    unsigned int c;

The C standard specifies that each platform will define a specific set of ‘alignments’ that will specify how structures like the one above are actually represented in memory. For example, the linux 32 bit standard specifies that chars

Continue reading →