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.](https://astrid.tech/\_/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
access to its firmware! No firmware was harmed or modified in the making of this
Big thanks to
for helping me figure this stuff out!
I attended the… read more
TIL that you can analyze live packets from remote network interfaces in
Wireshark with the following command:
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
But if you want to
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!
some corrections to this post after
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
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.
![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 Diego](./domino-meme.jpg)So I met
this girl named Alia Lescoulie
at a queer… 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)
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
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
in San Luis Obispo!
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 (
but it's something!
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.
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
APRS on the trip back for Thanksgiving
I decided to take my radio's APRS functionality for a spin on the ride home this
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
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.
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.
I'll make a modal for this content, but I'm… read more
Can we turn smartphones into fax machines?
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
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
astrid.tech online! Additionally, it's been just over a year since I published
, which I
considered the first "complete" version of my site! (spoiler alert: the site is
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.
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....
Why do I put stuff in monorepos?
Monorepos are great, and here's why like to use them for my personal projects.
I am once again tempted to not write this CMS in Haskell, and just write it in
Okay, I swear it actually makes sense in this case! I'm a lot better at Rust
than I was last time!
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 table.](./the-package.jpg)So, I eagerly I cut out the tattoos and pasted them onto my skin.
Applying the… 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,
. 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
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ ...
⎜ ↳ HID 256c:006d Pen Pen… read more
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.
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
IT doesn't support Linux. That sucks, because I use Linux most of the time.
seems to work,
with the following command:
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
Holy fucking shit, it works!
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.
Instead of... whatever that was, I'll be making a webmention receiver in Rust
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?
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.
Oh wonderful. I'm getting weird import errors in my website now. I have an es6
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!
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
Test post from a convenience script! Hope it works!
Changing author name and email in Git
Suppose someone who formerly committed code under
`John Smith <firstname.lastname@example.org>` now commits code under
`Jane Smith <email@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.
My website is currently at 10879 lines, including frontend and backend. That is
an honestly ridiculous number of lines. Is my website bloat now?
I've joined the
! 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
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
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
server that serves
DNS on my home network. I wanted to automatically configure it with my
Kubernetes ingresses using
. There doesn't
seem to be much documentation for this specific setup, so I thought to put
together this guide!
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
every individual node. Thankfully, that's where Grafana and Prometheus come in
to save the day.
Adding Pi's to a cluster
Zerg-rushing server workloads
Look at all of these single-board computers lying around. What are they even
Let's put them to good use.
![Two Pi 3's, one Pi 2, and one Orange Pi one](./raw-pis.jpeg)Raspberry Pi SD Cards
I got the latest
Raspbian Buster Lite image
and extracted the… read more
A Kubernetes cluster but it's only made of used computers
16-year-old me would be proud
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
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
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
`/projects/astrid-tech`, representing an
I considered a couple of options… read more
IndieWebCamp Create Day
today, I continued working on the commenting system for astrid-tech. I got the
Markdown formatting with HTML cleaning. No injecting
`<script>` tags for
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
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.
Particles are spheres. They essentially contain… read more
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
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
getting an A in a particularly difficult class because I didn't take
This quarter, I'm taking a physics class,… read more
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
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
A quick primer on Gatsby
Static… read more
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
When I was taking Computer Architecture, I needed an FPGA for the class, and a
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
something, which is why I like programming and thus
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!
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: