Guys, it happened again 😔 I ran out of storage on my ThinkPad
The goal should be to write code you can revisit months later and be able to jump back in because the codebase and documentation are so good
A story. A script. A production. And finally… a movie that takes its place in cinema history…….. Welcome to AMC theaters. We. Make movies, better.
Excited to watch the FNAF movie! Will review after at 6 AM (FNAF reference btw)
Made my first Wikipedia contribution today lol
Trophy Check! An ESP32 Clash Royale Metrics Mini-Project
The last two days I've been working a bit on a Clash Royale statistics display using an ESP32 and a 128x128 TFT SPI LCD (ST7735). I originally wanted to just play around with the random parts I had and learn more about I2C and SPI, but it has turned into something I think is worth sharing. Why Clash Royale? My housemates and I play the game, and I thought it would be cool to be able to see each other's progress at a glance.
The first iteration of this project had the ESP32 making a HTTP GET request to the official Clash Royale API via the RoyaleAPI proxy (to bypass the IP address restriction). The following libraries were used (code excerpt):
// see more here: https://learn.adafruit.com/adafruit-gfx-graphics-library
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
// see more here: https://github.com/espressif/arduino-esp32/blob/master/libraries/HTTPClient/src/HTTPClient.h
#include <HTTPClient.h>
#include <WiFi.h>
#include <ArduinoJson.h>This ESP32 weather station project was a great reference in getting started with the project. The ESP32 was able to loop through a list of player's tags and display their in-game name, current and best trophy count on the LCD. However, this information generally is boring and it was not obvious when someone's trophy count had changed.
The current iteration runs a local (which could also be a remote) TypeScript Express.js server that polls the official Clash Royale API (again via the RoyaleAPI proxy) at a specified interval, recording the user's data and calculating a daily trophy count delta. Now, the LCD displays a little symbol alongside their trophy count that would be either a flat, gray rectangle, upward, green triangle, or downward, red triangle if a player's daily trophy count delta was 0, positive, or negative. The trophy count change, if non 0, was displayed next to the symbol.
Although I'm sure the ESP32 can do its own tracking and processing of the player data, I wanted to keep it separated and the data persistent. Now I can expand to multiple devices, which could all poll from the same data tracking server to retrieve player metrics.
The source code will be live soon for this project, including screenshots of the setup! hehehehaw
I'm not sure what it means when it's Black Friday and there is nothing that I want to get, the closest thing I got to purchasing was this Alchitry Cu FPGA. I was thinking about doing digital signal processing on audio or video signals with it, which would be really cool.
Happy Thanksgiving! 🦃
Added a skills section to my portfolio page, I'm not completely happy with it right now but I refactored some styling as a necessary side effect. I originally had the logos along with each item but it was too visually distracting. It's hard to make minimal and functional/readable layouts lol
Pork Chops (Poem, 2025)
It was a bright Monday afternoon. We had planned to grab a quick bite before beginning our grind. However, there was just one problem. We had no places to eat in mind.
We trawled through our past favorites, but realized they were old. We were craving for something new, something.... bold?
We thought maybe tacos, maybe Panda Express. But we decided on Chinese food, and nothing less.
We started driving toward our destination, driving there with determination. Oh, how wonderful the world can be when you're exploring new things and cuisines to eat.
We gazed at the menu there were so many things to see, so many to pick, too many for me...
Eventually we decided on two savory dishes, a twin selection without misses. Hungrily we waited for our food to arrive, in this moment I was so anxious, so alive.
Then it arrived at our table, two dishes and some rice. We said, dang we got all that? What a good price.
Before we dived in, we first snapped some pics. With that out of the way, we readied our chopsticks.
First, we tried the fish. The fish was delish. We munched it all up, for it wasn't a miss.
But there was still the pork chops inviting us to bite. We answered its call, but try as we might.
We asked each other, what is this taste? It's weirdly sweet, did they add some strange paste?
We kept eating, but the taste was still there. I had to call the waitress, so I got out of my chair.
She turned to me and asked, whats wrong with your food honey? I looked at her and said, this pork chop... it tastes kinda funny...
Must... Push... To..... Prod......
Posts can now display co-writers! Previously the guest writer's name was underlined with a dotted line, which made it seem like a link. The guest and co-writer names are now bold instead.
Also, it took me a minute to realize that DynamoDB stores its "arrays" as sets after my array .map() wasn't working.
I also updated my personal website to include this site as a project. Check it out!
Fun fact of the day
The bottom of hiking shoes are called lugs. Abercrombie Black Friday sale starts tomorrow!
Hot take of the day
Kaoshiung is an unwalkable city.
BlogWay IPO
BlogWay is now public! Its source code can now be accessed at https://github.com/waymondrang/blogway. The documentation is currently a little lacking, and I plan to work on that in the coming days. I also created architecture diagrams for the endpoints to visualize how the AWS services are connected.
I also made a minor change in the styling to shrink the line height of code blocks a bit, so that ASCII art can be rendered better. See?
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡦⢄⣀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠽⠶⠒⠒⠒⠲⠶⠄⠉⠙⣦⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⠖⠺⠷⠤⢄⣀⡀⠠⢤⣢⣴⠞⠉⠉⠉⠉⠉⠙⠳⢦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠋⠀⠀⠀⡀⠠⠀⢈⣡⠶⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠋⢀⡶⠚⠋⠙⠚⠏⣙⡷⠒⠉⠁⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠋⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠉⣿⢠⠟⠀⢀⡠⢔⡞⠀⣸⣿⡀⠀⠀⠉⠉⠉⠙⢢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⢷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠖⠛⠁⢰⢇⣿⠀⠀⡞⢀⡞⠀⠀⡇⣿⢿⠢⣄⣀⠀⠀⠀⠀⠈⢻⣿⠒⠦⢤⣤⠤⡄⣠⡼⢻⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡟⠀⣿⢀⠄⠀⢸⠀⠀⠀⠀⣿⠀⠛⣤⠈⢛⠢⠄⠀⠀⠀⢹⡷⢄⠀⣠⡶⣻⠟⢀⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣞⡴⠚⡇⠀⠀⢰⠸⡇⠀⠀⣸⠇⠊⠀⣠⣿⣮⣷⢦⣄⠀⠀⠀⢹⣠⠞⠁⣰⠟⠀⣾⠋⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⠞⠁⠀⣸⠁⠀⠀⠀⠀⢹⣄⣼⠃⢀⣤⣾⣿⣿⣿⣽⡖⢸⣧⠀⢸⡿⢯⡀⣸⠁⠀⣼⠏⣀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠒⠚⢀⡟⠀⣀⣤⢄⣴⣿⠞⠑⠛⠛⠙⡟⠙⣷⣿⡿⠀⢸⡿⡇⣼⡁⠀⠳⣟⠀⣰⠋⠀⣿⡇⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠟⢉⣻⣶⣾⣻⣿⣟⣫⣄⠀⠀⠀⠉⠀⠘⠋⠀⠀⢸⠇⣿⣿⡝⢦⡀⠘⢦⠟⠀⢰⠁⣤⣤⣳⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⡵⠞⠛⠋⠉⣿⣾⡉⢳⡟⠻⡇⠀⠀⠀⠀⠀⠀⠀⢀⡾⢈⣡⣿⢦⠀⢿⣦⡈⣧⢠⢏⣶⠋⠀⠈⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡯⣿⣟⠓⠀⠀⠇⠀⠀⠀⠀⠀⠀⠒⠛⠋⠁⣼⡟⢸⠀⣦⣧⢿⣻⣿⣿⣿⣶⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⢸⢸⢻⣧⡀⠀⠛⠢⠄⠀⠀⠀⠀⠀⠀⢀⣼⡟⢁⡞⠀⠘⣿⣽⣿⣧⠀⠀⢠⠈⠳⡝⢳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠞⠁⢸⣸⡇⣟⠳⣄⡀⠠⠶⠒⠻⠛⠂⠀⣠⢾⠏⣠⠞⠀⠀⣤⢟⡿⠘⣿⠀⠀⠈⢣⠀⠈⠢⡙⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠶⠚⠉⣉⠟⠁⢀⣞⣵⠿⠟⠉⠀⠈⠛⠶⣄⠀⠉⠀⣠⣴⠥⠞⠋⠁⣀⡰⠾⠷⠾⠦⣬⣙⣧⡀⠀⠈⡇⠀⠀⠀⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠿⠗⠒⠲⠾⣷⣀⣶⠿⠋⠁⠀⠀⠀⠀⠀⠀⢀⣈⣽⣶⠯⠽⢶⣆⣠⣴⠚⠉⣉⠩⠭⠳⠦⣄⣈⠉⢙⠶⢦⣅⠀⠀⠀⣿⠋⢧⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠠⠎⠁⠀⠀⠀⠀⠀⠀⠋⠁⠀⠀⠀⠀⠀⠀⠀⣠⢶⡿⢋⣁⣄⡴⠞⠉⠁⠈⠉⠙⠙⠲⢯⣒⠦⢄⣀⢩⡿⠿⢦⣘⣿⣗⡖⠶⣯⣀⠈⠉⠀⠀⠀⠀⠀⠀
⣠⠴⠒⢿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡾⢻⡿⠋⠉⣀⠴⠒⠉⠁⠀⠀⠀⠀⠀⠻⣧⠀⠀⢀⣠⣥⢾⣿⣿⡫⠍⢻⣟⣶⣀⠀⠀⠀⠀⠀⠀⠀
⣁⣀⠀⠈⣿⡉⠻⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠉⢀⣿⡠⢖⠾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣷⠀⣞⢙⣧⣠⣀⡉⠻⣶⣼⠃⢘⣿⠶⣄⡀⠀⠀⠀⠀
⢇⡽⠃⠀⠹⣿⠀⠉⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣯⠗⠋⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠠⢹⢻⠀⢿⣿⠟⠉⢯⡙⠶⣌⠉⣑⣾⣇⠀⠉⢿⠀⠀⠀⠀
⠏⠀⣰⡆⠀⠹⣷⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠋⠁⠀⠀⠀⠀⣠⣾⠁⠀⠀⠀⠀⠀⡴⠃⠈⣏⡆⡀⣻⣦⠀⠘⣧⠀⠈⢻⡟⠓⢿⣄⠀⠘⣦⠀⠀⠀
⡤⢊⠼⡃⠀⠀⠻⣷⠀⠙⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡾⠁⠀⠀⠀⠀⠀⠀⣠⠏⠀⠀⠀⠀⠀⠀⢰⠀⠀⢹⣷⠀⠀⣿⣼⡀⠸⣇⠀⠀⢿⢦⠈⢿⡄⠀⢿⣦⡀⠀
⠋⠁⢸⣷⠀⠀⠀⠹⣷⡀⠘⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠃⠀⠀⠀⠀⣀⡤⠞⠁⠀⠀⠀⠀⠀⠀⢰⣾⠆⠀⢸⠹⣆⢀⢻⣷⣱⣄⣽⣖⣂⣈⣾⣷⣨⣿⣄⠘⠇⠙⢆
⠀⣰⣿⠋⣧⠀⠀⠀⠈⢿⡀⠘⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡏⠀⠀⢠⡴⠚⠁⣠⠴⡀⠀⠀⠀⠀⠀⠀⢸⠉⠀⢀⡟⠀⣿⠈⠈⣿⣿⢿⡻⣿⣏⣩⣝⣩⣍⣭⣿⡆⠀⢠⠤
⣾⣿⠃⠀⠘⣧⠀⠀⠀⠈⠻⣆⠀⠹⣦⡀⠀⠀⠀⠀⠀⠀⣰⡏⣀⣴⠧⠤⠼⡞⣯⠶⠚⣃⣠⠄⠀⠀⠀⠀⠀⠀⢤⢼⡅⣼⠟⠀⡇⡜⢿⡎⢧⣀⣷⣀⣀⠀⠀⠀⣸⠃⠀⢀⣤
⣿⠃⠀⠀⠈⠈⣷⣄⠀⠀⠀⠘⢷⡄⠙⢿⣦⠀⠀⠀⠀⣴⣿⠯⢵⣶⡿⠛⠛⠓⠲⢤⣅⠀⠓⢤⡀⠀⠀⠀⡐⠂⣸⠀⣼⠋⠀⠀⡇⢸⡜⢿⣯⠉⢯⠙⠛⠻⠯⣟⠈⣧⣴⠟⠁
⣧⡀⠀⠀⠀⠀⠈⢿⣦⡀⠀⠀⠀⠹⣧⣀⠙⢿⣦⡀⣿⢁⣤⡴⠋⠁⠀⠀⠀⠀⠀⠀⠈⠻⣷⣖⠜⣆⠀⢸⡀⠀⣿⣾⠃⠀⠀⣴⡧⠀⢧⠈⢿⡆⠘⣧⠀⠀⠀⢀⠀⢹⣟⠀⠀
⠏⢧⠀⠀⠀⠀⠀⠀⠻⣾⣄⠀⠀⠀⠈⠻⣧⣄⠛⢿⣿⣿⣯⣄⣀⡀⠀⠉⠛⢦⡀⠀⠀⠀⠈⣿⣲⣼⣮⡟⠀⠀⣿⠇⠀⠀⢠⠃⡇⠀⠈⡇⠸⣿⡆⠹⡆⠀⠀⢸⢦⠀⢻⡄⠀
⠀⢸⡆⠀⡀⠙⠒⣄⣀⣌⣿⠇⠀⠀⠀⠀⠈⠛⢷⣄⠙⠻⣿⠀⠀⠈⠁⠀⠀⠀⢻⡀⠀⠀⢄⠸⣟⣟⣧⠀⠀⠀⣿⠀⠀⢠⠋⠀⠀⠀⠀⠃⢀⣽⣿⡀⢿⡀⠀⠈⡄⠳⡌⢷⡀
⣧⠀⢹⡀⠈⠑⠀⣻⣾⡟⠋⠀⢠⡞⡟⢦⡀⠀⢀⣹⣿⣤⣄⠙⠶⣄⠀⠀⠀⠀⠀⠙⣄⡀⡈⡄⢸⣿⡟⢳⡄⠈⡟⠀⢀⠋⠀⡀⠀⠀⠀⢣⢿⡎⢹⣧⠀⣧⡀⠀⠙⣆⠀⠘⣧
⣉⣠⠞⠁⣶⢤⠀⠙⣯⣧⠀⢀⣸⣿⣜⠛⣿⠛⠉⠀⠉⣿⡏⠛⠛⠾⢹⡦⠀⠀⠀⠀⣿⡘⡱⣻⣿⢟⢷⡄⢳⣾⡇⠀⠈⡤⠎⠀⠀⢀⣼⣣⠿⠀⠈⣿⣦⠿⠻⡖⣄⠸⡼⡄⠸
⠙⠁⠀⠀⣿⣎⣦⠀⠻⡾⡏⠀⠀⠙⠻⠿⠟⠀⠀⠀⢠⡿⠀⠀⠀⢀⣾⠇⠀⠀⢀⡴⠃⢛⣽⢻⠇⠀⣞⣿⡾⡾⠀⠀⠛⠀⠀⠀⣠⣞⡝⠃⢀⠀⢸⣿⣿⡀⠀⠻⣯⠀⢳⣱⡄
⠀⠀⠀⠀⣿⢻⡙⡆⠀⢿⡼⣆⣠⣠⣄⠀⠀⠀⠀⣠⡿⠀⠀⠀⢨⣿⠏⠀⠠⠔⠋⢀⣴⡿⠻⠋⠀⣠⣼⣟⡿⠁⠀⡠⠀⠀⢀⣴⣻⠟⠀⠀⢸⢀⣾⡛⣧⣷⠀⠀⢻⡄⠘⡿⠁
⠀⠀⠀⠀⣽⠀⠓⢿⡄⠈⣿⣿⣿⣿⠎⠀⠀⠀⣰⡿⠀⠀⠀⣨⣿⠇⠐⠀⠀⣀⣴⣿⣋⣴⣷⣷⡾⠛⢩⡇⠀⡠⠞⠀⠀⣴⣿⠾⠁⠀⠀⠀⢈⣾⡟⠁⢹⣯⣧⠀⠀⣷⡼⢁⣶
⠀⠀⠀⢰⡿⡐⠀⡾⠀⠀⢱⣿⡟⠁⠀⠀⠀⣰⡿⠀⠀⠀⢶⣿⣇⠀⢀⣴⣾⠋⠉⠀⠀⠀⠉⠁⠀⣀⣼⠗⠋⠀⢀⡠⣞⠟⠉⠀⠀⠀⠀⢨⣾⠟⠁⠀⠀⢿⣿⡆⠀⢹⣇⣾⠏
⠀⠀⣰⠟⢠⠃⣰⠃⠀⣠⣿⡟⠀⠀⠀⠀⣼⠟⠀⠀⠀⣀⣾⣧⣿⡿⠟⠉⠈⠀⠀⠀⠀⣀⣤⣶⠿⠟⠉⢀⣀⣴⣿⠞⠁⠀⢀⢀⣠⣠⣶⢿⡏⠀⠀⠀⠀⠘⣿⣿⡀⠈⣿⡏⠀
⠀⣨⡥⠴⠾⠆⠃⠀⣼⢿⡟⠀⠀⠀⢀⣾⣏⠀⠀⠀⣯⣿⣟⢏⠁⠈⠀⠀⠠⢤⢴⠒⠉⡿⡟⣀⣠⢴⣾⡻⠿⠊⠀⠀⠀⠀⢀⣠⣾⠟⢡⣾⠁⠀⠀⠀⠀⢠⠟⢿⣷⠴⠻⡇⠀
⠆⠀⠀⠀⠀⢰⢀⣾⢻⠟⠀⠀⠀⢀⡾⡿⠋⠀⠀⣶⣿⠟⢳⣈⡆⢀⡀⠀⠀⠀⣈⣀⣴⣷⠿⠿⠚⠉⠀⠀⠀⠀⡀⣀⡤⠶⠿⠋⣁⣴⠟⠹⣦⡠⣤⣴⣤⣻⡄⠀⢿⣦⠀⢱⡄
⠀⠀⠀⠀⢀⣀⣸⣭⠀⠀⠀⠀⣵⣿⡇⠁⢀⠄⣴⠿⢀⣠⣾⣿⣯⣙⣿⣿⠿⠿⡛⠉⠁⠀⠀⠀⠀⠀⣀⣠⡴⠷⠛⡭⢀⣀⣤⡾⠋⠁⢀⡴⢏⣵⣿⣯⣹⣿⠙⣝⣾⣿⡎⠉⠁Very cool.
Happy friendsgiving everyone! 🦐🥔🌽🧄🍋🥩🥘🥖🍝🥘🌯🇻🇳🥪🥩🧪🥤🍪🍰🍻🧀🍽️🔪📜🧻🧤🪑😁🥰
Fun fact of the day
October 2nd, 1869 is the birthday of Mohandas K Ghandi. March 27, 2022 is the day Chris Rock slapped Will Smith on stage at the Oscars.
Song of the day
diary by hidden contact
Recipe of the day
Kato’s Green Beans
Ingredients:
Green beans
Garlic
Shallot sauce
Lao Gan Ma
Garlic power
Salt
Click the link in bio to buy my cookbook and read more!
Quote of the day
Yesterday was history. Tomorrow is a mystery. Today is a gift.
- Master Oogway
Comment “dotfiles” and repost and I’ll dm you my dotfiles (must be following)
The hardest part about having a blog is deciding what to post about
24 GB free and I still feel like I'm walking on eggshells (๑•﹏•)
I think a monorepo approach for this blog website might be the move, mainly because styles are getting a little hard to manage between the home and admin pages. Hmm
Yocto Project: A beginner's perspective
Over the last few weeks, I've been trying to tinker with the Yocto Project to better understand about the embedded Linux development process. Here is my beginner's (and likely inaccurate) perspective on what it is and how it works.
What is a Yocto?
The Yocto Project is a Linux Foundation initiative designed to enable rapid development of custom Linux distributions for embedded systems. It was based on the OpenEmbedded (OE) project, from which it inherited the BitBake build tool, which explains the appearance of "oe" in many files and scripts.
Poky Linux
Poky Linux was an OpenEmbedded distribution created by OpenedHand, which was an embedded Linux start-up that was acquired by Intel. It is provided in the Yocto Project as a reference distribution.
Setup
The Yocto Project needs to be run on a compatible Linux distribution with ample free disk space and lots of RAM. I spun up a Ubuntu 24.04.3 server instance with 6 cores, 12 GB of RAM, and 120 GB storage on my Proxmox home server. The documentation recommends 32 GB of RAM, but my machine only has 16 GB total.
The (not so) quick build
Following the quick build instructions on the Yocto Project documentation site, I installed all of the needed packages, cloned the Poky repository, and checked out the Walnascar branch as instructed.
Ubuntoo little storage
I initialized the build environment using source oe-init-build-env (first mention of "oe"), and started my first build using bitbake core-image-sato!
I let the build run for multiple hours and watched it fetch, patch, and compile a LOT of packages... until I ran out of storage.
Luckily, this turned out to be a trivial problem involving Ubuntu volume allocation. Ubuntu had only allocated 60 GB of the 120 GB physical volume to the logical volume ubuntu-lv. I just needed to extend the logical volume to use all of the free space in the volume group ubuntu-vg.
Yay, finally I can rerun the build. I re-ran bitbake core-image-sato aaaanndddddd I ran out of storage again.
Nographic, noproblem
I gave up on building this target and deleted the build artifacts to try again. This time, I ran bitbake core-image-minimal. After letting it run overnight, the build succeeded! The next step was to run the image using QEMU, but I struggled before realizing I needed to use the nographic option (I think it is because my server is headless). The image booted and I was presented with a root shell. Very cool.
Adding layers
Continuing the quick build guide, I learned about how to add layers to the build process. The guide specifically added the meta-altera hardware layer to support the Altera Cyclone 5 SoC.
Adding a layer involves cloning the source repository of the layer, modifying local.conf to set the target machine, and adding the layer via bitbake-layers add-layer ../meta-altera. I ran bitbake core-image-minimal to build an image for this hardware configuration...... and I ran out of storage again.
Maybe I need to clean my build artifacts after every build? Or maybe I just need to allocate more storage? I'm not really sure what went wrong, but I do know that next I want to try creating a Linux distribution for my Raspberry Pi!
After deleting Spotify cache (mega huge), pruning Docker (pretty big), and removing unused cloned GitHub repositories (moderately sized), and replacing npm node_modules with pnpm symbolically linked node_modules (a few GBs), this is the final result!
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p6 63G 35G 25G 58% /
Uh oh
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p6 63G 60G 0 100% /
Yaaahhhh. It's rewind time. Yeah, if I control rewind, I would want... Fortnite... and Mark Ass Brown Lee
✋😮💨... ☝️😉... 🫰💭
The wise words of popular actor and celebrity Will Smith during his surprise guest appearance in YouTube Rewind 2018: Everyone Controls Rewind. The video, as of November 2025, has amassed over 20 million dislikes, by far one of the most hated YouTube videos of all time.
Perhaps this intro by Smith has angered the masses, setting a silly tone for a once beloved yearly YouTube tradition. Smith's introduction of well known tech reviewer Marques Brownlee was especially hated given his mispronunciation of admired influencer's name.
Furthermore, the reference to Epic Games' hit title Fortnite stirred discontent in the wider audience, who questioned Smith's otherwise unc status for making note of such a hip, popular game.
The world will never know the directions and turns taken as a result of this video, and YouTube rewind has never been the same since.
Shoutout UNIX all my homies love unix man Unix is so cool
Fun Fact of the Day
You can go underneath bridges to avoid going over them.
Reminder to future self: if you leave permissions: {} in a GitHub Actions workflow file in a private repository, you will not be able to checkout (unless you are using a private token).
My day is 6 a.m to noon and I'm not crazy, you're crazy for thinking it takes 24 hours just like some dude in a cave did 300 years ago. My second day starts at noon and goes till 6 p.m. That's day two. And then the next day is 6 p.m to midnight. What I've done now is I have changed and manipulated time. I now get 21 days a week. Stack that up over a month, I'm gonna kick your butt. Stack it up over a year, you're toast. Stack it up over five years, my entire life is different than it would have been otherwise. Source
I'm going to do even better. My day starts from 6 a.m. to 6:01 a.m. and I'm not crazy. You're crazy for thinking it takes 6 hours like this guy. My second day starts from 6:01 a.m. to 6:02 a.m. That's day two. And then the next day is 6:02 a.m. to 6:03 a.m. My final day starts from 10:59 p.m. and ends at 11 p.m. What I've done now is I have changed and manipulated time. I've obtained the time stone and now I can bend the fabric of time and space to my will. I now get 1020 days in what you all call a "day". Stack that up over a month, I'm gonna kick your butt. Stack it up over a year, you're a muffin. Stack it over 5 years, you're a waffle. Stack it up over 10 years, I've basically lived multiple lifetimes.
////////\\\\\\\\\
| —\ /— |
| . . |
| ____ |
-———————————-
O | O
\____|____/ <== rayski 🤭
|
|
/ \
/ \
/ \
////////\\\\\\\\\
| —\ / — |
| . . |
| ____ |
-—————
O | O
\____|____/ <== rayski 🤭
|
|
/ \
/ \
/ \
やった、みんなさん!今日、climbing gym に行きました。僕は V3 の climb ができました!www 僕の consistency を見ているのがいいよ!
がんばってね! ^_^
Fixed the tooltip bug for relative dates. When you hover over a relative date (touch on mobile), you will see a tooltip with the absolute date string.
Good Morning Chat
The admin portal got a refactor and style rework (mainly copied styles from homepage). I wish I had image uploading built into the editor so I could just paste in a screenshot of it. Some more cleanup needs to be done before the source code can be published, too. Another feature I'm thinking of adding is a like counter to each post without needing authentication, but I wonder how DynamoDB would support that.
Also I didn't mention it previously, but code blocks now use highlight.js to do syntax highlighting!
#include <iostream>
void printDigitName(int x) {
switch (x) {
case 1:
std::cout << "One";
return;
case 2:
std::cout << "Two";
return;
case 3:
std::cout << "Three";
return;
default:
std::cout << "Unknown";
return;
}
}
int main() {
printDigitName(2);
std::cout << '\n';
return 0;
}
Eating pho 🍜 in the rain 🌧️
The barley 🌾 genmaicha 🍵 was insane 🤯
Playing 🎮 PvZ 🧟 they want my brain 🧠
Driving 🚗 home 🏠 safely 🦺 within the lane 🛣️
Bringing the Sass
Guys, SASS is so cool. I can't believe I'm just discovering its usefulness this far into doing web development. In a previous post, I mentioned that I was using color blender to create these color palettes but now I can automate that using SASS functions! Let's test out the code blocks while we're at it:
@function blend-colors($color1, $color2, $percentage) {
$weight: math.div($percentage, 100%);
@return color.mix($color2, $color1, $weight * 100%);
}
@mixin generate-color-properties(
$prefix,
$color-a,
$color-b,
$steps,
$offset: 0
) {
@for $i from 0 through $steps - 1 {
$percentage: math.div($i, $steps - 1) * 100%;
$color: blend-colors($color-a, $color-b, $percentage);
--#{$prefix}-#{$i + $offset}: #{$color};
}
}I can generate CSS variables using the generate-color-properties mixin, while specifying an offset for the suffix number. I use an offset because I like to have my first 4 foreground-colors be dark, grayscale colors (i.e. #333), and then the rest of the colors are tinted from darkest to lightest. Now that I'm starting to understand SASS and its power, I'm excited to revisit old projects and refactor its styling with it.
Copy and Paste++ & TypeScript
Cleaned up relative timestamps and added hover tooltips (copied and modified from waymondrang.com). Hover tooltips will appear over relative timestamps to show the absolute timestamp and on links. The mechanism for showing hover tooltips has been slightly modified; I'm thinking about updating the implementation in waymondrang.com with this one.
Previously the timestamp script was written in JavaScript, but I moved to TypeScript (tooltip logic was already implemented in TypeScript as well). Its even more fleshed out now, but I still want to make some few tweaks on the admin site, specifically the editor.
Good Morning Chat
Today the goal is simple. To clean up the code a little bit and make the source code public. I might have to create a new repository for the code because there are probably a few secrets in the commit history that shouldn't be there...
About to go climbing! 😱😁
chat, what do we think of the color scheme?
Experimenting with this new color scheme that was extracted using Adobe Color from the 2nd floor basement screenshot from Metal Gear Solid that I put through ditherit.com using their yellow monochrome color palette. Using the extracted colors from Adobe Color, I used meyerweb.com/eric/tools/color-blend/ to create shades to lighten and darken them.
I think the result came out pretty nice! The colors give the site some personality. Now what about dark mode...
This is pretty exiting! I think MVP for this site is reached. I'll start cleaning up the code base a bit, maybe work on styling a little more, and then release the source code and write a post about it!
Next up after MVP would be to add image uploading and management. Maybe adding tags as well for posts for search and organization.
chat? are we live?
is the blog really almost set up? the basic infrastructure is nearly done...