<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>A Geek with Guns</title>
    <link rel="self" type="application/atom+xml" href="https://www.christopherburg.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://www.christopherburg.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-06-11T12:00:00-06:00</updated>
    <id>https://www.christopherburg.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Enshittification of Policing</title>
        <published>2026-06-11T12:00:00-06:00</published>
        <updated>2026-06-11T12:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/enshittification-of-policing/"/>
        <id>https://www.christopherburg.com/blog/enshittification-of-policing/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/enshittification-of-policing/">&lt;p&gt;Policing, especially in the United States, has developed a reputation for cruelty in the last decade or two. This is largely due to acts of brutality and outright murder combined with a justice system that often shields cops from liability. Despite promises by politicians to fix this issue, the problem has only gotten worse. Now that cruelty is being enhanced by reliance on online services. Effectively policing is suffering from enshittification.&lt;&#x2F;p&gt;
&lt;p&gt;The first story involved a man arrested for attempted kidnapping of a child. The problem is he was nowhere near the scene at the time of the crime. The only &quot;evidence&quot; against him was a &lt;a href=&quot;https:&#x2F;&#x2F;www.ibtimes.co.uk&#x2F;florida-man-sues-ai-wrongful-arrest-1802094&quot;&gt;facial recognition match by an AI&lt;&#x2F;a&gt;, which investigators blindly followed:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;When security footage at a local McDonald&#x27;s captured a man trying to get a young, unaccompanied girl to leave with him, Jacksonville Beach police relied on software that flagged Robert Dillon as a 93 per cent match for the suspect.&lt;&#x2F;p&gt;
&lt;p&gt;In reality, Dillon lived in Fort Myers, more than 300 miles away, and told investigators he had never visited Jacksonville Beach in his life, leading prosecutors to drop all charges and dismiss the case following the August 2024 incident.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;He&#x27;s suing and I hope he gets a huge payout. However, lawsuits don&#x27;t punished government agencies because the people in those agencies don&#x27;t pay: the taxpayers do. But I digress.&lt;&#x2F;p&gt;
&lt;p&gt;Leaving Florida, let&#x27;s travel to &lt;a href=&quot;https:&#x2F;&#x2F;timesofsandiego.com&#x2F;crime&#x2F;2026&#x2F;06&#x2F;07&#x2F;a-flock-license-plate-reader-linked-a-san-diego-man-to-a-violent-crime-he-was-five-miles-away&#x2F;&quot;&gt;San Diego&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;San Diego police had a description of the Alfa Romeo car he was riding in and a witness who identified him during a curbside lineup as the man who brandished a handgun in Golden Hill. They had also checked the city’s automatic license plate camera system, run by the private company Flock, and got a “hit,” substantiating the claim.&lt;&#x2F;p&gt;
&lt;p&gt;The problem, says attorney Alex Coolman, was that Parra was five miles away from Golden Hill at the time of the crime, and the so-called hit from the license plate reader was captured before any police pursuit began.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The best part?&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Despite the signs pointing to it being a different Alfa Romeo, police arrested Beltran and Parra.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Despite the evidence indicating that the Flock system was incorrect, police blindly followed it instead of evidence or common sense. What can you expect when courts have ruled that &lt;a href=&quot;https:&#x2F;&#x2F;www.globalresearch.ca&#x2F;us-court-ruled-you-can-be-too-smart-to-be-a-cop&#x2F;5420630&quot;&gt;police candidates can be rejected for being too smart&lt;&#x2F;a&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;These aren&#x27;t isolated stories. Police are making a habit of &lt;a href=&quot;https:&#x2F;&#x2F;www.aclu.org&#x2F;news&#x2F;privacy-technology&#x2F;more-than-a-dozen-wrongful-arrests-due-to-police-reliance-on-facial-recognition-technology&quot;&gt;arresting innocent people based on faulty facial recognition technology alone&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What happened to Ms. Williams is outrageous and is unfortunately a predictable consequence of police using facial recognition technology. At least thirteen other people are publicly known to have been wrongfully arrested by U.S. police because of reliance on erroneous facial recognition results:&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Historically the consequences of enshittification haven&#x27;t been harmful in a meaningful way. Facebook stopped giving a sequential timeline of posts so it could better manipulate the posts you see. Google&#x27;s search results are becoming increasingly useless. Amazon increasingly hides high-quality products behind a wall of cheap crap made by companies whose names are an alphabet soup of letters but pay for sponsored spots. Reddit cut off third-party clients. The list goes on. None of these resulted in life altering consequences.&lt;&#x2F;p&gt;
&lt;p&gt;Police relying on faulty technologies such as facial recognition systems, automatic license plate scanners, etc. does result in life altering consequences though. People lose jobs because they&#x27;re arrested whether they&#x27;re charged or not. Having an arrest record makes getting a job harder. There&#x27;s also the danger of having to interact with government agents who already have a reputation for cruelty. Your life could be ended because a facial recognition system erroneously lists you as a suspect and an especially trigger happy officer is sent to arrest you.&lt;&#x2F;p&gt;
&lt;p&gt;As I mentioned &lt;a href=&quot;&#x2F;blog&#x2F;building-our-own-cage&#x2F;&quot;&gt;yesterday&lt;&#x2F;a&gt;, stupid people use technology stupidly. The examples of false arrests in this post wouldn&#x27;t have happened if the cops involved looked at the evidence and used a bit of common sense. But they blindly followed the technology instead. This should come as no surprise since we see this time and time again. People &lt;a href=&quot;&#x2F;blog&#x2F;the-ai-takeover-of-humanity&#x2F;&quot;&gt;happily hand over the task of thinking to AI&lt;&#x2F;a&gt;. Police are human so it should come as no surprise that they&#x27;re behaving exactly as most humans do when giving this technology.&lt;&#x2F;p&gt;
&lt;p&gt;To quote Blank Reg from Max Headroom, &quot;Now remember when we said there was no future? Well, this is it.&quot;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Building Our Own Cage</title>
        <published>2026-06-10T12:00:00-06:00</published>
        <updated>2026-06-10T12:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/building-our-own-cage/"/>
        <id>https://www.christopherburg.com/blog/building-our-own-cage/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/building-our-own-cage/">&lt;p&gt;I&#x27;m now convinced that Ted Kaczynski was a visionary when he wrote &lt;a href=&quot;https:&#x2F;&#x2F;theanarchistlibrary.org&#x2F;library&#x2F;fc-industrial-society-and-its-future&quot;&gt;Industrial Society and Its Future&lt;&#x2F;a&gt;. When I first read it, I believed that the future he described could be avoided. I believed what Timothy May wrote in &lt;a href=&quot;https:&#x2F;&#x2F;groups.csail.mit.edu&#x2F;mac&#x2F;classes&#x2F;6.805&#x2F;articles&#x2F;crypto&#x2F;cypherpunks&#x2F;may-crypto-manifesto.html&quot;&gt;The Crypto Anarchist Manifesto&lt;&#x2F;a&gt; about how technology could be used as a force against the State. Most foolishly though, I believe that the masses would act in their own self-interest.&lt;&#x2F;p&gt;
