It's time to let go, Apache Software Foundation

The Apache Software Foundation offers a suite of office productivity software named Apache Open Office. Based on the download page, you would never guess the last major release of the software was made available in 2014. With that bit of release history in mind, would it be fair to consider Apache Open Office as an un-maintained project? In this blog post, I share a quick recap of the history behind Apache Open Office, and my opinion on why The Apache Software Foundation’s actions may be masking the answer to this question.

How to fix Steam crash "Assertion 'device' failed" on Gentoo

This guide fixes the following Steam crash: Assertion 'device' failed at src/libsystemd/sd-device/device-private.c:103, function device_get_tags_generation(). Aborting. Solution 1. Enable 32-bit builds for libudev-compat Add the following to package.use: sys-libs/libudev-compat abi_x86_32 2. Install (or reinstall) libudev-compat Execute the following command: sudo emerge sys-libs/libudev-compat 3. Re-launch Open Steam again.

How to migrate Go projects to a new domain using Caddy

I recently migrated from to, including a Forgejo instance. I have a number of projects, including many Go projects. I searched for a way to redirect to a new domain, while still allowing go get commands to work when referencing the old domain. I found this thread which provides an example of how to redirect a single package. The snippet in this guide redirects all packages on a domain.

Terminal-based Tetris - Part 1: Procedural polyomino generation

This is the first part of a series of tutorials on creating a terminal-based Tetris clone with Go. Code for this tutorial is available on GitLab. go get # Download and install ~/go/bin/part-1 # Run For a complete implementation of a Tetris clone in Go, see netris. Disclaimer Tetris is a registered trademark of the Tetris Holding, LLC. Rocket Nine Labs is in no way affiliated with Tetris Holding, LLC.

tview and you - Creating Rich Terminal User Interfaces

This is an introduction to using tview (or cview) to create rich terminal-based user interfaces with Go. Primitives The Primitive interface is as follows: type Primitive interface { Draw(screen tcell.Screen) GetRect() (int, int, int, int) SetRect(x, y, width, height int) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) Focus(delegate func(p Primitive)) Blur() GetFocusable() Focusable } Box is the only primitive implemented. It has a size, padding amount, optional border, optional title and background color.