Blog Archive

Gaming on an Android VM on Linux

So you can do the gacha grind on your computer instead of your phone

I wanted to run Android games (specifically Arknights) on my NixOS box, but Anbox seems to be broken on NixOS. So, I figured out a way to make it work in Libvirt. Other people wanted to do it too, so here's a guide. Assumptions about you You know how to navigate an Android… read more

Using PRs in Nixpkgs before they actually land in Nixpkgs

A guide on using overlays to enable your impatience

Nixpkgs is a very rich package repository, but sometimes it doesn't have the package that you want. However, if you're lucky, someone else might be working on adding it right this instant! You can check the current pending pull requests to confirm this. There's a good chance… read more

nixos fediverse

A GPU Passthrough Setup for NixOS (with VR passthrough too!)

I'm doing VR on Windows on QEMU on NixOS because kernel anti-cheat is poison

This week, I built a new gaming PC and got GPU passthrough set up on it! In this article I'll talk about how I got it working, and stuff I learned about virtualization along the way. ![Neofetches for Kali on WSL on Windows on QEMU in Libvirt on NixOS showing all my… read more

Blink Mini RE, Part 4 -- Staring into the heart of the binary

With pretty graphs in coincidentally non-binary colors!

Because I had the privilege of obtaining factory-fresh ROMs from the cameras ( as covered in the last episode ), I realized that I could use those to perform some deeper analysis of the ROM's structure. So, that's what this post will set out to do. This post was made in a Jupyter… read more

Blink Mini RE, Part 3 -- Staring into the eye of the binary

If we stare at a binary for long enough, we will intimidate it into giving us its little secrets

This is a continuation of the last post, where I desoldered and dumped the ROM . In this post, I will discuss some of my initial findings from the firmware. I'll write about more juicy findings in the next post because this one is getting quite long, and the next one deserves a… read more

Blink Mini RE, Part 2 -- Desoldering and dumping the ROM

I desoldered and resoldered a chip without legs, so I'm officially an expert on all things electronics

![The Blink Mini board, focused on the ROM.](\_/2022/07/07/0/focus-rom.jpg)This is a continuation from the post where I disassembled the lil guy . Last time, I couldn't do anything about this chip because I was waiting for my SPI flash programmer kit to… read more

Disassembling an Amazon Blink Mini camera

I used Ghidra twice, so that means I'm officially an expert in reverse engineering

Strap in kids, this post is about me physically hacking apart Amazon's Blink Mini to get access to its firmware! No firmware was harmed or modified in the making of this post... yet. Big thanks to Ada and Erin for helping me figure this stuff out! Background I attended the… read more

TIL that you can analyze live packets from remote network interfaces in Wireshark with the following command: ```bash ssh $SSH_TARGET "tcpdump -w- -i $REMOTE_INTERFACE" | wireshark -k -i- ```It's essentially three commands glued together in a big pipe. On the left side of the… read more

How I became a l33t h4x0r by installing Kali Nethunter on LineageOS on a Pixel 3

Do you want to hack your neighbors and disable their Wi-Fi because they're blasting too much loud music? Don't, because this is highly illegal and you'll get into trouble. As my Network Security professor says, "please don't get arrested." But if you want to theoretically have… read more

What happens to TLDs when their country stops existing?

EDIT Sun May 15 10:38:34 PM PDT 2022: Hello Hacker News! I've made some corrections to this post after Keith Winstein pointed out a small historical inaccuracy. Turns out, ICANN did not exist until it was created by the Clinton admin on September 18, 1998 , at which point… read more

Top 4 shitty Github Actions hacks that I used this weekend

#2 will make you vomit because I sure did

Github Actions is like the free cup of beer you get at chemistry conferences; it sucks, but hey, it's free. That's why I use it to build the configs for my homelab . I had some decent CI pipelines set up for it, but unfortunately they weren't very reliable. So I spent the… read more

My trip to the ACS Spring 2022 conference