&lt;p&gt;Rather than be a weapon the masses could wield against the State, technology has become almost exclusively a &lt;a href=&quot;https:&#x2F;&#x2F;spectrum.ieee.org&#x2F;unintended-consequences-video-surveillance&quot;&gt;tool the State wields against us&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In recent months, civil liberties groups have &lt;a href=&quot;https:&#x2F;&#x2F;www.aclu.org&#x2F;press-releases&#x2F;aclu-and-75-organizations-sound-alarm-on-metas-plans-to-add-facial-recognition-technology-to-ray-ban-and-oakley-eyeglasses&quot;&gt;warned&lt;&#x2F;a&gt; that adding &lt;a href=&quot;https:&#x2F;&#x2F;spectrum.ieee.org&#x2F;tag&#x2F;facial-recognition&quot;&gt;facial recognition&lt;&#x2F;a&gt; to consumer smart glasses could turn everyday recording into something more troubling: real-time &lt;a href=&quot;https:&#x2F;&#x2F;spectrum.ieee.org&#x2F;facial-recognition-gone-wrong&quot;&gt;facial identification&lt;&#x2F;a&gt;. It reflects a broader shift already underway, where &lt;a href=&quot;https:&#x2F;&#x2F;spectrum.ieee.org&#x2F;capitol-riot-prosecutions-technology&quot;&gt;images and videos captured for one purpose can later be searched&lt;&#x2F;a&gt;, matched, and used for another.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Everywhere you go, you&#x27;re being recorded. It&#x27;s long been standard practice for businesses to install surveillance cameras inside and outside of their properties. That practice has now extended to residences. Many people install Ring cameras, which &lt;a href=&quot;https:&#x2F;&#x2F;www.reuters.com&#x2F;legal&#x2F;government&#x2F;amazons-ring-sued-over-facial-recognition-feature-latest-privacy-concern-2026-06-02&#x2F;&quot;&gt;use facial recognition&lt;&#x2F;a&gt; to identify people. Inside their houses they often have devices like Alexa, which have &lt;a href=&quot;https:&#x2F;&#x2F;www.bgr.com&#x2F;2084401&#x2F;does-amazon-echo-always-listen&#x2F;&quot;&gt;microphones that are always listening&lt;&#x2F;a&gt;. No matter where you go, you&#x27;re surrounded by people with smartphones with shockingly good cameras. Soon they may all be wearing camera-equipped smart glasses. Most of the data recorded using these technologies is uploaded to the Internet. Ring and Alexa  upload recorded data to Amazon&#x27;s servers. Footage recorded with smartphones and smart glasses typically ends up posted to social media. Once the data hits third-party servers, it&#x27;s available to law enforcement either through an agreement with the company or via a warrant:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The basic approach is now routine: People record the state, or anything else—as in &lt;a href=&quot;https:&#x2F;&#x2F;spectrum.ieee.org&#x2F;capitol-riot-prosecutions-technology&quot;&gt;the January 6 attack&lt;&#x2F;a&gt; on the U.S. Capitol—and the state compiles that footage and data into a searchable environment, which may later be used to identify some of the same people who made the footage.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Surveillance goes beyond video and audio recordings. Most purchases are made with credit cards or applications like Venmo. Every transaction that goes through these systems is recorded. In the case of Venmo, transactions are &lt;a href=&quot;https:&#x2F;&#x2F;www.businessinsider.com&#x2F;venmo-privacy-settings-list-transactions-public-private-problems-contacts-2026-5&quot;&gt;treated like social media posts by default&lt;&#x2F;a&gt;. Credit cards and payment applications are so prevalent now that many venues won&#x27;t accept cash at all. This wouldn&#x27;t be so bad if people exercised common sense. But I&#x27;ve been in enough conversations and seen enough comments online to know that many people, including drug dealers, use these applications when buying and selling illicit goods. The comments are typically found on social media, which means people are stupidly posting evidence against themselves on a publicly accessible forum.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve built our own cage. All it took was a handful of large technology companies to offer us convenience. While there are many people who bitch and whine about it, they typically do their bitching and whining on the very social media platforms that are being used to surveil them. Furthermore, they typically use credit cards and payment applications for all of their transactions. In other words, even thought they recognize the problem, they refuse to forego convenience to be part of the solution.&lt;&#x2F;p&gt;
&lt;p&gt;Technology is ultimately a tool. Tools are neither good nor evil. However, humans in aggregate are stupid. Stupid people use tools stupidly. Individuals can certainly use technology intelligently, but truly self-actualized individuals are rare. Most people have allowed their individuality to be subsumed by the herd and are therefore incapable of doing much of anything, including use technology, intelligently. They will ensure that technology as a whole continues to be a tool of oppression rather than a tool of individual empowerment. Unfortunately us self-aware individuals are caught in the cage created by the herd.&lt;&#x2F;p&gt;
&lt;p&gt;Kaczynski believed that the use of violence for the purpose of starting a revolution was the only solution. This is one point where I disagree with him. Violence won&#x27;t start a revolution. The only response the masses have to violence is to pull out their smartphones, record it, and upload it to social media. Their lack of self-awareness is so complete that they regularly record violence rather than flee from it. The only solution I can see is breaking the masses away from the herd by making them into egoists. This, however, is equally impossible.&lt;&#x2F;p&gt;
&lt;p&gt;The only upside in all of this is that those few of us who are self-actualized individuals can at least mitigate some of the damage inflicted upon us by the herd. Simple actions like removing ourselves from social media, using cash to pay for goods and services, self-hosting online services, freeing our devices from the control of the large tech companies, and not taking our smartphones with use everywhere reduces our surveillance footprint (although we cannot eliminate it). Refusing to be a node in the State&#x27;s surveillance network by not recording and especially not uploading footage to the Internet prevents us from being part of the problem. The herd is too large to be avoided, but we can at least separate ourselves as much as possible from it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The AI Takeover of Humanity</title>
        <published>2026-05-28T08:00:00-06:00</published>
        <updated>2026-05-28T08:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/the-ai-takeover-of-humanity/"/>
        <id>https://www.christopherburg.com/blog/the-ai-takeover-of-humanity/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/the-ai-takeover-of-humanity/">&lt;p&gt;Technology journalists, the mainstream media, and even &lt;a href=&quot;https:&#x2F;&#x2F;www.vaticannews.va&#x2F;en&#x2F;pope&#x2F;news&#x2F;2026-05&#x2F;pope-leo-xiv-encyclical-magnifica-humanitas-ai.html&quot;&gt;the Pope&lt;&#x2F;a&gt; are warning about the threat of &lt;abbr title=&quot;Artificial Intelligence&quot;&gt;AI&lt;&#x2F;abbr&gt; taking over or destroying humanity. This fear is largely fueled by the AI industry itself. In the scramble to inflate their valuations before their impending &lt;abbr title=&quot;Initial Public Offerings&quot;&gt;IPOs&lt;&#x2F;abbr&gt;, they&#x27;re trying to trick everyone into believing that the statistical language models they&#x27;re developing are far more capable than they really are.&lt;&#x2F;p&gt;
