RSSAmplifier

Blog

Hoverbear

A computer scientist working in open source towards a more hopeful future.

hoverbear.orgRSS feed ↗96 posts

Latest posts

Custom fonts in Obsidian

Obsidian lets you customize your fonts with its built in settings apparatus, but that's not always quite enough for more compicated use cases. Let's quickly review the basic settings, then take a look at how to use CSS Snippets to fine tune fonts (and other styles) on the theme or selector level. Then, we'll look at how to do the same on an Obsidian Publish site.

Folder Notes in Obsidian Publish

Recently, I've been participating in some very fun TTRPG games. Obsidian has become my favorite tool for taking notes. One plugin I've found which I quite like is Folder Notes . I ended up getting a Publish subscription, and wanted mimic the behavior of Folder Notes on the published site. This weekend, I sat down and hacked on it a bit. I'm relatively pleased with the end result and…

Instrumenting Axum projects

Recently I was helping someone get bootstrapped on their Axum project, and they were getting a bit frustrated with the lack of context about the goings on in their application. While Axum and it's ecosystem are well instrumented, by default most of it is not very well surfaced for beginners. It can be a bit intimidating figuring out how to put the pieces together and use them.

Extending NixOS Configurations

NixOS modules and configurations offer us a tantilizing way to express and share systems. My friends and I can publish our own flakes containing nixosModules and/or nixosConfigurations outputs which can be imported, reused, and remixed. When it comes to secret projects though, that openness and ease of sharing can be a bit of a problem. Let's pretend my friend wants to share a secret…

Nix on the Steam Deck

When I first started using Linux in 2006 I remember dreaming of a Linux Console. The idea maybe wasn't so far fetched at the time, the PlayStation 3 had just been released with OtherOS support which allowed users to install Linux (or BSD). Still, it seemed that a Linux-first console would only ever be a dream. Now in 2022, Valve's Steam Deck is a hackable Linux-first portable console.…

Declarative GNOME configuration with NixOS

I adore tinkering with my machine, trying new tools, extensions, themes, and ideas. When I was younger, it was simply a way to learn. Now, it's a way for me to refine my workspace and bring myself small joys. While tinkering can be fun, it can be a chore to set up a new machine, keep configurations up to date between machines, or even just remember to keep up to date backups. We've…

Xbox Controllers on Arch Linux

I fumbled a bit setting up my Xbox controller in Arch, but managed it and wanted to share. Let's quickly cover how to use xone to set up a Xbox Elite Wireless Controler Series 2 connecting to Arch Linux via a Xbox Wireless Adapter for Windows 10 . Once we're done, it should 'just work' in steam , wine , lutris , or your other games.

Visually debugging PGX extensions

Rust spoils me, I rarely need to reach for a debugger thanks to structured logging via tracing and errors with spantraces thanks to eyre . When I do find myself wanting to really dig my grubby little paws into some code, configuring the debugger targets can feel intimidating. Experience has taught me that I can conquer intimidating things though, and sometimes that is best done with a little help.…

Getting started with Xous and the Precursor

A few years ago, I saw bunnie 's Precursor on Crowd Supply and instantly fell in love. The idea enamored me despite hardly knowing what FPGAs were at the time. Embedded development has always been a fun hobby of mine, and I think it's an excellent pursuit for any developer to improve their knowledge. If you like Rust (like me), some great starting points are the nRF52840s , the…

PostgreSQL Aggregates with Rust

Reaching for something like SUM(vals) or AVG(vals) is a common habit when using PostgreSQL. These aggregate functions offer users an easy, efficient way to compute results from a set of inputs. How do they work? What makes them different than a function? How do we make one? What kinds of other uses exist? We'll explore creating some basic ones using SQL, then create an extension that defines…

Configurable Nix packages

The vim and neovim packages in Nixpkgs allow users to set custom configuration, including their customRC and any plugins they might want. How do they accomplish it? In this article, we'll explore how to create packages with similar behavior. We'll create a simple Rust app that consumes a configuration file, then create a Nix flake containing both an unwrapped binary package as well as a…

