It was a late evening before a working day (doesn’t any good story start like this?). I was thinking why the new Nix API wasn’t working for me by default. TLDR: the thing about Nix is that there’s a legacy API (nix-command
) and a “new” API (nix command
), which becomes available by enabling the so-called “experimental features” for Nix. Legacy or experimental. Nothing in between. Though to an outsider it might sound odd, the “experimental” features have long been established and widely used in the Nix community so their “experimental” status is a mere formality.
Hey there! 👋
My name is Kris and this is the log (for the lack of a better word) of my thoughts on topics around programming, as well as my personal journey in the tech world. This is no blog by any means and more of a space to formulate my opinions without any implications otherwise heavily associated with the social media platforms like LinkedIn or Twitter.
Join me on this ride✨
Hard (drive) adventures
Paranoya or common sense?
It’s only recently that I started paying close attention to digital hygiene. In fact, I clearly remember the feeling of lingering sticky anxiety learning about IT security at the uni. We were given multiple assignments to ‘hack’ things. Reverge-engineer a binary to crack the password by utilizing a side-channel attack or decipher a message encrypted with AES-256 (widely used today) in the CBC mode. The hacking part was extremely fun. The realization how easy it can be given enough time and resources was not. Before the uni course was over, I had changed all my passwords to randomly generated and set up 2FA wherever possible. The paranoya was real.
Go Shell from Scratch
https://github.com/Kristina-Pianykh/go-shell
Why?
There are certain things that every programmer must build. Opinions differ with regard to what such these things are supposed to be but my “bucket list” includes a CPU emulator, a compiler/interpreter, a small operating system, and a shell. I’ve done an emulator of a RISC-V processor and a very shallow and patchy version of an interpreter at the univirsity (both in C) but the shell part escaped me. Back then it was a pretty ambitious task for the time we were given to implement it and it was surely way over my head. Guess the implementation language for the true UNIX experience with all the classical concepts like process forking and file descriptor duplication for pipes (spoiler: it was also C). I was quite overwhelmed and had to eventually abandon the task. Now, a few years later, I could finally get back to it, only this time I chose to do it in Go. Although arguably a less conventional choice of a language for this purpose, I’d set the goal of extending my Go knowledge for professional purposes but I also consider it rather efficient to DO THE THING FAST while not getting entangled in language design features.
Advent of Code 2023 in Java
Advent of Code is famous in the developer community around the world for providing a perfect setting for learning a new langugage. After all, we all know that no amount of books and documentation reading can do you a better service than the good ol’ coding practice (altough RTFM still holds). As a control freak, I like prepping before a challenge. And by that I mean, I LOVE prepping. And I go hard on it. I’m aware that it’s my academic past speaking in the foolish attempt to control uncontrollable but I often can’t help and keeping myself on track to solve a problem without side-tracking to investigate all potential rabbit holes along the way can be a challenge in itself. That’s why before embarking on a journey with learning Golang by solving AoC 2024 this year, I decided to have a look at the puzzles for last year to know what’s coming. And I did it in Java (yes yes don’t hate) to build on the flow following from my thesis project1.
Learn to love your Terminal
I’m a big fan of CLI tools. There’s something about a terminal (emulator) that feels so damn special. I still remember the excitement I felt when I edited ~/.bashrc
for the first time to create a command alias or modify the PATH
. The simple commands I entered had an immediate effect and it felt like magic.
With time, I learnt how to manage my bash dotfiles, how to update system packages, where to configure newly installed open-source tools. It made me learn about my environment and where to look if I get an error. I learnt the importance of automatization in the development process (aka building your own development workflow!) and the importance of maintanance. After I nuked my root with the cursed rm -rf /
command on WSL2 by failing to perform auto-complete and entering it way too late to remedy the situation but well in time to realize I’m in a pickle, I had to go through restoring my entire environment. And this is when I decided to take a more organized approach to managing my dotfiles. Today I use the home-manager to declaratively define my environment, Oh My Zsh instead of bash, kitty as a terminal emulator and of course neovim (my love, always) as a code editor.