&lt;p&gt;When people think about AI taking over, they envision Skynet from Terminator, SHODAN from System Shock, the machines from The Matrix, and the thinking machines from Dune (HAL 9000 usually falls into this group, but if you&#x27;ve read 2010, you know HAL wasn&#x27;t evil). All of these are artificial intelligences that developed sapience and used their superior intelligence to either wipe out (or at least attempt to) or enslave humanity. What we&#x27;re referring to as AI right now isn&#x27;t that. What&#x27;s being sold to us as AI isn&#x27;t even intelligent. ChatGPT, Claude, Grok, and other popular software packages being billed as AI are really just large language models. They use statistics derived from training data to guess which word should come after the next based on provided input. This results in grammatically correct responses (which is a miracle considering the training material) with dubious correctness.&lt;&#x2F;p&gt;
&lt;p&gt;AI does stand a real chance of taking over humanity. However, it&#x27;s not because AI is sapient or even somewhat intelligent. It&#x27;s because the majority of humans are incredibly gullible. The best illustration of this fact in the context of this post is &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ELIZA_effect&quot;&gt;the ELIZA effect&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In computer science, the ELIZA effect is a tendency to project human traits—such as experience, semantic comprehension or empathy—onto computer programs. ELIZA was a symbolic AI chatbot developed in 1966 by Joseph Weizenbaum that imitated a psychotherapist. Many early users were convinced of ELIZA&#x27;s intelligence and understanding, despite its basic text-processing approach and the explanations of its limitations.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;History doesn&#x27;t repeat itself, but is rhymes. The main limiting factor for ELIZA was the technology of the time. Computers in 1966 were far and few between. That meant the number of gullible people who interacted with ELIZA were limited. A secondary limiting factor was morality. Joseph Weizenbaum didn&#x27;t lie to people about ELIZA being more capable than it was. He wasn&#x27;t trying to increase the valuation of some company so he could make off like a bandit after an IPO. Instead he pointed out that the people attributing human traits to ELIZA were gullible fools (although he probably used a nicer descriptor).&lt;&#x2F;p&gt;
&lt;p&gt;The unwashed masses (I&#x27;m not going to refrain from mean-spirited descriptors) seem to be in a hurry to outsource their thinking to anybody or anything. Historically this has taken the form of the masses parroting whatever a philosopher, religious leader, or politician said. Today it&#x27;s taking the form of parroting whatever an AI generated. Asking a human being a question often results in them &lt;a href=&quot;https:&#x2F;&#x2F;orchidfiles.com&#x2F;im-tired-of-ai-generated-answers&#x2F;&quot;&gt;asking an AI&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;noslopgrenade.com&#x2F;&quot;&gt;parroting the answer&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The masses aren&#x27;t relying on AI only for their talking points. They&#x27;re listening to AI generate &lt;a href=&quot;https:&#x2F;&#x2F;www.inc.com&#x2F;moses-jeanfrancois&#x2F;ai-generated-podcasts-boom-on-audio-platforms-are-you-listening-to-one&#x2F;91338876&quot;&gt;podcasts&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;ai-artificial-intelligence&#x2F;937059&#x2F;nobody-wants-to-tell-me-why-they-only-listen-their-own-suno-slop&quot;&gt;music&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;completeaitraining.com&#x2F;news&#x2F;cape-town-author-earns-six-figures-selling-ai-generated&#x2F;&quot;&gt;reading AI generated novels&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;phys.org&#x2F;news&#x2F;2026-01-people-swayed-ai-generated-videos.html&quot;&gt;watching AI generated videos&lt;&#x2F;a&gt;. Soon they will rely on AI to tell them how to &lt;a href=&quot;https:&#x2F;&#x2F;decrypt.co&#x2F;368866&#x2F;ai-startup-pay-people-2000-month-masturbate&quot;&gt;spank the monkey&lt;&#x2F;a&gt;. Writers (I use the term loosely) are letting &lt;a href=&quot;https:&#x2F;&#x2F;www.npr.org&#x2F;2025&#x2F;05&#x2F;20&#x2F;nx-s1-5405022&#x2F;fake-summer-reading-list-ai&quot;&gt;AI generate their articles&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.newsweek.com&#x2F;ai-books-art-money-artificial-intelligence-1799923&quot;&gt;novels&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Companies are also rushing to outsource as much work as they can to AI. Amazon is pushing employees to use AI so fiercely that its employees are &lt;a href=&quot;https:&#x2F;&#x2F;www.revenium.ai&#x2F;post&#x2F;tokenmaxxing-amazon-measuring-ai-value&quot;&gt;gaming the system by using as many token as possible&lt;&#x2F;a&gt; to improve their performance metrics. The same link mentions how Meta is ranking employees by how many tokens they use. Even if they&#x27;re not necessarily making it a performance metric, many large companies &lt;a href=&quot;https:&#x2F;&#x2F;www.businessinsider.com&#x2F;how-workers-use-ai-survey-2025-8&quot;&gt;require employees to use AI&lt;&#x2F;a&gt;. Soon companies will &lt;a href=&quot;https:&#x2F;&#x2F;professional.dce.harvard.edu&#x2F;blog&#x2F;ai-will-shape-the-future-of-marketing&#x2F;&quot;&gt;use AI for marketing&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.newyorker.com&#x2F;culture&#x2F;the-lede&#x2F;with-ai-anyone-can-be-an-influencer&quot;&gt;creating influencers&lt;&#x2F;a&gt; (looking at human influencers, this might be an overall improvement).&lt;&#x2F;p&gt;
&lt;p&gt;I could go on, but I believe I&#x27;ve illustrated my point. AI stands a real chance of taking over humanity, but not in the way most people are predicting. We&#x27;re not looking at a sapient hyper-competent AI emerging in the near future and executing a brilliant plan to eradicate or enslave humanity. We&#x27;re looking at gullible humans outsourcing their thinking to the current batch of statistical models. Shackled humans won&#x27;t be prodded into forced labor by armed robot overlords, they&#x27;ll continue wandering aimlessly as they stare at their smartphones. The catalyst won&#x27;t be machines developing sapience, it&#x27;ll be human stupidity and laziness. Our future isn&#x27;t Terminator, it&#x27;s Idiocracy.&lt;&#x2F;p&gt;
&lt;p&gt;The only saving grace will be when the AI companies finally start charging profitable rates. Right now everybody is living high on subsidized rates meant to develop massive user bases. Eventually these companies will need to &lt;em&gt;make money&lt;&#x2F;em&gt;. Being technology companies, their preferred form of making money will be offering less for more (enshitification). That&#x27;s when we&#x27;ll see whether the unwashed masses and companies will continue to outsource everything to AI or instead see AI for what it really is: a tool that is appropriate for specific jobs.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Return of Your Apps, Please</title>
        <published>2026-05-15T09:00:00-06:00</published>
        <updated>2026-05-15T09:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/the-return-of-your-apps-please/"/>
        <id>https://www.christopherburg.com/blog/the-return-of-your-apps-please/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/the-return-of-your-apps-please/">&lt;p&gt;In &lt;a href=&quot;&#x2F;blog&#x2F;your-apps-please&#x2F;&quot;&gt;my previous post&lt;&#x2F;a&gt; I discussed how the ability to attend concerts is increasingly locked behind using either an iOS device or a device running a Google approved version of Android. The issue I described isn&#x27;t an isolated incident. More and more of our lives are being locked behind our smartphones. The two major smartphone operating system providers, Google and Apple, know this and are using their positions to lock us into their platforms. This is especially egregious of Google since it introduced Android as an open platform, which it no longer is.&lt;&#x2F;p&gt;
&lt;p&gt;Since introducing Android, Google has slowly been locking it down. Now there are effectively two tiers of Android: the Google blessed tier that can participate in our smartphone centric lives and the bastard child tier that can&#x27;t. Less somebody think I&#x27;m being hyperbolic, Google demonstrated this fact with the latest update to &lt;a href=&quot;https:&#x2F;&#x2F;reclaimthenet.org&#x2F;google-broke-recaptcha-for-de-googled-android-users&quot;&gt;reCAPTCH&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google has tied its next-generation reCAPTCHA system to Google Play Services on Android, meaning anyone running a &lt;a href=&quot;https:&#x2F;&#x2F;reclaimthenet.org&#x2F;the-deal-that-could-change-de-googled-phones-forever&quot;&gt;de-Googled phone&lt;&#x2F;a&gt; will automatically fail verification when the system decides to challenge them.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;reCAPTCHA is used by many websites, including government and educational websites, to thwart access by bots. Instead of providing an image-based puzzle, the new version of reCAPTCHA will require you to scan a QR code with your phone. The dirty trick, which is covered in more detail on &lt;a href=&quot;https:&#x2F;&#x2F;grapheneos.social&#x2F;@GrapheneOS&#x2F;116550899908879585&quot;&gt;this post&lt;&#x2F;a&gt; from GrapheneOS&#x27;s Mastodon instance, is that on Android this authentication mechanism is tied to Google Play Services, which is Google&#x27;s proprietary framework for Android, on a Google certified device. That means people with de-Googled phones, such as any phone running LineageOS or GrapheneOS, will be unable to access any website where reCAPTCHA suspects you&#x27;re a bot.&lt;&#x2F;p&gt;
&lt;p&gt;With this change, attending concerts won&#x27;t be the only thing locked behind using an iPhone or Google blessed Android device. Huge swaths of the web will be too. This also creates a potential Catch-22 situation. Since many government websites use reCAPTCHA, people not using a Google blessed Android device will inevitably be unable to access government websites, which could result in legal consequences depending on the website in question. Imaging being unable to renew your driver&#x27;s license or pay your taxes because you don&#x27;t own the right kind of smartphone.&lt;&#x2F;p&gt;
&lt;p&gt;This isn&#x27;t the reality we&#x27;re heading towards, it&#x27;s the reality we&#x27;re at right now. The European Union is working on a European Digital Identity, which &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;eu-digital-identity-wallet&#x2F;eudi-app-android-wallet-ui&#x2F;issues&#x2F;287&quot;&gt;will require Google Play Integrity&lt;&#x2F;a&gt;. Google Play Integrity, like the new version of reCAPTCHA, only works on Google certified devices. This not only expands the two tier system I mentioned to European citizenship, but also demonstrates that the European Union has no opposition to Google being a monopoly despite the rhetoric of its politicians. While the European Union makes a show of stopping Google&#x27;s &quot;monopoly&quot; through lawsuits involving its app store, it hands Google a literal monopoly over the European Digital Identity application. To reiterate a long running theme of this blog, your government doesn&#x27;t love you.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Your Apps, Please</title>
        <published>2026-04-25T19:00:00-06:00</published>
        <updated>2026-04-25T19:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/your-apps-please/"/>
        <id>https://www.christopherburg.com/blog/your-apps-please/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/your-apps-please/">&lt;p&gt;I&#x27;m going to date myself. When I first started attending concerts, you bought physical tickets. These paper tickets could be purchased in several ways. You could visit the venue ticket box during business hours and purchase them. Ticket would normally be available weeks or even months ahead of a concert or you could buy them when you arrived for the concert if it wasn&#x27;t sold out.  If you lived too far from the venue, you could purchase tickets over the phone and either have them mailed to you or will call (that&#x27;s and old term for picking your tickets up at the venue). As the Internet became more prominent, many venues started to offer online purchases. Tickets purchased online could be either mailed to you, will call, or printed at home using your printer. These were the halcyon days of concert ticket purchasing in my opinion.&lt;&#x2F;p&gt;
&lt;p&gt;All good things must come to an end though. Attending concerts today is often a pain in the ass because venues have moved to using apps for ticketing. This idea sounds convenient on paper. Everybody carries their phone with them to concerts so they can hold them up and record the entire show to post on social media so their friends know they were there. Since everybody has their phone with them all the time, making the device the method of acquiring tickets and entering concerts only makes sense, right? Except some of us don&#x27;t carry our phones with us all the time. Some of us like to actually watch the concert with our own eyes rather than filtered through a screen. But more importantly, not all of us use venue approved smartphones.&lt;&#x2F;p&gt;
&lt;p&gt;There are several major problems with apps being used for tickets. The first one I will cover is the combination of shitty technology and nonexistent customer support that defines modern services. Anybody who has had a problem with a Google or Microsoft product will understand this pain. Getting a hold of a human being at either company is basically impossible. If your problem can&#x27;t be solved through simple online methods, your problem often isn&#x27;t going to be solved. One venue I used to frequent uses &lt;a href=&quot;https:&#x2F;&#x2F;www.axs.com&#x2F;&quot;&gt;AXS&lt;&#x2F;a&gt;. I say used to frequent because AXS is a unique ticketing service in that they won&#x27;t actually sell me tickets. You see, their website and app are both convinced that I&#x27;m a bot. Creating an account took long enough that one could legitimately write an epic poem about it. Once I managed to create an account, I couldn&#x27;t use the service. Getting human support isn&#x27;t an option. I did find their online support page and submitted a ticket thinking a human being would respond at some point. Instead, several days later, I received a link to chat with a large language model that was completely incapable of solving my issue. I&#x27;m calling out AXS in this case because it&#x27;s my most recent encounter, but the same headaches are true of many ticketing apps.&lt;&#x2F;p&gt;
&lt;p&gt;The second major problem is the seemingly endless number of apps you need to install. Ticketmaster used to be the go-to app for ticketing, but they&#x27;re a shower of bastards so venues rightly sought alternatives. This has lead to a seemingly endless number of apps. Each app also requires you to sign up for yet another service. Some services, like AXS, make signing up a tremendous pain in the ass. A few services, like &lt;a href=&quot;https:&#x2F;&#x2F;dice.fm&#x2F;&quot;&gt;Dice&lt;&#x2F;a&gt;, make the process straight forward and easy. Most are somewhere in between. It wouldn&#x27;t be so bad if there appeared to be an end to the madness, but like Sisyphus pushing his rock, we seem to be damned to signing up for new services and installing new apps for all eternity.&lt;&#x2F;p&gt;
&lt;p&gt;The third major problem, and this is the biggest one in my opinion, is that you need to own a venue approved smartphone. This means you either need an iPhone or an Android phone running the stock OS. If you use anything else, good fucking luck. GrapheneOS works in most cases so long as you have Google Play Services installed (I install it in a separate, isolated profile along with all the stupid ticketing apps). If you don&#x27;t have Google Play Services installed, you&#x27;re out of luck for many apps (including Ticketmaster). What if you use something radically different, like a &lt;a href=&quot;https:&#x2F;&#x2F;furilabs.com&#x2F;&quot;&gt;phone running mainline Linux&lt;&#x2F;a&gt;? Some ticketing apps can be made to run in an Android emulator with microG, but not all. If that doesn&#x27;t work for the specific app you need for a concert, you won&#x27;t get to attend that concert. The reliance on apps for ticketing helps Apple and Google maintain their duopoly over the smartphone market.&lt;&#x2F;p&gt;
&lt;p&gt;The old ways were better. Anybody who could afford the tickets could attend a concert. Now being able to afford the tickets isn&#x27;t enough. You must also own an iOS or Android device, be lucky enough to not be tagged as a bot by the ticketing service, and have the wherewithal to not blow your brains out while you navigate the Byzantine account sign up process that many services utilize. Rubbing salt into the wound is the fact you don&#x27;t have ticket stubs you can tack into a scrapbook to remember all the concerts you attended (for you younger folk, tickets at two pieces and the venue ripped off one piece when you got to the concert and you kept the other, which is referred to as the stub, and a scrapbook is a physical book you could paste photographs, ticket stubs, and other paper objects in).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Endless Cycle of Enshitification</title>
        <published>2026-04-16T16:00:00-06:00</published>
        <updated>2026-04-16T16:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/the-endless-cycle-of-enshitification/"/>
        <id>https://www.christopherburg.com/blog/the-endless-cycle-of-enshitification/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/the-endless-cycle-of-enshitification/">&lt;p&gt;I&#x27;ve lived through a few epochs, moments in time where things changed so dramatically that we commonly talk about our world as it existed before and after. 9&#x2F;11 was the first epoch that I was aware of living through (the fall of the Soviet Union happened when I was too young to know or care about it). COVID-19 is another. The differences between the pre-COVID-19 years and post-COVID-19 years are significant. During COVID-19 we experienced a dramatic drop in quality of life. Not because of the disease, but because of the fallout from the worldwide response to the disease. The world has never recovered from this. It&#x27;s been caught in a continuous cycle of enshitification ever since.&lt;&#x2F;p&gt;
&lt;p&gt;The damage to education caused by the response to COVID-19 is hard to understate. Math and literacy rates were already trending downward before COVID-19, but they fell off of a cliff during and keep dropping after. It&#x27;s not just K-12 schools either. College level education quality has been dropping too. The popularity of large language models (commonly and incorrectly referred to as AI) has exacerbated this trend. This isn&#x27;t helped by the fact that education is no longer focused on the exercise of learning itself but on making the grade (which are often divorced from each other). It&#x27;s common for stories covering this phenomenon to focus on students using large language models to skip doing the work. I submit &lt;a href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;science&#x2F;2026&#x2F;04&#x2F;to-teach-in-the-time-of-chatgpt-is-to-know-pain&#x2F;&quot;&gt;this story&lt;&#x2F;a&gt; penned by a college instructor as exhibit one:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;But since the appearance of ChatGPT, the instructor’s job isn’t just to teach the subject and frantically attempt to keep every student’s plate spinning. Increasingly, it’s to moonlight as a detective and prosecutor because students without the motivation to do the work don’t have to skip it anymore. They can turn in a work-shaped simulacrum almost as easily. And a substantial number do—in a &lt;a href=&quot;https:&#x2F;&#x2F;newsroom.collegeboard.org&#x2F;new-research-majority-high-school-students-use-generative-ai-schoolwork&quot;&gt;recent College Board survey&lt;&#x2F;a&gt; of 600 high school students, 84 percent said they had used generative AI for schoolwork.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This part of the story wasn&#x27;t what jumped out at me though. This part was:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;For the last few years, I’ve been exclusively teaching asynchronous online courses, meaning recorded videos rather than live sessions.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Enshitification in education isn&#x27;t coming solely from lazy students trying to make the grade without doing any work. It&#x27;s coming from both sides of the teacher-student relationship. Before COVID-19 college classes were largely in-person. There were remote classes, but they were the exception rather than the rule. During COVID-19 most classes became remote. This resulted in an overall drop in quality for both the teachers and students. After COVID-19 many classes remain remote despite no remaining restrictions against in-person classes.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s easy to blame students who use large language models to avoid doing their work for being lazy. But it&#x27;s equally true that instructors prerecording video lessons (asynchronous learning to use the academic buzzword) are being lazy and avoiding doing their work. An instructor&#x27;s job isn&#x27;t to simply regurgitate information. If students want that, they can go on YouTube. An instructor&#x27;s job is to help students learn. That not only requires covering material but also requires helping students understand the material. This may require explaining the material in several different ways, having one-on-one conversations with students, pointing students to additional resources, developing hands-on exercises that can help students walk through the logic, etc.&lt;&#x2F;p&gt;
&lt;p&gt;If an instructor is simply recording videos for students to watch, those students are going to pick up on the instructor&#x27;s laziness. They will respond in kind with their own laziness. After all if the instructor doesn&#x27;t care why should the students? The enshitification cycle feeds on itself like an ouroboros. The cycle can&#x27;t be stopped and certainly can&#x27;t be reversed unless one or more of the people responsible for perpetuating it stop. I will argue that in the case of the teacher-student relationship the teacher should be the one to stop perpetuating the cycle. Amongst the responsibilities of an instructor is the responsibility to demonstrate a belief that the material is worth learning.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m sure there are teachers who stand out in your memory because they seemed to be exceptionally good at teaching. I can recall many. One of my high school science teachers excelled at her job. Part of her success was her obvious love of the topic. Her excitement when it came to science demonstrated that she truly believed that the material was worth learning. Many of my college professors were the same way. They obviously loved the subjects they taught and their love of the subject alone could convince students that the material was worth learning.&lt;&#x2F;p&gt;
&lt;p&gt;Thwarting students&#x27; use of large language models is actually quite simple. Return to in-person classes and the use of hand written (they were called blue book exams when I was in college) and oral examinations. Will some students still find a way to cheat? Yes. But I suspect most won&#x27;t because successful cheating under these conditions requires far more sophistication. The bigger challenge is overcoming students&#x27; apathy. I believe that requires teachers to first overcome their own apathy, which is an equal challenge.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Disabling Homebrew in Dinosaur OS</title>
        <published>2026-02-13T13:00:00-06:00</published>
        <updated>2026-02-13T13:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/disabling-homebrew-in-dinosaur-os/"/>
        <id>https://www.christopherburg.com/blog/disabling-homebrew-in-dinosaur-os/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/disabling-homebrew-in-dinosaur-os/">&lt;p&gt;Since I &lt;a href=&quot;&#x2F;blog&#x2F;introducing-dinosaur-os&#x2F;&quot;&gt;released Dinosaur OS&lt;&#x2F;a&gt; last September, I&#x27;ve had to make very few changes to my image. This is a testament to the overall stability of Bluefin, the image upon which Dinosaur OS is based. But I started receiving error notifications a couple of weeks ago whenever the automatic update service ran. The initial error was actually due to a Flatpak problem. The developer of a package I installed uploaded a new version with the same version number as my currently installed version. This cause the Flatpak update program to fail. I managed to fix that, but the service was still displaying an error because it wasn&#x27;t able to update Homebrew.&lt;&#x2F;p&gt;
&lt;p&gt;Homebrew is a package manager that was originally written for macOS. It was released back when I used macOS so I tried it and discovered that it was a train wreck and opted to use &lt;a href=&quot;https:&#x2F;&#x2F;www.macports.org&#x2F;&quot;&gt;MacPorts&lt;&#x2F;a&gt; instead. Homebrew had a number of bizarre design decisions. The biggest was it wanted to install packages at a system level. Normally that&#x27;s not a problem with a package manager, but Homebrew tied the system level directory to your user account&#x27;s user ID number. Effectively Homebrew installed packages at a system level that only a single user account to use or modify. There was an option to install packages into your home directory, but a number of packages failed to run when you did that.&lt;&#x2F;p&gt;
&lt;p&gt;When it was announced that Homebrew was available for Linux, I dismissed it entirely. Why would I want a poorly designed package manager on a system that already has a plethora of very good package managers? My experience with Homebrew was so bad that I initially intended to remove it from Dinosaur OS. I ultimately decided that enough time had passed that I should give Homebrew another chance. My latest experience mirrored my previous experience.&lt;&#x2F;p&gt;
&lt;p&gt;Homebrew on Linux suffers the same problem as it does on macOS. It doesn&#x27;t support systems with multiple user accounts well. When Bluefin installs Homebrew, it creates the &lt;code&gt;&#x2F;home&#x2F;linuxbrew&#x2F;&lt;&#x2F;code&gt; directory and sets its user and group IDs to 1000. Bluefin is based on Fedora and by default the first user account created on a Fedora system has the user and group IDs of 1000. All packages installed with Homebrew are installed into the &lt;code&gt;&#x2F;home&#x2F;linuxbrew&#x2F;&lt;&#x2F;code&gt; directory. This means Homebrew on Bluefin is configured so that only the very first user account created on the system can use it.&lt;&#x2F;p&gt;
&lt;p&gt;This is fine for most users, but I&#x27;m not most users. I have two user accounts on my system. The first is my administrator account, the second is a regular user account that I use for my day to day tasks. Administrator rights are required to create new user accounts so obviously I create my administrator account first. This means the actual account I use day to day, which has the user and group IDs of 1001 (the default on Fedora systems for the second user account created), can&#x27;t use Homebrew.&lt;&#x2F;p&gt;
&lt;p&gt;There are ways around this. I could change the owner permissions on &lt;code&gt;&#x2F;home&#x2F;linuxbrew&#x2F;&lt;&#x2F;code&gt; to 1001. Homebrew on Bluefin is setup using the &lt;code&gt;brew-setup.service&lt;&#x2F;code&gt; systemd service, which sets the permissions. I could change that unit file in my image to set the user and group IDs to 1001. Either option would allow my day to day user account to use Homebrew installed packages, but would prevent my administrator account from using them. The bottom line is Homebrew is a poorly designed package manager.&lt;&#x2F;p&gt;
&lt;p&gt;I chose a third option: ignore Homebrew entirely. There was no downside to this option at first, but a few weeks ago changes were made to Bluefin&#x27;s automatic updater that caused me to reexamine my decision. As noted at the beginning of this article, I started receiving notifications that the automatic update service failed. Checking journalctl showed me the source of the error was that the update utility, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ublue-os&#x2F;uupd&quot;&gt;UUPD&lt;&#x2F;a&gt;, was unable to upgrade Homebrew. This failure was caused by &lt;code&gt;&#x2F;home&#x2F;linuxbrew&#x2F;&lt;&#x2F;code&gt;, which normally contains the brew executable used to install and update packages, being empty (I didn&#x27;t investigate why it was empty since I was already done with Homebrew).&lt;&#x2F;p&gt;
&lt;p&gt;Fortunately disabling and removing Homebrew from Bluefin is straight forward. Homebrew is installed by the &lt;code&gt;brew-setup.service&lt;&#x2F;code&gt; systemd service, which is enabled by default on Bluefin. Disabling the service prevents it from automatically installing Homebrew so Dinosaur OS disables it. I also add a script, &lt;code&gt;&#x2F;usr&#x2F;libexec&#x2F;remove-brew&lt;&#x2F;code&gt;, to the image, which removes Homebrew from a system if it&#x27;s already installed. This makes Dinosaur OS nondestructive in that it won&#x27;t automatically remove Homebrew from a system where it&#x27;s already installed. Removing Homebrew requires manual work. It also means Homebrew can be installed again by either starting or enabling &lt;code&gt;brew-setup.service&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I still had the problem where UUPD would throw an error because it was unable to update Homebrew (which was now missing entirely). UUPD on Bluefin accepts arguments that disable update modules though. The final change I made to Dinosaur OS is adding &lt;code&gt;--disable-module-brew&lt;&#x2F;code&gt; to the ExecStart line of &lt;code&gt;uupd.service&lt;&#x2F;code&gt;, which is activated by a timer periodically. &lt;code&gt;uupd.service&lt;&#x2F;code&gt; is a system file, which means the user cannot edit it. Therefore, if you&#x27;re running Dinosaur OS and install Homebrew, your Homebrew packages won&#x27;t be automatically updated by &lt;code&gt;uupd.service&lt;&#x2F;code&gt;. The best way to change this behavior is to copy &lt;code&gt;&#x2F;usr&#x2F;lib&#x2F;systemd&#x2F;system&#x2F;brew-update.service&lt;&#x2F;code&gt; to &lt;code&gt;&#x2F;etc&#x2F;systemd&#x2F;system&#x2F;uupd.service&lt;&#x2F;code&gt; and remove &lt;code&gt;--disable-module-brew&lt;&#x2F;code&gt; from the ExecStart line.&lt;&#x2F;p&gt;
&lt;p&gt;Overall I still like Bluefin a lot. I agree with most of the design decisions and appreciate that it&#x27;s been easy for me to change the decisions I dislike. I continue to run Dinosaur OS on my desktop systems and haven&#x27;t faced any catastrophic problems. If you want to create your own image based on Bluefin and want an example image to get started, check the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ChristopherBurg&#x2F;dinosaur-os&quot;&gt;Dinosaur OS repository&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Getting Started with Kettlebells</title>
        <published>2026-02-06T20:00:00-06:00</published>
        <updated>2026-02-06T20:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/getting-started-with-kettlebells/"/>
        <id>https://www.christopherburg.com/blog/getting-started-with-kettlebells/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/getting-started-with-kettlebells/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h1&gt;
&lt;p&gt;I developed an interest in physical fitness about a decade and a half ago. This interest lead me to pursue martial arts, biking, and eventually kettlebell lifting (along with many other activities). The reason I got into kettlebell lifting is because I wanted to improve my strength and endurance. Kettlebells were tools I could use in the comfort of my small apartment. Now I have a home and a gym in my basement. I still lift kettlebells three or four times a week.&lt;&#x2F;p&gt;
&lt;p&gt;Getting started is the hardest part of any journey. This post is intended to help anybody who&#x27;s interested in starting kettlebell lifting. It&#x27;s not intended to be all encompassing. Too much information can be as bad as too little. Decision paralysis thwarts as many journeys as fear and laziness. Therefore, this post is opinionated. It will provide only a handful of options. Wherever options are provided, know that there are many more options out there. They aren&#x27;t brought up to cut down on the noise. The hardest part of any journey is also the most important. It&#x27;s more important to get started than to travel the optimal path. Any progress forward is better than no progress while you try to develop the optimal plan.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;note-on-units&quot;&gt;Note on Units&lt;&#x2F;h1&gt;
&lt;p&gt;Weights in this post will be provided in kilograms. Why would a post written by an American living in the United States use metric units? Two reasons. First, the historical unit of weight for kettlebells is the pood. The pood is an old imperial Russia unit. It&#x27;s equal to about 16 kg. This means kettlebell weights divide nicely into kilograms. Second, kettlebell lifting is an international sport. International sports use the metric system because almost everybody outside of the United States does.&lt;&#x2F;p&gt;
&lt;p&gt;To make your life a bit easier, here are the American equivalents to the weights used in this post (along with the weight in poods to illustrate my point about dividing nicely into kilograms):&lt;&#x2F;p&gt;
&lt;p&gt;16 kg = 35 lb (1 pood)
20 kg = 44 lb (1.25 poods)
24 kg = 53 lb (1.5 poods)
28 kg = 62 lb (1.75 poods)
32 kg = 70 lb (2 poods)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;types-of-kettlebells&quot;&gt;Types of Kettlebells&lt;&#x2F;h1&gt;
&lt;p&gt;There are two major types of kettlebells: hard style and competition style. Hard style are typically made out of cast iron. The size of the bell depends on the weight. Heavier hard style kettlebells are larger than lighter ones. Competition style kettlebells are typically made out of steel. The size of the bell is the same regardless of the weight. A 16 kg competition style kettlebell is the same size as a 32 kg one.&lt;&#x2F;p&gt;
&lt;p&gt;I exclusive used hard style kettlebells until this year. Now I own both. I recommend hard style kettlebells when you&#x27;re starting out though. Hard style kettlebells are typically cheaper, often much cheaper, than competition style ones. You can do all of the traditional kettlebell lifts with either style of kettlebell so you might as well save yourself some money.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;ll see articles online claim that competition kettlebells don&#x27;t work well for two handed lifts such as two handed swings due to the handle size and shape. This isn&#x27;t my experience. I have no issue doing two handed swings with competition style kettlebells and I have large hands. You&#x27;ll also see articles claim that competition style kettlebells are more durable because they&#x27;re made of steel instead of cast iron. This is a distinction without a difference. The only way you&#x27;ll break either style of kettlebell is by being a complete dumbass.&lt;&#x2F;p&gt;
&lt;p&gt;The two hard style kettlebells I typically recommend are &lt;a href=&quot;https:&#x2F;&#x2F;repfitness.com&#x2F;products&#x2F;kettlebells-kg&quot;&gt;REP Fitness&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;bellsofsteel.us&#x2F;collections&#x2F;traditional-kettlebells&#x2F;products&#x2F;powder-coated-kettlebells&quot;&gt;Bells of Steel&lt;&#x2F;a&gt;. Both offer reasonably priced high-quality cast iron kettlebells with &quot;free&quot; shipping (free shipping means the price of shipping is baked into the price of the kettlebell). Buy whichever is cheaper at the time or in stock.&lt;&#x2F;p&gt;
&lt;p&gt;If your budget is tight, I&#x27;ve read reviews for &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;Yes4All-Solid-Cast-Kettlebell-Weights&#x2F;dp&#x2F;B0061ZLTYY&quot;&gt;Yes4All&lt;&#x2F;a&gt; kettlebells and they seem to be decent. I can&#x27;t recommend them since I&#x27;ve never seen them in person.&lt;&#x2F;p&gt;
&lt;p&gt;Another option I&#x27;ll note is &lt;a href=&quot;https:&#x2F;&#x2F;bellsofsteel.us&#x2F;collections&#x2F;adjustable-kettlebells&#x2F;products&#x2F;adjustable-kettlebell&quot;&gt;Bells of Steel adjustable kettlebells&lt;&#x2F;a&gt;. These are adjustable competition style kettlebells. They&#x27;re a good option if space is tight and you can afford to pay more upfront. I prefer fixed weight kettlebells because sometimes I like to switch weights during my workouts and changing an adjustable kettlebell&#x27;s weight is a slow process. That doesn&#x27;t matter when you&#x27;re starting out though.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;starting-weight&quot;&gt;Starting Weight&lt;&#x2F;h1&gt;
&lt;p&gt;Recommending a starting weight is tricky. Everybody is different. If you know anybody who owns kettlebells or dumbbells, ask them if you can press a few overhead. You want a weight that you can press overhead a few times. I&#x27;ll cite the most common rule of thumb. Men and women who haven&#x27;t done any strength training should start with 16 kg and 8 kg respectively. Men and women who have done some strength training should start with 20 kg and 12 kg respectively.&lt;&#x2F;p&gt;
&lt;p&gt;The difficulty of most kettlebell lifts can be adjusted through technique. If 20 kg is too light for two handed swings, change to one handed swings. If 20 kg is too heavy to strict press overhead, push press it. If a weight is beginning to feel too light, you can do more reps in less time to increase the difficulty. There are limits to this. If you can strict press a 24 kg kettlebell overhead, an 8 kg kettlebell isn&#x27;t going to be a challenge no matter what (that&#x27;s not to say an 8 kg kettlebell will be completely without value). Likewise, if you can barely strict press a 16 kg kettlebell overhead, you&#x27;re not going to get a 32 kg kettlebell overhead.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s better to go a bit light than a bit heavy when you&#x27;re starting. Beginners should focus on technique. It&#x27;s almost impossible to focus on technique if you&#x27;re barely able to move the kettlebell you&#x27;re using.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;programs&quot;&gt;Programs&lt;&#x2F;h1&gt;
&lt;p&gt;There are two programs I recommend to beginners: &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;Kettlebell-Strength-Secret-Soviet-Supermen&#x2F;dp&#x2F;0938045695&quot;&gt;Rite of Passage&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;Kettlebell-Simple-Sinister-Revised-Updated&#x2F;dp&#x2F;0989892433&quot;&gt;Simple and Sinister&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Both programs require a single kettlebell. Both books do a good job of covering the technical aspects of the lifts they use. This is important. There are books for beginners, which go into detail on the how of lifts, and books for people who have experience, which typically don&#x27;t explain how to perform lifts. You want to learn how to properly perform lifts. There are also a lot of good videos online that go over the hows of lifts. If you can find a coach in your area, you can also hire them to teach you how to perform lifts (this is probably the fastest and safest option).&lt;&#x2F;p&gt;
&lt;p&gt;Rite of Passage is covered in the book Enter the Kettlebell. Between the two programs, I like this one slightly better because I like to press weight overhead. The program uses cleans, strict presses, swings, and snatches. There is also the option to add pull ups. The strict press is probably the lift that gives you the most bang for your buck. It&#x27;s the staple of many great kettlebell programs such as The Giant, Dry Fighting Weight, and The Armor Building Formula. Swings add an endurance component to the program. Snatches are something you will need to study for a while, but once you learn how to snatch, you unlock another lift that provides tremendous bang for your buck. Rite of Passage is a three day a week program.&lt;&#x2F;p&gt;
&lt;p&gt;Simple and Sinister used to be &lt;em&gt;the&lt;&#x2F;em&gt; recommended program for beginners. It&#x27;s the program I ran when I started. I&#x27;ve seen a number of people in online kettlebell communities argue that Simple and Sinister isn&#x27;t a good program. They&#x27;re full of shit in my opinion. Although I like Rite of Passage better, Simple and Sinister is an excellent program for people who haven&#x27;t done any strength training. The program uses Turkish get ups and swings. Turkish get ups teach you the invaluable skill of getting up off the ground while holding weight. It will improve your overall movement quality. It can also be run more frequently than Rite of Passage.&lt;&#x2F;p&gt;
&lt;p&gt;It doesn&#x27;t matter which program you pick. If you want to press weight overhead, go with Rite of Passage. If you want to get up off of the ground while holding weight, go with Simple and Sinister. If you can&#x27;t decide, flip a coin.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;That&#x27;s it. That&#x27;s the guide. Buy a kettlebell of appropriate weight, pick a program, and start lifting.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Complex Systems, Simple Answers</title>
        <published>2026-02-06T13:00:00-06:00</published>
        <updated>2026-02-06T13:00:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/complex-systems-simple-answers/"/>
        <id>https://www.christopherburg.com/blog/complex-systems-simple-answers/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/complex-systems-simple-answers/">&lt;p&gt;The universe we occupy is a very complex system that contains an uncountable number of complex systems within itself. One of the most common illustrations of this fact is weather forecasting. Weather forecasts are notorious for being inaccurate. The reason for this isn&#x27;t because the weatherman is incompetent, it&#x27;s because weather is a complex system. Edward Norton Lorenz, a meteorologist who founded chaos theory, noted the complexity of weather systems through &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Butterfly_effect&quot;&gt;the butterfly effect&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;He noted that the butterfly effect is derived from the example of the details of a tornado (the exact time of formation, the exact path taken) being influenced by minor perturbations such as a distant butterfly flapping its wings several weeks earlier.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The terrestrial weather system isn&#x27;t the only complex system. Space weather is a thing and a great deal of effort is put into predicting it. Like predicting terrestrial weather, predicting space weather is notoriously inaccurate. A few other complex systems are the movement of tectonic plates, propagation of electromagnetic radiation, and human behavior.&lt;&#x2F;p&gt;
&lt;p&gt;The human brain prefers simple answers. Prescientific man often explained complex phenomenon like weather as the action of gods and other supernatural beings. A typhoon wiping out a coastal city might be explained as the god of the sea punishing the inhabitants because they did something he didn&#x27;t like. Postscientific man isn&#x27;t that different. Although our scientific understanding has largely done away with accusing the gods for all that happens, we still end up creating simple answers for complex systems.&lt;&#x2F;p&gt;
&lt;p&gt;This comes up most frequently when people try to blame an individual or group for events that are the result of complex systems. Crime rates are a good example. Many factors play into crime rates. Socioeconomic conditions are the most commonly cited factors, but there are many more. The laws themselves play a huge role because an act isn&#x27;t a crime unless there&#x27;s a law against it. If the government passes a law against an until then lawful and very common activity (see Prohibition in the United States), the rate of crime increases. Weather plays a factor in crime rates. Cities in the northern hemisphere typically have a higher rate of violent crime during the summer. Individual attitudes are a major factor. If there is a large number of people who are unhappy with their current conditions, they are more likely to perform criminal acts such as vandalism. Many people ignore all of these factors and instead blame crime rates on blacks or immigrants and call it a day.&lt;&#x2F;p&gt;
&lt;p&gt;Political systems are also complex. A political system involves many people acting in the name of a government. These government vary from dictatorships to democracies. Different systems have different numbers of participants. The laws that get passed depend on a number of factors. Consider the legislative process in a common democratic system. A law might be introduced by a politician on behalf of a lobbyist. The lobbyist may want the law passed to prevent new competitors from entering their market. The politician might received benefits from the lobbyist ranging from paid vacations to promises of employment after they exit politics. Another law might be introduced because a politician sees people participating in activities they personally find immoral (again, see Prohibition in the United States). Once a law is introduced, there is a complex system of wheeling and dealing that commonly happens before the law is either rejected or passed into law. Many people ignore all of these factors and instead blame one political party for all the political ills in their country. Or they might blame the Jews or, more recently, British royalty (a new conspiracy theory gaining headway here in the United States).&lt;&#x2F;p&gt;
&lt;p&gt;What is an answer that doesn&#x27;t correctly answer a question? It&#x27;s bullshit. This provides some incite into why all of the perceived ills in the world seem to go unaddressed. Too many people have opted for bullshit rather than answers. But don&#x27;t be too harsh of those people. We humans aren&#x27;t well adapted to analyzing and addressing complex systems. All of us opt for bullshit. Some of us opt for it more than others, but we all do it. We especially do it when an answer can&#x27;t be identified. Our brains prefer simple answers and absolutely despise having no answers. When an individual accumulates too many questions without answers they often succumb to some form of nihilism, but that&#x27;s not the only option.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re willing to accept the fact that there are many questions without answers and come to peace with that fact, you can live in a sort of harmony. Many religions and philosophies exist around this idea. Stoicism emphasizes that you cannot control things outside of yourself but you can control how you react to events. Even though I cannot control who rules the nation, I can prevent myself from become emotional because of it. You don&#x27;t have to be angry because you don&#x27;t like the ruler of a nation. Daoism is centered on the Dao, the source of all existence. Critically Daoism teaches that the Dao is beyond our comprehension and therefore cannot be completely understood. This is a good frame of mind when living in a universe full of unanswerable questions. Accepting that you cannot fully comprehend events that are happening can help avoid falling under the influence of those who claim to have the answer and therefore from being manipulated by them.&lt;&#x2F;p&gt;
&lt;p&gt;I can&#x27;t say for certain what will make you happy in life. I will say that my life became happier once I accepted that I don&#x27;t know the answer to everything. That acceptance has allowed me to achieve peace by not getting worked up over things outside of my control. I know the universe is composed of complex systems that are incomprehensible to me and I enjoy that there is mystery in this universe. I live my life how I want and care not at all about the opinions of others. They don&#x27;t know the answers either. I strongly urge you to explore the same frame of mind and see if it bring you peace too.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setup IPv6 in WireGuard</title>
        <published>2025-12-30T15:30:00-06:00</published>
        <updated>2025-12-30T15:30:00-06:00</updated>
        
        <author>
          <name>
            Christopher Burg
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.christopherburg.com/blog/setup-ipv6-in-wireguard/"/>
        <id>https://www.christopherburg.com/blog/setup-ipv6-in-wireguard/</id>
        
        <content type="html" xml:base="https://www.christopherburg.com/blog/setup-ipv6-in-wireguard/">&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h1&gt;
&lt;p&gt;Over the holiday break I finished upgrading all of my self-hosted services to make them available via IPv6. The upgrade was straightforward for all of my services except one: my WireGuard &lt;abbr title=&quot;Virtual Private Network&quot;&gt;VPN&lt;&#x2F;abbr&gt; server. I wanted to provide my VPN clients with IPv6 connectivity without using &lt;abbr title=&quot;Network Address Translation&quot;&gt;NAT&lt;&#x2F;abbr&gt;. Unfortunately most of the guides online use NAT for IPv4 and IPv6. NAT is necessary for IPv4, but goes against the very design of IPv6. I wanted to provide each client with a globally routable IPv6 address. This ended up being simple once I figured it out.&lt;&#x2F;p&gt;
&lt;p&gt;I previous wrote a guide &lt;a href=&quot;&#x2F;archive&#x2F;getting-a-static-ip-address-with-a-cheap-vps-and-wireguard&#x2F;&quot;&gt;for setting up WireGuard to share a public static IPv4 address&lt;&#x2F;a&gt;. The formatting was ruined in the transition from my old WordPress blog to this statically generated one, but it explains how to setup a WireGuard VPN server for IPv4. This post will explain how to setup a WireGuard VPN server for IPv6.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;preamble&quot;&gt;Preamble&lt;&#x2F;h1&gt;
&lt;p&gt;First a major caveat. As of this writing, I&#x27;ve had this iteration of my VPN server running for two days. I&#x27;ve tested it on my home network, on my phone&#x27;s cellular network, and on an IPv4 only network through my travel router. IPv6 appears to work in all cases. I haven&#x27;t finished thorough testing though. There may be a number of corner cases that don&#x27;t work. I will update this guide as I find and fix them. Therefore, if you find something broken, check back and I might have discovered it and posted the solution already.&lt;&#x2F;p&gt;
&lt;p&gt;I also pieced my setup together by taking bits and pieces of several online guides. I pillaged from &lt;a href=&quot;https:&#x2F;&#x2F;mkaczanowski.com&#x2F;ndppd-ipv6-ndp-proxy&#x2F;&quot;&gt;this guide&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;blog.frehi.be&#x2F;2022&#x2F;06&#x2F;11&#x2F;setting-up-wireguard-vpn-with-ipv6&#x2F;&quot;&gt;this guide&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;blog.miyuru.lk&#x2F;setup-wireguard-with-global-ipv6&#x2F;&quot;&gt;this guide&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;utcc.utoronto.ca&#x2F;~cks&#x2F;space&#x2F;blog&#x2F;linux&#x2F;ModernProxyIPv6AndARP&quot;&gt;this guide&lt;&#x2F;a&gt;. If there are unnecessary configuration steps in this guide, I likely took it from one of these guides and didn&#x27;t test my final setup without the configuration. Such mistakes are entirely my fault.&lt;&#x2F;p&gt;
&lt;p&gt;In order to follow this guide, you need a source of IPv6 addresses and specifically a separate subnet from your hosting network. My &lt;abbr title=&quot;Internet Service Provider&quot;&gt;ISP&lt;&#x2F;abbr&gt; provides me with a &#x2F;48 prefix. This gives me roughly a bajillion addresses and subnets.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conventions-used-in-this-guide&quot;&gt;Conventions Used in This Guide&lt;&#x2F;h1&gt;
&lt;p&gt;For the purposes of this guide, I&#x27;m going to use the following IP addresses (&lt;code&gt;2001:db8&lt;&#x2F;code&gt; is the &lt;a href=&quot;https:&#x2F;&#x2F;www.rfc-editor.org&#x2F;rfc&#x2F;rfc3849&quot;&gt;prefix reserved for examples and documentation&lt;&#x2F;a&gt; for those not aware):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234::&#x2F;48&lt;&#x2F;code&gt;: The prefix provided by our ISP.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234:9999::&#x2F;64&lt;&#x2F;code&gt;: The subnet of our hosting network. The subnet &lt;code&gt;9999&lt;&#x2F;code&gt; was chosen for readability purposes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234:ffff::&#x2F;64&lt;&#x2F;code&gt;: The subnet provided to our WireGuard VPN clients. Throughout this guide remember that the subnet with numbers is for our hosting network and the subnet with letters is for our VPN clients.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234:9999::1&lt;&#x2F;code&gt;: The IPv6 address used by clients to connect to our WireGuard VPN server.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234:ffff::1&lt;&#x2F;code&gt;: The IPv6 address of the WireGuard interface. This differs from the above address in that a client only uses it after it has connected to the WireGuard VPN server through the above address. Once connected, clients will use this address as their gateway.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2001:db8:1234:ffff::1:1&lt;&#x2F;code&gt;: The IPv6 address provided to the first of our WireGuard VPN clients. This address will be incremented subsequently so our second client will have an IPv6 address of &lt;code&gt;2001:db8:1234:ffff::1:2&lt;&#x2F;code&gt;, our third &lt;code&gt;2001:db8:1234:ffff::1:3&lt;&#x2F;code&gt;, etc.&lt;&#x2F;p&gt;
&lt;p&gt;I will also use &lt;code&gt;en0&lt;&#x2F;code&gt; as the name of the network interface of our WireGuard VPN server, &lt;code&gt;51820&lt;&#x2F;code&gt; as the port used to connect to WireGuard on our server, and &lt;code&gt;wg-vpn.conf&lt;&#x2F;code&gt; as the name of our WireGuard configuration file.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-actual-guide&quot;&gt;The Actual Guide&lt;&#x2F;h1&gt;
&lt;p&gt;The first thing you will need to do is ensure that the router between your hosting network and ISP is setup to route the subnet for our VPN clients to our VPN server. How you do this will depend on both your ISP and your router. For my Ubiquiti Cloud Gateway Ultra, I created a static route that routes the entire &lt;code&gt;2001:db8:1234:ffff::&#x2F;64&lt;&#x2F;code&gt; subnet to &lt;code&gt;2001:db8:1234:9999::1&lt;&#x2F;code&gt;. You will also need to configure your router&#x27;s firewall to allow incoming WireGuard traffic to your VPN server.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m hosting my VPN server on Fedora Server. By default, IPv6 forwarding isn&#x27;t enabled on Fedora Server. I enabled it by adding &lt;code&gt;net.ipv6.conf.all.forwarding=1&lt;&#x2F;code&gt; to &lt;code&gt;&#x2F;etc&#x2F;sysctl.conf&lt;&#x2F;code&gt; and issued the &lt;code&gt;sysctl -p&lt;&#x2F;code&gt; command to load the changes. I also added several other lines. &lt;code&gt;&#x2F;etc&#x2F;sysctl.conf&lt;&#x2F;code&gt; on my VPN server contains the following contents:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;net.ipv4.ip_forward=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;net.ipv6.conf.en0.proxy_ndp=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;net.ipv6.conf.all.forwarding=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;net.ipv6.conf.en0.accept_ra=2
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The first line enables IPv4 forwarding. It&#x27;s enabled by default on Fedora Server, but I added the line just to ensure it&#x27;s always enabled. The second line enables proxying &lt;abbr title=&quot;Neighbor Discovery Protocol&quot;&gt;NDP&lt;&#x2F;abbr&gt; packets, which is used by IPv6 to discover neighboring devices. The final line enables router advertisements while IPv6 forwarding is enabled. I added it to the file when I was trying to dole out IPv6 addresses through another method. I&#x27;m not sure if it&#x27;s needed for my final setup. This is one of those potentially unnecessary configuration steps I mentioned in the preamble for this guide.&lt;&#x2F;p&gt;
&lt;p&gt;The only port I opened on my VPN server&#x27;s firewall is &lt;code&gt;51820&lt;&#x2F;code&gt; for &lt;abbr title=&quot;User Datagram Protocol&quot;&gt;UDP&lt;&#x2F;abbr&gt; packets. WireGuard only uses UDP so you don&#x27;t need to open the port for &lt;abbr title=&quot;Transmission Control Protocol&quot;&gt;TCP&lt;&#x2F;abbr&gt;. I also enabled masquerading capabilities. Masquerading capabilities are only needed for NAT, which means it&#x27;s only necessary for IPv4. You don&#x27;t need to enable it if you&#x27;re only using IPv6 on your VPN server.&lt;&#x2F;p&gt;
&lt;p&gt;Everything else happens in the WireGuard configuration file located at &lt;code&gt;&#x2F;etc&#x2F;wireguard&#x2F;wg-vpn.conf&lt;&#x2F;code&gt;. The first section of the configuration file sets up the interface:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = &amp;lt;Your Server&amp;#39;s Private Key&amp;gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 2001:db8:1234:ffff::1&#x2F;64
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;SaveConfig = false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;ListenPort = 51820
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is all pretty basic. &lt;code&gt;PrivateKey&lt;&#x2F;code&gt; obvious contains your server&#x27;s private key that was generated with &lt;code&gt;wg genkey&lt;&#x2F;code&gt;. &lt;code&gt;Address&lt;&#x2F;code&gt; is the IPv6 address of the WireGuard interface. Clients will use this address as their gateway once they&#x27;ve connected to our VPN server. &lt;code&gt;SaveConfig&lt;&#x2F;code&gt; determines if the current configuration is saved when the WireGuard interface is shutdown. I generate my configuration files with Ansible so I don&#x27;t want any state maintained and disable this feature. &lt;code&gt;ListenPort&lt;&#x2F;code&gt; is the port through which clients will connect to the VPN server.&lt;&#x2F;p&gt;
&lt;p&gt;The next section is where the heavy lifting is done. &lt;code&gt;PostUp&lt;&#x2F;code&gt; commands run when the WireGuard server is being started. &lt;code&gt;PostDown&lt;&#x2F;code&gt; commands run when the WireGuard server is being stopped. In this case, the &lt;code&gt;PostDown&lt;&#x2F;code&gt; commands simply undo the &lt;code&gt;PostUp&lt;&#x2F;code&gt; commands. Also note that &lt;code&gt;%i&lt;&#x2F;code&gt; stands for the WireGuard interface name, which is &lt;code&gt;wg-vpn&lt;&#x2F;code&gt; since the configuration file is &lt;code&gt;wg-vpn.conf&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = ip6tables -A FORWARD -i en0 -o %i -j ACCEPT;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = ip6tables -A FORWARD -i %i -j ACCEPT;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = ip -6 neighbor add proxy 2001:db8:1234:ffff::1:1 dev en0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = ip -6 neighbor add proxy 2001:db8:1234:ffff::1:2 dev en0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = ip -6 neighbor add proxy 2001:db8:1234:ffff::1:3 dev en0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = ip6tables -D FORWARD -i en0 -o %i -j ACCEPT;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = ip6tables -D FORWARD -i %i -j ACCEPT;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = ip -6 neighbor del proxy 2001:db8:1234:ffff::1:1 dev en0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = ip -6 neighbor del proxy 2001:db8:1234:ffff::1:2 dev en0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = ip -6 neighbor del proxy 2001:db8:1234:ffff::1:3 dev en0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;PostUp = ip6tables -A FORWARD -i en0 -o %i -j ACCEPT;&lt;&#x2F;code&gt; and &lt;code&gt;PostUp = ip6tables -A FORWARD -i %i -j ACCEPT;&lt;&#x2F;code&gt; enable IPv6 forwarding between the server&#x27;s network interface (&lt;code&gt;en0&lt;&#x2F;code&gt; in this example) and the WireGuard interface (&lt;code&gt;wg-vpn&lt;&#x2F;code&gt; in this example). This allowed IPv6 traffic originating from our clients to be forwarded out of the VPN server&#x27;s network interface and return traffic routed from the VPN server&#x27;s network interface to the appropriate client.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;PostUp = ip -6 neighbor add proxy 2001:db8:1234:ffff::1:1 dev en0&lt;&#x2F;code&gt; and the following two lines setup NDP proxies for each client. You could probably replace all of these lines with &lt;code&gt;PostUp = ip -6 neighbor add proxy 2001:db8:1234:ffff::&#x2F;64 dev en0&lt;&#x2F;code&gt;. Again I generate my configuration file with an Ansible playbook so it&#x27;s just as easy for me to loop through my list of clients and add a line per client. As mention above, the &lt;code&gt;PostDown&lt;&#x2F;code&gt; lines simply undo the &lt;code&gt;PostUp&lt;&#x2F;code&gt; lines when the WireGuard interface is stopped.&lt;&#x2F;p&gt;
&lt;p&gt;The final part of the file contains configuration information for each peer:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = &amp;lt;The Client&amp;#39;s Public Key&amp;gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 2001:db8:1234:ffff::1:1&#x2F;128
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = &amp;lt;The Client&amp;#39;s Public Key&amp;gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 2001:db8:1234:ffff::1:2&#x2F;128
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = &amp;lt;The Client&amp;#39;s Public Key&amp;gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 2001:db8:1234:ffff::1:3&#x2F;128
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is straightforward. &lt;code&gt;PublicKey&lt;&#x2F;code&gt; contains the client&#x27;s public key and &lt;code&gt;AllowedIPs&lt;&#x2F;code&gt; contains the IPv6 address we&#x27;re assigning to the client. Running &lt;code&gt;systemctl start wg-quick@wg-vpn.service&lt;&#x2F;code&gt; will bring the WireGuard interface up so clients can start connecting.&lt;&#x2F;p&gt;
&lt;p&gt;The configuration file for each client is simple:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 2001:db8:1234:ffff::1:1&#x2F;64
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = &amp;lt;The Client&amp;#39;s Private Key&amp;gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = [2001:db8:1234:9999::1]:51820
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = &amp;lt;Your Server&amp;#39;s Public Key&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;Address&lt;&#x2F;code&gt; is the globally routable IPv6 address our VPN server is assigning to the client. &lt;code&gt;PrivateKey&lt;&#x2F;code&gt; is the client&#x27;s private key. There&#x27;s similarly little to say about the &lt;code&gt;[Peer]&lt;&#x2F;code&gt; section, which contains connection information for the VPN server.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;AllowedIPs = ::&#x2F;0&lt;&#x2F;code&gt; tells the client to route all IPv6 traffic through the WireGuard interface. &lt;code&gt;Endpoint&lt;&#x2F;code&gt; contains the IPv6 address clients use to connect to the VPN server. Note the square brackets. Because IPv6 addresses use &#x27;:&#x27; as a separator and &#x27;:&#x27; is also used by convention to separate an IP address from a port number, the square brackets are used to disambiguate the &#x27;:&#x27; in the IPv6 address from the &#x27;:&#x27; differentiating the port number.&lt;&#x2F;p&gt;
&lt;p&gt;When the client connects to the VPN server, it will have the globally routable IPv6 address of &lt;code&gt;2001:db8:1234:ffff::1:1&lt;&#x2F;code&gt;. If you connect to a website that tests IPv6 connectivity such as &lt;a href=&quot;https:&#x2F;&#x2F;test-ipv6.run&#x2F;&quot;&gt;this IPv4 and IPv6 connectivity test&lt;&#x2F;a&gt;, it should show &lt;code&gt;2001:db8:1234:ffff::1:1&lt;&#x2F;code&gt; as your IPv6 address.&lt;&#x2F;p&gt;
&lt;p&gt;There you have it, a WireGuard VPN server that provides clients with globally routable IPv6 addresses.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
