In the previous post, I’ve had a look at how the voice calls codec and other parameters are exchanged and negotiated between two XMPP clients such as the Conversations messenger running on Android. As I operate my own XMPP server, I can trace right in the middle and while there is end to end encryption for message content and voice calls, most parts of the signaling message for a voice call setup are going through the server in plain text. I use the Prosody XMPP server and there are several ways to trace there:
Continue reading XMPP Voice Call Setup Tracing – OTT Voice Observations – Part 4Which Voice Codec? OTT Voice Observations – Part 3

In part 1 and 2 on this topic, I’ve been looking at how over the top voice services such as the Signal messenger or the Conversations messenger packetize and send data over the cellular network and the resulting graphs look pretty neat. But which codec is actually used for the voice channel? I’ve been looking a bit into the source code of both messengers and both use WebRTC for the voice channel. But which voice codec is actually negotiated? The Internet ‘knows’ that Opus is used, but is that really so? I decided to have a closer look.
Continue reading Which Voice Codec? OTT Voice Observations – Part 3Ubuntu 26.04 – An Encrypted Separate Home Partition

I’m still running on Ubuntu 22.04 and it’s time to upgrade to something more recent after the release of Ubuntu 26.04 earlier this year. I’ve decided to start with a clean installation and make a number of improvements to my setup. So far, I’m using an ext4 system partition and a separate ext4 LUKS encrypted partition for the home directory. The benefit of this is that I can use Clonezilla to quickly back-up or copy the relatively small boot and system partitions and restore them on another SSD. This gives me a working system in a few minutes that is configured exactly as I want it, and I can then restore the home partition that holds more than 1.5 TB of data at my leisure. The problem: The system partition is not encrypted, which I have compensated so far by using the SSD hardware encryption with a password on power-on. This works for me, but an encrypted system partition would be even better. The challenge: The Ubuntu desktop installer does not have an option to create a system with separate system and home partitions and encrypt them both. A pity. But with the experience gained by experimenting with installing, backing-up and restoring physical SSDs to virtual machines and vice versa over the past years, I have found an elegant solution:
Continue reading Ubuntu 26.04 – An Encrypted Separate Home PartitionOnlyOffice Online: Adding Fonts
These days, I use my server based instance of OnlyOffice in combination with Nextcloud more often than the locally installed LibreOffice. The main reason is that I edit many documents on more than one device, so having them on my own server and to be able to edit them from anywhere is a game changer. Also, OnlyOffice’s Word, Excel and Powerpoint compatibility is significantly better than that of LibreOffice to the point that it is almost perfect. One little thing that was missing so far, however, was the use of extra fonts that are not included in the package. Unfortunately, that is sometimes necessary when I get documents from other people that are not using standard and free fonts. On my notebook, adding fonts is simple: Just copy them to a certain directory and it’s done. Turns out that the same approach also works very nicely for a dockerized OnlyOffice on the server.
Continue reading OnlyOffice Online: Adding FontsVisualizing Voice Packetization – OTT Voice Observations – Part 2

In part 1 on this topic, I’ve done a first high level comparison of how the Signal messenger app and the Conversations messenger app use WebRTC for real time voice calling. In that post, I showed that Signal packetizes the voice channel in 60 ms chunks while Conversations uses a packetization of 20 ms. The two graphs in this post show how this can be seen with the help of a Wireshark trace that I took on my Wi-Fi router at home.
Continue reading Visualizing Voice Packetization – OTT Voice Observations – Part 2Signal vs. Conversations – OTT Voice Observations – Part 1

In my simple universe, I always thought that all apps using Android’s built-in WebRTC stack for voice and video calls would pretty much use the same parameters and hence, the encrypted data stream would pretty much look the same. It turns out, however, that this is not at all the case. This discovery made me go off on quite a bit of a tangent, and I decided to have a look at a number of different related things, including cellular network handover behavior and other things. But let’s start at the beginning, the use of WebRTC by different ‘Over the Top’ voice applications. Personally, I use two messengers: Signal and Conversation and it turns out they use WebRTC quite differently!
Continue reading Signal vs. Conversations – OTT Voice Observations – Part 1Disconnecting Mouse Moves

Here’s yet another ‘mouse’ story, these devices seem to be much more tricky to handle than they look, at least for me. So here’s the story: For the past few years, I’ve had this very strange behavior that when traveling, my mouse would work better on some surfaces than others. Particularly, when I would lift the mouse, move it and then put it down again, it would, on some surfaces, take a few seconds before it was working again. For several years I blamed this on the reflectance of the surface, as this behavior seemed to mostly happened on such surfaces. But over the years doubt has crept in if that was the real reason for this.
Continue reading Disconnecting Mouse MovesMy AI Learning Journey – Part 12 – Kagi’s Privacy Minded LLM Search Assistant

In a previous post I’ve taken a look at how I can combine a private LLM with Internet search. My setup: An Open WebUI instance hosted at home together with Ollama, the Llama3 LLM and Brave as a search front-end. While this works well for some kinds of searches and not so well for others, I was wondering if there are also other options for private search with LLM capabilities that require less self hosting. Here’s an interesting option I came across: Kagi.
Continue reading My AI Learning Journey – Part 12 – Kagi’s Privacy Minded LLM Search AssistantWorking on the Train Like its 1988!
When I use public transportation to commute to work today or when I take longer trips with the train, every second person on the train seems to have a notebook open in front of them, while the other half interacts with their smartphone or tablet. Its 2026 after all. I’d like to think of myself as a pioneer of doing this because I used my notebook with a mobile Internet connection on a train a decade before it became popular. But actually, I’m a later adopter…
Have a look at the first 5 minutes of this Youtube video with a recording of a Beyond 2000 episode broadcast in 1988 about working and communicating on a train 40 years ago. Truly amazing then and truly amazing how far we have come since then.
My AI Learning Journey – Part 11 – AI Assisted Coding – Good or Bad?
In the previous post I’ve had a look at how I can integrate an LLM into my programming environment and use a prompt to produce and modify code, to find bugs and security issues, and to discuss options and fix issues. I find the result stunning. So is AI assisted coding a good or a bad thing? Maybe this is the wrong question to ask, it’s like wondering if programming in Python is a good or bad thing compared to programming in assembly language. Let’s dwell on this a bit.
Continue reading My AI Learning Journey – Part 11 – AI Assisted Coding – Good or Bad?