Blog

A first look at ROS 2 applications written in asynchronous Rust (Slides)

In July 2025, we presented our paper about real-time properties of ROS 2 applications written in asynchronous Rust at the ECRTS conference in Brussels, Belgium. Here are the slides of our presentation.

Nix & NixOS workshop

Podklady z mého Nix & NixOS workshopu na InstallFestu 2024.

Julia: Počítejte svobodně a rychle

Below are the materials from my today’s Installfest talk.

Practical Nix

Below are notes for my Nix workshop at Installfest.

Introduction to Julia

Transcript of my seminar about Julia language.

git-sarah: Edit files locally, compile and test remotely

Recently, I worked on a visual object tracker implemented in C++. The project has several compile configurations and a time-consuming test suite, some parts of which need a GPU not present in my laptop. Because many parts of the code depend heavily on compile configuration, changing them requires recompilation and ideally also retesting of all configurations to make sure that everything works correctly. Since my development laptop not only lacks the GPU needed for testing but also has only four cores, which makes the compilation unnecessarily slow, I looked for an easy way to compile and test the code being edited on a powerful remote server.

Poor man’s function_graph trace for C programs

When studying Linux kernel sources, it’s often helpful to use ftrace’s function_graph tracer, which traces function entry and exit points and clearly shows how functions call each other.

Sometimes, it is useful to get such a trace from other code than the Linux kernel. In case of C++ this is pretty easy, but for plain C, it is trickier. I came up with the following to print nice traces. It uses GCC cleanup variable attribute to register a function exit callback.

Installfest: Emacs Org mode aneb organizujte svůj život v ASCII

„Slidy“ z mého workshopu na Installfestu. K dispozici i ve formě org-mode zdrojáku, jen je potřeba změnit příponu z .txt na .org.

KiCad Eeschema automation

I started using KiCad (version 4.0.1) for electronic design. It seems to be a great tool, but working with big connectors in schema editor is tedious. All connections have to be done manually and thus the process is error prone. Some way of automating the process would help. KiCad comes with scripting support, but unfortunately only in pcbnew. Eeschema seems not to have any support for automation yet. Hopefully, one can use xdotool under Linux to automate some boring tasks.

Installfest: Úvod do Emacsu

Osnova, podle které jsem jel na dnešním workshopu na Installfestu.

InstallFest 2014: Automatizace bootování s novabootem

Stejně jako vloni jsem měl i letos přednášku na InstallFestu. Tentokrát to bylo o nástroji novaboot, který už přes dva roky vyvíjím a používám jej k mnoha zajímavým věcem. Některé z nich jsem během přednášky zmínil a najdete je ve slidech.

Při přednášce se dostavil klasický "demo efekt", tedy že to, co ještě ráno fungovalo, fungovat přestalo. Nemohl za to novaboot, ale pochybná implementace technologie Intel AMT na mém počítači. Naštěstí jsem měl ještě jeden počítač, se kterým novaboot fungoval, ale bohužel jsem na něj neměl otočenou web kameru, takže se návštěvníci museli spokojit jen s výstupem na mém terminálu.

On generating Linux applications from Simulink

I use Matlab/Simulink R2012b under Linux to model dynamic systems. In order to perform hardware-in-the-loop testing, I want to run my models in real-time on Linux with rt_preempt patch. Running a Simulink model in real-time can be achieved by converting the model to the C code, compiling it and running the resulting application. Simulink supports this by means of Simulink Coder. Producing a Linux application with Simulink Coder is not as straightforward as one might think, though.

InstallFest 2013: Jak na Linux v robotech

Na letošním InstallFestu jsem měl přednášku o použití Linuxu v robotech. Snažil jsem se ukázat, jak lze z Linuxu běžícím na nějaké "embedded" desce ovládat hardware k ní připojený. Všechny praktické ukázky, které jsem měl připravené, se povedly, až na tu poslední – robot v akci. Ale tu jsem nahradil videem z finále Eurobotu 2010.

Slidy k přednášce.

Update: Video záznam z přednášky je k dispozici na stránkách InstallFestu.

Ikiwiki with Shibboleth authentication

I have an ikiwiki-based website that is used for a university course. Every student has a page where she is supposed to provide information about a project being worked on. For this I want to authenticate students so that they can only edit their page. So far the authentication was implemented with unixauth plugin and the server used PAM modules to authenticate against LDAP server. This worked sufficiently well, however, this method was deprecated by our university IT. Instead, they want all web applications to use Shibboleth technology. I was surprised how easy it is to make ikiwiki work with Shibboleth.

OS noise paper

Last week I presented a paper at 14th Real-Time Linux Workshop. The topic was the comparison of operating system noise between Linux and NOVA microkernel. It was a joint work of myself and Stefan Wächtler from TU Dresden. If you are interested I published the paper as well as all source data here.

ORTE 0.3.3 released

This is mostly a bugfix release. The last version was released almost four years ago so it is definitely time for a new release. One big change since the last release is that ORTE is no longer distributed as a part of OCERA project. We created a new project at sourceforge specifically for ORTE. With this change we also moved the source repository from CVS to Git and created a new homepage.

How to reset a PC that has no reset button

At our university, we bought a PC that was intended for testing during development of low-level components in operating systems (drivers, kernels, etc.). In such tests it is common that the machine gets stuck because of various bugs and it is necessary to perform hard reset to recover from such situations. To our surprise the machine we ordered had neither a reset button on the case nor any connector on the motherboard where the button could be connected. It was a Dell machine.

"Compile on save" in Emacs

When one writes programs or TeX documents, it is quite useful to compile the program/document quite often to be sure that there are no syntactical or other errors. I use Emacs and have the F9 key set to invoke the compile command which, by default, calls make and allows easy navigation through the detected errors, if there are some. One disadvantage of this command is that when there is unsaved buffer, it asks whether to save the modified file. This means that one have to either save the file by C-x C-s and then press F9 or press directly F9 and confirm the saving of the file by y. Neither variant is ideal because I do not like pressing unnecessary keys. (Yes, I know that I should switch to vim, but that’s another story.)

Using Ikiwiki with Gitolite

Recently I installed Gitolite on our server and wanted it to manage the repositories for Ikiwiki-based wikis. It turned out that this is not as trivial task as one might expect so here is how I did it.

First, let’s look at how ikiwiki uses the git repositories. Every wiki needs two git repositories at the server. One of them is a bare repository and pushing changes to this repository updates the wiki. The other repository has a work tree and is used to “compile” the wiki to HTML and by Ikiwiki’s CGI wrapper to edit the wiki via web interface. Whenever somebody pushes to the bare repository, git invokes post-update hook, whose goal is to update the second repository and to compile the wiki to HTML.

Sorting LaTeX acronyms in Emacs

Recently I needed to put a list of acronyms to a LaTeX document. There is great acronym package for this purpose. With this package one can define the acronyms and refer to them from the text. The package ensures that the meaning of an acronym appears together with its first use. The package can also generate the list of acronyms however the list is not automatically sorted. When the list becomes long, a big amount of mental capacity is needed find the position where to add a new acronym.