Linux

HDF5 with LZ4 filter (by Dectris)

git clone https://github.com/osti/HDF5Plugin.git make && ls -l libh5zlz4.so.0.2 export HDF5_PLUGIN_PATH=`pwd`/

Colour Calibration using Spyder4

With help from Gillaume Dargaud. Please disable screen saver and power management, since this takes some while. I have a Datacolor SpyderCAPTURE PRO.

calibrate: time argyll-dispcal -v -q h dispcal.m46oo # press 7; takes about 180 minutes time argyll-targen -v -d3 -f250 dispcal.m46oo # takes 2 seconds time argyll-dispread -v -y l -k dispcal.m46oo.cal dispcal.m46oo # takes about 14 minutes time argyll-colprof -v -A "Dell" -M "Laptop Screen" -D `date '+%Y-%m-%d'` -q h -a s dispcal.m46oo # takes less than half a minute xcalib dispcal.m46oo.icc # use the profile xcalib -clear # use no profile ~/.config/autostart/xcalib.desktop [Desktop Entry] Encoding=UTF-8 Version=0.9.4 Type=Application Name=xcalib Comment=load icc Exec=xcalib ~/dispcal.m46oo.icc OnlyShowIn=XFCE; StartupNotify=false Terminal=false Hidden=false

Set screen brightness via /sys

Screen brightness can be accessed (r/w) via /sys; in combination with the colour profile (see above), we can thus select the proper profile / brightness. Taken from Gentoo Wiki.

cat >> /sys/class/backlight/acpi_video0/brightness # on Dell M4600: 0 (dark, not off) to 15

images to mp4 thanks to ffmpeg

Since mplayer's mencoder is how outdates, this is how I can convert still images to an HTML 5 compatible video:

ffmpeg -f image2 -i $base_%04d.tif -vcodec libvpx -b:v 2048k $output.webm ffmpeg -f image2 -i $base_%04d.tif -vcodec libx264 -preset slower -b:v 2048k $output.mp4

And this piece of HTML works, at least in Gentoo/Firefox 38.7:

<video autoplay> <source src="$output.webm" type="video/webm"> <source src="$output.mp4" type="video/mp4" > </video>

Gentoo

Repo via VPN

/etc/portage/repos.conf/gentoo.conf [DEFAULT] main-repo = gentoo [gentoo] location = /usr/portage sync-type = rsync sync-uri = rsync://192.168.250.1/gentoo-portage auto-sync = yes

OpenVPN config

/etc/openvpn/openvpn.conf client dev tun proto udp remote k-raum.org 1194 comp-lzo resolv-retry 30 nobind persist-key persist-tun ca ca.crt cert $client.crt key $client.key tls-auth ta.key 1 cipher AES-256-CBC verb 4

vimperator config

~/.vimperatorrc set autocomplete=false set gui=nonavigation map <silent> <F10> :js toggle_bottombar()<CR> :js << EOF function toggle_bottombar() { var bb = document.getElementById('liberator-bottombar'); if (!bb) return; bb.style.height = (bb.style.height == '') ? '0px' : ''; bb.style.overflow = (bb.style.height == '') ? '' : 'hidden'; } EOF

avr-ld complaining about ldscripts/avr*.xn

ln -s /usr/lib/binutils/avr/2.25.1/ldscripts /usr/avr/lib/ldscripts

C, make, vim, git

git describe from make

Taken from stackoverflow: How can I […] print out […] Git version[…]?

Makefile GIT := -DGIT_VERSION=\"$(shell git describe --abbrev=6 --dirty --always --tags)\" binary: source.c source.h gcc -o $@ $< $(GIT) source.h #ifndef GIT_VERSION #define GIT_VERSION "unknown" #endif

filename whitelisting via LD_PRELOAD

preload own open() function from library to whitelist filenames; with help from rafalcieslak.

chk_open.c #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <ctype.h> #include <dlfcn.h> typedef int (*org_open_f_type)(const char* pathname, int flags); int open(const char* pathname, int flags) { int fd = -1; int i, len; if (strstr(pathname, "..") != NULL) goto forbidden; len = strlen(pathname); for (i=0; i<len; i++) { unsigned char c = pathname[i]; int ok = 0; if (isalnum(c)) ok++; if (c == '.') ok++; if (ok == 0) goto forbidden; } org_open_f_type org_open; org_open = (org_open_f_type) dlsym(RTLD_NEXT, "open"); fd = org_open(pathname, flags); cleanup: return fd; forbidden: fprintf(stderr, "\nchk_open(%s, %d) forbidden: invalid character\n", pathname, flags); errno = EACCES; goto cleanup; } gcc -o chk_open chk_open.c -Wall -Wextra -O2 -shared -fPIC -ldl LD_PRELOAD=chk_open.so less /etc/issue