Or, how I got dragged into a computational chemistry research project and went on vacation to San Diego

I guess I'm a travel blogger now. Context ![Domino meme. Small domino: meeting some random girl at a queer Halloween party you went to on a whim. Big domino: going to some a chemistry conference in San… read more

Skeleton Stick, a hardware password manager

I got to choose any security-related project I wanted for my CPE 321 (Intro to Cybersecurity) final project. So, I chose to make a hardware password manager on a Raspberry Pi! ![The password manager, unlocked](/\_/projects/unlocked.jpg) read more

Getting NixOS to work on a Surface Pro 6

This post chronicles my experiences trying to get NixOS running on my new Surface Pro 6. Why I got it My older travel laptop, `cracktop`, was kinda breaking down. The keyboard refused to send keystrokes unless you pressed down really hard on it. Additionally, my gaming laptop,… read more

I now have a QR code tattoo!

Content warning: this post mentions tattooing and has a small amount of skin peeling. Following up from my last post about temporary tattoos , I finally got it permanently etched onto my skin! Thanks to Kelsey Kansas at Crybaby Tattoo in San Luis Obispo! And yes, it can be… read more

Yesterday I walked around town with my AT-D878UV blasting APRS signals to measure the reception of my I-Gate. Turns out, it has horrible reception! I suspect it's because of the antenna, the tiny ~10cm-long one that my RTL-SDR came with. It seems I'll have to hook up it up to a… read more

aprs ham-radio

Installing NixOS with multiple encrypted ZFS pools, decrypted with one password

This article describes how I got a NixOS install working with multiple encrypted ZFS disks. read more

I went out on a walk with my extendable antenna to test the APRS signal. When I came home and looked at I got a grand total of... 2 APRS packets out. Turns out there is horrible I-gate and digipeater coverage in the Peninsula. The nearest digipeater is 11 miles away,… read more

ham-radio aprs

APRS on the trip back for Thanksgiving

I decided to take my radio's APRS functionality for a spin on the ride home this Thanksgiving break. Unfortunately, there was horrible coverage along most of the trip. It seems I got picked up by the W6DXW-1 digipeater in King City, KI6ETL-10 in San Jose, and WA6TOW-2 in Pacifica… read more

ham-radio aprs

Misadventures in configuring an AT-D878UV radio

Last week, because my Baofeng UV-5R's VHF band appeared to be broken and I wanted to experiment with APRS, I decided to splurge on a Anytone AT-D878UV radio. I received it from eBay today, and I was super eager to try it out! However, I ended up encountering a whole bunch of… read more

Testing a Raspberry Pi 4 with SPI TFT Screen

