Posted in Computer Hardware on 11 Aug 2024 at 15:52 UTC
Do you ever have those ideas that are really time consuming for not much reward? I get those a lot, and this one lodged in my head.
I've been running a Dell Wyse N06D thin client with a pair of 2.5" SSDs in USB enclosures cable-tied to it as my mail server for a while now, it works... but its a bit... rough.
"The motherboard in this is pretty small... I could put it into a 1U enclosure along with a power supply and drives and have plenty of room left over."
"In fact... I could build a dual-node one!"
"I don't need a second node and don't know what I'd do with it, but..."
And so that's how this project began.
Posted in Computer Hardware on 04 Jun 2024 at 19:14 UTC
Earlier this year, I built a server using a Supermicro X9DRi-LN4F+ motherboard in a custom case (build thread), it is loud. It is very loud.
My phone running some random sound meter app is scientific, right?
Before starting this project, I took some baseline measurements - at idle, I recorded a noise level of 30 decibels in front of the server and both CPUs were hovering around 40C, after 10 minutes of running stress-ng --cpu 32
, the recorded noise level was 73 decibels, the front CPU was hovering around 55°C and the rear CPU, ingesting the pre-heated air from the front CPU cooler was sitting around 75°C.
Not ideal.
I've always felt water cooling was unnecessary and overkill for computers... but with a server I can hear throughout the house whenever a CI job spins up on one of my projects, I'm willing to try it.
Posted on 31 Aug 2022 at 16:36 UTC
So its been over 2 years since I last posted anything on this website, I'm still around though.
Those of you who follow me on GitHub have probably seen that I've been spending a lot of time on-and-off developing rehex (which I should probably write about here at some point), and besides that, most of my time has been taken up between my day job and a never-ending stream of repairs around the house.
Nothing exciting, just figured it was about time I put something here before people started auctioning off the furniture :v
Posted in Software Development on 27 May 2020 at 21:39 UTC
At the end of the last article (In September 2017 actually), I had a fully automated regression testing system for IPXWrapper. In September of 2019, after two years of not touching the system and doing a little work on IPXWrapper itself, I felt it was time to install Windows updates in the VM images... and that's where everything went wrong....
Posted in Software Development on 07 Oct 2019 at 18:48 UTC
The GNU Make shell
function executes a shell command, expanding to whatever it wrote to standard output. If the command fails, thats just fiiine - however much it did or didn't output is what you get.
command_output := $(shell command)
I use the shell function for (among other things) getting compiler flags necessary for using libraries (e.g. from pkg-config
), and Make's behaviour of ignoring these errors is rather annoying, since it can mask the actual error with pages of output before getting to a build command that actually fails. Sometimes it can even mess up the compiler flags to the point you (or at least I) spend ages hunting down a phantom problem that doesn't exist.
Weirdly, I couldn't find any good solution on the web, with a bit of experimentation I wound up developing the following macro:
# Wrapper around the $(shell) function that aborts the build if the command # exits with a nonzero status. shell-or-die = $\ $(eval sod_out := $(shell $(1); echo $$?))$\ $(if $(filter 0,$(lastword $(sod_out))),$\ $(wordlist 1, $(shell echo $$(($(words $(sod_out)) - 1))), $(sod_out)),$\ $(error $(1) exited with status $(lastword $(sod_out)))) WX_CXXFLAGS := $(call shell-or-die,wx-config --cxxflags base core aui propgrid adv) WX_LIBS := $(call shell-or-die,wx-config --libs base core aui propgrid adv)
If you don't mind depending on GNU Make 4.2 (a bit too new for my tastes), if can be simplified to:
shell-or-die = $\ $(eval sod_out := $(shell $(1)))$\ $(if $(filter 0,$(.SHELLSTATUS)),$\ $(sod_out),$\ $(error $(1) exited with status $(.SHELLSTATUS)))
Posted in Linux on 28 Mar 2019 at 18:49 UTC
The CI pipeline for one of my projects generates coverage reports as a collection of HTML files, which are published on one of my web servers. Each report is only ~8MB, but that starts to add up pretty quickly after a few dozen commits, so I wanted to compress the reports on disk and have them decompressed as needed rather than using up my precious disk space.
Strangely, this doesn't seem to be a widely-used (or at least well-documented) Apache configuration. All references I found were out of date or didn't do what I wanted.
So here's how I got it working...
Posted in Software Development on 06 Mar 2018 at 21:39 UTC
In 2014 I wrote a fairly comprehensive test suite for IPXWrapper, which tests it end-to-end, from the APIs through to the network traffic they generate and process. It depends on a meticulously configured set of Windows and Linux machines, which I had duplicated using several different versions of Windows.
Eventually bit-rot set in and some of the Windows VMs became unusable for quick testing; sat installing updates whenever I booted them, broke themselves in odd ways, etc. Also my workstation doesn't have enough RAM for Chrome and several Windows VMs at the same time. No machine does.
...Posted in Software Development on 22 Dec 2017 at 15:29 UTC
Today I was writing some C++ and wanted to add a private struct within a class for storing some data, but not just any struct - I wanted a private abstract base struct with a couple of implementations.
So I wrote something like this:
...
That didn't compile, GCC gave me the following error and Google wasn't terribly helpful when I searched for it:
/home/solemnwarning/test.cpp:8:3: error: ‘struct Thing::PrivateAbstract::A’ redeclared with different access...
Posted in IPXWrapper on 23 Sep 2017 at 22:06 UTC
IPXWrapper 0.6.1 has been released.
This release fixes a crash bug, adds support for more frame formats (LLC and Novell "raw") when sending/receiving real IPX packets and adds some missing DirectPlay registry keys needed by Virtua Cop.
Download link: ipxwrapper-0.6.1.zip
Posted in software on 21 Aug 2017 at 16:41 UTC
I've released a new version of wolwait, most significant changes are support for IPv6 and sending WOL packets directly to the host.
Download link: wolwait.cpp