<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Monroe Clinton</title>
    <link>https://monroeclinton.com/</link>
    <description>Recent content on Monroe Clinton</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language><atom:link href="https://monroeclinton.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The year of the artificial intern</title>
      <link>https://monroeclinton.com/the-year-of-the-artificial-intern/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/the-year-of-the-artificial-intern/</guid>
      <description>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 &amp;ldquo;Your Year with ChatGPT&amp;rdquo; I&amp;rsquo;m in the top 1% of users for the number of ChatGPT messages sent for 2025. I&amp;rsquo;ve been looking for a replacement to Google search for years, and I&amp;rsquo;ve finally found it.
The LLM tools are just as inaccurate as what you&amp;rsquo;d find on a typical Google search result page, but they are much more convenient.</description>
    </item>
    
    <item>
      <title>AI has no taste</title>
      <link>https://monroeclinton.com/ai-has-no-taste/</link>
      <pubDate>Fri, 28 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/ai-has-no-taste/</guid>
      <description>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&amp;rsquo;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 &amp;ldquo;get&amp;rdquo; the unquantifiable.</description>
    </item>
    
    <item>
      <title>I made my own suit for a 1920s-inspired lawn party</title>
      <link>https://monroeclinton.com/making-my-own-suit/</link>
      <pubDate>Tue, 12 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/making-my-own-suit/</guid>
      <description>There are few things I love more than costume parties. I&amp;rsquo;m always waiting for Hallowe&amp;rsquo;en, and any other time I&amp;rsquo;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&amp;rsquo;t made any complex clothing pieces, so I wasn&amp;rsquo;t sure how it would go. The jacket took me somewhere around 15 hours to make. Sadly I ran out of time before the party to make the pants, so I went with the odd trousers look.</description>
    </item>
    
    <item>
      <title>How to break Docker&#39;s promise of consistency</title>
      <link>https://monroeclinton.com/docker-consistency-file-systems/</link>
      <pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/docker-consistency-file-systems/</guid>
      <description>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 it as camelcase.min.js, explaining the error, but not why it worked locally.</description>
    </item>
    
    <item>
      <title>Making The Browser Company leet</title>
      <link>https://monroeclinton.com/making-the-browser-company-leet/</link>
      <pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/making-the-browser-company-leet/</guid>
      <description>Today I decided to check what The Browser Company was up to. I don&amp;rsquo;t know much about them other than I like their company&amp;rsquo;s name and marketing. I&amp;rsquo;ve never used their products. When I looked at their homepage, I noticed something that caught my eye. They showed users&#39; cursors moving around as blue pixels and an online presence count. Right away, I wondered if I could draw a hello message on their homepage using the cursors.</description>
    </item>
    
    <item>
      <title>I counted all of the yurts in Mongolia using machine learning</title>
      <link>https://monroeclinton.com/counting-all-yurts-in-mongolia/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/counting-all-yurts-in-mongolia/</guid>
      <description>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 lived experiences within it.</description>
    </item>
    
    <item>
      <title>Graphing Ukrainian territorial control over time</title>
      <link>https://monroeclinton.com/graphing-ukranian-territorial-control/</link>
      <pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/graphing-ukranian-territorial-control/</guid>
      <description>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(&#34;pre-2022&#34;).addEventListener(&#34;click&#34;, (e) = { before2022Checked = e.currentTarget.checked; chartSQKM.data.datasets[0].data = values.map(v = v - (before2022Checked? 0 : PRE_2022)); chartSQKM?.update(); }); const eventHandler = (days = null) = (e) = { chartROC.data.labels = days ? ( labels.</description>
    </item>
    
    <item>
      <title>PostgreSQL transaction isolation levels by example</title>
      <link>https://monroeclinton.com/transaction-isolation-levels-postgresql/</link>
      <pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/transaction-isolation-levels-postgresql/</guid>
      <description>Database transactions are important to ensuring data validity when running queries. They&amp;rsquo;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 transaction phenomena differently. Here is a table for each level and if the phenomena is possible (✔) or not possible (✖).</description>
    </item>
    
    <item>
      <title>Container load balancing with Linux bridges, veths, and IPVS</title>
      <link>https://monroeclinton.com/container-load-balancing-linux/</link>
      <pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/container-load-balancing-linux/</guid>
      <description>I&amp;rsquo;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&amp;rsquo;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 containers. This is a problem for the load balancing part of my project, so I searched for a solution.</description>
    </item>
    
    <item>
      <title>How pointing devices work in Linux</title>
      <link>https://monroeclinton.com/pointing-devices-in-linux/</link>
      <pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/pointing-devices-in-linux/</guid>
      <description>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&amp;rsquo;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 article I will explain how this input device is managed, interacts with the operating systems, applications, and is shown on the display with with an image.</description>
    </item>
    
    <item>
      <title>How to build a window manager in Python</title>
      <link>https://monroeclinton.com/build-your-own-window-manager/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/build-your-own-window-manager/</guid>
      <description>Building your own window manager might sound difficult, but it actually isn&amp;rsquo;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 published on GitHub.</description>
    </item>
    
    <item>
      <title>Three.js &#43; Elixir: Map requests onto a globe in real time</title>
      <link>https://monroeclinton.com/three-js-elixir-map-requests/</link>
      <pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/three-js-elixir-map-requests/</guid>
      <description>As your application grows you&amp;rsquo;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&amp;rsquo;t new problems and thankfully there&amp;rsquo;s been a lot of thought put into solving them. My absolute favorite language for tackling scalability issues is Elixir. There&amp;rsquo;s a lot to love about Elixir, one of them being it turns scaling your app into an enjoyment instead of a massive headache.</description>
    </item>
    
    <item>
      <title>AlpineJS with Laravel LiveWire</title>
      <link>https://monroeclinton.com/alpinejs-with-livewire/</link>
      <pubDate>Sat, 13 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://monroeclinton.com/alpinejs-with-livewire/</guid>
      <description>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&amp;rsquo;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?
Solution Alpine is a lightweight tool for adding a touch of client-side rendering to your app.</description>
    </item>
    
  </channel>
</rss>
