RSSAmplifier

Blog

blog

Hi, I'm Raphael by day and evilcookie by night. I'm a neurodivergent software developer from germany and write about my computer journey. I like linux, love c and do go for a living. You can find my code on github . Sometimes I visit the cinema , learn things , collect magic numbers , laugh about nerdy jokes or make some music .

evilcookie.deRSS feed ↗81 posts

Latest posts

go toolachain cheat sheet

go toolachain cheat sheet Environment go env : see go environment go mod tidy : add all used libraries to the mod-file and download them go get -u : update and download all dependencies go tool <go repo with main> : run third party go repo (mockery, regctl) Research go doc <package> : Show index of given standard lib package go doc <package> <identifier> : Show only identifier with its docstring…

TLA+ - cheat sheet

TLA+ - cheat sheet TLA+ is a formal specification language to model and proof systems. You basically model your system as state machine and let the model checker find deadlocks by going through each legal state transition. The language was invented by L. Lamport , also famously known for LaTeX and Lamport clocks . Contents Unchanged Sets Special Actions Structs Constraints Invariants Constants…

Flashing OpenThread firmware on Smlight SLZB-07

Flashing OpenThread Firmware on Smlight SLZB-07 Matter / Thread is still experimental and getting started took me some time. I distilled the steps to flash the OpenThread firmware onto the smlight slzb-07 without the online flasher below. Official procedure The official device update manual suggest to use the online flasher . In my case this didn&rsquo;t work out with various browsers on different…

Design audio PCBs with KiCad

Design audio PCBs with KiCad I finally wrapped my head around KiCad for designing and ordering circuits. Join the journey to my first own PCB ! Contents Motivation Requirements Prototype Circuit 1 - ChOps+mute+attenuate Circuit 2 - ChOps+network Order PCB Build Conclusion Vision Motivation What I really like about synthesizer and eurorack in particular is to have control about literally anything.…

explore Float::INFINITY

explore Float::INFINITY I was looking for an approach letting a client endlessly reconnect. The reconnect option just accepts numbers >=0 . The naive idea was to set it to an arbitrarily high number, but how many reconnects are enough? Ruby has a concept for that: Float::INFINITY . The client doesn’t need to know this concept in order to work with it. The attempt count just got compared to the…

hexdump pattern