Forging SQL from Rust

PostgreSQL offers an extension interface, and it's my belief that Rust is a fantastic language to write extensions for it. Eric Ridge thought so too, and started pgx awhile back. I've been working with him to improve the toolkit, and wanted to share about one of our latest hacks: improving the generation of extension SQL code to interface with Rust. This post is more on the advanced…

A Flake for your Crate

Nix (PDF) provides users a way to access the massive Nixpkgs library of packages, create reproducable builds of software, roll slim containers, create declarative VMs, or run their whole machines. A new feature of Nix, Flakes , is bringing a convention to how projects like Rust crates can be accessed, integrated, and used within Nix (or NixOS.) Let's explore how we can make our Rust crate…

Using rust-bindgen in Nix

While building the Nix packages for pl/Rust I bumped into a curious issue: I couldn't link to stdio.h , or stdbool.h ! They were clearly on my path, too. It flummoxed me for quite some time, but exploring the firefox package led to a way forward. It was rust-bindgen not finding libraries!

Custom live media with Nix flakes

I've always been quite fond of booting live media. To test or install a new operating system, to recover an old one, find some privacy, or to do a myriad of other specialized tasks. LiveUSBs and liveCDs introduced to me a new way of thinking about my computer. It improved my mental model of the separation of between the machine, the UEFI (or BIOS), any bootloaders, and the operating system…

The Entanglement of Purpose & Success

There are few things I remember more clearly from my post-secondary than this question from professor Rob Hancock: How do you define success? I was as much impacted by the question as I was by how my cohort grappled with the question over the next semester, and beyond. It's a question I've continually faced throughout my whole life. It turns out that success to me is an elusive,…

Finding direction, defining goals

The simple passage of time changes us. Our personalities, identities, social circles, fears, and passions all shift to meet our needs throughout life. As we grow and mature, we must reconcile our past and resolve ourselves to the future. Time trawls up existential questions again and again: Who am I? What is my purpose? What do I want in life? What am I willing to struggle with? What happens if I…

Hierarchical Structures in PostgreSQL

It's a common pattern: a database developer at a startup is probably on the Product subteam of the Engineering team at their company. In a department store, shoes are a subcategory of clothing, while your favorite thermos is probably in the travel department. In any Github organization, there are teams within teams within teams. In any large department store there are categories deeply…

Getting the most of WSL

Not long ago, Microsoft started iterating more heavily on their long-existing "Windows Subsystem for Linux" feature. The feature has existed for some time, but recently has it become much more usable for everyday Linux development work. In this post, we'll investigate some ways to get the most out of WSL. I won't present anything new here, just providing a single place for how I or…

Common Safety Pitfalls found by Jepsen

When Jepsen appeared in the industry several years ago our team at PingCAP couldn't have been happier. Finally, an approachable, understandable reliability testing framework along with an enjoyable and rigorous library of analyses of popular databases. Jepsen is an umbrella term for the software library, collection of articles, and service of the same name. Together, the project pushes…

Why Benchmarking Distributed Databases Is So Hard

If you’re an avid reader of distributed systems news like I am, you’ve probably seen your share of benchmarks. You’ve also probably stopped taking them at face value. Unfortunately, benchmarks are hard to get right, and even more unfortunately, many articles touting benchmarks are actually benchmarketing, showcasing skewed outcomes to sell products. So why do it at all? Let’s take a look at some…

Optional Arguments in Rust

When designing an API for your crate one topic which can come is how to handle optional arguments. Let's explore our Option s in Rust!

Ascend

It seems that at times of monumental change in life there is a 'before' time, and an 'after' time. For example, the time 'before' graduation, and the time 'after'. It feels appropriate for the moment. Over the other side of the summit is unknowns. Unknowns about the future, about ones place in it, and about what changes might come next. While it is…

Learning to Tread the Dawn

