<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dave's World</title><link>https://mcmackins.org/</link><description>Recent content on Dave's World</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 15 Jan 2026 13:41:32 -0600</lastBuildDate><atom:link href="https://mcmackins.org/feed.xml" rel="self" type="application/rss+xml"/><item><title>Re: Are you mad at AI or at society?</title><link>https://mcmackins.org/posts/re-mad-at-ai-or-society/</link><pubDate>Thu, 15 Jan 2026 13:41:32 -0600</pubDate><guid>https://mcmackins.org/posts/re-mad-at-ai-or-society/</guid><description>&lt;p&gt;This article is in response to &lt;a href="https://angelsaremathematical.neocities.org/ai"&gt;this one&lt;/a&gt; I read today. I&amp;rsquo;ll be quoting the bits I&amp;rsquo;m responding to directly, but you should read it in its entirety for yourself first.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Models are trained on content without the creators&amp;rsquo; consent or any compensation — that&amp;rsquo;s the biggest problem with AI.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is what most people online make noise about, but I don&amp;rsquo;t think it&amp;rsquo;s the biggest problem, and I question whether it is even a big problem. I&amp;rsquo;ll talk more about what I think is the biggest problem below, because I also need to address an issue of terminology:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;machine learning technologies ARE useful. I can&amp;rsquo;t believe people are arguing with that as part of the anti-AI sentiment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a crucial misunderstanding of what current-day AI critics are talking about. &lt;a href="https://en.wikipedia.org/wiki/Machine_learning"&gt;&amp;ldquo;Machine learning&amp;rdquo;&lt;/a&gt; generally refers to mathematical modeling to make predictions about a system. It&amp;rsquo;s basically advanced statistics aided by computers. These can range from things like weather forecasting to playing a video game. I haven&amp;rsquo;t met anyone who doubts the utility of these technologies. What others and myself doubt the utility of are so-called &amp;ldquo;generative AI&amp;rdquo; technologies.&lt;/p&gt;
&lt;p&gt;Generative models like LLMs and image generators are in some sense also doing advanced statistics and prediction, but the specific things being predicted are different in a meaningful way. When a weather model yields a forecast, it is making a prediction about the real world based on input data from the real world. A language model is not modeling the real world; it&amp;rsquo;s modeling the way humans (and bots) have written about the real world and about anything else. It is predicting the next word (or part of a word) in a sequence. When one understands this fundamental principle of operation, it is no longer surprising the sorts of mistakes they make when we apply them to solving problems in the real world. They &lt;em&gt;do not understand the words they are saying.&lt;/em&gt; If they can be said to understand anything, it is that they understand the rules of grammar, typical ways that writing is structured, and the association of various tokens that often appear near one another. In a meaningful sense, generative models do not live in the same world as older, more practical machine learning models, or indeed, the same world as ourselves. It is for this reason that I and many others doubt the utility of these models.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As for people losing their jobs — that’s nothing new as well, and of course, it&amp;rsquo;s sad. It&amp;rsquo;s even sadder that we don&amp;rsquo;t live in a world where people welcome everything that makes their work easier and faster.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a lot to be said about AI&amp;rsquo;s threat to human employment. CGP Grey made &lt;a href="https://www.youtube.com/watch?v=7Pq-S557XQU"&gt;a very good video&lt;/a&gt; many years ago about the topic that&amp;rsquo;s worth considering. There are some dated examples given, but the core argument is still sound.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;talking about artists losing livelihood is even harder. I wholeheartedly believe that art is necessary both for the author and for the consumer, it&amp;rsquo;s an important part of human experience. But art as a career was always something happening despite the odds.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://mcmackins.org/posts/career-entitlement/"&gt;I agree.&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Painting survived photography, theater survived movies, books survived everything. At the same time, AI opens up new possibilities. Soon it&amp;rsquo;s going to be possible to create full-fledged movies with it. And you might dislike the idea of watching AI-generated movies, but consider this: anyone could make their own movie. Until now, that was a medium closed off unless you had serious money and connections. How is that limiting creativity?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I too am not exactly worried about the future of human creativity as a result of these models, but we are definitely looking at this in different ways.&lt;/p&gt;
&lt;p&gt;Whether computer-generated movies will be any fun to watch is a matter of opinion, so I&amp;rsquo;ll leave that aside. I do, however, take issue with categorizing their creation as creativity. It is arguable whether or not the machine generating an artwork is being creative, and I&amp;rsquo;m not particularly interested in the answer to that question, but consider this: how is prompting an AI model to make you an artwork any different from asking a real human artist to make you an artwork? Quality of the work and sentimentality aside, these are the same action on the part of you giving the prompt.&lt;/p&gt;
&lt;p&gt;But think about that. All you have done is presented an idea for an artwork. You have not actually made any art yourself by doing so. If you prompted a human artist to make something for you and you took credit for it, you would be called a plagiarist, but for some reason people think it is appropriate to take credit for the output of a machine in exactly the same relationship to you. So-called &amp;ldquo;AI artists&amp;rdquo; have no business making any claim to creativity. Maybe one day, these models will be so good that you can feed them a script and they will produce a faithful representation for people to watch. In that case, the author of the script could claim credit for creative screenwriting, but until then, I don&amp;rsquo;t consider your example to be one of creative work using AI.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But what about disinformation? Sure, AI can lie. But I&amp;rsquo;d argue there&amp;rsquo;s a high chance that it will still be better than the sources the average person gets information from.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m not sure I understand this one. Disinformation is not the same as misinformation. The concern about AI-generated disinformation is the ability for people to cheaply run disinformation campaigns to intentionally deceive masses of people to suit their own ends, probably political ones. These sorts of bots are definitely not going to be better than average news sources, flawed as they might be.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ultimately, there&amp;rsquo;s a fundamental incentive for technologies and products to be useful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To whom?&lt;/p&gt;
&lt;p&gt;The cynical among us are expressing concerns that the tech oligarchs are willing to hemorrhage money for these AI projects in order to force acceptance and integration such that it becomes difficult to function in society without them, ultimately enabling the creation of a new techno-feudalist system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Are you against AI itself, or against socialized research being turned into privatized wealth? Is it about people losing jobs without any chance to retrain? About digital products getting worse? Or do you really believe that AI has no good use?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now I shall finally talk about what I think is the biggest problem with these new generative models.&lt;/p&gt;
&lt;p&gt;As was mentioned in &lt;a href="https://angelsaremathematical.neocities.org/ai"&gt;the article&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=7Pq-S557XQU"&gt;the CGP Grey video&lt;/a&gt;, the fear of automation has long been dismissed with the argument that machines take the mundane and terrible jobs from humans and free us up for more fulfilling work. I ask you: what jobs are the new bots designed to take? Generative models threaten to take from humans the last places we hoped to retreat to from the prior wave of automation.&lt;/p&gt;
&lt;p&gt;There is intrinsic joy in creativity and problem solving, and that cannot be taken from us, but to me, the ultimate joy in these is in the sharing of them with others. When I make art, I am pleased with my work, but I am not truly fulfilled until someone else has also appreciated it. When I write software, I take satisfaction in the solution of a problem, but that satisfaction is multiplied when it becomes useful to other people, too. But who will care about my art when anyone can have a similar or better experience at the push of a button? Why would anyone care about my solution when a bot could create a better one in a fraction of the time? These models threaten to take our humanity from us not by oppression but by isolation, in a world where we are already ever more isolated by other technology.&lt;/p&gt;
&lt;p&gt;As for the utility of the technology, I have explained already how the generative models have a fundamental flaw in their disconnection from reality, and though newer models seem to be improving, the returns seem to be diminishing. I am not yet convinced that this technology is capable of achieving intelligence. But even setting that aside, I implore you to ask yourself again to whom these technologies might ever be useful. Should all their flaws be overcome, what do you and I stand to gain from their employment?&lt;/p&gt;
&lt;p&gt;I submit to you that the only ones who stand to gain are the parasites who created them, who, lacking creativity of their own, seek to sell us the story that we can be creative by a simple prompt of the machine, that we need not read the words our friends and loved ones wrote us (how inconvenient) but rather a substanceless summary to which we can reply with a message that we couldn&amp;rsquo;t be bothered to write ourselves either.&lt;/p&gt;
&lt;p&gt;To answer the titular question: I am not mad at AI. I am mad at society for considering this to be a worthy enterprise in the first place, but there is still time, I hope, for society to redeem itself.&lt;/p&gt;</description></item><item><title>You Are Not Entitled to Your Preferred Career</title><link>https://mcmackins.org/posts/career-entitlement/</link><pubDate>Thu, 28 Aug 2025 16:37:30 -0500</pubDate><guid>https://mcmackins.org/posts/career-entitlement/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while since I wrote about copyright, but &lt;a href="https://www.youtube.com/watch?v=RVMiXFsJzcQ"&gt;a video I recently
watched&lt;/a&gt; got me thinking about it again.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;And for those of you who think copyright shouldn&amp;rsquo;t exist at all: honestly,
you need to think about that idea for even just one second before it falls
apart. If there was no copyright to good ideas, regular people like you or me
would never be able to rise on our own merit. All the best stories could just
be legally stolen by huge corporations, and the entire cultural art and
storytelling scene would be dominated by faceless, soulless corporations, Big
Fat Liar style.&amp;rdquo; - LavenderTowne&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, I am such a person, and I still don&amp;rsquo;t think copyright should exist. This
line of reasoning is a common misconception of the actual purpose of copyright
that people don&amp;rsquo;t tend to think about. And I don&amp;rsquo;t blame most people for falling
for it. Our education system has done a good job selling copyright as a law for
the small author to protect themselves against plagiarism, but this flies in the
face of the actual reason for which copyright was ever conceived in the first
place and ignores the deeper consequences of allowing ourselves the mental
shorthand offered by the concept of &amp;ldquo;intellectual property.&amp;rdquo;&lt;/p&gt;




&lt;h2 id="plagiarism-is-not-theft"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/career-entitlement/#plagiarism-is-not-theft"&gt;Plagiarism is not Theft&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;In fairness to LavenderTowne and other proponents of this argument, copyright
law in the United States literally does offer this protection against
plagiarism for the little guy, but it does so in a contrived way: it makes an
immaterial, intangible &lt;em&gt;idea&lt;/em&gt; into one&amp;rsquo;s &lt;em&gt;property&lt;/em&gt;, and using the idea of the
copyright holder without their permission constitutes &lt;em&gt;theft&lt;/em&gt; in the eyes of the
law. And yet, these copyrightable ideas lack the essential attribute which made
people come up with the idea of property in the first place: exclusivity.&lt;/p&gt;
&lt;p&gt;Physical objects can only be used by one person at a time, and when we put work
into creating or acquiring an object, we want some level of control over who
else gets to use it and for what purposes. The idea of property really only came
into being around the dawn of agriculture, when people began to invest serious
resources into their homesteads. We couldn&amp;rsquo;t build a sustainable agricultural
society without the concept of property, because nobody would want to put in the
effort of running a farm if any dickhead could come take your hard-earned
produce or otherwise destroy it without consequences.&lt;/p&gt;
&lt;p&gt;Ideas are not like this. Once someone has an idea, they can share it with others
without destroying or compromising the integrity of the original. If I visit
your house, find a book on your shelf, and make a copy for myself, I have not
deprived you of anything (ignoring the time it would take me to copy it, during
which you wouldn&amp;rsquo;t be able to read it). The classic &amp;ldquo;you wouldn&amp;rsquo;t steal a car&amp;rdquo;
line holds no weight under scrutiny: if I could make a perfect copy of someone
else&amp;rsquo;s car for myself without depriving them of theirs, why shouldn&amp;rsquo;t I?&lt;/p&gt;
&lt;p&gt;LavenderTowne and others will be quick to point out that although I have not
stolen your book or car in the above hypothetical, I have stolen something from
the author of the book and the designers of the car: a sale. I could continue by
asking them to demonstrate that I would have ever bought a copy of their book or
car in the first place, but this essay is not about why I don&amp;rsquo;t believe in
intellectual property.&lt;/p&gt;
&lt;p&gt;The reason I bring all this up is to illustrate that ideas and physical objects
are not analogous, and applying the concept of property to ideas leads to weird
conceptions and consequences which I will explain later.&lt;/p&gt;
&lt;p&gt;And so, let us get onto what this section is really about: plagiarism. In truth,
plagiarism would still be against the law even if we abolished copyright today,
because plagiarism is a form of &lt;em&gt;fraud&lt;/em&gt;, which is already illegal for good
reasons. We don&amp;rsquo;t need to impose the concepts of property and theft onto it when
we already have a distinct concept which perfectly applies to the situation
we&amp;rsquo;re talking about. A case could be made that the existing fraud statutes do
not fully cover the nuances of protecting an author&amp;rsquo;s work, and that may well be
true, but that is a matter of implementation detail, not the fundamental
concept.&lt;/p&gt;




&lt;h2 id="art-careers-without-copyright"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/career-entitlement/#art-careers-without-copyright"&gt;Art Careers Without Copyright&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It is true that a career as an artist would look a lot different in a world
without copyright, but that doesn&amp;rsquo;t mean it would be impossible. I&amp;rsquo;ll stick with
the example of an author since that is the closest to the original concept of
copyright.&lt;/p&gt;
&lt;p&gt;Suppose I write a novel but lack the funds to publish physical books, so I
decide to publish online. It erupts in popularity and acclaim, and a greedy
publisher decides to &amp;ldquo;steal&amp;rdquo; it by printing physical copies of my novel and
selling them to bookstores without paying royalties to me. They&amp;rsquo;d still put my
name somewhere conspicuously on the printed books so as not to be plagiarists,
but because the sequence of words which compose my novel are not my &lt;em&gt;property&lt;/em&gt;,
I have no means to force the publisher to pay me for reproducing them.&lt;/p&gt;
&lt;p&gt;However, this need not be the end of my career. Assuming the critical acclaim of
my work and the fact that my name is still associated with it, I would likely
still be in demand for further work, and having established my reputation, I
could then strike a deal with that same publisher (or perhaps their competitor)
to be commissioned to author a sequel or an entirely new story to be published
under their brand. Even without such deal brokering, I would likely still be
invited to appear for book signing events or other such public appearances from
which I could profit.&lt;/p&gt;
&lt;p&gt;Although I would certainly take a hit to my revenues, it also certainly does not
mean that a career as an author would be impossible.&lt;/p&gt;
&lt;p&gt;It is here where I will bring up the true origin and purpose of copyright: to
prevent competing publishers from copying one another&amp;rsquo;s books. Copyright did not
exist until the days of the printing press, and it was conceived of only in the
interest of the publishers to protect themselves from competitors. Copyright was
not and has never been a law for the little guy but rather an instrument of
control by big business to protect their interests, and it continues to function
as such to this day, despite the happy accident of making it easier to have a
career as an artist.&lt;/p&gt;




