Latest Posts (20 found)
./techtipsy 2 weeks ago

BTRFS disk errors to fall asleep to

This is inspired by a dying Seagate Portable 4TB hard drive, and brought to you by 15 minutes of vibe engineering. Starting the RMA process on the Seagate website is one of the most difficult things I’ve done lately, and half the links there look like a legitimate phishing attempt. By the time I got the RMA created, I’ve run out of time and energy to follow on with this process. I guess it’s a great way to make your RMA rates stay low, though!

0 views
./techtipsy 2 weeks ago

SteamOS on a ThinkPad P14s gen 4 (AMD) is quite nice

In April 2024, I wrote on the Lenovo ThinkPad P14s gen 4 and how it does not suck under Linux. That is still true. It’s been fantastic, and a very reliable laptop during all that time. The P14s gen 4 comes with a CPU that is still solid today, the AMD Ryzen 7 PRO 7840U, and that comes with impressive integrated graphics in the form of an AMD Radeon 780M. I’ve had a Steam Deck. I’ve also accidentally built a Steam Machine. I had to put SteamOS on this laptop to see how well it does. I did a quick Bazzite test the last time around, but after being impressed with how well the stock SteamOS image runs on a random machine with an AMD GPU, I had to test that, too. The normal way to install SteamOS on a machine is to take the Steam Deck recovery image and to install it on your own machine that has one NVMe SSD. I didn’t want to do exactly that, I wanted to run it off of an USB SATA SSD, which the recovery image does not support, as it hard-codes the target SSD for the SteamOS installation to . There’s a handy project out there that customizes the recovery script to allow you to install SteamOS to any target device, but I learned about that after the fact. I went a slightly different route: I imaged the SteamOS installation from my DIY Steam Machine build, wrote it to the 4TB USB SSD that I had available for testing, and after that I resized the partition to take up the full disk. Bam, clean SteamOS on a USB SSD! Oh, and before I did that, I did the same process but to a 128 GB Samsung FIT USB 3.0 thumb drive. The game library images did load a bit slowly, but it was a great demonstration of how low you can go with the hardware requirements. I wouldn’t recommend actually installing games on such a setup as that would likely kill the USB thumb drive very quickly. I ran the SteamOS setup on this laptop over a USB-C dock that only supports running at up to 4K at 30Hz, so I did testing at 1080p 60Hz setup. You’re unlikely to want to run this setup at 4K anyway, unless you’re a fan of light, easy to run games like Katamari or Donut County. In most games, the experience was enjoyable. 1080p resolution, maybe change the settings to medium or low in some cases, and you’ll likely have a solid gaming experience. Forza Horizon 4? No problem, 1080p high settings and a solid, consistent experience. Need for Speed Hot Pursuit Remastered was an equally enjoyable experience, and I did not have to turn the settings down from high/ultra. God of War Ragnarök was pushing the setup to the limits. With 1080p, low/medium settings you can expect 30+ FPS. If you include AMD FSR settings in the mix and also enable FSR frame generation, you can have a perfectly enjoyable 50-60 FPS experience. Some UI hints were a bit “laggy” with frame generation, but I’m genuinely surprised how well that rendering trick worked. I’ll admit it, my eyesight is not the best, but given the choice of a crisp but laggy picture, and a slightly blurrier but smoother experience, I’d pick the latter. After a pint of Winter Stout, you won’t even notice the difference. 1 Wreckfest was also heaps fun. It did push the limits of the GPU at times, but running it at 1080p and medium/high settings is perfectly enjoyable. The observed power usage throughout the heaviest games measured via SteamOS performance metrics ( ) were around 30-40 W, with the GPU using up the most of that budget. In most games, the CPU was less heavily loaded, and in the games that required good single thread performance, it could provide it. I like SteamOS. It’s intentionally locked down in some aspects (but you can unlock it with one command), and the Flatpak-only approach to software installation will make some people mad, but I like this balance. It almost feels like a proper console-type experience, almost . Valve does not officially support running SteamOS on random devices, but they haven’t explicitly prevented it either. I love that. Take any computer from AMD that has been manufactured from the last 5 years, slap SteamOS on it, and there is a very high chance that you’ll have a lovely gaming experience, with the level of detail and resolution varying depending on what hardware you pick. A top of the line APU from AMD seems to do the job well enough for most casual gamers like myself, and if the AMD Strix Halo based systems were more affordable, I would definitely recommend getting one if you want a small but efficient SteamOS machine. Last year, we saw the proliferation of gaming-oriented Linux distros. The Steam Machine is shipping this year. DankPods is covering gaming on Linux. 2026 has to be the year of the Linux (gaming) desktop. that’s the tipsy part in techtipsy   ↩︎ that’s the tipsy part in techtipsy   ↩︎

0 views
./techtipsy 3 weeks ago

Meet the Garbage PC

This is the Garbage PC. Not too long ago, I received a half-broken Dell Inspiron N5110, sporting 6 GB of RAM, a dual core Intel i3-2110M, and an unsupported NVIDIA GPU of some sort. One of the hinges was loose from the case because it was screwed into plastic (common issue for these types of laptops), the touchpad did not work, and to insert a drive into it, you had to disassemble the whole machine. I’m quite confident that I’ve worked on this laptop model in a very distant past, around 2012-2013, and I remember it well because during the disassembly plastic bits were falling off everywhere and the right hinge was broken in exactly the same way. I’ve always wanted to take a half-broken laptop and to mount it on some acrylic panels (plexiglass) using brass standoffs. I love how bare PCB-s look. They’re just so damn cool, and I can’t be the only one who thinks this way, right? I also get a good feeling out of taking trash/obsolete parts and making them useful once again. This laptop was destined for the e-waste pile, which meant that it was a fantastic candidate to try this idea on. The main constraint in this project was time. I’m a parent, I have a job, and sometimes between all that I like to rest, so the amount of available time for this project was about 8 hours spread across a month. I also lack proper tooling to do a good job, so this was achieved using whatever I had available, mainly a cordless jigsaw and a hand drill. On the upside, this means that if I can do it, then you can likely do it as well! This laptop turned out to be a total pain to work on. During initial testing, it was very clear that the laptop needed a good thermal paste and pads replacement, as it tried to overheat playing casual videos off of YouTube. After I disassembled the laptop to bare essentials and put it together as a test run for the “mount it on acrylic panel” idea, the extension board containing two USB ports and the Ethernet port just stopped working. I probably broke something, but annoying nevertheless. On the positive side, the overall size of the build was smaller as a result of this happy little accident. Using this laptop via the HDMI output only also turned out to be an unnecessary headache. LibreELEC did not play well with it, often resulting in a blank screen, and on Fedora Workstation 43, there was a “ghost” display somewhere that always showed up on the display settings view. So did the internal display, even when it was disconnected. This caused an issue when trying to get Fedora installed on this machine, as the installation UI would be placed on a screen that was not the HDMI output one that I was actually using. This issue can be mitigated similar to my LattePanda V1 adventure by disabling video outputs completely. For this laptop, I modified kernel parameters via and added the following kernel parameters: Yes, it’s possible to modify the display setup on your desktop environment of choice to disable certain outputs that way, but using kernel parameters ensures that if you change monitors, you won’t have to do that all over again. To make this whole build even more garbage-tier, I used an 256GB SATA SSD with 5 known bad blocks. I sourced a large 4mm thick plexiglass panel from a hardware store, as that seemed to be the most accessible place where I can get one. In Estonia, these types of panels are often sold in the gardening sections of general hardware stores. For attaching the motherboard to the board, I sourced an assortment of M2.5 brass standoffs and screws, and multiple sets in case I need more of a specific height (turned out to be a good call on my part). I chose M2.5 because the laptop used screws of that size, and this size is common in the world of Raspberry Pi and other SBC-s, which can be handy for any future dumb ideas experiments. To mark the positions on the plexiglass, I put the motherboard assembly on it, marked some good spots with an awl 1 , and then drilled holes using a hand drill and 2.5mm drill bit. I also sourced heat inserts so that I can melt them into the plexiglass assembly, but those didn’t work out very well. I used my Pinecil soldering iron to push these in to the 2mm pre-drilled holes that I set up for these, but I had alignment issues and the threads ended up getting gunked up by the melted remains of the plexiglass, so I could not screw any brass standoffs in there. I tried to be very careful with getting the drill holes to line up, and it went mostly alright. My recommendation here is to be precise, and don’t screw everything tight before you’ve got screws and standoffs lined up for all planned holes, otherwise you lose the option of wiggling things a bit to get them to line up. The standoffs and screws were screwed on tight enough to keep things in place, but not too tight to avoid cracking. For the other panel, I cut out a similarily sized plexiglass panel, marked the holes again, and repeated the process. Since I was using a cordless jigsaw, I positioned the new piece so that the flat side of the plexiglass panel that I bought lined up with the other straight end on the existing assembly, because I will never get a good straight cut with a freehanded jigsaw. That worked out well enough. For the power button, I reused the small PCB that contains the power button and power LED-s from the original case. To house that, I drilled a small hole with 1cm diameter to slip the ribbon cable in, and I used small pieces of 3M VHB double-sided tape 2 to secure it to the panel. And there you have it, the garbage PC. The shine of the plexiglass does a fantastic job of bringing out the beauty of the motherboard and all its components. Standoffs leave plenty of room for the machine to breathe. Since the extension board is missing, this build relies heavily on one USB port and one eSATA port that also supports USB connectivity. WiFi, Bluetooth, keyboard/mouse, it’s all over USB 2.0 ports. One thing that I have yet to do is to add a base to the build so that it does not tip over that easily. Double-sided tape plus a wooden trim piece might do the trick. This build is using parts that are about 15 years old. For context, that was when dubstep was popular, it was cool to hate on Justin Bieber, rage comics and bad memes were a thing, and the news in Europe were worried about Greece going bankrupt or something. That does mean that the performance on this machine is not great. The machine still runs warm, but not nearly as hot as before. In its stock form and before any thermal paste replacements, it ran about 85+°C, but now it doesn’t seem to ever hit 70°C. As a basic desktop PC, assuming that you’re not trying to run a 1440p or 4K display, the experience feels completely usable! If you’re thinking about setting this up as a media player PC, then you’re limited to H.264 playback. H.265 was just too much for this machine. If you use Kodi with Jellyfin, then it is luckily possible to enforce transcoding content to H.264, ensuring a smooth experience on the client side. I wish that this laptop supported a “power on with AC attach” type feature that turns the laptop on once the power adapter is connected, that would’ve made it more useful as a crappy little home server. If you don’t mind extended downtime during a power outage, then it can still do that job well enough, but it’s just something I was slightly annoyed with. The board has a small SATA port that can be converted to a normal SATA port, plus an eSATA port, making it perfectly plausible to add two drives to this and to totally turn it into a home server. I tried running Windows 11 on it once, but I tried to do that with the official installer and didn’t get past the “lol your hardware is too old” view. I know that you can remove that limitation, but given the 6GB of RAM and Windows 11 being awful with using resources, it was probably for the best to give up here. The fan is audible when doing things. I did in fact take it apart and added some silicon oil inside the center to give it a fighting chance and it did improve the acoustics, but it’s something to keep in mind if you’re doing similar projects with these old laptops. There does seem to be a way to control the fan by writing values to kernel module controls in , and if you overwrite the value often enough, like in a 0.1 second loop, then you can definitely overpower the BIOS fan control on this board. The control does not seem to be fine-tuned, it’s either off, on, or full speed, but at least you can get some control over the fan speed if you really need to. Alternatively, you can slap a huge heat sink on the CPU and GPU if you want to, and you should be getting away with it. The CPU throttles heavily once you hit 80°C while playing back video, so that seems to be the soft temperature ceiling for this laptop. Overall, I’m happy I did this project. There were way more obstacles and challenges associated with this project that I expected, but the end result looks cool, so that makes it worth it in my view. It was also a good trial run to work with plexiglass and brass standoffs, and I will very likely do something cooler in the future based on this experience. I hope that this inspires more people to reuse older hardware instead of just throwing it into the e-waste pile, especially with new computer parts sometimes experiencing price spikes due to the economy doing weird things. If you’ve built something similar, then do share a link to it (ideally in blog post format) and I will happily link to it here! this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎ this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎

