A coder's scratchpad

Articles covering programming, design and leveraging technology to one's advantage

I have a gaming PC. Well, a “gaming” PC, since the average PC gamer wouldn't consider it very good. An FX-6350 processor and an R9 280x graphics card, with 16GB of DDR3 RAM. It was a decent computer back in 2013, but became outclassed very quickly. I don't mind, because I find myself playing old and indie games more anyway.

Young me thought he could get away with not buying a case, and sticking the whole thing in a cabinet. That has worked for all this time, but it sticks out a bit and I'm sure I can do better. I don't have many materials at hand, but I have a lot of free time and that's good enough.

I managed to get a PC gaming friend to hook me up with an old chassis. Apparently it used to be a Corsair something, but it's impossible to tell. It's missing the on/off buttons, the plastic shrouds and the side panels. All the metal mesh protecting the top is gone too. At least it still has those drawer things for the hard drives. It's a start, at least.

I dug out some scrap wooden fibreboard panels from years ago, and cut them to fit inside the holes in the front and top of the case. I painted them light gray, because that is the only colour I have available. They friction-fit into the case nicely and provide protection from dust, and that's good enough for me.

For the power switch, I found an old push button and a nice sounding SPST switch. I soldered them in series and used a wire wrap tool to connect them to the motherboard. The way it's set up you have to flip the switch to on to get any response from the power button. As someone who has accidentally pressed power buttons in the past, this is a nice improvement.

As I worked on my frankencase I had a strange stroke of inspiration. “Stick your tiny server in the computer case!”, a small voice cried. “There's plenty of space for it in the optical drive bay.”. My home server is an Odroid C2 connected by USB to a 1TB hard drive. It syncs my documents between systems, and handles any weird server experiments I decide on. It's also missing a case, and there's nothing to lose by doing so, so I superglued motherboard standoffs into the optical drive bay and mounted the computer there. I housed it's hard drive in one of the hard drive bays. The cable management required to do this was tricky, but I managed to fit everything inside without it looking like an abomination.

Next thing I know the Ethernet switch that connects all the devices in my room was now zip-tied to the top. Next to it there is now a Nintendo Switch dock, which I decided against gluing down because those are expensive. My frankencomputer entertainment monstrosity is now complete, and that's only because I can't fit my PS4 in there. Each individual component turns on without catching fire. Thermals are good enough, because the side panel is missing. It's a crime against nature, but it's my crime against nature and I love it.

Every other April Canonical releases a new Long Term Support version of their operating system, Ubuntu. I've always been a fan of their work, and would like to take some time to look at their latest release. This is more of a first impressions, and a comparison to their older releases, rather than a review.

The desktop has received a lot of polish. The new Yaru theme looks great, and they've managed to integrate the signature purple and orange in a more sleek, professional manner. GNOME Shell's animations are much smoother, with no noticeable hitching on my Thinkpad T420.

The only problem is the lack of Canonical's previous improvements. The HUD was a fantastic concept. Being able to access every menu option in a program by keyboard made using programs like Gimp and Inkscape much easier. There's also the lack of integration between the top bar and a maximized window's title bar, but that can be fixed with the Unite GNOME extension. At least they removed that Amazon button.

Moving on to installing software, we have Ubuntu Software. No longer is it a laggy mess that makes you crave for Synaptic. Now it's just a decent program in need of a good polish. Ubuntu Software greets it's users with 4 missing icons and a banner with an unflattering picture of Minetest. “Explore” is painfully lacking, with no convenient way to browse available software without already knowing their names. Searching for software usually returns two results, one native and one Snap. It's not the best first impression, especially compared to Ubuntu MATE's Software Boutique.

Overall I think the desktop experience is great, but could be greater. Importing features like the HUD from the Unity desktop would be great, but the desktop is good enough on it's own. The software centre, however, needs a UI overhaul. You could just install Synaptic, which Ubuntu Software claims is proprietary, but you'd miss out on snaps, and it's not as pretty.

I often find myself looking up “idiomatic” solutions to problems I find while coding. I'll waste time looking for how you're “supposed” to do something, and end up getting nothing done. It's a problem I've had since I've started coding, and it's only gotten worse as I've started using databases and deployment tools. Perhaps it's perfectionism getting in the way, or perhaps I've spent too much time on The Daily WTF and am subconsciously avoiding anything that could be considered funny to others. What I do know is that my productivity suffers as a result.

The solution is one I struggle with. Just do it. Write your code the way you think it should be done. If you're right, everything is fine. If you aren't, you'll find the idiomatic solution afterwards. Rewrites and adjustments aren't anything to be afraid of, and they aren't signs of being a bad programmer. Code doesn't cost anything to write, so feel free to experiment.