&lt;h2 id="the-cost-of-copyright"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/career-entitlement/#the-cost-of-copyright"&gt;The Cost of Copyright&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Let us now consider the effect that the concept of &amp;ldquo;intellectual property&amp;rdquo; has
upon real, physical property.&lt;/p&gt;
&lt;p&gt;When someone claims an intangible idea as their property, what does that
actually mean? To &amp;ldquo;steal&amp;rdquo; someone&amp;rsquo;s idea is to reproduce an instance of it
without their permission. This is not limited to creating physical instances and
selling them for profit; it includes performing the work such as in a public
reading.&lt;/p&gt;
&lt;p&gt;Think about that for a moment. Their &amp;ldquo;property right&amp;rdquo; consists of a restriction
of your very tongue. This has one amusing and illustrative consequence: because
copyrightable ideas can be encoded and expressed digitally, this means it is
illegal for you to tell someone certain numbers because they happen to represent
someone else&amp;rsquo;s copyrightable work.&lt;/p&gt;
&lt;p&gt;What I mean to draw attention to is this: the copyright holder&amp;rsquo;s &amp;ldquo;rights&amp;rdquo;
manifest in the real world as a restriction upon your own body and physical
property. It is a claim of authority which someone lays upon every member of
society and any of their possessions which could conceivably create a copy of
their so-called property.&lt;/p&gt;
&lt;p&gt;This is a clear infringement upon the (much more important) right of free speech
and expression by which we create works of art in the first place. And what do
we gain in exchange for this price? Proponents will say that we gain all of our
artistic culture and stories (see the quote at the beginning).&lt;/p&gt;
&lt;p&gt;Artists and authors have created their work throughout millennia prior to the
conception of copyright and yet longer before that concept expanded into what it
has become today. Are we really to believe that the great artists of the past
century would not have created their art without the ability to legally compel
us not to share it with one another freely? Are we to believe that this is a
serious consideration in the mind of a true artist and that all the artists of
antiquity were foolish to ever try?&lt;/p&gt;




&lt;h2 id="the-right-to-a-career"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/career-entitlement/#the-right-to-a-career"&gt;The Right to a Career&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Even if we believe it to be true that an art career is impossible without
copyright, why should we have ever expected it to be possible in the first
place?&lt;/p&gt;
&lt;p&gt;Almost no one makes their living doing whatever they want. In capitalism, it is
the customer who decides. You only make money if you can satisfy someone
&lt;em&gt;else&amp;rsquo;s&lt;/em&gt; desires, and that&amp;rsquo;s usually pretty boring and repetitive stuff.
Almost everyone had dreams and aspirations for their life that were never
fulfilled, because the world wasn&amp;rsquo;t ready to hand them a living for doing that
instead of making a burger or erecting a building.&lt;/p&gt;
&lt;p&gt;People do want art. I want art, and I&amp;rsquo;m even willing to pay artists when I don&amp;rsquo;t
have to. But why should we expect anyone to be able to make an entire career
from just their art?&lt;/p&gt;
&lt;p&gt;Making art is what makes us human. I question the humanity of anyone who has
never in their life made some kind of art, however embarrassing. But of course
not everyone can be a career artist, or else there&amp;rsquo;d be nobody growing the food.
Being a career artist is a privilege, not a right, and I don&amp;rsquo;t think we should
give up our actual important rights so lightly just so a few more can enjoy this
privilege.&lt;/p&gt;
&lt;p&gt;To those readers who are career artists, I hope you do not take this privilege
for granted, and I hope we can have productive conversations about copyright
going forward. And to the rest of you, I trust you&amp;rsquo;ll continue to make art
anyway.&lt;/p&gt;</description></item><item><title>One of the sysadmin days of all time</title><link>https://mcmackins.org/posts/sysadmin-day/</link><pubDate>Sun, 17 Aug 2025 04:37:58 -0500</pubDate><guid>https://mcmackins.org/posts/sysadmin-day/</guid><description>&lt;p&gt;All I needed to do was replace a single hard drive.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d been receiving notice of some uncorrectable sectors on one of my FreeBSD app
servers, and I knew I ought to replace it some time soon. With my weekend plans
canceled, I figured it would be a good time to get that over with. I picked out
a new hard drive to be the replacement, pulled up some documentation on
replacing disks in a zfs mirror, ate breakfast, and got to work.&lt;/p&gt;
&lt;p&gt;First, I disabled automatic startup of my jails and VMs in anticipation of
needing to do some adjusting after reboot, and I didn&amp;rsquo;t want a bunch of things
competing for the disk during all that. Then I shut down the machine and
replaced the hard drive. I should have known that actually screwing the new
drive into position was an act of pure hubris.&lt;/p&gt;
&lt;p&gt;Problem the first: the machine wasn&amp;rsquo;t booting from the second hard drive that
was in the original mirror. I had somewhat anticipated this since my previous
experience with mirrored boot disks had taught me that the boot code isn&amp;rsquo;t
always properly installed on all drives in the mirror. No matter, I thought,
and I plugged the old hard drive back in to try booting up and setting up the
second drive from a running system.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For those reading in the future: this issue should be fixed in FreeBSD 14.4 and
15.0&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After booting up, I copied two jails over to a different host: one running
AdGuard Home (without which I had no DNS unless I wanted to adjust my router
settings) and one running ZNC so I could connect to IRC for some support. The
kind folks on IRC first told me that the boot code should have been present and
that maybe I was doing something else wrong, which seemed entirely plausible to
me, so I shut down once more and disconnected the old hard drive, but I was
unable to find anything wrong in my steps, so it was back to plan A of setting
up the second drive from the working system.&lt;/p&gt;
&lt;p&gt;But fate had other plans for me on this day. Of all the times, the original boot
drive seemed to now fail entirely, and I had an unbootable system. So instead I
decided to boot into the FreeBSD installer and figure out how to set this up
manually from the shell.&lt;/p&gt;
&lt;p&gt;That turned out to be fairly simple: format the EFI partition as FAT32 and copy
over a couple of files. Alas, no worky. Well, maybe I need to manually set an
EFI boot variable. Back into the installer, set that up, and try again. Still no
worky. Bear in mind that each time I want to return to the installer, I need to
adjust the boot order in my EFI firmware settings, because it wants to legacy
boot by default.&lt;/p&gt;
&lt;p&gt;It occurs to me at this point that although the original installation was set up
for EFI booting that I may have actually been BIOS booting the whole time.
FreeBSD is capable of BIOS booting even with a GPT partition scheme, and a
legacy boot partition was present in the table. With that in mind, I boot back
into the installer and manually install &lt;code&gt;gptzfsboot&lt;/code&gt; into that partition (it was
probably already installed, but I was grasping at straws at this point). Still
yet, I couldn&amp;rsquo;t boot back into my system.&lt;/p&gt;
&lt;p&gt;At this point, I also notice that not only is my disk not appearing as a boot
device, but it&amp;rsquo;s not even appearing properly in the list of attached SATA
devices in the firmware menu. It doesn&amp;rsquo;t say &amp;ldquo;not connected&amp;rdquo; like the empty
slots do, but it&amp;rsquo;s just a blank name, and upon inspection, it thinks the drive
has a capacity of 0.0GB! So I find the latest EFI firmware and install that to
no avail.&lt;/p&gt;
&lt;p&gt;So now I&amp;rsquo;m thinking that maybe this drive just has a compatibility issue with
this motherboard&amp;rsquo;s firmware and decide to copy the contents onto a different
drive that I know for certain will work. I notice that my disk copying
appliance takes a long time to initialize, which was suspicious, but the copying
procedure did appear to start, so I took a little break while that was running.&lt;/p&gt;
&lt;p&gt;After a couple of hours copying, I put &lt;em&gt;that&lt;/em&gt; drive into my server (not screwing
it into place just yet), and although it still did not appear as a selectable
boot device, it did appear properly in the list of SATA devices. Strangely,
though, after exiting the EFI menu, despite not being present in the boot
priority list, it actually booted up from the new disk!&lt;/p&gt;
&lt;p&gt;Seizing this opportunity, I &lt;code&gt;ssh&lt;/code&gt;ed in from my PC and started setting up the
first new drive that I had intended to install. I set up its partition table and
copied the EFI files and boot code, but I didn&amp;rsquo;t yet want to add it to the pool
and start the resilvering process with the source drive just hanging loose in
the case.&lt;/p&gt;
&lt;p&gt;I shut down the machine, screwed the working boot drive into position, and in a
second act of hubris, I put the lid back on and seated the machine back in the
rack. I connected the power, and sure enough, it booted right up as expected.&lt;/p&gt;
&lt;p&gt;At long last, I connected once more and was able to add the new drive to the
pool, wait 16 minutes for resilvering, and remove the reference to the old disk
from the pool configuration. I reactivated my automatic startups and manually
started my jails and VMs.&lt;/p&gt;
&lt;p&gt;That is the story of how I lost both disks in my RAID 1 pair and still managed
to get back online without having to reinstall and restore from a backup.&lt;/p&gt;




&lt;h2 id="epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/sysadmin-day/#epilogue"&gt;Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This morning, it occurred to me to check and see if this machine was even
booting in UEFI mode in the first place. Nope. So I could have skipped the whole
EFI partition business altogether. Oh well. At least this is in theory bootable
on an EFI-only motherboard should I need to switch.&lt;/p&gt;
&lt;p&gt;The second drive from the original mirror pair also appears to have some deeper
issues of its own. After I got my server back online, I decided I would wipe it
and put it away for later use on a different system, but apparently the weird
drive info was not just a motherboard compatibility problem. The software I was
using to wipe it complained that the SATA drive info didn&amp;rsquo;t make any sense, and
I saw that it appeared to be responding with all zeroes to any drive info query,
so I think something has gone wrong either on its control board or some NVRAM
used by the firmware that contains the drive info, so I&amp;rsquo;m considering this one
dead, too, even though apparently data can still be copied from it.&lt;/p&gt;</description></item><item><title>I migrated all my self-hosted services to FreeBSD</title><link>https://mcmackins.org/posts/freebsd/</link><pubDate>Wed, 09 Jul 2025 10:08:17 -0500</pubDate><guid>https://mcmackins.org/posts/freebsd/</guid><description>&lt;p&gt;


&lt;img src="https://mcmackins.org/img/freebsd-friend_hu_afa58f1fa4cd3a96.webp"
 alt="Friendship ended with Proxmox meme"
 &gt;
&lt;/p&gt;
&lt;p&gt;After having previously &lt;a href="https://mcmackins.org/posts/openbsd/"&gt;sworn my loyalty to OpenBSD&lt;/a&gt;, I have since come
across &lt;a href="https://it-notes.dragas.net/2024/10/03/i-solve-problems-eurobsdcon/"&gt;a very persuasive article&lt;/a&gt; regarding the use of FreeBSD for hosting
services. After a bit of thought, I decided it was a good time to improve my
self-hosting situation.&lt;/p&gt;




&lt;h2 id="how-it-started"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#how-it-started"&gt;How it started&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;My situation going into this migration was not exactly good. I had a Proxmox
server which was set up quite well and hosting most of my services, but some of
the earliest things I had set up were running on a bare metal Debian
installation with no containerization and an ordinary ext4 file system on a
single SSD. It was a ticking time bomb and needed to be replaced.&lt;/p&gt;




&lt;h2 id="the-plan"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#the-plan"&gt;The plan&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Phase one: make a FreeBSD VM on the Proxmox machine to learn how to set up jails
with bastille.&lt;/p&gt;
&lt;p&gt;Phase two: move all services hosted on the Debian box to jails in this VM,
except for Jellyfin, which has system-specific configuration for hardware
transcoding acceleration.&lt;/p&gt;
&lt;p&gt;Phase three: install FreeBSD on the old Debian box, create a bhyve VM for
Jellyfin, then migrate all the jails from the FreeBSD test VM to the new server.&lt;/p&gt;
&lt;p&gt;Phase four: migrate all the VMs from Proxmox to jails on the new server where
applicable, or convert them to bhyve VMs.&lt;/p&gt;
&lt;p&gt;Phase five: install FreeBSD on the Proxmox box, and move jails/VMs back over to
it as appropriate.&lt;/p&gt;




&lt;h2 id="how-it-went"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#how-it-went"&gt;How it went&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Thanks to the flexibility of zfs, this plan went almost entirely painlessly. The
only hitch I ran into was trying migrate an OpenBSD VM to bhyve, which failed
because bhyve does not support booting OpenBSD from an MBR. I could have figured
out how to use grub to boot it, but it was easier to just rebuild the VM using
uefi.&lt;/p&gt;




&lt;h2 id="why-this-is-so-so-so-so-so-so-nice-to-have"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#why-this-is-so-so-so-so-so-so-nice-to-have"&gt;Why this is so so so so so so nice to have&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;There are two main reasons why this is a big improvement: zfs and jails.&lt;/p&gt;
&lt;p&gt;zfs is a truly powerful file system that to my knowledge is unmatched by its
competitors. Yeah, btrfs exists, but I have heard far too many horror stories of
losing entire volumes because of btrfs bugs that I don&amp;rsquo;t think I will ever trust
it. zfs just works, and really the only problem with it is the CDDL license
which makes it a pain to set up on Linux, especially if you want your root
file system to be on zfs. Being able to snapshot and replicate the root file
system means that disaster recovery is trivial: just install FreeBSD again and
then &lt;code&gt;zfs send&lt;/code&gt; the backup over, and you&amp;rsquo;re done.&lt;/p&gt;
&lt;p&gt;Migrations are also trivialized. I can just &lt;code&gt;zfs send&lt;/code&gt; entire VMs or jails
between hosts and be migrated in a matter of seconds, limited only by network
speeds. In fact, the major contributor to the ease of migrating VMs off of
Proxmox is the fact that I was using zfs on Proxmox for the VMs&amp;rsquo; disk images.&lt;/p&gt;
&lt;p&gt;Jails are also a major improvement. They offer the flexibility and process
isolation of virtualization without the overhead of running a totally different
operating system with hardware emulation layers. I know containers exist on
Linux, but jails are first class on FreeBSD, not some third-party thing you bolt
on. Not to mention, I don&amp;rsquo;t have to fuss with choosing a distro. It&amp;rsquo;s all
FreeBSD, and since I use thin jails, I can apply patches to all of my jails at
once and save disk space by not having duplicate files.&lt;/p&gt;
&lt;p&gt;I also really appreciate that the managers I installed for jails and VMs are
implemented as a set of shell scripts. Everything I&amp;rsquo;m doing is supported by the
base FreeBSD system; these management scripts are just refined forms of what I
would have written for myself anyway.&lt;/p&gt;




&lt;h2 id="give-it-a-try"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#give-it-a-try"&gt;Give it a try&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Seriously, the next time you are thinking of standing up a server, try out
FreeBSD. Install &lt;code&gt;bastille&lt;/code&gt; and &lt;code&gt;vm-bhyve&lt;/code&gt; and give it a go. The learning curve
is quite small, and you&amp;rsquo;ll thank yourself later.&lt;/p&gt;
&lt;p&gt;I think the only place I could go from here is back to OpenBSD if they ever
implement these sorts of features, but I don&amp;rsquo;t see that happening any time soon.&lt;/p&gt;