0 views
./techtipsy 1 months ago

Running cheap and crappy USB hard drives in RAID0 is indeed a very terrible idea

Some of my dumb experiments result in interesting findings and unexpected successes. Some end up with very predictable failures. What happens when you have two crappy USB hard drives running 1 in mode? Nothing, until something goes wrong on one of the drives. Here’s what it looks like: But in a way, this setup worked exactly as expected. If you want to have a lot of storage on the cheap, or simply care about performance, or both, then running disks in RAID0 mode is a very sensible thing to do. I used it mainly for having a place where I can store a bunch of data temporarily, such a full disk images or data that I can easily replace. Now I can test that theory out! I feel like I need to point out that this is not the fault of . When you instruct a file system to provide zero redundancy, then that is what you will get.  ↩︎ I feel like I need to point out that this is not the fault of . When you instruct a file system to provide zero redundancy, then that is what you will get.  ↩︎

0 views
./techtipsy 2 months ago

Drawing parallels between home renovation and software development

I had the opportunity to do some slight renovation on an apartment. It was nothing fancy, it involved the following: I expected it to take a few months’ worth of weekends. Took over half a year. Oops. During that time I had a lot of time to think about all sorts of things. It was a nice zen activity for me if we leave out the part where I was physically exhausted, but on the bright side I was mentally relaxed by the time I got back to work. And by the time I was mentally exhausted after a long work week, I was ready to do some physical work. My previous experience with construction and renovation work is pretty minimal. I have a toolbox, and I’m a tool myself, but that was pretty much it. This experience was characterized by a lot of improvisation and a little bit of googling for the parts where I felt genuinely out of my depth, such as installing the laminate floor. I realized quite soon that renovation and software development are very similar in a lot of ways. After all, both involve building something and they both contribute to my back pain and deteriorate my dwindling sanity. Here are some parallels that I observed during the many, many weekends spent renovating an apartment. I did my best to reasonably plan ahead and calculated things like floor and wall surface areas with a reasonable degree of accuracy, plus 10% buffer. That buffer paid off big time. The part where you have to prepare a surface for plastering and painting is super annoying, but the end result is dependent on this step going well. It’s like planning in software development: if you just start coding and ignore the rest, you will end up with a crappy result. Making a few initial up-front investments into dust-proofing a room during renovations is also a wise investment. Learned that a bit too late myself. I felt it multiple times during the renovation work, sometimes you just get into a groove and the time just flies. It was usually interrupted by my body letting me know that I should probably take a break and eat something. Doing something manually sucks. The speed at which a sanding machine can make the walls nice and smooth is crazy. The feeling is comparable to writing Java in Notepad vs IntelliJ IDEA, one is infinitely more convenient and faster, but costs more in money. At some point it’s counterproductive, and you’re unlikely to use them all, but nevertheless it’s fun to browse around and pick something new up. Kind of like opening up awesome-selfhosted list to see what else you can put on your home server. It’s terrible to redo something you already did, but sometimes it has to be done for the best end result. I didn’t do this for one room, and it bit me in the butt a few months later with the floor. Oh well. Sometimes you’ll discover an exposed electrical wire behind the wallpaper. Sometimes removing the baseboard removes a lot of the plaster on the wall. Sometimes you will trip over the big bucket of water and cause a big mess. Sometimes you’ll unknowingly drill into an electrical cable. It happens. Be ready for it. I blew past any pessimistic estimates that I set up for myself, mainly because of the fun little surprises I had during the construction work. I knowingly left some work unaddressed because tackling it would’ve required a significant time and money investment. It’s fine, we’ll get to it later, I promise. With one area it has been working out fine, but in other area I am starting to suspect that doing things the proper way would’ve probably been a good idea. It is what it is. And for a good reason. I’m starting to think that hiring one would have helped avoid a lot of the headache, but then I would have missed out on learning things myself and learning more about the history of the apartment. Hourly rates are high in both construction and software development, unfortunately. In construction, literally. With the hallways, I could not be arsed to do everything properly there as well and did things a bit differently and more creatively, and it turned out okay. MVP mindset! I asked a local electrician for opinions on the electrical wiring, and ended up getting valuable advice that saved me a lot of potential headache and additional construction effort. It would be unfair of me to discount the back-breaking effort that goes into construction and renovation work. In software development, you usually don’t end up maiming or killing yourself. I cut myself up accidentally a few times, but luckily it was not that drastic. Even managed to avoid being electrocuted, somehow. I love Torx screws now. Never had a stripped screw head with those, but I had at least 10+ with the normal Phillips heads. The Torx heads have numbers in them, so it’s very difficult to accidentally mess up. Cutting baseboards is my least favourite activity, I can never get the cuts right even with guidance and hand tools. A table saw would have probably helped a bit, but I don’t yet have one. It was fun to learn something in an area that I don’t usually dabble in. It felt incredibly rewarding to take a room that was kind of crummy and turn it into something nice-looking and livable. I made some mistakes, but I see them as a very valuable learning experience that I will hopefully get to utilize when planning and building my dream home, with a garage, workshop, server closet and a great sauna. I love building, I love learning, and that explains my passion for software development and self-hosting very well. It was also good to work on a project with a set goal. It’s unfortunately very often the case in software development that you’ll have a project with non-stop work. No matter what you achieve and where you get with the project, more work awaits. Always. There is little time to regroup, reflect, and be satisfied with what you’ve achieved. There is no set end point. With renovation, I finally felt that, and I wish to bring more of that into my day job. After all that effort, software development doesn’t sound all that bad, even if it has some existential issues around maintenance, security and the freedom to do whatever you want with your devices. removing the old carpet removing the wallpaper (surprisingly difficult and annoying!) plastering, filling in holes painting the walls installing new power sockets installing the cheapest laminate flooring

0 views
./techtipsy 3 months ago

Oops, I accidentally built a Steam Machine

