Home Server Part 1: I need ZFS!

With more and more devices in my life, I soon started to feel the need for some kind of private and centralized data storage. I don’t want to buy desktop computers, laptops and phones each equipped with huge local storage and copy things from A to B all the time. Cloud providers work great in this case, but if the amount of data you have exceeds a few hundred Gigabytes they can be expensive and for sure way too slow if you don’t access the internet with Gigabit speeds.

Having a small server at home solves this problem for me. My devices all have rather limited local storage and access all the important files remotely by now. To be honest, this can be achieved with any store bought NAS system out there. But that would steal a lot of the fun, right? (And also, you get a lot more bang for your buck when building the system yourself.)

Last fall, after about 7 years, my current system started to show its age. It was build on a RAID-5 with 3x 3TB disks which had filled to over 95% over time. Backup disks had even less free space and I had to start excluding less important stuff from my backups. Bit rot ate up one of my oldest files. And simple tasks like zipping a file for download over Nextcloud would bring the old dual core CPU to its limits.

It’s time for a new server and I started to put a lot more thought into building the new one than 7 years ago.

Continue reading

Mutation Testing – The Basics

Software quality has evolved to an important factor when developing software systems. Especially for commercial systems, quality assurance of the software is necessary to provide a reliable and pleasing product. Testing is a crucial step in the software development life cycle and should be of every software engineer’s concern. Testing frameworks and tools such as JUnit or PHPUnit have made their way to production systems and are often deeply integrated into release processes.

Consequently, the quality of the tests themselves is crucial for their reliability to ensure the software’s quality and correctness. One of the approaches to evaluate tests is Mutation Testing. However, this technique does not seem to be very popular and has its downsides. Is it mature and useful enough to support strategic decisions regarding development of a software and its tests?

First, let’s get down with the basics.

Continue reading