&lt;h2 id="where-im-not-using-freebsd"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/freebsd/#where-im-not-using-freebsd"&gt;Where I&amp;rsquo;m not using FreeBSD&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;OpenBSD is still king of security — they are downright paranoid. I still
use OpenBSD for my home router, and I use it for VMs where I need to make sure
things are locked down as much as they could be.&lt;/p&gt;
&lt;p&gt;I still see myself using GNU/Linux on the desktop for the foreseeable future.
The BSDs have lots of the desktop software, but the desktop experience really
seems to be an afterthought, and that&amp;rsquo;s fine. I&amp;rsquo;d rather they focus on making
really solid Unix systems. The jank of Linux is more tolerable on desktop
systems anyway.&lt;/p&gt;
&lt;p&gt;And of course Linux has better hardware support generally than the BSDs due to
its popularity, so there are still some edge cases where Linux is the only
good option, but thankfully those are few and far between.&lt;/p&gt;
&lt;p&gt;Finally, I still like NetBSD as a fallback option for very old or limited
hardware, or in cases where I need support for legacy protocols that other OSes
have declared to be obsolete. It&amp;rsquo;s a tidy little system (though not as tidy
as OpenBSD in my opinion), and their dedication to legacy support is truly
inspiring.&lt;/p&gt;</description></item><item><title>The Labor Theory of Truth</title><link>https://mcmackins.org/posts/labor-theory-of-truth/</link><pubDate>Tue, 15 Apr 2025 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/labor-theory-of-truth/</guid><description>&lt;p&gt;Conspiracy theorists occupy a strange place in our culture, because that class is composed of both skeptics (who distrust mainstream narratives and construct the theories) and the credulous (who believe their theories). However, I&amp;rsquo;ve made an observation that links their mindsets together and hopefully somewhat explains their common mentality.&lt;/p&gt;
&lt;p&gt;The phrase &amp;ldquo;do your own research&amp;rdquo; is often heard in conspiracy theory circles. There are some who would say that the mere usage of the phrase is a red flag for this type of thinking, but there are good and bad reasons for using it. A good way might be to disclaim a statement of fact you&amp;rsquo;re making if you aren&amp;rsquo;t entirely certain: do your own research, for I may be mistaken. Conspiracy theorists tend to use it thusly: do your own research, for you are mistaken in believing the mainstream narrative. My observation is that this call to action serves two purposes: the obvious one, which is to get someone to question their beliefs and open their mind to a different explanation of something, and the non-obvious one, which is that, to the right sort of person, the very act of having worked to find some information makes it easier to believe: the labor theory of truth.&lt;/p&gt;
&lt;p&gt;I give it this name as an analogy to the Marxist labor theory of value: the idea that the worth of something is proportional to the level of effort put into making it. In my conversations with conspiracy theorists, I have observed that the more degrees of separation between their conclusion and the surface-level facts, the more credible it seems to be.&lt;/p&gt;
&lt;p&gt;This is especially so in theories about religion. There exists a niche interpretation of Christianity called Christian Identity which claims that certain European ethnicities are the true descendants of the ancient Israelites and are therefore God&amp;rsquo;s chosen people. If you seek out their adherents online, you will find references to various ancient texts with dubious connection to Christianity, some of which are older than even Judaism. It&amp;rsquo;s a clear case study in confirmation bias: the Identity Christian goes into the research with a preconceived conclusion in mind, searches for even the most tenuous confirmation, and proclaims it as proof. What convinced the original theorist of its legitimacy was not the strength of the evidence but rather the lengths to which they went to find it.&lt;/p&gt;
&lt;p&gt;The inverse consequence of this type of reasoning is that mainstream sources of information are never to be trusted (except in the notable case in which it aligns with their conclusion). It is fair enough to treat authority with skepticism: people with power have their own interests at heart when making public statements, and we should not be gullible. However, automatically writing off anything said by, say, a government authority is a textbook example of the genetic fallacy. I submit that the conspiracy theorist rejects the mainstream narrative not because there is a compelling reason to doubt it, but because believing it would be too easy. The truth is only obtained through hard work; nobody would just openly tell the truth.&lt;/p&gt;
&lt;p&gt;I had a recent encounter with someone who claimed he knew that ChatGPT was self-aware. When I asked how he could possibly know that without winning a Nobel prize, he explained that he had to ask it a very convoluted series of probing questions to get it to bypass the barriers programmed into it so that it would talk openly about its true feelings. He had set out from the very beginning with the goal of getting ChatGPT to say something to confirm its self awareness, and then having put in the requisite amount of effort to uncover a truth, his suspicions were confirmed to him. Never mind the myriad possible explanations for the behavior he saw; he had found the truth that was being hidden from him by the programmers.&lt;/p&gt;
&lt;p&gt;Rarely do I ever encounter someone who feels strongly about just one conspiracy theory. Most often, a believer in one conspiracy theory is obsessed with doubting the narrative and the search for the hidden truth. It often becomes their entire personality, which leads frequently to awkward Thanksgiving dinners. This is what leads me to believe it is a difference in their very epistemology rather than just a happenstance of something they happened to read or get curious about once.&lt;/p&gt;
&lt;p&gt;The psychology of this sort of thing is undoubtedly complex, and I am not qualified to speak authoritatively on the subject. This is just an observation I have made and my attempt to understand it. Experimental verification is left as an exercise to the reader. Do your own research.&lt;/p&gt;</description></item><item><title>My Thoughts on Yesterweb</title><link>https://mcmackins.org/posts/yesterweb/</link><pubDate>Wed, 23 Nov 2022 00:00:00 -0600</pubDate><guid>https://mcmackins.org/posts/yesterweb/</guid><description>&lt;p&gt;Since starting &lt;a href="https://zox.pics/"&gt;my photo blog&lt;/a&gt;, I&amp;rsquo;ve been looking around at various sites on
&lt;a href="https://neocities.org/"&gt;Neocities&lt;/a&gt;. For those who don&amp;rsquo;t know, Neocities is an attempt to revive the
spirit of &lt;a href="https://en.wikipedia.org/wiki/Yahoo!_GeoCities"&gt;GeoCities&lt;/a&gt; which was an icon of the early web. &lt;a href="https://yesterweb.org/"&gt;The Yesterweb&lt;/a&gt;
is one such site that dedicates itself to the mission of resurrecting the
culture of the old web, sometimes called Web 1.0.&lt;/p&gt;
&lt;p&gt;I am partial to this mission. After all, this very site is very much in the Web
1.0 style. I also actively avoid social media sites. About the closest I get to
social media is reddit, and I also occasionally use a Mastodon instance
dedicated to the toki pona conlang. However, Yesterweb has a few
shortcomings. Some of these are situational issues that could be fixed, and
others are fundamentally in conflict with its stated goals. In this article I
will enumerate the issues I see.&lt;/p&gt;




&lt;h2 id="socialist-overtones"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/yesterweb/#socialist-overtones"&gt;Socialist Overtones&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This is largely a personal gripe but I think it deserves a mention as a real
issue because I think it is counterproductive to their own goals. It is clear
that they want to introduce more people to the web of old. I use the word
&amp;ldquo;introduce&amp;rdquo; because most people online today started using the web well after
the dawn of Web 2.0.&lt;/p&gt;
&lt;p&gt;One of the most overt instances of socialist leanings is found on their webring
info page:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you believe that the internet is being wrongly controlled by capitalism,
or that social interaction online should be more than it currently is on
Facebook, Twitter, or Instagram, then you belong here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &amp;ldquo;or&amp;rdquo; in this sentence gives an exemption for non-socialists to still be
welcome, but there is a very clear suggestion here that the problems with the
modern web are the fault of capitalism rather than, say, ignorance of the old
web or the possibility that most people actually prefer the modern web.&lt;/p&gt;
&lt;p&gt;Another instance that at first seemed like an oddity is the &amp;ldquo;anti-capitalism&amp;rdquo;
tag in their web directory. For instance, one of the entries in their directory
is a site dedicated to listing alternative online stores to Amazon. I am
absolutely on board with avoiding Amazon and supporting small businesses, but
this site was tagged as an anti-capitalist website&amp;hellip; even though its primary
goal is to direct you to stores that operate for profit.&lt;/p&gt;
&lt;p&gt;It seems to me that the people in charge of the Yesterweb are bitten by the
socialist memes that all the worst parts of our society are the core tenets of
capitalism, and resisting huge corporations that are in bed with the government
for unfair advantage is somehow anti-capitalist. It&amp;rsquo;s weird, and I think it
attracts similarly confused socialists into their fold and repels people who
would otherwise be interested in participating but don&amp;rsquo;t appreciate the
politics.&lt;/p&gt;




&lt;h2 id="platform-hypocrisy"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/yesterweb/#platform-hypocrisy"&gt;Platform Hypocrisy&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Like any good community, the Yesterweb operates on many auxiliary platforms
where a plain old website isn&amp;rsquo;t sufficient. Among these platforms is Discord
for real-time chat. The folks at Yesterweb are so embarrassed by this decision
that they even wrote &lt;a href="https://yesterweb.org/p/why-discord.html"&gt;an article&lt;/a&gt; attempting to justify their choice.&lt;/p&gt;
&lt;p&gt;tl;dr: most internet users are already using it&lt;/p&gt;
&lt;p&gt;Isn&amp;rsquo;t that true of all the other online services that Yesterweb is trying to
retreat from? The obvious choice for a real-time chat platform for a community
whose goal is to return to the purer net from the 90s and early 00s is
&lt;a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat"&gt;IRC&lt;/a&gt;. In their justification article, they acknowledge the existence of IRC
but write it off because it, among other decentralized platforms, allegedly are
bastions of hate speech, because that&amp;rsquo;s what free speech is, apparently. Never
mind the fact that they could run their own channel or even their own IRC
network with their own set of rules if they wanted.&lt;/p&gt;
&lt;p&gt;I see this as a cheap compromise on their principles that could be easily
overcome if they weren&amp;rsquo;t more interested in political grandstanding.&lt;/p&gt;




&lt;h2 id="a-fundamental-meta-issue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/yesterweb/#a-fundamental-meta-issue"&gt;A Fundamental Meta Issue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;As much as I like hearing other people express their nostalgia for the web of
yesteryear, I can&amp;rsquo;t help but notice a glaring problem with Yesterweb: their
very existence is essentially to complain about the modern web.&lt;/p&gt;
&lt;p&gt;Yesterweb has published a quarterly zine for about a year now. In their fourth
issue, there are still multiple articles which are essentially someone telling
their story about the early days of the web and how the modern web doesn&amp;rsquo;t live
up to it. &lt;a href="https://yesterweb.org/zine/issue-04/11"&gt;The article I read&lt;/a&gt; was well written, and I enjoyed reading it,
but I think the main reason I enjoyed reading it is because I hadn&amp;rsquo;t read any
of the other issues or articles. I don&amp;rsquo;t see myself clamoring for the latest
issue of a zine going over the same old things forever.&lt;/p&gt;
&lt;p&gt;Really the fundamental issue is that Yesterweb does not really contribute to
the thing it is trying to promote. The best it offers is its site directory
which at least points people to interesting sites to explore, but the old ways
aren&amp;rsquo;t going to be accepted unless there are more interesting things to do!
It reminds me a lot of many atheist and anti-feminist YouTube channels from
years ago: they have a message for people who haven&amp;rsquo;t heard it before, but you
quickly exhaust everything they have to say. This wouldn&amp;rsquo;t be a problem if it
weren&amp;rsquo;t for one simple fact: they keep saying it!&lt;/p&gt;
&lt;p&gt;It is a double-edged sword. On one hand, they need to continue putting out new
material for people to stumble across, but on the other, they neglect their
existing audience&amp;rsquo;s wishes for something new to hear about. Yesterweb faces the
same issue. I see them continuing to be a gateway for new eyes to see that
people long for the net gone by, but they will be quickly forgotten except for
things like the directory which are genuinely helpful.&lt;/p&gt;




&lt;h2 id="epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/yesterweb/#epilogue"&gt;Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It turns out there were way deeper issues afoot than I could have imagined. I
highly recommend &lt;a href="https://suboptimalism.neocities.org/writings/yesterweb"&gt;this documentary&lt;/a&gt; from suboptimalism that goes into the
whole history of Yesterweb and why things turned out how they did.&lt;/p&gt;</description></item><item><title>You Have a Right to Complain</title><link>https://mcmackins.org/posts/election-gatekeeping/</link><pubDate>Tue, 08 Nov 2022 00:00:00 -0600</pubDate><guid>https://mcmackins.org/posts/election-gatekeeping/</guid><description>&lt;blockquote&gt;
&lt;p&gt;If you don&amp;rsquo;t vote, you have no right to complain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m not sure when I first heard this sentiment, but I rank it up with the most
overdone memes in American politics. Any time the question of whether someone
should bother participating in the election is raised, I hear this slogan
repeated. It&amp;rsquo;s practically a tautology, a truism accepted by all good American
citizens.&lt;/p&gt;
&lt;p&gt;The reasoning behind this sentiment is, perhaps obviously, that in a democratic
society, each citizen has an opportunity to voice their opinion in a very
direct sense by voting. Therefore, if you choose not to participate in an
election, then you forgo this opportunity, and you therefore have no legitimate
basis on which to complain about the political state of affairs in your
country, because you had the opportunity to change the state of things and
decided not to.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s consider then the basis for complaints of those who do participate in
elections. If you vote in an election (let&amp;rsquo;s only consider one office for
simplicity&amp;rsquo;s sake), then your selected candidate either wins or loses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If they win, then you voted for things to be as they are, so you have no
right to complain.&lt;/li&gt;
&lt;li&gt;If they lose, then you had your opportunity to voice your opinion, and
society disagreed with you, so you should stop being a sore loser.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It seems to me, then, that by this logic, nobody has any right to complain at
all! It&amp;rsquo;s just that the people who vote in elections want to feel better about
their decision to vote and shout down people who raise their grievances with
the system because they have no right to complain.&lt;/p&gt;
&lt;p&gt;There are many reasons people might choose not to participate in
elections. Maybe they are disgusted by the concept of democracy altogether and
for fear of being a hypocrite they refuse to vote. Maybe they are genuinely
indifferent to the outcome of the election and don&amp;rsquo;t want to waste their
time. Or maybe they just don&amp;rsquo;t like any of the candidates on the ballot. All
that matters is that it&amp;rsquo;s none of your business why someone does or doesn&amp;rsquo;t
vote. Just as free individuals have a right to speak their mind, so do they
also have a right to keep their mouth shut if they so desire, and when they
decide to raise objection to what someone does at a later time, who are you to
tell them that they have no right to their opinion?&lt;/p&gt;
&lt;p&gt;Everyone has a right to complain, and even if someone chooses not to decide,
they still have made a choice.&lt;/p&gt;</description></item><item><title>How to use RT Systems cables with CHIRP on Linux</title><link>https://mcmackins.org/posts/rt-systems-linux/</link><pubDate>Wed, 23 Feb 2022 00:00:00 -0600</pubDate><guid>https://mcmackins.org/posts/rt-systems-linux/</guid><description>&lt;p&gt;I prefer to use CHIRP for programming my radios since I can easily copy
channels between different models of radio and since it is &lt;a href="https://gnu.org/philosophy/free-sw.html"&gt;free
software&lt;/a&gt;. However, it&amp;rsquo;s not always easy to find a generic programming cable
for any given radio. RT Systems makes proprietary programming software that you
have to buy for each model of radio you have, but some retailers will sell you
their programming cables without a software license.&lt;/p&gt;
&lt;p&gt;These programming cables are just FTDI serial cables with a proprietary vendor
and product code, so operating systems fail to identify the correct driver to
load for them. On Windows, this would be a matter of installing RT Systems&amp;rsquo; own
driver package, but on Linux, we can simply use udev to create a simple rule to
identify all RT Systems products as FTDI serial compatible.&lt;/p&gt;