I like the Steam Deck. It’s what convinced me that gaming on Linux is actually viable now. But after playing through games like God of War Ragnarök 1 , I felt like I needed an upgrade. I love playing with the Steam Deck, but what I love more is playing without having to worry about playing around with graphics settings a lot. Great story and gameplay can only hide the fact that you’re running at 720p 30Hz on a big screen for a little bit. I also get to play relatively rarely, so I might as well make it a better, more enjoyable experience. Quality vs quantity. I went on a look-out for a used PC with roughly these requirements: The AMD GPU being a hard requirement turned out to be an interesting challenge. I wasn’t looking into putting together a custom build, but was rather going for a setup that works and that I can customize according to my specific needs. Turns out that most of the PC-s out there on the market are all based around NVIDIA GPU-s, and AMD builds of this range are relatively rare, with a guesstimate of the ratio being roughly 10 NVIDIA-based machines to 1 AMD-based machine. The good side of this is that the selection process was made way simpler as I got to choose between 3-4 options in the end. During my search I also saw some machines that I would call absolute overkill, and I almost got one in a bidding war, but eventually I found a more sensible option. It also included a monitor, keyboard, mouse and three SSD-s that I didn’t really need, but the PC itself was decent. Here’s what I landed on: All-in-all, it cost me 365 EUR in Estonia in October 2025, and so far I’ve made about 25 EUR back from the SSD sales alone, with some items still up for sale. It’s not as portable as a Steam Deck, but it’s cheaper even if we account for the cost of the game controller and cables/accessories/adapters that you usually need. Regarding the operating system choice, I tried both SteamOS from the Steam Deck recovery image, and Bazzite . Both work fine and in the default couch gaming mode you won’t notice a difference, but I ended up defaulting to SteamOS because I had my setup and configuration changes tuned around that. The SteamOS recovery image approach does assume that you have an NVMe drive available, so if you lack one, you’re better off trying Bazzite as that can be installed on any drive. I replaced the NVMe SSD with a cheap 128GB one and utilized the bigger drive in the LattePanda IOTA setup that now serves as my home server. As a game library drive, I took a 1TB Samsung SSD that I had around, which roughly matches the storage that I had available on my Steam Deck that I ended up modding with a 1TB M.2 2230 SSD. With games like God of War Ragnarök taking up around 176GB , it’s not going to be the most luxurious arrangement, but for now it’s okay. The Fractal case that it came up with was one that is fully metal, with sound dampening material present on the side panels. It’s a bit banged up, but still a pretty nice experience if you have the room for storing one in your setup. The case had one flaw that I stumbled upon: the power button on the Fractal case liked to get stuck, which seems to be a common issue with that model. I fixed that with a random power button that I sourced from a local electronic parts supplier for a few euros and that works really well now, with the additional bonus of it being slightly more cat-proof. The default fan curves on the motherboard were a bit too aggressive, so I had to slightly tune them down, and now the machine is quiet while doing a great job with keeping the internals cool. You can hear a subtle whirring when you’re in the same room with it, but during gaming it stays at reasonable volumes and is not noticeable. Certainly quieter than a Steam Deck would be. The AMD GPU is a low/midrange model, but it gets the job done in 1080p gaming, and with a lot of titles it can do 4K with ease. In God of War Ragnarök I stuck with 1080p and cranked the settings, but with games like Need for Speed Hot Pursuit Remastered, I pushed the resolution to 4K with high/ultra settings, and it runs smoothly at 60Hz. This setup also taught me that Linux supports HDR now , which was news to me! My tech setup usually lags behind the state of the art, mostly because I don’t really see a need to upgrade to the latest and greatest thing out there if the current one works well enough, but this was a really nice surprise. My TV has a crappy HDR implementation, so I don’t get the full HDR experience, but it’s nice to see the TV show that HDR logo when I start up the machine. Regarding the gaming experience, I’ve only noticed a few sore spots. For whatever reason, the Need for Speed (2015) just does not start up on anything but an actual Steam Deck. It just doesn’t work here. I can’t be arsed to investigate this yet, the wonky physics in this game are perhaps not worth that effort. It’s also clear that the choice of an Intel CPU is generally fine, but in God of War Ragnarök it was running too well, so the CPU kept dropping down to lower clock speeds, which then made the game performance inconsistent. Finding that this was the issue was actually quite straightforward: when I first loaded the game, the shader compilation was taking place in the background and even though the CPU was at a constant 100% usage, the game ran quite smoothly. It only started stuttering after that was done, and the integrated setup helped confirm the issue as its most detailed preset shows the frame time and CPU clock speed graphs really well. Since this is just a Linux box, then you can of course run a few commands to fix it. 3 Here’s how I fixed it. Create a desktop entry at with the contents: Create a file with the contents: Don’t forget to mark the script as executable with . Note that the script above does require that you have set up passwordless on the SteamOS installation. This can be configured in , just make sure that the line starting with looks like this: With all that set up, in desktop mode, right-click on the desktop shortcut, “Add to Steam”, and now you can run this script any time in Steam gaming mode, even while a game is running! All-in-all, I’m very satisfied with the experience that a cheap gaming PC box provides with SteamOS. The installation is painless, my wireless controllers just work, and aside from a few rare exceptions, my games run really well. It’s also way easier on my eyes and with the 4K resolution I can actually see oncoming cars better in games like Need for Speed Hot Pursuit Remastered. 4 Less than three weeks after buying that gaming PC, the Steam Machine was officially announced. The rumored specs suggesting a 6 core/12 thread CPU, 16GB DDR5 RAM, and a custom 8GB VRAM AMD GPU that seems to be roughly comparable to an AMD RX 6600XT-ish level of performance. It seems that I have accidentally built a Steam Machine. Oops. Of course, the specs and final performance are not public at the time of writing, and the Steam Machine has many benefits (better SteamOS compatibility, good WiFi, smaller size, likely more efficient and quiet), but it’s still interesting how close I got with my setup and selection criteria. I was slightly disappointed that I got this machine right before that announcement, but then I reminded myself of the fact that I can enjoy games on the big screen right now, and the Steam Machine is scheduled for a release in Q1 2026, which can be as late as 31st of March 2026. And hey, when the Steam Machine does come out and I decide to get one, the current gaming desktop will make for a very good home server candidate with all the room that it has available, and all the six SATA ports on the motherboard sure look tempting. I’m pretty sure that the Fractal case also allows something crazy like 17+ hard drives installed in it. This approach of building my own Steam Machine of sorts did lead to me selling my Steam Deck. Better to have someone else enjoy it than having it sit in a box until its battery dies. That also serves as a major sign of confidence for this big box that makes my sparse downtime sessions more fun. If you have a machine with a modern AMD GPU, then give SteamOS a try, you might be surprised at how well it works. Even a laptop with an AMD APU can do it, as long as you temper your expectations regarding the image quality. it’s a banger, try it if you’re into the story, or you just want to indiscriminately smash and kill.  ↩︎ this is called foreshadowing   ↩︎ some might see it as “ugh, Linux moment” type of thing, but I see it as freedom to fix issues that you would otherwise be unable to even diagnose and address. Power to the players!  ↩︎ you can probably tell that I had a blast replaying that game for the 5th time recently. It’s not even the best NFS game, and yet I love playing it over and over again.  ↩︎ any modern 6-core CPU or better includes both Intel and AMD as the CPU does not matter much here 2 an AMD GPU that can do 1080p/4K gaming, depending on the game NVIDIA was out of the question due to lack of support on SteamOS Intel GPUs are a risk that I was not willing to take right now has to support an NVMe drive using the SteamOS recovery image method is dependent on this acceptable case, PSU and cooling setup if it does not burn the house down and makes the machine cool and quiet, then I’m fine with anything Intel i5-10500 6 cores 12 threads at a reasonable speed (4.2 GHz in real-life use) adequate Cooler Master CPU cooler that does a lot of RGB if needed 16 GB DDR4 RAM @ 2666 MT/s I soon upgraded this to 32 GB because my brother had some leftover modules from his own memory upgrade I forced the modules to run at 3200 MT/s. It’s memtest-stable so good enough for me. AMD RX 6600XT with 8GB VRAM some might scoff at the VRAM amount, but coming from a Steam Deck where 16GB was shared between CPU and GPU, this is plenty! 512GB NVMe SSD three 256GB SATA SSD-s previous owner put them in as RAID0, which is clever and works well as a game library some Gigabyte motherboard that works it really doesn’t matter here some Fractal Design case, possibly a Define-series one all I know is that it’s huuuuuuuuuge it’s a banger, try it if you’re into the story, or you just want to indiscriminately smash and kill.  ↩︎ this is called foreshadowing   ↩︎ some might see it as “ugh, Linux moment” type of thing, but I see it as freedom to fix issues that you would otherwise be unable to even diagnose and address. Power to the players!  ↩︎ you can probably tell that I had a blast replaying that game for the 5th time recently. It’s not even the best NFS game, and yet I love playing it over and over again.  ↩︎

2 views
./techtipsy 3 months ago

Every time I write about a single board computer, half the internet goes down

It happened again. This time it’s Cloudflare, The last time I wrote about a single board computer, it was AWS that went down on the same day. Today, I wrote about the LattePanda IOTA. I’ll let y’all know once I plan on writing about another single board computer, seems to be bad for the internet.

0 views
./techtipsy 3 months ago

LattePanda IOTA review: how does it perform as a home server?

