Posts

Nov 2024 Notes on installing LineageOS on OnePlus 9 ("lemonade")

I just got a hand-me-down OnePlus 9, and installed LineageOS on it. There were a few things that were non-obvious about the installation (which is a first; normally the LineageOS docs are pretty comprehensive!), so I’ve documented those here.

Oct 2023 Advent of Code 2022: Day 22

Well, it’s been a bit, but I’m thinking I might have a chance at finishing 2022 off before 2023 starts…if only just! Quite a few things have changed since last time, not the least of which is this1:

chandler@boron:~$ uname -m
riscv64

I’m doing most of my non-employer-affiliated development work on a StarFive VisionFive2 these days (with a blog post likely to come at some point), and the transition to RISC-V ended up being pretty straightforward.

Jan 2023 Advent of Code 2022: Days 20 and 21

Two more down, today. Magit has been awesome, and I think I made it through the entirety of both of these problems without reflexively opening a terminal to solve some problem I encountered (either regarding git, or basic file manipulation)!

Jan 2023 Advent of Code 2022: Days 18 and 19

I’ve been recovering from a rough bout of COVID-19, which really knocked me out for a few days, and (in combination with a tough couple problems) set my AoC progress back a few more days. But I’m back at it! Today: getting acquainted with magit.

Jan 2023 New Year, New Router!

Over Christmas break, I replaced my old router (a standard x86_64 PC running pfSense1) with a new FriendlyElec NanoPi R2S, which has (for the first few days, anyway) been a fantastic bit of hardware. On the software side, I’m running OpenWRT, which is a stability upgrade from pfSense, and a major functionality bump from any other router OS I’ve tried. I’m now a few days in, and it’s been a really nice experience.

Jan 2023 Advent of Code 2022: Days 16 and 17

Well, it’s slow going. I was getting less than a day per day done, and now I’m back at work, so that’ll likely be even slower going forward. I’m retargeting mid-January for the end. But here are the next couple days’ worth!

Dec 2022 Advent of Code 2022: Days 12–15

Well, Advent is long over, but here I am! I was traveling and visiting family, which was delightful but really set back my AoC progress. But I’m hoping I’ll be caught up by the new year! New this time: eww, the Emacs Web Wowser.

Dec 2022 Advent of Code 2022: Days 10 and 11

I’m getting caught back up, slowly! Today, I did days 10 and 11. I didn’t do much for new emacs shenanigans today, just solving puzzles and continuing to become comfortable with a new UI paradigm.

Dec 2022 Advent of Code 2022: Days 8 and 9

Today I was out of the house most of the day. This was a good chance to check out TRAMP: emacs' Transparent Remote Access: Multiple Protocols, which satisfied my remote-editing needs pretty effectively.

Dec 2022 Advent of Code 2022: The rest of Week 1

Day 2/3: I completed the emacs tutorial. Day 4/5/6: Dired, Shell commands. Day 7: rust-mode.

Dec 2022 Advent of Code 2022: Day 1

This is it: I’m finally going to finish Advent of Code this year! (A strong claim, given that this is my third attempt, but we’ll see!) This year, I’m planning to use this as an excuse to learn/relearn Emacs and Rust.

Nov 2022 Twos

Twos is one of my favorite card games. Isaac and I played a variant last night that made me look into how bombs should rank. (Plus, an overview of the rules.)

Apr 2022 Ages of Minnesota Wild Players

Tonight the Minnesota Wild won their game against the Nashville Predators, in a nailbiting finish—we (specifically Dmitry Kulikov, age 31) scored our final goal to end 5-4 with 1.3 seconds left of overtime.

It’s always amazing to me as I get older that a large component of professional sports players are younger than I am. (Though hockey players are somewhat older than I’d imagined: Both goalies are in their mid to late thirties, and the median player is still a few years older than I am.)

Apr 2022 2021 Taxes: Open Source Edition

Happy Tax Day! The tax industry (by which I primarily mean its largest player, Intuit) sucks.1 As a whole, the industry is an excellent example of rent-seeking behavior, and not one I wish to encourage with my patronage. So I tried out a few options when filing my 2021 taxes, and found out a few interesting things along the way2.

Apr 2022 The Holy (Midwestern) Trinity: Culvers, Kwik Trip, and Menards

If you live in the Upper Midwest, you know what I mean: There’s no place like Culvers. And Kwik Trip. And Menards. (All Wisconsin-based, for that lovely hometown charm.) But the worst part of visiting all three is the period of time between stepping out of one and arriving at another. Where is the best location we can minimize this pain?