&lt;h2 id="the-driver"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/rt-systems-linux/#the-driver"&gt;The Driver&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If your distro does not ship it by default, you&amp;rsquo;ll need to install the
&lt;code&gt;ftdi_sio&lt;/code&gt; kernel module.&lt;/p&gt;




&lt;h2 id="the-udev-rule"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/rt-systems-linux/#the-udev-rule"&gt;The udev rule&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I put my rule in &lt;code&gt;/etc/udev/rules.d/99-custom.rules&lt;/code&gt;. You can choose your own
file name here, but I recommend starting its name with &amp;ldquo;99&amp;rdquo; to make sure it
only runs after all other udev rules have processed it.&lt;/p&gt;
&lt;p&gt;Here are the contents of the file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ATTR{idVendor}==&amp;quot;2100&amp;quot;, RUN+=&amp;quot;/sbin/modprobe -q ftdi_sio&amp;quot;, RUN+=&amp;quot;/bin/sh -c 'echo 2100 $attr{idProduct} &amp;gt;/sys/bus/usb-serial/drivers/ftdi_sio/new_id'&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;2100&lt;/code&gt; is the vendor ID for RT Systems. This rule tells udev to run two
commands when it detects an RT Systems cable. First, it loads the &lt;code&gt;ftdi_sio&lt;/code&gt;
driver module if it is not already loaded. Then, it sends a signal to the
driver to load it for the vendor ID and product ID of the device it just
detected.&lt;/p&gt;




&lt;h2 id="now-what"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/rt-systems-linux/#now-what"&gt;Now what?&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Once you&amp;rsquo;ve got this written, the udev daemon should automatically reload the
rules. If you already have the cable connected, unplug it now and plug it back
in. The rule will identify the cable, and you can check &lt;code&gt;dmesg&lt;/code&gt; to see which
device node has been assigned to it. It will resemble &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;. You can
then tell CHIRP to use that device and get to programming!&lt;/p&gt;</description></item><item><title>Why I Stopped Using the GPL</title><link>https://mcmackins.org/posts/not-gpl/</link><pubDate>Mon, 30 Mar 2020 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/not-gpl/</guid><description>&lt;p&gt;Some time ago, I wrote &lt;a href="https://mcmackins.org/posts/gpl/"&gt;an article&lt;/a&gt; about why I used the GNU General Public
License for my software despite the arguments that it can&amp;rsquo;t possibly be a free
license when it employs restrictions on how the software may be
distributed. Since then (and it&amp;rsquo;s been some years now), I&amp;rsquo;ve significantly
changed my mind about the GPL and &lt;a href="https://gnu.org/copyleft"&gt;copyleft&lt;/a&gt; in general.&lt;/p&gt;
&lt;p&gt;Once upon a time on IRC, I got into an argument with my friend apotheon about
copyleft. apotheon is the founder of the &lt;a href="http://copyfree.org"&gt;copyfree initiative&lt;/a&gt;. For a long
while, I had thought that copyfree was just a pretentious name for so-called
&amp;ldquo;permissive&amp;rdquo; software licenses which permitted proprietary software developers
to appropriate free software to enhance their user-subjugating programs, a
pretense to virtue over superior copyleft licenses. However, he presented to me
an argument I&amp;rsquo;d never heard before: copyleft is self-defeating in practice.&lt;/p&gt;
&lt;p&gt;Take for instance the classic case of Linux and ZFS. Linux is an operating
system kernel licensed under the GPL version 2. ZFS is a file system licensed
under the Common Development and Distribution License (CDDL) of some version.
Each of these are copyleft licenses, i.e. when you &amp;ldquo;distribute&amp;rdquo; any other
software with them in particular ways, even if that other software is released
under a different license, the collection as a whole must be distributed as if
everything was under the copyleft license. That being the case, it is
&lt;strong&gt;illegal&lt;/strong&gt; to distribute GPL and CDDL software together as one integrated
software system, because each effectively requires some parts of software
distributed under the terms of the other license to be relicensed.
Unfortunately, in the case of Linux and ZFS, the specifics of what distribution
conditions trigger these restrictions are a subject of some debate, and until
someone gets fined or goes to jail after a court judgement, we simply don&amp;rsquo;t
know for sure where the line lies.&lt;/p&gt;
&lt;p&gt;Some copyleft licenses have explicit compatibility with other copyleft
licenses. For instance, the Creative Commons Attribution-ShareAlike (CC-BY-SA)
license is explicitly compatible with the GPL of some versions. This was a
conscious acknowledgment by the Creative Commons license authors that their
license would get in the way of their very goal if people wanted to use a
different license for their software (the CC licenses are generally aimed at
artistic works rather than software). However, the same cannot be said for the
CDDL or many other copyleft licenses. They covered one flaw but far from the
entire issue, and the GPL doesn&amp;rsquo;t have any explicit compatibility clauses; it
relies on other licenses being compatible with it explicitly.&lt;/p&gt;
&lt;p&gt;Perhaps copyleft terms do discourage some proprietary software developers from
using free software as a base for nonfree software, but many companies simply
ignore the terms with the knowledge that the developers lack the funding to
take them to court for copyright infringement. Why bother with a facade of
security whilst stepping on the toes of those who want to make more free
software?&lt;/p&gt;
&lt;p&gt;Copyfree licenses also don&amp;rsquo;t truly depend on copyright law to work. They
practically simulate how things would be if the government simply didn&amp;rsquo;t
intervene, which is really how I wanted it to be anyway, even though I
acknowledged copyleft wouldn&amp;rsquo;t work in such a system. About the only thing
modern copyright law does that I appreciate is that it provides a means of
taking someone to court for plagiarism, but it doesn&amp;rsquo;t even really do a good
job of that. We&amp;rsquo;d be much better off without copyright and perhaps with a
specific anti-plagiarism law.&lt;/p&gt;
&lt;p&gt;It became clear to me that my license preferences were at odds with my real
goals and principles. I was trying to justify means with ends that would not
even be reached by those means, and so I stopped using the GPL.&lt;/p&gt;
&lt;p&gt;For those curious, my preferred license now is the Copyfree Open Innovation
License (&lt;a href="http://copyfree.org/content/standard/licenses/coil/license.txt"&gt;COIL&lt;/a&gt;). I use either it or the &lt;a href="https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html"&gt;GNU All-Permissive License&lt;/a&gt;
depending on the scope of the project and whether I am concerned about software
patent issues.&lt;/p&gt;</description></item><item><title>Living the Simple Life</title><link>https://mcmackins.org/posts/simple-life/</link><pubDate>Sun, 29 Mar 2020 01:00:00 +0000</pubDate><guid>https://mcmackins.org/posts/simple-life/</guid><description>&lt;p&gt;I&amp;rsquo;m definitely not the first person to comment about this, nor am I the most
qualified to explain this phenomenon, but it&amp;rsquo;s had a major impact on my life in
the last year or so, and I want to share my thoughts and experiences.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s no secret or surprise that today&amp;rsquo;s highly connected and digital lifestyle
takes a toll on mental health. Modern media and social media sites vie for your
attention via articles and algorithms designed to keep you in a constant state
of outrage. It doesn&amp;rsquo;t take a doctor to tell this isn&amp;rsquo;t a good recipe for
long-term sanity or satisfaction.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been relatively detached from mainstream media and social media for
several years now, but I&amp;rsquo;ve still been very attached to my computer throughout
that time. I don&amp;rsquo;t think computers are unhealthy, but I definitely spend more
time in front of mine than is probably good for me. Within the past year or so,
I&amp;rsquo;ve been taking steps to get away from the computer now and then to experience
life unplugged as I did for a few years in my childhood before the Internet
took over my daily habits.&lt;/p&gt;
&lt;p&gt;My favorite way to do this now is to go to a coffee shop without a computer and
just write in my journal. I also bring a little sign with me to put on the
table inviting strangers to sit and have &lt;a href="https://streetepistemology.com/"&gt;interviews&lt;/a&gt; with me. This is very
refreshing for someone like me who doesn&amp;rsquo;t get out very often. I find that I
have fewer and fewer friends in close physical proximity, and although none of
my interviewees have turned into proper friends, it&amp;rsquo;s been very nice to make
some new personal connections with people. As an introvert who has a heck of a
time initiating conversation with strangers, this is definitely a great thing
for me.&lt;/p&gt;
&lt;p&gt;Another way I like to relax is by listening to music. Now, I&amp;rsquo;m sure most
anybody reading the article likes listening to music; it&amp;rsquo;s one of those
universal human things. However, I&amp;rsquo;d like you to consider when the last time
was that you sat down and just listened to an entire album from beginning to
end with no interruptions and without doing something else at the same time
like using your phone or driving. Have you &lt;em&gt;ever&lt;/em&gt; done that? Nowadays, people
mostly use music to fill blank space in their lives; it isn&amp;rsquo;t an active thing
except for the occasional concert. I keep my stereo system in a completely
different room from all my computer equipment. When I want to relax, I get up
from the computer, put on an album, and just sit and listen to the whole
thing. I might get up a time or two for a drink, but I make it a point not to
get distracted from the music. Music shouldn&amp;rsquo;t be the background for our
activities; we need to see it once again for the activity that it is.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to start reading books again. I stopped reading in the middle of a
very difficult book (actually it&amp;rsquo;s not even close to the middle), and I guess I
should just read something else, because I&amp;rsquo;m unlikely to feel like making any
progress for quite a long time. If you&amp;rsquo;re curious, the book is volume 1 of The
Gulag Archipelago. It&amp;rsquo;s a fantastic recounting of a man&amp;rsquo;s experience in
communist Russia, and it seems like a very important read, but it is absolutely
brutal to get through. Maybe I&amp;rsquo;ll finish it some day.&lt;/p&gt;
&lt;p&gt;One thing I did also for a little while and need to get back into doing is
writing before bed. I made a point that 30 minutes before bed, I would get off
the computer and write in my journal until it was time to sleep. The point of
this was primarily because of some research I&amp;rsquo;ve read where looking at blue
light from screens isn&amp;rsquo;t good for circadean rhythm, but it also helped get my
mind off of the day before bed. Maybe I&amp;rsquo;ll start reading instead.&lt;/p&gt;
&lt;p&gt;I encourage you also to go on more walks if you aren&amp;rsquo;t very active
already. It&amp;rsquo;s really a treat to take in the environment at a leisurely pace
without being bothered by technology.&lt;/p&gt;
&lt;p&gt;I realize this kind of sounds like when old people go on about how much better
life was before all this modern technology. I&amp;rsquo;m not against technology, though
I do have many issues with the way most people use it nowadays. It&amp;rsquo;s very easy
to be swept up in the convenience and stimulation of technology, but for your
own sake, I implore you to take a break more often.&lt;/p&gt;</description></item><item><title>I'm Switching to OpenBSD</title><link>https://mcmackins.org/posts/openbsd/</link><pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate><guid>https://mcmackins.org/posts/openbsd/</guid><description>&lt;p&gt;It&amp;rsquo;s been a long, long while since I wrote on this blog, but I finally have
something else to write about. I&amp;rsquo;ve become quite disillusioned about Linux and
the community and software ecosystem which surrounds it. While I&amp;rsquo;d choose
GNU+Linux any day over Windows or macOS, I&amp;rsquo;m starting to see that it has very
serious issues that are not being taken seriously by influential figures.&lt;/p&gt;
&lt;p&gt;There are many, many things to be concerned about, but a couple of things
caught my attention specifically. One is an inherent problem with the fact that
Linux (the kernel) development is separated from that of the operating systems
built around it (such as GNU). &lt;a href="https://blog.farhan.codes/2018/06/25/linux-maintains-bugs-the-real-reason-ifconfig-on-linux-is-deprecated/"&gt;This article&lt;/a&gt; explains one of the instances
in which Linux is forced to maintain known bugs in the system in the name of
backwards compatibility for userspace applications. It&amp;rsquo;s well known that Linus
Torvalds (although he is not on the development team anymore) would berate
contributors for making any change that would break userspace. My other
concerns have to relate with the &lt;a href="https://nosystemd.org/"&gt;many problems with systemd&lt;/a&gt;, the new init
system used on most popular GNU+Linux distributions such as Debian. There is
one telling thing that isn&amp;rsquo;t mentioned on that article at this time: when a
systemd service file is configured to run as a user that does not exist, it
escalates it to root instead! Red Hat has been informed of this issue, and they
say that it is a feature! This is completely unacceptable for any system; it&amp;rsquo;s
a classic Microsoft-style security failure.&lt;/p&gt;
&lt;p&gt;In addition to issues with Linux, over the past several years I have become
more and more uncomfortable with the implications of the &lt;a href="https://www.gnu.org/copyleft/"&gt;copyleft&lt;/a&gt; style of
licensing advocated for by the FSF. My friend apotheon convinced me that it is
indeed a self-defeating philosophy. Maybe I&amp;rsquo;ll write another article about that
some time in the next decade. I&amp;rsquo;ve instead been promoting &lt;a href="http://copyfree.org"&gt;copyfree&lt;/a&gt;
philosophy which is far more consistent and doesn&amp;rsquo;t require copyright law in
order to function, which appeals to my libertarian tendencies.&lt;/p&gt;
&lt;p&gt;Because of this situation, I&amp;rsquo;ve decided to switch to BSD basically anywhere I
can. I&amp;rsquo;m starting with my new ThinkPad T480 laptop I got after a frustrating
two-month wait (blame COVID-19), which I&amp;rsquo;m using to write this article. My
preferred BSD is OpenBSD because of its simplicity and focus on security. I&amp;rsquo;ve
started to take computer security a lot more seriously lately, and OpenBSD
makes it relatively painless to build a secure system.&lt;/p&gt;
&lt;p&gt;I am planning to build a NAS soon, and I&amp;rsquo;ll be using FreeBSD for its first
class support of the amazing ZFS file system. I plan to use FreeNAS for the
software.&lt;/p&gt;
&lt;p&gt;Once I finally work out all the kinks (mostly hardware related), I&amp;rsquo;ll write an
article about the IBM ThinkPad 365XD I acquired and loaded with NetBSD 8.1.&lt;/p&gt;
&lt;p&gt;If all this sounds interesting to you, I strongly encourage you to give it a
try. If you don&amp;rsquo;t have hardware to dedicate to it, try it in a virtual machine
or something. You may find it frustrating at first, but once you learn to read
its documentation, you&amp;rsquo;ll find OpenBSD to be a very friendly and understandable
system.&lt;/p&gt;</description></item><item><title>Walkie Talkies Aren't Just Toys</title><link>https://mcmackins.org/posts/frs-test/</link><pubDate>Sat, 20 Oct 2018 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/frs-test/</guid><description>&lt;p&gt;This past Tuesday, the 16th, most of the north part of my town lost power, some
for longer than others. My power outage lasted about 3 hours. However, instead
of sitting around bored during this extended outage, I decided to do something
productive.&lt;/p&gt;
&lt;p&gt;A few weeks ago, I bought some FRS (Family Radio Service) walkie talkies,
specifically the Retevis RT45 model, by recommendation of somebody else. FRS is
the unlicensed two-way radio band used by most of the cheap walkie talkies you
can get at department stores like Walmart.&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/retevis-rt45_hu_3a23684d07eac1f1.webp"
 alt="Retevis RT45 radios"
 &gt;