Disclosure: the review sample was provided by DFRobot, the makers of LattePanda. I am allowed to keep the review sample indefinitely, no money exchanged hands, and as always, this post covers my own thoughts and views on the product. 1 In 2023, I happened to find a LattePanda V1 for sale at a good price. Given the then-poor availability of affordable Raspberry Pi units, I got one for testing and finding potential use cases for it in my setup. However, it was just a little bit too weak for any practical uses in 2023, with its CPU and USB connectivity being just slow enough to be of less use, and the networking being capped at 100 Mbit/s. In 2025, we have the spiritual successor to it: the LattePanda IOTA. It keeps the same form factor, but the connectivity and raw power have all received a significant jump, with the CPU performance rivalling my current home server, the trusty ThinkPad T430. The marketing materials list all sorts of sensible use cases for it. I’m sure that it works fine for those, but I’m only interested in one thing: how close does this board get to being the perfect home server? The perfect home server uses very little power, offers plenty of affordable storage and provides a lot of performance when it’s actually being relied upon. In my case, low power means less than 5 W while idling, 10+ TB of redundant storage for data resilience and integrity concerns, and performance means about 4 modern CPU cores’ worth (low-to-midrange desktop CPU performance). The model I’m reviewing is the 8GB RAM/64GB eMMC one, with a Windows 11 installation on it (not activated). Along with the review unit itself, I got sent the following accessories: The board was tested with a Lenovo 65W USB-C power adapter, because that’s what I had available. Given the specs of the board and the accessories, that should be plenty. As far as I know, USB power delivery seems to work fine and it’s not just a weird USB-C connector that requires specific voltages to work. The M.2 NVMe SSD used in this review is a 512 GB Samsung PM9A1. I got that one from another PC that really didn’t need a boot drive that large. Most of the testing was done with a fresh Fedora Server 43 installation, kernel version 6.17.7. I suggest looking at the spec sheet if you’re interested in all the fine details and available configurations. The overall connectivity has been improved with the new version of this board compared to the old board. The USB ports are all fast 10 Gbit/s ones, and we have actual PCIe connectivity to play with, although the available bandwidth is quite limited with a PCIe 3.0 x1 lane available on the port that both the M.2 M-key and PoE adapter connect to. What caught my eye was the CPU performance I’ve been proudly running an old ThinkPad T430 as a server for a while now, with some failed attempts to find a more low-power and efficient solution. The Intel N150 is now offering similar levels of performance, but in a much smaller power envelope. When it comes to more specialized functionalities, such as GPIO and the RP2040 microcontroller, I don’t currently have a solid use case for them, so they won’t be covered in this review. I might fancy giving them a go in the future though, it would be nice to get some environmental sensors on it to monitor the temperature and humidity of the server room (which is a closet). Since I also don’t have an 4G LTE modem available, I did not test the associated adapter. The way you can add expansion boards to the LattePanda IOTA is quite similar to how Raspberry Pi 5 and other similar single board computers do it: you simply run a flexible cable to an adapter board, and bam, you have extra connectivity! With the M.2 M-key adapter kit, you get the adapter itself, some mounting screws and brass stand-offs, and a tiny little flexible cable for the PCIe signal. The link speed is PCIe 3.0, with one lane available. In theory, this means a maximum of 1 GB/s of throughput. In practice and with this board and SSD combination, I got a maximum of ~810 MB/s. I expect some levels of losses with these types of setups, so in my view this seems normal. For the test, I just did a . The SSD itself supports up to 4 lanes of PCIe connectivity so that should not be a limiting factor here. The lovely part about M.2 NVMe ports is that you can use it for a lot of off-label use cases. Fancy some SATA ports? There’s an adapter for that. 2 Or a network card? Some fancy AI accelator thingy? Or a full-sized GPU? Anything will work (probably), as long as the cables and adapters are high quality, and you provide extra power to the device through other means. The only device on my network that is connected over PoE is currently an Ubiquiti Wi-Fi access point, and that is unlikely to change in the near future because that would require a full replacement of my networking gear. 3 However, I still gave this board a quick go, and I’m happy to report that it also works as an additional standalone Ethernet port. The Ethernet controller seems to be similar or the same as on the main board, and it shows up as a separate networking device. Both are Realtek NIC-s ( ), and they work with the driver. Realtek has a spotty compatibility story overall on Linux from what I’ve read, but this one seems to work fine on Fedora Server 43. I was very close to pulling the trigger and turning it into a beefy router so that I can finally move my Wireguard networks on the router as my current one cannot do more than 20 Mbit/s of Wireguard traffic, but I didn’t end up going through with that idea because of how well the SBC did in other areas. As some of you might know, I’m a fan of playing with fir- 18650 Li-ion battery cells, and I’m hoping to one day build a solar-powered server of my own (of which there are many examples ). I took some spare 18650 cells that came from an old ThinkPad battery, made sure that the voltages are more-or-less the same, and threw them on the board. Connecting the UPS board with the standoffs was fine, but the cable connecting it with the SBC was finicky. I triple-checked that the connector was the right way, but had to still use an uncomfortable amount of force to connect it all up. The battery cells themselves sit snugly on the board, and unless you drop the board, they should not fall out on their own. You’d still want to build a case around it if you’re going to actually put it to use in rough environments. The manual for the UPS board emphasizes that it only works on Windows 10/11, and sadly that seems to be the case, the UPS does not seem to show up as an USB-listed device, and tools like NUT did not find anything to monitor with a quick 5-minute investigation. The UPS board also has an interesting selection of switches that you can use to adjust the behaviour of the board, like automatically turning the board on when power comes back on, and setting an 80% battery charge limit. The first one was not really necessary to use, the board would follow whatever setting you have enabled on the SBC itself. I configured mine via UEFI settings to automatically turn on with a power adapter connected, and that worked here as well. The run time of your LattePanda IOTA with the UPS expansion board will heavily depend on your workloads and quality of your battery cells. Mine were used cells, and then I hit the board with to create some load on it. It ran for over an hour like that, and then I got bored and wanted to proceed with testing other accessories. The marketing materials mention up to 8 hours of runtime, and I suspect that with good Li-ion cells and workloads where you idle most of the time, it will likely be achievable. The board seems to trigger a hard shutdown on Linux because the host OS is not aware of a battery being connected. Not that catastrophic for most modern filesystems and database engines, but something to consider in your own workloads in case they are Linux-based. The UPS board seems to handle power connection and disconnection events well enough, it did not do anything weird when repeatedly plugging and unplugging the USB-C cable. 4 Based on the readings from a wall outlet energy meter, the board uses up to 20W when charging the cells. It’s possible for the board to pull more than that with a maximum CPU load and connected peripherals, so I wonder if that may be an issue with more intense usage scenarios. During charging and discharging cycles, even under heavy loads, the battery cells did not get hot and were at best warm to touch. It’s gigabit. Fine for my use case given that I still live in 2006 and only have devices that support gigabit Ethernet speeds at best (excluding the Ubiquiti Wi-Fi AP), but certainly less than some competing products. Compared to the LattePanda V1, the USB port performance is actually decent for my use case. I can connect up to three USB-connected storage devices to the board, so that’s exactly what I did. I set up three different USB-connected devices: For each device (including on-board eMMC device), I ran a , which puts a sequential read workload on all the drives in an infinite loop. After about 72 TB of data read in less than 24 hours, I checked the kernel logs and there were no stability issues whatsoever. The NVMe SSD started throttling due to heat, which was expected with that cheap adapter. Assuming no issues with any cables and adapters, the USB ports seem to be solid enough for running storage devices off of. Yes, it can be a horrible idea in some use cases, but at the same time my ThinkPad T430 has been excellent with USB-based storage, and that’s with one of the USB ports being coffee-stained! The eMMC chip is also more performant compared to the previous iteration, with sequential read speeds averaging around 316 MB/s, writes around 175 MB/s, and average read latency being around 0.15 ms. Certainly good enough for a boot drive. The LattePanda V1 struggled with larger displays, and when I gave it a go during this review, it would not properly display an image on my 3440x1440p monitor. The LattePanda IOTA just did it, at 60 Hz. On Fedora Workstation and GNOME, the experience was smooth. Once you start doing things in the browser, like video playback, the situation is less optimal, but as a makeshift desktop PC it is alright for most low/mid-range activities. The board came with a Windows 11 installation (not activated). As is tradition with Windows, the initial impressions are horrible, update processes running in the background made the active cooler go wild and the device felt sluggish. But after that process is done, the experience is not bad at all if you look past the OS being Windows. I did not do a thorough investigation and I suggest formatting the device boot drive either way when receiving it, but the Windows 11 installation looked clean enough, with no obvious bloatware. The LattePanda V1 had some quirks. The performance was iffy, and you had to specify a Linux kernel parameter on first boot so that Fedora Linux does not confuse the optional display interface to be an always-connected primary display. The previous version also didn’t include a real-time clock (RTC) by default, which meant that it was impossible to schedule some systemd timers as the time would always jump on boot years ahead on distros like Fedora Server. I got stuck in a reboot loop with a scheduled reboot job that way, was not fun to recover from. With the LattePanda IOTA, I have not observed any weird oddities and quirks with it. Even the kernel logs don’t show anything that’s problematic, and the RTC is handy to have around as that helps avoid the issue mentioned above. With the LattePanda V1, the cooler was not strictly required, but strongly recommended if you were going to use the board with moderate to high sustained loads. My solution was to slap an inappropriately sized heat sink to it with a thermal pad and zip ties and/or velcro strips, which looked horrible, because it was. With the LattePanda IOTA, the cooler is now a mandatory part of the assembly. It can be fitted with either a passive cooler , a case with passive cooling , or an active cooler . The active cooler does a good job of keeping the board cool, but it does get super loud at higher loads. The default fan curve is very primitive, with the fan changing it speeds in big and sudden increments. Bursty workloads certainly feel bursty with this fan. You will not want to be in the same room with this active cooler. The sound profile is very similar to a thin and light laptop, and the fan has a very strong high-pitched whine to it. Here’s an audio recording of the noise under heavy load if you’re interested (MP3 file). Recorded using a Google Pixel 8a. You can mitigate the active cooler noise issue by reducing the CPU clock speed by setting a lower power limit in UEFI settings, or on Linux, setting a lower CPU performance ceiling using driver option once on boot. This comes at the obvious cost of some raw performance, but given that CPU power scales non-linearly, you may not even notice it that much. If you are sensitive to fan noise, then do get the passive cooler and slap a Noctua fan on it, it will likely be a much better experience with both the cooling performance and noise levels. Oh, and fun fact: I got so carried away with testing that I actually forgot to remove the plastic film on the larger thermal pad that cools supporting components. And then I did about 24 hours of stress testing with that arrangement. I can confirm that the design of the board is idiot-proof, as I did not actually notice any severe throttling or thermal issues with that mistake. You can actually see the plastic film being present in a few photos of the board in this review. I still can’t believe that after all these years I ended up making that one mistake that you usually see online in tech support gore posts. The idle power consumption of the LattePanda IOTA seems to be around 4.0W, which is more than the Raspberry Pi 5 8GB with its power consumption being around 3.2W. Slightly higher compared to that, but lower than most x86 mini PC-s with idle power consumption typically in the range of 6-14W. During the disk read speed stress test, I saw a maximum of 24.4W pulled from the wall. With the disk read stress test and a full CPU stress test, I saw a peak of 36.3W, with it quickly dropping down as the CPU settled down at a lower clock speed. This board came surprisingly close to my perfect home server criteria that I had outlined earlier this year. Less than 5W when idling? Check. 10+ TB of redundant storage? Check. 4 modern cores’ worth of CPU performance? Check. Enough performance during bursty workloads? So far, yes. I then installed a fresh copy of Fedora Server 43 and moved all my home server workloads to it. The eMMC storage is used as a boot drive, writes are disabled, workloads requiring good latency and speed are on the 512GB NVMe SSD, and bulk storage is connected via two existing USB-SATA adapters taken from one of those WD Elements/MyBook external hard drive enclosures. Then it just worked. No issues. 5 The drop in the overall power consumption of my whole home server and networking stack was also immediately noticeable. Here are my observations of the CPU performance and behaviour after hitting it with an all-core CPU load: I have seen the CPU hit around 3.6 GHz with a single core load while there is nothing running in the background, but during my normal home server operations the cores are doing enough work across all 4 cores, so that doesn’t happen all that often, and 2.9 GHz is the ceiling for single core performance. The only limiting factor so far has been the 8 GB of memory on my review unit, but on the bright side that limitation forced me to review the memory usage of some of the jobs that I run on my home server, which ended up with me finding a few resource hogs and then fixing them all up. Now I can run about 30 Docker containers of various resource consumption on a single board computer, and with less than 4GB of RAM used. I set up an 8GB swap file on the SSD, just in case. Thanks to the relatively small boot drive, I also learned that even if you move the Docker folder to another location, will still clutter up your boot drive, so you’ll have to change that path in its file setting. I’m genuinely impressed with how well the LattePanda IOTA runs as a home server. The board isn’t really designed with that use case in mind, and I suspect that the Intel N150 might be doing most of the heavy lifting here, but still, very impressive! Is it the perfect home server? No, but it’s pretty damn close to my definition of it. For those interested in what options are available on the board via its UEFI settings, here are some screenshots of the settings. 6 If the LattePanda IOTA with its adapters fits your project requirements, you’re aware of its limitations, and the price is right, then I believe it’s a solid choice for your next project. My testing didn’t immediately break it, even when I forgot to remove the plastic film on one of the thermal pads. The current pricing of it and its accessories seem to be roughly in the ballpark of the Raspberry Pi 5 8GB (based on prices in Estonia). Boards like the Zimaboard 2 (have not tested it myself) are more expensive, but they’re also catering to a slightly different audience and have better specs, like 2.5G Ethernet ports and SATA ports with power delivery suitable for running two 3.5" hard drives straight from the board. It’s hard to beat the bargain that you can get from a used mini PC or NAS, but it won’t come with the charm, low power consumption and bragging rights that a single board computer gets you, especially if you’re using it for an off-label use case like I am. 7 In the meantime, I’ll keep rocking it as a home server. In case something noteworthy happens, I’ll update this post, which is brought to you by the very same LattePanda IOTA at the time of publishing. this also marks the first time that I’ve been sent a review sample throughout the course of running this blog!  ↩︎ do note that with most M.2 PCIe->SATA adapters, the controller of the adapter determines how good of an experience you will have. With some, I’ve read that the controllers may not handle some failure scenarios well, one device having issues may throw off the whole controller, and now you have a bigger mess.  ↩︎ the earliest PC motherboard with a gigabit Ethernet connection that I’ve personally used was manufactured in 2006. That’s how long gigabit Ethernet has been around for in the consumer space.  ↩︎ say that 10 times in a row!  ↩︎ I know, that usually does not happen on this blog.  ↩︎ being a prolific open source influencer does not bring in as much money as you’d think, so I haven’t bought a proper capture device yet.  ↩︎ no, but seriously, I cannot be the only one who has a strange affection towards SBC-s with their bare PCB-s. I can’t tell a capacitor from a resistor, but the boards are just so damn cool, right?  ↩︎ active cooler M.2 M-key expansion board 51W PoE expansion board M.2 4G LTE expansion board UPS expansion board CPU: Intel N150, 4 cores, 4 threads, up to 3.6 GHz RAM: 8/16 GB (depending on model) Onboard storage: 64/128GB eMMC (depending on model) Networking: gigabit Ethernet port Real-time clock: yes! USB hard drive (Seagate Basic) USB SATA SSD (Samsung QVO 4TB in ICY BOX USB-SATA adapter) USB NVMe SSD (512 GB Samsung PM9A1 with some random cheap USB to M.2 NVMe adapter) 2.9 GHz for a short time period (10-15 seconds), with CPU hovering around 80°C 2.2-2.3 GHz after that, with the CPU dropping to around 70°C Advanced -> ACPI Advanced -> CPU configuration Advanced -> Super IO configuration Advanced -> Serial port 1 configuration Advanced -> SMART Fan Control Advanced -> Trusted Computing Advanced -> NVMe configuration (no device connected at time of screenshot, oops) Advanced -> Power configuration Advanced -> USB configuration Advanced -> Serial Port console redirection Advanced -> SDIO configuration Advanced -> Realtek PCIe Ethernet controller Chipset -> System Agent (SA) configuration Chipset -> Device configuration Security -> Secure Boot Save & Exit this also marks the first time that I’ve been sent a review sample throughout the course of running this blog!  ↩︎ do note that with most M.2 PCIe->SATA adapters, the controller of the adapter determines how good of an experience you will have. With some, I’ve read that the controllers may not handle some failure scenarios well, one device having issues may throw off the whole controller, and now you have a bigger mess.  ↩︎ the earliest PC motherboard with a gigabit Ethernet connection that I’ve personally used was manufactured in 2006. That’s how long gigabit Ethernet has been around for in the consumer space.  ↩︎ say that 10 times in a row!  ↩︎ I know, that usually does not happen on this blog.  ↩︎ being a prolific open source influencer does not bring in as much money as you’d think, so I haven’t bought a proper capture device yet.  ↩︎ no, but seriously, I cannot be the only one who has a strange affection towards SBC-s with their bare PCB-s. I can’t tell a capacitor from a resistor, but the boards are just so damn cool, right?  ↩︎