Mar 2022 Lessons learned from implementing the BitTorrent protocol

Last week, Jeff and I had some questions about some specifics about how the BitTorrent protocol works. Over the course of a conversation, I realized that, despite years of using torrents to download Linux ISOs1, I had at best a surface-level understanding of the protocol. That’s a shame, because peer to peer file sharing involves some really neat tech! One of the best ways to understand how something works is to build it, so I wrote a toy BitTorrent client that implements the bare minimum necessary to download a file.

Feb 2022 How not to send an email asking for personal information

May-July 2017: Equifax is hacked. September 7, 2017: Equifax discloses the breach. July 24?, 2019: I make a claim against the settlement fund, since my information was involved in the breach. January 27, 2022: I receive an email from the Equifax Breach Settlement Administrator telling me how I can claim the credit monitoring I selected. January 30, 2022: I spend several hours trying unsuccessfully to decide if the email is legitimate or not.

Jan 2022 Azure Active Directory SAML sample code/configuration

At work, I occasionally have to integrate things I’ve written with Azure Active Directory. Unfortunately, their Go documentation is somewhere between light and nonexistent, and there are a few quirks that make it not immediately obvious how this works, so here’s an example.

Oct 2021 Hats

As of about 11pm yesterday, I’m the proud owner of 0hats.com.

Oct 2021 Hacking together a workaround for Audio issues

I’ve had a longstanding issue somewhere in my system’s config where when I adjust my system volume using the hardware wheel, the left and right channels get out of sync. It’s certainly something I can work around, but it’s frustrating to have to either have to turn the volume all the way down, which resynchronizes the channels, or to open alsamixer or similar and manually adjust the right and left channels to match.

Aug 2021 Retrieving Kwik Trip Gas Prices

Kwik Trip (a popular gas station in the MN-WI-IA area, if you’re not from the Midwest) has an API to display their fuel prices, among other things. Here’s a short Python program to retrieve pricing of nearby stores.

May 2021 Setting up an ODROID-HC4 as a NAS

I bought a new NAS, a Hardkernel ODROID-HC4! It’s a real upgrade. Before: 6C/12T Xeon processor; After: 4C/4T ARM processor. Before: 12GB ECC RAM, After: 4GB RAM. Before: 6 HDD slots/SATA ports; After: 2. But most importantly:

Apr 2021 Data mining my Spotify history

I have a few songs I listen to very frequently. Enough that I wonder, “Does the amount I stream this song have a noticeable effect on the song’s popularity?” It turns out, yes, there are at least a handful of songs for which that is the case.

Apr 2021 Notes on Building AsteroidOS

Building AsteroidOS isn’t terribly difficult, and reasonably well documented, but there are a handful of gotchas I ran into during the process.

Mar 2021 Keeping Tabs on my Tabs – a quick Python hack

I’m a bit of a tab hoarder. Firefox, thankfully, is pretty good about not using excessive resources for infrequently-accessed tabs, but when my Tab Counter extension told me I’d topped 300 tabs, I figured it was time to start a more serious diet plan. And what’s a diet without a scale? Here’s a script that I use to keep track of how many tabs I have open at a time, so I can measure my progress in the fight against my hoarding instincts.

Feb 2021 A random accompaniment on EVENTIDE

How good can we make a random accompaniment sound? I was playing with EVENTIDE, William Henry Monk’s tune written for Abide with Me, and was pondering this. I was trying to play randomly on the piano from octaves and notes in the scale, but suspected my “randomess” of playing wasn’t particularly good. But what does have good randomness? Python! (If you don’t want to read the code, just check out the results at the bottom.)

Jan 2021 Exploring paths for Sudoku variants with Python

One of my college friends has an interest in Sudoku variants. Generally, that manifests in the two of us solving puzzles curated by Cracking the Cryptic, but occasionally it ends up with me trying to solve a puzzle he’s created. A while back, he and I were chatting about one of his ideas for the basis of a puzzle. It’s based around a snake in the grid (for an example of another puzzle using a snake, check out this puzzle by CtC). His puzzle requires that its snake alternates successive even digits and odd digits, is unambiguous, and visits at least one cell in every box (as well as, of course, being a valid sudoku puzzle!).

Dec 2020 PinePhone software from the ground up, part 2

A few weeks ago, I compiled and installed a Linux kernel and a bit of other software to run on the PinePhone. Today, let’s look at some next steps.