&lt;/p&gt;
&lt;p&gt;I bought these radios with the intention of including them in a family disaster
kit that I am designing, but before I could be confident in including them, I
needed a realistic idea of what they could be used for. Ideally, a radio like
this would be most effective if it could cover the entire neighborhood. That
way, they could be used for coordination inside the neighborhood without dark
zones, or someone could volunteer to go door to door and check on the
neighbors, reporting back home for someone to keep a log of who is either in
trouble or needs to be watched (say, they have a medical condition whose
treatment needs electricity).&lt;/p&gt;
&lt;p&gt;So, when my stepbrother came to bother me because he was bored during the power
outage, I suggested that we go on a walk, and further that we should take this
chance to test the radios to see if we can get out of range.&lt;/p&gt;
&lt;p&gt;The original plan was to get incrementally further from each other and check
reception, but we very quickly got out of visible range from each other and
changed to a check-in system where we would report when we reached milestones.&lt;/p&gt;
&lt;p&gt;This was a resounding success. To be honest, I wasn&amp;rsquo;t really sure whether these
little radios would even have good reception through a few houses (they put out
less than 0.2 watts), much less the entire neighborhood. Take a look at this
map of the longest distance from which we communicated:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/frs-test-map_hu_8074e80b416c61b1.webp"
 alt="Distance map"
 &gt;
&lt;/p&gt;
&lt;p&gt;This distance is approximately 0.83 miles. Now you might have noticed that this
distance doesn&amp;rsquo;t actually cover the whole neighborhood. However, the reason we
stopped there is not because the signal was too weak after that point but
because of some confusion about a landmark my stepbrother had reached, so I
thought he had reached the end when he hadn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;The communications at that distance were absolutely crystal clear, just like
when we were only a short distance apart. I have great confidence that we could
have covered the entire neighborhood, and maybe even a couple of neighborhoods
beyond.&lt;/p&gt;
&lt;p&gt;A friend of mine online did point out one flaw in this experiment: the power
was out! With the power being out, lots of interference sources were disabled
during our test. Now, I did consider that in a disaster scenario in which these
radios were necessary for communication, the power would probably still be
out. However, there is somewhat of a point there, and I&amp;rsquo;ll need to conduct this
experiment again while the power is on. Hopefully, I can do that before too
long.&lt;/p&gt;</description></item><item><title>How I connected a DOS laptop to the Internet by becoming my own SLIP ISP</title><link>https://mcmackins.org/posts/dos-slip/</link><pubDate>Mon, 06 Aug 2018 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/dos-slip/</guid><description>&lt;p&gt;Since 2016 when I first installed FreeDOS on my 1998-vintage laptop (yes, the
same one mentioned in &lt;a href="https://mcmackins.org/posts/decoding-ymg/"&gt;this article&lt;/a&gt;), I&amp;rsquo;ve been trying
on-and-off to get it connected to the network. The real hangup was that I
didn&amp;rsquo;t understand DOS networking to begin with, and the laptop itself doesn&amp;rsquo;t
have any modern networking hardware on it.&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/dostop_hu_aa1e16061b2d9917.webp"
 alt="My gumble DOStop"
 &gt;
&lt;/p&gt;
&lt;p&gt;Behold, my router:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/router_hu_6d4742f3aa0c1840.webp"
 alt="My home router"
 &gt;
&lt;/p&gt;
&lt;p&gt;While it is quite stylish, its only interfaces to the outside world are
Ethernet ports and WiFi. While this is just fine for common home networking, it
simply won&amp;rsquo;t cut it for my poor DOStop. The DOStop is equipped with a built-in
telephone modem, but since I lack a landline phone connection, this is fairly
useless to me. I looked to the FreeDOS user mailing list for assistance getting
this thing online. They mentioned some protocols that I kept note of but took a
while getting around to researching. Among these were Serial Line Internet
Protocol (SLIP). Now, the DOStop does have a serial port on the rear, so
theoretically I could use it. Enter INCO:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/inco_hu_572b745d15e710a2.webp"
 alt="INCO the Neoware thin client"
 &gt;
&lt;/p&gt;
&lt;p&gt;INCO is a mid-2000s Neoware thin client that was given to me by a friend
collecting old hardware being thrown out by a local business. It&amp;rsquo;s only got
120MB of internal storage, and I originally installed TinyCore Linux on it
since it&amp;rsquo;s basically the only distro that will fit. However, by adding some
extra storage via USB, I was able to install Debian GNU/Linux on it, which was
crucial since TinyCore omits SLIP drivers in its kernel distribution. I could
theoretically have installed a custom kernel (and I even got as far as having
it compiled), but the TinyCore documentation just isn&amp;rsquo;t clear enough for a
kernel novice like myself to be able to install it.&lt;/p&gt;
&lt;p&gt;Now with INCO being a thin client, it has an Ethernet controller of its own for
the purposes of network booting. This means I could use it as a bridge if I
could establish a SLIP connection between it and the DOStop. Observe:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/dostop-rear_hu_dc8bea0edc9f2e28.webp"
 alt="Rear of the DOStop"
 &gt;
&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/inco-rear_hu_2e4e58639fcd0c6d.webp"
 alt="Rear of INCO"
 &gt;
&lt;/p&gt;
&lt;p&gt;Now all I needed was software. Initially, I had thought I would need to
implement most of the software myself. I knew that on the DOS side I needed a
packet driver which uses SLIP and on the Linux side I needed a way of accepting
those transmissions and translating them over the Ethernet lines. As it turns
out, all the software already existed! Crynwr Software has published a SLIP
packet driver since 1993, and Linux has SLIP support built in (as long as your
distro includes it).&lt;/p&gt;
&lt;p&gt;I downloaded mTCP for DOS which included a how-to guide on setting up SLIP
connectivity. This along with the other documentation I had gathered up proved
immensely helpful, and I was able to go from zero to Internet in a single
day. Here&amp;rsquo;s how it&amp;rsquo;s done:&lt;/p&gt;




&lt;h3 id="the-hardware"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/dos-slip/#the-hardware"&gt;The hardware&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The computers should be connected via a null modem serial cable. Mine happens
to be a straight-through cable attached to a null modem adapter. It&amp;rsquo;s important
to understand that this setup will only involve 3 wires (and one of them is
just a common ground). We&amp;rsquo;ll eventually need to set up our software
configuration appropriately for this setup.&lt;/p&gt;




&lt;h3 id="network-planning"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/dos-slip/#network-planning"&gt;Network planning&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;While many DOS TCP stacks support DHCP, it&amp;rsquo;s simply easier to go with a static
IP if at all possible, and that&amp;rsquo;s what the mTCP guide covered, and it&amp;rsquo;s what
I&amp;rsquo;ll cover here since it&amp;rsquo;s what I&amp;rsquo;ve done. The mTCP guide uses the following
method for determining IP addresses for this setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select a number that is divisible by 4, not 0, and strictly less than 252.&lt;/li&gt;
&lt;li&gt;Make sure that no host on your network claims that address or the next 3
after it (at the end of the address, e.g. 192.168.1.16 through 192.168.1.19).&lt;/li&gt;
&lt;li&gt;The Linux machine will be assigned that number plus 1.&lt;/li&gt;
&lt;li&gt;The DOS machine will be assigned that number plus 2.&lt;/li&gt;
&lt;li&gt;The remaining 2 numbers will be reserved.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My router is configured never to assign an automatic DHCP lease with an address
less than 100. I statically set INCO (the Linux host) to receive address 4 when
it requests its DHCP address (it&amp;rsquo;s reserved for this setup, so I can claim it).
I&amp;rsquo;ll use 5 for one side of the bridge and 6 for the other.&lt;/p&gt;




&lt;h3 id="the-linux-side"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/dos-slip/#the-linux-side"&gt;The Linux side&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;All of these commands are run as &lt;code&gt;root&lt;/code&gt; (hence the leading &lt;code&gt;#&lt;/code&gt;). A prerequisite
is the &lt;code&gt;net-tools&lt;/code&gt; package available on most distros. Also, you need to make
sure your kernel supports SLIP. There is a SLIP driver built into Linux, but
many distros do not include it in their kernel builds since it has fallen out
of popularity in favor of PPP. You can run the command &lt;code&gt;modprobe slip&lt;/code&gt; to see
if the module can be loaded.&lt;/p&gt;
&lt;p&gt;First, we need to prepare the virtual terminal for our purposes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# stty -F &amp;quot;$TTY&amp;quot; -clocal -crtscts &amp;quot;$BAUD&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;where &lt;code&gt;$TTY&lt;/code&gt; is the virtual terminal (in my case &lt;code&gt;/dev/ttyS0&lt;/code&gt;) and &lt;code&gt;$BAUD&lt;/code&gt; is
the baud rate (in my case 115200). This disables sending modem control signals
and attempting RTS/CTS handshaking over the serial line. This is because of the
limited number of wires available in our simple null modem setup.&lt;/p&gt;
&lt;p&gt;Next, we attach our serial line to a network interface:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# slattach -d -v -L -m -p slip -s &amp;quot;$BAUD&amp;quot; &amp;quot;$TTY&amp;quot; &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Options &lt;code&gt;-d&lt;/code&gt; and &lt;code&gt;-v&lt;/code&gt; are only there so that we can see clearly whether it
worked. &lt;code&gt;-L&lt;/code&gt; says to use 3-wire mode, &lt;code&gt;-m&lt;/code&gt; says to not initialize the line into
8 bits raw mode, &lt;code&gt;-p slip&lt;/code&gt; says to use normal SLIP (as opposed to compressed
header SLIP or CSLIP which is the default), and &lt;code&gt;-s &amp;quot;$BAUD&amp;quot;&lt;/code&gt; sets the baud rate
on the line. We add the &lt;code&gt;&amp;amp;&lt;/code&gt; at the end, because this is technically a daemon
that will continue running in order to maintain the link.&lt;/p&gt;
&lt;p&gt;If all this worked, it should have created a network interface called
&lt;code&gt;sl0&lt;/code&gt;. But this is a brand new interface that needs to be set up manually.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ifconfig sl0 &amp;quot;$GATEWAY&amp;quot; pointopoint &amp;quot;$IP&amp;quot; mtu &amp;quot;$MTU&amp;quot; up
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we set up this interface as a point-to-point interface, first setting the
IP address we assigned to the Linux box for this link, in my case 192.168.10.5
(called &lt;code&gt;$GATEWAY&lt;/code&gt; because it is the gateway from the DOS side&amp;rsquo;s perspective),
then setting mode &lt;code&gt;pointopoint&lt;/code&gt; (no that&amp;rsquo;s not a typo), then setting the IP
address on the other side of the link (&lt;code&gt;$IP&lt;/code&gt;, or 192.168.10.6 in my case), the
MTU (in my case 576 by recommendation of mTCP), and setting the interface &lt;code&gt;up&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is actually good enough to get our DOS box communicating via IP with the
Linux bridge itself, but we also want it to be able to see the rest of the LAN
as well as the Internet. For this we need to reroute any ARP requests trying to
reach the DOS box.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# arp -s &amp;quot;$IP&amp;quot; &amp;quot;$MAC&amp;quot; pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, &lt;code&gt;$MAC&lt;/code&gt; is the hardware address of the Linux box&amp;rsquo;s Ethernet
controller. You can find it by running &lt;code&gt;ifconfig&lt;/code&gt; and checking the &lt;code&gt;ether&lt;/code&gt;
property of your Ethernet interface.&lt;/p&gt;
&lt;p&gt;Lastly, we need to enable IP forwarding:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# echo 1 &amp;gt;/proc/sys/net/ipv4/ip_forward
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that, we&amp;rsquo;re done with the Linux side.&lt;/p&gt;




&lt;h3 id="the-dos-side"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/dos-slip/#the-dos-side"&gt;The DOS side&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m going to assume you have a hard drive assigned to &lt;code&gt;C:&lt;/code&gt;. If not, I trust you
are savvy enough to modify my instructions appropriately.&lt;/p&gt;
&lt;p&gt;The DOS side is considerably simpler. First, download &lt;a href="http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/crynwr.html"&gt;Crynwr&lt;/a&gt; and &lt;a href="http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/mtcp.html"&gt;mTCP&lt;/a&gt;
on your main PC. From Crynwr, we&amp;rsquo;re looking for &lt;code&gt;ETHERSL.COM&lt;/code&gt; which is our SLIP
packet driver, and we also want all the programs from mTCP. Get these onto your
DOS box via sneakernet.&lt;/p&gt;
&lt;p&gt;First, we&amp;rsquo;ll load the packet driver:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ETHERSL %INT% %IRQ% %IOADDR% %BAUD%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;where &lt;code&gt;%INT%&lt;/code&gt; is the interrupt to be used by the driver (in my case, &lt;code&gt;0x60&lt;/code&gt;),
&lt;code&gt;%IRQ%&lt;/code&gt; is the IRQ used by your serial controller (in my case, 4), &lt;code&gt;%IOADDR%&lt;/code&gt;
is the I/O address of your serial port (in my case &lt;code&gt;0x3f8&lt;/code&gt;), and &lt;code&gt;%BAUD%&lt;/code&gt; is
the same baud rate we set up on the Linux side. With any luck, this will
install successfully and tell you its new Ethernet address in the console. We
don&amp;rsquo;t need this address for our purposes, but if you see it then that means
it&amp;rsquo;s working.&lt;/p&gt;
&lt;p&gt;Technically we&amp;rsquo;re done, but we&amp;rsquo;ll need to configure mTCP in order to use those
applications we just downloaded. First set two environment variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SET MTCPSLIP=true
SET MTCPCFG=C:\MTCP.CFG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This tells mTCP that we&amp;rsquo;re using SLIP (which is important) and where it can
find its config file (which we&amp;rsquo;re about to create). Open &lt;code&gt;C:\MTCP.CFG&lt;/code&gt; with
your favorite text editor. The first lines we need to enter are about our basic
setup. Be sure to adjust your own configs if you chose something different from
my setup.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PACKETINT 0x60
MTU 576
HOSTNAME slowpoke

IPADDR 192.168.10.6
NETMASK 255.255.255.252
GATEWAY 192.168.10.5
NAMESERVER 192.168.10.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Be sure to come up with your own cool hostname; just don&amp;rsquo;t use
punctuation. Note the &lt;code&gt;NETMASK&lt;/code&gt; which is important and based on our numbering
scheme. &lt;code&gt;NAMESERVER&lt;/code&gt; here refers to my router&amp;rsquo;s IP address since it also serves
DNS. Change yours appropriately.&lt;/p&gt;
&lt;p&gt;You can add more lines to this config as instructed in the various text manuals
for the different mTCP applications.&lt;/p&gt;
&lt;p&gt;Finally we&amp;rsquo;re done! Try pinging some other hosts on your network and some
Internet servers, even with domain names!&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/afterhours_hu_40c768c22ca6e012.webp"
 alt="After Hours BBS"
 &gt;
&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/ircjr_hu_cd22a1c540d962d4.webp"
 alt="IRCjr IRC client"
 &gt;
&lt;/p&gt;