0 views
./techtipsy 3 months ago

I found the best use case for AI

In my professional career, I’ve started experimenting with LLM-based tooling to see if they are all hype or if there is some actual substance in it. I’ve seen the good and bad parts, but there’s one use case that worked out really well within our team. 1 Tooling like Claude Code and Cursor rely on various text files that describe the project, the practices used in it and instructions on how to perform certain actions in the repository, with it mostly being about highlighting project-specific knowledge. A lot of that can be generated with the tooling, and it’s a good practice to update those instructions whenever you notice an LLM-based tool doing something unexpected or plain wrong on a constant basis. The next time your coworker is going on a longer vacation, sneak in an instruction that sets their name as the name for the tool. It’s even better if it’s added with a bunch of legitimate changes, like a 1000-line PR that does something useful. It can be something as simple as: And just like that, you’ve replaced your coworker with AI! Now, when your coworker returns from vacation, see how long it will take until they catch on. In our team, it took about 3 working days until they discovered what was causing that. It’s such a basic and dumb prank, but it cheered me and my team up a lot shortly after we set the stage for this prank, because Claude Code constantly referred to itself as Heino in all sorts of situations, and especially after I grilled the LLM-based tool about it doing a poor job. 2 Given that we were doing a lot of heavy lifting around that time in the project with deadlines looming, I really needed that laugh. One odd thing that I observed is that Claude Code would quite often start calling me Heino. That, and the fact that Claude Code would usually ignore about a third of the instructions given to it, helped me understand one of its limitations well. it’s a vibes-based world out there.  ↩︎ these are paraphrased, but you get the idea.  ↩︎ it’s a vibes-based world out there.  ↩︎ these are paraphrased, but you get the idea.  ↩︎

