Yuri Schaeffer
Freelance software development, Linux, C, Python, embedded.
Yuri @ sigHUP!
I'll help your company with architecture and development of your in house software. Contributing features in Open Source software you need and use. Or swiftly reinforce your existing team for a limited period of time. My specialties are performance, low-level networking, Linux, kernel, and embedded development. Among all the programming languages I enjoy using C and Python the most.
Platform & Architecture
- Linux
My main OS since 2004. I love to life in the terminal.
- FreeRTOS
Cool OS with support for parallelism and multitasking.
- Yocto (embedded)
Based on Debian, popular in embedded applications.
- x86/amd64
The bread and butter of my computational life.
- ARM BIG.little
Runs a full fledged OS on the big cores, another real time OS on the little core.
- RPI
Professional as well as private good SBC's for embedded work.
- Atmel
Arduinos are excellent for building interfaces for hardware.
- ESP8266/ESP32
Arduinos on steroids, with WIFI and Bluetooth support.
Language & Libraries
- C
Most of my professional development is done in C. C is great for when performance matters.
- Python
I love the development speed and flexibility of Python. My personal language of choice.
- Shell/Bash
Automate all the things!
- OpenCV
Great computer vision library, on Python and C.
- Numpy
I tend to do a lot of linear algebra. Numpy is Pythons killer-feature.
- OpenGL / GLSL
I find it very exiting to be able to draw millions of objects while still having a smooth user experience.
- Rust
I do like Rusts memory and ownership model. I wish I can do more of it professionally.
- C++
Having worked on C++ code bases and have a solid C experience, I grasp it relatively well. I wouldn't mind expanding that experience.
- GTK+
Clean looking and modern interface that integrate well with the desktop environment.
- Pthreads
It is 2022, I want to use ALL OF THE CORES!
Tools & Processes
- Wireshark / TCPdump
Invaluable tools for debugging the network layer.
- Socat
Awesome Swiss Army knife network engineering.
- Strace
Great for debugging and reverse engineering.
- Git
Best version control I have ever used. Even when working alone, everything should be comitted to Git!
- GDB
Powerful debugger for C. I like it a lot.
- Valgrind / Hellgrind
Run time memory and concurrency checks. It tend to involve them as early as possible.
- GCC
My default compiler for C.
- Asan / Tsan / UBsan
Great GCC extensions for preemptively finding bugs in code.
- Nmap
Great tool for discovering network layout and identifying devices.
- 3D Printing / Modelling
A 3D printer is a great tool for creative problem solvers.
- Coverity
Static code analyser. Free to use for Open Source projects.
Protocols & Algorithms
- DNS / DNSSEC
Having worked on DNSSEC server software for about 9 years I picked up a fair bit of details, intrinsics and corner cases. DNS is build on corner cases. ;)
- SLAM
I've researched Simultaneous Localisation and Mapping algorithms for about 2 years.
- IP / TCP / UDP
I have a good understanding which bits flow over the wire exactly.
- RPMSG
Protocol for exchanging messages between parallel running Operating Systems on the same CPU using shared memory and interrupts.
- MQTT
Publish-Subscribe platform for small messages. Ideal for IoT applications.
System & Administration
- Apache
Small scale hosting for friends am family.
- Postfix
Hosting own email infrastructure since 1999.
- Dovecot
Hosting own email infrastructure since 1999.
- SystemD
Juggling and debugging initscripts in the old times wasn't all that great.
- NSD
NSD was written to serve the root zone. Its great performance and low memory footprint make it ideal for small domestic zones as well.
- Unbound
Nlnet Labs' recursive nameserver.
- OpenDNSSEC
DNSSEC cryptographic signing software. I've worked on OpenDNSSEC almost daily for almost 9 years.
Open Source & Contributions
- IronOS Enhancement (TS100 Firmware)
Popular open firmware for soldering irons. I contributed a standby timer and indicator.
- CloudCompare Enhancement
Contributed smooth camera path transitions.
- Dig Crash
Found, patched, and contributed crash in Dig on some inputs.
- Wireshark Dissector
EDNS clients subnet dissector.
- CNCD
Scratch build CNC controller software safe for the Internet.
- ESP8266 Exploits
Found several security vulnerabilities in the network stack for these popular IoT chips.
Projects, for fun and for profit.
These are some of the projects I took on in the past years. It is just a small sample. But the take-away should be, even though at heart I'm a software guy, I don't shy away when things get physical!
icBind: I Can't Believe It's Not DNS

With icBIND I took on the challenge to develop a limited but fully working authoritative DNS server running on a ESP8266 chip. It has no permanent storage so it will perform an AXFR of its zone on boot. The chip has insufficient memory to parse the zone (for dname decompression) and simultainiously store it. It will actually to the AXFR twice: First do an inplace parse and build the decompression tables, only then decompress and store the data.
Linux Kernel Debugging

A client was using an AI development board running an embedded Linux. They wanted to connect an advanced thermal camera with global shutter to its MIPI port. I was tasked with figuring out why it didn't work and then to make it work. I had whip out my oscilloscope and get elbow deep in Linux kernel code. One of my deliverables was a custom V4L2 kernel driver.
Smooth Camera Movement

At work we produced and processed large 3D point clouds. We used our favourite Open Source tool CloudCompare for recording cool fly-throughs for clients. The camera movement system was very linear and therefore quite choppy. I contributed a patch to make the camera path follow a smooth cubic polynomial.
Rapid Prototyping

At a previous job I was in the lead for all things software. Our main focus was building physical prototypes as proof of concepts for new technologies or applications thereof. Being on a shoe-string budget and on short deadlines caused me to do a lot of rapid prototyping and creative problem solving. This includes CAD modelling, 3D printing, soldering, welding and electronics.
Counting sheets of toilet paper

Sensors from discarded optical computer mice turn out to be relatively easy to interface with. By reusing the optics and connecting the chip to a microcontroller I've build a toilet paper roll holder that would keep track of and display the number of used sheets per 'session', totals, and all-time high. A fun learning project for which most photos are sadly lost due time.
CNCD: CNC Daemon safe for the Internet

It is very convenient to being able to administer and monitor CNC devices such as CNC routers or 3D printers remotely. Exposing physical devices that can potentially burn your house down to malicious actors is objectively a bad idea. CNCD is an efficient headless GCODE streamer that supports multiple devices operating simultaneously using Python 3's async capabilities extensively. It relies on the SSH protocol to achieve a level of security good enough for the Internet.
Reverse engineering Drone Transmitter

The HK-T6v2 is a cheap popular transmitter for the hobby drone/RC market. It comes with a buggy windows tool to configure and calibrate the device. I reversed engineered and documented the protocol. Next I made a TUI program so I could configure the device from a Linux environment.
R&D: Computer Vision Algorithm design

I've researched, designed and implemented SLAM algorithms for mobile laser scanners. Combining gigabytes of measurements acquired over a long time while on the move without positioning data or visible markers to a single high resolution 3D model. I'm proud of the quality of the result that steadily kept improving during the project and the stellar performance of the program giving the user a smooth experience.