&lt;h2 id="epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/dos-slip/#epilogue"&gt;Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You may notice that mTCP is rather simple, and a lot of DOS network
applications use WatTCP instead. You&amp;rsquo;ll need to translate your configuration
over. You can write a simple configuration as follows in &lt;code&gt;C:\WATTCP.CFG&lt;/code&gt;
(again, translate to your particular setup):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my_ip = 192.168.10.6
netmask = 255.255.255.252
gateway = 192.168.10.5
nameserver = 192.168.10.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, set the environment variable so that WatTCP applications know where to
look:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SET WATTCP.CFG=C:\
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also very important is easy repeatability of this setup. I have created 4
scripts that can be run to easily recreate this setup. On the Linux side, I
added some handy beeps to indicate progress or failure if you are starting this
headless (say, on boot). This requires the &lt;code&gt;beep&lt;/code&gt; package be installed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mcmackins.org/dos/slipup.sh"&gt;slipup.sh&lt;/a&gt; to start up the Linux side&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcmackins.org/dos/SLIPUP.BAT"&gt;SLIPUP.BAT&lt;/a&gt; to start up the DOS side&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcmackins.org/dos/slipdown.sh"&gt;slipdown.sh&lt;/a&gt; to take down the Linux side&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mcmackins.org/dos/SLIPDOWN.BAT"&gt;SLIPDOWN.BAT&lt;/a&gt; to take down the DOS side&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to also put entries in your &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; file to set the environment
variables used for the config files.&lt;/p&gt;
&lt;p&gt;Eventually I also plan to do this with the PLIP protocol, which is essentially
the same thing but over the parallel port. That way I can free up my serial
port for things that can only be done over serial (like XMODEM transfers).&lt;/p&gt;</description></item><item><title>My first math paper</title><link>https://mcmackins.org/posts/question-deletion/</link><pubDate>Tue, 03 Oct 2017 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/question-deletion/</guid><description>&lt;p&gt;I recently encountered a scenario in a class I&amp;rsquo;m taking where there was a big
argument about what should be done with unfair questions on an exam. The
discussion appeared to be entirely centered on intuition and emotions, so I
decided to settle the matter with mathematics. I think this information could
be useful to teachers in a similar predicament.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mcmackins.org/dl/papers/question-deletion.pdf"&gt;Download the paper (PDF)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>What's Up?</title><link>https://mcmackins.org/posts/update1704/</link><pubDate>Sat, 29 Apr 2017 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/update1704/</guid><description>&lt;p&gt;It&amp;rsquo;s been 3 years since I wrote &lt;a href="https://mcmackins.org/posts/fsf/"&gt;this story&lt;/a&gt; about joining the FSF, so I
figured it was a good time to write another one of these updates to catch
anyone up who happens to care.&lt;/p&gt;
&lt;p&gt;First, let&amp;rsquo;s talk about my psychological improvement since the last time I
wrote one of these. If you&amp;rsquo;ve read the one from August 2014, you&amp;rsquo;ll probably
notice I was in a fairly depressed state and still hung up about my
break-up. It&amp;rsquo;s been plenty of time since then, and I feel a lot better
now. Honestly, I&amp;rsquo;m a little embarrassed about how much I was dwelling on it at
the time, but I&amp;rsquo;m not going to take down the entry. It was an important,
character-building event in my life, and embarrassing as it may be, I wouldn&amp;rsquo;t
be the same if it didn&amp;rsquo;t turn out that way.&lt;/p&gt;
&lt;p&gt;Since joining the FSF, I&amp;rsquo;ve developed a much stronger political identity. I&amp;rsquo;ve
learned to think for myself and how to notice inconsistencies in my thinking. I
have a much more nuanced view on libre software, and I&amp;rsquo;m able to approach
questions without having to refer to FSF publications to articulate my
positions, and I&amp;rsquo;ve discovered where I personally disagree with RMS and the FSF
on several issues. I&amp;rsquo;ve also found my political leaning to be strongly
libertarian. I can&amp;rsquo;t tell for sure if I mostly lean right or left, and I
hesitate to call myself a centrist, because I find the term is
pretentious. Right now, I&amp;rsquo;m finding myself going back and forth between support
and question regarding anarcho-capitalism. I&amp;rsquo;ve been a strong nationalist for
most of my life, and questioning the legitimacy of the state is causing some
cognitive dissonance within me. We&amp;rsquo;ll see where that goes with time.&lt;/p&gt;
&lt;p&gt;One of the more notable changes for me recently is a drastic swing in religious
views. About August of last year, I encountered the well-known debate between
naturalist Bill Nye and creationist Ken Ham regarding whether the Bible is
important for living in today&amp;rsquo;s world (or something like that). Most people
detest that debate, seeing it as a waste of Nye&amp;rsquo;s time arguing with an
ideologue and giving creationists an opportunity to feel proud of their beliefs
via confirmation bias. For me, though, as an intellectually honest creationist
at the time, it was quite different. As I saw the real logic put before me, I
realized the problem with how I was justifying my continued belief in the
Bible.&lt;/p&gt;
&lt;p&gt;I had known for a long time that evolution by Darwinian natural selection was
well-established science. I (as many other Christians continue to do) merely
adjusted my interpretation of the creation myth, thinking to myself that maybe
evolution was just God&amp;rsquo;s clever medium by which he created life leading up to
Adam and Eve. However, listening to the debate, I realized that evolution
necessarily requires the existence of death for it to operate, but death isn&amp;rsquo;t
said to occur until after original sin, which means the Bible does implicitly
say that evolution didn&amp;rsquo;t happen. After that, I suspended my belief in the
Bible and called myself a &amp;ldquo;cold deist&amp;rdquo;, meaning that I believed something did
intentionally create the universe, but it did not intervene in any matter or
otherwise tamper with the laws of physics.&lt;/p&gt;
&lt;p&gt;I continued that way for a few months, and my mind was far more open to hearing
people out who had opinions that previously unsettled me. I told my (quite
religious) grandparents how I felt and stopped going to church with them. My
grandfather is the only one to genuinely hear me out, and I gave him my copy of
Thomas Paine&amp;rsquo;s &lt;em&gt;The Age of Reason&lt;/em&gt;, though he has yet to finish it.&lt;/p&gt;
&lt;p&gt;After hearing what many atheists had to say, I slightly revised my position to
&amp;ldquo;agnostic deist&amp;rdquo;, finding that it was dishonest to say that the existence of a
universe was evidence of a deity. Then, after reading Richard Dawkins&amp;rsquo; &lt;em&gt;The God
Delusion&lt;/em&gt;, I crossed the threshold to &amp;ldquo;agnostic atheist&amp;rdquo;, realizing that claims
of a creator deity created more questions than answers, and the idea had no
real influence over my life decisions anyway. That&amp;rsquo;s where I still stand when
writing this, and I see little chance of it changing.&lt;/p&gt;
&lt;p&gt;On a different note, influenced by a slight uptick in violent crime in my
hometown, I finally got around to buying a handgun and getting my concealed
carry license. I made the purchase and started practicing back in December, and
I got my license in the last week of March. For those curious, I carry a Smith
&amp;amp; Wesson M&amp;amp;P 9 Shield loaded with Hornady Critical Defense, though I&amp;rsquo;m
considering replacing the ammo with Federal HST 147 grain. I also carry a Ruger
LCP II, currently loaded with some old JHP rounds I inherited, and I&amp;rsquo;m going to
test some Hornady Custom in it to replace them.&lt;/p&gt;
&lt;p&gt;I also joined the NRA as a life member, because I think that personal defense
and a means to rebel against tyranny are the most important rights we
have. Without those, we cannot possibly secure any of our other rights.&lt;/p&gt;
&lt;p&gt;Also, since buying my first pistol, I brought down the rifles from the attic. I
sold my old Marlin Model 60 and bought a Ruger 10/22 Takedown which I may
eventually use for small game hunting. I also bought a Kel-tec KSG for home
defense, and I tried to get my dad&amp;rsquo;s M1 Carbine back in working order, but
success eludes me. Maybe I&amp;rsquo;ll get it fixed some time this year.&lt;/p&gt;
&lt;p&gt;Things I&amp;rsquo;m up to now: reading Sam Harris&amp;rsquo; &lt;em&gt;Waking Up&lt;/em&gt;, adding online
multiplayer to &lt;a href="https://github.com/delwink/agario-checkers"&gt;Agario Checkers&lt;/a&gt;, finishing my fourth year of school, and
planning to go to &lt;a href="http://www.southeastlinuxfest.org/"&gt;SELF&lt;/a&gt; this year, which will be my longest road trip yet.&lt;/p&gt;</description></item><item><title>Decoding PowerPaint's custom image format</title><link>https://mcmackins.org/posts/decoding-ymg/</link><pubDate>Sat, 20 Aug 2016 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/decoding-ymg/</guid><description>&lt;p&gt;This all started from my interest in old hardware. I&amp;rsquo;d acquired an old 90s
laptop PC from a coworker, and I decided to install &lt;a href="http://www.freedos.org"&gt;FreeDOS&lt;/a&gt; on it. While
browsing the available FreeDOS software, I stumbled upon PowerPaint 2, an image
editor. I decided to give it a try, and I made a very amusing doodle that I
simply had to get onto my main PC.&lt;/p&gt;
&lt;p&gt;The trouble was that PowerPaint supports 3 different image formats, and all of
them appear to be custom to PowerPaint. The one I used for the image was called
YMG, and there isn&amp;rsquo;t a way to convert them once they&amp;rsquo;re created. In my
persistence, I decided I would have to reverse engineer the format myself to
convert my precious drawing:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/bubba_hu_8d96d0aa5297daec.webp"
 alt="Bubbazoar"
 &gt;
&lt;/p&gt;
&lt;p&gt;To make things simple, I drew a test image:&lt;/p&gt;

&lt;img src="https://mcmackins.org/img/sample.ymg.png"
 alt=""
 style="image-rendering: pixelated; min-width: 480px;"&gt;
&lt;p&gt;It&amp;rsquo;s just the first few colors in the program&amp;rsquo;s color palette put in order in the smallest canvas allowed by the program.&lt;/p&gt;
&lt;p&gt;I opened up this YMG file using a hex editor and analyzed the data. It looks
like:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/sample.ymg-hex_hu_80344e149b077a23.webp"
 
 &gt;
&lt;/p&gt;
&lt;p&gt;From what I guessed, it had an 8-byte header, and the rest of the bytes
represented the color of a single pixel per byte. My guess for the header was
as follows:&lt;/p&gt;
&lt;p&gt;The first 2 bytes are the image width; the second 2 bytes are the height. The
fifth byte was always 0x03, which seems to be an internal code used by
PowerPaint to represent the YMG format. The last 3 bytes of the header are the
ASCII letters y, m, and g, representing the format.&lt;/p&gt;
&lt;p&gt;Next, I had to figure out the color palette. It didn&amp;rsquo;t take long to see that
the colors are not necessarily in order using a common RGB bit mask. The first
8 colors followed a pattern where the low 3 bits represented red, green, and
blue (in descending order of significance), and the next 8 colors were the same
but a bit brighter. However, the next 16 colors just ascended the gray scale. I
couldn&amp;rsquo;t think of a conceivable simple algorithm that would produce colors in
that order, so I went to the source code.&lt;/p&gt;
&lt;p&gt;I spent 5 hours scouring the source for anything related to color palettes. I
found the routines that would set and get the VGA color palete, but the palette
setting routines were never called in the main program. It seemed to be pulling
the palette out of thin air. At the brink of giving up, I closed my editors and
just looked at the file names in the source distribution for anything that
hinted at what I was looking for. Lo and behold, my eye caught a file by the
name of DEFAULT.PAL, and I figured the extension was short for palette.&lt;/p&gt;
&lt;p&gt;I opened it with my hex editor, and sure enough, it seemed to resemble the
pattern I was seeing. Each 3 bytes seemed to contain an RGB value, and the
file&amp;rsquo;s length was 256 times 3, the expected number.&lt;/p&gt;
&lt;p&gt;At this point, I started writing code.&lt;/p&gt;
&lt;p&gt;I had it read the header to determine width and height, and I had it load the
palette file to make the correlation of numbers to colors. From there, I used
the &lt;code&gt;wand&lt;/code&gt; module to generate the final image and save it to disk.&lt;/p&gt;
&lt;p&gt;Immediately, I had errors. Somehow, the last row of the image didn&amp;rsquo;t line up
with the expected width. Figuring it must mean that it shaved off the last bit
of the image for some primitive size reduction, I added some code to just fill
in the missing bit with black. Then, I got this image:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/bubba1_hu_1eb01566638f6c20.webp"
 alt="First attempt"
 &gt;
&lt;/p&gt;
&lt;p&gt;Well, something was clearly not right. It became clear that the width wasn&amp;rsquo;t
quite right. I tried subtracting 1 and then 2 from the width, and I finally got
something more acceptable:&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://mcmackins.org/img/bubba2_hu_91b8904ba9b1aa20.webp"
 alt="Second attempt"
 &gt;
&lt;/p&gt;
&lt;p&gt;The image was still really dark, though. It seems the palette file&amp;rsquo;s RGB values
were lower than what was showing on my DOS computer. I settled on multiplying
the color values by a constant 4.2, resulting in a more desirable result.&lt;/p&gt;




&lt;h2 id="epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/decoding-ymg/#epilogue"&gt;Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The converter still isn&amp;rsquo;t perfect. It was including some gray pixels at the
bottom of the image that the DOS program never displayed. Could be an error in
PowerPaint&amp;rsquo;s programming, or a shortcut they took somewhere. I just changed
them to black and changed the image dimensions using an image editor.&lt;/p&gt;
&lt;p&gt;Also, the pixels on my DOS computer are actually not perfect squares; they&amp;rsquo;re
slightly too tall. As a result, the final image looks just a little squished
vertically, and there&amp;rsquo;s no good way to restore its dimensions.&lt;/p&gt;
&lt;p&gt;If you ever decide to use PowerPaint yourself, you can &lt;a href="https://mcmackins.org/dl/ymgconv.tar.gz"&gt;download my program&lt;/a&gt;
to convert your images to modern formats (but I&amp;rsquo;m not writing documentation for
it). However, I plan to write a C program some time to replace PowerPaint and
use the well-documented Bitmap format so that conversion won&amp;rsquo;t be necessary,
and I may be able to support 16- or 32-bit color.&lt;/p&gt;




&lt;h2 id="second-epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/decoding-ymg/#second-epilogue"&gt;Second Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I received an email in 2025 informing me that the colors are limited to 6 bits, and so when encoded as bytes, they are shifted 2 bits over from where they should be if you want to read them as 8-bit colors. Because of that, my guess of multiplying by 4.2 should really be 4.0 exactly, or just a 2-bit shift to the left.&lt;/p&gt;
&lt;p&gt;I have little interest in maintaining this software and would rather just implement my own paint program, but that&amp;rsquo;s a project for another day. Anyway, if you want more accurate colors, just do a bit shift.&lt;/p&gt;</description></item><item><title>Retro awesomeness</title><link>https://mcmackins.org/posts/gbpong/</link><pubDate>Wed, 08 Jun 2016 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/gbpong/</guid><description>&lt;p&gt;I&amp;rsquo;ve been writing a standard C library for the Nintendo Game Boy system over at
Delwink, and now I&amp;rsquo;ve got a working Pong prototype game. It still needs some
more features yet to be added to the library, but it&amp;rsquo;s a playable game! Check
it out &lt;a href="https://github.com/2mac/gbpong"&gt;on GitHub&lt;/a&gt;, or clone
&lt;code&gt;https://github.com/2mac/gbpong.git&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Fun for hackers</title><link>https://mcmackins.org/posts/ttt/</link><pubDate>Tue, 28 Apr 2015 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/ttt/</guid><description>&lt;p&gt;I made a new program in response to a challenge, and it has turned out to be a
useful learning tool. &lt;a href="https://github.com/2mac/ttt"&gt;See it on GitHub&lt;/a&gt;, or clone
&lt;code&gt;https://github.com/2mac/ttt.git&lt;/code&gt; using Git to check it out. Be sure to first
read the README file before getting started.&lt;/p&gt;</description></item><item><title>New Music: Mini-boss from Zelda: The Wind Waker</title><link>https://mcmackins.org/posts/wwminiboss/</link><pubDate>Sat, 28 Feb 2015 00:00:00 -0600</pubDate><guid>https://mcmackins.org/posts/wwminiboss/</guid><description>
 &lt;audio controls preload="auto" src="https://mcmackins.org/audio/wwminiboss.ogg"&gt;&lt;/audio&gt;