LOG10 macro

Using gcc's typeof and Statement Expressions to log10 with -1.0 for non-positive arguments.

#define LOG10(val) ({ \ typeof(val) _val = (val); \ typeof(val) _log = -1; \ if (val>0) _log = log10(_val); \ _log; })

public keys

public PGP key

mo@mo-online.org -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v2 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 AKCNqpz1iB5Kq3M/54ou/zbyD33yJg== =19o0 -----END PGP PUBLIC KEY BLOCK-----

public ssh keys

schleppmo ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvzt2usqSFVf2huQiZEVEis3tTPSbUIgE6x OVZ2kTA9eCClZpVn1rrwyKaz9ZVWGfIGvqpS4XB1fSZp/slQtaiyrcB/O/UM1L 6RlVO8dnBTZZpcireFDMmLOJkjfPwlzwkceU9sWPR6DCnEdYiUMA/qBGzsNvuQ cPDZIMlrv65V6AdVprD1+0OL2VN2GI8UF82n54UHKX/XXeHZ3pBhJaGrB67dqQ vyLBjwOwNC1uY6QoR+ZtUYrvIt5110BxSgGNDk1A6DUGqpkgSdOB7zLvcU31bL Lmif4Q+sowhEBDw8vjWCUbwVkQdhJN6ZFrXz7BqAqjYST4DSMhn07C/RO7bQ== IRP ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv9VyweQTanJ1KTHPQUrMpErqEe7jKhC5Lf A/kMkhOb5iF0jIKzBEg3aHzEtb23bbu97kUonM6P7dbhrlUAZewLa3jZapI5zl EDmEoEHqgWkybOlJHXlV46Mxo5aYlBIcDU6DqFSXCMAJxIrcrC51myNCaxI/Gi pkq77SqlQD3fUUjbXj1IgoF4+s/kw8wvmFTTJOq7S6v4Y1EaUsqOleJURsZWQ3 HZMEQCDjpPVYQ5N6Pbci3e4/siXagC3qdBtfub98cdYZ4gsMHevroU9hF3Ynh4 Y9Be5nxs+C86MkxCf5C+gHsQCE9GUhg8lZk/zKrcBpOU6XnzLq0va8X/b1gQ== banane ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1zYk6TwWrjwQ4pRwtyfq411nYftlfZ+ LhfpWUAPoeeSky2M72w0CJpvLvzkaQ4P2Q6fI9yTVyexP2Rxa9xuS58ne+FWoM dz9fY3aH+bgLuZ9K+qQm7FyrtG71iDOggEH/tvVNjdJ081vxvVKq2ttG8hgv8J fcuz05N1/YJE/J8RvkxwSoxQ0S1rU/HSyiAnR+FtbUND+fp5BYV1wTL9W43lae nXeR4/m0aI5SlMQDjpqzzzRdpggSh5XQbSeR96hlVNzYfnRenD4LT7GMYoonj+ 69MwOc8Xp89dZkDJUPaHKrJaZdDU2P64BuuxGFT1uSmGZxJ7JV0l3c5M1xtc7p m4600 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDV+MIKf47ouo6tVPUpiPfVT863UjvdQZ XQ3BiCipq9VWNlARUe33xHXF4AvjdALk5E9GU9ZUXXfdfvsONr76pfoJIoA/Ar meVVbjkDSLbvsDrjvtZBkf8tty+b+3zHe6lLCS7rHOBggRr0E2NreOOJ05h+hF V0JDHhGxTfzym6WslmH0WsTEoM0r6QV0KWGs9D/wuYMUc0r8ujdhkTYhoMh6Ld KBtEvTtXvRatcphg4QcTj65Pukf2UitbTOF+qu8wmB/oIHZgMGnI9F/wHk6s/T XaIYp3p3/5Q8PPjcvlIewbMFTaCLLJWVPYhqfvkjLSmBFCKLvPA4bJ+/WPCUUk FvK8x+WkVZM31G9cbZrmuGlmk1ZBaynguIcR0y9xtutH978SAciUL3LIxnd1Xp IvBYmhOdVdALarZsjTbBUE49MI7jUaqMwP/R4ALvoLHUCvlgl9lNTbL4JZp2w9 nHRr4QGYAoH3aJyoqsBCUbmdUqJQNcug+Zoi70aOJq+7RRXWfJs1SO8Tf1VB29 B3hkMFd3qXFZhO/zNikhDXbslZDVNYzjbNBy6GmpJGvlFwjhTi/kiIdXvpZb2h kbzmJNRVnl56+diwqxdCPM6d5HDLTUDBM2nO/cna3uC8Q2wEMei/YqpZjHcqUk 8i5CmY7IZEhd7bIj28I89IvkoDE29lOw==