How to build a custom completion backend for emacs from scratch.| Tyblog
Building distributed object storage for timeseries data for distributed scraping for ZFS replication metrics.| Tyblog
Eleven init systems enter, one init system leaves.| Tyblog
Figure 1: The modern programmer's dilemma Today I realized that – distinct from the idea of AI misalignment – today's human resource departments have misaligned incentives for how employees will (or are?) using large language models. --- Maybe you're like me: an employee – not an employer – and so you trade your time and effort for money. Maybe you've also gotten better at using large language models and they've made you noticeably more productive. In fact (I agree with Thomas here) I...| Tyblog
There's a common joke out there that bloggers will write more about their blogging system than actual content. --- Blog is dead, long live Blog My first post that explains how I write my blog is hilariously outdated now. Between then and now, my process has been: Generate Jekyll locally Push to S3 with s3_website The aforementioned blog post outlined self-hosting static assets on a VPS, which is a stupid architecture with modern object storage options. Static hosting on S3 alleviates any scal...| Tyblog
Docker is the de facto solution for packaging most server-side applications these days. The technical merits of Docker are nifty – cgroups and other mechanisms are certainly useful – but there's one particular aspect of running an application in Docker that has been unequivocally beneficial for the industry: concretely defined inputs and outputs. --- I was reading the Gitea installation docs the other day when I realized why I gravitate immediately to the "Installation with Docker" sectio...| Tyblog
I use a lot of software tools for my job - and personally, for that matter. Some live in the forefront of my brain, like emacs. Others live in the background, like my terminal (alacritty). Some of these background tools do their jobs so well and so reliably that I can sometimes forget that they're humming away for me every day, without any hassle to fix or maintain them. --- This is an informal list of those tools that I love to never have to think about. Syncthing Remember when Dropbox felt ...| Tyblog
These days, I almost exclusively run Arch Linux in my homelab and personal machines. Had I the brain cells to spare, I'd try and get NixOS running on ARMv7, but in the meantime, a mix of vanilla x86_64 Arch and Arch Linux ARM is my chosen flavor just to keep things consistent. I've run Arch as my primary server OS for almost a decade now, and although I'm sure some will balk at the idea, I've found that the distribution has performed wonderfully for me, even in contrast to traditional "server...| Tyblog
I often think back to previous years about the best movies, games, and books that I find and wish I had recorded them somewhere. For 2019, I'm finally doing it - so here's my biased, semi-organized, and somewhat late list of media that I really loved from 2019! --- Book: Why We Sleep Figure 1: Why We Sleep I'm a pretty unabashed fiction addict, and I regularly devour fantasy and science fiction, so a nonfiction book really needs to grab me in order to keep my attention. Why We Sleep is a fant...| Tyblog
My blog post about ssh is still the most frequently read content on my blog four years later. I've collected enough shell tricks that it's about time for one of these type of posts about my favorite software tool of all time: the shell. --- My experience is mostly limited to zsh, so while the examples here will be zsh-based, I think other shells like fish and xonsh are great as well. Upgrade Your Shell Bash is fine, but at a certain point my opinion is that you should upgrade to either fish o...| Tyblog
A few months ago I rebuilt my router on an espressobin and got the itch to overhaul the rest of my homelab. While I could pick up some post-market AmaFaceGooSoft equipment for a typical high-power x86 lab, I decided to put the devops mantra of a distributed, fault-tolerant architecture to work and see how far I could get with lots of small, cheap, low-power machines instead. In a nutshell, I'm running ~20 ARM-based single-board computer cluster that drives a container-scheduled application ru...| Tyblog
After my Asus N66U kicked the bucket, I considered a few options: another all-in-one router, upgrade to something like an EdgeRouter, or brew something custom. When I read the Ars Technica article espousing the virtues of building your own router, that pretty much settled it: DIY it is. I've got somewhat of a psychological complex when it comes to rolling my own over-engineered solutions, but I did set some general goals: the end result should be cheap, low-power, well-supported by Linux, and...| Tyblog
I read a lot of tech success stories, but most of them revolve around building out or creating cool stuff. Last week, I had a catastrophic disk failure, and all I wanted was to find some recorded notes about disk recovery in Linux with ZFS. This is a record of my experience to illustrate the strength and maturity of ZFS on Linux and potentially help anyone in a similar situation in the future. --- For some context so you know what I'm working with: I'm on Arch Linux using ZFS on Linux. Think ...| Tyblog
systemd: it's the init system that (some?) love to hate. Full disclosure: I find systemd a little overbearing, although by no means would consider myself militantly anti-systemd. It has obvious advantages, and although I'm at philosophical odds with it at some levels, I see no reason why everybody shouldn't understand it a bit better - especially now that most people will need to deal with it on their favorite distros. --- This post is a sort of formalized set of operational notes I've made f...| Tyblog
I recently (finally!) finished the Advent of Code challenges using Haskell. I'm still a Haskell wannabe, but the suite of problems provided an interesting backdrop for a number of Haskell concepts that I wanted to share. The long-form retrospective is here; if you want to see a condensed collection of a few Haskell toolchain by-products, check out my shorter summary under GitHub pages. --- Disclaimer: I am not a Haskell expert (or even what I would label experienced), so the approaches and re...| Tyblog
I recently used systemd, HandBrake, and some simple scripts to digitize a large collection of physical media (for personal, archival use.) In this post I'll go through systemd features that made this easier and cover all the components that make the automated pipeline work. --- If systemd, automation, or digital archiving sounds interesting to you, then read on! Table of Contents The Problem Hardware systemdDevices The Service Enabling the Service The Script Conclusion The Problem Atoms take ...| Tyblog
Honeypots are rad. Their uses are varied, but I've used my own mostly for research (and entertainment.) It's been running for over a year now, and I thought it would be worthwhile (and interesting) to summarize my findings. --- This honeypot is running on one of my non-critical servers with relatively minimal exposure, so the findings contained herein could be considered a good snapshot of internet background noise – no particular reason to target my host, but a public IP and open port 22 a...| Tyblog
This is just a short blip for people running Docker on CentOS who have encountered problems accessing containers from outside the localhost. --- The long and short of it is this command: shellsysctl net.ipv4.ip_forward=1 Why? Read this answer on StackExchange first. When Docker configures your iptables rules for network access, it likes to create a docker0 interface alongside any other network interfaces (like eth0) that CentOS creates by default. Therefore, you must enable IP forwarding to a...| Tyblog
There are many subtle joys associated with working almost exclusively in the command line all day: tab completion, a simple interface, and unix pipes. --- Like general command-line mastery, learning how to wrest unix pipes to your best advantage can translate into a wide variety of benefits. Don't get me wrong, when you need a scripting language, use a fully fledged scripting language – bash isn't going to juggle diverse data types and complex logic as gracefully as python or ruby. But when...| Tyblog
OpenSSH is an incredible tool. Though primarily relied upon as a secure alternative to plaintext remote tools like telnet or rsh, OpenSSH (hereafter referred to as plain old ssh) has become a swiss army knife of functionality for far more than just remote logins. I rely on ssh every day for multiple purposes and feel the need to share the love for this excellent tool. What follows is a list for some of my use cases that leverage the power of ssh. --- --- Table of Contents Public-Key Cryptogra...| Tyblog
Have I got your attention? It's a sensationalist title, but this is important and developers/administrators still get it wrong. Both online and professionally, I encounter technical people still turning to traditional hashing algorithms like SHA or, Schneier forbid, MD5 when making decisions about scrambling user credentials. Even this recent question on Stack Overflow Exchange has yielded inaccurate answers. While choosing something like SHA-256 with salt isn't necessarily a bad decision, it...| Tyblog
Last weekend I participated in a capture-the-flag event sponsored by Bishop Fox and ran by students at BYU. Following the event I decided that it may be fun to try and crack the scoring software itself – so I've written up the process here to explain how I put the exploit together. --- Although spoofing client-side authentication tokens is nothing new (and the targeted framework in this case isn't a widespread one like Rails or something similar), this exercise serves as a good, very simple...| Tyblog
Figure 1: Docker Docker is an interesting cgroups-based virtualization alternative that uses containers to deploy applications. --- Docker and solutions like it are useful because: Application deployments occur in identical environments, eliminating per-host quirks Process isolation strategies incur lower overheads than emulating hardware devices Images can be built, shared, and re-used in a repeatable way Lately I've been looking at vulnerable webapp sandboxes such as DVWA to test vulnerabil...| Tyblog
Figure 1: Sample screenshot editing my .vimrc Vim is an excellent text editor. I've used it for many years and like most vim users, have collected a fairly large collection of settings in my .vimrc and learned how to grok my vim usage effectively through a lot of trial and error. To that end, I've tried to assemble a useful overview of my experience with vim. --- Foreword: Why? Why would you want to even put in the effort to beef up vim? Portability. Carry your IDE everywhere with minimal eff...| Tyblog
Figure 1: The final product A while back I finally got my 512MB revision 2 model Raspberry Pi to successfully run OpenELEC. The picture to the right shows it running, using a shared network mount to access all of my media files. Some folks requested a write-up detailing how I put everything together, so I'm going to try and provide a generalized walkthrough for those with the initiative to do something like this. Although I'm not assuming you're a Linux guru, there's some technical aspects to...| Tyblog
Figure 1: Another blog to read, why not? Putting together all the moving pieces to get this blog to work the way I wanted took a little while. In the interest of sharing how I did it in case this helps others, I thought I'd share the approach I took. --- Overview So, here's the way it goes down: I'm using jekyll to publish. If you're unfamiliar with it, jekyll essentially lets you write your pages as templates, and generate a static HTML site from the 'source' of your web site. I don't need a...| Tyblog
How can you list pending changes when performing a system upgrade on NixOS?| Tyblog
Can you build your own voice assistant? Yes!| Tyblog
Capitalize on moral grey areas for fun and profit.| Tyblog
I put my .zsh_history in a safety deposit box| Tyblog
Experimenting with Doppler in order to manage and secure credentials.| Tyblog
A quick writeup about using simple operational tools like nomad, caddy, and wireguard in order to build out a simple container scheduler system in a homelab environment.| Tyblog
Building self-contained, single-file deployment artifacts for executing in Hashicorp Nomad using nix.| Tyblog
Have you ever wondered about the performance delta between Caddy and Nginx? Wonder no more.| Tyblog