Set up an IPv6 only home network

Almost all ISPs today offer both IPv4 and IPv6. The same applies to network hardware for home use. Modern devices can easily communicate via IPv4 and IPv6 simultaneously using so-called dual-stack technology. If the server supports both protocols, the end device decides which protocol is used. Of course, this can only work if the software of the entire infrastructure is designed twice: once for IPv4 and once for IPv6. The dual implementation of the network software also has disadvantages. To begin with, with the complexity of the software increases the attack surface for cyberattacks. Also the likelihood of misconfigurations raises, which can make the attackers' work easier. Last but not least, all firewall rules must be defined for both protocols, which is prone to errors.

The long way of the German sharp s "ẞ" into Linux

The European Keyboard EurKEY is a keyboard layout based on the American keyboard layout. It is very popular with translators and programmers who appreciate the easy access to special characters. It also offers convenient access to many European letters and accents. In 2017 a long awaited new letter joined the German alphabet: the uppercase sharp S: ß.

Since then, the letter has been added to many keyboard layouts, including the EurKEY layout, which has been mentioned several times in this blog. In 2021, an update was accepted in the software repository xkbdesc/xkeyboard-config, which removes the sharp S again, arguing that "the uppercase Ssharp ẞ is nearly useless". This blog post highlights this controversy.

How to shallow clone a Cow

Rust's “copy on write” Cow abstraction is very useful to avoid costly cloning when dealing with vectors or strings. A Cow allows you to defer allocating new memory until it becomes inevitable. Consider the following example:

use std::borrow::Cow;
fn do_something_or_nothing(v: Cow<str>) -> Cow<str> {
    if v.len() > 3 {
        let s = "Hello ".to_string() + &*v;
        Cow::Owned(s)
    } else {
        v
    }
}