In the time since my last writing life has been nothing short of a whirlwind. It's been good though. I've relocated, started at PingCAP, found a new apartment, bought furniture(!!!), traveled, travelled more, and been working on a few other bit things. Moving back to Victoria from Berlin was (as predicted) quite a change. Having lived here most of my life though, I still have old friends…

A New Year Dawns

First of all, happy new year! It's been awhile since I wrote anything, and there are many things I'd love to write more about. Sadly, time is a limited resource and I've been managing to keep quite busy. For now, I'll stick to an update about a wave of change in my life.

The Path to Rust on the Web

Recently there has been quite a bit of talk about WebAssembly , a new format for code for the web. It is a compile target for languages like C and Rust that enables us to write, and run, code from these languages in our browser. In the interest of learning more about this technology (and to avoid writing more Javascript) let's explore together and get our hands dirty! Disclaimer: WebAssembly…

Setting up a Rust Development Environment

In this post we'll be discussing one way to set up your machine for Rust development. There are different ways, particularly related to the text editor, so feel free to skip what is irrelevant to you. We'll focus on: Setting up Rust via Rustup. Valuable tools like clippy and rustfmt . Configuring VS Code for Rust. Debugging with the command line and inside of VS Code. Using different…

The Future with Futures

Recently there has been a lot of progress in the Rust language towards a robust asynchronous stack. In this article we'll take a look at what these things are, take a tour of what's available, play with some examples, and talk about how the pieces fit together. We'll get started with the futures crate to start, move on to futures_cpupool , and then eventually to tokio . We will…

Pretty State Machine Patterns in Rust

Lately I've been thinking a lot about the patterns and structures which we program with. It's really wonderful to start exploring a project and see familiar patterns and styles which you've already used before. It makes it easier to understand the project, and empowers you to start working on the project faster. Sometimes you're working on a new project and realize that you…

An HTTPS Terminator Box

Over the last couple days at asquera we've been on a retreat at the Landhaus Fredenwalde . It's really beautiful out here and it's given me a chance to work on a few small projects which I've been wanting to explore for awhile now. Anyways, yesterday I set up a system that uses Ansible , Let's Encrypt , nginx , and DigitalOcean to terminate HTTP and proxy requests to…

Winds of Change

Unlike most of this blog this post is not technical in the slightest, instead it's a personal update. Though, I have been wanting to write this post for a long time now! Many things have happened in the last few months, and life is still swirling all around me. Many things seemed uncertain, other things still do. Irregardless, things are pretty darn cool. Anyways, here's what's…

New Roots part 5, Erecting Container Infrastructure

This is the fifth part of an ongoing series on configuring a new server. In our last post we discussed and configured some basic tools. For all intensive purposes, our 'root' system is complete. What we'll be doing now is building the infrastructure to run containers the way we want to. Before we get around to setting things up, let's describe the what we're up to.

New Roots part 4, Making it 127.0.0.1

This is the fourth of a series on taking up residence on a new server. In our last post we talked about how to set up some basic network services like ssh and configure iptables , our firewall. In this post we'll talk about making your server feel like home. There are a grand number of things we can do at this point to make our time on the machine enjoyable. Take time to evaluate your choices…

New Roots part 3, Services & Hardening

This is the third in a series of posts about getting settled into a server. First we talked about choosing a server , then we talked about installing a base OS on a dedicated server . In this post we'll discuss configuring, securing, and hardening our server. In our last post we left our new server in a very, very minimal state. Heck, we didn't even tell it it's own name! In this…

New Roots part 2, On the Metal

This is the second post of a series on settling into new servers. The first was about choosing a server . This post is specifically targetted at newly acquired VPS and Dedicated servers. We'll talk about installing our chosen distribution, configuring its basics, and familiarizing ourselves with the new metal.

New Roots part 1, Choosing a Server

This is the first in a series of posts where we'll discuss the process of obtaining, setting up, and settling into a new headless server. Along the way we'll install Linux, configure firewalls and web servers, set up virtual machines, tinker with system knobs, explore automation tools, and generally have a great time. In this post, We'll discuss things to keep in mind when searching…