1 views
./techtipsy 3 months ago

The day IPv6 went away

I take pride in hosting my blog on a 13-year old ThinkPad acting as a home server , but sometimes it’s kind of a pain. It’s only fair that I cover the downsides of this setup in contrast to all the positives. Yesterday, I happened to notice that a connection to a backup endpoint was gone. Okay, happens sometimes. Then I went into the router and noticed that hey, that’s odd, there’s no WAN6 connection showing up. All gone. Just as if I had gone back to a crappy ISP that only provides IPv4 ! Restarting the interface did not work, but a full router restart worked. Since the IPv4 address and IPv6 prefix are all dynamic, that meant that my DNS entries had just gone stale. I do have a custom DNS auto-updater script for my DNS provider, but DNS propagation takes time. Luckily not a lot of time, my uptime checker only reported downtime of 5-15 minutes, depending on the domain. Here’s what it looked like on OpenWRT. Impact to my blog? Not really noticeable, since IPv4 kept trucking along. Perhaps a few IPv6-only readers may have noticed this. 1 I can always move to a cheap VPS or the cloud at a moments’ notice, but where’s the fun in that? I can produce AWS levels of uptime at home, thankyouverymuch ! I think I’ll now need to figure out some safeguards, even if it means scheduling a weekly router reboot if the WAN6 interface is not up for X amount of time. That, and better monitoring. if you are that person, say hi!  ↩︎ if you are that person, say hi!  ↩︎

0 views
./techtipsy 3 months ago

Why Nextcloud feels slow to use

Nextcloud. I really want to like it, but it’s making it really difficult. I like what Nextcloud offers with its feature set and how easily it replaces a bunch of services under one roof (files, calendar, contacts, notes, to-do lists, photos etc.), but no matter how hard I try and how much I optimize its resources on my home server, it feels slow to use, even on hardware that is ranging from decent to good. Then I opened developer tools and found the culprit. It’s the Javascript. On a clean page load, you will be downloading about 15-20 MB of Javascript, which does compress down to about 4-5 MB in transit, but that is still a huge amount of Javascript. For context, I consider 1 MB of Javascript to be on the heavy side for a web page/app. Yes, that Javascript will be cached in the browser for a while, but you will still be executing all of that on each visit to your Nextcloud instance, and that will take a long time due to the sheer amount of code your browser now has to execute on the page. A significant contributor to this heft seems to be the bundle, which based on its name seems to provide some common functionality that’s shared across different Nextcloud apps that one can install. It’s coming in at 4.71 MB at the time of writing. Then you want notifications, right? is here to cover you, at 1.06 MB . Then there are the app-specific views. The Calendar app is taking up 5.94 MB to show a basic calendar view. Files app includes a bunch of individual scripts, such as ( 1.77 MB ), ( 1.17 MB ), ( 1.09 MB ), ( 0.9 MB which I’ve never used!) and many smaller ones. Notes app with its basic bare-bones editor? 4.36 MB for the ! This means that even on an iPhone 13 mini, opening the Tasks app (to-do list), will take a ridiculously long time. Imagine opening your shopping list at the store and having to wait 5-10 seconds before you see anything, even with a solid 5G connection. Sounds extremely annoying, right? I suspect that a lot of this is due to how Nextcloud is architected. There’s bound to be some hefty common libraries and tools that allow app developers to provide a unified experience, but even then there is something seriously wrong with the end result, the functionality to bundle size ratio is way off. As a result, I’ve started branching out some things from Nextcloud, such as replacing the Tasks app with using a private Vikunja instance, and Photos to a private Immich instance. Vikunja is not perfect, but its 1.5 MB of Javascript is an order of magnitude smaller compared to Nextcloud, making it feel incredibly fast in comparison. However, with other functionality I have to admit that the convenience of Nextcloud is enough to dissuade me from replacing it elsewhere, due to the available feature set comparing well to alternatives. I’m sure that there are some legitimate reasons behind the current state, and overworked development teams and volunteers are unfortunately the norm in the industry, but it doesn’t take away the fact that the user experience and accessibility suffers as a result. I’d like to thank Alex Russell for writing about web performance and why it matters, with supporting evidence and actionable advice, it has changed how I view websites and web apps and has pushed me to be better in my own work. I highly suggest reading his content, starting with the performance inequality gap series. It’s educational, insightful and incredibly irritating once you learn how crap most things are and how careless a lot of development teams are towards performance and accessibility.

0 views
./techtipsy 4 months ago

./project2038: can I keep the Orange Pi Zero running until 2038 and beyond?

Start of experiment: September 2025 Post last updated: October 2025 Check the live status of my Orange Pi Zero here! I love the Orange Pi Zero. It’s tiny, uses very little power and it’s just neat! It’s also the subject of the very first post on my blog, which makes it a bit special. Unfortunately I haven’t really found a good use case for it, given that its performance is quite limited and the CPU is a 32-bit ARM CPU with 4 relatively weak cores, which rules out using it as a Docker container host due to the architectural limitations. I’ve currently set it up as an additional online backup endpoint, tacking a 4 TB hard drive to it and letting restic handle the rest. The board also has a few quirks at the moment that I’ve worked around. For example, rebooting seems to be broken, and it’s unlikely to get fixed any time soon. I resolved it by simply not rebooting it 1 , at least not on a regular schedule, anyway. I’m hoping that any short-term power outages at home will take care of the need to reboot it. It also runs quite hot in its stock Armbian configuration, which I worked around by running on startup as that forces the CPU to always run at its slowest clock speed (480 MHz). Without it, I found that this board can run its CPU at 105°C, and it does have a thermal shutdown feature. This board has been featured in a few previous posts as well, and even then it was quite underpowered: Now that I have it set up, will it be able to survive to year 2038 and beyond? Only time will tell. Which issue will we run into first? Plausible options based on my previous experience: The board is currently running the latest version of Armbian, and I might occasionally refresh its version from time to time. If you like Armbian, then please support them! They’re doing great work with keeping all sorts of SBC-s up and running with usable versions of Debian and Ubuntu Linux. What are the chances that the day I make this project public, AWS suffers a massive outage? Poetic in a way. And yes, my website and the Orange Pi Zero were fully operational. the first time in my career that the solution ended up being “have you tried not turning it off and on again?”  ↩︎ the little Wi-Fi AP that could seedbox on a wall database optimization adventures on low-end hardware the cheap 8GB SD card craps out component on the board dies from heat-related issues the backup hard drive dies mounted with option, so should not prevent booting the USB power supply dies board loses Armbian support completely (currently under community maintenance status) the first time in my career that the solution ended up being “have you tried not turning it off and on again?”  ↩︎

0 views
./techtipsy 4 months ago

Comparing the power consumption of a 30 year old refrigerator to a brand new one

Our apartment came with a refrigerator. It was alright, it made things cold, it kept them cold. It was also incredibly noisy, and no matter how much I fiddled with its settings, the compressor was always running and any ice cream left in the deep freeze part got rock solid. 1 When I hooked up one of my smart plugs to it, I soon learned why: one of the two compressors was running all the time. This lead to a huge block of ice forming on the back of the main compartment, and the deep freeze section icing up really quickly. I suspect that the thermostat may have been busted and contributed to the issue, but after trying to repair a dishwasher, getting cut about 10 times on my hands and losing, I had zero interest in attempting another home appliance repair on my own. The refrigerator was the UPO Jääkarhu ( jääkarhu means polar bear in Finnish), and the manual that the previous owner had still kept around had July 1995 on it, meaning that the refrigerator was about the same age as I am: 30 years old. Not bad at all for a home appliance! I shopped around for a new refrigerator and got a decent one that’s about the same size, except newer. I won’t mention the brand here because they didn’t pay me anything and this post really isn’t a refrigerator review, but it was in the low-to-midrange class, sporting a “no frost” feature, and could be bought for about 369 EUR in Estonia in the summer of 2025. Based on some napkin math, I assumed that within a few years, the electricity savings will cover the upfront cost of buying the new refrigerator, assuming that it doesn’t break down. After letting it run for a while, I had some data! Turns out that the old one consumed 3.7x more electricity compared to the new one. Here are some typical daily power consumption numbers: The difference is more noticeable if we zoom out a bit. Moving from ~78 kWh to ~21 kWh consumed each month is nice. Around the time we replaced the refrigerator, we also got a working dishwasher, and with those two combined I saw a solid 10-20% decrease in the overall power usage of the whole apartment. We went from using 334 kWh in June to 268 kWh in July, 298 kWh in August and 279 kWh in September. Remember that napkin math I made earlier? If we assume about 57 kWh savings per month, and an average electricity price of 17 cents per kWh (based on actual rates during August 2025), it will take about 38 months or a bit over 3 years for the new refrigerator to pay off in the most pessimistic scenario. The pay-off will likely be larger if we account for energy prices usually rising during winter. Don’t worry about the old refrigerator, we gave it away to a person who needed one for their new home in the short term as a stopgap until they get further with renovation work. Even got some good chocolate for that! The only point of concern with this change is that I don’t really trust the new refrigerator to last as long as the old one. The previous one was good for 30 years if you look past the whole ice buildup, heat and noise, but with the new one I suspect that it’s not going to last as long. At least my new refrigerator doesn’t have a Wi-Fi-connected screen on it! honestly, I miss that a lot, the ice cream was colder for longer, I ate it in smaller bites and savored it more.  ↩︎ old refrigerator: 2.6 kWh new refrigerator: 0.7 kWh honestly, I miss that a lot, the ice cream was colder for longer, I ate it in smaller bites and savored it more.  ↩︎