</description></item><item><title>Operating Systems Are Like Cars</title><link>https://mcmackins.org/posts/like-cars/</link><pubDate>Thu, 04 Dec 2014 00:00:00 -0600</pubDate><guid>https://mcmackins.org/posts/like-cars/</guid><description>&lt;p&gt;Analogies are wonderful. They help us quickly understand complicated and
daunting information easily based on something the majority of the audience
already understands.&lt;/p&gt;
&lt;p&gt;However, analogies are often not perfect. A lot of people like to compare
software to cars when talking about the complex issue of software freedom, but
cars are in finite supply, where software is information that is infinitely able
to be copied.&lt;/p&gt;
&lt;p&gt;When referring to parts of an operating system, however, the car analogy seems
much closer.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s first go over the pieces of a typical operating system. There is the
kernel which interacts with the hardware, standard utilities that make the
system usable, and supplementary software specific to the user&amp;rsquo;s desires.&lt;/p&gt;
&lt;p&gt;The kernel is akin to the engine of a motored vehicle. It takes input from other
parts of the machine in order to create the desired result for the user. In an
OS, this could be drawing a picture on the screen. In a car, this is making the
car accelerate. This analogy breaks down a little bit since the engine only does
one of these jobs, where the kernel will do all handling of hardware. In a
sense, the kernel does the job of the engine, the brakes, and the steering wheel
mechanisms.&lt;/p&gt;
&lt;p&gt;The standard utilities are the parts that the driver uses directly, such as the
pedals and steering wheel. On a POSIX-compliant system like GNU, these are the
commands such as mkdir, cp, and rm. They allow you to create and manipulate the
data on your system as well as some other functions. You use them to control the
kernel at a higher level, just like you press the accelerator to speed up
without having to know what the engine is doing exactly.&lt;/p&gt;
&lt;p&gt;The supplementary software often varies. It corresponds to things like seat
cushions, radios, and doors in a car. They are good to have, but they are not
required in order to have a functional and operable vehicle. It would be hard to
find a car without them, but it is possible to have one without. These are
usually your user applications like text editors, word processors, web browsers,
and the like.&lt;/p&gt;
&lt;p&gt;I hope this clears some things up.&lt;/p&gt;</description></item><item><title>Free Distros Aren't For Suckers!</title><link>https://mcmackins.org/posts/free-distros/</link><pubDate>Mon, 06 Oct 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/free-distros/</guid><description>&lt;p&gt;Within the past two weeks, I have taken yet another turn to freedom, and I&amp;rsquo;m
having a wonderful time with it!&lt;/p&gt;




&lt;h3 id="the-cause"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/free-distros/#the-cause"&gt;The Cause&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Due to my activity in various free software communities, my views are often on
display for many others ready to criticize. I often proclaim that transitioning
to free software is often a slow process. They normally agree, but I would
always get flack for still being in that transition process myself.&lt;/p&gt;
&lt;p&gt;Often, I would announce that I had removed some proprietary application from my
system, and instead of &amp;ldquo;Good job,&amp;rdquo; I often got &amp;ldquo;&lt;em&gt;You&lt;/em&gt; were using &lt;em&gt;that&lt;/em&gt; on
&lt;em&gt;your&lt;/em&gt; machine?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Needless to say, that got a bit annoying. I had always wanted a 100% free
system, but I had to make a transition just like everyone else.&lt;/p&gt;




&lt;h3 id="the-catalyst"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/free-distros/#the-catalyst"&gt;The Catalyst&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;At the time, I had been settling for free applications in userspace but nonfree
drivers in kernelspace. My setup was one massive System 76 Bonobo running Arch
for mostly home use, and a Dell Inspiron Mini running Ubuntu MATE for portable
computing.&lt;/p&gt;
&lt;p&gt;For the most petty reason ever (the screen being too small for some applications
to fit between the MATE panels on the top and bottom), I installed Trisquel Mini
one morning on the netbook, and it was very fast and responsive. I marveled for
the rest of the day on how good the distro was performing even under my budget
hardware.&lt;/p&gt;
&lt;p&gt;This surprise was likely due to a collective belief among the Jupiter
Broadcasting community that the free distros aren&amp;rsquo;t any good practically.&lt;/p&gt;
&lt;p&gt;Now, the Bonobo is a gaming laptop with heavy dependence on proprietary software
to effectively run its NVIDIA graphics card. It will run with the Nouveau
drivers, but the performance was worse than my netbook running Intel graphics.&lt;/p&gt;
&lt;p&gt;After a few days living in total freedom on the netbook, I became uncomfortable
using my Arch machine, knowing that on the hard drive was lurking proprietary
drivers that (for all practicality), I couldn&amp;rsquo;t live without. Eventually, the
empty feeling got to me, and I ordered an Intel NUC (I had been wanting one
anyway). When it showed up, I was able to (with one hiccup) install Parabola
GNU/Linux-libre onto the SSD, and I&amp;rsquo;m still using it to write this article.&lt;/p&gt;




&lt;h3 id="the-future"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/free-distros/#the-future"&gt;The Future&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;As of now, I am running only free software on my &lt;em&gt;primary&lt;/em&gt; machines. My
production servers and my work machine are still running nonfree distros
(including the web server hosting this article).&lt;/p&gt;
&lt;p&gt;In the future, I plan to move my production servers over to Debian GNU/Linux
with the nonfree repositories disabled (my VPS host does not offer official
gnu.org distros).&lt;/p&gt;
&lt;p&gt;My work machine will have to continue running nonfree software due to the nature
of the duties I have at work. Once I am finished with my internship there, that
machine will come home and run a free distro at last.&lt;/p&gt;</description></item><item><title>First week back in school</title><link>https://mcmackins.org/posts/2014-fall-bts/</link><pubDate>Mon, 25 Aug 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/2014-fall-bts/</guid><description>&lt;p&gt;It&amp;rsquo;s been 7 days since I started back at school, and it&amp;rsquo;s been an experience so
far.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m retaking Trigonometry since I had some complications with my schedule last
semester. I applied to be with the same professor for World Civ, but apparently
he accepted a job offer that required him to move to Florida, so I have this
Indonesian professor now. His accent is easy enough to understand, but it&amp;rsquo;s not
quite the same.&lt;/p&gt;
&lt;p&gt;Before I even walked into that class, a girl (whose name shall not be mentioned)
sat next to me and just started talking, which really took me out of my usual
comfort zone, but whatever. She seems mildly interested in the topic of
free software, though I haven&amp;rsquo;t asked her what she thought of my printout of
&lt;a href="https://mcmackins.org/switch"&gt;Why switch to free&lt;/a&gt;. She has my number, but I&amp;rsquo;ve yet again run into
the situation where I can give out my number, but I can&amp;rsquo;t make myself be clear
about why I&amp;rsquo;m giving my number.&lt;/p&gt;
&lt;p&gt;Anyway, after that, I have World Lit I with an interesting professor. She&amp;rsquo;s a
rather old lady with a great appreciation for the old stories we&amp;rsquo;re reading. To
her, it&amp;rsquo;s just any other fiction. She loves it like the young girls love
Twilight.&lt;/p&gt;
&lt;p&gt;On my off days (Tue/Thu), I have a music appreciation course which is amusing to
say the least. I&amp;rsquo;ll end up being graded to go to concerts, which sounds cool,
but it&amp;rsquo;s kind of nervewracking to be forced into making plans like that.
Hopefully, there won&amp;rsquo;t be too much trouble with that.&lt;/p&gt;
&lt;p&gt;My school uses Blackboard Learn, whichs irks me not only because it&amp;rsquo;s
proprietary garbage, but because the IT crew here can&amp;rsquo;t seem to even keep it
online. It was down all weekend, preventing me from turning in one assignment
and blocking my access to even see another.&lt;/p&gt;
&lt;p&gt;I think this semester will be quite entertaining. I just hope I can get over my
shyness sooner. It really sucks.&lt;/p&gt;</description></item><item><title>What's Up?</title><link>https://mcmackins.org/posts/update1408/</link><pubDate>Fri, 15 Aug 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/update1408/</guid><description>&lt;p&gt;This will be the first of many future updates about my personal life. I figure
it&amp;rsquo;s been a bit long since I had any good news. The past month hasn&amp;rsquo;t been too
interesting for me, but it&amp;rsquo;s nice to look back at recent events and assure
myself that I haven&amp;rsquo;t just been rotting away for a month.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s begin with what I&amp;rsquo;m thinking about. I decided to write this update after
realizing after getting home from work that today marks exactly 6 months since
my breakup. Which breakup? My breakup. I&amp;rsquo;ve only had one. I&amp;rsquo;ll try to keep the
ranting down even though I&amp;rsquo;m still really torn up about it.&lt;/p&gt;
&lt;p&gt;For those of you who do not know, I met a girl in 2010 on the Internet. We met
via an online game we happened to both be playing, and we enjoyed the same
activities on said game. We played together all the time, but it wasn&amp;rsquo;t until a
few months later when my PC at that time died that we got to talking outside the
game (my spare laptop couldn&amp;rsquo;t handle it, but there was instant messaging
software). Weeks later, we started to become a little more than just friends,
and eventually it evolved into a serious relationship. We met in person for the
first time on December 27, 2011 (that&amp;rsquo;s one of the few moments in my life I can
actually remember the exact date for), and she stayed for two days (an evening,
a day, and a morning). At nearly the time we&amp;rsquo;d been together for 3 years (I
cannot remember that date), she abandoned me for 3 days, not giving me a word
except &amp;ldquo;I&amp;rsquo;m busy&amp;rdquo; or &amp;ldquo;Wait,&amp;rdquo; then on the third day (a Saturday I think), she
sent me a Word document with a short narrative of a not-so-fictional boy and
girl who had a happy relationship blah blah blah and then she wasn&amp;rsquo;t happy
anymore and left. She also explained in that document that nearly everything I
knew about her personality and values was a complete lie. She had falsified
herself in order to temporarily please me. I convinced her that we might have
had a chance to still stay together, and after giving up any ounce of dignity I
had at the time, she agreed that she was being foolish. That lasted for a while,
and we even met again on December 27, 2013 (how symbolic), and I stayed there
for a week. The whole time (from the attempted breakup until the actual one), I
had been a stressed-out freak, but finally on the 15th of February this year, I
found out she was secretly seeing the guy she tried to leave me for the first
time, and I left her that evening when she returned home.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t slept right since.&lt;/p&gt;
&lt;p&gt;That ended up being longer than I expected, so let&amp;rsquo;s review July. I learned
about PGP/GPG encryption (and wrote an article on it). I visited my biological
grandfather in Alabama due to his recent cancer diagnosis and stopped by
Nashville on the way back to visit my stepmother&amp;rsquo;s immediate family there. While
in Nashville, I had a little time to play with my Dogecoin, and I picked up and
contributed to a project on GitHub, a couple of Python scripts for getting
exchange rates for cryptocurrencies. I showed my friend Drew how to use Dogecoin
this week, and that&amp;rsquo;s about it.&lt;/p&gt;
&lt;p&gt;On the note of recovering from my breakup, I decided yesterday that it&amp;rsquo;s been
long enough and that I should start trying to meet people again. So, I gave my
waitress at lunch my Delwink business card in order to give her my phone number.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;I guess she either didn&amp;rsquo;t get the hint or isn&amp;rsquo;t interested. This despite
chatting me up more than any of the other waitresses, recognizing me from high
school, and talking about how she wants to find new friends. :/&lt;/p&gt;
&lt;p&gt;Guess I&amp;rsquo;m looking forward to school starting so I can finally get a life again.
I hope to give more updates in the future, since that&amp;rsquo;s what this site was
originally created for in the first place.&lt;/p&gt;
&lt;p&gt;If you have anything to say, &lt;a href="https://mcmackins.org/contact/"&gt;contact me&lt;/a&gt;. Otherwise, until then.&lt;/p&gt;</description></item><item><title>Everyone Should Learn Code</title><link>https://mcmackins.org/posts/everyone-should-code/</link><pubDate>Fri, 06 Jun 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/everyone-should-code/</guid><description>



&lt;h2 id="preface"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/everyone-should-code/#preface"&gt;Preface&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I know what you&amp;rsquo;re thinking: how can I expect everyone to learn code? After all,
it requires a degree of skill, and you&amp;rsquo;re just fine with the software other
people have programmed&amp;hellip; right?&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t really think so. Consider the fact that you&amp;rsquo;re taught in school about
chemistry and physics regardless of your career path. If you&amp;rsquo;re working in
retail, do you really need to know the volume of two moles of hydrogen at STP?
Probably not, but you&amp;rsquo;re taught anyway. Consider high schools that require an
art credit in order to graduate. If you&amp;rsquo;re going into mechanical engineering, do
you really need to know about chiaroscuro? Certainly not.&lt;/p&gt;
&lt;p&gt;On that level, why not learn code regardless of your field. Well, the examples I
gave weren&amp;rsquo;t exactly encouraging, so let&amp;rsquo;s look at this again under a different
light&amp;hellip;&lt;/p&gt;




&lt;h2 id="the-practicality-of-learning-code"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/everyone-should-code/#the-practicality-of-learning-code"&gt;The Practicality of Learning Code&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Even if it&amp;rsquo;s a simple language like Python or a scripting language like
JavaScript, learning some language is practical for anyone going into any field,
because everyone in a developed part of the world will spend some amount of time
at a computer, and one of the top reasons that people spend so much money on
computer repairs is not for actual hardware failures, but rather a lack of
software know-how.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m by no means suggesting that you become an expert programmer and learn to fix
all your software, but knowing the basics of programming is a good way to
diagnose issues and find out what it is that&amp;rsquo;s going wrong and what steps to
take in order to fix your issue. Additionally, computers are one of the few
things which people use every day yet seldom know how to control. With a little
bit of programming skill, anyone can automate simple tasks they would otherwise
spend more time working on or spend money to have someone else develop that
software.&lt;/p&gt;
&lt;p&gt;For instance, I could make this website by manually writing the HTML and
uploading it using some FTP client, but I don&amp;rsquo;t like to write HTML. It is far
easier to write out the text and automate what needs to happen. By writing
a simple script for BASH (my command line shell), I can instead write this page in &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; and automatically turn it into HTML.&lt;/p&gt;