The Menagerie of Badssl

Late last year I was given an opporunity to participate in the Mozilla Winter of Security 2016! I'm happy to report it was, and still is, super cool. Plans diverted significantly at the very start of the project as it was discovered that the "menagerie" of certificates we wanted to build already existed. What joy! In order to avoid any "not-invented-here" syndrome problems we pivoted, like a…

Site Redesign

I've begun redesigning my website with my own theme! With school finishing and new employment looming I decided to take the time to make my site truly my own.

Gathering Our Voices 2016

This year helped again with Gathering Our Voices. I worked in the same capacity as previous years and had a similarly great time. Rather than talking at length about events I'd rather share pictures. All of these photos were taken by my friend Geoff Howe. All images are wholly owned by the BCAAFC and you may not reproduce or use them in anything without their permission.

Arch Linux on Docker Revisited

Back in 2014 when I was learning about Docker I got around to making a base image for Arch Linux . It was a really fun exploration and I got to know a lot more about how Docker worked from it. I'd highly suggest trying to make your own sometime! Docker has matured a lot since, and I've enjoyed following it. I took some time this last week to revisit my Arch Linux image and ensure…

A Rust Heroku Buildpack

I'm happy to introduce the first stable version of my Rust Heroku Buildpack! Just looking to get your hands dirty? Look here . The project was a really interesting learning experience about how Heroku does things, on bash scripting, and about multirust , which I'd not used before but now am quite a fan of! (I previously just rustup 'd the newest nightly every few days.)

The Way Forward

In April, I will be graduating from University. It's pretty darn exciting! Once that's happened I'll officially have a Computer Science Degree with a Networking option, meaning I focused primarily on networking for my upper year studies. I'll be completing my degree with (approximately) a 7.75 (out of 9.00) GPA and I'm pretty proud of that! I've been placing a lot of…

It's a Let's Encrypt Beta!

I was privileged to recieve one of the early Let's Encrypt beta certificates for https://hoverbear.org . I had an easy and fun time setting it up this evening on my Funtoo Container and wanted to quickly jot down how to!

Understanding Over Guesswork

Evolving How We Learn Systems with Lessons from Programming in the Large Some bugs are just that+++a one off. A wayward moth that just happens to be innocently fluttering through the wrong relay at the wrong time. But some kinds of bugs aren't like that. Instead, they have risen to superstar status, plaguing veterans and newcomers alike. But what if these aren't bugs at all? What if they…

Photos: San Fransisco Trip

A selection of images from my trip that I thought I'd share with the world. If you want to use one of these for anything at all, just fire me an email and ask!

The Raft-rs Rust Meetup

Wow. Was that ever fun! I hope that those that came had an equally enjoyable time and everyone got something useful out of it! I sure did! Slides Yvonne Coady Diego Ongaro & Visualization Ana Hobden Dan Burkert Alex Newman

Exciting Times

The next few weeks are full of excitement and busy-ness! First up is the Meetup in San Fran (See our planning) . I can't wait! It will be so fun to meet many people I've already met in IRC and through the community! If you'd like to do something, or show me around the city, let me know! I've never been to the USA before, let alone San Fransisco. After that I'm moving into…

Blog Changeover

I've moved my feed over from Ghost to Jekyll ! It took several hours spread across several days to transfer all of my posts out of Ghost since it's (experimental) export functionality just dumps a bunch of junk into a JSON document. In this move most page links should still map to the same thing as before. This does not hold for images, diagrams, etc (but you should have hosted your own…

Trackpad Drivers for Linux on a Mac

If you're like me and have Mac hardware but run Linux you might also run into the slight annoyance with the trackpad drivers X.org defaults to. If you haven't explored, there is a fantastic replacement called mtrack that I've had great luck with.

Raft Progress & Examples!

We've also got couple nice working examples! Yes, they're ready to play with! Can't wait, need code? Visit Raft and check out the examples/ directory!