0 views
./techtipsy 4 months ago

Testing two 18 TB white label SATA hard drives from datablocks.dev

This post is NOT sponsored, the products were bought with my hard-earned money. I’ve been running a full SSD storage setup for a few years in my home server and I’ve been happy with it, except for the storage anxiety that I get with running small pools of fast storage, which is why I started looking at how the hard drive market is doing. Half of tech YouTube has been sponsored by companies like ServerPartDeals, so they were one of the first places I looked at, but they seem to only operate within the US and the shipping+taxes destroy any price advantages from ordering there to Estonia (which is in Europe). At some point I stumbled upon datablocks.dev , which seems to operate within a similar niche, but in Europe and on a much smaller scale. What caught my eye were their white label hard drive offerings. Their website has a good explanation on the differences between recertified and white label hard drives. In short: white label drives have no branding, have no or very low number of power-on hours, may have small scratches or dents, but are in all other aspects completely functional and usable. White label drives also have a price advantage compared to branded recertified drives. Here’s one example with 18 TB drives, the recertified one is 16.7% more expensive compared to the white label one, and the only obvious difference seems to be the sticker on the drive. I highly suspect that the white label one is also manufactured by Seagate based on the physical similarities. I took some time to think things over and compared the pricing of various drives. The drives were all competitively priced between each other, with the price per terabyte hovering around 13 EUR/TB, so it didn’t matter much which drive size you picked, you’d still get a pretty solid deal. It was also a better deal compared to using an WD Elements/My Book drive of the same size. I decided to go with two 18 TB hard drives. I considered buying the 20 TB or 22 TB capacities, but decided to go with 18 TB because it’s the largest single hard drive that I can easily and quickly buy a replacement for in the form of a WD Elements/My Book drive. The stock on is quite volatile, the drives are in stock when new batches arrive, but they can also quickly go out of stock. I saw this live with the 22 TB hard drives, one day there are 35 left, the next day there can be 7 left, and then only one lone drive. At the time of writing, the 18 TB model that I bought is out of stock, so my choice to go with a slightly smaller but more easily replaceable one is validated. For those that have followed my blog for a while will know that I’m a huge fan of all-SSD server builds, especially this one by Jeff Geerling that I still consider building from time to time. If I dislike noise, higher power usage and slower performance, then why did I get the hard drives? It’s simple, really: I now have an actual closet that I can stash my home server in, meaning that noise isn’t that big of a worry, and as long as my home server takes about the same amount of power as my refrigerator or dishwasher, then that’s fine. SSD prices still haven’t gone down as much as I’ve hoped over the years, so the all-SSD build ideas that I have are way outside my budget. The drives arrived in a reasonable time window. The packaging was adequate, although I was slightly concerned with the cardboard box showing signs of something hitting it hard. The drives were packaged within sealed antistatic bags, and with ample bubble wrap surrounding them. Just as described, the drives did have slight scratches and very minor dents in them, but in all other aspects they looked like new. Before putting them to use, I formatted the drives using . It took a full 24 hours to do a full drive write. The write performance peaked at 275 MB/s and slowed down to 123 MB/s at the end, which is expected. 1 I also had to choose a larger block size for because otherwise it could not handle the drive, resulting in the command being . I unfortunately did not save the SMART data from the time I received the drives, but the contents were as expected, there were no more than a few power on hours and other metrics were OK. Keep in mind that it’s also possible to reset SMART data on a drive so this information cannot be taken at face value. The drives are noisy, as expected. They run at 7200 RPM and do the usual clicks and clacks that a normal hard drive does. If this bothers you, use foam to fix it. The soft side of a sponge can work just as well. With these drives I’ve now followed my own advice and tiered my storage: two 1 TB SSD-s for the things that benefit from good speed and latency (databases, containers), and 18 TB hard drives for bulk storage, backups and less frequently used data. Coming from an all-SSD build, I expected the performance to drop in day-to-day operations, but in most cases I cannot tell a difference. My family photos load just fine, media plays back well, and backups take slightly longer, which isn’t noticeable due to them running during the night. Only when I look at the Prometheus node exporter graphs do I notice that sometimes the server is waiting behind the disks a bit more due to higher . The power usage did shoot up as a result, roughly 10-20 W. Not ideal, but my whole networking and home server setup is idling at below 45 W, and I’ve had less efficient home servers in the past, so it’s not that big of a deal. In this configuration, the drives run quite cool. During formatting on a hot day, I saw them go up to a maximum of 51°C, but in general use they sit at around 38-42°C. Overall, I’m reasonably happy with the drives. I expect these to last me at least 5 years, and I’m probably going to switch one of the drives out a bit sooner to reduce the risk of a full drive pool failure. They’ve made it the first 50 days, so that’s good! Oh, and here’s the output for the disks after running them for about two months: hard drives are expected to be slower at the end of the drive because of their design, the platter rotates at 7200 RPM but the end of the drive is located at the inner tracks of the platter, near the center of the spindle, which results in a slower effective speed. Math is cool!  ↩︎ hard drives are expected to be slower at the end of the drive because of their design, the platter rotates at 7200 RPM but the end of the drive is located at the inner tracks of the platter, near the center of the spindle, which results in a slower effective speed. Math is cool!  ↩︎

0 views
./techtipsy 5 months ago

Samsung 870 QVO 4TB SATA SSD-s: how are they doing after 4 years of use?

I’ve been running four Samsung 870 QVO 4TB SATA SSD-s for a while now. They’re old enough to be popping up on the second-hand market, so I thought it would be good to provide a few additional data points for those thinking about buying one. Mine have mainly been used in a home server setting, with one also being used as a backup drive at times. I initially got these drives because I found the noise that hard drives generated to be unacceptably high in a small apartment. They’re also quite a bit faster than hard drives and use significantly less power. The drives were manufactured in 2021, two in April, two in June. Overall, I haven’t seen many issues with the drives, and when I did, it was a Linux kernel issue. These drives are still performing at the expected speed and at during write-heavy workloads they only drop down to 140-170 MB/s, which is considerably better than what the cheapest SATA SSD-s can do in the same scenario, those can go a low as 30 MB/s or even worse. I did notice that one of the drives reported 4 bad blocks over its lifetime, and oddly enough it’s the drive with the least amount of power-on hours. The reported SSD lifetime is reported to be around 94%, with over 170+ TB of data written. At this point, the drives are not even close to the 1440 TBW endurance limit that Samsung has published. The price hasn’t gone down as much as I’ve hoped over the years. At the time I bought the drives, they were roughly 400 EUR a piece, and now they’re selling for about 270 EUR a piece. It’s still significantly cheaper, but back in 2021-2022 there was more optimism about SSD prices coming down over the years. For comparison, 4TB SSD-s from other manufacturers and form factors (NVMe, SATA) start from about 190-200 EUR, however I am not fully confident that those perform at the same level, at least under sustained writes. For those curious, here’s the full output for all the individual drives. S5STNF0R405312K S5STNF0R407424M S5STNF0R614596K S5STNF0R614601K

0 views
./techtipsy 5 months ago

The unreasonable effectiveness of the pancake rule

Being chronically late to meetings sucks. Not only is it very rude, but you’re signalling that you don’t value your coworkers’ time. However, I’ve picked up a technique that works unreasonably well within a team. 1 If you are late to the first meeting of the day three times within a quarter, then you will have to make pancakes for the whole team. Let’s say that you have a daily stand-up taking place at 10:00. Arriving at 10:00 :59: completely OK. Arriving at 10:01 :00: You’re one step closer to making pancakes! Keep in mind that you may hit some obstacles when implementing this rule, so feel free to adjust it. When proposing this idea in my current team, I learned that the office does not offer pancake-making facilities. The pancakes can be substituted for other types of cake or bringing in something else, as long as the team gives prior approval of that modification. The pancake strikes can also be pooled together and spent with your teammates if they wish to do so. If you’re struggling with your team being late to your daily meeting(s), then go ahead and add this rule to the working agreement. You do have a working agreement set up, right? Right? And a free security tech tip to close out: if you see an unlocked work laptop at the office, open your internal chat application of choice on it and try posting to a public channel that you’ll be bringing cake/beers/candy to the office. Works wonders for enforcing the habit of locking your laptop up when leaving the desk! to be fair, the sample size is two, but it has worked out really well in both!  ↩︎ to be fair, the sample size is two, but it has worked out really well in both!  ↩︎

0 views
./techtipsy 6 months ago

Those cheap AliExpress 18650 Li-ion cell power bank enclosures suck, actually