Today, my Raspberry Pi 4 and TFT/case bundle came in the mail, so I decided to give it a spin and see how it works. This will be used for an upcoming project that I will not spoil. Assembly The case came with 4 screws to screw the Pi into the bottom of the case. ![The Pi,… read more

My site now supports hidden content about NSFW topics! It's a bit janky, but if you scroll down to the footer there is a checkbox for that. Do NOT check that box if you are under 18, or are not willing to see such topics. Eventually I'll make a modal for this content, but I'm… read more

Can we turn smartphones into fax machines?

At today's CPARC meeting, I had an extremely stupid idea. If fax is just audio over phone, what if you had a smartphone app that: converted a PDF into a fax signal dialed a fax machine sent the fax signal over the phone call? But then it gets better. What if on the receiving… read more

A horrible workaround for my bootloader deleting itself from EFI

Eye bleach suggested afterwards

What is this systemd service I have on my computer? ❯ cat /etc/systemd/system/install-bootloader-on-shutdown.service read more's belated 1-year anniversary! 🎉

If the website was better late than never, then this post is too!

It's been a year (and 4 months) since I first brought v0.1.0 of online! Additionally, it's been just over a year since I published v1.0.0 , which I considered the first "complete" version of my site! (spoiler alert: the site is never complete) has… read more

I used NixOS for a week

I spent the week using a travel laptop with NixOS installed on it while at school. On that laptop, I fully bought into the NixOS ecosystem, including managing my /home folder + dotfiles using home-manager.\[^1] Here's my experience with it so far. read more

nixos Linux

Fuck it, I'm rewriting my CMS in Rust. Either Haskell tooling is too painful, or I'm too stupid to set it up. Time for attempt #7.... read more

Why do I put stuff in monorepos?

Monorepos are great, and here's why like to use them for my personal projects. read more


I am once again tempted to not write this CMS in Haskell, and just write it in Rust. Okay, I swear it actually makes sense in this case! I'm a lot better at Rust than I was last time! read more

QR Tattoo Preliminary Testing Results

Continuing from my last post about the QR code tattoos , my package of temporary tattoos arrived from StickerYou on Thursday: ![The package, opened and displayed on my… read more

I'm currently trying to set up my old laptop as a travel laptop. My regular laptop is rather heavy (5.5lb + 1.5lb charger because it has trash battery life), so this might be easier to bring to class. It's gonna run NixOS! I tried to make it autowipe root like my server does, but… read more


I'm attempting to make a CMS in haskell, again . You'd think that given how poorly it went last time, I'd give up on it, but I guess here we go again. The plan is for it to be a flat-file-to-API CMS, where you write your flat files in a Git repo and it imports all of them to an… read more

Locking Drawing Tablet on Single Monitor

To lock a drawing tablet to a single monitor, the command is xinput map-to-output $STYLUS $MONITORwhere `$STYLUS` is gottten from `xinput`: ❯ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ ... ⎜ ↳ HID 256c:006d Pen Pen… read more

Someone at HWC today (I forgot who) brought up a very good point about my QR tattoo plan: what if the TLD kicks you out, or disappears? What if something happens to the .tw TLD? Also, .tw does cost quite a bit of money every year. So, I'll look into getting a cheaper a domain… read more

I'm planning to get a QR code tattoo!

Leaning in *hard* on that cyberpunk aesthetic

I'm already a transhuman trans humanist transhumanist human, so I thought, "why not just go all the way and get a QR code tattoo?" This article is a compilation of basically all of the research I've done on this topic. read more

Today was my first day of school of this year, and the first day in-person since the pandemic began. I guess on the one hand, it feels a bit strange going to in-person classes, but on the other hand, it felt surprisingly... normal? But then I also felt a bit worried about viral… read more

Connecting to the Cal Poly VPN from a Linux machine

Cal Poly's VPN uses GlobalProtect , but IT doesn't support Linux. That sucks, because I use Linux most of the time. Instead, OpenConnect seems to work, with the following command: ```bash openconnect --protocol=gp --user=<user> ```This may need to be run as… read more

For some reason, my the automated build action for the Webmention receiver is failing due to spurious network errors. They're definitely spurious, but they've been consistently happening for the last several hours. I hope this strange workaround fixes it. read more

Holy fucking shit, it works! read more

My blog should almost be ready to receive webmentions now! It won't send anything just yet, nor display the webmentions, but those are still in progress. read more

I fought the node, and unfortunately, the node won. For some reason, it's extremely difficult to set up a dependency structure where there's a library and an executable depending on it, while using TypeScript and ES6 imports. I could just be a dumbass, which might very well be… read more

But first, I'm gonna promote the frontent/content directory to a top-level project directory. If we're gonna break things out into their own projects, might as well go all the way, eh? read more

Welp, guess it's time to do a big refactor of my project to get it working! 12 months of tech debt crashing down, I should probably split out my frontend/lib folder into an actual node project instead of whatever the hell it is. read more

Oh wonderful. I'm getting weird import errors in my website now. I have an es6 import like ```ts import rehypeHighlight from "rehype-highlight"; ```and ts-node is complaining that I can't `require()` it, I need to import it. I'm clearly fucking `import`ing it you idiot! read more

My bike's chain was quite loose, and it kept slipping off the gears and rattling as it ran across the chain guard. However, I repaired it at the SLO Bike Kitchen today by tightening the chain and just giving it a big cleaning and re-lubing. Now, it's well-tensioned and competely… read more


Test post from a convenience script! Hope it works! read more

Changing author name and email in Git


Suppose someone who formerly committed code under `John Smith <>` now commits code under `Jane Smith <>`. All of her commit history is under John, and she wants to change it to Jane. Additionally, she used to commit with a funny email… read more


My website is currently at 10879 lines, including frontend and backend. That is an honestly ridiculous number of lines. Is my website bloat now? read more

I've joined the IndieWebRing ! If you look at the footer, there's a new line that says IndieWebRing, and you can click on the arrows to look at other sites in the web ring. If I find more webrings, perhaps I might add my site to them so I can have all the webrings. read more

A third redesign?

The grass is always greener on the other side

So we're already on v2, despite the fact that the footer still says v1. However, I'm feeling like my website is not very flexible anymore, and I want to redesign. Why the hell do I want to redesign my website again? There are a couple reasons. My current setup is… read more

How to set up Dynamic DNS on FreeIPA for your Kubernetes Cluster

I have a FreeIPA server that serves DNS on my home network. I wanted to automatically configure it with my Kubernetes ingresses using ExternalDNS . There doesn't seem to be much documentation for this specific setup, so I thought to put together this guide! Requirements This… read more

Interviewing for Facebook

I'm pleased to announce that I'm going to be a Production Engineering intern at Facebook this upcoming summer! Production engineering is similar to DevOps at other companies, but with software engineering tasks, too. Although it's been over a month since my interviews, I hope I… read more

My speaker is broken, what do?

Cracking open a hard one with no one but myself because there's a pandemic outside

I have these Z506 speakers that I got for cheap on eBay a couple years ago. They worked pretty well until one day, the audio was extremely loud and the potentiometer was not able to turn the sound down, so I had to either run my audio at 4% or not at all. ![The Z506 Speakers from… read more

Declaratively Provision Databases and Submit Credentials to Kubernetes using Terraform

DATABASES! I didn't say it, I DECLARED it!

Firefly III is a budget management app that I'm trying to self-host. Being a budget management app, it would hold every single monetary transaction I make, which is obviously somewhat sensitive. As such, I'm running it on my local cluster instead of on a public cloud instance… read more

A Kubernetes cluster but it's only made of used computers

16-year-old me would be proud

In my last post had 7 things I wanted to do. Well, here's a summary of everything I did so far. The IaC repo is here and the last commit before I published this article was d18736 . EDIT: It has come to my attention that I'm missing a picture. Anyways, here's what the… read more

Simple Self-Hosting with Docker

"But it works on my computer!" "Then we'll ship your computer."

Setting servers up is a pain in the ass. There's so many installation steps for each service, and then there's the potential for conflicting services, and then when you have to set everything up again due to migration or something like that, you give up because it's just so much… read more

Docker server DevOps

I'm self-hosting stuff on my server right now. Not just the backend, but things like: Firefly III to track my finances Bookstack wiki to plan out a D\&D campaign All of these services are being reverse proxied by a single Caddy instance to subdomains under I'm… read more

Today was a great day. I got's backend deployed today! Found the cause of my tests not working. The reason my tests worked on SQLite but not Postgres was because the tests relied on deterministic primary keys. On a normal `TestCase`, the SQLite database uses running… read more

Today, I got the following things done on my project: Refactored frontend comments to use an outer context so there's less passing callbacks and stuff around Implemented reporting and replying to comments Dockerized the backend with nginx and Postgres! Wondered why my tests… read more

I attempted to figure out an alternative tagging system for astrid-tech. Currently, there are 2 types of tags: A tag like `cpp`, which represents a plain old tag. A tag that starts with `/`, like `/projects/astrid-tech`, representing an object. I considered a couple of options… read more

At IndieWebCamp Create Day today, I continued working on the commenting system for astrid-tech. I got the following done: Markdown formatting with HTML cleaning. No injecting `<script>` tags for you >:( Wrote tests for the backend Made the frontend submit comments to the… read more

Adding a Backend to

You thought I was done with this website?

My website currently only has a frontend. Now, that's cool and all, but I want my website to be fancier than that, and have more user interactability that I can customize. Okay, yes, there's no one visiting my site to begin with, but that won't stop me from wasting my time on… read more

Iterative n-body Collision Problem

An essential part of a complete rigid-body physics engine

For my CSC 572 final project, I implemented a 3D rigid-body physics engine. Naturally, the problem of n-body collisions arises and we need to figure out what to do about them. Here are notes I wrote about my implementation. Structs Particles are spheres. They essentially contain… read more

Brewing Kombucha

FizzBuzz but without the Buzz

And now for something completely different. I first tried kombucha back in spring, and it was absolutely not what I expected. It was fizzy, sweet, and it had a little bit of a nice sour taste to even it out. Like soda, if it had probiotics in it! So a few weeks ago, I decided to… read more

kombucha notes v1.0!

A reflection on the project and on imposter syndrome v1.0 is finally published after 6 months of active development! Major version 1 has the core functionality of the site, and it's in a state that I would call "complete." It's been a long and tough journey, but now that it's over, I can finally say that I've completed… read more

The possibility of using LaTeX to take notes for Physics class

When LaTeX is your hammer...

I don't often take notes, and this is a poor habit of mine. Sure, I end up getting A's in those classes anyways, but there's always the possibility of me not getting an A in a particularly difficult class because I didn't take notes. This quarter, I'm taking a physics class,… read more

Best-in-class malloc()

Technically it's second-best-in-class, but it's still speedy!

I've just finished CPE 357, and I'm feeling quite proud about this `malloc()` implementation I wrote! Out of approximately 30 people in the class, my malloc was the second-fastest for a specific benchmark, with the average submission taking about 200us, mine taking 169us (nice),… read more

An overview of the new Gatsby backend

Come on in, there's digraphs in here

One of the big parts of the 0.2 release is a thing that no one will ever get to see directly: The brand new, highly modular backend. This post will likely be highly technical, but if anyone wants to see how it all works inside, this is for you. A quick primer on Gatsby Static… read more

Finally live!


My website is now live! Actually, it's been live for a few days by now, I'm just a bit late to make the post. As you can see, it's not completely done, but don't worry, I'll still be pushing new updates and content to it. There's a few posts before this that I wrote while the… read more

Down-shifting and filtering a signal

Because the FPGA is fast, but not *that* fast

Introduction When I was taking Computer Architecture, I needed an FPGA for the class, and a Basys 3 in particular. In any other year, I would have probably borrowed it from Cal Poly to take computer architecture. However, due to the pandemic, I had to spend money and buy it… read more

I'm thinking of becoming a CS major

A rambling post about my thoughts on swapping majors

I feel like if computers didn't exist, I would have been a mathematician. But there's plenty of opportunities to embed fancy math inside a piece of code, and code can actually do something, which is why I like programming and thus computers. But when I was doing my college… read more

Hello World! Personal Website Redesign

Because this actually isn't the first iteration of this website

Now that I think of it, this actually isn't too bad of an idea. By the time I finish this website, I will have a blog with actual content! Unfinished projects Since I was a very very small human, like maybe 10 or so, I loved building and making things and using cool tech to make… read more

Gays in an Electrical Closet

An essay I wrote in English class about the Cal Poly Pride Center

On the northwestern side of the University Union building (commonly referred to as the UU) is a door with the words "Pride Center" printed on it next to a large TV advertising LGBT-related events this quarter. Its position is rather unassuming, and somewhat hidden from the main… read more

(End of posts)