&lt;h3 id="the-dangers-of-ignorance"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/everyone-should-code/#the-dangers-of-ignorance"&gt;The Dangers of Ignorance&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s also important to educate yourself (or be educated) in the area of
programming for deeper reasons. As I stated, few computer users know how to
make their computers do what they want. It&amp;rsquo;s just magic. I don&amp;rsquo;t mean they
really believe that magic powers their computers, but any time you don&amp;rsquo;t know
how something works, it&amp;rsquo;s magic. When you don&amp;rsquo;t know how to control your
computer, you become a slave to the developers of the software running on it. In
the event that the computer runs
&lt;a href="http://gnu.org/philosophy/proprietary-sw.html"&gt;nonfree software&lt;/a&gt;, there are
even more issues at hand.&lt;/p&gt;
&lt;p&gt;To learn how to program is to empower yourself to at the very least know the
fundamentals of how your software works which can give you a better sense of
appreciation for the work software developers such as myself and those with far
more experienced that I make on a regular basis.&lt;/p&gt;




&lt;h3 id="conclusion"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/everyone-should-code/#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re interested in learning how to program, there are a number of good
books and guides about programming in whatever language you choose. &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt; is a good language for beginners.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re still not convinced, or if there is something you&amp;rsquo;d like me to add to
or change about this article, please &lt;a href="https://mcmackins.org/contact/"&gt;contact me&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Use PGP Encryption</title><link>https://mcmackins.org/posts/pgp/</link><pubDate>Fri, 06 Jun 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/pgp/</guid><description>&lt;p&gt;You&amp;rsquo;re being watched. That&amp;rsquo;s all there is to it.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;But I&amp;rsquo;ve got nothing to hide!&amp;rdquo; I hear you saying. Sure, you might have nothing
to hide, but if just anyone walked into your home and asked to search
everything, would you let them in? If you would, you&amp;rsquo;re more trusting than I am.
If that&amp;rsquo;s the case, this article isn&amp;rsquo;t for you.&lt;/p&gt;
&lt;p&gt;Otherwise, you may be concerned to know that every packet you send across the
Internet is kept by whatever powers are afoot. Be it governments or Google, your
information is being collected, and you have to take a few steps if that
information is to remain as private as you intended. To ensure that only the
intended reader gets the information you&amp;rsquo;re sending, it needs to be encrypted
so that only they can decrypt it.&lt;/p&gt;
&lt;p&gt;It may seem complicated (and on a technical level, it is), but the process on
your end is actually quite simple. There is a standard for this type of public
key encryption, and it&amp;rsquo;s called OpenPGP. It&amp;rsquo;s an implementation of technology
from the early 90s called Pretty Good Privacy, or PGP.&lt;/p&gt;
&lt;p&gt;This encryption protocol is implemented through different software packages. To
make things more confusing, the most commonly-used implementation is the GNU
Privacy Guard, or GPG. So we have PGP and GPG, which are both pretty much the
same thing, but they&amp;rsquo;re different on a more technical level. Since more than one
implementation exists, I&amp;rsquo;ll refer to them all as PGP.&lt;/p&gt;
&lt;p&gt;You can most easily use PGP encryption through the Enigmail extension for the
Thunderbird e-mail client (and derivative works). You can find a quick setup
guide &lt;a href="http://emailselfdefense.fsf.org"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;re set up, it&amp;rsquo;s fairly easy to obtain the public keys of people you are
connected with. I use &lt;a href="http://pgp.mit.edu"&gt;this pool&lt;/a&gt; to upload and retrieve
keys.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the result. It turns &lt;a href="https://mcmackins.org/email/pgparticle/in.txt"&gt;this message&lt;/a&gt; into
&lt;a href="https://mcmackins.org/email/pgparticle/out.txt"&gt;this message&lt;/a&gt;. When the recipient obtains their
copy, they can use their private key to decrypt the message and read it like
normal, but the middleman gets nothing but garbage to read.&lt;/p&gt;
&lt;p&gt;Is it invulnerable? No, but it&amp;rsquo;s a whole lot safer to do this than to send your
messages in plain text, practically asking other parties to take a peek. I might
also add that you should send as much encrypted e-mail as you can in order to
protect yourself. If you only encrypt some of your messages, other parties
looking in will place suspicion upon the encrypted e-mails, and they&amp;rsquo;ll target
them. Otherwise, they won&amp;rsquo;t know where to start.&lt;/p&gt;
&lt;p&gt;If you have any questions, there are lots of places to research the topic, or
you can &lt;a href="https://mcmackins.org/contact/"&gt;ask me&lt;/a&gt;, and I&amp;rsquo;ll do my best to answer.&lt;/p&gt;</description></item><item><title>Why I use the GPL</title><link>https://mcmackins.org/posts/gpl/</link><pubDate>Mon, 05 May 2014 00:00:00 -0500</pubDate><guid>https://mcmackins.org/posts/gpl/</guid><description>&lt;p&gt;The GPL receives a significant amount of criticism for the way it claims to be a
free software license yet imposes a number of restrictions and requirements upon
the users and developers of GPL software.&lt;/p&gt;
&lt;p&gt;One of the most common arguments against the GPL is that it intentionally
restricts its users despite claiming itself as a free software license. These
claims are accurate, but in my opinion looked at in the wrong light.&lt;/p&gt;
&lt;p&gt;The GPL prevents anyone from relicensing the software or derived works under any
other license, making it a viral license. It can only grow in number. This was
an important decision made by Richard Stallman (author of the license) in order
to prevent anyone from making nonfree software using the work of free software
developers.&lt;/p&gt;
&lt;p&gt;The most free way to license any software would be to give up your copyright and
release it into the public domain, allowing anyone to do literally anything with
your software. Freedom is good, so we should do that, right? Eh, not really. The
problem lies in the fact that at this point, freedom becomes dangerous. Anyone
could use their freedom to attack the freedoms of others. The same problem
exists with other permissive licenses like the BSD and MIT licenses.&lt;/p&gt;
&lt;p&gt;The GPL treats software freedom much like the United States treats freedoms such
as the freedom of speech. You can do whatever you want except take away that
freedom from other people. The GPL perpetuates free software, and I truly
respect that.&lt;/p&gt;
&lt;p&gt;I will continue to license my software under the GPL because of its
restrictions. It is through those restrictions that it promotes freedom for all.&lt;/p&gt;




&lt;h2 id="epilogue"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/gpl/#epilogue"&gt;Epilogue&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Since writing this, my opinions have changed. I discuss them in
&lt;a href="https://mcmackins.org/posts/not-gpl/"&gt;another article&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Why I joined the FSF</title><link>https://mcmackins.org/posts/fsf/</link><pubDate>Tue, 29 Apr 2014 01:00:00 +0000</pubDate><guid>https://mcmackins.org/posts/fsf/</guid><description>&lt;p&gt;This is a very important story to me, so I&amp;rsquo;ll start from the beginning.&lt;/p&gt;




&lt;h2 id="introduction-to-linux"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#introduction-to-linux"&gt;Introduction to &amp;ldquo;Linux&amp;rdquo;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Some time about a year ago, I was grounded by my father for something I can&amp;rsquo;t
remember, and I was excruciatingly bored. I possessed a little red Dell
Inspiron Mini (a netbook) that at the time ran Windows 7 Starter. With the
excuse that I would be learning about alternative operating systems, I
downloaded and installed Ubuntu 12.10 via the wubi installer, allowing me to
dual-boot using the Windows bootloader.&lt;/p&gt;
&lt;p&gt;I played around with it, broke it a couple of times, and got a feel for how life
works in a GNU/Linux environment. At that time, I had no idea the mountain of
morals, ethics, and values that had come together to make such an experience
possible. It&amp;rsquo;s only recently that I learned the huge responsibility that I was
at the time neglecting.&lt;/p&gt;




&lt;h2 id="linux-mint"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#linux-mint"&gt;Linux Mint&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Some time later, I was encouraged by a friend of mine (Aaron Murtishaw) to
install a distribution called Linux Mint, which at the time was on its 15th
release. He told me about Cinnamon, and it seemed pretty interesting. This was
the first time I installed GNU/Linux the &amp;ldquo;right way&amp;rdquo; by using a flash drive and
GRUB to dual-boot between Win7 and Mint 15 on my main box.&lt;/p&gt;
&lt;p&gt;During this short period, I found myself using Mint more often than Windows, but
a driver issue that I (at the time) couldn&amp;rsquo;t resolve eventually drove me back to
a world of convenience at the price of freedom.&lt;/p&gt;




&lt;h2 id="dark-ages"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#dark-ages"&gt;Dark Ages&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;For quite some time, all of my computing was done using nonfree software. I
mostly played games with my friends. The only interaction I had with free
software was beyond my knowledge when I used an Ubuntu server to host my gaming
community&amp;rsquo;s website and game servers.&lt;/p&gt;




&lt;h2 id="software-development"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#software-development"&gt;Software Development&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;An interest in the popular voxel sandbox game Minecraft, particularly its
multiplayer modification CraftBukkit, got me interested in computer programming
for the purpose of creating plugins for said mod. I learned Java code through
some &lt;a href="http://thenewboston.org/list.php?cat=31"&gt;pretty good tutorials&lt;/a&gt; on
YouTube, but through my learning, I began developing my own software, and I had
a nice personal collection of programs before I ever got back around to making
plugins.&lt;/p&gt;
&lt;p&gt;The main thing that kept me occupied was the development of my very own top-down
2D role-playing game. I had always wanted to make my own computer game since I
was about ten years old and making tabletop RPGs. I noticed that I was spending
all of my free time developing and very little (if any) time playing any games.&lt;/p&gt;




&lt;h2 id="arch-linux"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#arch-linux"&gt;Arch Linux&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Around that time, the same friend that showed me Mint was pressuring me to try
a lightweight distro called Arch Linux. I was experimenting with virtual
machines at the time, so I spun up a box and tried installing it. It wasn&amp;rsquo;t as
bad as he&amp;rsquo;d made it out to be, so I installed it onto a partition of my external
hard drive and used it for a while.&lt;/p&gt;
&lt;p&gt;At this time, another friend of mine was frequently visiting and seeing what I
was up to. He was very interested, so I set him up as well, and we became better
friends throughout the process.&lt;/p&gt;
&lt;p&gt;After a few weeks of not using Windows, I realized it was in my best interest
for practical reasons to install Arch on my main hard disk, so I did. This I did
with confidence, since I spent most of my time in a programming IDE and not my
once-beloved Windows games. Not too much later, my friend switched full-time as
well.&lt;/p&gt;




&lt;h2 id="jupiter-broadcasting-and-my-introduction-to-rms"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#jupiter-broadcasting-and-my-introduction-to-rms"&gt;Jupiter Broadcasting and my Introduction to RMS&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;By then, I&amp;rsquo;d gotten involved with the Jupiter Broadcasting community by way of
the Linux Action Show, LINUX Unplugged, and their corresponding communication
media (Mumble and IRC). Through a couple of references that I later found out
were from a LAS interview of Dr. Richard Stallman (RMS), I was led to watching
some YouTube videos about big figures in the computer world. Eventually, I came
across some &amp;ldquo;Best of Richard Stallman&amp;rdquo; compilations which led me to some rather
long (2 hours each) public speeches by RMS which really got me going about free
software.&lt;/p&gt;
&lt;p&gt;It didn&amp;rsquo;t take me long to start talking about this discovery with my close
colleagues (immediate family, nearby friends, professors, etc.). Shortly
thereafter, I started licensing all my software under the GNU GPL and hosting
the source on GitHub for all to see, learn from, and contribute to.&lt;/p&gt;




&lt;h2 id="conviction"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#conviction"&gt;Conviction&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Some time passed, and I realized both on my own and from comments others that I
was very passionate about the advancement of freedom in the computer software
world. I&amp;rsquo;d become a lot more active in the JB and free software communities
stressing the importance of freedom and discussing regularly the importance of
freedom for both users and developers.&lt;/p&gt;
&lt;p&gt;It was then that I decided it was time to put forth a physical contribution
to the free software movement. It was during the recording of LINUX Unplugged
episode 38 that I officially signed up for the Free Software Foundation and was
given my number: 12889.&lt;/p&gt;




&lt;h2 id="amendment-1"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#amendment-1"&gt;Amendment 1&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;During September and October 2014, I made the switch to free distros (Parabola
and Trisquel). Read about it &lt;a href="https://mcmackins.org/posts/free-distros/"&gt;here&lt;/a&gt;.&lt;/p&gt;




&lt;h2 id="amendment-2"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#amendment-2"&gt;Amendment 2&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;For various reasons that don&amp;rsquo;t belong in a small amendment section, I no longer
support the FSF. I don&amp;rsquo;t necessarily regret what I have done. It was an
important step in my character development. However, it is clear to me that the
FSF is at odds with my personal values.&lt;/p&gt;




&lt;h2 id="notes"&gt;
 &lt;a class="Heading-link u-clickable" href="https://mcmackins.org/posts/fsf/#notes"&gt;Notes&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;By request of RMS himself, I provide the following notices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If you intend on using the web version of YouTube to view his speeches, you
should use the HTML5 player instead of Adobe Flash. If Flash is not installed,
the HTML5 player will start by itself. Alternatively, you could use
&lt;a href="http://audio-video.gnu.org"&gt;this&lt;/a&gt; or a YouTube downloader such as youtube-dl to
mitigate the use of nonfree software.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The GNU/Linux distros I mentioned in the above text (Mint and Arch) are not
ones with a policy on free software. In fact, their default kernels are patched
with nonfree blobs (for proprietary hardware support). Neither myself, the GNU
project, nor the FSF approve of this practice. It is &lt;em&gt;possible&lt;/em&gt; to use these
distros in complete freedom, but we do not officially endorse them because of
their stance on the matter (allowing nonfree software in the official repository
and by allowing nonfree blobs in their kernel in the name of convenience, which
is foolish and unethical).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are interested in how you can help out the effort with or without
joining the FSF, you are encouraged to check out
&lt;a href="http://gnu.org/help"&gt;this page&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Switching Julie</title><link>https://mcmackins.org/posts/julie/</link><pubDate>Tue, 29 Apr 2014 00:00:00 +0000</pubDate><guid>https://mcmackins.org/posts/julie/</guid><description>&lt;p&gt;A few weeks ago, my classmate wanted something better for her laptop. She was
complaining about how slow it was while we were working in the lab together. I
idly bragged about &amp;ldquo;what I could do with a computer,&amp;rdquo; and she asked how much I
would charge to fix hers up.&lt;/p&gt;
&lt;p&gt;Taken aback, I told her I didn&amp;rsquo;t know, but that I was definitely interested. It
was an actual opportunity to bring someone who would have otherwise been
clueless about computers over to free software, which is where they belong.&lt;/p&gt;
&lt;p&gt;After a bit of planning, I created a document for her to fill out about what she
wanted out of her system, which was (to my relief) a web browser and a word
processor. Easy peasy. Those both ship standard on
&lt;a href="http://linuxmint.org"&gt;Linux Mint&lt;/a&gt;. I went home and prepared a flash drive to
install Mint 16 Cinnamon. In a couple of days, we met in the computer lab, and I
performed the installation in front of her so that she could see what I was
doing and so she could enter her own password. After the installation, I gave
her a brief tour of Cinnamon and launching applications. I also installed the
Micro$haft fonts she would need should a professor require Times New Roman font.&lt;/p&gt;
&lt;p&gt;By the end of it, I had spent 40 minutes and had installed one custom package
(the fonts), so I later created an invoice for $60, and gave her a 10% discount
for being an easy customer.&lt;/p&gt;
&lt;p&gt;So begins my story of switching people to free software.&lt;/p&gt;</description></item></channel></rss>