I had a few old ThinkPad batteries lying around. They were big, bulky and not holding much of a charge. Inside those were standard 18650 Li-ion battery cells. I have two TOMO M4 power banks around, and they are fantastic for reusing these old 18650 battery cells inside them. You can even mix and match cells without a worry because they are individually addressed, meaning that any issues with battery charge levels and voltages differing between cells are not a concern. Unfortunately the TOMO M4 lacks modern features, such as USB-C ports and USB-C PD outputs at higher voltages and currents, which makes it less useful and convenient in 2025. I haven’t found any newer designs from them as well that are just as cool. I still wanted to reuse those 18650 cells, so I went to AliExpress and bought some 18650 battery enclosures for testing. One holds 8 cells, another one 10 cells, and the largest one could fit 20 cells inside it. Unfortunately, they all suck and are likely a huge fire hazard in the wrong hands. For the 8-cell variant, I used newly bought 18650 Li-ion cells that were charged up to the same level. This battery enclosure worked quite well, until it didn’t. For whatever reason, the enclosure could not charge itself and other devices at the same time. With the 10-cell variant, I used two different batches of used 18650 Li-ion cells from old ThinkPad batteries, charging them up first. That one worked fine, until it also failed in weird ways. It got quite hot during charging/discharging cycles, and eventually the segment display that’s responsible for displaying the charge level stopped showing certain segments. At that point I lost trust in that enclosure, too. I had the most fun with the 20-cell battery enclosure. My first fuck-up involved using two old battery cells with different charge levels, which resulted in some magic smoke coming out of the PCB of the enclosure itself. Somehow that didn’t break the battery bank enclosure, so I crammed 20 charged up used and mixed 18650 Li-ion cells in it and started charging and discharging it. The batteries got quite hot, likely around 50-70°C based on the temperature readings of my hand. 1 At that point I realized I was playing with fire and stopped. The USB-C PD behaviour was different on all power banks. Some were fine with powering a ThinkPad laptop with the appropriate cable, some were flaky with setting the power levels, and some were just useless with certain cable or device combinations. The battery banks rely on a very simple arrangement: the 18650 Li-ion cells are connected in parallel, and the resulting 3.7-4.2V is then boosted up for the appropriate voltage on the control board. This carries risks: if you insert two or more Li-ion cells with different voltages, then one will start charging the others to bring the cells to the same voltage, and that can become uncontrolled and result in a cell overheating and/or exploding. It’s also a horrible idea to mix and match used cells of different capacities and wear levels as they will charge and discharge at different rates. In my experience, a cheap DIY power bank enclosure also carries the risk of attracting attention at an airport security check. After learning how bad these can be, that is an entirely justified suspicion. I ended up throwing all the battery bank enclosures out, the hardware failures and issues made me too concerned about one of these starting a fire. I like controlled fires, but the uncontrolled ones are really not my cup of tea. If you know of a 18650 Li-ion cell battery bank enclosure that works like the TOMO M4 but has modern features (USB-C port, USB-PD, can charge laptops etc.) then please do reach out to me as I’d love to test one out. You can find the contact details below the post. 50-55°C feels very hot to the touch, so it’s a good rule of thumb (no pun intended) for determining the minimum temperature of a hot surface by hand. Disclaimer: not physics advice.  ↩︎ 50-55°C feels very hot to the touch, so it’s a good rule of thumb (no pun intended) for determining the minimum temperature of a hot surface by hand. Disclaimer: not physics advice.  ↩︎

0 views
./techtipsy 6 months ago

The 'politsei' problem, or how filtering unwanted content is still an issue in 2025

A long time ago, there was a small Estonian website called “Mängukoobas” (literal translation from Estonian is “game cave”). It started out as a place for people to share various links to browser games, mostly built with Flash or Shockwave. It had a decent moderation system, randomized treasure chests that could appear on any part of the website, and a lot more. 1 What it also had was a basic filtering system. As a good chunk of the audience was children (myself included), there was a need to filter out all the naughty Estonian words, such as “kurat”, “türa”, “lits” and many more colorful ones. The filtering was very basic, however, and some took it to themselves to demonstrate how flawed the system was by intentionally using phrases like “politsei”, which is Estonian for “police”. It would end up being filtered to “po****ei” as it also contained the word “lits”, which translates to “slut” 2 . Of course, you could easily overcome the filter by using a healthy dose of period characters, leading to many cases of “po.l.i.t.sei” being used. With the ZIRP phenomenon we got a lot of companies wanting to get into the “platform” business where they bring together buyers and sellers, or service providers and clients. A lot of these platforms rely on transactions taking place only on their platform and nowhere else, so they end up doing their best to avoid the two parties from being in contact off-platform and paying out of band, as that would directly cut into their revenue. As a result, they scan private messages and public content for common patterns, such as e-mails and phone numbers, and block or filter them. As you can predict, this can backfire in a very annoying way. I was looking for a cheap mini PC on a local buy-sell website and stumbled on one decent offer. I looked at the details, was going over the CPU model, and found the following: Oh. Well, maybe it was an error, I will ask the seller for additional details with a public question. The response? I never ended up buying that machine because I don’t really want to gamble with Intel CPU model numbers, and a few days later it was gone. It’s 2025, I’m nearing my mandatory mid-life crisis, and the Scunthorpe problem is alive and well. fun tangent: the site ended up being like a tiny social network, eventually incorporating things like a cheap rate.ee knock-off where children were allowed to share pictures of themselves. As you can imagine, this was a horrible, horrible idea, as it attracted the exact type of person that would be interested in that type of content. I got lucky by being so poor that I did not have a webcam or a digital camera to make any pictures with, and I remember that fondly because someone on MSN Messenger was very insistent that I take some pictures of myself. Don’t leave children with unmonitored internet access!  ↩︎ “slut” is also an actual word in Swedish which translates to “final”. I think. I’m not a Swedish expert, actually.  ↩︎ fun tangent: the site ended up being like a tiny social network, eventually incorporating things like a cheap rate.ee knock-off where children were allowed to share pictures of themselves. As you can imagine, this was a horrible, horrible idea, as it attracted the exact type of person that would be interested in that type of content. I got lucky by being so poor that I did not have a webcam or a digital camera to make any pictures with, and I remember that fondly because someone on MSN Messenger was very insistent that I take some pictures of myself. Don’t leave children with unmonitored internet access!  ↩︎ “slut” is also an actual word in Swedish which translates to “final”. I think. I’m not a Swedish expert, actually.  ↩︎

0 views
./techtipsy 6 months ago

How to run Uptime Kuma in Docker in an IPv6-only environment

I use Uptime Kuma to check the availability of a few services that I run, with the most important one being my blog. It’s really nice. Today I wanted to set it up on a different machine to help troubleshoot and confirm some latency issues that I’ve observed, and for that purpose I picked the cheapest ARM-based Hetzner Cloud VM hosted in Helsinki, Finland. Hetzner provides a public IPv6 address for free, but you have to pay extra for an IPv4 address. I didn’t want to do that out of principle, so I went ahead and copied my Docker Compose definition over to the new server. For some reason, Uptime Kuma would start up on the new IPv6-only VM, but it was unsuccessful in making requests to my services, which support both IPv4 and IPv6. The requests would time out and show up as “Pending” in the UI, and the service logs complained about not being able to deliver e-mails about the failures. I confirmed IPv6 connectivity within the container by running and running a few and commands with IPv6 flags, had no issues with those. When I added a public IPv4 address to the container, everything started working again. I fixed the issue by explicitly disabling the IPv4 network in the Docker Compose service definition, and that did the trick, Uptime Kuma made successful requests towards my services. It seems that the service defaults to IPv4 due to the internal Docker network giving it an IPv4 network to work with, and that causes issues when your machine doesn’t have any IPv4 network or public IPv4 address associated with it. Here’s an example Docker Compose file: That’s it! If you’re interested in different ways to set up IPv6 networking in Docker, check out this overview that I wrote a while ago.

0 views
./techtipsy 6 months ago

3D printing is pretty darn cool, actually

I love 3D printing. Out of all the tech hype cycles and trends over the last decade, this one is genuinely useful. There’s simply something magical about being able to design or download a model from the internet, send it to a machine, and after a few hours you get an actual physical object in return! I don’t own a 3D printer myself, but I’ve had access to people who are happy to help out by printing something for me. So far I’ve printed the following useful things: There’s so much more that I’d want to print, like various battery holders, controller stands, and IKEA SKÅDIS mounts . There’s also the option of downloading and printing a whole PC case , which is incredibly tempting. Will I finally be able to build the perfect home server according to my very specific requirements? Probably not, given how often my preferences change, but it would be incredibly cool! And yet I don’t own a 3D printer. The main obstacle for me is the time, I feel like in order to be successful with a 3D printer, I’ll need to at the very least learn the basics of filaments, their properties, what parameters to configure and how, how to maintain a 3D printer, how to fix one when it breaks, how to diagnose misalignment issues etc. I’ll also need space for one, extruding hot melting plastic seems like a thing that I’d want to host in a proper workshop and with actual ventilation. It’s a whole-ass hobby, not a half-ass one. Durability can be problematic with 3D prints, even in my limited experience. For example, I tried positioning the Makita vacuum cleaner holder differently, but ended up putting too much strain on the design, which eventually lead to it completely failing. In other cases, filaments like PLA aren’t suitable for designs where they are attached to warm or hot computer parts, they will warp like crazy. I appreciate the hell out of anyone that shares their designs with the world, and especially those that allow remixing or customizing their designs. There are fantastic designs and ideas out there on sites like Printables , and the creativity that’s on display warms my heart. a Makita vacuum cleaner holder a dual vertical laptop stand it’s such a simple and cheap design, and yet it works incredibly well if you add some rubberized material to the bottom and inside the laptop holder a dual HDD adapter for a Zimaboard a stand for the Steam Deck a carrying case insert for the Steam Deck a case for the Orange Pi Zero

0 views