Default for most computers I use is still Bash. On some I installed Zsh manually. Here’s what I do:
❯ apt install zsh
# menu system, select (2) (default .zshrc)
❯ curl -sfL git.io/antibody | sh -s - -b ~/bin
❯ echo "romkatv/powerlevel10k" > ~/.zsh_plugins.txt
❯ ~/bin/antibody bundle < ~/.zsh_plugins.txt > ~/.zsh_plugins.sh
❯ cat >>.zshrc <<_EOF_
typeset -U path
for i in ~/bin ~/dart-sdk/bin ; do
if [[ -d "$i" ]] ; then
# not needed, but if the p10k configurator does not start,
# then run p10k manually
# In either case: configure p10k to your liking
# or copy ~/.p10k.sh from another machine
# Change default shell to zsh
chsh -s /bin/zsh
I’d love to say that I automated this with an Ansible role, but since I change/configure zsh less than once a year, it really makes no sense to maintain an Ansible script just for this.
Since part of making the Colorlight card work with Dart was to be able to send Layer 2 Ethernet packets, I created a small Dart package for that: l2ethernet.
There’s plenty improvements I could do, from being able to listen to packets to making sure the shared library is being found, but for now it works for the purpose of sending out packets at over 50fps.
I wish the protocol would be officially documented for the Colorlight 5A 75 as it’s an awesome piece of affordable technology to drive those LED panels (see here as an example). I rather like using Ethernet instead of some odd adapter card which is tied to a specific hardware (RPi in above case). Ethernet on the other hand is perfect: it’s fast (Gigabit can transfer a 256×256 24 bit/pixel frame in 1.6µs or over 600fps, cables can be 100m long, you can use (L2) switches to distribute the traffic and you can create traffic with any software which can send Ethernet frames.
To configure the Colorlight 5A 75B, you need software named LEDVISION. It’s needed to configure the panels, their wiring and some other items. Once done, it’s no longer required.
A limitation I did not expect is that LEDVISION does require a Ethernet port to work. It might be possible to send actual frames via WiFi as long as the receiver card is connected to a bridged Gigabit Ethernet port, but that remains to be seen1.
Some frame decoding is visible in the source code of FPP which took the work from the original reverse engineering here. So here the frames I found (Colorlight 5A 75B, version 5A 10.16).
1 When sending frames via WiFi, the result is having…problems. Think of analog TV having a bad reception: you can see what’s going on, but frames are missing, colors are off for a frame, and the first line of the graphics is not always on the first line.
As a reminder: this is not a baking blog. Now that this is out of the way, I was looking for non-cookies for a change, and cupcakes would fit the bill. I checked several recipes and settle to use this. Here the result:
I recommend to read the well made web page above, but the summary of the recipe:
150 g plain / all purpose flour
1 1/4 tsp baking powder
1/8 tsp salt
2 large eggs at room temp
150 g caster / superfine sugar
60g unsalted butter
125 ml milk
2 tsp vanilla extract
1 1/2 tsp vegetable or canola oil
The only change I did was to replace the superfine sugar with the fine brown sugar.
Time was spot on 22 minutes. The result was 11 small cupcakes which probably should have been 9 slightly larger ones.
Since I had dried coconut left over (see here), I was searching for a recipe for cookies with coconuts. There’s plenty, so I picked one and it worked really well. The biggest problem was converting cups into something I can use, so here the metric translation of that recipe:
150g flour (= 1 1/4 c)
1/2 tsp baking soda
1/4 tsp salt
110g butter (= 1/2 c)
200g sugar (brown only as I had no white sugar) (= 1 c in total)
1/2 tsp vanilla extract
120g coconut shredding (= 1 1/3 c)
Don’t let me rant about the use of tsp. That is pure insanity. Luckily those don’t need to be exact anyway.
Preheat oven to 175°C
In one bowl mix flour, baking soda and salt
In a larger bowl add butter and sugar and mix well
Add egg and vanilla
Add flour little by little (sieving it in)
Mix in the coconut shreddings
Form small balls (about 2-3cm diameter) and put them on baking paper
Bake about 12-14min. Move to wire rack to cool.
The result was as good as I expected. Crispy outside, a bit chewy inside. Perfect on the first try!
My whole life I have mostly cereals for breakfast: cornflakes and Müsli. There are so many variations of the latter, that it never gets boring: with dried fruits, with chocolate or nuts, crunchy or not, just add with milk or like Bircher keep it soaking for some hours…
But this is all rolled oats and until recently I didn’t even know there’s non-rolled oats, namely “steel-cut oats”. I followed this recipe with 60g (2oz for the metrically challenged) of oats and it reminded me a lot of Griessbrei which I had when I was a kid. Ah, good old memories! It was surprisingly nice. Not a big fan of the 25min cooking time though, but it’s a nice variation which is especially nice in cold winter days.
When it comes to in-ear headphones, the neckband format is by far my personal favorite. While I have several Bluetooth headphones, my most liked in-ear one is the Fiio FH3: comfortable, great sound. But it’s cabled, and I do not like cables. So I got a Shanling MW200 for my FH3. And the FH3 still sound great!
But the MW200 blinks in blue which means it’s using the SBC audio codec when connecting to my Linux PC! Unacceptable!
It turns out that on an older Ubuntu version (20.04), the Bluetooth Codecs only support SBC. Not a big problem: PulseAudio 1.15 supports better codecs like aptX, AAC and LDAC. And it’s part of Ubuntu 21.10.
Time to upgrade from 20.04 to 21.10 then!
After doing the usual
❯ apt update
❯ apt upgrade
I still only see SBC used: the MW200 blinks blue when it’s using it. If it was using another codec, it would blink in another color (e.g. green=LDAC or purple=aptX).