Technical Background

Linux Systems Programming

I grew up with the good (?) old commercial Unixen, having fun … err, specializing … at the bottom of user space. The fun continued when Linux took over and consequently improved on Unix concepts (see for example signalfd, eventfd, timerfd, and epoll).

  • Realtime

  • Network programming

  • Interprocess communication

  • Event loop programming (best done in Python using lovely asyncio)

  • Multithreading

  • Memory management

Embedded Linux

No wonder I got torn into the Embedded space. /dev/i2c-*, /dev/spi.*, what a fun it was to speak with devices from ordinary programs. Of course, “Embedded” is more - low resources for example, but that’s another story.

  • I2C (in-kernel and userspace)

  • SPI (in-kernel and userspace)

  • GPIO (in-kernel and userspace)

  • Serial interfaces (RS232, RS485)

  • USB (host and device, mit libusb and GadgetFS)

  • Yocto

Linux Kernel

Naturally, out of curiosity and a couple of customer projects, I got into kernel programming. The kernel is a different beast, and implementing user space is rather interesting.

Programming Languages

Over the years, many programming languages happened. C++ is my mother tongue, and I still enjoy using it. Uncomfortable with its complexity and teachability, I haven’t unlearned it like Perl - C is much more to the point though. Python is my all-time favorite. Shell is fun too - it is teachable and weird enough to be much fun (and it reflects in a rather creative way the Unix concepts that I like so much).

Software Development At Large

In my non-freelance life, I’ve been in roles called “architect”. I have also been in roles like “team lead”, but that’s not what I really am [1] - I’m a programmer with a feel for the larger view.

  • Object oriented programming

  • Unit Testing and Test Driven Development (out of conviction)

  • Build tools and packaging

Footnotes