I came up with a non-bad approach for making URL shorteners.
Linkdump #2
A second collection of links I found interesting recently. Many of these are stories on how AI can fail, how humans can fail, and how organizations can fail.
Where to Get Custom Emojis for Slack
Want to pimp up your Slack with custom emojis? Check out these services.
Blog Updates and Dirty Tricks
In this post you’ll find some recent blog updates (boring), dirty tricks to achieve them (interesting), and unreasonable amounts of praise to Zola (deserved). It might be useful if you’re hosting a blog too.
AI Augmented Scala, my Takeaways
I have recently attended the “AI Augmented Scala” workshop from VirtusLab.
Short review: great. I was skeptical at first, expecting it to be another evangelism from the church of AI overlords. But, no, they started the talks with pointing out what AI cannot do. This way, they gained my trust and made an impression it's gonna be a no-bullshit workshop. It was indeed.
And they shared ways to make AI more useful.
My takeaways:
Here’s Why You Should Be Blogging
If you searched for motivation to start a blog, this post is for you.
Linkdump #1
My first attempt to dump many links on you with short comments about why I consider them interesting. This one is mostly about free software and independence from Big Tech.
What to Expect From Linux
So, you're considering to start using Linux? Great! Here's what you need to know to understand what's going on.
Migrating to Scala 3
Recently I migrated three old services to Scala 3. This post contains many overly specific notes on problems I faced and how to solve them.
Replacing Mocks with In-Memory Implementations in Scala Tests
Recently I worked on migrating a service to Scala3 and one of the major blockers for this was the test code using mockito-scala that works only on Scala2. It was possible to use another mocking library but I used this opportunity to replace mocks with in-memory implementations. This post contains notes on how to do that.
Pull Request Self-Evaluation Checklist
Here’s a little self-evaluation checklist to add to the pull request template for internal repositories. This way, when you create a pull request, it reminds you about important stuff you might forget.
How To Structure Generators in Scala Property-based Tests
With property-based tests, you end up writing many generators for random data. I saw people coming up with different patterns for defining generators and some of them worked better than others. In this post I'll describe what worked best.
How Not to Resize EFI Partition
I have a Framework laptop with Fedora Linux and at some point I couldn’t install firmware updates. The error was not enough free space in my 100MB /boot/efi partition so I had to resize it somehow. None of the guides I could find helped me completely so here’s another one. I also wrote down what didn’t work because those parts of existing forum discussions turned out to be most useful for me.
Android Apps I Use
Over time, I’ve replaced most my Android utilities with FOSS alternatives. Usually this involved installing several apps that do the same thing and using them in parallel until it’s obvious which one is the best. Here’s the list of such apps so you and future me can benefit from this effort.
Deno is Fine
I have migrated one TypeScript application to Deno and I think it is fine. Probably, it doesn’t make much sense to migrate existing applications, but give it a shot when making one from scratch.
More detailed impressions inside.
Computational Optimization at Work 2024
I have attended CO@Work 2024 at Zuse Institute Berlin. It is a summer school about computational optimization algorithms.
Nearly everyone I met at CO@Work were Masters and PhD students proficient in optimization. However, they were curious about the experience of working in a company. This is weird. There should be more software engineers there because usually it’s them who have to solve optimization problems in practice. Yet, most are unaware of operations research’s existence.
But there are good news! Almost every talk from CO@Work is now on YouTube. They can serve as a good crash course into operations research. In this post, you'll find links to every recording with my personal impressions of the talks.
Software Engineering At Google Book, my Takeaways
"Software Engineering At Google" is a long and uneven book. Every chapter is written by a different person and covers a different topic. Some sections are too basic and boring. Some things are too Google-specific, like bragging on how they solve problems they invented for themselves. But also there are things that should be basics but for some reason I haven't seen them anywhere else. In this blog post I list these things.
Delete Your Agenda Slide
An easy way to improve your presentation is to delete your “Agenda” slide. You don’t need it. Seriously.
You Should Own a Domain Name
Imagine not owning the key to your home. Every time you want to get inside, you ask some other person to unlock the door for you. They do it for free but at any point, they can change their mind and lock you out. Sounds weird, right? Well, with IoT "smart" locks it’s not unrealistic but still weird. And yet we have the same situation on the Internet.
Yes, You Can Use Different Types With the Same Structure
This is a story of how we fixed multiple bugs by typing our array indexes.
Finally a Good Feed Reader
After the closure of Google Reader, I have spent years searching for a good RSS feed reader. It seems like I’ve found it.
Don't Start With a Skateboard
I'm arguing with metaphors again. Do you remember the famous metaphor that when you need a car, instead of building one, you should build a skateboard, then a scooter, a bike, a motorcycle, and only then a car?
This metaphor shows a good idea of getting feedback earlier. It says, don't make all the work with a big-bang release in the end. Instead, start with something simple, a minimum viable product like a skateboard, and release it immediately. Collect feedback and adjust your work accordingly.
There is one flaw, though. Building skateboards is not easy.
Good GRPC GUI Clients
Looking for good GUI clients for debugging GRPC endpoints turned out to be surprisingly hard. It took several attempts and many apps checked. But I found some.
ZIO Log Annotations Are Confusing
I was working on a logger that writes metrics every time a warning or an error is logged. I tried to provide additional metric tags depending on the log annotations. And it didn't work. I was adding an annotation and I could see its value somewhere deep in the stack trace but the annotations value was empty.
Turned out that ZIO has two log annotation mechanisms that work in parallel.
Tech Stack of the urmaul.com Blog
At the time of writing this, urmaul.com is a static blog with privacy-friendly dynamic elements. Everything runs self-hosted on a single virtual server with an automatically updated Linux.
This is a description of every layer with some reasoning and configuration details.