hexdump pattern I find myself surprisingly often in situations where I want to inspect byte buffers. Luckily my first programming lesson from my cs studies taught me a pretty good hexdump pattern: func hexdump ( buf [ ] byte ) { // the hexdump print loop, for each row for row := 0 ; row < len ( buf ) ; row += 16 { fmt . Printf ( '%04x | ' , row ) // print hex value of each field in the current row…

Lets build a Hypervisor with KVM

Let&rsquo;s build a hypervisor with KVM There are a bunch of common challenges on a bucket list of a software developer: compiler/interpreter operating system regex parser http server OpenGL (probably Vulkan now) graphic/game engine let an LED blink Recently, I got another one that deserves more attention: Build your own Hypervisor and boot a Virtual Machine. What sounds like a mammoth of a…

Stickers on my laptop billboard

Stickers on my laptop billboard Laptop lid with stickers. It has become quite normal to cover the laptop lid with random stickers. You can get such sticker at any conference en masse. It&rsquo;s an expression of &ldquo;Hey, look at my stack!&rdquo; or other stuff that one cares about. For the sticker connoisseur that I am, I choose carefully which ones get the privilege to cover my laptop lid…

Gokrazy with Raspberry Pi Zero

Gokrazy with Raspberry Pi Zero Default gokrazty output. I started my IoT journey with a Raspberry Pi 1 B and have since settled on the Arduino Pico/Esp32 so far. Recently, someone showed me their small GPIO code in Go and the remarkably simple CLI to build and update an image on a remote IoT device. This post is a summary of the steps I did to let an LED blink with gokrazy and a Raspberry Pi Zero…

Reinvent the wheel

Reinvent the wheel Detailed photo with flash from my dad&rsquo;s mountainbike tire. Write more &ldquo;useless&rdquo; software 1 was the claim that inspired me to think about clones and yet-anothers 2 . Reinventing the wheel is often said to be a waste of knowledge and time. If someone solved the problem before, why do it yourself? It&rsquo;s easier to use dependencies especially when they receive…

Analog Oscilloscope e2e tests

Analog Oscilloscope e2e tests Lately I fulfilled a long-forgotten dream and became owner of an analog oscilloscope. One that you probably had in your physics class back then. A Hameg HM 203-7 : This blog post combines software testing perspectives with electronics. I also want to describe my ux/ui observations as the oscilloscope is analog only. Disclaimer: I&rsquo;m not a certified electronics…

Chemnitzer Linuxtage 2025

Chemnitzer Linuxtage 2025 I&rsquo;ve attended the Chemnitzer Linuxtage for the second time 1 . You want it, you get it. Some data: date: 22.03.2025 + 23.03.2025 location: TU Chemnitz Chemnitz is the european capital of culture 2025 nftables This talk gave essential insight into declarative firewalls with nftable and filled some blank spaces in my linux administration knowledge. Hook: interception…

proof of work

Proof of work Proof of work plays an interesting role within secure networking , DDoS protection and an essential role creating blockchains aka mining coins 1 . Hash functions It is basically a concept of enforcing brute-force work that can&rsquo;t be skipped or worked around. This can be accomplished by using a hash function which is by design not reversible. Hash functions compact an input with…

FOSDEM 2025

FOSDEM 2025 I attended the FOSDEM 2025 in Brussels for the first time 1 . Some data: from 1st to 2nd of February 2025 at the Université libre de Bruxelles in Brussels spotted creators of prominent software: Badger : creator of cURL PID 1 : creator of systemd Gerald Combs : creator of wireshark Content Syd - Sandboxing for Linux Tightening every bolt The selfish contributor revisited 14 years of…

38c3

38c3 - illegal instructions I attended my first CCC (Chaos Computer Congress) in Hamburg. I came for the talks and stayed for all the rabbit holes I fell into. Some data: location: CCH Hamburg recorded lectures via media.ccc.de motto: illegal instructions date: 27.12.2024 - 30.12.2024 talk of the town with press embargo and international media echo: Wir wissen wo dein Auto steht Content Talks…

Generic swapping in go

Generic swapping in go When writing tests, overriding global values/defaults 1 can become pretty handy for mocking. But as always with global resources, they need to be used carefully 2 . Otherwise other tests may behave strangely. Therefore a test should make sure those values are reset to its original value regardless of the test result. Here you go: A generic swapper that gives you a resetter…

Local-only gitignore

Local-only gitignore Red passenger traffic light in Munich. Taken while doing some street photography with flipez . tl;dr: Enable a local-only untracked gitignore file for all repos using the config option core.excludeFiles . Gitignore is a great way of excluding unwanted files from a git repository. Usually you want to track it within the repo and add all the coverage, binary or test files that…

go yolo

go yolo Green passenger traffic light in Munich. Taken while doing some street photography with flipez . tl;dr Go generics can be used to drop the error of two-return-value functions to enable chaining functions quickly: func Yolo [ T any ] ( value T , _ error ) T { return value } func main ( ) { // Atoi has signature func(s string) (int, error) fmt . Println ( Yolo ( strconv . Atoi ( '21' ) ) +…

on-run commands on file event

on - run commands on file event On top of the Ulriken near Bergen in Norway from my last rl journey. Inspired from watch , on runs commands repeatedly but on file events likewise to inotifywait . Contents Getting started Origin story Rustlings Watch go lint Random go lint output File events Implementation Fsnotify Debounce events Getting started usage: usage: on [ --create ] [ --write ] [ --rename…

ferris sweep split keyboard build

Ferris sweep split keyboard build I built a Ferris Sweep split keyboard originated from the Datenspuren 24 souvenirs . Having a bit soldering experience and hacking curiosity, this was/is a great rabbit hole to explore. Contents Starting point Preparation Components Tools Assembly Close jumper pads on the opposite side Orthogonal pin header Pinecil TRRS shorting hazard Flashing Chicken egg upate…

Last mile is always the hardest

Last mile is always the hardest

Datenspuren 24

Datenspuren 24 I&rsquo;ve attended the Datenspuren 24 hosted by C3D2 in Dresden. Some data: location: Dresden-Pieschen Zentralwerk lot of talks, workshops and get together since 2004 focus: technology within society own payment system GNUTaler with the digital currency Spurlos Contents SculptOS - a novel operating system, truly trustworthy computing Microkernel mechanism SculptOS Update…

writing blog posts - done is better than perfect

Writing blog posts - done is better than perfect I had a lot of blogs since I have access to the internet. Mostly unsuccessful in terms of continuously writing new posts. What is different with $this one? principles As stated in my first post , I started with the following principles: focus: CLI-only, no distractions simplicity: only the features currently needed minimalism: focus on content and…

home office with mobile data

Home office via hot spot tl;dr Working from home via hot spot isn&rsquo;t as unreliable and traffic expensive as I thought. Pre-schedule suitable work and delay data intensive ones like meetings help along the way. I recently moved into a new flat and the technician appointment to enable my internet connection was still in the future. At the same time I awaited some furniture deliveries and you…

Bash-cheat sheet

Bash - cheat sheet Contents Arguments Brace Expansion Colors Conditionals Debugging Pipes and Redirects Arguments variable description $0 name of the script $1 first argument $2 second argument $<n> <nth> argument, where n > 0 $@ all arguments as one string $# count of arguments Example #!/bin/bash echo script started with $# args: $@ for arg in ' $@ ' ; do echo ' $arg ' done # $ ./script.sh…

Getting old

Getting old

GopherCon 2024

GopherCon Europe 2024 I attended the GopherCon Europe 2024 in Berlin 1 to check out the latest GOssip 2 . Some data: date: 17.05. - 20.05. location: Alte Münze Berlin two tracks accidental pictures with the Go Team: ( 1 ) ( 2 ) Website Contents The Business of Go Rethinking domain-driven design Introduction Idea 1 - always keep valid state in memory Idea 2 - keep domain-logic database-agnostic…

working on the road-self experiment

working on the road - self experiment tl;dr: Self experiment about working on the road. It&rsquo;s challenging but opens up new possibilities. I worked in the train and within a coffee. My productive comfort zone is behind a desk within an office having sparing partners for sharing and discussing ideas. Need more focus? Noise canceling headphones to the rescue! But as time flies, work environments…

Chemnitzer Linuxtage 2024

Chemnitzer Linuxtage 2024 I attended the Chemnitzer Linuxtage 2024 and it was great fun 1 : date: 16.03.+17.03. 6 lecture halls lectures (german only regular ticket price: 12€ workshop price: 5€ Disclaimer as within my last conference : I’m paraphrasing (italic) the speaker based on my notes and memories as best as I can. Content Analoge Fotos mit freier Software digitalisieren Wie funktioniert…

ruby - get plain class/instance method list

ruby - get plain class/instance method list tl;dr: <your-class>.methods - Object.methods Whenever I juggle with ruby classes or instances within a ruby REPL 1 , I had hard times to figure out their methods: > Time . methods = > [ :at , :now , :utc , :gm , :local , :mktime , :new , :allocate , :superclass , :<=> , :< = , :>= , :== , :=== , :included_modules , :include? , :ancestors , :attr ,…

git force-push for professionals

git force-push for professionals tl;dr: Use --force-with-lease instead of --force to avoid overwriting upstream changes. Introduction 1st git rule: don&rsquo;t force-push . But as an atendee of the rebase-i-make-my-own-history club , force push is necessary. But nevertheless overwrites happen, especially when multiple people work on the same branch. This happens mostly for automatic pull-requests…

Ollama and codellama - enter the AI rabbithole

Ollama and codelama - enter the AI rabbit hole Ollama makes using models like codellama as easy to use as containers. I stumpled over it on hacker news and was cruious if it was as easy as claimed. Getting started download and install ollama: Linux: curl -fsSL https://ollama.com/install.sh | sh others: Download page pull e.g. Meta&rsquo;s codellama model: ollama pull codellama run prompt: ollama…

let&#39;s boot with riscv

let&rsquo;s boot with riscv Let&rsquo;s boot some C code 1 with riscv64 using qemu : riscy 2 After about half a year of os development abstinence . I fell into the riscv-os-dev-rabbit-hole. Those risc, arm, riscv buzzwords are in my news bubble for a while. Now it&rsquo;s time to get my hands dirty. Contents RISC-V vs. ARM vs. ARM64 vs. AArch64 Getting started - barebone tutorial Build Interact…

execute c source files

execute c source files tl;dr : add //usr/bin/gcc "$0" && exec ./a.out "$@" to the first line of your example.c make executable: chmod +x example.c run it: ./example.c I have got a folder called lab for those quick &lsquo;n&rsquo; dirty programs to test some language features or other interesting behavior. While golang programs can be easily executed via go run <go file> and this is not the case…

go integration tests with ginkgo and gomega

go integration tests with ginkgo and gomega Headlights of Louvre&rsquo;s statuary hall in Paris. Today, I&rsquo;ve checked out the BDD 1 testing framework ginkgo with the matcher library gomega for integration tests with go. The motivation was to find an alternative for my go-to testing framework rspec . Although in ruby, I anyway used it for go projects like blogctl . rspec - Were I came from…

Continue interrupted uploads via dd

Continue interrupted uploads via dd skip Squirel in a London park. While falling into the routing engine rabbit hole planing my next hiking trip via nextcloud maps, I needed to upload a big file to my server. Upload bandwidth sucked as it mostly does in Germany 1 . Well scp is my friend I guess: $ scp jakobsweg.tar.gz root@my.server:~/ lost connection Oops, after ten minutes with slow progress,…

verbose v1.1.0-edit support

verbose v1.1.0 - example and edit support I recently got a new motivation to update my vocabulary service verbose . Each word can have an example sentence together with its translation now. Verbose has also a new edit page. Example support When learning new words it could be useful to have a helpful example. This adds more context to the translation. Having an example is also useful for learning a…

Hola docker, mucho gusto

Hola docker, mucho gusto! 1 I&rsquo;m currently learning Spanish for my next vacation 2 . While Duolingo does an impressive job of gamifying the learning process , I thought about combining this fairly unknown world with one that I&rsquo;m familiar with. I use Linux and its utils a lot. I like to read man pages and I know a bunch of them. Why not switch the system language to Spanish then? Well,…

hashsets in go

Hashsets in go tl;dr var hashSet map [ string ] struct { } Introduction The term HashSet is a data structure from the Java universe describing a value-less HashMap 1 . It is perfect when uniqueness is needed but avoids the overhead of a value. Using golang they can be constructed using an ordinary map and an empty struct: var hashSet map [ key ] struct { } Use Cases The key can be any supported…

how to rename files without specifying the path twice

How to rename files without specifying the path twice How to avoid mv /this/is/a/long/path/to/my/guinea/pig/trfel.pig /this/is/a/long/path/to/my/guinea/pig/trueffel.pig and just do something like <cmd> /this/is/a/long/path/to/my/guinea/pig/trfel.file trueffel.pig ? Maybe I&rsquo;m totally off today 1 , or this naive question hasn&rsquo;t a navie answer. Anyway, I couldn&rsquo;t come up with a…

measure downtime durations via icmp

measure downtime durations via icmp Construction site at the Sendlinger Tor in Munich. How long does it take for the failover mechanism to fail-over? How long does it take for my server to be up again? I recently had the challenge of measuring downtime durations. ping on the one hand &ldquo;makes me see&rdquo; when paket loss occurs and vanishes but lacks in aggregation. mtr on the other side…

Godot Wild Jam 60

Godot Wild Jam 60 We 1 participated at the Godot Wild Jam #60 with the theme malfunction and submitted Rebot Roboot : Repair your robotic companion after a failed firmware update. jam submission game source soundtrack: Mandarin Marshmallow one wildcard implemented: Mobius loop Your game starts and ends at the same point. Contents Idea Minigame mechanics Wires Logic gates Optics Brain Summary Idea…

linux file observability

linux file observability In linux, &ldquo;everything&rdquo; is a file 1 . Regardless if its a regular file, directory, socket or even a device. Know how to observe open files, attached to a process, can become quite handy for debugging a linux host. Files and file descriptors Observe Wich process opened the file? Which files do a process holding? 2 Is my server already listening for incoming…

blog update: customization

blog update: customization Berlin skyline at sunset from a rooftop. Make your own customized blog using blogctl! With blogctl v1.0.0 , all personal hard coded information are now configurable. They can be specified using the introduced blog.json in the root of the blog directory: { 'version' : 1 , 'author' : 'Raphael Pour' , 'title' : 'blog' , 'domain' : 'evilcookie.de' , 'description' : 'Hi, I'm…

manpage fulltext search

manpage fulltext search man -K <term> got you covered 1 : -K, --global-apropos Search for text in all manual pages. This is a brute- force search, and is likely to take some time; if you can, you should specify a section to reduce the number of pages that need to be searched. Search terms may be simple strings (the default), or regular expressions if the --regex option is used. Note that this…

let&#39;s boot

let&rsquo;s boot Let&rsquo;s boot some x86 code with qemu. I rediscovered osdev.org after 13 years of abstinence 1 2 and started off with the plain-assembly babystep . Then I tried the C based bare-bones kernel to have a bit more convenience. Minimal working example Babystep - plain assembler Bare-Bones - C Findings Environment Memory Layout Resources Vision Minimal working example [ ORG 0x7c00 ]…

Godot Wild Jam 55

Godot Wild Jam 55 - zzZ I did my first solo submission at the godot wild jam 55 about the theme dreams and reached rank 29! It&rsquo;s called zzZ where the player catches sheep to catch some z&rsquo;s 1 . Some more facts: jam submission game source code two wildcards implemented: A fork in the road : four endings Kabom! : missed sheep explode Contents Idea Mechanics Sheep spawner Basket Sunclock…

Blogstage-static web server in rust

blogstage - static web server in rust I was looking for a useful service-oriented Rust project where I can test my project standards 1 and dive deeper into the language. I decided to replace the &ldquo;caddy file server&rdquo; that serves this blog. The result is called blogstage : Simple web server providing my static blog to the world. It can be used via blogstage <ip:port> <path> or just…

Finish rustlings

Finish rustlings +----------------------------------------------------+ | You made it to the Fe-nish line! | +-------------------------- ------------------------+ \\/ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒ ░░▒▒▒▒░░▒▒ ▒▒ ▒▒ ▒▒ ▒▒░░▒▒▒▒ ▓▓▓▓▓▓▓▓ ▓▓ ▓▓██ ▓▓ ▓▓██ ▓▓ ▓▓▓▓▓▓▓▓ ▒▒▒▒ ▒▒ ████ ▒▒ ████ ▒▒░░ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒…

Thinking tools aka fidget toys

Thinking tools aka fidget toys As my mind often needs something to do, I stumpled across fidget toys 1 as an alternative of chewing finger nails and excessive chewing gum usage 2 . Anyway, I want to share my mostly self-printed thinking tools. My current ranking: infinite fidget cube : very satisfying to fold the cube infinitely many times joy fidget : reminds me of good old N64 times while the…