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
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.
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

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
As promised from
my frustrations while taking a walk
,
I finally got an I-Gate set up in my bedroom. Sadly not a digipeater (
yet
)
but it's something!
read more
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
aprs.fi
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
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
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
astrid.tech'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 astrid.tech
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)
astrid.tech 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
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 cpvpn.calpoly.edu --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! https://github.com/ifd3f/astrid.tech/pull/140
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
Instead of... whatever that was, I'll be making a webmention receiver in Rust
instead!
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
It took way too long because of laziness, but I've finally added an h-card to my
site!
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 <john.smith@example.com>` now commits code under
`Jane Smith <jane.smith@example.com>`. 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
In other news, I've joined another webring, the XXIIVV webring. Just like the
IndieWebRing, it's linked in the footer.
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 astrid.tech 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
Taking pictures with Kubernetes and debugging it with Grafana
A case of mistaken causes
A 7-node server cluster would be terrible to monitor if you had to SSH and
`top`
every individual node. Thankfully, that's where Grafana and Prometheus come in
to save the day.
read more
Adding Pi's to a cluster
Zerg-rushing server workloads
Look at all of these single-board computers lying around. What are they even
doing?
Literally nothing.
Let's put them to good use.
![Two Pi 3's, one Pi 2, and one Orange Pi… 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
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 astrid.tech.
I'm… read more
Today was a great day. I got astrid.tech'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 astrid.tech
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
astrid.tech v1.0!
A reflection on the project and on imposter syndrome
astrid.tech 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!
Yay!
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)
My posts are also available in the following formats: