<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MOKUROH.CLUB</title><link>https://mokuroh.club/</link><description>Recent content on MOKUROH.CLUB</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mokuroh.club/index.xml" rel="self" type="application/rss+xml"/><item><title>A Coffee Guide in 48 Hours (With Tests, Because I Can't Help It)</title><link>https://mokuroh.club/blog/coffee-guide-in-48-hours/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/coffee-guide-in-48-hours/</guid><description>Written up in October 2026. Dates are when I actually built it.
Two days, one weekend project, and a personal rule that it still had to be done properly. Here&amp;rsquo;s the Capitol Hill Coffee Guide, 42 commits and 233 test cases later.
I wrote a design spec and implementation plan before any code. Sounds slow. It&amp;rsquo;s why the rest wasn&amp;rsquo;t.
Treat the Places API like a budget, not a service Shop data comes from Google Places, which bills per call.</description></item><item><title>Capitol Hill Coffee Guide</title><link>https://mokuroh.club/projects/capitol-hill-coffee/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/projects/capitol-hill-coffee/</guid><description>A hand-curated guide to independent coffee shops: filterable browsing, a map, detail pages, a visit &amp;ldquo;passport&amp;rdquo; and taste-based recommendations. Built and deployed in about 48 hours: 42 commits and 233 test cases.
Architecture Next.js, TypeScript, standalone build. The bundle is built and validated locally, then synced to a VPS behind nginx and systemd, so the server only needs Node. Data. Curated, researched shop data compiled into the bundle and validated by schema on every deploy, merged with live Google Places data at request time.</description></item><item><title>Seattle Events Collector</title><link>https://mokuroh.club/projects/seattle-events-collector/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/projects/seattle-events-collector/</guid><description>A pipeline that pulls events from 50+ Seattle venues, ticketing APIs and calendar feeds, merges the duplicates, and serves one digest as a web UI, RSS and iCal feeds, and personalized email. 63 commits from May to September 2026, over 4,700 lines of Python outside the scrapers.
Architecture Scraping layer. Static HTML (BeautifulSoup, 35+ sites), JSON APIs (Ticketmaster, Bandsintown, ESPN, Luma, Eventbrite), JavaScript-heavy sites via Playwright, and iCal feeds. Every scraper returns the same Event model.</description></item><item><title>My Airline Points Kept Changing, So I Built a Watcher</title><link>https://mokuroh.club/blog/airline-rewards-account-watcher/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/airline-rewards-account-watcher/</guid><description>Written up in October 2026. Dates are when I actually built it.
Airline rewards activity isn&amp;rsquo;t a log, it&amp;rsquo;s a table that quietly edits itself. Points post late, get adjusted, sometimes vanish. I wanted a ping the moment my own account&amp;rsquo;s history changed, so I built a watcher: about 900 lines of Python with 60 unit tests. It only ever reads my own account.
Don&amp;rsquo;t hash the columns, hash the meaning Each activity row gets a SHA-256 over (date, description, amount).</description></item><item><title>Rewards Account Change Watcher</title><link>https://mokuroh.club/projects/rewards-account-watcher/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/projects/rewards-account-watcher/</guid><description>A headless watcher that monitors a loyalty-program account, detects any change to its activity history (including edits and deletions of old rows), and alerts me on Telegram. It only reads my own account. About 900 lines of Python with 60 unit tests, built in three days.
Architecture fetch, diff, alert, then persist. Each run captures the account&amp;rsquo;s data, diffs it against stored state, sends one message summarizing changes, and only then saves the new state.</description></item><item><title>I Found an Open Admin Endpoint in My Own Code</title><link>https://mokuroh.club/blog/events-collector-security-fix-and-failing-fast/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/events-collector-security-fix-and-failing-fast/</guid><description>Written up in October 2026. Dates are when I actually built it.
Reviewing your own code like you&amp;rsquo;re attacking it is humbling. I did that to my events collector and found a good one.
The bug /admin/send-digest emails every subscriber, and it sat behind HTTP Basic Auth. The check was shaped like this:
1 2 if cfg.basic_auth_user: # verify the Authorization header against configured credentials Read that again. If BASIC_AUTH_USER isn&amp;rsquo;t set, the whole check is skipped, and the endpoint is open.</description></item><item><title>50+ Event Sources, One Digest, and a 226s to 44s Speedup</title><link>https://mokuroh.club/blog/seattle-events-pipeline-dedupe-and-speed/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/seattle-events-pipeline-dedupe-and-speed/</guid><description>Written up in October 2026. Dates are when I actually built it.
Finding out what&amp;rsquo;s happening in Seattle means checking about fifty websites. I got tired of that and built a thing to do it for me: Seattle Events Collector. It&amp;rsquo;s over 4,700 lines of Python before you count the scrapers themselves, and most of the interesting part is figuring out that four websites listing the same show are talking about one show.</description></item><item><title>How Do You Know a Shopping Bonus Is Actually Good?</title><link>https://mokuroh.club/blog/tracking-shopping-portal-rates-cloudflare-d1/</link><pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/tracking-shopping-portal-rates-cloudflare-d1/</guid><description>Written up in October 2026. Dates are when I actually built it.
Airline shopping portals love to scream &amp;ldquo;5X POINTS!!!&amp;rdquo; at you. Is that a great rate, or just a Tuesday? The portal will never tell you, because it only shows you today. So I built a tracker that remembers. Code&amp;rsquo;s here.
The data model is the whole project I put everything in Cloudflare D1 (SQLite) and spent most of my time on the schema, because the questions I wanted to answer (&amp;ldquo;is this an all-time high?</description></item><item><title/><link>https://mokuroh.club/about/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://mokuroh.club/about/</guid><description>braxt0n Software Engineer | Security Researcher | Audience Member
Email Me GitHub Blog View Projects Full Resume Below About Me I&amp;rsquo;m a software engineer who builds tooling at the boundary of AI and security. My work is mostly about making autonomous systems safe to run: scoping what an agent is allowed to do, keeping model output from being trusted blindly, and making every action auditable.
I came to software through IT operations and a cybersecurity degree, which is why I tend to think about systems from both sides: how they&amp;rsquo;re built, and how they fail.</description></item><item><title>The Modern Hacker's Manifesto</title><link>https://mokuroh.club/blog/modern-hackers-manifesto/</link><pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/modern-hackers-manifesto/</guid><description>A declaration of principles for the 21st century hacker - builder, breaker, and defender of digital freedom.
Preamble We are the architects of tomorrow, the explorers of the digital frontier. We write code not just for function, but for freedom. We break systems not out of malice, but to understand and improve them. We are hackers, and this is our manifesto.
I. The Nature of Hacking Hacking is curiosity manifested in action.</description></item><item><title>The Unreasonable Effectiveness of Recurrent Neural Networks</title><link>https://mokuroh.club/links/rnn-effectiveness/</link><pubDate>Fri, 25 Oct 2024 00:00:00 +0000</pubDate><guid>https://mokuroh.club/links/rnn-effectiveness/</guid><description>Summary A classic deep dive into Recurrent Neural Networks (RNNs) by Andrej Karpathy. This article brilliantly demonstrates how RNNs can learn and generate text, code, and even LaTeX math with remarkable coherence.
Key Takeaways RNNs can learn long-range dependencies in sequences Character-level models can generate surprisingly good text The model learns grammar, structure, and even code syntax Practical examples include Shakespeare, Wikipedia, Linux source code, and algebraic geometry papers Why I&amp;rsquo;m Sharing This Despite being from 2015, this remains one of the best introductions to understanding how neural networks process sequential data.</description></item><item><title>Reflections on Trusting Trust</title><link>https://mokuroh.club/links/trusting-trust/</link><pubDate>Tue, 22 Oct 2024 00:00:00 +0000</pubDate><guid>https://mokuroh.club/links/trusting-trust/</guid><description>Summary Ken Thompson&amp;rsquo;s legendary 1984 Turing Award lecture demonstrating how a compiler could be backdoored to insert vulnerabilities into code it compiles - including into future versions of itself - leaving no trace in the source code.
The Attack Thompson describes a three-stage attack:
Modify the compiler to recognize when it&amp;rsquo;s compiling login and insert a backdoor Modify the compiler to recognize when it&amp;rsquo;s compiling itself and insert the backdoor insertion code Remove all evidence from the source code The result: A compiler whose source appears clean but produces compromised binaries forever.</description></item><item><title>The Cathedral and the Bazaar</title><link>https://mokuroh.club/links/cathedral-and-bazaar/</link><pubDate>Fri, 18 Oct 2024 00:00:00 +0000</pubDate><guid>https://mokuroh.club/links/cathedral-and-bazaar/</guid><description>Summary Eric Raymond&amp;rsquo;s seminal essay on open source software development, comparing the &amp;ldquo;cathedral&amp;rdquo; model (centralized, controlled) with the &amp;ldquo;bazaar&amp;rdquo; model (decentralized, community-driven). This essay influenced the modern open source movement.
Core Thesis &amp;ldquo;Given enough eyeballs, all bugs are shallow&amp;rdquo; - Linus&amp;rsquo;s Law
The bazaar model (exemplified by Linux) succeeds through:
Releasing early and often Delegating everything possible Being open to the point of promiscuity Treating users as co-developers Key Lessons for Developers Good software starts by scratching a developer&amp;rsquo;s personal itch Plan to throw one away; you will, anyhow If you treat your beta-testers as your most valuable resource, they will respond by becoming your most valuable resource Release early, release often, and listen to your customers Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly Historical Impact This essay:</description></item><item><title>Setting up YubiKey 2-factor decryption on an encrypted Linux drive (LUKS)</title><link>https://mokuroh.club/blog/yubikey-luks-encryption-decryption/</link><pubDate>Mon, 05 Aug 2024 11:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/yubikey-luks-encryption-decryption/</guid><description>I recently picked up a Yubico YubiKey 5C NFC, a small yet powerful security key that adds an extra layer of protection to my logins. This versatile device supports various security protocols, including FIDO2, U2F, OTP (One-Time Password), and smart card (PIV). Major tech companies like AWS, GitHub, Twitter, Google, Microsoft, and Apple all support security keys for their login processes, highlighting their importance in modern cybersecurity.
One of the standout features of the YubiKey is its adherence to open standards, making it easy to integrate with various products and services.</description></item><item><title>Reverse-engineering the private Regal Cinemas API and building a showtimes bot</title><link>https://mokuroh.club/blog/regal-cinemas-api-reverse-engineering/</link><pubDate>Fri, 19 Jul 2024 11:00:00 +0000</pubDate><guid>https://mokuroh.club/blog/regal-cinemas-api-reverse-engineering/</guid><description>About a week ago, I pushed a script to my GitHub that would monitor the Regal Cinemas website for new movies and report it to a Telegram bot. It was decently feature-rich, but I still wasn&amp;rsquo;t fully satisfied with it. The primary issue I kept noticing was that the bot would properly fire off an alert whenever a new movie was posted to the website, but oftentimes tickets couldn’t be acquired yet because showtimes are updated separately.</description></item><item><title>Disk Operations Workflow in Linux: Data Recovery, Secure Disk Wiping</title><link>https://mokuroh.club/blog/disk-operations-workflow/</link><pubDate>Wed, 17 Jul 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/disk-operations-workflow/</guid><description>I still have every single hard drive I’ve ever used in every computer and laptop I have ever owned. I’ve always been a bit paranoid of doing anything with them, so for the past decade or so I’ve had a shoe box overflowing with all manner of disks rotting in my closet. However, a friend is spilling up a file server, and I’d want to donate some disks to them to get them started.</description></item><item><title>Fun With Red Star OS</title><link>https://mokuroh.club/blog/fun-with-redstar-os/</link><pubDate>Wed, 13 Mar 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/fun-with-redstar-os/</guid><description>Red Star OS (붉은별 사용자 영체계) is a North Korean operating system based on the Linux kernel. Its development began at the Korean Computer Center in 2002; until that time, English-language versions of Windows were commonly used in North Korea. As of 2018, the latest version of the system is Red Star OS 4.0, it is reported that the fourth version exists and is being tested locally, but at the moment most people in North Korea are still on the third version.</description></item><item><title>Firmware reversing - intro</title><link>https://mokuroh.club/blog/firmware-reversing-intro/</link><pubDate>Mon, 11 Mar 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/firmware-reversing-intro/</guid><description>In computing, firmware is a specific class of computer software that provides the low-level control for a device’s specific hardware. Firmware, such as the BIOS of a personal computer, may contain basic functions of a device, and may provide hardware abstraction services to higher-level software such as operating systems. For less complex devices, firmware may act as the device’s complete operating system, performing all control, monitoring and data manipulation functions. Typical examples of devices containing firmware are embedded systems (running embedded software), home and personal-use appliances, computers, and computer peripherals.</description></item><item><title>Web Browser Telemetry</title><link>https://mokuroh.club/blog/web-broswer-telemetry/</link><pubDate>Tue, 05 Mar 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/web-broswer-telemetry/</guid><description>This is not an article about which web browser is the best (there is no such thing) but an article about which browser has the most connections after a fresh install. The results shouldn’t be a surprise, really.
Of course, not everything is telemetry per se, some of the connections are from the ‘New Tab’ pages that include Youtube videos but I strongly believe that is the same thing: the software leaks information about you and/or your computer without you actually accepting the data exchange (because you don’t have a way to accept or deny the connection since it’s the first time you’re running the browser).</description></item><item><title>Docker project template for local development</title><link>https://mokuroh.club/blog/docker-project-template-for-local-development/</link><pubDate>Tue, 27 Feb 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/docker-project-template-for-local-development/</guid><description>Sometimes I need to spin a Docker container really quick so I can test stuff locally and the quickest way (for me) is to keep a project template somewhere on the disk so I can quickly copy it, add the web app and test it. Ofc there are other alternatives. Ofc some are better. Ofc some are faster. But this one is mine.
The container will be configured with:
latest Apache web server with SSL and mod_rewrite.</description></item><item><title>OpenPGP Web Key Directory (WKD) Hosting</title><link>https://mokuroh.club/blog/openpgp-web-key-directory-wkd-hosting/</link><pubDate>Thu, 15 Feb 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/openpgp-web-key-directory-wkd-hosting/</guid><description>An OpenPGP Web Key Directory is a method for users to discover the public key of a new contact. The user requests the public key from the contacts an organisation maintains.
Compared to previous key discovery schemes that relied on DNS, WKD can be easily deployed on any HTTPS server because WKD is a lookup scheme that relies on HTTPS and correctly placed files on your web server and no other software is required to run on the web server.</description></item><item><title>Azure and Full Disk Encryption</title><link>https://mokuroh.club/blog/azure-and-full-disk-encryption/</link><pubDate>Thu, 08 Feb 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/azure-and-full-disk-encryption/</guid><description>Introduction Here is a small tutorial on encrypting a Microsoft Azure virtual machine disk.
Preparing the Azure Virtual Machine Enable the Azure Key Vault provider within your Azure subscription.
$ az provider register -n Microsoft.KeyVault Create a resource group in your favorite location (keep in mind different locations enable different features, some VM sizes are not available in other locations).
$ az group create \ --name testResourceGroup \ --location centralus Create an Azure Key Vault and enable the Key Vault for use with disk encryption.</description></item><item><title>Android APK reverse engineering in 7 small steps</title><link>https://mokuroh.club/blog/android-reverse-engineering-7-steps/</link><pubDate>Fri, 02 Feb 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/android-reverse-engineering-7-steps/</guid><description>Step 1: install required tools 1 2 3 4 $ sudo apt install adb apktool openjdk-11-jdk-headless zipalign apksigner # replace apktool with new version from https://github.com/iBotPeaches/Apktool/releases $ sudo mv /usr/share/apktool/apktool.jar /usr/share/apktool/apktool.jar.original $ sudo mv ~/Downloads/apktool_2.7.0.jar /usr/share/apktool/apktool.jar Step 2: retrieve the APK file 1 2 3 4 5 6 # start by finding the name of the app $ adb shell pm list packages | grep &amp;lt;APP_NAME&amp;gt; # find path of the app $ adb shell pm path &amp;lt;APP&amp;gt; # and pull the APK file $ adb pull &amp;lt;PATH&amp;gt; .</description></item><item><title>Aren't we chatty today, Windows 11</title><link>https://mokuroh.club/blog/chatty-windows-11/</link><pubDate>Tue, 30 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/chatty-windows-11/</guid><description>I decided to make a log of all network connections a standard install of Windows 11 Pro (for ARM, 22H2, OS build 22621.1344) does.
The methodology is the same, standard setup without changing any of the default settings (Privacy ones, for example). Test device is on a clean user profile, all network connections blocked, application-level network connection whitelisting and only Little Snitch installed. So it’s actually Little Snitch that does all the heavy-lifting.</description></item><item><title>Reduce tracking via NetworkManager</title><link>https://mokuroh.club/blog/reduce-tracking-via-networkmanager/</link><pubDate>Mon, 29 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/reduce-tracking-via-networkmanager/</guid><description>NetworkManager is a program for providing detection and configuration for systems to automatically connect to networks. NetworkManager’s functionality can be useful for both wireless and wired networks, for wireless networks, NetworkManager prefers known wireless networks and has the ability to switch to the most reliable network.
If you want to reduce someone’s capabilities to track you, you should avoid broadcasting a persistent and likely unique software identifier; an empty (blank) hostname is also an option, but a static hostname of “localhost” is less likely to cause problems.</description></item><item><title>Encrypted LUKS volume inside a file</title><link>https://mokuroh.club/blog/encrypted-luks-volume-inside-a-file/</link><pubDate>Fri, 26 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/encrypted-luks-volume-inside-a-file/</guid><description>LUKS can be used to encrypt a volume that’s stored inside a single file.
Start by creating a 2GB file (1M * 2k) that will hold the LUKS volume and fill it with random bytes. If you’re wondering why the strange filename, Solaris.1971.1080p.BluRay.x264-[YTS.AM].mp4.part, that’s so it is “hidden” as a temporary Transmission torrent file, away from prying eyes (unless your threat model is the NSA). If you want to use a qBittorrent temporary extension, change .</description></item><item><title>Implementing BusKill with udev</title><link>https://mokuroh.club/blog/buskill-and-udev/</link><pubDate>Wed, 24 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/buskill-and-udev/</guid><description>If you work in security or you like to pretend you work in security, you must’ve heard about BusKill. Every infosec has one of those because it’s so cool pretending to be a 133t hacker and their threat model definitely requires an immediate shutdown of the computer, else the nefarious actors (APT21, APT22, APTsqrt(69)) will retrieve their bloated python scripts. And nobody want to lose their scripts.
But just in case you think it might be interesting to have a way to shut down (and lock, if it’s encrypted) your laptop in case somebody snatches it from your hands, keep reading because I have a solution that doesn’t involve paying those BusKill people your hard-earned pennies.</description></item><item><title>Block ChatGPT from scraping your website</title><link>https://mokuroh.club/blog/block-chatgpt-scraping/</link><pubDate>Thu, 18 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/block-chatgpt-scraping/</guid><description>A lot has been written about AI being the death of art, as so many artists have had their work fed into AI models without compensation, but I feel the conversation has neglected to mention how much free labor al of us are doing for AI companies simply by generating our own content online. OpenAI is generous enough to provide us mortal AI-feeders with IP ranges for the GPTbot, so make sure you add them to your firewall rules.</description></item><item><title>VPN killswitch and UncomplicatedFireWall (ufw)</title><link>https://mokuroh.club/blog/vpn-killswitch-ufw/</link><pubDate>Mon, 15 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/vpn-killswitch-ufw/</guid><description>You can set-up a VPN killswitch, which is a simple way to ensure that if your VPN connection is dropped, regardless of the reason, the Internet connections are not allowed (and your real IP will not be exposed). And this can be done easily using ufw on any Debian-based distro.
Start by installing ufw if it’s not already installed on your system:
1 $ sudo apt install ufw Configure ufw to deny all incoming and outgoing connections:</description></item><item><title>Hardening the Linux USB subsystem</title><link>https://mokuroh.club/blog/hardening-linux-usb/</link><pubDate>Fri, 12 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/hardening-linux-usb/</guid><description>The USBGuard software framework helps to protect your computer against rogue USB devices (a.k.a. BadUSB) by implementing basic whitelisting and blacklisting capabilities based on device attributes.
Basically, USBGuard prevents all unauthorized USB devices from connecting to your machine.
Start by installing it, if you’re running Ubuntu, Debian or other Debian-based distros:
1 $ sudo apt install usbguard Or, if you’re running Fedora:
1 $ sudo dnf install usbguard Make sure all USB devices that you want to be allowed by default to connect to your system are plugged in (don’t worry about the built-in USB devices, like your laptop webcam or Bluetooth module, they get whitelisted automatically), and generate the default policy:</description></item><item><title>Wannacrypt0r (WannaCry) Ransomware Retrospect</title><link>https://mokuroh.club/blog/wannacrypt0r/</link><pubDate>Fri, 05 Jan 2024 10:20:00 +0000</pubDate><guid>https://mokuroh.club/blog/wannacrypt0r/</guid><description>Warning Do not play with the samples unless you really know what you’re doing. All Windows versions before Windows 10 are still vulnerable to the WannaCry (WannaCrypt, WannaCry, WanaCrypt0r, WCrypt or WCRY) ransomware if not patched for MS-17-010.
The ransom is between $300 to $600, there is code to delete files in the virus, so it’s not just a threat.
The worm loops through every RDP session on a system to run the ransomware as that user, also installs the DOUBLEPULSAR backdoor and it corrupts shadow volumes to make recovery harder.</description></item></channel></rss>