RSSAmplifier

Blog

Monroe Clinton

Recent content on Monroe Clinton

monroeclinton.comRSS feed ↗14 posts

Latest posts

Cloning King Charles's voice to read audiobooks

I pray to the British only that I be beheaded rather than hanged for this. Project Gutenberg has more than 75,000 books in the public domain that you can read on its website. However, the public-domain audiobooks are sometimes lacking. In March, Fish Audio released S2, which provides adequate-sounding text-to-speech. Here is a sample of King Charles’s voice reading the title of South, generated…

The year of the artificial intern

This year I went from having not a single subscription to paying for ChatGPT, Gemini, Cursor, and Grok. My usage of these tools makes it well worth it, according to “Your Year with ChatGPT” I’m in the top 1% of users for the number of ChatGPT messages sent for 2025. I’ve been looking for a replacement to Google search for years, and I’ve finally found it. The LLM…

AI has no taste

I find AI useful as a better search engine and little past that. The reason being that I have a taste for what I like and what I don’t like. AI is not able to digest that taste because it does not operate at the individual human level. I have a feeling that people are part of an unquantifiable world, and it is unfathomable that a statistical entity will ever “get” the…

I made my own suit for a 1920s-inspired lawn party

There are few things I love more than costume parties. I’m always waiting for Hallowe’en, and any other time I’m able to wear a costume. The most recent instance was a 1920s-inspired lawn party, for which I decided to attempt to make my own suit. I haven’t made any complex clothing pieces, so I wasn’t sure how it would go. The jacket took me somewhere around 15 hours…

How to break Docker's promise of consistency

My co-worker ran into an unusual bug. The majority of our work is backend development, with a very simple admin dashboard to monitor things. He added a javascript file, camelCase.min.js, to the assets directory, and built the feature. Everything worked running in Docker containers locally, but when deployed to a cloud environment, the JavaScript file gave a not found error. He realized he imported…

Making The Browser Company leet

Today I decided to check what The Browser Company was up to. I don’t know much about them other than I like their company’s name and marketing. I’ve never used their products. When I looked at their homepage, I noticed something that caught my eye. They showed users' cursors moving around as blue pixels and an online presence count. Right away, I wondered if I could draw a hello…

I counted all of the yurts in Mongolia using machine learning

The Fall of Civilizations podcast put out a 6¾-hour episode on the history of the Mongol Empire, which I eagerly listened to. After finishing the episode I wondered about contemporary Mongolian society, I wanted to learn what the lands that the Mongol Empire exploded from are like in our current day. There are many ways to try to understand a society, whether it be quantifying it or looking at the…

Graphing Ukrainian territorial control over time

Include territory taken before 2022 Last 180 days Last 365 days All let chartSQKM; let chartROC; let labels; let values; let before2022Checked = true; const PRE_2022 = 43_963; document.getElementById('pre-2022').addEventListener('click', (e) = { before2022Checked = e.currentTarget.checked; chartSQKM.data.datasets[0].data = values.map(v = v - (before2022Checked? 0 : PRE_2022)); chartSQKM?.update();…

PostgreSQL transaction isolation levels by example

Database transactions are important to ensuring data validity when running queries. They’re often used to ensure that either all of the queries run, or if one fails the previous changes are rolled back. Another important aspect is transaction isolation, which has several modes. Each mode (known as level) provides more guarantees than the last. Each of these levels handles possible…

Container load balancing with Linux bridges, veths, and IPVS

I’ve been working on a project that takes requests and load balances them between containers. Using Docker or Kubernetes makes this easy, but I wondered how these systems work, so I decided to try and implement it myself. I’ve been using containerd to programmatically create and manage containers. It works quite well for this task, however it does not provide networking to or between…

How pointing devices work in Linux

As part of my project of building a compositor for Wayland and also X11 through Xwayland, I have had to learn about how pointing devices work in Linux. If you’re unfamiliar with window systems like Wayland and X11, you can read my blog post on building a window manager. The pointer is one of the most popular inputs into a computer, so knowledge about how it works can be useful. In this…

How to build a window manager in Python

Building your own window manager might sound difficult, but it actually isn’t too bad. Most of the work is already handled by libraries and programs, all that is needed is to glue them together. You can write your own and have a solid understanding of it in a weekend of building. If you follow through this guide the end result will be similar to an example Python window manager I created and…

Three.js + Elixir: Map requests onto a globe in real time

As your application grows you’re going to encounter problems such as how to handle scaling, fault tolerance, global distribution, and how you are going to ensure highly availablity to your users. These aren’t new problems and thankfully there’s been a lot of thought put into solving them. My absolute favorite language for tackling scalability issues is Elixir. There’s a lot…

AlpineJS with Laravel LiveWire

Problem When building a website with LiveWire you may want a file upload preview, an image carousel, or other things that are best done client-side. There’s a number of challenges when first setting up client-side rendering with LiveWire. How do we access and update PHP data? And can we listen for changes in that data? What if we only want part of our component to be handled client-side?…