/archive

Posts

Chronological log of experiments, write-ups, and build notes.

22 entries by VitaminCPU
2025-10
Read Minecraft Plugin Reverse Engineering Minecraft Plugin Reverse Engineering thumbnail

Minecraft Plugin Reverse Engineering

How to Decompile and Recompile a Minecraft Plugin: A Developer’s Guide #

Minecraft plugins are distributed as .jar files, which are essentially compressed archives containing compiled Java bytecode. Sometimes you may need to modify an existing plugin for debugging, learning purposes, or making custom changes. This guide will walk you through the process of decompiling a Minecraft plugin, making modifications, and recompiling it back into a working .jar file.

2024-10
Read Network Nirvana: PXE Boot with OPNsense, netboot.xyz, and Unraid

Network Nirvana: PXE Boot with OPNsense, netboot.xyz, and Unraid

We’ve all been there – tinkering with our devices, pushing boundaries, and sometimes, well, messing things up. That’s exactly what happened to me with my old notebook. In a moment of misguided experimentation, I managed to botch the BIOS settings so badly that booting from USB became impossible. Talk about a facepalm moment! But as they say, necessity is the mother of invention. With USB booting off the table, I found myself exploring an alternative I’d heard about but never used: PXE booting. Little did I know, this mishap would lead me down a fascinating path of network-based boot solutions.

2024-10
Read AI Werkzeug

AI Werkzeug

AI Werkzeug: Streamlining LoRA Dataset Creation for AI Image Processing #

In the rapidly evolving world of AI image processing, having the right tools can make all the difference. Today, I’m excited to introduce you to AI Werkzeug, a powerful and versatile cli tool I’ve developed to simplify the process of creating LoRA (Low-Rank Adaptation) datasets and setting up the necessary environment for AI image processing tasks.

2024-05
Read Breaking Down Hugo Performance

Breaking Down Hugo Performance

After iterating on this theme I captured build metrics to make sure the flashy bits don’t slow down deploys. Using hugo --templateMetrics, I spotted where partials were recomputing resources and tuned the pipeline so the timeline view stays snappy.

This write-up covers the steps, what I found in the asset graph, and a short checklist to keep future enhancements quick to ship.

2024-05
Read Building an Observability Theme

Building an Observability Theme

Designing for observability tooling means leaning on contrast, hierarchy, and micro-interactions that highlight anomalies without overwhelming the operator.

In this post I walk through how I fitted the gradient accents from this blog into a dark dashboard UI, why I use structural glows instead of drop shadows, and how animation timing changes when your user is exhausted.

2024-03
Read Rustyplates

Rustyplates

Introducing RustyPlates, a modest yet powerful Rust-based parser for gym training logs. Designed with simplicity in mind, it facilitates logging workouts using a custom Domain-Specific Language. Whether you’re a developer looking to integrate workout logs into your app or a fitness enthusiast keen on structured data, RustyPlates offers an efficient and straightforward solution. It’s my small contribution to the fitness and developer community, aiming to make workout tracking just a little bit easier.

2023-12
Read Unifi-Controller installation on Unraid

Unifi-Controller installation on Unraid

With the unifi-controller set to be deprecated on January 1, 2024, it’s essential to switch to the unifi-network-application to continue receiving updates. This guide outlines the process.

Overview #

  1. Create an init-mongo.js script for MongoDB.
  2. Install MongoDB in a Docker container.
  3. Install the unifi-network-application.

1. Create the init-mongo.js Script #

Javascript
db.getSiblingDB("MONGO_DBNAME").createUser({
  user: "MONGO_USER",
  pwd: "MONGO_PASS",
  roles: [{ role: "dbOwner", db: "MONGO_DBNAME" }]
});
db.getSiblingDB("MONGO_DBNAME_stat").createUser({
  user: "MONGO_USER",
  pwd: "MONGO_PASS",
  roles: [{ role: "dbOwner", db: "MONGO_DBNAME_stat" }]
});

Replace placeholders (MONGO_DBNAME, MONGO_USER, MONGO_PASS, etc.) with your specific values. Save the script at /mnt/user/mongo-init/init-mongo.js on your Unraid host system.

2023-06
Read Master the Game of Information: Web Scraping meets AI Summarization

Master the Game of Information: Web Scraping meets AI Summarization

Recently, I’ve been enjoying the process of scraping content from websites using the shot-scraper and summarizing them with the cutting-edge gpt-3.5-turbo-16k model.

It feels as though information is instantly accessible, which greatly simplifies the process of information retrieval. Here is a example of the usage:

2023-05
Read Leveraging GPT-4 for Summarizing University Lecture Slides

Leveraging GPT-4 for Summarizing University Lecture Slides

Composing lecture notes can be a laborious process, which prompted me to automate my own. Whenever new lecture slides are uploaded, a program I developed extracts every piece of text and saves its content locally. Subsequently, any sensitive information is redacted to ensure that no personal details remain in the text. Now, the sanitized data is forwarded to GPT-4, which then delivers a highly effective summary of the lectures.