Nov 2020 Phone a Month 4?: Setting up PinePhone software from the ground up

I never actually ran anything new on my phone this month. Instead, I’ve been tinkering with the PinePhone. Instead of the usual update post, here’s some info on how to install and boot the most basic possible Linux installation for the PinePhone.

Nov 2020 Piano Heatmap Analysis (Part 3)

A third post in a series (part 1, part 2) on exploring what keys of a piano I use the most.

Oct 2020 Smartwatches

I’ve owned two smartwatches, across 3 OS’s. They’re all terrible. Here’s why.

Oct 2020 A phone a month for a year: September: Custom LineageOS 16.0/MicroG

Here’s another post about the open-source phone exploration I started in July. Last month, I ran an unofficial LineageOS/microG build (containing no Google apps) to pretty good results.

Oct 2020 (meta-)*tic-tac-toe

After a particularly interesting talk at UMD’s math club, to fill some left-over time, the speaker of the day introduced to us a game that was new to me: Meta Tic-Tac-Toe1. After a few games on the chalkboard, I was really interested, and spent a few weeks asking anyone who would listen to play a game or three. I can’t say I was ever good at it, but it was certainly fun!

Sep 2020 A phone a month for a year: August: Several false starts

I’m continuing my open-source phone exploration I started last month. This month’s updates are both a bit late and a bit light, with quite a few false starts and dead ends.

Jul 2020 A phone a month for a year: Intro; Moto G7/Stock Android

Right off the bat, I’ll concede: I’m not buying 12 new pieces of phone hardware for this. However, “Trying a new phone or a new OS on a phone I already have every month for a year” seemed a bit wordy!

I <3 open source, so I enjoy trying new software that increases my freedom. I also have some philosophical issues with how Google treats its users, particularly in ways it seems to abuse its dominant market share to force its apps, ads, and limitations on users. This has led me to back away from Google’s vision of Android, and to try to find a compromise between privacy and utility that best meets my needs.

Jul 2020 Piano Heatmap Analysis (Part 2)

A long time ago, I hacked together a not-quite-working attempt at tracking played keys on a piano. Today, I took another shot at what that attempt might look like with a few more years' experience in play.

Jul 2020 Impressions of AsteroidOS

A solid two days in, AsteroidOS on the KingWear KW88 is…absolutely awesome. The watch is plenty functional as a watch, hasn’t died in 48 hours (though currently the battery is undefined% so I’m not sure how long that’ll last!) and it scratches every bit of my tinkerer’s itch. It’s absolutely thrilling that I can ssh in and get a root shell, and that I can customize or rewrite anything I want to change!

Jul 2020 Installing AsteroidOS on the Kingwear KW88 Pro

I recently bought a Kingwear KW88 Pro, and I’m not much a fan of the OS that came with it. In the interest of doing something different, I decided to install AsteroidOS. While this is a reasonably straightforward process, there are a few issues that I ran into that stumped me for a while, that I thought were worth writing down.

Jul 2020 Listen to your music a new way...alphabetically!

I embarked on a journey to listen to my Spotify library sorted A-to-Z, and you should too!

Feb 2016 New Relic and AppFog v2

CenturyLink’s AppFog v2 is supposed to have great support for New Relic. However, their documentation leaves a bit to be desired. Don’t be dissuaded: the setup process is almost comically simple. Here are the steps to set up AppFog with New Relic:

Sep 2015 Piano Heatmap Analysis (Part 1)

I have always been curious about what the most-used key on my piano is. Songs like Billy Joel’s “Prelude” (C4) or Beethoven’s “Für Elise” (A2) must throw off averages significantly, especially when practiced repeatedly, right? Also, I thought it would be cool to figure out how many keys total have been played: they should add up quickly! There do exist programs that do this for computer keyboards (and here are my stats, if somewhat out of date), but as far as I could tell there wasn’t a good option for a piano keyboard.

Aug 2015 Solving Windows Update Error 8024402F

Recently, Windows Update started failing for me on a few different computers, a few months apart. Site after site promised result after result, but led only to failure after failure. I accumulated a list of different recommendations, and what eventually worked for me: Using a VPN to avoid what seemed to be network-induced restrictions.

Aug 2015 Enabling Hotspot on a Rooted Sprint Galaxy S6

While the transition from my S4 to S6 has gone generally smoothly, I do miss the lack of support for the Xposed framework; specifically, the ability to create a wireless hotspot. However, there is a simple fix, with very little technical knowledge required (taken with gratitude from a post buried on xda-developers):