Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 979b77945d65bcefedf3db71ed43ec8b7d52c7ae
parent 5ad71a93b5796d18e66e1944c057e1fb10b1f01a
Author: Jake Bauer <>
Date:   Tue, 15 Feb 2022 02:01:06 -0500

Update gitignore and untrack generated feed

M.gitignore | 1+
Dstatic/feed.xml | 7051-------------------------------------------------------------------------------
2 files changed, 1 insertion(+), 7051 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,3 +1,4 @@ # Ignore generated output files static/**.html static/*/ +static/feed.xml diff --git a/static/feed.xml b/static/feed.xml @@ -1,7051 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<feed xmlns=""> - <title></title> - <link href="" /> - <link rel="self" href="" /> - <icon>/favicon.png</icon> - <updated>2022-02-15T00:10:52-05:00</updated> - <id></id> - <generator>sbs</generator> - - <entry> - <title>Free Software is an Abject Failure</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2021-11-08T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Free%20Software%20is%20an%20Abject%20Failure">Free Software is an Abject Failure</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-11-08</p> - -<p class="note">I want to preface this by saying that I used to be a staunch -software freedom evangelist. I used to license all my works GPLv3-or-later and -CC-BY-SA wherever I could and I used to believe quite strongly in the words of -Richard Stallman. I have since started to think more about the real effects of -the Free Software movement and have changed the way I write and license my -software as a result. I implore you to genuinely consider what I have written in -this post and to approach it with an open mind. Your knee-jerk reaction may be -to reject what I am saying as anti-freedom or pro-corporation but that is not -the case. In this post, I use the term "Free Software" to explicitly -differentiate it from "Open Source" software (which is what the FSF and Co. -also do). I believe FOSS as a concept is still very important, however I simply -no longer believe in the Free Software movement.</p> - -<p>Free Software is an abject failure. It may sound like a good concept on its -face—especially with the kind of language often used to describe the movement -and its opponents—but, when put under scrutiny, the institutions and practices -that make up the Free Software movement fundamentally fail at their stated -goals. Free Software is an ideological mess, Free Software hampers -collaboration, Free Software is legally ineffective, Free Software makes the -lives of developers harder, and Free Software fundamentally gets in the way of a -thriving software ecosystem.</p> - -<h2 id="The%20Failure%20of%20the%20Free%20Software%20Ideology">The Failure of the Free Software Ideology</h2> - -<p><a href="">Why Software Should Be Free</a> by Richard Stallman -presents an argument against having owners of software and explains the harm -done by obstructing software development through proprietary licensing. He -posits that software with obstructions results in fewer users, the inability for -users to fix programs, and the inability of developers to build upon prior -knowledge or work. He also states that the justifications one uses for keeping -ownership of the software (which he equates with keeping the software -proprietary) are emotional (i.e. &#8220;This software is mine, and I wish to control -it&#8221;) and economical (i.e. &#8220;I wish to become wealthy by programming.&#8221;). He shuns -these excuses and spends the rest of the document refuting those excuses and -explaining why the existence of proprietary software is bad and why the -alternative—software not having owners—is better.</p> - -<p>However, in nearly every Free Software project which exists today, there is a -clear &#8220;owner&#8221; of the software—someone who is the copyright holder, benevolent -dictator for life, or simply <em>de facto</em> leader of the project and through whom -all contributions must flow. Whether we&#8217;re talking about large projects too -large to fork and maintain by anybody but large, well-funded groups such as the -Linux kernel (in which Linus still has complete veto power by the way), Qt (in -which the company controls the development of the software and simply allows -older versions to be used under a free license), or Android (where Google -maintains pretty solid control), or smaller projects which have simple leaders. -As long as there is a copyright statement, there are one or more owners to be -aware of.</p> - -<p>Additionally, the <a href="">GNU Manifesto</a>, aside from calling -the Open Source movement an &#8220;amoral approach&#8221;, goes on to say that GNU &#8220;is not -in the public domain&#8221; and will have restrictions placed on further modifications -(in the form of disallowing proprietary modifications), with the justification -given by Stallman being: &#8220;I want to make sure that all versions of GNU remain -free.&#8221; With that, Stallman falls upon the same behaviour that he previously -shunned in <em>Why Software Should Be Free</em>. He uses his emotional attachment to -the software, something he said was an excuse to defend why software has an -owner, to justify his want to control how others can distribute and modify his -code. He is effectively saying &#8220;this is <em>my</em> creation, and I wish to control -what others can do with it&#8221; as well as clearly assigning an owner to the -software.</p> - -<p><em>Update 2021-12-13</em>: I was recently made aware of an article in which Richard -Stallman advocates against positive change to copyright laws because of how it -would hurt Free Software. Instead of making software free of copyright after 5 -years, he advocates for maintaining copyright control because it would hurt the -control that Free Software licenses would have over the distribution of software -later on. It&#8217;s not enough that the software would still fulfill the four pillars -of free software after the 5 years is up, control <em>must</em> be maintained over how -other people can distribute and use the software in their products in case they -ever decide to fork it and make something proprietary from it. Not only does he -not trust that people would use only the Free version (as if we need to be -protected by Free Software licenses lest we use some proprietary software), he -is, in essence, advocating for maintaining ownership over software even though -the change to copyright legislation would be positive for society overall. The -article is called: <a href="">How the -Swedish Pirate Party Platform Backfires on Free Software</a>.</p> - -<p>If software is not in the public domain, then, by definition, it has to have at -least one other owner. If Stallman can dictate how others can use his -software—even if it is more freely than most proprietary software—then it -clearly has an owner.</p> - -<p>Simply put, Stallman and others in the Free Software community use the exact -same excuses criticized in <em>Why Software Should Be Free</em> as justification for -their actions. GNU, the GPL, and seemingly the entirety of Free Software as it -stands today are all based on the same premises as proprietary software. They -use existing copyright systems in what they deem the &#8220;right&#8221; way while -simultaneously criticizing the way others use them as wrong.</p> - -<p>To be frank, the Free Software movement comes off as both a &#8220;cult of -personality"—worshipping Richard Stallman and his teachings, as well as a &#8220;cult -of ideology"—shunning those who disagree with the manifestos and the &#8220;way of -life&#8221; that the movement espouses to an extreme degree. As long as you, as a -developer, do everything within the framework of the GPL and the culture of Free -Software, you are ethical and good. As soon as you wish to do something outside -of this domain—even by using a more open, permissive license—you are -considered unethical.</p> - -<p>In an article where <a href="">Linus Torvalds criticizes the -GPLv3</a>, -Torvalds even says:</p> - -<blockquote> -<p>&#8220;I think the GPLv3 is expressly designed to not allow [the meeting between -open source and free software people]. Exactly because the FSF considers us -open source people &#8216;heretics.&#8217;&#8221;</p> -</blockquote> - -<h2 id="The%20Failure%20of%20the%20GPL">The Failure of the GPL</h2> - -<p>One of the stated goals written in the GNU Manifesto is:</p> - -<blockquote> -<p>&#8220;Finally, the overhead of considering who owns the system software and what -one is or is not entitled to do with it will be lifted.&#8221;</p> -</blockquote> - -<p>One look at the GPL will tell you that they have utterly failed at this. The -GPL, especially with version 3, has become so complicated that only a programmer -with relatively advanced legal knowledge and ability to read <em>and properly -understand</em> &#8220;legalese&#8221; will be able to decipher it to know what they are able -and unable to do with it. There exist websites which explain the license in -plain English, but even those say their explanations are no substitute for -reading the license. This is because of the very specific meaning that many of -the words in the license take on when put in the context of our modern legal -system. So, while you may be able to read the GPL and <em>think</em> that you -understand it, unless you are well-educated in &#8220;legalese&#8221;, you probably don&#8217;t -fully understand the true meaning and effect that the words of the license would -<em>actually</em> have in court.</p> - -<p>The ramifications of the GPL are still not even fully understood by lawyers -themselves. Many large companies will shy away from the GPL simply because they -don&#8217;t want to take the risk of using GPL-licensed code improperly and being -forced to reveal their proprietary software. While I don&#8217;t agree with -proprietary software as a concept, the fact that even lawyers—who are supposed -to be expertly trained in the kind of language used in the license—are uneasy -about its terms further reinforces just how unapproachable it is to the everyday -software developer. GNU and the GPL have done nothing to remove the overhead of -considering who owns software.</p> - -<p>Since the development of the GPL is reactionary—that is to say, its development -and growth over time was in response to discovered workarounds—there is now even -more overhead by way of the extra complication of the &#8220;-or-later&#47;only&#8221; clauses. -This is a license which has multiple versions which are <strong>not</strong> backwards -compatible. A project licensed under the GPLv2-only cannot integrate -GPLv3-or-later code without being re-licensed as GPLv3. The Linux kernel is an -excellent example of this.</p> - -<p>Linus Torvalds even <a href="">came out strongly against the -GPLv3</a> -and the process by which the FSF created the license. Many others in the -industry also saw this as an extreme and unnecessary move by the FSF to wield -the ultimate power over the GPLv3; all because a manufacturer put Linux in their -products and blocked users from running their own modified software on that -hardware which, by the way, had absolutely nothing to do with the Linux kernel -itself since the bootloader is the software that would stop users from running -some other software. This led to people thinking that this was basically just an -excuse to expand the scope and powers of the GPL over what could be seen as -something completely out of the scope of the GPL-licensed software. The move by -the FSF, the actions of Stallman, and the &#8220;tivoization&#8221; rhetoric are even -<a href="">heavily criticized by Software Freedom Conservancy member Bradley M. -Kuhn</a>.</p> - -<p>Putting aside the political manoeuvrings of the FSF, the mere existence of an -&#8220;-or-later&#8221; clause is a ridiculous thing to attach to a license. Anybody who -licenses their project under a GPLv3-or-later license puts a lot of trust in the -stewards of the GPL that the next version of the GPL will align with their -values and goals; a GPLv3-or-later project will be able to be licensed under a -GPLv4 license whatever the clauses of that GPLv4 license. This is a lot of stock -to put into a group of people like the FSF who were so dogmatic and exclusionary -in their development of the GPLv3.</p> - -<p>The reality of the GPL is that there is still a lot of overhead in considering -who owns the software. Not only in whether or not a developer should choose -version 2 or version 3 of the license depending on their goals, but also for -developers and users alike who try to understand the language of the license to -determine what they can do with the software and, if they are integrating some -GPL-licensed code into their own product, who actually owns and has copyright -over that software.</p> - -<p>Those who wish to integrate GPL-licensed code into their otherwise -non-GPL-licensed projects are faced with the decision to relicense their code -under the GPL, remake the functionality of the library under a more open -license, or otherwise abandon those efforts altogether. While the GPL may -&#8220;prevent&#8221; corporations or people from taking GPL-licensed code and integrating -it into a proprietary product, it also prevents literally any other -non-GPL-licensed project from using GPL-licensed code, even other FOSS projects.</p> - -<p>Even so, it&#8217;s not like the GPL actually prevents corporations from stealing -GPL-licensed code and integrating it into projects. While there are plenty of -corporations who freely comply with the GPL, there are plenty more, such as -VMWare, who don&#8217;t comply and yet <a href="">don&#8217;t face -consequences</a>. -Even if a lawsuit is successful, it is usually at the cost of <a href="">members of the -FOSS community who burn out</a> or are left disenchanted -by the whole process. Being GPL-licensed also doesn&#8217;t prevent a project from -being bought and therefore having all control handed over to a corporation. This -was most recently seen in the <a href="">acquisition of Audacity by Muse -Group</a> -in which Muse Group bought the rights to the Audacity code and project. (Note -that if this software actually didn&#8217;t have owners, this could not happen.) Users -have since forked the project, but this doesn&#8217;t necessarily stop something like -this from happening in the future, and certainly doesn&#8217;t stop it from happening -to other projects.</p> - -<p>The GPL-family of licenses attempt to solve a societal problem by restricting -the distribution of software in a manner not unlike the so-called <a href="">Ethical -Software</a> -movement. The GPL acts effectively as a proprietary license that allows you to -do the things it deems ethical, so long as you abide by the terms of the license - with regards to the distribution and re-licensing restrictions. As long - as you are in this &#8220;club&#8221;, everything is fine and dandy and you can make - your changes and push them to your favourite projects. As soon as you - leave this club and want to pull code from a GPL-licensed project into - your MIT-licensed project, well, sorry, too bad for you.</p> - -<p>While the GPL may not cause as much of an obstruction or be as unethical as -proprietary software, it is frankly not that much better. It causes distress and -conflict in the software community, is difficult for non-lawyers to fully -understand, and harms developers of non-GPL-licensed FOSS software. It is, for -example, the reason why the BSDs cannot take improvements made in the Linux -kernel and directly integrate them into their own kernels and <a href="">it is the reason -why ZFS cannot be integrated into the Linux -kernel</a>, -but can be shipped with FreeBSD.</p> - -<p>For all this talk of Free Software being the ethical option and the GPL being -the ultimate defender of user and developer rights, it completely goes against -the ethical principles laid out in <em>Why Software Should Be Free</em>. So much for &#8220;free as in freedom&#8221;.</p> - -<h2 id="The%20Failure%20of%20the%20Free%20Software%20Culture">The Failure of the Free Software Culture</h2> - -<p>The GNU Manifesto speaks a lot about how:</p> - -<blockquote> -<p>&#8220;Users will no longer be at the mercy of one programmer or company which owns -the sources and is in sole position to make changes.&#8221;</p> -</blockquote> - -<p>But a cursory look at the current landscape of Free Software will tell you that -this is simply not the case <em>at all</em>.</p> - -<p>Users are absolutely at the mercy of the maintainers of software projects to -integrate their changes in the current landscape of software development, -especially with software projects as complicated as a many of the popular GUI -toolkits, kernels, or desktop environments. In fact, the reality is that Free -Software project issue boards and forums are not much better than corporate -support forums. Often when one opens an issue in a large software project it can -take months or even years for those issues to be worked out. It&#8217;s also not -uncommon for those issues to simply go unsolved for many years. A great example -of this is the <a href=";">&#8216;Add an &#8220;icon view with thumbnails&#8221; mode&#8217; GNOME -issue</a> -which was opened in 2004 (it&#8217;s almost old enough to vote!) and is still not -actually fixed despite many users expressing how useful it would be to have this -feature.</p> - -<p>Users simply cannot maintain such complex software on their own and, if they -have limited programming ability, cannot be expected to fork a project, make -their fix, test their fix, act on feedback from the maintainers (if they&#8217;re -lucky enough to get their patch or pull request noticed), and so on. The current -software development ecosystem makes this impossible, regardless of the license -of the project. Software is not yet simple enough for that and GNU and Free -Software did nothing to solve this. In fact, it can be argued that they made -this worse by contributing to the creation of a culture of &#8220;elitists&#8221; who expect -all the users of their software to have the ability to read code and very -technical discussions or documentation in order to understand and fix problems.</p> - -<p>If an experienced user does come along and is dis-satisfied with their corporate -support forum-like experience, they might be inclined to fork the project. -However another very common sight in the Free Software community is to see -accusations towards groups or companies who fork projects of making &#8220;hostile -forks&#8221; or committing &#8220;theft&#8221; of Free Software. For example, Members of the Free -Software community <a href="">shunned and criticized the group of developers who forked -Gogs to make -Gitea</a> -when they forked a Free Software project to extend it for their own needs -because of an unresponsive maintainer. They even still kept the project under -the <em>same</em> license (an &#8220;unethical&#8221; Open Source license, no less).</p> - -<p>If software is not supposed to have an owner, as <em>Why Software Should Be Free</em> -advocates, what exactly is being stolen? Why do they, as the creator of some -piece of software, care if some company or even another FOSS developer takes it -and uses it in their product or makes proprietary modifications with it? <em>Why -Software Should Be Free</em> specifically outs this need to control what happens -with one&#8217;s software as one of the main justifications for proprietary licensing -and something to be avoided, yet it is seen everywhere in the Free Software -culture. In fact, an article entitled <em><a href="">Don&#8217;t fear the fork: How DVCS aids open -source -development</a></em> -perfectly exemplifies how the Free Software culture views forks (of course, it&#8217;s -written from the perspective of &#8220;unethical&#8221; Open Source movement).</p> - -<p>The goal of Free Software as laid out by <em>Why Software Should Be Free</em> was to -create a world in which there were no owners of software and in which -distribution was not restricted. Yet, despite this, the way the GPL family of -licenses puts restrictions on the distribution of GPL-licensed software combined -with the culture of Free Software actively <em>encourage</em> both of those things and -actively <em>discourage</em> forking software and modifying it to suit your own needs. -From the point of view of <em>Why Software Should Be Free</em>, the GPL combined with -this culture is, in reality, hardly much better than the world of proprietary -software we had before.</p> - -<p>The degree of openness which exists in the current software landscape can be, to -a large degree, attributed to the Open Source movement. It happened in spite of -the Free Software movement, not because of it.</p> - -<h2 id="The%20Failure%20of%20Free%20Software%20to%20Remain%20Relevant">The Failure of Free Software to Remain Relevant</h2> - -<p>Free Software and the surrounding culture and institutions are often viewed as a -farce outside of the dedicated Free Software <del>cult</del> community. The FSF has -been slowly descending into irrelevancy for the past two decades as they -struggle to do anything meaningful with their time and resources; instead opting -to make a lot of unproductive noise. Take, as recent examples, how they <a href="">mailed -a hard drive to Microsoft telling them to put the Windows 7 source code on -it</a>, -or how they <a href="">accuse Apple of &#8220;censoring free -software&#8221;</a> -—despite the fact that Apple isn&#8217;t actually censoring anything and plenty of -Free Software projects such as <a href="">Telegram</a> -are <a href="">on the App -Store</a>—and also -criticizing them for not supporting their specific chosen free media codecs—once -again, ignoring the plenty of other free media codecs which are otherwise -perfectly supported.</p> - -<p>To expand on that last point about Free Software projects on the App Store, the -<a href="">Apple App Store -EULA</a> -contains restrictions that the GPL doesn&#8217;t allow (see section 10 of the GPLv3 -and section 6 of the GPLv2). It says:</p> - -<blockquote> -<p>Except as provided in the Usage Rules, you may not distribute or make the -Licensed Application available over a network where it could be used by -multiple devices at the same time. You may not transfer, redistribute or -sublicense the Licensed Application [&#8230;] You may not copy (except as -permitted by this license and the Usage Rules), reverse-engineer, disassemble, -attempt to derive the source code of, modify, or create derivative works of -the Licensed Application, any updates, or any part thereof&#8230;</p> -</blockquote> - -<p>Note that this only applies to the application you purchased in the App store, -as bundled by the App Store. It doesn&#8217;t prevent you from going to GitHub and -modifying the software there, only modifying the software you got from the Apple -App Store. Sure, this isn&#8217;t a good thing and it can be easily argued that this -is unethical because you don&#8217;t ever own the apps you purchase, yet it is hardly -&#8220;censoring free software&#8221; given that, as the owner of a Free Software project, -you can freely submit GPL-licensed software to the App Store and Apple assumes -you have the rights to provide them with a non-GPL-licensed build. If you don&#8217;t -have that ability because you don&#8217;t own exclusive rights to the software and -it&#8217;s not feasible for you to get the permission of every contributor with their -name attached to the project, well, that&#8217;s not Apple&#8217;s problem. The FSF words -their article like Apple is attacking them when, in reality, Apple doesn&#8217;t care -what license you&#8217;ve chosen, only that you grant them the ability to distribute -your app under the terms of their EULA. The wording in that blog post is yet -another example of why the FSF are seen as a farce. They should know better.</p> - -<p>This reputation of preferring ideological book-thumping over meaningful action -is nothing new. Most who are familiar with Linux are likely familiar with -Richard Stallman&#8217;s <a href="">&#8220;GNU+Linux&#8221; -rant</a> -in which he squabbles and nitpicks over the relevancy of GNU to the Linux name. -Ignoring that the only significant contributions to the Linux system GNU can -claim is the compiler, the coreutils, and the C library. While these used to be -relatively significant in the early 90s, most Linux systems today run far more -non-GNU software than GNU software.</p> - -<p>In fact, even those base GNU components are quickly fading into irrelevancy as -projects like Clang&#47;LLVM, rewrites of coreutils to be faster and cleaner (e.g. -Busybox or various Rust projects), and other libc&#8217;s such as muslc are gaining -more and more traction each passing day. GNU is simply failing to make any -meaningful and actual progress, and is grasping at straws in an attempt to -remain relevant. Not only have other projects such as OpenBSD long since -abandoned things like modern GCC due to later versions becoming unmaintainable, -buggy behemoths, GNU themselves haven&#8217;t even released their HURD kernel in any -meaningful capacity despite promising to create such a thing since <em>before Linux -existed</em>.</p> - -<p>Speaking of fading into irrelevancy, many of the Free Software institutions such -as the Software Freedom Conservancy and Free Software Foundation Europe have -either been reliant on GPL violation lawsuits as one of their primary means to -exist, or have been relatively ineffective at carrying out their mandates with -regards to litigation. It has gotten so bad that <a href="">the SFC have tried to bring -lawsuits on behalf of the users of GPL -software</a>; something which has little basis in -actual copyright law, but is the only option they have left when companies -either skillfully hide their GPL violations or the owners of GPL software are -unwilling to enforce their license against large opponents. A cursory glance on -the SFC&#8217;s website reveals a lot of information about this Vizio lawsuit, but not -much information about previous lawsuits or successes. No wonder these -institutions also tend to only go after small opponents from which they can -continue to justify their existence. Even very public <a href="">violations such as those -committed by -OnePlus</a> -have still gone unanswered for. If such violations are clearly allowed to -continue with such ineffective enforcement, what use even is the GPL in reality?</p> - -<p>Regarding the quality of GNU software, outside of the <del>cult</del> community of Free -Software, GNU code has a reputation of being resource-hungry, buggy, bloated, or -annoying and frustrating to work with, as many who have had the pleasure of -using alternative libc&#8217;s, compilers, utilities, or programs will attest. GNU -creations have a reputation for being needlessly complex—solving problems which -don&#8217;t really exist in the first place if you write good software (or -documentation)—and having obtuse source code. The GNU Info system and the code -found in many of the coreutils are good examples of this.</p> - -<p>Finally, we can talk about how the conduct of Richard Stallman himself reflects -on the whole Free Software movement. The Free Software movement went through its -own little &#8220;constitutional crisis&#8221; over the question of whether or not to keep -him on as the face of Free Software after he made some comments on an MIT -mailing list about a sensitive topic. I won&#8217;t go into specifics about that -situation here, since it has been covered to death in other media outlets and -can be easily searched for (search &#8220;stallman mit mailing list&#8221;), but, suffice to -say, Stallman acted in a completely unprofessional and inept manner. In fact, -that is far from the only example of him behaving in such a way.</p> - -<p>In 2007, Stallman sent <a href=";m=119730630513821&amp;w=2">a message to the OpenBSD-misc mailing -list</a> entitled <em>&#8220;Real -men don&#8217;t attack straw men&#8221;</em> in which he accuses the OpenBSD folk of making -straw-man arguments about himself, and then using those arguments to attack his -credibility. If you read through this mailing list thread, you don&#8217;t have to go -far to realize that Stallman has absolutely no clue what he&#8217;s talking about. He -bases his opinion of OpenBSD on &#8220;what I have heard&#8221; and presumes that the -OpenBSD folk care whether or not he recommends their system. He proceeds to have -everything he said get taken apart by the replies which point out all the -inconsistencies in his own arguments and stances.</p> - -<p>After seeing just how ineffective this culture is at advocating for and -enforcing its principles in a meaningful way, as well as seeing the conduct of -one of its top-most members, how could anyone view this as a movement to be -appreciated, let alone joined and celebrated?</p> - -<h2 id="Where%20Do%20We%20Go%20From%20Here?">Where Do We Go From Here?</h2> - -<p>I think, by now, it is accurate to say that Free Software is an abject failure.</p> - -<p>It has failed at its stated goals through both the licenses and the culture it -has created and has instead perpetuated the paradigm of software ownership and -the use of unethical and flawed copyright legislation. It has done very little -to prevent corporate takeover of projects, improve the software development -landscape, or make the lives of developers or users easier. It has done nothing -that more ethical, permissive software licenses and the culture of collaboration -born out of projects such as BSD Unix didn&#8217;t already do, except to create a -toxic subculture of Free Software cult worshippers.</p> - -<p>One cannot solve the copyright, ownership, or restricted distribution problems -of software through playing into the exact same flawed systems that allow such -problems to exist in the first place. These are problems which must be solved on -a societal level, not on the level of individual software projects through an -obtuse license. Free Software, as it stands today, has the very real effect of -restricting innovation, sharing, and collaboration between developers.</p> - -<p>None of this is to say that proprietary licenses are okay or even that the Open -Source movement is the alternative. In fact, the Open Source Initiative is not -all that much better than the Free Software Foundation, it just has a mostly -different set of problems which are out of scope for this essay.</p> - -<p>For the most part, I agree with <em>Why Software Should Be Free</em>. Stallman has -perfectly valid and good ideas in that essay, yet he misses the mark with their -implementation. I mainly agree with Stallman&#8217;s points that software should not -have owners and that restricting software distribution is unethical. I believe -that software shouldn&#8217;t have owners and nobody should get to control how their -software is used, studied, distributed, or hacked upon.</p> - -<p>The only licenses which <em>truly</em> meet all these criteria and would be considered -ethical under that framework are public domain-equivalent licenses. Licensing -your code under <a href="">the Unlicense</a>, the <a href="">0BSD -License</a>, or the <a href="">CC0 -License</a> means -that you do not place <em>any</em> restrictions on the software whatsoever. People -don&#8217;t even have to mention your name or your project when they use your code -because you are no longer the owner of that software.</p> - -<p>If you do at least wish to have your name attached to the code (something that I -personally want if I care about the software I&#8217;m writing), commonly used -permissive licenses are the best option. Licenses such as the <a href="">MIT -License</a> or the <a href="">ISC -License</a> (my preferred license) impose -no further restrictions other than maintaining a copyright and permission notice -for that code if used in other projects. People are free to do whatever they -want with your code, so long as they keep your name on parts that you wrote.</p> - -<p>Not only do these options provide far more <em>real freedom</em> to developers, they -remove the overhead of having to think about who owns the software. In the case -of software in the public domain, you don&#8217;t have to worry at all because there -is no owner. In the case of permissively-licensed software, it&#8217;s a simple matter -of copy-pasting the necessary notice(s) wherever that code is used. These -licenses are also simple, easy to understand, and the culture surrounding them -is such that you don&#8217;t have to worry about a mob coming after you for forking a -project and morphing it into something that serves your needs, nor do you have -to worry about being sued for an accidental violation of a license that even -lawyers aren&#8217;t confident about getting right.</p> - -<p>You&#8217;ll notice that those licenses, however, do not address the issue of -corporations controlling software development and distribution, people using -software in ways you may deem bad or harmful, or the existence of megasoftware. -This is because those are problems that cannot be solved or even effectively -addressed by software licensing. These are societal problems that must be -tackled on a societal level. Attempting to do otherwise simply harms and -imposes more restrictions on small teams, independent developers, and hobbyists -who don&#8217;t have the resources to ignore your restrictions or buy your development -team.</p> - -<p>In reality, by licensing your project under the GPL and participating in Free -Software culture, instead of limiting the harms that corporations inflict, you -end up limiting the good that the rest of us can do. Free Software has failed.</p> - -<p class="note">If this post intrigued you and made you want to learn more, -consider checking out <a -href="">The -problems with the GPL</a> and <a href="/a-critique-of-free-software">A Critique -of Free Software</a> (both of which inspired this post), as well as <a -href="">On FOSSBros</a>.</p> - -<p class="note">You may also be interested in reading the <a -href="">discussion on -Mastodon</a> or the <a -href="">discussion on</a>.</p> - ]]></content> - </entry> - - <entry> - <title>A Git Workflow With Claws Mail</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2021-10-26T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="A%20Git%20Workflow%20With%20Claws%20Mail">A Git Workflow With Claws Mail</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-10-26</p> - -<p>When sending or receiving patches to or from git repositories, I prefer to use -<code>git send-email</code>. I find this workflow more efficient and less distracting than -jumping to a web interface to create a pull request. Plus, it&#8217;s not dependent on -having an account wherever a repository is hosted.</p> - -<p>I used to use <a href="">aerc</a> as my email client, but have since -switched to <a href="">Claws Mail</a> as I find TUIs with -multiple windows, tabs, and panes to be awkward to use. However, aerc came with -some really nice features for software development which aren&#8217;t available in -Claws Mail. Watch the video at the link for aerc above to see those features in -action.</p> - -<p>Sending emails with <code>git send-email</code> is easy and switching to Claws Mail -required no changes to my workflow because it does not interact with an email -client at all. On the other hand, patches sent to me do end up in my email -client so I needed a way to quickly and easily apply the patches I receive. -Luckily, it&#8217;s fairly easy to do this with Claws Mail since it is quite -extensible.</p> - -<p>First, I needed to write a small script to parse the email and extract the -repository name from the subject line so the patch can be applied to the -correct repository. Then, the script <code>cd</code>s into the repository and uses <code>git am</code> -to apply the patch. Here is the script:</p> - -<pre><code>#!&#47;bin&#47;sh - -projectsDir="$HOME&#47;Documents&#47;projects" -patchFile="&#47;tmp&#47;patch" - -IFS=&#39;&#39; -while read -r line; do - echo "$line" &#62;&#62; "$patchFile" - if echo -n "$line" | grep -q "^Subject:"; then - repo=$(echo "$line" | grep -o &#39;\[PATCH .*\]&#39; | cut -d&#39; &#39; -f2 | tr -d &#39;]&#39;) - fi -done - -echo "Applying patch to: $projectsDir&#47;$repo" -cd "$projectsDir"&#47;"$repo" &#38;&#38; git am "$patchFile" -rm "$patchFile" -</code></pre> - -<p>There are two variables of note: <code>projectsDir</code> and <code>patchFile</code>. <code>patchFile</code> is -simply a temporary file where the script keeps the contents of the email. -<code>projectsDir</code> is the directory in which the script will look to find your -repositories. If you keep your repositories in a different location (e.g. -<code>$HOME&#47;Projects</code>) then you should edit this variable to point to that location.</p> - -<p>Another important note is that the script looks for the repository using the -text that follows the word &#8220;PATCH&#8221; in the subject. When sending emails with <code>git -send-email</code>, you should specify the project name after the &#8220;PATCH&#8221; text so the -person to which you are emailing the patch knows at a glance which repository -your patch is for. If this is done correctly, a subject line will look something -like:</p> - -<pre><code>Subject: [PATCH aerc] Fix whitespace in documentation -</code></pre> - -<p>The script is licensed under the Unlicense, by the way.</p> - -<p>After writing the script, I needed to add an Action in Claws Mail. This can be -done through the top menu by navigating to &#8220;Configuration &#62; Actions&#8230;&#8221; and -creating an action to run a shell command. Prefixing the shell command with the -pipe <code>|</code> symbol will tell Claws Mail to pipe the contents of the body of the -email on which the action is invoked to the command. This is what my action -looks like:</p> - -<figure> - <a href="/img/claws-mail-actions.png"><img src="/img/claws-mail-actions.png" alt="A screenshot of the Actions configuration menu with an action configured with the menu name 'Git Apply Patch' and the Command '|git-apply-patch'."/></a> -</figure> - -<p>I also bound this action to a <a href="">custom keyboard -shortcut</a> -so I can press a key combination which will apply the patch. After running a -shell command, Claws Mail helpfully opens up a window displaying the output of -the command so I can see whether or not the command failed and what went wrong.</p> - -<p>Here is an example of me applying a patch where you can first see a successfully -applied patch, followed by what it looks like when the patch fails to apply:</p> - -<p><video src="/vid/claws-mail-git.webm" alt="A demonstration of applying a git -patch by invoking the action on a patch email in Claws Mail." controls>Your -browser does not support the video tag.</video></p> - -<p>So there you have it: a clean and easy way to apply git patches using Claws -Mail. It&#8217;s even faster than using aerc too, since I only have to type a single -keyboard shortcut instead of typing out whole commands.</p> - ]]></content> - </entry> - - <entry> - <title>Laptops Suck (or Why I Might Get a New MacBook Air)</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2021-08-18T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Laptops%20Suck%20(or%20Why%20I%20Might%20Get%20a%20New%20MacBook%20Air)">Laptops Suck (or Why I Might Get a New MacBook Air)</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-08-18</p> - -<p class="note">TL;DR: Watch this <a -href="">video by Wolfgang's -Channel</a>. It covers just about everything I talk about in this post, -including the negative aspects of the M1 MacBook Air, minus the personal -context and rant about modern laptops.</p> - -<p>If you&#8217;ve been a part of the computing industry in almost any aspect for a -while, you&#8217;ll no doubt know about the trend of laptops becoming worse as time -goes on. What used to be upgradable components became soldered, removable -batteries became internalized and eventually glued in, and build quality -decreased year over year. Nowadays, one seems to have two choices in the PC -laptop market: buy a cheap, creaky mess of plastic with low-performance -internals, or buy a possibly well-built yet overpriced laptop that may perform -well, but does so at the cost of noise and usually battery life.</p> - -<p>Frankly, the only ones offering a viable alternative to this mess is Apple.</p> - -<p>Yep, you heard me right.</p> - -<p>Apple used to be just as bad as the rest: you used to get an overheating, -<em>horrendously</em> overpriced (a fully-specced 16&#8221; MacBook Pro would run you $4,000 -USD!) laptop with a terrible keyboard, but with their M1 chip this has changed -completely. You can now get a laptop that not only has outstanding build -quality, all-day battery life, an excellent screen, a great keyboard, and -<strong>desktop-level</strong> performance, but at <strong>half the price</strong> of comparable PC -laptops while also being <strong>fanless</strong>.</p> - -<p>If that hasn&#8217;t yet convinced you, keep reading.</p> - -<h2 id="Price%20to%20Performance">Price to Performance</h2> - -<p>I think we can all agree that Macs had pretty terrible price to performance -when they used Intel processors. Given that a 2020 base model MacBook Air was -$999 USD yet had a CPU that fared not much better than my current Lenovo -Thinkpad T420s in benchmarks and overheated so fast you couldn&#8217;t even get -remotely close to its full performance&#8230; yeah, that was pretty bad. However, -this has completely changed with the M1. Now we have a $999 laptop with -performance comparable to many Ryzen desktop systems that sips power and, yes -will heat up if you&#8217;re doing heavy tasks, but won&#8217;t take massive hits to -performance just because it can&#8217;t handle the heat.</p> - -<figure> - <a href="/img/m1-cpubenchmark.png"><img src="/img/m1-cpubenchmark.png" - alt="Benchmark comparison of the M1 chip next to several Ryzen desktop - chips on"/></a> - <caption><a href="">Source of this comparison.</a></caption> -</figure> - -<p>In the image above, the M1 is compared to the Ryzen 5 1600 (the same CPU I have -in my desktop computer from 2017), and the Ryzen 5 3600X, Ryzen 5 5600X, and -Ryzen 9 5950X. This benchmark clocks the M1 chip at being overall faster than -the Ryzen 5 1600, and even still beating the Ryzen 9 5950X in single-core -computations (though, of course, the 32 threads in the 5950X means it&#8217;s much -better at multi-threaded stuff than the M1 with its 8). That means this mobile -CPU which can fit in a fanless system and draws a meagre 15.1 Watts is more -powerful than a 65 Watt TDP desktop CPU from 2017 and 2018 as well as -competitive in single-core tasks with even recent Ryzen CPUs.</p> - -<p>Further videos on the internet comparing performance such as <a href="">this video from -LTT</a> and <a href="">this video from -Wolfgang&#8217;s Channel</a> shows that, -while the M1 trades blows with its AMD and Intel counterparts in some cases, it -drastically outperforms almost all of the competition. For most of what I will -be doing with the PC, the M1 Air absolutely blows my existing computers out of -the water in terms of performance for less than the amount of money I spent on -my desktop system in 2017 and in a—I can&#8217;t stress this enough—<strong>fanless -laptop</strong>.</p> - -<h2 id="Build%20Quality%20and%20Keyboard">Build Quality and Keyboard</h2> - -<p>Macs tend to have excellent physical build quality. There is little to no flex -of the chassis when typing on the keyboard, the screen doesn&#8217;t wobble when you -adjust it or while you&#8217;re typing, and you can hold the laptop by a corner -without creaking plastic noises. Since they switched to their Magic Keyboard™®© -from their utter disaster the Butterfly Keyboard™®©, their keyboards also feel -very nice to type on again and won&#8217;t spontaneously break from normal usage.</p> - -<p>According to a friend of mine who switched from a Thinkpad X1 Carbon Gen. 6 to -an M1 MacBook Air, the keyboard is miles better than not only that, but also -Cherry MX switches. According to the aforementioned video from Wolfgang&#8217;s -Channel, the keyboard is not as good as his Thinkpad X1 Carbon&#8217;s. So, while it -does seem to be a matter of personal preference, if this keyboard is anything -like their early 2010s MacBook keyboards (a keyboard I have actually used) then -it will feel, to me, even better than even my T420s keyboard.</p> - -<h2 id="Fanless%20Operation">Fanless Operation</h2> - -<p>I know I keep going on about how the Air is fanless, but that&#8217;s actually -something I would really like to have in a laptop. My current T420s is hot and -loud and it really shows it. Just sitting on the desktop, at idle, the CPU is -at about 45°C with the fan audible. When I&#8217;m browsing the web, it easily spikes -to 60% or 80% utilization, and it&#8217;s not uncommon for the CPU to hit 85°C and -the fan to be going full-speed if I&#8217;m flipping back and forth between tabs or -on any particularly heavy tabs (yes, I&#8217;ve cleaned out and re-pasted this -computer&#8230; twice). This is such a problem that my laptop will overheat if I -have it on my lap without wearing long pants (i.e. the bottom of the laptop is -touching my legs) for an extended period of time and the amount of heat put -out by this machine has even bothered people who sit next to me as I use my -computer. Modern laptops might be better, but they&#8217;re still annoyingly noisy -when doing anything intensive.</p> - -<p>Having a fanless laptop will certainly be a luxury. When using my laptop on the -couch or in bed, I won&#8217;t have to worry about whether or not the fans can -breathe, I won&#8217;t have to worry about the fan noise of my laptop or the blast of -heat shooting out the side annoying anybody near me, and I won&#8217;t have to worry -about cleaning out the computer every two to three years just to keep it -running well.</p> - -<h2 id="The%20Screen">The Screen</h2> - -<p>Since Apple released their Retina™®© displays, they have been known for making -stunningly good displays. They continue this trend with the M1 MacBooks by -putting a 2560x1600 (that&#8217;s a 16:10 display ratio, much nicer than 16:9 for -productivity), in a 13.3&#8221; screen for a wonderfully crisp 227 PPI. Not only will -this be way better than my current 1600x900 display in a 14&#8221; screen, it will -also be far better than the 1920x1080 displays one could normally get on -competing laptops (without spending out a lot more money).</p> - -<p>A good screen with sharp text is something I&#8217;ve wanted for a long time since -using 4K 27&#8221; displays at work and since I read <a href="">this blog post by Nikita on about better monitors</a>. It makes a -huge difference, especially for those who work primarily with text (me) in -terms of comfort and clarity.</p> - -<h2 id="Battery%20Life">Battery Life</h2> - -<p>One thing that Apple has pretty much always been good at is jamming massive -batteries into their laptops. If I had to guess based on pictures of internals, -more than 50% of the internal space of a MacBook is taken up by batteries. This -gives them battery lifetimes often much greater than competing laptops of -similar performance. In the case of the M1, this is dialed up to the maximum -because they combined their regular massive battery capacity with a chip that -sips power. One can easily go a full day using their M1 MacBook without needing -to charge their laptop. This is a huge upgrade from my Thinkpad which gets -about 1 hour of battery life on a replacement battery purchased just one year -ago (turns out that having a CPU that gets hit with regular near-100% -utilization is not great for battery life).</p> - -<h2 id="MacOS">MacOS</h2> - -<p>I know a lot of Linux and Windows users look at MacOS and think: &#8220;How could -anybody use <em>that</em>!?&#8221; I know, I used to be one of them. At work when I got a -Mac (a 2013 Mac Pro, to be precise) I was just endlessly frustrated at how -MacOS felt. In reality, I just had a closed mind and wanted to hate it, so I -did. Of course, a completely different operating system and desktop environment -requires some effort to learn and get used to; exactly what we tell people -switching over from Windows to Linux.</p> - -<p>In reality, MacOS is a competent *nix system. It&#8217;s based on Darwin BSD, has zsh -as a default shell—with others also installed, has its own package manager -<a href="">homebrew</a>, and has a perfectly competent terminal emulator. -In reality, I can do everything I would want to do on my computer on MacOS -without having to go through the hoops required on Windows.</p> - -<p>Not to mention, my printer+scanner will actually work without endless fiddling -or needing to reboot into Windows.</p> - -<h2 id="But%20It&amp;#8217;s%20Apple!!!">But It&#8217;s Apple!!!</h2> - -<p>Yeah, I know. Apple is not a good company. They are consistently against <a href="">right -to repair</a>, -lock down the upgradablilty and repairability of their products, and the -majority of the operating system is proprietary (though, it&#8217;s worth noting that -they&#8217;re still far better than Microsoft when it comes to <a href="">their open source -efforts</a>, having made and released WebKit, CUPS, -Bonjour, and more).</p> - -<p>But this isn&#8217;t much different than most of the PC manufacturers. With many -modern laptops you are quite limited in terms of what you can upgrade. For -most, you can upgrade the SSD and the RAM and that&#8217;s about it. Many parts for -discontinued laptops are also hard to come by or expensive, unless they were -insanely popular.</p> - -<p>It&#8217;s also worth noting that, in the case of the M1, you can&#8217;t upgrade the RAM -because it is a system-on-chip (SoC) design similar to how the Pinebook and -most ARM-based computers are built. However, that&#8217;s not really an issue since -MacOS handles low memory conditions very well and I personally have no need for -more than 16GB of RAM. I haven&#8217;t needed more than 16GB of RAM for half a decade -and I don&#8217;t see that changing anytime soon given that I routinely use less than -4GB on my workstations.</p> - -<h2 id="Alternative%20Options">Alternative Options</h2> - -<p>So, if I&#8217;m looking for a high quality, performant laptop for a good price then -what are my other options in today&#8217;s market?</p> - -<p>If I really want a fanless design I could either get a Chromebook or a -Microsoft Surface. The Chromebooks universally suffer from terrible build -quality or awful performance and the Surface laptops might be quite good -(relatively speaking), but then I&#8217;m stuck with a product locked down by -Microsoft and I much prefer MacOS to Windows. Surface computers also suffer -from exactly the same repairability issues as Apple computers.</p> - -<p>If I want something that does perform well and is well-built then I suppose I -could go with a Dell XPS. They are &#8220;the MacBooks of the PCs&#8221; in terms of their -build quality after all. But they&#8217;re also over twice the price as the M1 Air -with worse performance and they can get very loud when doing intensive tasks -like compiling software. If you&#8217;re thinking: &#8220;Why not get a Thinkpad,&#8221; it&#8217;s -because modern Thinkpads have terrible build quality and are also monumentally -more expensive than these new MacBooks for the performance you get. They suffer -from the same problems as the XPS but aren&#8217;t even well-built.</p> - -<p>Finally, in terms of a decent laptop that is repairable and upgradable, there -is the new Framework laptop. While this does seem quite promising, it&#8217;s hot (it -has an Intel processor) and doesn&#8217;t offer anywhere near the price to -performance of these new MacBooks (once again, it has an Intel processor), -though they are at least a strong competitor. The build quality, while decent, -is also <a href="">still lacking compared to -Apple</a>.</p> - -<h2 id="Summary">Summary</h2> - -<p>All in all, the pros of an M1 MacBook Air far outweigh the cons. Let&#8217;s go over them:</p> - -<ul> -<li><strong>Fanless</strong> - It&#8217;s silent and no need to worry about airflow or cleaning</li> -<li><strong>Excellent</strong> build quality - Not a plastic piece of e-waste (looking at you, Clevo chassis-resellers)</li> -<li><strong>Great battery life</strong> - Easily all-day battery life, even when using it intensively</li> -<li><strong>Good keyboard</strong> - Something that I&#8217;ll actually enjoy typing on when I&#8217;m away from home</li> -<li><strong>Outstanding Performance</strong> - Competitive with Ryzen 7 2700s in multi-core, and the latest Ryzen processors in single-core performance</li> -<li><strong>No T2 Chip</strong> - The M1 computers no longer have the annoying T2 chip, so other OSes could conceivably be installed in the future</li> -<li><strong>Unbeatable Price</strong> - Competing laptops are twice the price or more, for worse performance, build quality, noise, or a combination of those</li> -<li><strong>No Touchbar</strong> - I don&#8217;t like the touchbar, so I&#8217;m glad the Air doesn&#8217;t have it</li> -<li><strong>Thin as heck</strong> - It&#8217;s a laptop as powerful as a desktop, thinner than the screen on my T420s</li> -</ul> - -<p>And what about the cons:</p> - -<ul> -<li><strong>Apple</strong> - They&#8217;re a bad company, and it doesn&#8217;t make me feel good to buy something from them</li> -<li><strong>Non-replaceable SSD</strong> - The SSD could wear out and you can&#8217;t easily replace them which would render the computer useless, but this probably won&#8217;t matter in the lifetime of the device, since one would have to write terabytes of data to their SSD each day to even come close to wearing it out in a couple of years.</li> -</ul> - -<p>I&#8217;ve never owned a Mac (or any Apple product, for that matter). I currently own -a T420s because I like the aesthetics and keyboards of old Thinkpads but, -honestly, it&#8217;s just not cutting it anymore. A decade old computer is finally -starting to show its age and it&#8217;s time for an upgrade. When nearly every other -option on the market (including recent second-hand laptops) aside from the M1 -Macs kinda suck, well, I&#8217;m going to choose the best option for the money I have -and right now that looks like it&#8217;s the M1 MacBook Air.</p> - ]]></content> - </entry> - - <entry> - <title>Mastodon Is Dead, Long Live Misskey 🍮</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2021-08-05T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Mastodon%20Is%20Dead,%20Long%20Live%20Misskey%20%F0%9F%8D%AE">Mastodon Is Dead, Long Live Misskey 🍮</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-08-05</p> - -<p>Okay, so, Mastodon isn&#8217;t <em>actually</em> dead, but some recent happenings and a -long-standing trend of the lead developer ignoring features beneficial to -smaller instances have led many to start looking at other options, be it forks -of Mastodon, or other software entirely. Recently, I and many others have taken -a look at <a href="">Misskey</a>, an alternative -Fediverse software that also uses ActivityPub and can communicate with both -Pleroma and Mastodon instances.</p> - -<h2 id="What&amp;#8217;s%20Going%20On%20With%20Mastodon%20(and%20Pleroma)">What&#8217;s Going On With Mastodon (and Pleroma)</h2> - -<p>Recently, Eugen, the lead developer of Mastodon (also known as Gargron) -released an <a href="">official Mastodon iOS -app</a> which lacks basic features which -many users deem important, especially for smaller communities. As of the time -of writing, the app seems to intentionally be missing the ability to view the -Local timeline (the timeline consisting of posts only from users of the -instance you are on), and the Federated timeline (posts from all other -instances which have federated with the one you are on). -[<a href="">Source</a>]</p> - -<p>This, plus the tendency for Gargron to deny useful patches such as <a href="">Local-only -posting</a> and <a href="">configurable -character limits</a>, has led to -forks, such as <a href="">glitch-soc</a>, and the usage -of other software, such as <a href="">Pleroma</a>.</p> - -<p>For the time being, things seems to still be&#8230; okay. Mastodon is well-funded -and nothing has yet changed for the desktop site or the software as a whole, -but this could change at any moment depending on where Gargron wishes to take -his software. This isn&#8217;t <em>necessarily</em> a bad thing depending on his goals for -the software, but for those of us who want the Fediverse to be made up of a -bunch of smaller, more community-focused instances as opposed to a set of large -Twitter-like structures, the future doesn&#8217;t look hopeful.</p> - -<p>Furthermore, Pleroma&#8217;s development funding has recently been cut, stagnating -development and disappointing many users who were looking forward to exciting -new features such as groups. There are&#8230; other issues with Pleroma, but I will -not talk about them here.</p> - -<h2 id="Okay,%20So%20What%20Even%20Is%20Misskey?">Okay, So What Even Is Misskey?</h2> - -<p>To summarize, Misskey is another bit of Fediverse software, similar to Mastodon -and Pleroma, but with far more features, and a far nicer and more -polished-feeling UI. It is currently developed by one person, -<a href="">syuilo</a> and is supported by a small amount of -corporate funding, combined with some <a href="">Patreon</a> -contributions.</p> - -<p>At a glance, here are some of the features it has:</p> - -<ul> -<li>Clips - basically public bookmarks</li> -<li>Drive - view all media you&#8217;ve uploaded to the server, re-use images without -having to re-upload them, and more</li> -<li>Multiple UI modes built in to the front-end</li> -<li>Federated chat</li> -<li>MFM - Misskey-Flavoured Markdown, taking post markup to a whole new level</li> -<li>Excellent admin panel features</li> -<li>Custom timelines, channels, and groups</li> -<li>Excellent UI customization</li> -</ul> - -<p>You may have heard of some trouble with Syuilo facing burnout and funding being -cut. This is not untrue, but since Syuilo announced this, they have received -some more funding, and have re-structured the way they develop the project. The -project is far from dead, and with the recent boost in popularity, it could see -development pick up again—hopefully in a healthier way this time.</p> - -<h2 id="How%20Is%20It%20From%20an%20Admin%20Perspective?">How Is It From an Admin Perspective?</h2> - -<p>Having administrated Mastodon, Pleroma, and now Misskey for single-user -instances, I can confidently say that Mastodon is the heaviest and Pleroma and -Misskey are much lighter. Misskey is heavier than Pleroma, but not by terribly -much; both are far lighter than Mastodon. There are also murmurings -that Misskey scales better than Pleroma (which already scaled far better than -Mastodon), though more insight is probably needed from the admins experienced -with Pleroma.</p> - -<h3 id="Resource%20Usage">Resource Usage</h3> - -<p>As far as my own servers: at this moment, the Pleroma server (Debian Buster) is -using 685MB of RAM with a load average of <code>0.01 0.04 0.07</code> whereas the Misskey -server (Debian Bullseye) is using 848MB of RAM with a load average of <code>0.35 0.18 -0.15</code>. Both are running on Vultr VPS instances.</p> - -<p>Misskey tends to have more big bursts of CPU usage, so, in my experience, it is -helpful to have more than one CPU core for your Misskey server. You also need -to configure swap or have a minimum of 2GB of RAM to compile Misskey because it -is a Nodejs project. You can probably get away with a $10&#47;mo VPS from Vultr, -DigitalOcean, or Linode for servers with a handful of people, but you will -probably want to opt for the $20&#47;mo VPSes for between 15 and 50 people. For -example, @razzlom\ runs a Misskey instance with 50 users -(approximately 10 active users) without ElasticSearch and they report that this -uses 50-60% of 8GB of RAM and 1-10% of 4 AMD EPYC cores.</p> - -<h3 id="Admin%20Features">Admin Features</h3> - -<p>From what I and others have seen so far, the admin features of Misskey are -amazing and the admin UI is much better than any other Fediverse software so -far.</p> - -<p>For example, you can see the size of various database tables, the server logs, -the server resource usage, ALL media that has been uploaded to your server, and -more from within the UI. Take a look:</p> - -<figure> - <a href="/img/misskey/admin-overview.png"><img src="/img/misskey/admin-overview-thumb.png"></a> - <figcaption>The Admin Overview - Showing an overview of server resource usage and activity</figcaption> -</figure> - -<figure> - <a href="/img/misskey/federation.png"><img src="/img/misskey/federation-thumb.png"></a> - <figcaption>The Federation Panel - Showing stats about which servers might be down</figcaption> -</figure> - -<figure> - <a href="/img/misskey/database.png"><img src="/img/misskey/database-thumb.png" alt="The Admin Overview"/></a> - <figcaption>The Database Panel - Showing stats about various table sizes</figcaption> -</figure> - -<p>Some other excellent features which are either missing from Mastodon, Pleroma, -or both are:</p> - -<ul> -<li>server-wide announcements,</li> -<li>customizable post character limits (no more 1&#47;X Mastodon threads!!),</li> -<li>the ability to promote a post instance-wide,</li> -<li>the ability to present advertisements to your users (assuming they are willing to accept that) which can help with funding your instance,</li> -<li>the ability to easily monitor the job queue of the server,</li> -<li>and the search does actually work well enough even without having ElasticSearch installed, and without needing to enable Postgres RUM indices like in Pleroma.</li> -</ul> - -<h2 id="How%20Is%20It%20From%20a%20User%20Perspective?">How Is It From a User Perspective?</h2> - -<p>In short, it&#8217;s unlike any other Fediverse software that currently exists. It is -packed full of useful features and, even though some stuff can definitely be -improved, it is exciting to see just what Fedi can be.</p> - -<h3 id="Timelines">Timelines</h3> - -<p>With Misskey, you have the same sorts of timelines you expect from other -Fediverse software. The table below summarizes which posts each timeline -displays (note that &#8220;Home&#8221; post visibility is equivalent to &#8220;Unlisted&#8221; in other -Fediverse software):</p> - -<table> <thead> -<tr> - <th colspan="2">Source</th> - <th colspan="4">Timeline</th> -</tr> -<tr> - <th>User</th> - <th>Post Visibility</th> - <th>Home</th> - <th>Local</th> - <th>Social</th> - <th>Global</th> -</tr> -</thead> <tbody> -<tr> - <td rowspan="3">Local (Following)</td> - <td>Public</td> - <td>X</td> - <td>X</td> - <td>X</td> - <td>X</td> -</tr> -<tr> - <td>Home</td> - <td>X</td> - <td>&nbsp;</td> - <td>X</td> - <td>&nbsp;</td> -</tr> -<tr> - <td>Followers-only</td> - <td>X</td> - <td>X</td> - <td>X</td> - <td>X</td> -</tr> -<tr> - <td rowspan="3">Remote (Following)</td> - <td>Public</td> - <td>X</td> - <td>&nbsp;</td> - <td>X</td> - <td>X</td> -</tr> -<tr> - <td>Home</td> - <td>X</td> - <td>&nbsp;</td> - <td>X</td> - <td>&nbsp;</td> -</tr> -<tr> - <td>Followers-only</td> - <td>X</td> - <td>&nbsp;</td> - <td>X</td> - <td>X</td> -</tr> -<tr> - <td rowspan="3">Local (Not Following)</td> - <td>Public</td> - <td>&nbsp;</td> - <td>X</td> - <td>X</td> - <td>X</td> -</tr> -<tr> - <td>Home</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> -</tr> -<tr> - <td>Followers-only</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> -</tr> -<tr> - <td rowspan="3">Remote (Not Following)</td> - <td>Public</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>X</td> -</tr> -<tr> - <td>Home</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> -</tr> -<tr> - <td>Followers-only</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> - <td>&nbsp;</td> -</tr> -</tbody> </table> - -<p>This behaviour is, in practice, slightly different than Mastodon, and quite -different from Pleroma.</p> - -<h3 id="Health">Health</h3> - -<p>Overall, Misskey seems to encourage more genuine social interaction compared to -other Fediverse software and traditional social media. For example, there are -no favourites on Misskey. You may see the &#8220;Favourite&#8221; option in the menu -underneath a post, but this is simply a bookmark function. It is truly saving a -post that you really like as opposed to behaving, in practice, as a -meaningless &#8220;Like&#8221; button or read-receipt.</p> - -<p>Instead, Misskey features emoji reactions to posts as the main way (aside from -boosting) of interacting with posts. You can react to a post with a regular -Unicode emoji (which other Fediverse software that supports this can see) or -with custom emoji (which only Misskey users can see). This generally results in -much more thought put into how you wish to react to a post, with &#8220;Favourites&#8221; -from users of other software simply showing up as the thumbs up emoji.</p> - -<p>Furthermore, the style of timeline that Misskey and Mastodon have tend to -encourage more healthy interaction and consumption than Pleroma&#8217;s. Even though -all social media is unhealthy to the degree that many of us use it, Pleroma&#8217;s -timeline encouraged doomscrolling and negative interaction in a way that -neither Mastodon&#8217;s nor Misskey&#8217;s do because it shows you absolutely everything -that people you follow post which tends to drag you into threads that you -really don&#8217;t involve you or need to involve you. I can personally attest to -this, since I have been hosting and using Pleroma for over a year now.</p> - -<h3 id="Groups,%20Channels,%20Pages,%20Clips,%20Galleries,%20and%20Antennas%E2%80%94Oh%20My">Groups, Channels, Pages, Clips, Galleries, and Antennas—Oh My</h3> - -<p>This Misskey&#8217;s bread and butter in my eyes and what makes it stand out so -strongly from the other ActivityPub-based software. There is a lot of fun to -have with these features, though not all of them are federated just yet.</p> - -<p>Groups are (currently) local-only collections of users to which you can send -messages. Think of it like a group chat in applications like Telegram, Matrix, -or channels like in IRC.</p> - -<p>Channels are local-only posting groups to which you can post notes to only the -specific people who are subscribed to that channel.</p> - -<p>Pages are static pages on which you can put almost anything you want, including -writing AiScript (a Misskey-specific scripting language) to add functionality -to the page. Think of it a bit like GitHub Pages or something similar. You can -then link these pages, and others can view them on your instance. <a href="">Here is an -example of a page</a>.</p> - -<p>Clips are like bookmarks but they can be organized and made public. Think of -them a bit like Twitch or YouTube livestream clips, though text-focused -instead.</p> - -<p>Galleries are collections of public photos that others can see when they look -at your gallery on your instance. The galleries themselves are not yet -federated, so you do have to go to the person&#8217;s instance to see their gallery, -but it provides an Instagram-like look at the media they&#8217;ve publicly uploaded -and chosen to make available.</p> - -<p>Antennas are possibly one of the coolest features. They are effectively custom -timelines. You can make an antenna that just shows posts from specific users -and notifies you when they post something new, you can make an antenna that -collects posts containing or excluding certain key words, or you can make an -antenna that collects only posts with files attached. If you want to emulate -Pleroma&#8217;s timeline behaviour, you can even make an antenna consisting of &#8220;Notes -from following users&#8221; with &#8220;Show replies&#8221; checked.</p> - -<h3 id="Your%20Drive">Your Drive</h3> - -<p>Your drive is possibly one of <em>the</em> single most useful features on Misskey. You -are allocated a (configurable by the server admins) amount of storage space you -can use for files uploaded to your drive and you can store whatever you&#8217;d like -in there. If you want to upload a bunch of memes to have them easily on hand -whenever you want to react to someone or if you want to simply re-share a file -you shared before without having to re-upload it to the server or dig through -your old posts, you can do that easily with the drive.</p> - -<figure> - <a href="/img/misskey/drive.png"><img src="/img/misskey/drive-thumb.png"/></a> - <figcaption>My Drive with an emoji folder and several other images.</figcaption> -</figure> - -<h3 id="Apps">Apps</h3> - -<p>App support is a little limited at the moment. Since Misskey is not compatible -with the Mastodon API, one can&#8217;t use apps like Tusky or Tootle with it. There -are, however, a few apps available. Namely -<a href="">SocialHub</a> for iOS and -<a href="">Milktea</a> for Android.</p> - -<p>One can also use Misskey in the browser, and it provides a reasonably snappy -experience, but will most likely use more data than a dedicated app.</p> - -<h3 id="Other%20Various%20User%20Features">Other Various User Features</h3> - -<p>Some other excellent user-facing features which are either missing from -Mastodon, Pleroma, or both are:</p> - -<ul> -<li>an excellent threading model (similar to Reddit) where it&#8217;s much easier to follow the flow of a conversation,</li> -</ul> - -<figure> - <a href="/img/misskey/threading.png"><img src="/img/misskey/threading-thumb.png" alt="A threaded conversation in Misskey."/></a> -</figure> - -<ul> -<li>MFM (Misskey-Flavoured Markdown) which is like markdown on steroids and even supports LaTeX formatting,</li> -</ul> - -<figure> - <a href="/img/misskey/mfm.png"><img src="/img/misskey/mfm-thumb.png" alt="A post with MFM showing off LaTeX."/></a> -</figure> - -<ul> -<li>the ability to have custom CSS for your client, such as in the example below which makes it so that post parents are shown on hover only,</li> -</ul> - -<pre><code>.tabs ~ * div[tabindex="-1"] { - overflow: visible; - contain: none; -} - -.tabs ~ * div[tabindex="-1"] .reply-to { - position: absolute; - left: 2%; - bottom: calc(100% - 1em); - max-width: 85%; - box-sizing: border-box; - background: var(--panelHighlight); - z-index: 1000; - padding: 20px 24px; - box-shadow: 0 .5em 2em rgba(0, 0, 0, .5); - opacity: 0; - visibility: hidden; - transition: opacity .2s, visibility 0s ease .2s; -} - -.tabs ~ * div[tabindex="-1"]:hover .reply-to { - opacity: 1; - visibility: visible; - transition: opacity .2s ease .5s, visibility 0s ease .5s; -} -</code></pre> - -<ul> -<li>working and federating pinned posts (which Pleroma lacks),</li> -<li>good handling of posts that have been deleted (no more accidentally posting a reply to a deleted post, or needing to refresh to have that post disappear from your timeline!),</li> -<li>automatically marking media as sensitive when you add a CW to your post (something every other bit of software except PleromaFE does, despite multiple requests to at least have the ability to do that),</li> -<li>the option to auto-approve follow requests from people you follow,</li> -<li>multiple different UI layouts built into the software,</li> -<li>a relatively performant UI (as long as animations and blur are disabled),</li> -<li>and an extremely customizable UI, with widgets!</li> -</ul> - -<figure> - <a href="/img/misskey/widgets.png"><img src="/img/misskey/widgets.png" alt="My sidebar with some widgets."/></a> -</figure> - -<h2 id="The%20Rough%20Parts">The Rough Parts</h2> - -<h3 id="On%20The%20Admin%20Side">On The Admin Side</h3> - -<p>Of course, not everything is without its caveats. For those used to Pleroma&#8217;s -MRF system, Misskey doesn&#8217;t have anything like that. Admins can defederate from -a domain and can silence and suspend individual users, but there are no options -for a user to silence a whole instance themselves or for an admin to only strip -media from an instance, for example.</p> - -<p>On one hand, this does limit what moderators can do for their instance, but, on -the other hand, if an instance really is causing enough trouble to bother your -users and their moderators aren&#8217;t responding, just blocking them is probably -what you&#8217;ll want in the end given that, more often than not, those kinds of -instances just keep causing more and more trouble. It also keeps your options -clear and simple.</p> - -<p>One of the other downsides to administrating a Misskey instance at the moment -is the lack of bulk emoji import support. Although it&#8217;s trivially easy to add, -tag, and categorize emoji—even from remote instances—it is currently impossible -to import a large amount at once. What you will probably want to do instead is -go to your Drive, create some folders to organize your emoji, upload them all -from your PC into the folders (you can upload more than one at a time), and then -go to the Custom Emoji settings, choose import from Drive, and click on all of -the emoji you wish to import.</p> - -<p>This isn&#8217;t such a big deal if you only have maybe a couple hundred emoji at the -most, but is more tedious than it could be. The same goes for categorizing and -tagging those emoji.</p> - -<p>Finally, there is currently an issue where Misskey has trouble federating with -profiles that have bios which are too long. This mostly affects people using -Pleroma, since Mastodon caps bios at 500 characters and Pleroma sends a user&#8217;s -bio to the remote server as (a lot of) HTML so it&#8217;s hard to tell when your bio -is too long. Luckily, there is a simple patch you can easily apply to your -instance which solves this problem by truncating fields which are too long for -Misskey. An official fix is in the works, but for now it&#8217;s very easy to drop -this in the <code>misskey</code> folder, <code>git apply</code> it, and re-build. You can <a href="">download -the patch -here</a>.</p> - -<h3 id="On%20The%20User%20Side">On The User Side</h3> - -<p>Currently, there are a few things which could be improved. For one, there is no -option to limit streaming of new posts when you are scrolled to the top of your -timeline. Unlike in Pleroma, where you can choose to have posts stream in as -long as you are scrolled up or click a button when you are ready to see new -posts, in Misskey this is not an option which can be frustrating as posts move -down as you were reading them.</p> - -<p>Another minor issue is that Antennas don&#8217;t show your own posts, unlike the -other timelines. Although this isn&#8217;t a huge deal, many people like to see their -posts as part of the conversation so it&#8217;s a bit weird to type a response and -not see it appear in the custom timelines.</p> - -<p>Also, mutes can be a little bit leaky. If you have a user muted, you can still -see conversations involving them since it seems to only check post authors and -doesn&#8217;t include mentions. A boost of a reply to a post of a user you have muted -can also make it through the filter.</p> - -<p>Finally, there are a few minor other UI issues such as notification dots -getting stuck on (though you can hide them with custom CSS or mark all -notifications read in the settings), some modals not being dismissable with the -Esc shortcut key, and there is no option to play gifs or other media only when -you hover over them.</p> - -<p>Overall, these issues haven&#8217;t bothered me much and I consider them pretty minor -compared to the benefits of Misskey, though your experience might differ.</p> - -<h2 id="In%20Conclusion">In Conclusion</h2> - -<p>Although there are things yet unfinished with Misskey (as there is for all the -other Fediverse software), it is already miles ahead of the rest of the -Fediverse software I&#8217;ve tried. Yes, there are some rough edges and there might -be UI elements or UX aspects that some don&#8217;t like or prefer, but at least for -me, and for many others who have tried it over the past couple days, Misskey -really seems like the future of the Fediverse; other software feels like it&#8217;s -stuck in an old paradigm, trying to copy too much what Twitter or 4chan are.</p> - -<p>Plus, since the seemingly overnight switch of so many users (at least in my -circle) to Misskey, there has been a lot of work to figure out features, -document things more thoroughly, and provide things like the aforementioned -patch which fixes federation for people with long bios. Many of the issues I -have with Misskey are minor and can be readily fixed.</p> - -<p>If you check out Misskey and like it, please consider <a href="">donating to -Syuilo</a> to keep development going. The future -is bright for Misskey.</p> - ]]></content> - </entry> - - <entry> - <title>Migrating from nginx to OpenBSD's httpd and relayd</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2021-02-17T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Migrating%20from%20nginx%20to%20OpenBSD&amp;#8217;s%20httpd%20and%20relayd">Migrating from nginx to OpenBSD&#8217;s httpd and relayd</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-02-17</p> - -<p><center><figure> - <a href="/img/openbsd-logo.png"><img src="/img/openbsd-logo.png" alt="The OpenBSD logo."/></a> - <figcaption>This logo is subject to the license at: <a href=""></a></figcaption> -</figure></center></p> - -<p>Having set up my mail server on OpenBSD, I&#8217;ve been very satisfied with the -cohesiveness of the operating system; it has been a breeze to administrate. -Since certbot just stopped working randomly on my previous server running Debian -10 and nginx, I took it as an opportunity to try out OpenBSD for hosting my -website and reverse proxy. OpenBSD includes two daemons written by the OpenBSD -developers—httpd and relayd—for just those purposes. They also provide -acme-client as an alternative to certbot. All of this was done on OpenBSD 6.8.</p> - -<p>Below is my httpd configuration. This contains configurations for renewing the -TLS certificate as well as serving both -<a href=""></a> and -<a href=""></a> with redirects as needed. If I -wanted to, I could also split these into separate config files and use the -<code>include</code> directive.</p> - -<pre><code>types { - include "&#47;usr&#47;share&#47;misc&#47;mime.types" -} - -# For certificate renewal -server "" { - listen on * port 80 - location "&#47;.well-known&#47;acme-challenge&#47;*" { - root "&#47;acme" - request strip 2 - } - location * { - block return 302 "https:&#47;&#47;$REQUEST_URI" - } -} -server "" { - listen on * port 8080 - location * { - block return 302 "https:&#47;&#47;$REQUEST_URI" - } -} - -# WWW.PARITYBIT.CA -server "" { - listen on * port 8080 - root "&#47;" - location "&#47;" { - request rewrite "&#47;html&#47;home.html" - } - location match "&#47;.*%.html" { - request rewrite "&#47;html&#47;$REQUEST_URI" - } - location match "&#47;([^%.]+)$" { - request rewrite "&#47;html&#47;%1.html" - } -} - -server "" { - listen on * port 80 - location * { - block return 302 "https:&#47;&#47;$REQUEST_URI" - } -} - -# FTP.PARITYBIT.CA -server "" { - listen on * port 8080 - root "&#47;" - directory auto index -} - -server "" { - listen on * port 80 - location * { - block return 302 "https:&#47;&#47;$REQUEST_URI" - } -} -</code></pre> - -<p>In the above configuration, there are two <code>location match</code> directives in the -<a href=""></a> server. The first matches any -request for a path ending in <code>.html</code> and rewrites the request to serve the -webpages from the <code>html</code> subdirectory as opposed to trying to find them in the -root folder of the website.</p> - -<p>The second matches any request which doesn&#8217;t have a file extension and appends -<code>.html</code> to the requested resource path. This allows me to replicate nginx&#8217;s -<code>try_files</code> command where one can tell it to search for files which look like -<code>$DOCUMENT_URI.html</code> and it means that users don&#8217;t have to type out the <code>.html</code> -extension when visiting a page on my site.</p> - -<p>Below is my relayd configuration. I run multiple services from one IP so I need -to reverse proxy incoming connections to various services on my network. As with -nginx&#8217;s reverse proxying, relayd can handle the TLS connections to each of my -services. I could also reverse proxy the connections to port 80 and redirect -them using relayd, but I felt it was simpler to just let the webserver handle -those directly.</p> - -<p>The reverse proxy for Gemini at the bottom of the configuration is just for -accessing it within my network because of my internal DNS configuration.</p> - -<pre><code>ext_addr = -table &#60;pleroma&#62; { } -table &#60;git&#62; { } -table &#60;matrix&#62; { } -table &#60;www&#62; { } -table &#60;gemini&#62; { } - -# TLS proxy all home services -http protocol "httpsproxy" { - tcp {nodelay, sack, backlog 128} - - tls keypair "" - - return error - - match header set "X-Client-IP" \ - value "$REMOTE_ADDR:$REMOTE_PORT" - match header set "X-Forwarded-For" \ - value "$REMOTE_ADDR" - match header set "X-Forwarded-By" \ - value "$SERVER_ADDR:$SERVER_PORT" - - match response header remove "Server" - match response header set "X-Frame-Options" \ - value "SAMEORIGIN" - match response header set "X-XSS-Protection" \ - value "1; mode=block" - match response header set "X-Content-Type-Options" \ - value "nosniff" - match response header set "Referrer-Policy" \ - value "strict-origin" - match response header set "Content-Security-Policy" \ - value "default-src &#39;none&#39;; \ - base-uri &#39;self&#39;; \ form-action &#39;self&#39; https:&#47;&#47;;; \ - img-src &#39;self&#39; data: https:; \ - media-src &#39;self&#39; https:; \ - style-src &#39;self&#39; &#39;unsafe-inline&#39;; \ - font-src &#39;self&#39;; \ - script-src &#39;self&#39; &#39;unsafe-inline&#39;; \ - connect-src &#39;self&#39; wss:&#47;&#47;; \ - upgrade-insecure-requests;" - match response header set "Strict-Transport-Security" \ - value "max-age=31536000; includeSubDomains" - match response header set "Permissions-Policy" \ - value "accelerometer=(none), camera=(none), \ - geolocation=(none), gyroscope=(none), \ - magnetometer=(none), microphone=(none), \ - payment=(none), usb=(none), \ - ambient-light-sensor=(none), autoplay=(none)" - - pass request quick header "Host" value "" \ - forward to &#60;git&#62; - pass request quick header "Host" value "" \ - forward to &#60;matrix&#62; - pass request quick header "Host" value "" \ - forward to &#60;pleroma&#62; - pass request quick header "Host" value "" \ - forward to &#60;www&#62; - pass request quick header "Host" value "" \ - forward to &#60;www&#62; - pass request quick header "Host" value "" \ - forward to &#60;www&#62; - block -} - -relay "reverseproxy" { - listen on $ext_addr port 443 tls - protocol httpsproxy - forward to &#60;git&#62; port 80 check http "&#47;" code 200 - forward to &#60;matrix&#62; port 8008 check http "&#47;" code 302 - forward to &#60;pleroma&#62; port 8080 check http "&#47;" code 400 - forward to &#60;www&#62; port 8080 check http "&#47;" code 302 -} - -#For Matrix -http protocol "matrix" { - tcp {nodelay, sack, backlog 128} - - tls keypair "" - - return error - - match header set "X-Client-IP" \ - value "$REMOTE_ADDR:$REMOTE_PORT" - match header set "X-Forwarded-For" \ - value "$REMOTE_ADDR" - match header set "X-Forwarded-By" \ - value "$SERVER_ADDR:$SERVER_PORT" - - pass -} - -relay "matrixrevprox" { - listen on $ext_addr port 8448 tls - protocol matrix - forward to &#60;matrix&#62; port 8008 check tcp -} - -relay gemini { - listen on $ext_addr port 1965 - forward to &#60;gemini&#62; port 1965 check tcp -} -</code></pre> - -<p>There is a lot of extra configuration for the HTTP services for setting things -like Content Security Policy and other security headers (what a mess the Web has -become&#8230;). I used the <a href="">Pleroma installation guide for -OpenBSD</a> as a -reference for the CSPs needed for that service.</p> - -<p>As usual, the tools provided by the OpenBSD developers are a breeze to configure -and administrate. Plus the comprehensive, accurate, and complete documentation -provided with the system means that I don&#8217;t have to scour the internet for help -only to find outdated tutorials or complicated documentation.</p> - ]]></content> - </entry> - - <entry> - <title>Flip Phone Challenge Complete</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-12-10T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Flip%20Phone%20Challenge%20Complete">Flip Phone Challenge Complete</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-12-10</p> - -<p>Last week <a href="">I challenged myself to use a flip -phone</a> for one week straight. -It turns out that it really wasn&#8217;t too hard to get rid of my Android phone and -start exclusively using the flip phone. I&#8217;ve decided I&#8217;m going to keep using -this flip phone as long as I can.</p> - -<p>The experience has been great. Calling and texting is incredibly simple. I start -pressing numbers on the keypad and the phone does the thing. I don&#8217;t have to -unlock my phone, tap on an app, then tap on the little keypad button, then -suffer the 500ms delay between pressing a number and having it show up on the -screen. It&#8217;s the little annoyances which add up with modern technology that -makes using relatively limited devices such as a flip phone feel just that much -better.</p> - -<p>I don&#8217;t use my phone at all outside of calling and texting now. I&#8217;ve totally -freed myself from the burden of being always connected and (nearly) always -available. When I turn off my computer that&#8217;s it; I am disconnected from -everything but people who need to urgently call or text me. I also no longer -wake up and check on everything while lying in bed for 20 minutes. I get up, get -ready, then head to my computer. The same goes for falling asleep: when I&#8217;m in -bed to sleep, I sleep. I don&#8217;t lie there for 20-30 minutes browsing things.</p> - -<p>By the time I got to the end of the week, I had only used up ~1&#47;2 of the phone&#8217;s -charge. Part of it is indeed that I don&#8217;t use it nearly as much as I did my -Android phone, but it&#8217;s nice to not have to charge my phone everyday or worry -about it running out of battery by the end of the day.</p> - -<p>The only drawback I can see to using this flip phone instead of a smartphone is -that I won&#8217;t be able to listen to music or podcasts on the go when we all start -having to commute again. It&#8217;s unfortunate, but I could always either get a -portable music player or maybe bust out my cassette-based Walkman again. -(Recording a podcast onto a cassette, then playing it on my commute&#8230; now -that&#8217;s an idea.)</p> - -<p>To sum it all up: I really honestly do not miss my Android phone. It was more a -source of annoyance and distraction than a utility in my daily life. I feel more -free and much happier using a phone that simply can&#8217;t do much but be a phone.</p> - ]]></content> - </entry> - - <entry> - <title>One Week Flip Phone Challenge</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-11-30T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="One%20Week%20Flip%20Phone%20Challenge">One Week Flip Phone Challenge</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-11-30</p> - -<p>Recent frustration with my smartphone has led me to throw it aside (quite -literally, I threw it onto my bed in frustration one day) in favour of using a -good old flip phone again. I&#8217;ve challenged myself to use one for at least one -week to see what the experience is like in 2020.</p> - -<p>I normally carry with me an ASUS Zenfone II Laser Android smartphone running -LineageOS 15.1. It has served me well over the past 5 years and its battery -still lasts me a whole day&#8230; mostly. The things I normally do on my phone are: -call, text, use a Web browser, use the Element, Conversations, and Husky -applications, and check the weather if I&#8217;m bored. I sometimes listen to -podcasts with it but I&#8217;ve stopped in recent months. I also have the OsmAnd~ map -application, but GPS stopped working on my phone some time ago and I rarely, if -ever, open it. I don&#8217;t even take pictures on my phone anymore thanks to some -weird fogging that&#8217;s happened to the camera lens.</p> - -<p>For this challenge, I&#8217;ve chosen a Doro PhoneEasy 612. Pretty much entirely -because it&#8217;s what I had on hand. There&#8217;s nothing special about it, it&#8217;s a -standard flip phone with a 12 key dial pad, some extra buttons, a 2 megapixel -camera, a 2.5mm headphone jack (not 3.5mm), and it charges via Micro-USB like my -existing Android phone. On the inside, it has a 3.7V, 800mAh (2.96Wh) battery, a -mini-SIM card slot (though I was able to position my micro-SIM card just right -to get it to work), and a microSD card slot.</p> - -<figure> - <a href="/img/flip-phone-open.png"><img src="/img/flip-phone-open-thumb.png" - alt="An image of the Doro PhoneEasy 612 lying open on my desk with the - screen on the home page."/></a> -</figure> - -<p>After inserting my SIM card and powering on the phone, it asked me to go through -a setup wizard so that I could set the date and time, ringtones, volume, and so -on. After a couple of minutes, I was on the home screen with the world at my -fingertips. By the way, this phone powers on in under three seconds (!!!) -compared to the minute-and-a-half my Android phone takes.</p> - -<p>This phone comes with a phonebook (which conveniently contained all of my -contacts because I saved my contacts to my SIM card instead of my Android -phone), messaging application, call log viewer, camera application, image -viewer, alarm, organizer&#47;calendar, calculator, FM radio (which only works if you -plug in headphones), In Case of Emergency application (something that stores -useful information about you in case of emergency), games (Tetris and something -called Boxman), and a settings application. All-in-all very bare-bones but it -does everything I think I need.</p> - -<p>So, let&#8217;s see how this goes. One week using just a flip phone. I&#8217;ve even gone so -far as to completely power off my Android phone and put it in a filing cabinet -so I won&#8217;t even use it to browse memes in bed. I predict that this won&#8217;t be too -difficult because we&#8217;re all stuck inside due to the pandemic, but it will still -be interesting to see what it&#8217;s like, especially since I do compulsively use my -phone before going to sleep and right after waking up.</p> - ]]></content> - </entry> - - <entry> - <title>Gemini is Up and Running</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-11-02T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Gemini%20is%20Up%20and%20Running">Gemini is Up and Running</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-11-02</p> - -<p><em>This post is also available <a href="gemini://">on -Gemini</a>.</em></p> - -<p>The <a href="">Gemini protocol</a> is a new &#8220;small -Internet&#8221; protocol which aims to sit in between Gopher and the HTTP-based Web in -terms of functionality. I <a href="">previously wrote a bit about -it</a> and you -can find a nice quick breakdown in this <a href="">blog post on Drew DeVault&#8217;s -blog</a>.</p> - -<p>When I wrote that first blog post about Gemini and the small Internet, I got a -quick and dirty Gemini server set up which mirrored what I had created for -Gopher. That whole situation was a little bit clunky and I didn&#8217;t have a good -way to maintain it in the long run, so I instead decided to scrap that and start -over. Having ditched Gopher (because I don&#8217;t really see a reason to run it -alongside Gemini), I now run only Gemini and HTTP sites.</p> - -<p>I am now running the <a href="">gmnisrv</a> Gemini -server and maintain a <code>gemini&#47;</code> folder alongside an <code>http&#47;</code> folder in my -<a href="">website&#8217;s repository</a> now. I chose -gmnisrv because of its simple implementation (minimal dependencies, low LoC -count, etc.).</p> - -<p>I also briefly experimented with converting all of these HTML pages over to -Gemini so one could get a perfectly mirrored copy of what is available here over -on Gemini. Unfortunately, because it was scripted, that resulted in pages which -were clunky, messy, and ultimately lead to a degraded experience viewing this -site using Gemini. I came to the conclusion that text hosted on Gemini should be -written in gemtext and explicitly tailored to the constraints of that platform -rather than trying to fit the square peg of made-for-HTTP content into the round -hole of Gemini.</p> - -<p>Blog posts written for this site will also be made available on Gemini, as will -any other pages. A Gemini-specific Atom feed will also be appearing soon. I -suppose it&#8217;s also fitting that this is my final blog post for -#100DaysToOffload: ending an era of HTTP-only blog posts whilst beginning an -era of content on two protocols. I have very much enjoyed this challenge and -look forward to continuing to write more.</p> - -<p><em>This is my one hundredth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why IRC is Still Good in $CURRENT_YEAR</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-30T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20IRC%20is%20Still%20Good%20in%20$CURRENT_YEAR">Why IRC is Still Good in $CURRENT_YEAR</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-30</p> - -<p><center><figure> <a href=""> <img -src=""/></a> <figcaption>XKCD Comic -#1782: Team Chat <a -href="">CC-BY-NC -2.5</a></figcaption> </figure></center></p> - -<p>Similar to how <a href="">I think e-mail is still the best discussion -platform</a>, -I think there is still a solid place for IRC in our lives.</p> - -<p>IRC (Internet Relay Chat) is a communications protocol <a href="">created in -1988</a> and, yeah, it shows. IRC is 100% -plain text; no images, no videos, no stickers, no emoji reactions, just good ol&#8217; -plain text. It was also designed to transmit everything in plain text (i.e. -unencrypted) all across the Internets in a time when the use of these computer -networks was limited mostly to universities, governments, and large -corporations. This was a time when Hollywood-style <a href="">1337 -h4x0rs</a> were -pretty much just kids using their modems to make long distance calls for free.</p> - -<p>Nowadays, IRC is probably not such a good platform for private personal chats, -but that doesn&#8217;t mean it&#8217;s not good for other things.</p> - -<p>Arguably the best &#8220;feature&#8221; of IRC is that it&#8217;s still all in plain text. No -multimedia or fancy features such as emoji reactions, integrations, or stickers -keeps the bandwidth usage down and the focus on the content of what people are -saying, rather than on distracting memes and flashy things. It&#8217;s the same reason -why people like lean websites, plain text email, plain text notes, and so on: -plain text is easy, portable, lean, and pure. You can even still <a href="">send files -using IRC</a>.</p> - -<p>One aspect of computing and software design that many developers nowadays seem -to forget is that <a href="">over half of the world&#8217;s population does not have access to -fast -Internet</a> -and many people, even in developed countries, are limited by bandwidth caps and -spotty satellite or mobile Internet access. For these people, IRC can be the -much better option compared to other collaboration platforms such as RocketChat, -Mattermost, Slack, or Matrix, even if they have to use an IRC bouncer or a -screen&#47;tmux session on a remote server to not miss things if their connection is -that spotty.</p> - -<p class="note">Did you know, <a -href="">IRC played a -critical role in getting networks back up</a> during the <a -href="">recent -CenturyLink outage</a>?</p> - -<p>One of the biggest flaws I see people discuss when talking about IRC is that -chat history is not saved by the server. This means that, if you want a record -of the conversations which happen when you&#8217;re not connected, you&#8217;d have to use -an IRC bouncer or screen&#47;tmux session which will keep you connected when you -have to go offline. I can definitely see this being a limitation for a private -group chat if this is not something you&#8217;re willing to do, but when it comes to -open source collaboration or support, this makes IRC great for hashing out -ideas, asking quick questions, and having conversations while hacking on things. -In these cases you don&#8217;t really care what&#8217;s happening when you&#8217;re not there -because these are synchronous conversations which is perfect for the ephemeral -nature of IRC.</p> - -<p>Even though encryption is not mandated by IRC or enabled by default in many -cases, you can still enforce encrypted client-server or server-server -connections on your IRC server. This means that all messages in transit between -clients and your server would be encrypted (usually with TLS) and the only -weakness would be logs on the servers themselves or logs on client machines. If -you and your friends like the plain text medium, it&#8217;s entirely possible to set -up an IRC server which mandates encryption and doesn&#8217;t store logs long-term. If -you&#8217;re in a group of people you can trust to be competent then it&#8217;s entirely -possible to make IRC work this way and have a reasonable guarantee of privacy -and security.</p> - -<p>I suppose I should also mention the federating aspect of IRC since that&#8217;s quite -a hot topic in the open source social platform world. IRC does federate in a -way, but it&#8217;s not quite like the way Pleroma or Mastodon do. In the world of -IRC, IRC networks are made up of one or more IRC servers. If you connect to an -IRC server, you can view and interact with any channels or users on the same -network that server is a part of. The way IRC exists right now is due to several -network splits (netsplits) where many servers decided to split off of a big -network to form their own, separate network several times throughout IRC -history. This is similar to having a group of several Mastodon&#47;Pleroma instances -which have decided to federate with nobody else except those also in the group -and is why we have the Freenode IRC network alongside the Undernet, EFnet, and -so on.</p> - -<p>The reason why this isn&#8217;t really such a big issue when it comes to IRC though is -that IRC doesn&#8217;t really have accounts. Sure, you can usually register a nickname -with a network&#8217;s NickServ bot to reserve it, but that&#8217;s not mandatory on most -networks. This means you can join however many IRC networks you want with little -hassle; you just have to connect and set your nick.</p> - -<p>So, overall, IRC is still a really useful and good platform especially for -software minimalists and technical users who wish to have a relatively -hassle-free experience. IRC is great for open collaboration and quick support in -free software projects (far better than Slack or Discord) and it can be made to -work for private chats as long as you can trust everyone in the group to be -competent. Yes, IRC is not necessarily great for non-technical users or those -who require extensive guarantees of security; it might even be too much of a -hassle for you, but this doesn&#8217;t mean it&#8217;s dead, useless, or outdated. IRC is -not only still useful, but can still be the best tool for the job in the modern -age. There are also improvements coming in the form of -<a href="">IRCv3</a>.</p> - -<p><em>This is my ninety-eighth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>The Hacker Quarterly Magazine</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-14T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Hacker%20Quarterly%20Magazine">The Hacker Quarterly Magazine</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-14</p> - -<p>A while back I asked others if they had any recommendations for physical -magazines that I could subscribe to with a focus on computing and technology -(though not your standard Wired magazine or anything like that). I was looking -for a magazine reminiscent of the kinds of magazines which were available in the -early days of computing; when these magazines were the only way for many to -discover new programs and computer hacking ideas.</p> - -<p>I was pointed to <a href=""></a> where I could buy a magazine -called <em>The Hacker Quarterly</em>. It&#8217;s a magazine sent out 4 times a year and the -subscription cost for one year is $26.00 USD. That&#8217;s honestly not that much -given the fact that it&#8217;s a physical magazine and there&#8217;s a lot of work that goes -into putting magazines like that together. So, I signed up for a one year -subscription as a trial and I got my first edition (this year&#8217;s Spring edition) -in the mail yesterday.</p> - -<figure> - <a href="/img/hacker-quarterly.jpg"><img src="/img/hacker-quarterly-thumb.jpg"/></a> - <figcaption>The front cover of the Spring 2020 edition.</figcaption> -</figure> - -<p>The magazine was filled front to back with interesting articles and tidbits of -hacker culture. The main articles in this edition seemed to focus heavily around -social media and digital privacy which was expected given the front cover. There -was also a section containing responses from the 2600 folk to messages fans sent -in, a marketplace section, a meetups section, and more.</p> - -<p>One of the articles that stood out to me was an article entitled &#8220;Has Your -Password Been Pwned?&#8221; which discussed submitting your passwords to Troy Hunt&#8217;s -<a href=""></a> service to check if they&#8217;ve -been included in any breaches. In this article was a small shell script which -allows you to pass in a password, submit it to the service securely, and check -if your password had been pwned. How many physical publications do you see -nowadays with code written in them?</p> - -<p>This magazine is one of the few remaining physical hacker&#47;computer magazines -from the days of old. There&#8217;s something&#8230; humanizing about reading a physical -magazine over consuming everything through digital publications. It&#8217;s definitely -worth checking out if you&#8217;re into hacker culture (if you&#8217;re reading this blog -post now, you&#8217;d probably be interested in it).</p> - -<p><em>This is my ninety-fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Ethical Investing</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-13T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Ethical%20Investing">Ethical Investing</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-13</p> - -<p class="note">None of this is intended to be financial or investment -advice.</p> - -<p>The next step after <a href="">choosing an investment -brokerage</a> or -bank is choosing where to put my money. Not only do I have to consider my -acceptable level of risk, I have to then consider how I&#8217;ll split my investment -portfolio among things like ETFs, Stocks, GICs, and so on. However, aside from -all of that, there&#8217;s a big aspect to investing which I want to address today: -ethics.</p> - -<p>The financial industry is chock-full of unethical people and unethical systems -but it seems that you have to engage with it at least a little bit to do things -such as save for a house or for retirement. However, just like with every other -aspect of my life, I try to reduce my negative impact on the world as much as I -reasonably can. When it comes to investments, this means investing in ethical -sectors, ethical companies, and ethical funds as much as I possibly can.</p> - -<p>Of course, when you&#8217;re trading stocks on the stock market, you won&#8217;t actually be -giving an unethical company your money directly (unless you&#8217;re buying stocks -from an IPO or something). You are, however, contributing to an increase in the -company&#8217;s value and participating in the buying and selling of parts of an -unethical company. If you&#8217;re holding on to these stocks, you own a part of an -unethical company.</p> - -<p>For example, there are many large, stable, high-dividend-yield companies in the -Oil and Gas sector such as Enbridge (TSX:ENB)—a company which is contributing to -the <a href="">wanton destruction of the -environment</a>. -Companies such as Tesla (NASDAQ:TSLA) or Equifax Inc. (NYSE:EFX) can be really -profitable, but are also ultimately unethical companies (for different reasons).</p> - -<p>Since I have ethical issues with those companies, I will not knowingly invest in -them. Instead, my money would be better spent investing in something else such -as a renewable energy company like Innergex Renewable Energy (TSX:INE) who <a href="">are -one of the largest renewable energy companies in -Canada</a>.</p> - -<p>As is typical when considering ethics, it makes the job of selecting investment -products more difficult because a lot more research is required and there will -be many companies that your ethics will prevent you from investing in. -Ultimately though, in my opinion it&#8217;s incredibly important to consider ethics -when deciding who to give my money to, just like I do when choosing what -software I use.</p> - -<p><em>This is my ninety-third post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Choosing An Investment Brokerage</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-12T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Choosing%20An%20Investment%20Brokerage">Choosing An Investment Brokerage</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-12</p> - -<p>Now that my time at university is coming to an end, I&#8217;m starting to look forward -into the future at what kind of saving and investing I will need to do to -achieve my life goals. My first step is to find a brokerage which meets my needs -as a Canadian investor. There are so many options to choose from and so many -criteria to consider that I did the only sensible thing a Computer Scientist -could do: I made a spreadsheet.</p> - -<figure> - <a href="/img/brokerage-comparison.png"><img src="/img/brokerage-comparison-thumb.png"/></a> - <figcaption>Working on the Spreadsheet using NextCloud</figcaption> -</figure> - -<p><a href="">Download the spreadsheet -here</a> (if you notice any -incorrect or missing information, please contact me).</p> - -<p>I made the spreadsheet in collaboration with my friend who is also in the same -position as I am. We did a ton of research (<a href="">Charlee Wayne&#8217;s YouTube -channel</a> was incredibly helpful for this) -and compiled a list of all the options we could find which at least offered -trading of Stocks and ETFs. This led us to a list of 5 independent brokerage -firms and 6 banks.</p> - -<p>We then set out to evaluate each one from the perspective of student&#47;recent -graduate investors who would be putting money into a TFSA (Tax Free Savings -Account) and, in the near future, an RRSP (Registered Retirement Savings Plan). -We evaluated the brokerages mostly on their fee structures, what they allow us -to trade, and what their youth discounts looked like. Secondarily, we evaluated -the brokerages on the comprehensiveness of their trading platforms such as -whether or not there was an easily accessible stock screener, indicators on -charts, and so on.</p> - -<p>For a few of the categories, information might be missing (indicated by a &#8216;?&#8217;) -because we couldn&#8217;t readily find the information on the websites of the -respective brokerages and we couldn&#8217;t open a practice account so that we could -evaluate their platforms without creating a real account. Most of this -information isn&#8217;t all that important though, so I&#8217;m not too bothered.</p> - -<p>After doing all this research, I still haven&#8217;t yet made my mind up with regards -to which brokerage I will choose, but I have at least narrowed down my choices -to Questrade, Virtual Brokers, and National Bank and I know that I have at least -thoroughly considered all of the options.</p> - -<p>If you&#8217;re a Canadian thinking of investing or are already investing, let me know -about your experiences by contacting me through email or the Fediverse; I&#8217;d love -to hear about other people&#8217;s experiences!</p> - -<p><em>This is my ninety-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Gentoo Isn't for Me</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-08T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Gentoo%20Isn&amp;#8217;t%20for%20Me">Gentoo Isn&#8217;t for Me</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-08</p> - -<p>After using Gentoo on and off since I <a href="">tried it -out</a> a few months ago, -I think I&#8217;ve come to the conclusion that it&#8217;s just not for me. While I really -like the idea, I just don&#8217;t think that the paradigm is particularly good for me -to use as a daily driver.</p> - -<p>My issues with it mainly just boil down to time. Running Gentoo as a daily -driver would be a breeze on my desktop machine with its 6C&#47;12T Ryzen 5 1600 CPU -but, on my T420s with its 2C&#47;4T Intel i5-2520M, things take a non-trivial amount -of time to install because everything is compiled from source. For example, it -took me approximately 1-2 hours just to install Gentoo because of kernel and -base program compilation and it took me 7.5 hours just to install Firefox. Yes, -I did make sure to use the <code>-j</code> flag in my <code>make.conf</code>.</p> - -<p>Now, there are ways to speed this up; I could use -<a href="">distcc</a> to compile things for my laptop -on my desktop machine or I could also set up -<a href="">ccache</a> so that, if a library is common -between two packages, it will only have to be compiled once. For heavy packages -such as Firefox, there are also binary packages available so that one can avoid -the insane compilation times.</p> - -<p>However, even though doing these things will make it faster to install new -software, it still feels like it takes an unreasonably long time to get a system -up and running. Not to mention, when I&#8217;m working on something and need a new -piece of software, the time it takes along with the occasional configuration -file issues I have to work out pulls me out of the flow of the task that I want -to accomplish. Needing to fix some USE flag incompatibility or wait for the -piece of software to be compiled annoys me when I just want to get on with -whatever task I need to complete.</p> - -<p>It was definitely very fun to install Gentoo for the first few times, plus the -novelty of the Gentoo way of doing things was cool to play around with and the -sheer amount of freedom it offers the user in choosing how they want to build -their system (LibreSSL vs. OpenSSL, runit vs. OpenRC vs. systemd, etc) is very -intriguing. I just don&#8217;t think it would suit me as a daily driver because of the -fact that nearly <em>everything</em> has to be compiled from source.</p> - -<p>One thing I really liked about Gentoo was the ability to slim down my system a -lot. So, to get away from systemd and to move to using even more simple -software, I will be trying out Alpine Linux as a daily driver on my laptop. It -uses musl libc and OpenRC, and is a binary-based distribution instead of a -source-based distribution. Fun fact: the Alpine folk used to build their -packages using Gentoo&#8217;s emerge (though I couldn&#8217;t quickly find anything that -could confirm if this is still the case).</p> - -<p><em>This is my eighty-seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My Journey With Computers</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-03T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20Journey%20With%20Computers">My Journey With Computers</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-03</p> - -<p>Nearly two weeks ago (wow, time flies), I wrote a blog post about <a href="">two truths -and a lie</a> where I presented -three things about me and you would have to guess which one was a lie. There -were a few people <a href="">on the thread about the -post</a> who were surprised -I&#8217;ve only been into computers for about three years. That, along with -<a href="">DistroTube&#8217;s latest video</a>, and <a href="">a -recent post by Mike Stone</a> -is why I&#8217;m writing this post.</p> - -<p>My journey begins before I can really clearly remember. I&#8217;ve always had -computers and the Internet around me but I never really got into them or -bothered to learn about them for most of my life; I really just played games and -browsed the Internet. I distinctly remember the early days of Youtube, Facebook, -Limewire, and so on. RuneScape, Club Penguin and flash games were also a big -part of my childhood.</p> - -<p>As time went on, I only learned what I needed to in order to fix whatever -problems came up on my Windows 7 laptops (if you&#8217;re curious I&#8217;ve only ever used -Windows XP, then 7, then 10). I learned the basics of looking things up trying -to find solutions to whichever problems I encountered, I learned to use -Malwarebytes and&#47;or the built-in Windows Defender instead of whatever other -garbage there is, I ran CCleaner for a while, and pretty much just got by with -whatever I needed to by looking things up.</p> - -<p>By late high-school I had learned what Linux was and played around with it a -bit. I installed things like Ubuntu, Linux Mint, and some other variants of -Ubuntu but never used it daily as I had no reason to. After all, they didn&#8217;t -support my video games. I only knew to go to the command line to use <code>sudo -apt-get</code> not even knowing what those commands did, just that I had to use them -to update my computer and install new software. I didn&#8217;t know what a shell was -or who Richard Stallman or Linus Torvalds are, only that Linux was free (as in -free of cost) and that&#8217;s what I found interesting at the time.</p> - -<p>In my last year of high school, I signed up for Codecademy to learn how to -program in Python. Not because I needed to, but because I heard it was a good -language for beginners and I wanted to try my hand at this whole programming -thing. I remember going through it but getting quite bored with it and not -really seeing the point. I didn&#8217;t have anything I wanted to program and soon -lost interest, especially since it didn&#8217;t do anything to explain programming -concepts to me; it just threw what felt like syntax problems at me. To this day -(even after giving it another shot later in life) I think Codecademy is somewhat -similar to trying to use Duolingo to learn a language: one might learn the -different words used in the language, but it can&#8217;t teach one how to use it -properly.</p> - -<p>I finished High School and went to university&#8230; but not for Computer Science! -In fact, I first went to get a Bachelor of Science in Chemistry. In my first -year I took some computer science electives because I still had that curiosity -to learn Python. I learned and used Python in the first semester and Java in the -second. Still, I was using Windows to do everything. I programmed Python in -Sublime text and Java in IntelliJ IDEA. The flame was ignited; even though I -really enjoyed chemistry (I still do), I knew working with computers is what I -wanted to do. I switched my program to a Bachelor of Computer Science and -entered second year as a full-fledged Comp. Sci. undergrad.</p> - -<p>In that year alone I learned C, more Java, JavaScript, C++, about data -structures and algorithms, and, the most important thing of all, Vim. It was -actually the professor who taught the class on C who encouraged everyone to use -Linux and Vim for their assignments; something I chose to do since I already -knew how to install Linux and due to my desire to learn more. Looking back, this -was me at the top of the rabbit hole, looking around in confusion as I slowly -walked towards the edge without knowing.</p> - -<p>That winter <a href="">I built my own PC</a> during the -Black Friday sales around American Thanksgiving. That was the first time I built -a PC and the first time I had a relatively powerful gaming PC. I installed both -Ubuntu Linux and Windows 10 on it (using a Windows 10 Pro key provided by my -university) because I was still quite heavily into gaming, though I now did all -my programming on Linux.</p> - -<p>It was the summer of 2018 where I feel my knowledge really exploded and hasn&#8217;t -stopped since. That summer I got an internship doing software development. It -was the first time I used Git seriously, the first time I took the time to -really customize the heck out of Vim, and the first time I encountered -<em>shudders</em> other people&#8217;s code. Curiosity kept driving me and when I had -downtime at that job I spent it reading various StackExchange forums, I learned -all about FOSS licensing, what the FSF, EFF, SFC, OSI, and LF were, who Linus -Torvalds, Richard Stallman, Eric S. Raymond and folks are, and so much more.</p> - -<p>Things have kept growing since then. I switched from Ubuntu to Debian and used -XFCE for a long time. Then I discovered tiling window managers from Linux -youtubers such as <a href="">Derek Taylor</a> and <a href="">Luke -Smith</a> and started -using bspwm. When I moved into an apartment on my own, I started self-hosting -the services you find me on today. I&#8217;ve tried various distributions like Arch -Linux, Gentoo, and OpenSUSE in addition to the Ubuntu derivatives, Linux Mint, -and Debian which I was already familiar with. I&#8217;ve also tried non-Linuxes like -FreeBSD, OpenBSD, and Plan9. I&#8217;ve learned more about the history of computing -than my naïve younger self ever knew existed. I&#8217;ve programmed in Scheme and -Prolog. I was even tempted by Emacs at one point (scary, I know).</p> - -<p>All that being said, I&#8217;m really only a little more than three years into this -field and I am continuing to learn new stuff every day. It was only relatively -recently when I began doing things like writing POSIX shell scripts instead of -Bash-specific ones wherever I can, thinking about the impact of the software I -write, and even properly using keys like <code>w</code>, <code>e</code>, and <code>b</code> in Vim. I went from -not even having a good reason to use Linux to <a href="">now running Debian -Sid</a>, <a href="">using -dwm</a> and a bunch of other Suckless -software, <a href="">writing my own Vim -statusline</a>, -<a href="">self-hosting my own email -server</a>, <a href="">participating in my -first CTF</a> and more.</p> - -<p>I am <em>deep</em> in the rabbit hole now&#8230;</p> - -<p><em>This is my eighty-fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>The Vortex ViBE Mechanical Keyboard</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-08-02T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Vortex%20ViBE%20Mechanical%20Keyboard">The Vortex ViBE Mechanical Keyboard</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-08-02</p> - -<figure> - <a href="/img/keyboard-side.jpg"><img - src="/img/keyboard-side-thumb.jpg"/></a> - <figcaption>The Vortex ViBE Mechanical Keyboard</figcaption> -</figure> - -<p>I&#8217;ve been using the Vortex ViBE as my keyboard for at least six months and I -have to say it&#8217;s one of the best mechanical keyboards I&#8217;ve used. It&#8217;s very -unique in that it&#8217;s a 60% form factor with a number pad tacked on the side. This -makes it roughly the same width as a tenkeyless keyboard but with a lot more -functionality.</p> - -<p>The ViBE is very well-made. The chassis is one solid slab of aluminium that -feels very weighty and solid. The switches are mounted on a plate flush with the -top of the bottom case which results in the keys floating above the board—a -style I prefer more than the keys being inset because it&#8217;s easier to clean.</p> - -<p>It uses a detachable Micro-USB cable to connect to a computer and has no -bluetooth capabilities (I prefer wired over wireless). Although USB Type C has -become the connector everyone wants on everything, I don&#8217;t really mind that this -uses Micro-USB since it&#8217;s not like I unplug my keyboard very often nor does it -actually make much of a difference to me what connector is on the back of my -keyboard. Plus, in the end, USB-C is still relatively expensive to integrate -into products due to much of <a href="">the process still being -manual</a>.</p> - -<p>Its most interesting feature is that it combines the numpad and the nav cluster -into the same section of the keyboard. It was important for me to get a keyboard -with a number pad because of how often I used the pad on my old keyboard, but I -also didn&#8217;t want to use a full-sized keyboard because of how large they are and -how awkward it feels to have to move my hand so far to reach the numpad, let -alone the mouse. I also didn&#8217;t really want to have to use separate layers to get -keys like SysRq, PrtScn, the arrow keys, or Page Up and Page Down, so an even -smaller keyboard was a no-go.</p> - -<p>That brings me to the coolest feature of this keyboard: the numpad becomes the -nav cluster when NumLock is off. When you hit the button labelled Num, a green -light appears under the Caps-Lock key to tell you that the number cluster is -active and you can use the numpad as a numpad. When the light is off, that same -cluster of keys become the nav cluster in the exact same layout as a regular nav -cluster (the numpad keys 1 and 3 become dead keys in this case). This makes all -the keys of the keyboard, including Page Up&#47;Down, Home&#47;End, and PrtScn&#47;SysRq, -accessible in a much smaller package. You also get used to hitting the Num key -whenever you want to type a number, then hitting it again to go back to nav mode -as opposed to always leaving NumLock on.</p> - -<figure> - <a href="/img/keyboard-top.jpg"><img src="/img/keyboard-top-thumb.jpg"/></a> - <figcaption>The numpad on the right serves as a nav cluster in the exact - same layout as the regular nav cluster when NumLock is off.</figcaption> -</figure> - -<p>You may also notice a lack of a tilde&#47;backtick key. Those are accessed using the -Escape key where a backtick is Fn + Escape and tilde is Fn + Shift + Escape. -Once again, this is something you get used to over time and I&#8217;ve grown to -appreciate the escape key being a lot closer to the home row as it no longer -feels like a stretch to use it in Vim.</p> - -<p>Some other very interesting features of the keyboard are:</p> - -<ul> -<li>A built-in toggle to go between Qwerty, Dvorak, and Colemak keyboard layouts</li> -<li>The keys are all the same height so they can be freely swapped around anywhere -on the keyboard to conform to any desired layout</li> -<li>There are three programmable layers plus the default layer so it&#8217;s possible to -program custom macros on different layers of the keyboard</li> -<li>It comes with some extra keycaps: three extra colours of spacebar and two -extra colours of Num, Vertical Enter, Enter, and Esc keys (I chose the red -keys)</li> -<li>It&#8217;s available with a ton of different Cherry MX keyswitches.</li> -</ul> - -<p>I got my keyboard with Cherry MX Black switches. I used to use Cherry MX -Blues and really liked the heavy weight and the clicky feeling but got tired of -the sound. I found Cherry MX Browns mushy (sorry, brown fans!), but MX Reds far -too light so I went with Blacks. I very much like the stiffness, quietness and -overall feeling of them.</p> - -<p>It&#8217;s also not a very expensive keyboard. At roughly $140 USD (I got mine for -$120 USD because it was an open-box return from -<a href=";p=3923"></a>), -it&#8217;s competitive with offerings from big brand name companies such as Corsair, -Cooler Master, and Razer.</p> - -<p>I highly recommend it if you&#8217;re looking for a compact keyboard but don&#8217;t want to -give up the numpad or spend a ton extra to get a separate numpad. As far as I -know, this keyboard is unique in that respect and fills the niche well.</p> - -<p><em>This is my eighty-third post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My Git Server Was DDoSed</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-29T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20Git%20Server%20Was%20DDoSed">My Git Server Was DDoSed</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-29</p> - -<p>On the evening of the 27th of July, 2020 (two days ago), I noticed some odd -behaviour with my git server. UptimeRobot, the service which provides -<a href=""></a>, kept sending me emails every -dozen or so minutes telling me that my git server was down and then up again. -This happened a number of times but I just chalked it up to a misbehaving server -or heavier-than-normal traffic.</p> - -<p>It wasn&#8217;t until the notifications became so numerous and noticing that turning -the machine off and on again wasn&#8217;t working that I figured something wasn&#8217;t -right. I shut down the server for the night to prevent it from being -continuously overwhelmed (and thereby me receiving a hundred emails overnight) -and went to sleep with the idea of fixing it in the morning.</p> - -<p>When I woke up, the first thing I tried was turning the server back on and -waiting to see if it went down again. Maybe whatever was going on fixed it self -in the ~13 hours that the server was offline. Unfortunately, within 10 minutes -the server was down again.</p> - -<p>My next step in diagnosing the problem was to check the server logs. Normally, I -have both the <code>access.log</code> and <code>error.log</code> turned off on my servers because I -don&#8217;t need the content of those logs under normal circumstances. I proceeded to -turn on logging again just for <a href=""></a> and -watched them with <code>tail -f</code> to try to get an idea of what was going on.</p> - -<p>I noticed a flood of various sketchy looking user agents constantly hitting -various URLs in a pattern that was clearly indicative of bots. These bots were -looking at what seemed like every single diff of every single file of every -single commit and this was bringing my poor PineA64+ down to its knees trying to -keep up with syntax highlighting all the code and generating all the <code>.tar.gz</code>, -<code>.tar.bz2</code> and <code>.zip</code> files for every single snapshot. Luckily, it was just the -webserver that kept going down; git access through SSH was unaffected.</p> - -<p>These are the kinds of user agents I noticed:</p> - -<pre><code>"Mozilla&#47;4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)" - -"Mozilla&#47;4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)" - -"Mozilla&#47;5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident&#47;5.0" - -"Opera&#47;9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto&#47;2.8.131 Version&#47;11.11" - -"Mozilla&#47;4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)" -</code></pre> - -<p>My first thought upon seeing this traffic was that they were just some -overzealous bots. I changed my <code>robots.txt</code> file to deny scraping all but the -index page of my git server and I changed the robots setting in <code>cgitrc</code> to -<code>robots=none</code> to prevent the site from being indexed.</p> - -<p>Unfortunately, that didn&#8217;t help one bit. When a bot ignores robots directives, -it&#8217;s more than likely a malicious bot (or, at the very least, one made by an -incompetent programmer). My next action was to set up Fail2Ban to catch these -malicious actors and ban them for a number of hours from accessing my server. So -I set up an <code>nginx-badbots</code> filter (by copying the <code>apache-badbots</code> filter and -adding the malicious user agents to the <code>badbots-custom</code> variable), I set the -ban time to 2 days, the retry count to 2 times, and the action to add a drop -rule to my <code>nftables</code> firewall.</p> - -<p>In the first few minutes, there were about 10 or so IPs added to the list. I let -this keep going for an hour all the while monitoring it and watching my git -server continue to come back online only to be knocked down again. After about -15 minutes, I got the idea to run a GeoIP lookup on the addresses which were -banned and this is what I saw:</p> - -<figure> - <a href="/img/banned-ips.png"><img src="/img/banned-ips.png" alt="A - screenshot of the GeoIP lookup output showing 235 IPs from China and 1 IP - from Germany."/></a> -</figure> - -<p>Clearly, either there was someone using a botnet with a lot of infected Chinese -computers or someone in China was DDoSing my server using whatever IPs they -controlled. I let it get this bad before deciding I had to take much more -drastic measures:</p> - -<figure> - <a href="/img/more-banned-ips.png"><img src="/img/more-banned-ips.png" - alt="A screenshot of another GeoIP lookup showing 1 IP from Canada, 876 IPs - from China, and 1 IP from Germany."/></a> -</figure> - -<p>At this rate, Fail2Ban was not working and, after an hour of adding hundreds of -IPs to the blocklist, my server was still going down. It was suggested to me by -someone on the Fediverse (I was ranting about this whole thing over there) that -I might be able to stop the attack by pre-emptively banning all Chinese IPs. I -left that as a last resort because it&#8217;s an extreme measure that has the very -real implication of locking out good people from viewing my sites. It&#8217;s not like -everyone in China is a malicious actor and there may even be people over there -who find my stuff useful.</p> - -<p>Though, unfortunately, the attack was showing no signs of slowing down and I had -to take this action just to get my server back up and running again. I found a -list of IPv4 address ranges for China and added all of those IPs to my firewall -(it was an extra ~2200 rules). The server pretty much instantly came back -online and the list of IPs banned by Fail2Ban stopped growing. Since then, my -git server has stayed up without any further issues.</p> - -<p>It doesn&#8217;t seem to be over though. It would appear the script kiddies caught on -to my blanket IP ban and have been hitting the server again from various -countries. I just checked as of writing this blog post, and this is now the -output of Fail2Ban + GeoIP lookup:</p> - -<figure> - <a href="/img/banned-ips-now.png"><img src="/img/banned-ips-now.png" alt="A - screenshot of another GeoIP lookup showing 876 Chinese IPs, 464 IP addresses - not found, 170 Russian IPs, 155 American IPs, 85 Australian IPs, 76 British - IPs, 64 Turkish IPs, 62 Canadian IPs, 59 Indian IPs, 59 German IPs, 31 - Brazilian IPs, and so on for nearly every developed country in the - world."/></a> -</figure> - -<p>Clearly the attack is still going on but, thanks to Fail2Ban, it&#8217;s no longer -significant enough to keep bringing down my Git server. I also don&#8217;t notice any -lag out of the ordinary when using it myself which is a good sign.</p> - -<p>What perplexes me about this DDoS is that this person or group, whoever they -are, is only attacking <a href=""></a> and none -of my other services. My website, Pleroma, and Matrix all seem to be behaving -just fine and there&#8217;s no extraneous bandwidth usage from any of them. My git -server is also just a web server for people to look at and clone my -repositories; there are no accounts to take over or databases to hack. Is this -some automated attack designed to scrape all my code in an attempt to find -credentials? Who knows&#8230;</p> - -<p>I&#8217;ll give it a few more days and see if I can unblock China from accessing my -web services because I&#8217;d rather not block an entire country from my stuff just -because of one malicious actor. Unfortunately, if the attack continues to the -point of bringing down my git server again, I&#8217;ll have to leave the block in -place (though I may try rate-limiting IPs that Fail2Ban catches instead of -outright blocking them).</p> - -<p><em>This is my eighty-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Two Months with aerc</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-19T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Two%20Months%20with%20aerc">Two Months with aerc</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-19</p> - -<p>Two months ago I wrote about <a href="">trying out -aerc</a>, a new terminal email -client spearheaded by Drew DeVault. After two months of using it as my only mail -client, I want to share my thoughts about it and what I&#8217;m looking forward to -seeing with it.</p> - -<p>Since I switched to aerc from NeoMutt, managing and interacting with email has -felt a lot more streamlined and easy. That could partially also be because I -switched from ProtonMail to self-hosting email at the same time, but aerc also -provided advantages such as being able to fully reference other conversations -when drafting an email. I&#8217;ve also found the default keybindings easy to learn -and use and the configuration files are easy to understand and much, much less -complicated than NeoMutt&#8217;s.</p> - -<p>Even though aerc is still well in development, there&#8217;s not a whole lot that -feels like it&#8217;s missing and I&#8217;ve only encountered a couple of issues; nothing -that would make me stop using the client though.</p> - -<p>The most major thing that I can see missing from aerc at the moment is good PGP -support. I can receive PGP emails (though I had a few crashes related to them), -and signed messages will display a line showing whether or not the message is -verified by my keychain, but it is still missing the ability to send -PGP-encrypted emails and the integration seems to be in its early stages. This -isn&#8217;t such a big deal since I can count on one hand the number of times I&#8217;ve -wanted to send PGP-encrypted emails in my (admittedly short) lifetime and this -feature looks like it&#8217;s being actively worked on.</p> - -<p>The only other major issue that I&#8217;ve encountered is the lack of properly -updating connection statuses. If I put my computer to sleep and wake it back up -again, this will kill aerc&#8217;s connection to my email server. However, the bar at -the bottom still says &#8220;Connected.&#8221; and I have to restart aerc to get it to -reconnect. This also seems like it&#8217;s receiving some attention (at least judging -by my brief skims of the mailing lists).</p> - -<p>Another feature that I miss coming from NeoMutt is a threaded message view which -would be really useful for keeping track of mailing lists. This doesn&#8217;t seem -like that much of an issue so long as I am on top of my emails, but if I am away -for a few days, I could easily see myself coming back to 20 email messages from -3-4 different mailing lists and having a harder time sifting through them.</p> - -<p>Overall, it&#8217;s been a really good experience and I&#8217;m going to keep using aerc -into the foreseeable future. I&#8217;m glad to have a desktop mail client that -integrates well with git, isn&#8217;t super complicated, and makes email not feel like -a chore to manage.</p> - -<p><em>This is my seventy-fifth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why I Hate The Term "Modern"</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-16T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20I%20Hate%20The%20Term%20&amp;#8220;Modern&amp;#8221;">Why I Hate The Term &#8220;Modern&#8221;</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-16</p> - -<p>I strongly despise the word &#8220;modern&#8221; because of its use as a term to demean and -refuse to consider something just because it wasn&#8217;t created in the last handful -of years and even to market something as being good because it&#8217;s new. The word -modern has somehow become associated with &#8220;something better&#8221; even though, in the -context of computing, that is rarely true.</p> - -<p>According to -<a href="">Merriam-Webster</a>, the word -&#8220;modern&#8221; is defined as:</p> - -<pre><code>1 a : of, relating to, or characteristic of the present or the immediate past : - contemporary - &#47;&#47; the modern American family - b : of, relating to, or characteristic of a period extending from a relevant - remote past to the present time - &#47;&#47; modern history - -2 : involving recent techniques, methods, or ideas : up-to-date - &#47;&#47; modern methods of communication - -3 capitalized : of, relating to, or having the characteristics of the present or - most recent period of development of a language - &#47;&#47;Modern English - -4 : of or relating to modernism : modernist - &#47;&#47; Modern art has abandoned the representation of recognizable objects. -</code></pre> - -<p>Really what I&#8217;m focusing on here is the second definition and its misuse as a -term to justify derision toward programming practices, languages, and software -solely based on the age or appearance of said practice, language or piece of -software.</p> - -<p>For example, I have encountered situations where others would look at the tools -that I am using, such as Neovim (which has its roots in the 1976 editor vi), or -command-line email clients such as NeoMutt (which has its roots in the 1995 mail -client Mutt) or aerc (which had its first release a little over a year ago) and -say things like &#8220;Why not use a modern editor like VS Code?&#8221; or &#8220;Why not use a -modern web interface for your email?&#8221;.</p> - -<p>Naturally I&#8217;m happy to answer those questions, especially when asked by people -who are genuinely curious and not deriding, but I have so often seen tools, -practices, and software rejected for not being &#8220;modern&#8221; (whatever that actually -means), that my guard instantly goes up and I assume I&#8217;m about to be chastised -for using something uncommon.</p> - -<p>For a more specific, generally relatable example, there&#8217;s the Git email -workflow. I have seen the argument made that using Git via email is not &#8220;modern&#8221; -and the GitHub way to contribute to projects is the &#8220;modern&#8221; way of doing things -as a way to put down this type of workflow. Just because something is recent, -newer, or shinier does not make it automatically better. In fact, in this -particular case I&#8217;d argue that the Git email workflow is far superior to the -pull request workflow for a multitude of reasons, as I have so often said in the -past.</p> - -<p>To stop myself from rambling on (many paragraphs have been deleted and -re-written), I will end by saying that it&#8217;s not some ethereal notion of newness -that makes something good but the actual merits of a technique or piece of -software that makes it good. Just because something doesn&#8217;t look pretty or -follow a common way of doing things perpetuated or created by Silicon Valley -companies doesn&#8217;t make it automatically bad. ¬□(&#8220;Modern&#8221; = &#8220;Good&#8221;).</p> - -<p>Text editors like Vim and Emacs, email clients like NeoMutt, Alpine, mu4e, or -aerc, development practices like the Git email workflow, and even web browsers -such as Lynx and w3m allow people to get work done in a way that is efficient -for them. Don&#8217;t shun something based on first looks or some mistaken notion of -what constitutes modernity; evaluate things based upon their merit at least -after considering them or giving them a try.</p> - -<p><em>This is my seventy-third post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Be A Good Netizen</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-15T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Be%20A%20Good%20Netizen">Be A Good Netizen</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-15</p> - -<p>I was working on my post for today and since that&#8217;s taking a little longer than -expected, I figured I&#8217;d tell this story in the hopes that it gets more people to -do the same when they encounter a situation like this.</p> - -<p>A toot on the Fediverse about some recent Cisco vulnerabilities caught my -attention. I&#8217;m used to seeing Cisco vulnerabilities, but what I wasn&#8217;t used to -was the following SSL connection error I encountered when trying to view the -advisories:</p> - -<figure> - <a href="/img/cisco-ssl-error.png"><img src="/img/cisco-ssl-error-thumb.png" - alt="A tab in Mozilla Firefox showing an attempt to connect to - with the following error message: Secure Connection Failed - An error occurred during a connection to Peer attempted old - style (potentially vulnerable) handshake. Error code: - SSL_ERROR_UNSAFE_NEGOTIATION The page you are trying to view cannot be shown - because the authenticity of the received data could not be verified."/></a> -</figure> - -<p>Which I was only alerted to when I shared this link with a friend, and he told -me about the following settings (which I have since activated) in Firefox:</p> - -<figure> - <a href="/img/firefox-settings.png"><img - src="/img/firefox-settings-thumb.png" alt="Mozilla Firefox's about:config - page showing the settings 'security.ssl.require_safe_negotiation' and - 'security.ssl.treat_unsafe_negotation_as_broken' both set to true."/></a> -</figure> - -<p>When those settings are activated (technically only the first is strictly -necessary to prevent connections to broken sites) they will stop the browser from -connecting to websites with broken SSL negotiation. This is a <a href="">fairly -significant issue</a> so it&#8217;s good -to have those settings activated.</p> - -<p>I poked fun at Cisco in a response to the original toot because&#8230; well&#8230; how -does a company this large which specializes in networking and network security -equipment allow something like this to happen, especially on their security -advisories page?</p> - -<p>However, the moral of this story (aside from turning on those settings in -Firefox), is: when something is broken be a good -<a href="">netizen</a> and let the -siteowners know; things can&#8217;t be fixed if they don&#8217;t know about it. I submitted -the following report to Cisco letting them know of the problem:</p> - -<figure> - <a href="/img/reporting-cisco-error.png"><img - src="/img/reporting-cisco-error-thumb.png" alt="A Cisco general contact page with - a filled out contact form. The form is filled out with information relating - to the SSL error I experienced when previously trying to connect to - Also filled in is my email address, my name, and the link - that I was trying to access. On the right is a set of radio buttons labelled - 'Page rating' with the least favourable option 'Poor minus minus' - selected."/></a> -</figure> - -<p>If you come across something like this in the future, I hope you too will be a -good netizen and do the right thing!</p> - -<p><em>This is my seventy-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Installing Debian 10 Buster with Encrypted LVM and btrfs Subvolumes</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-14T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Installing%20Debian%2010%20Buster%20with%20Encrypted%20LVM%20and%20btrfs%20Subvolumes">Installing Debian 10 Buster with Encrypted LVM and btrfs Subvolumes</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-14</p> - -<h2 id="Introduction">Introduction</h2> - -<p>Debian currently supports formatting partitions with btrfs, but doesn&#8217;t support -creating subvolumes from within the installer. Below I will detail the process -of getting subvolumes on your root file system with optional LVM encryption, -should you desire. Once you&#8217;re familiar with this procedure, you will find that -it is actually a lot easier than it seemed at first!</p> - -<p>This procedure has been adapted from this video found on YouTube: <a -href="">Debian 9 | Installation mit -Btrfs Subvolumes (Debian Wochen)</a> by YouTube user &#8220;;. This video is -in German but you don&#8217;t need to understand the language to follow the steps on -screen. This tutorial aims to expand on the content of the video by approaching -it from the perspective of wanting encrypted partitions and it also provides an -English-language reference to the content of the video.</p> - -<h2 id="Procedure">Procedure</h2> - -<p>After downloading a Debian installation image and putting it on a CD&#47;DVD&#47;USB, -boot it and choose <code>Advanced options &#62; Expert install</code> (or <code>Graphical expert -install</code> if you want).</p> - -<p>Run through the installation as normal until you reach the section on -partitioning:</p> - -<figure> - <a href="/img/debian-with-btrfs/partition-screen.png"><img - src="/img/debian-with-btrfs/partition-screen.png" alt="The Debian installer - disk partitioning menu"/></a> -</figure> - -<p>On this screen, if you want an encrypted root file system then you probably want -to choose the option <code>Guided - use entire disk and set up encrypted LVM</code>. If you -are working with a disk that already has an operating system on it which you -wish to keep or if you have more complicated partitioning needs, you will have -to choose <code>Manual</code> and create the partitions necessary for your configuration.</p> - -<p>Once you have run through the setup of the partitions you should now see a -screen similar to the one below:</p> - -<figure> - <a href="/img/debian-with-btrfs/partition-results.png"><img - src="/img/debian-with-btrfs/partition-results.png" alt="The screen showing - the overview of the currently configured partitions and mount points."/></a> -</figure> - -<p>Select your root file system (the one with the <code>&#47;</code> as the mount point), change -the <code>Use as:</code> field to <code>btrfs journaling file system</code> and select <code>Done setting -up the partition</code>. After this, select <code>Finish partitioning and write changes to -disk</code>, following the prompts until you arrive back in the installation menu. -This will apply the chosen partitioning scheme.</p> - -<p>After this and before continuing with the installation, type <code>Ctrl</code>+<code>Alt</code>+<code>F2</code> -to be put into a shell. Press <code>Enter</code> to activate this shell and follow the -following procedure to set up subvolumes:</p> - -<figure> - <a href="/img/debian-with-btrfs/shell.png"><img - src="/img/debian-with-btrfs/shell.png" alt="The busybox terminal on - tty2."/></a> -</figure> - -<p>Use the <code>df</code> command to view what the current mounted partitions are. In my case -there is <code>&#47;dev&#47;mapper&#47;debianbtrfs--vg-root</code> mounted to <code>&#47;target</code> and <code>&#47;dev&#47;vda1</code> -mounted to <code>&#47;target&#47;boot</code>. <code>&#47;target</code> is the place where the Debian system files -will be installed. We need to change and set some things up so that it becomes a -btrfs subvolume.</p> - -<figure> - <a href="/img/debian-with-btrfs/df.png"><img - src="/img/debian-with-btrfs/df.png" alt="The output of the df - command."/></a> -</figure> - -<p>The first step is to unmount both <code>&#47;target&#47;boot</code> and then <code>&#47;target</code> using the -<code>umount</code> command.</p> - -<p>Then, mount the btrfs root volume (i.e. the volume that used to be mounted to -<code>&#47;target</code> hereby referred to as <code>BTRFS_VOLUME</code>) to <code>&#47;mnt</code> and then <code>cd &#47;mnt</code>.</p> - -<p>Create the desired subvolumes with <code>btrfs subvolume create SUBVOLUME_NAME</code>. I -have created <code>@</code>, <code>@home</code>, and <code>@snapshots</code>.</p> - -<p>Following this, mount the root subvolume to <code>&#47;target</code> like so: <code>mount -o -noatime,compress=lzo,space_cache,subvol=@ BTRFS_VOLUME &#47;target</code>.</p> - -<p class="note">There are quite a few compression algorithms available for use -with btrfs now; learn more on [the btrfs -wiki]( I personally use -zstd.</p> - -<p>Now we want to <code>mkdir -p &#47;target&#47;etc</code> and copy <code>&#47;mnt&#47;etc&#47;fstab</code> (and -<code>&#47;mnt&#47;etc&#47;crypttab</code> if you are using encrypted LVM volumes) into <code>&#47;target&#47;etc</code>. -Once this is done we can <code>rm -r &#47;mnt&#47;boot &#47;mnt&#47;etc &#47;mnt&#47;media</code> otherwise these -directories will remain in the final installation (which isn&#8217;t a big deal but -this is done just for the sake of cleanliness). When this is done, unmount -<code>&#47;mnt</code>.</p> - -<p>The next step is to make the necessary subdirectories in <code>&#47;target</code> for your -subvolumes. I did: <code>mkdir -p &#47;target&#47;home &#47;target&#47;.snapshots</code>. Now, mount the -rest of the subvolumes the same way as before like we did for the root -subvolume. Also, mount the boot partition (which in my case resides on -<code>&#47;dev&#47;vda1</code> to <code>&#47;target&#47;boot&#47;efi</code> (or just <code>&#47;target&#47;boot</code> for a legacy BIOS -system). The following screenshots show the exact commands that I ran:</p> - -<figure> - <a href="/img/debian-with-btrfs/commands-before-boot-mount.png"><img - src="/img/debian-with-btrfs/commands-before-boot-mount.png" alt="All of the - commands run as described above (minus mounting boot)."/></a> -</figure> - -<figure> - <a href="/img/debian-with-btrfs/boot-mount.png"><img - src="/img/debian-with-btrfs/boot-mount.png" alt="The commands run to mount - the boot partition."/></a> -</figure> - -<p>Now, edit <code>&#47;target&#47;etc&#47;fstab</code> (you must use <code>nano</code> as unfortunately there is no -version of <code>vi</code> in this busybox configuration) and add the relevant -entries to mount your subvolumes on boot. These should look the same as the -entry that already exists but you will have to change the options from <code>default</code> -to the ones that we used above when mounting our subvolumes and you will have to -change the mount points. For example, the line for mounting the root filesystem -will go from:</p> - -<pre><code>&#47;dev&#47;mapper&#47;debianbtrfs--vg-root &#47; btrfs defaults 0 0 -</code></pre> - -<p>to:</p> - -<pre><code>&#47;dev&#47;mapper&#47;debianbtrfs--vg-root &#47; btrfs noatime,compress=lzo,space_cache,subvol=@ 0 0 -</code></pre> - -<p>Where the other lines will look similar:</p> - -<figure> - <a href="/img/debian-with-btrfs/target-fstab.png"><img - src="/img/debian-with-btrfs/target-fstab.png" alt="The contents of the - /target/etc/fstab file after modification."/></a> -</figure> - -<p>Once this is all done and you have saved your changes, you may exit out of this -terminal (<code>Ctrl</code>+<code>D</code>) and return to the installation (<code>Ctrl</code>+<code>Alt</code>+<code>F1</code>). -Proceed with the installation as normal and, when you boot, you should have a -btrfs filesystem working with subvolumes!</p> - -<p>If you get stuck somewhere, try asking in the many helpful areas of the Internet -such as the <a href="">Debian User Forums</a>, the -<code>#debian</code> IRC channel on the Freenode network, or the <code>debian-user</code> mailing -list. See this resource for <a href="">more -information on getting help with Debian.</a></p> - -<p><em>This is my seventy-first post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Using the "rm" Command with Trash</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-13T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Using%20the%20&amp;#8220;rm&amp;#8221;%20Command%20with%20Trash">Using the &#8220;rm&#8221; Command with Trash</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-13</p> - -<p>Those who use regular file browsers like Nautilus, Dolphin, or Thunar are used -to having an item go into the Trash folder (or &#8220;Recycle Bin&#8221; for Windows folks) -when it is deleted. This allows them to restore that file in the case that they -accidentally deleted it. However, on the command line the <code>rm</code> command will -irreversibly delete a file from your system (short of using data recovery -techniques) and has no concept of a Trash folder. This is a simple hacky way -to make <code>rm</code> remove a file to the Trash folder first so that you can prevent -yourself from accidentally irreversibly deleting something really important.</p> - -<h2 id="POSIX,%20Bash%20and%20Bash-like,%20Fish,%20and%20Korn%20Shells">POSIX, Bash and Bash-like, Fish, and Korn Shells</h2> - -<pre><code class="language-bash">alias rm=&#39;mv -t $XDG_DATA_HOME&#47;Trash&#47;&#39; -alias rm!=&#39;\rm&#39; -</code></pre> - -<h2 id="C%20Shell%20(csh)%20and%20TENEX%20C%20Shell%20(tcsh)">C Shell (csh) and TENEX C Shell (tcsh)</h2> - -<pre><code class="language-bash">alias rm &#39;mv -t $XDG_DATA_HOME&#47;Trash&#47;&#39; -alias rm! &#39;\rm&#39; -</code></pre> - -<h2 id="Explanation">Explanation</h2> - -<p>The aliases above do the following:</p> - -<ul> -<li>Alias <code>rm</code> to <code>mv</code> where any files specified will be moved to the XDG standard -trash folder instead of being deleted.</li> -<li>Alias <code>rm!</code> to the normal <code>rm</code> program -which effectively makes <code>rm!</code> a &#8220;permanently delete this&#8221; command.</li> -</ul> - -<p>If you choose not to have <code>$XDG_DATA_HOME</code> defined, you can replace that bit -with whichever path you prefer such as <code>$HOME&#47;.Trash</code>. The folder you choose -must already exist or else <code>mv</code> will be angry.</p> - -<p><em>This is my seventieth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Colours for Gitea Issues</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-11T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Colours%20for%20Gitea%20Issues">Colours for Gitea Issues</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-11</p> - -<p>I don&#8217;t use Gitea anymore, but when I did I created a colourscheme for -classifying issues. This page used to exist on my Wiki, but since both that and -Gitea are no longer being used, I figured others using Gitea may get use out of -this scheme.</p> - -<table> <thead> -<tr> <th>Colour</th> <th>Colour Code</th> <th>Label</th> <th>Description</th> </tr> -</thead> <tbody> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>Linux</td> <td>"This applies to Linux"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>Windows</td> <td>"This applies to Windows"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>MacOS</td> <td>"This applies to MacOS"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>FreeBSD</td> <td>"This applies to FreeBSD"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>OpenBSD</td> <td>"This applies to OpenBSD"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>Other OS</td> <td>"This applies to another OS"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>Front-end</td> <td>"This is a front-end feature"</td> </tr> -<tr> <td style="background-color:#bfd4f2"></td> <td>#bfd4f2</td> <td>Back-end</td> <td>"This is a back-end feature"</td> </tr> -<tr> <td style="background-color:#ee0701"></td> <td>#ee0701</td> <td>Bug</td> <td>"Something is not working"</td> </tr> -<tr> <td style="background-color:#ee0701"></td> <td>#ee0701</td> <td>Security</td> <td>"A security-related bug"</td> </tr> -<tr> <td style="background-color:#fef2c0"></td> <td>#fef2c0</td> <td>Mindless</td> <td>"A mindless task (e.g. organization, admin work)"</td> </tr> -<tr> <td style="background-color:#207de5"></td> <td>#207de5</td> <td>Enhancement</td> <td>"An enhancement to an existing feature"</td> </tr> -<tr> <td style="background-color:#128a0c"></td> <td>#128a0c</td> <td>Feature</td> <td>"A new feature"</td> </tr> -<tr> <td style="background-color:#84b6eb"></td> <td>#84b6eb</td> <td>Help Wanted</td> <td>"The person assigned has requested help"</td> </tr> -<tr> <td style="background-color:#d4c5f9"></td> <td>#d4c5f9</td> <td>Feedback</td> <td>"Feedback is requested on this issue"</td> </tr> -<tr> <td style="background-color:#fbca04"></td> <td>#fbca04</td> <td>Pending</td> <td>"Progress is pending external factors or issues"</td> </tr> -<tr> <td style="background-color:#cc317c"></td> <td>#cc317c</td> <td>Question</td> <td>"A question is being asked"</td> </tr> -<tr> <td style="background-color:#cccccc"></td> <td>#cccccc</td> <td>Duplicate</td> <td>"This is a duplicate"</td> </tr> -<tr> <td style="background-color:#cccccc"></td> <td>#cccccc</td> <td>Invalid</td> <td>"This is invalid in some way"</td> </tr> -<tr> <td style="background-color:#cccccc"></td> <td>#cccccc</td> <td>Wontfix</td> <td>"This won't be fixed"</td> </tr> -</tbody> </table> - -<p>Here is the above table in the Gitea labels template format (the content below -goes into a file in <code>custom&#47;options&#47;label&#47;</code>:</p> - -<pre><code>#bfd4f2 Linux ; This applies to Linux -#bfd4f2 Windows ; This applies to Windows -#bfd4f2 MacOS ; This applies to MacOS -#bfd4f2 FreeBSD ; This applies to FreeBSD -#bfd4f2 OpenBSD ; This applies to OpenBSD -#bfd4f2 OtherOS ; This applies to another OS -#bfd4f2 Front-end ; This is a front-end feature -#bfd4f2 Back-end ; This is a back-end feature -#ee0701 Bug ; Something is not working -#ee0701 Security ; A security-related bug -#fef2c0 Mindless ; A mindless task (e.g. organization, admin work) -#207de5 Enhancement ; An enhancement to an existing feature -#128a0c Feature ; A new feature -#84b6eb Help Wanted ; The person assigned has requested help -#d4c5f9 Feedback ; Feedback is requested on this issue -#fbca04 Pending ; Progress pending external factors or issues -#cc317c Question ; A question is being asked -#cccccc Duplicate ; This is a duplicate -#cccccc Invalid ; This is invalid in some way -#cccccc Wontfix ; This won&#39;t be fixed -</code></pre> - -<p><em>This is my sixty-sixth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My TODO Solution</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-08T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20TODO%20Solution">My TODO Solution</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-08</p> - -<p>Yesterday I posted about <a href="">why I don&#8217;t think TODO lists or applications are -useless</a>. -Today, I want to talk about my TODO solution or what I do to keep myself -organized.</p> - -<p>It all comes down to preferring simplicity over complexity. TODO applications or -web tools are very pretty and very easy to synchronize across devices, but they -suffer from the failing of being cumbersome and awkward to use. I find they get -in my way more than they help me usually because of some required format that I -have to structure my thoughts in, too many menus and clicks to do simple things, -or an interface that has more whitespace than the latest minimalist desk picture -on Pinterest.</p> - -<p>I prefer to make literal TODO lists in a physical journal or plain text file. In -fact, I typically do both and have multiple files at the same time. I have a -Leuchtturm1917 A5 DotGrid notebook with an <del>addiction</del> assortment of -fountain pens which I use to keep a physical TODO list and I have a 1970&#8217;s -vintage vi which I use to finely craft my text files.</p> - -<p>By &#8220;literal TODO lists&#8221; I mean just that: a plain list of things to do and -appointments to keep with two different shapes of bullets depending on the type -of item in the list. The TODO lists in my physical task book follow this format:</p> - -<pre><code>Thursday, 1 January, 1970 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -○ Lunch with Brian and Ken @ 12:30 -□ Create UNIX time -■ Refill TTY with paper -□ Destroy undergrads in Spacewar! -</code></pre> - -<p>An empty square <code>□</code> represents a task that is yet to be completed. A filled in -square <code>■</code> represents a task that has been completed. Similarly, an empty circle -<code>○</code> and a filled circle <code>●</code> represent appointments yet to be attended and -appointments which have passed respectively. My task book is just page after -page of days with tasks written like this.</p> - -<p>At the beginning of school semesters, I will dedicate four pages (one for each -month) to listing out the days of the month so that I can note assignment due -dates, midterms, and exams in a single place. If I don&#8217;t complete a task written -down on one day, I&#8217;ll just write down the same task (or what&#8217;s left to do for -that task) on the next day. Sometimes I write a few days ahead if I want to make -sure to remember something that I need to do in the near future.</p> - -<p>Digital TODO lists (aka text files) are typically much shorter-lived. I find -keeping track of things in digital form clunky and awkward to use, so I prefer -to do as much on paper as possible. However, when programming, quickly listing -and organizing a list of features I need to complete or bugs to fix can be -preferable. Once again, this is a plain list with bullet points in a plain text -file. When something is completed, it just gets removed from the list.</p> - -<p>So, that&#8217;s how I stay organized and manage to get things done. No apps, no -special formats, just pen and paper or, more rarely, a plain text file and a -text editor. I&#8217;m interested in hearing about how other people stay organized and -whether or not you use something like a TODO application or just pen and paper. -Let me know by <a href="">sending me a link to a response blog -post</a> or by <a href="">mentioning me on -the Fediverse</a>.</p> - -<p><em>This is my sixty-fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Are TODO Applications a Waste of Time?</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-07T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Are%20TODO%20Applications%20a%20Waste%20of%20Time?">Are TODO Applications a Waste of Time?</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-07</p> - -<p>A few days ago, the following video by Derek Taylor popped up on my feed and got -me thinking about TODO applications: <a href="">Are TODO Applications Hindering Your -Productivity?</a> (<a href=""> -link</a>). Some points that he mentioned -resonated with me, though I think he is slightly wrong in his conclusion.</p> - -<p>He basically said: TODO applications hinder your productivity because you spend -more time organizing your tasks instead of just doing them, they trick you into -thinking you&#8217;re getting things done when, in reality, you&#8217;re just giving -yourself little boosts of dopamine by checking off trivial things, and it sets -you up for failure since humans typically over-estimate how much can be done in -a day. On the whole, I agree with what he says, but I don&#8217;t think TODO -applications are useless or hinder your productivity and there are ways, when -applied correctly, that they can be helpful.</p> - -<p>I have seen in other people and experienced myself the draw to get organized -before beginning a task and then spending more time coming up with or setting up -this &#8220;perfect&#8221; organization system that will prepare me to accomplish tasks -effectively than actually doing the task itself. However, this hypothetical -&#8220;perfect&#8221; system I was creating was really just a way to procrastinate on the -task at hand by making myself feel like I was being productive. In reality, if -I just wrote down a list of things to do and got working, the task would have -been done a lot sooner.</p> - -<p>I have also experienced the urge to write down every little thing I need to do -in a day and religiously check it off as, essentially, a way to feel productive. -This I have a less strong opinion about because it can be a big help on days -where motivation levels are low and distractions are high. I&#8217;ve found completing -small tasks and getting those boosts of dopamine to be a good way to kick-start -my brain into tackling the larger tasks of the day. It&#8217;s like starting a car -engine on a cold day: turn the engine over a few times and eventually it&#8217;ll -spring to life and become self-sustaining. The problem here arises when one -stops at just doing the small tasks, is &#8220;satisfied&#8221; by those tiny boosts of -dopamine, and doesn&#8217;t do anything else from there. At that point, the TODO list -ceases to be useful and just becomes a source of anxiety and a way to put off -the bigger tasks.</p> - -<p>Overestimation is a big human problem. We frequently overestimate how much we -can accomplish in an hour, let alone a day. This frequently leads to situations -where we expect to get a lot done so we create a huge list of things to do and -then feel bad when we couldn&#8217;t accomplish what we thought we could. This isn&#8217;t a -problem with TODO lists; it&#8217;s a trapping that one has to be aware of and avoid -when planning their days or getting organized.</p> - -<p>Essentially, TODO lists or TODO applications are not the problem here, it&#8217;s -people using them as a procrastinative and as a way to feel productive instead -of actually doing the things that need to be done which is the problem. In -reality, a well-curated, disorganized, simple checklist can be as or more -effective than a well-organized, pretty TODO system that has had a lot of -thought and work put into it. TODO lists and applications aren&#8217;t useless, they -just enable productivity anti-patterns and one has to be aware of those -anti-patterns to make effective use of TODO lists and applications.</p> - -<p>Don&#8217;t let the illusion of productivity that TODO lists and applications invite -become a procrastinative outlet or a substitute for doing the actual tasks.</p> - -<p><em><strong>Note</strong>: Procrastinative isn&#8217;t a real word. Except it is now cause I just made -it up:</em></p> - -<div class="note"> -**Procrastinative**, n. or adj. /prəˈkrastənatɪv/ - -1 : (n.) A thing someone uses to procrastinate. - -* "Social media is a procrastinative." - -2 : (adj.) Used to describe an object which is frequently used to procrastinate. - -* "I have a procrastinative game collection." -* "This deck of cards is my procrastinative outlet." - -3 : (adj.) A feeling that describes one's desire to procrastinate. - -* "I'm feeling very procrastinative today." -</div> - -<p><em>This is my sixty-third post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Improving Blog Searching</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-06T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Improving%20Blog%20Searching">Improving Blog Searching</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-06</p> - -<p>A few days ago I posted about <a href="">the really simple solution I came up with for -searching on my blog</a>. -Since then, I&#8217;ve had a few good replies about ways I could make it better. One -suggestion in particular fit with the themes and goals of this website so I went -ahead and implemented it to improve the search experience on my site.</p> - -<h2 id="Evaluating%20Other%20Suggestions">Evaluating Other Suggestions</h2> - -<p>First, let&#8217;s talk about some of the other suggestions made. There was the -suggestion from Amolith of <a href=""></a> that I use a -tiny, JavaScript-less, static search engine called <a href="">Tiny -Search</a> and the suggestion from Kev Quirk -of <a href=""></a> who mentioned that DuckDuckGo provides <a href="">an -embeddable search bar</a> in the form of an -iframe. Both were great suggestions, but let&#8217;s look at why I think they wouldn&#8217;t -work for my site.</p> - -<p>Tiny Search is a really clever and interesting project, but it achieves its -functionality through WebAssembly. WebAssembly is a new web technology created -to allow web-native apps to run far faster and far more efficiently than if they -were written in JavaScript. Unfortunately, this means that basically only the -three big browser engines support it: Gecko (Firefox), Blink (Chrome and its -derivatives), and WebKit (Safari and its derivatives). That means anybody -browsing my site with an alternative browser such as Lynx or w3m won&#8217;t be able -to make use of it. I could provide a fallback, but the other reason why I didn&#8217;t -choose it is because it advertises itself as being between &#8220;50kB-100kB gzipped&#8221; -which is very large when put in context with the average size of one of my pages -being 10-20kB for an entire page, or ~6-7kB for just the HTML.</p> - -<p>I played around with Kev&#8217;s suggestion of the DuckDuckGo iframe and it worked -quite well and was very easy to generate and add to my page. However, it had the -same issues as Tiny Search where it would balloon the size of the blog page by -up to 3x its original size, and it would make 3 third-party requests to load in -the necessary assets. Also, iframes are not supported by Lynx or w3m but it was -trivial to add a fallback for those browsers. The main issues that I had with -this method were the third party requests and large size of the loaded assets.</p> - -<p>To summarize, I didn&#8217;t go with the above two suggestions because of the use of -unsupported technology in browsers which I target and because of the size of the -assets which would be required to make them functional. Both are trivial in the -context of many contemporary sites, but I like to keep my site as slim as -possible and I like to maintain compatibility with alternative browsers.</p> - -<h2 id="The%20Solution%20I%20Chose">The Solution I Chose</h2> - -<p>However, <a href="">Oscar Benedito</a> suggested something which -caught my eye and which I didn&#8217;t even know was possible: a form that makes a -request to DuckDuckGo. This solution uses technology that has been supported in -every web browser for decades and adds a mere 300 bytes to the size of the page -since it&#8217;s just a plain HTML form. This is what I have which now powers my -site&#8217;s search:</p> - -<pre><code class="language-html">&#60;form action="https:&#47;&#47;;" method="get"&#62; - &#60;input name="sites" type="hidden" value=";blog"&#62; - &#60;input aria-label="Search this blog." name="q" type="text" - placeholder="Search This Blog"&#62; - &#60;button aria-label="Submit search query."&#62;&#38;#128270;&#60;&#47;button&#62; -&#60;&#47;form&#62; -</code></pre> - -<p>That&#8217;s it! Instead of a link to a DuckDuckGo search where users would have to -type their search query in after clicking it, users can now type their query -into this form and they will be sent to a DuckDuckGo page with the results. This -still improves the UX while keeping the page small and using features supported -in browsers like Lynx and w3m.</p> - -<p><em>This is my sixty-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Switching to cgit</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-05T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Switching%20to%20cgit">Switching to cgit</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-05</p> - -<p>I&#8217;ve been using Gitea for almost six months as my self-hosted git server. In -that time it has served its purpose and done well, but it&#8217;s fallen into the same -traps as other platforms like GitHub and GitLab. That is to say, Gitea feels -very slow to use and I don&#8217;t have any need for the plethora of features it -offers.</p> - -<h2 id="What%20I%20Didn&amp;#8217;t%20Like%20About%20Gitea">What I Didn&#8217;t Like About Gitea</h2> - -<p>Regarding this first point. A typical page on Gitea took at least a second to -load, if not longer, and usually weighed between 2 and 3 megabytes. I didn&#8217;t do -any rigorous testing of large diffs or anything like that, I just loaded up the -front page and my profile page. Compared to cgit, which takes milliseconds to -load and has page sizes comparable to my website (10-20 kilobytes), Gitea feels -agonizingly slow to use just like GitHub and GitLab.</p> - -<p>Regarding the features, Gitea comes with things like built-in repo wikis, CI&#47;CD, -social features similar to GitHub, a system for multiple user accounts, and -more. I used none of these features; I basically just used Gitea to host my -repositories and I dislike the pull request development model anyways.</p> - -<h2 id="Setting%20up%20cgit">Setting up cgit</h2> - -<p>When I did my <a href="">comparison of self-hosted git -services</a>, -cgit caught my attention as being light but not as light as something like -Gitweb such that it still has some useful views and features. cgit isn&#8217;t a -software forge, only allowing viewing repositories and downloading files, but it -has all I need out of a self-hosted git solution.</p> - -<p>Setting up cgit was fairly straightforward. I just followed the <a href="">Arch wiki -tutorial on setting up cgit</a> to set -up nginx with fastcgi, python-pygments for syntax highlighting source code, and -I read the cgitrc(5) manpage to flesh out the rest of my <code>&#47;etc&#47;cgitrc</code> config -file.</p> - -<p>Switching over was really easy too. I just copied the repositories that already -existed on the server to a new location (I chose <code>&#47;srv&#47;git</code>) and then switched my -reverse proxy to point to the new git server&#8217;s port instead of Gitea&#8217;s port. -Following that, I just decommissioned Gitea by stopping the server and deleting -any trace of it off of my system.</p> - -<h2 id="Improving%20cgit">Improving cgit</h2> - -<p>One thing that I wanted to try doing to cgit was adding a dark theme that would -be activated by a CSS <code>@media</code> query. Unfortunately, I found the cgit CSS file -to be a huge mess of mixing colour names and hex codes with no use of CSS -variables so it would be an absolute pain to change things. No disrespect to the -developer though, I have a feeling that it&#8217;s because the file has been growing -over time as features have been added and it doesn&#8217;t get a lot of development -time.</p> - -<p>What I did to improve it was to go through the whole file, collect all the -colours that were being used, and consolidate and turn the colours into CSS -variables that could be re-used throughout the file. If you were following some -of my toots on Mastodon, I posted about how some 7 slightly different shades of -grey were being used which I pared down to 4. I also turned the font-size and -logo-width into CSS variables so they would be easier to change from the top of -the file. I have yet to design a good dark theme (this will take some time to -ensure it&#8217;s completely accessible), but I feel like the CSS will be a lot easier -to work with now.</p> - -<p>I did also make some other improvements throughout the CSS. For example, I set -my base font-size to <code>100%</code> instead of the ridiculously tiny <code>10pt</code>, I added -underlining to all links in tables (because previously you had to hover over -them with your mouse to distinguish a link from just plain text), and I improved -some colours to ensure that there were no contrast issues. I also used the -<code>borland</code> theme in python-pygments because it had no contrast issues against the -white background unlike <code>default</code>.</p> - -<h2 id="Conclusion">Conclusion</h2> - -<p>I&#8217;m still working on cleaning and organizing my project repositories, but I feel -the interface of cgit is a lot smoother and easier to work with than Gitea. All -of the development will be done through the command line and through email -patches which I prefer and I don&#8217;t have to feel bad about hosting really -bloated, JavaScript-heavy webpages.</p> - -<p>I&#8217;m not quite sure if I&#8217;ll be able to get a dark theme working, but I have made -all of my customizations and settings available in its own repository for others -to look at. Here is the <a href="">sourcehut -repository</a> and here is <a href="">the repository -on my git server</a>.</p> - -<p><em>This is my sixty-first post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Generating My Geek Code</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-04T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Generating%20My%20Geek%20Code">Generating My Geek Code</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-04</p> - -<p>I&#8217;ve seen something called the Geek Code around the Internet on some people&#8217;s -profiles. After reading a <a href="">recent blog post by Marc -Grondin</a>, -I figured it would be fun to create my own Geek Code.</p> - -<p>A Geek Code is essentially a sequence of symbols that, when parsed, give other -people a general idea about someone within the context of very geeky things like -computers and Star Trek. It&#8217;s straightforward to set up since you just have to -go through the <a href="">Geek Code document</a> and fill out -your code with the qualifiers that fit you the best. It does lack a little bit -of nuance in some areas, so don&#8217;t get too hung up on choosing <em>exactly</em> the -right value.</p> - -<p>My Geek Code (as of the time of writing) came out to:</p> - -<pre><code>-----BEGIN GEEK CODE BLOCK----- -Version: 3.1 -GCS&#47;TW&#47;O d-(+) s:- !a C++(+++) UL+++&#47;++++ P+&#62;+++ L+++&#62;++++ E--- W--(++) N+ o? -K- w-- O? M+ V? PS++ PE-- Y++ PGP t++ 5? X? R !tv b++ D G- e&#62;++ h -r++&#62;+++ y? -------END GEEK CODE BLOCK------ -</code></pre> - -<p>Which can be <a href="">decoded here</a>.</p> - -<p><em>This is my sixtieth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>A Month-and-a-Half of Self-Hosted Email</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-07-02T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="A%20Month-and-a-Half%20of%20Self-Hosted%20Email">A Month-and-a-Half of Self-Hosted Email</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-07-02</p> - -<p>There&#8217;s been a lot of talk in my Internet neighbourhood lately about the state -of email and whether it&#8217;s broken or not. I previously posted about how I think -<a href="">email is the best discussion -platform</a> so you can -probably infer my position already. However, I wanted to add the perspective of -someone self-hosting email to the discussion since the two major points people -are talking about are spam and privacy.</p> - -<p>I went live with my self-hosted email server on 2020-05-19; almost a month and a -half ago. Since then, I&#8217;ve been using it daily for all of my email-based -communications through IMAP (there is no web interface). As I discussed in my -<a href="">blog posts about setting up -email</a>, I am using -OpenBSD with OpenSMTPD, Dovecot, and Rspamd which is holding up well as a solid, -reliable software stack.</p> - -<p>I have had no issues sending email to any domain and I haven&#8217;t had to do any -maintenance on the server except for needing to ssh in a couple of times to run -<code>doas sysupgrade</code> when a patch for the base system was released (I&#8217;ve signed up -to the OpenBSD mailing list which notifies me when these updates are released, -so it&#8217;s a simple matter of logging on, running the update, and rebooting the -server which takes all of 5 minutes to do). In fact, I just ran <code>uptime</code> and the -server says it&#8217;s been <code>up 27 days, 23:16</code>. Additionally, I have package updates -run as a daily cron job and I force TLS certificate renewal in a monthly cron -job. I get daily and monthly emails about the output of both of those commands -so I can quickly make sure that everything is running as it should. Maintenance -is a non-issue for me.</p> - -<p>Regarding spam, the number one complaint I hear across the Internet when -self-hosting email is that spam is unmanageable for someone self-hosting their -own email. I am someone who readily posts -<a href=""></a> links on my site and in -a handful of blog posts, I have my Rspamd configuration set up to conservatively -junk emails instead of outright blocking them (unless they come from a dynamic -IP address, then they&#8217;re outright blocked), and I haven&#8217;t received <em>a single</em> -piece of spam email directed at me. The only actual spam that has landed in my -junk folder is the very occasional message that slipped past a mailing list&#8217;s -filter (usually from a Linux mailing list). I can count on one hand the number -of those messages that I have received.</p> - -<p>I&#8217;m not sure what it is, but somehow after leaving a big mail provider (in my -case it was ProtonMail), I now receive less spam despite using the exact same -email address and publicly advertising my email. My experience matches that of -the creator of OpenSMTPD:</p> - -<blockquote> -<p>I take absolutely no precaution hiding my e-mail address, <a href=""></a>, -and I sometimes get one or two spam e-mails per day in the junk folder. Not -only is that not a daily nightmare, but it’s less than what I actually receive -on my own Big Mailer Corps account <a href="%5Bsource%20for%20the%20quote%5D(">&#8230;</a></p> -</blockquote> - -<p>As far as privacy is concerned, I don&#8217;t have to worry about a company analyzing -my every inbound and outbound email to gather data on me because I am my own -provider. Many of my emails still grace Google&#8217;s and Microsoft&#8217;s servers with -their presence, but I recognize that any email not end-to-end encrypted is not -truly private (though they are still encrypted in transit with TLS). I&#8217;m not -going to be discussing intimate details or credit card information with someone -via email because I know the limitations of the medium. If I&#8217;m sending sensitive -data, I would encrypt my message with GPG or use a different medium such as -Matrix.</p> - -<p>Back in the early days of the Internet (back before it even <em>was</em> &#8220;the -Internet&#8221;), <a href="">email was used as a collaboration -tool</a> (<a href=""> -link</a>) and it still excels at that -purpose. Many people still <a href="">find email better to use for -collaboration</a>, -as do I. As much as it might seem natural to compare electronic mail to regular -snail mail, it really isn&#8217;t a replacement for that, only a loose analogy. Sure, -email is a much faster way to send a letter-like message to someone and we get -newsletters and whatnot from corporations just like with snail mail (although -with an easier way to opt-out), but governments, banks, and other institutions -which deal with things such as financial information, licensing, insurance, and -highly sensitive personal information still use snail mail because of the legal -guarantees and the known security model of that system.</p> - -<p>I know the others talking about this weren&#8217;t saying exactly this, but I do want -to make the point that just because email doesn&#8217;t provide the same security -guarantees as snail mail, Matrix, or Signal, doesn&#8217;t mean it&#8217;s a broken system; -it just means that it&#8217;s not built for use cases where those other technologies -excel. Email excels at being a collaboration tool, a way to quickly disseminate -information and announcements, and a way to get in contact with people with whom -you&#8217;re not close friends. For those purposes, email is working just fine.</p> - -<p><em>This is my fifty-eighth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>How I Keep My Home Directory Clean</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-28T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="How%20I%20Keep%20My%20Home%20Directory%20Clean">How I Keep My Home Directory Clean</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-28</p> - -<p class="note">Note: I have stopped caring about keeping my home directory -clean. While it might be nice to do an <code>ls -a</code> and see hardly -anything, it just wasn't worth the continual effort to wrangle programs into -behaving. Not to mention, many programs I use are old enough that they predate -the XDG specification and therefore don't comply anyways.</p> - -<p><em><strong>Update</strong>: The name of the tool mentioned later in the post is -<a href="">rehome</a>. Also added a screenshot showing the -current state of my home directory.</em></p> - -<p>I am one of those people who likes to keep files organized and directories -clean. Unfortunately, it seems many software developers don&#8217;t care about this -and like to dump their program&#8217;s configuration and state information into my -home directory, rather than putting it in the proper XDG specified directories. I&#8217;ve -gone through quite a bit of effort, mainly using the <a href="">Arch Wiki&#8217;s page on the -XDG Base Directory -specification</a>, to -clean up my home directory from a lot of the cruft programs like to leave lying -around.</p> - -<figure> - <a href="/img/home-directory.png"><img src="/img/home-directory.png"/></a> - <figcaption>The current state of my home directory. Only 12 items.</figcaption> -</figure> - -<p>Most programs, if they don&#8217;t already recognize the <code>XDG_CONFIG_HOME</code> environment -variable, have their own environment variables that they look at to find the -location of configuration data. Some examples from my <code>.profile</code> are:</p> - -<pre><code class="language-bash">export XAUTHORITY="$XDG_CONFIG_HOME&#47;X11&#47;Xauthority" -export XINITRC="$XDG_CONFIG_HOME&#47;X11&#47;xinitrc" -</code></pre> - -<p>Which get rid of the <code>.xinitrc</code> and <code>.Xauthority</code> files which would normally sit -in the home directory.</p> - -<p>Some programs, however, don&#8217;t have environment variables but can still be told -where to find configuration information using a command line switch. For -example, in my <code>.bashrc</code> I have the aliases:</p> - -<pre><code class="language-bash">alias tmux=&#39;tmux -f "$XDG_CONFIG_HOME"&#47;tmux&#47;tmux.conf&#39; -alias wget=&#39;wget --hsts-file="$XDG_CACHE_HOME&#47;wget-hsts"&#39; -</code></pre> - -<p>Which tell <code>tmux</code> to find its configuration in a directory in the <code>XDG_CONFIG_HOME</code> -directory, and <code>wget</code> to store its history in the <code>XDG_CACHE_HOME</code> directory.</p> - -<p>Unfortunately, even with changes in <code>.profile</code> and aliases in <code>.bashrc</code>, there -are still programs which are hardcoded to put files in the home directory. -Programs like Firefox, SSH, and Vim (although NeoVim respects XDG), are so old -and well-established that the developers are reluctant to change anything for -fear of breaking things that expect the files to be there.</p> - -<p>I have heard of a program designed to trick other programs into thinking the -home is actually in the XDG directories so that they are, in a way, forced to -respect the specification. However, I&#8217;m alright with a few programs here and -there in my home directory as long as it doesn&#8217;t get needlessly cluttered. If -you&#8217;re developing a brand new application there&#8217;s no excuse; please respect the -XDG base directory specification!</p> - -<p><em>This is my fifty-seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why dwm's Window Swallowing Patch Can't Swallow tmux</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-26T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20dwm&amp;#8217;s%20Window%20Swallowing%20Patch%20Can&amp;#8217;t%20Swallow%20tmux">Why dwm&#8217;s Window Swallowing Patch Can&#8217;t Swallow tmux</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-26</p> - -<p><em><strong>Note</strong>: Code snippets in this blog post are governed by the MIT&#47;X Consortium -License as they are snippets taken from dwm code. See <a href="">the dwm LICENSE -file</a>.</em></p> - -<p>The dwm swallow patch is my favourite patch for dwm because it allows me to -launch GUI applications from my terminal and have the launched application take -over the terminal instead of spawning next to the terminal and rendering the -terminal window useless. You can sort of do this by just appending <code>&#38;</code> and then -closing the terminal, but you also don&#8217;t get the terminal back once the -application has closed. Something like launching a video with <code>mpv &#60;video&#62;</code> and -having the mpv window replace the terminal window is very nice.</p> - -<p>I was also playing around with running every terminal window with tmux -specifically because it would allow me to remove the scrollback patch from my -terminal emulator st and becuse it handles redrawing the text when the terminal -window is resized. However, I noticed that launching applications from within a -terminal running tmux wouldn&#8217;t get swallowed. A brief search on the interwebs -turned up no useful information, so I decided to get my hands dirty and -investigate why this was the case.</p> - -<p>Before we get started: yes, I know I should learn to use gdb. I have used it -before but frequently find printfs do a good enough job that I don&#8217;t have to -faff about with gdb.</p> - -<p><a href="#summary">Jump down to the summary</a> to skip the journey and go right -to the explanation.</p> - -<h2 id="Demonstration">Demonstration</h2> - -<p>Take a look at the animations below to see what happens when a GUI application -is launched while tmux is running:</p> - -<p><video src="/vid/swallow-animated-thumb.webm" alt="A demonstration of window -swallowing where the Zathura PDF viewer takes over the terminal emulator -window." controls>Your browser does not support the video tag.</video> -<a href="/vid/swallow-animated.webm">Click for a higher resolution version of -the above video.</a></p> - -<p><video src="/vid/noswallow-animated-thumb.webm" alt="A demonstration of how, -when tmux is running in a terminal, zathura does not swallow the terminal window -and instead spawns as a regular window." controls>Your browser does not support -the video tag.</video> -<a href="/vid/noswallow-animated.webm">Click for a higher resolution version of -the above video.</a></p> - -<h2 id="Beginning%20the%20Search">Beginning the Search</h2> - -<p>So, what&#8217;s the difference between a normal terminal launching a GUI application -and a terminal running tmux launching a GUI application?</p> - -<p>By this point, I had no idea if the actual cause was something wrong with my -configuration of dwm. Perhaps my recent conversion from the scratchpad to the -named-scratchpads patch messed something up so I started by looking at the -values of the <code>rules[]</code> array in <code>config.h</code> to see if my terminal window was -being wrongly interpreted as being unable to swallow:</p> - -<pre><code class="language-c">static const Rule rules[] = { - &#47;* class instance title tags mask isfloating isterminal noswallow monitor scratch key*&#47; - { "Galculator", NULL, NULL, 0, 1, 0, -1, -1, 0 }, - { "Gimp", NULL, NULL, 0, 0, 0, -1, -1, 0 }, - { "Firefox", NULL, NULL, 1 &#60;&#60; 1, 0, 0, -1, -1, 0 }, - { "St", NULL, NULL, 0, 0, 1, 0, -1, 0 }, - { NULL, NULL, "scratchpad", 0, 1, 1, 1, -1, &#39;s&#39; }, - { NULL, NULL, "calculator", 0, 1, 1, 1, -1, &#39;c&#39; }, - { NULL, NULL, "Event Tester", 0, 1, 0, 1, -1, 0 }, -}; -</code></pre> - -<p>These rules are interpreted by the function <code>applyrules()</code> which applies rules -to a launched client based on what&#8217;s in the <code>rules[]</code> array. A few <code>printf</code>s -later and I had found out that everything was being correctly interpreted here.</p> - -<h2 id="Finding%20The%20Answer">Finding The Answer</h2> - -<p>Since that thread didn&#8217;t lead anywhere, I examined the content of the swallow -patch itself to see what code it added and where I should look next. It led me -to look inside the <code>manage()</code> function which calls <code>swallow()</code> at the very end -if the variable <code>term</code> is a truthy value.</p> - -<pre><code class="language-c">void -manage(Window w, XWindowAttributes *wa) -{ - ... - if (term) - swallow(term, c); - focus(NULL); -} -</code></pre> - -<p><code>term</code> is of type <code>Client *</code> and is set to <code>NULL</code> at the beginning of the -function:</p> - -<pre><code class="language-c">void -manage(Window w, XWindowAttributes *wa) -{ - Client *c, *t = NULL, *term = NULL; - ... -} -</code></pre> - -<p><code>term</code> is then later set by the <code>termforwin()</code> function:</p> - -<pre><code class="language-c">void -manage(Window w, XWindowAttributes *wa) -{ - ... - if (XGetTransientForHint(dpy, w, &#38;trans) &#38;&#38; (t = wintoclient(trans))) { - c-&#62;mon = t-&#62;mon; - c-&#62;tags = t-&#62;tags; - } else { - c-&#62;mon = selmon; - applyrules(c); - term = termforwin(c); - } - ... -} -</code></pre> - -<p><code>termforwin()</code> returns a <code>Client *</code> value which represents the terminal which -launched the client application. It determines which terminal window the GUI -application was just launched from so dwm knows which window should be -swallowed.</p> - -<p>My <code>printfs</code> up to this point told me that <code>termforwin()</code> was returning <code>NULL</code> -when a GUI application was launched inside of a terminal running tmux which is -why <code>swallow()</code> was not being called for these applications:</p> - -<pre><code>Applying rules to client st -Rules for window: -Title: (null) -Class: St -Instance: (null) -IsTerminal: 1 -NoSwallow: 0 -IsFloating: 0 -Tags: 0 -Scratchkey: -IN MANAGE(): term: (nil) -Applying rules to client org.pwmt.zathura -IN MANAGE(): term: 0x5626932ad110 &#60;--- No tmux -Entered swallow function -IN SWALLOW(): org.pwmt.zathura should be swallowing st -Applying rules to client org.pwmt.zathura -IN MANAGE(): term: (nil) &#60;--- With tmux -</code></pre> - -<p>Now I had to take a look inside <code>termforwin()</code> to discover why it was returning -<code>NULL</code> for these windows. Since there were only two places where <code>NULL</code> could be -returned, I checked which of the two conditions were failing. It turned out that -the second <code>return NULL;</code> was being reached which meant that the <code>if</code> statement -inside the <code>for</code> loops was evaluating to false for every value of <code>c</code>.</p> - -<pre><code class="language-c">Client * -termforwin(const Client *w) -{ - Client *c; - Monitor *m; - - if (!w-&#62;pid || w-&#62;isterminal) - return NULL; - - for (m = mons; m; m = m-&#62;next) { - for (c = m-&#62;clients; c; c = c-&#62;next) { - if (c-&#62;isterminal &#38;&#38; !c-&#62;swallowing &#38;&#38; c-&#62;pid &#38;&#38; isdescprocess(c-&#62;pid, w-&#62;pid)) - return c; - } - } - - return NULL; -} -</code></pre> - -<p>A few more <code>printfs</code> later and I discovered that the cause of the failure was -that <code>isdescprocess()</code> was returning <code>0</code>. <code>isdescprocess()</code> is a function that -determines if a process is a descendant of another process by walking up the -process tree. In the case above, it is trying to determine if the next client -<code>c</code> in the list of clients is a parent process of our newly launched process -<code>w</code>.</p> - -<p>This check consistently failed every time a GUI application was launched from a -terminal running tmux which meant that the variable <code>term</code> was always <code>NULL</code>. To -get a closer look at why this might be failing, I added some more <code>printfs</code> in -strategic locations and ran <code>pstree -g</code> alongside every test I performed.</p> - -<p>Here are the three scenarios I tested with relevant sections from the output log -I created (<code>dwm.log.6</code>) along with the relevant snippets from the <code>pstree</code> -output:</p> - -<h3 id="Zathura%20with%20Just%20st">Zathura with Just st</h3> - -<pre><code class="language-c">MANAGE(): XGetTransientForHint: 0 -MANAGE(): wintoclient: (nil) -APPLYRULES(): applying to client st -TERMFORWIN(): pid: 33340, isterminal: 1 -MANAGE(): term: (nil) -MANAGE(): if term exists then c will swallow -MANAGE(): XGetTransientForHint: 0 -MANAGE(): wintoclient: (nil) -APPLYRULES(): applying to client st -TERMFORWIN(): pid: 33369, isterminal: 1 -MANAGE(): term: (nil) -MANAGE(): if term exists then c will swallow -MANAGE(): XGetTransientForHint: 0 -MANAGE(): wintoclient: (nil) -APPLYRULES(): applying to client org.pwmt.zathura -TERMFORWIN(): pid: 33382, isterminal: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33382 -ISDESCPROCESS(): pid 33382 -ISDESCPROCESS(): pid 33341 -ISDESCPROCESS(): pid 33340 -ISDESCPROCESS(): pid 33305 -ISDESCPROCESS(): pid 33292 -ISDESCPROCESS(): pid 33259 -ISDESCPROCESS(): pid 33254 -ISDESCPROCESS(): pid 1 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33369, isdescproc: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33382 -ISDESCPROCESS(): pid 33382 -ISDESCPROCESS(): pid 33341 -ISDESCPROCESS(): pid 33340 -ISDESCPROCESS(): pid 33305 -ISDESCPROCESS(): pid 33292 -ISDESCPROCESS(): pid 33259 -ISDESCPROCESS(): pid 33254 -ISDESCPROCESS(): pid 1 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33382 -ISDESCPROCESS(): pid 33382 -ISDESCPROCESS(): pid 33341 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33340, isdescproc: 33340 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33382 -ISDESCPROCESS(): pid 33382 -ISDESCPROCESS(): pid 33341 -MANAGE(): term: 0x55b88574e0e0 -MANAGE(): if term exists then c will swallow -MANAGE(): swallowing... -IN SWALLOW() -SWALLOW(): org.pwmt.zathura should be swallowing st -======================================================= -</code></pre> - -<pre><code>systemd(1)-+-ModemManager(1278)-+-{ModemManager}(1278) - |-login(33254)---startx(33254)---xinit(33254)-+-Xorg(33293)-+-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | `-{Xorg}(33293) - | `-dwm(33305)-+-compton(33305)-+-{compton}(33305) - | | |-{compton}(33305) - | | |-{compton}(33305) - | | `-{compton}(33305) - | |-dunst(33305)-+-{dunst}(33305) - | | `-{dunst}(33305) - | |-lxpolkit(33305)-+-{lxpolkit}(33305) - | | `-{lxpolkit}(33305) - | |-slstatus(33305) - | |-st(33340)---bash(33341)---zathura(33382)-+-{zathura}(33382) - | | |-{zathura}(33382) - | | |-{zathura}(33382) - | | |-{zathura}(33382) - | | |-{zathura}(33382) - | | |-{zathura}(33382) - | | `-{zathura}(33382) - | |-st(33369)---bash(33370)---pstree(33390) - | |-unclutter(33305) - | `-xautolock(33305) -</code></pre> - -<h3 id="Zathura%20with%20st%20Running%20tmux">Zathura with st Running tmux</h3> - -<pre><code class="language-c">MANAGE(): XGetTransientForHint: 0 -MANAGE(): wintoclient: (nil) -APPLYRULES(): applying to client org.pwmt.zathura -TERMFORWIN(): pid: 33414, isterminal: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33414 -ISDESCPROCESS(): pid 33414 -ISDESCPROCESS(): pid 33398 -ISDESCPROCESS(): pid 22354 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33369, isdescproc: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33414 -ISDESCPROCESS(): pid 33414 -ISDESCPROCESS(): pid 33398 -ISDESCPROCESS(): pid 22354 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33414 -ISDESCPROCESS(): pid 33414 -ISDESCPROCESS(): pid 33398 -ISDESCPROCESS(): pid 22354 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33340, isdescproc: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33414 -ISDESCPROCESS(): pid 33414 -ISDESCPROCESS(): pid 33398 -ISDESCPROCESS(): pid 22354 -TERMFORWIN(): Passed pid and isterminal check but returning NULL -MANAGE(): term: (nil) -MANAGE(): if term exists then c will swallow -=========================================================== -</code></pre> - -<pre><code>systemd(1)-+-ModemManager(1278)-+-{ModemManager}(1278) - |-login(33254)---startx(33254)---xinit(33254)-+-Xorg(33293)-+-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | `-{Xorg}(33293) - | `-dwm(33305)-+-compton(33305)-+-{compton}(33305) - | | |-{compton}(33305) - | | |-{compton}(33305) - | | `-{compton}(33305) - | |-dunst(33305)-+-{dunst}(33305) - | | `-{dunst}(33305) - | |-lxpolkit(33305)-+-{lxpolkit}(33305) - | | `-{lxpolkit}(33305) - | |-slstatus(33305) - | |-st(33340)---bash(33341)---tmux: client(33397) - | |-st(33369)---bash(33370)---pstree(33418) - | |-unclutter(33305) - | `-xautolock(33305) - |-tmux: server(22354)-+-bash(22355) - | |-bash(22513) - | |-bash(24710) - | `-bash(33398)---zathura(33414)-+-{zathura}(33414) - | |-{zathura}(33414) - | `-{zathura}(33414) -</code></pre> - -<h3 id="Zathura%20with%20st%20Running%20screen">Zathura with st Running screen</h3> - -<pre><code class="language-c">APPLYRULES(): applying to client org.pwmt.zathura -TERMFORWIN(): pid: 33439, isterminal: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33439 -ISDESCPROCESS(): pid 33439 -ISDESCPROCESS(): pid 33431 -ISDESCPROCESS(): pid 33430 -ISDESCPROCESS(): pid 33429 -ISDESCPROCESS(): pid 33341 -ISDESCPROCESS(): pid 33340 -ISDESCPROCESS(): pid 33305 -ISDESCPROCESS(): pid 33292 -ISDESCPROCESS(): pid 33259 -ISDESCPROCESS(): pid 33254 -ISDESCPROCESS(): pid 1 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33369, isdescproc: 0 -ISDESCPROCESS(): Walking up the process tree to find if p 33369 is parent of c 33439 -ISDESCPROCESS(): pid 33439 -ISDESCPROCESS(): pid 33431 -ISDESCPROCESS(): pid 33430 -ISDESCPROCESS(): pid 33429 -ISDESCPROCESS(): pid 33341 -ISDESCPROCESS(): pid 33340 -ISDESCPROCESS(): pid 33305 -ISDESCPROCESS(): pid 33292 -ISDESCPROCESS(): pid 33259 -ISDESCPROCESS(): pid 33254 -ISDESCPROCESS(): pid 1 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33439 -ISDESCPROCESS(): pid 33439 -ISDESCPROCESS(): pid 33431 -ISDESCPROCESS(): pid 33430 -ISDESCPROCESS(): pid 33429 -ISDESCPROCESS(): pid 33341 -TERMFORWIN(): isterm: 1, swallowing: (nil), pid: 33340, isdescproc: 33340 -ISDESCPROCESS(): Walking up the process tree to find if p 33340 is parent of c 33439 -ISDESCPROCESS(): pid 33439 -ISDESCPROCESS(): pid 33431 -ISDESCPROCESS(): pid 33430 -ISDESCPROCESS(): pid 33429 -ISDESCPROCESS(): pid 33341 -MANAGE(): term: 0x55b88574e0e0 -MANAGE(): if term exists then c will swallow -MANAGE(): swallowing... -IN SWALLOW() -SWALLOW(): org.pwmt.zathura should be swallowing 12:0:bash - "geras" -=========================================================== -</code></pre> - -<pre><code>systemd(1)-+-ModemManager(1278)-+-{ModemManager}(1278) - |-login(33254)---startx(33254)---xinit(33254)-+-Xorg(33293)-+-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | |-{Xorg}(33293) - | | `-{Xorg}(33293) - | `-dwm(33305)-+-compton(33305)-+-{compton}(33305) - | | |-{compton}(33305) - | | |-{compton}(33305) - | | `-{compton}(33305) - | |-dunst(33305)-+-{dunst}(33305) - | | `-{dunst}(33305) - | |-lxpolkit(33305)-+-{lxpolkit}(33305) - | | `-{lxpolkit}(33305) - | |-slstatus(33305) - | |-st(33340)---bash(33341)---screen(33429)---screen(33430)---b+ - | |-st(33369)---bash(33370)---pstree(33443) - | |-unclutter(33305) - | `-xautolock(33305) - |-tmux: server(22354)-+-bash(22355) - | |-bash(22513) - | `-bash(24710) -</code></pre> - -<p>Aha! So we can see that the reason <code>isdescprocess()</code> fails every time a GUI -application is launched from a terminal running tmux is because the GUI -application is launched as a child of the tmux server process which itself is a -child of the init process. There&#8217;s no path back up from this new GUI application -to the terminal application, so there&#8217;s no way for dwm to determine which window -launched the application and therefore which window should be swallowed.</p> - -<p>I also tested this using screen and you can see that screen runs as a child of -the terminal emulator window which is why swallowing using screen does still -work whereas it doesn&#8217;t for tmux.</p> - -<h2 id="Summary">Summary</h2> - -<p>dwm’s swallow patch is incapable of handling applications launched from terminal -emulators running tmux because the patch figures out which window should be -swallowed by finding the parent process of the recently launched GUI -application. This fails when running tmux because tmux forks applications from -its server process which is a direct child of PID 1 (the init process). There’s -no direct path up the process tree from the GUI application to the terminal -emulator which means dwm can&#8217;t figure out which terminal should be swallowed by -the new application so it spawns the application normally.</p> - -<p>Swallowing still works with screen because screen is a child process of the -terminal emulator and so are applications launched from it. In this case, there -is a direct path up from the GUI application to the terminal emulator so dwm can -find out which terminal to swallow.</p> - -<h2 id="Workaround">Workaround</h2> - -<p>Right now, there is an okay-ish workaround to still get window swallowing while -running tmux in the form of the -<a href="">devour</a> application. It mimics -swallowing using the <code>xdo</code> program but it doesn&#8217;t provide a true swallowing -experience because it doesn&#8217;t maintain the properties of the window it is -swallowing.</p> - -<p>For example, running a GUI application from a floating terminal emulator will -spawn the application as a regular tiled window whereas, with dwm&#8217;s swallow -patch, the GUI application will take over the exact position, size, and -properties of the terminal emulator window (as you saw in the first animation at -the top of this post).</p> - -<h2 id="Conclusion">Conclusion</h2> - -<p>Here is <a href="">the build of dwm that I used for -testing</a> with source code+printf -statements, logs, and pstree outputs. I know it&#8217;s a bit messy but I thought I&#8217;d -provide it anyways in case someone wants it.</p> - -<p>Since this behaviour is fundamental to the design of tmux, a modification of the -swallow patch would need to be done or an extra dwm patch would need to be -created to solve this problem. Looking at the process trees though, I&#8217;m not sure -how it would be possible to make tmux work with window swallowing.</p> - -<p>dwm would somehow have to find out which tmux client corresponds to which -application forked from the tmux server process. It seems to me that the -approach the swallow patch uses is simply incompatible with the way that tmux -works. If there is some kind of tmux API, then there might be a way to interact -with the tmux server and client processes to determine which terminal window -launched a certain GUI application but I don&#8217;t know how tmux&#8217;s internals work so -this is just a guess. At the moment I don&#8217;t have the time to look into fixing -this, so if anyone reading this wants to have a go, please feel free (and <a href="">let -me know about it</a>)!</p> - -<p>In the meantime, the <code>devour</code> application can be used as a rough replacement for -swallowing if you are dead set on running tmux and want swallowing. For me -though, I&#8217;m not too attached to tmux and I won&#8217;t be using it. The only tangible -advantage it offered me over my existing workflow was better redrawing of -terminal contents when the terminal gets resized which I can easily live -without.</p> - -<p><em>This is my fifty-fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Use Syncthing to Sync Things</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-26T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Use%20Syncthing%20to%20Sync%20Things">Use Syncthing to Sync Things</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-26</p> - -<p>During this round of reinstalling the operating systems on all of my computers, -I wanted a more convenient way to transfer and share files between them. -Previously, I would transfer things like my KeepassXC databases using a USB -stick which was cumbersome. I also didn&#8217;t want something like a NAS because I -don&#8217;t want having a network connection to be a requirement to access my files. -That left me with the option of using some kind of synchronization application -where I&#8217;d have the files on every computer I own and they would be kept -constantly in sync with each other.</p> - -<p>I chose to use <a href="">Syncthing</a>, a program designed for the -sole purpose of synchronizing files and folders between computers. It&#8217;s somewhat -comparable to Dropbox, just way, way better and not proprietary, commercial -garbage. All that is needed to get Syncthing to work is to install the client -application on two or more computers and to connect the computers by entering -their IDs into each other and telling them where the other computer can be -found.</p> - -<p>Let me re-iterate: No complicated server setup, no account creation, no -interaction with an external service; just install a client, run through some -simple configuration, and that&#8217;s it.</p> - -<figure> - <a href="/img/syncthing-dashboard.png"><img - src="/img/syncthing-dashboard-thumb.png"/></a> <figcaption>The Syncthing - dashboard on one of my computers.</figcaption> -</figure> - -<p>I entered my desktop&#8217;s ID into my laptop and vice-versa. I told both computers -to find each other at <code>https:&#47;&#47;&#60;hostname&#62;</code> (hooray for -internal DNS), and off they went synchronizing the ~13.5 GiB I wanted to share. -Now I have a copy of all of my important data including music, PDFs, -screenshots, Newsboat database, KeepassXC databases, and more on both computers. -As long as they&#8217;re both on and awake at the same time, they&#8217;ll keep in sync with -each other and I don&#8217;t have to worry about manually syncing my files.</p> - -<p>If I wanted something analogous to Dropbox with its ability to synchronize using -the Internet, I could set up a server running the Syncthing client which -operates with access to the Internet that my computers would synchronize with. -As far as Syncthing is concerned, there&#8217;s nothing special about this client; it -would just be another computer synchronizing files. Another option would be to -set up a relay server so the computers can find each other behind NAT setups and -such. The downside to the relay server is that it&#8217;s definitely slower than the -direct connection by IP&#47;FQDN. Besides, syncing over the LAN is good enough for -me.</p> - -<p>Syncthing is probably the most painless experience I&#8217;ve had synchronizing files -between my devices. As Nikita said in his <a href="">blog post about -Syncthing</a>, &#8220;It brings the joy of use and -makes you believe the collapse of civilization can be slowed down a bit.&#8221;</p> - -<p><em>This is my fifty-fifth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My LWN Theme</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-22T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20LWN%20Theme">My LWN Theme</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-22</p> - -<p>A <a href="">recent blog post by Amolith</a> about how he -set up his LWN theme made me want to review my settings and tweak them to fit a -colour scheme I now like (this website&#8217;s theme) compared to what I set up over a -year ago. I spent some time switching all of the colours over to something that -would mimic this site, since I like this colour scheme, and I figured I&#8217;d post -about it too in case people are looking for more theme ideas:</p> - -<h2 id="Display%20Preferences">Display Preferences</h2> - -<table> -<thead> -<tr> -<th>Option</th> -<th>Value</th> -</tr> -</thead> - -<tbody> -<tr> -<td>Page background colour</td> -<td><code>#25252a</code></td> -</tr> -<tr> -<td>Left column background</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Middle column background</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Headline background</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Form&#47;byline background</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Sidebar background</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Text colour</td> -<td><code>#cccccc</code></td> -</tr> -<tr> -<td>Link colour</td> -<td><code>#83b3d8</code></td> -</tr> -<tr> -<td>Visited link colour</td> -<td><code>#a696cc</code></td> -</tr> -<tr> -<td>Quoted text (in email) colour</td> -<td><code>#dc00dc</code></td> -</tr> -<tr> -<td>Old (seen) comment background colour</td> -<td><code>#111111</code></td> -</tr> -<tr> -<td>Navigation box on printable page</td> -<td>Checked</td> -</tr> -<tr> -<td>Minimum width of main text column (em)</td> -<td><code>40</code></td> -</tr> -<tr> -<td>Maximum width of main text column (em)</td> -<td><code>50</code></td> -</tr> -<tr> -<td>Display old parent in unread comments screen</td> -<td>Unchecked</td> -</tr> -</tbody> -</table> - -<h2 id="New%20page%20engine%20preferences">New page engine preferences</h2> - -<table> -<thead> -<tr> -<th>Option</th> -<th>Value</th> -</tr> -</thead> - -<tbody> -<tr> -<td>Use the new page engine</td> -<td>Checked</td> -</tr> -<tr> -<td>Left column color</td> -<td><code>#36363a</code></td> -</tr> -<tr> -<td>Maximum width for handset presentation (em)</td> -<td><code>48</code></td> -</tr> -<tr> -<td>Fixed navigation menu on small screens</td> -<td>Checked</td> -</tr> -<tr> -<td>Font family to use</td> -<td><code>browser-determined</code></td> -</tr> -</tbody> -</table> - -<h2 id="Quoted%20text%20preferences">Quoted text preferences</h2> - -<table> -<thead> -<tr> -<th>Option</th> -<th>Value</th> -</tr> -</thead> - -<tbody> -<tr> -<td>Quoted text style</td> -<td><code>italic</code></td> -</tr> -<tr> -<td>Quoted text weight</td> -<td><code>normal</code></td> -</tr> -<tr> -<td>Quoted text colour</td> -<td><code>#bb5555</code></td> -</tr> -<tr> -<td>Quoted text background</td> -<td><code>#25252a</code></td> -</tr> -</tbody> -</table> - -<h2 id="Screenshots">Screenshots</h2> - -<figure> - <a href="/img/lwn-homepage-colours.png"><img - src="/img/lwn-homepage-colours.png"/></a> - <figcaption>The LWN homepage with my colourscheme.</figcaption> -</figure> - -<figure> - <a href="/img/lwn-we-colours.png"><img src="/img/lwn-we-colours.png"/></a> - <figcaption>An LWN Weekly Edition with my colourscheme.</figcaption> -</figure> - -<h2 id="Conclusion">Conclusion</h2> - -<p>I really appreciate that LWN exposes stylesheet settings so that users can set -their own themes. Aside from being the highest quality Linux (and sometimes -general Open Source) news source, that&#8217;s a good reason to subscribe to them.</p> - -<p><em>This is my fifty-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My Beginnings with Gentoo</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-16T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20Beginnings%20with%20Gentoo">My Beginnings with Gentoo</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-16</p> - -<p>I&#8217;m not sure what possessed me to try out Gentoo, but here we are.</p> - -<p>Gentoo is a source-based distribution where, any time you install a package, -programs and their dependencies are compiled from their source code. One of the -advantages to this is that you can decide (via USE flags in Gentoo) which -components you would like to compile into that particular software. This is in -comparison to binary-based distributions where usually all the functionality is -compiled in. The most obvious disadvantage to this is that some programs, like -Firefox or LibreOffice, take a <em>long</em> time to compile.</p> - -<p>Gentoo also has you set up your entire Linux installation from scratch. You are -dumped in a live shell environment and you must format your disks, create -filesystems, download base utilities, and prepare your system manually including -compiling the kernel. For those familiar with Arch Linux, it&#8217;s like Arch but&#8230; -more.</p> - -<p>I find the concept to be really cool considering I&#8217;ve spent my entire time with -Linux using distributions like Ubuntu, Mint, Debian, and Fedora which do a lot -of this hard work for you (I&#8217;ve installed Arch a handful of times, but never -stuck with it). However, I definitely feel very out of my depth with all that -there is to Gentoo.</p> - -<p>I started by printing out the excellent <a href="">Gentoo -Handbook</a> (came out to 23 pieces -of paper, double sided, with 4 pages per side) and burning a minimal -installation USB stick. With the help of the first part of this handbook, and -after cleaning out my T420s&#8217; vents so it would stop overheating while compiling -the kernel, I was able to get a Gentoo system up and running in about 2-3 hours.</p> - -<p>I used the easy options for most of the installation, sticking with mostly what -the wiki told me to do and using <code>genkernel</code> to automatically compile my kernel -as the plethora of options with a manual configuration felt quite daunting. For -now, I just want to get used to the Gentoo ecosystem and didn&#8217;t want to risk -breaking things by trying to get fancy my first time around.</p> - -<p>I held my breath after issuing the <code>reboot</code> command from the installation -environment and got incremental boosts of dopamine as I got through the GRUB -menu, loading the kernel, watching OpenRC&#8217;s output scroll by, and finally -reaching a login prompt. Setting up the general user account was easy and I -chose to go with <code>doas</code> instead of <code>sudo</code> because I like the simplicity of it.</p> - -<p>As of right now, I&#8217;m compiling the software necessary to get my desktop -environment in order. It&#8217;s taken about 2 or so hours just to compile the bare -minimum of X11 packages I need plus all of the other things that make up my -desktop environment like compton, dunst, etc. While all that is compiling, I did -a test <code>startx</code> which interestingly ignored my <code>XINITRC</code> variable and just -launched the <code>xinitrc</code> found in <code>&#47;etc</code> (I checked with the <code>env</code> command that -the variable did exist in my environment). Starting it with <code>startx -.config&#47;X11&#47;xinitrc</code> worked though, and I had my desktop environment up and -running (albeit without all of the flash).</p> - -<p>My first impressions of the distribution are overall positive, though I still -feel very out of my depth. I&#8217;m going to have to do a lot of reading about the -various Gentoo-specific tools, recommended USE flags, how <code>emerge</code> works, and -then probably re-install a few times to get comfortable with the procedure. -Regardless, I feel like I already know a lot more about how to put a Linux -system together and I&#8217;m enjoying the challenge.</p> - -<p><em>This is my forty-seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>My New T420s</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-15T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="My%20New%20T420s">My New T420s</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-15</p> - -<p>Two days ago I picked up a Thinkpad T420s laptop from a local seller for $150 -CAD[1] after spontaneously deciding to look through Kijiji (the Canadian version -of Craigslist or Gumtree). In the package were two 65W power adapters, the -laptop, and an ultrabay SATA adapter which I can swap out the optical drive for -allowing me to add an extra SSD. I think this was a fantastic deal and I&#8217;m glad -I looked when I did.</p> - -<p>The laptop is in really good condition overall. It came cleaned with minimal -wear and tear aside from the trackpad and the trackpoint nub. The battery is -definitely on its last legs reading 50% health and only netting between one and -two hours using it for light tasks, but it still works and it&#8217;s not like I&#8217;m -going anywhere any time soon.</p> - -<p>Here are the specifications it came with:</p> - -<ul> -<li>Thinkpad T420s</li> -<li>Intel Core i5-2520M</li> -<li>1600x900 TN Screen</li> -<li>4GB DDR3</li> -<li>128GB Crucial SSD</li> -<li>Ports: - -<ul> -<li>1 DisplayPort</li> -<li>1 VGA</li> -<li>1 Multi card reader</li> -<li>2 USB 2.0 Ports (with 1 always-on charge port)</li> -<li>1 USB 3.0 Port</li> -<li>Gigabit ethernet</li> -<li>3.5mm Audio jack</li> -</ul></li> -<li>Weight: 1.771kg or 3.904lbs</li> -</ul> - -<p>I upgraded the RAM to 8GB immediately using parts I had laying around and took -off the worn out trackpad sticker (that textured surface is actually just a -sticker!). I also replaced the trackpoint nub with the one from my T440s since -the trackpoint on my T440s stopped working (don&#8217;t get me started, I&#8217;ve been -having a number of issues with it recently.</p> - -<p>The screen is definitely nowhere near as good as the 1080p IPS display I have on -my T440s, but it&#8217;s still a matte screen, the resolution is not bad and I can -live with the viewing angles. It&#8217;s an alright screen overall.</p> - -<p>The keyboard, on the other hand, is amazing. It&#8217;s the classic keyboard used on -Thinkpads before the switch to chiclet style keys starting with the models after -this one. It&#8217;s an absolute pleasure to type on though definitely louder than the -keyboard on my T440s.</p> - -<p>The other distinguishing feature of this and older models of Thinkpads is the -Thinklight. Instead of having a backlit keyboard, there&#8217;s a light at the top of -the screen which shines down on the keyboard. I think it&#8217;s a much better -solution since it illuminates the surrounding area a little bit more and it -feels less straining on the eyes. It&#8217;s basically a tiny lamp.</p> - -<p>A bonus for the T420s over the regular T420 is that there is at least one USB -3.0 port. This comes in handy when I need to transfer large files or boot off of -a USB disk. I&#8217;m also glad that both the main SATA port and the ultrabay run at -SATA-III speeds so I can make full use of my SSDs.</p> - -<p>After getting situated with my new Thinkpad, I hopped on eBay and started -looking for replacement parts. I purchased a bag of new trackpoint nubs, a new -trackpad sticker, and a dock all for about $35 after tax and shipping. I&#8217;m -hesitatnt to buy a new battery because it&#8217;s quite expensive and, since I already -have my T440s I don&#8217;t know if I need this to be quite as portable. I think I -might do it anyways since I really enjoy using this machine.</p> - -<p>Overall, I am really happy with my purchase. I may actually end up using this -laptop more than my T440s because of the Thinklight and the really nice -keyboard.</p> - -<p>Here are a couple pictures of it:</p> - -<figure> - <a href="/img/t420s/t420s-close.jpg"><img - src="/img/t420s/t420s-close-thumb.jpg"/></a> <figcaption>The T420s in all - its glory.</figcaption> -</figure> - -<figure> - <a href="/img/t420s/t420s-wide.jpg"><img - src="/img/t420s/t420s-wide-thumb.jpg"/></a> <figcaption>The T420s from a - different angle. Such a nice machine.</figcaption> -</figure> - -<figure> - <a href="/img/t420s/t420s-thinklight.jpg"><img - src="/img/t420s/t420s-thinklight-thumb.jpg"/></a> <figcaption>The thinklight - feature on the T420s. In my opinion, it's better than the backlit - keyboard.</figcaption> -</figure> - -<figure> - <a href="/img/t420s/t420s-trackpad.jpg"><img - src="/img/t420s/t420s-trackpad-thumb.jpg"/></a> <figcaption>The T420s' - trackpad with the sticker peeled off. It's totally usable this way but I - like the textured sticker better.</figcaption> -</figure> - -<figure> - <a href="/img/t420s/new-sticker.jpg"><img - src="/img/t420s/new-sticker-thumb.jpg"/></a> <figcaption>A brand new - trackpad sticker on the T420s.</figcaption> -</figure> - -<figure> - <a href="/img/t420s/laptop-looking-good.jpg"><img - src="/img/t420s/laptop-looking-good-thumb.jpg"/></a> <figcaption>Just the - laptop looking good.</figcaption> -</figure> - -<p>[1] - $150 CAD is approximately $110 USD, $160 AUD, £88 GBP, €98 EUR, ¥11,811 JPY, 104 CHF, or ₽7,683 RUB as of the &#8220;posted&#8221; date on this post.</p> - -<p><em>This is my forty-sixth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>How I Manage My Dotfiles</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-13T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="How%20I%20Manage%20My%20Dotfiles">How I Manage My Dotfiles</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-13</p> - -<p>I&#8217;ve recently overhauled a lot of the software I use which means I have a whole -new set of configuration files for most of that software. I figured it would be -a good time to change the way I manage these configuration files too. I&#8217;ve -started fresh with a <a href="">new repository for my -dotfiles</a> and retired <a href="">my old -repository</a>.</p> - -<p>I used to manage my dotfiles by manually copying files to and from the git -repository folder or with symlinks but found this far too cumbersome to manage. -I recently read about <a href="">managing dotfiles with a bare -repository</a> and switched to -doing it that way.</p> - -<p>This is what&#8217;s required to set it up:</p> - -<pre><code class="language-sh">git init --bare $HOME&#47;docs&#47;proj&#47;dotfiles -alias config=&#39;git --git-dir=$HOME&#47;docs&#47;proj&#47;dotfiles --work-tree=$HOME&#39; -config config --local status.showUntrackedFiles no -</code></pre> - -<p>And this is what needs to be done on a new machine to deploy my dotfiles:</p> - -<pre><code class="language-sh">git clone --bare https:&#47;&#47;;~jbauer&#47;dotfiles $HOME&#47;docs&#47;proj&#47;dotfiles -rm ~&#47;.bashrc ~&#47;.profile -alias config=&#39;git --git-dir=$HOME&#47;docs&#47;proj&#47;dotfiles --work-tree=$HOME&#39; -config checkout -config config --local status.showUntrackedFiles no -config update-index --skip-worktree LICENSE .gitignore -rm LICENSE .gitignore -</code></pre> - -<p>I opted for this method over using another application like -<a href="">chezmoi</a> or <a href="">GNU -Stow</a> because I didn&#8217;t want <em>Yet Another Bit -of Software</em> to manage what could be done by just using git. I also didn&#8217;t want -to make my entire home folder a git repository because I&#8217;ve heard that it can -cause problems when you have nested repositories that aren&#8217;t part of the same -project, of which I have many.</p> - -<p>You&#8217;ll notice a <code>.gitignore</code>, <code></code>, and <code>LICENSE</code> file in that -repository. Normally, that would mean I&#8217;d have to have those files in my home -directory but, by using the <code>--skip-worktree</code> feature, I can write, add, commit, -and then delete those files without git caring. For example, I would write the -<code></code> file, then do:</p> - -<pre><code class="language-sh">$ config add -$ config commit -m "Add README" -$ rm -$ config update-index --skip-worktree -</code></pre> - -<p>If I need to update any of those files, I can do something like:</p> - -<pre><code class="language-sh">$ config update-index --no-skip-worktree -$ config checkout -- -</code></pre> - -<p>then edit, add, commit, delete, and re-ignore that file.</p> - -<p>Now, all of my configuration files are in my home directory and there is no -copying involved. If I update something on one machine and push those changes, I -can easily apply those changes to another machine. Deploying dotfiles to a -brand new system is a little more of an involved process, but it can be easily -scripted and it doesn&#8217;t happen that often anyways.</p> - -<p><em>This is my forty-fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Scripting My Way to Success</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-08T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Scripting%20My%20Way%20to%20Success">Scripting My Way to Success</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-08</p> - -<p>Something that I love about *nix systems is the composability of all of the -different available tools allowing for very quick prototyping, fast and easy -one-liners, and efficient text processing. I thoroughly (ab)use this to get -nearly everything done.</p> - -<p>Yesterday, when I was curating my blogroll, I needed a way to update the list of -blogs and feeds I follow on my <a href="/links#blogroll">links page</a>. Of course I didn&#8217;t -want to do this manually since that would be a huge pain. Instead, like whenever -I encounter a problem, I turned to scripting. I came up with a script I call -<code></code> (<a href="">view the script -here</a>) -which composes the export functionality of <code>newsboat</code>, the standard <code>awk</code>, -<code>cut</code>, <code>tr</code>, <code>sort</code>, and <code>sed</code> utilities along with <code>vim</code>&#47;<code>nvim</code>&#8217;s scripting -abilities and <code>rsync</code> for uploading the changed files.</p> - -<p>The script basically goes through the exported OPML file from Newsboat, breaks -each line up into a title, html URL, and feed URL, and then replaces the content -of my blogroll page with the new, auto-generated list. Once that&#8217;s done, it -uploads the exported <code>blogroll.opml</code> file and the newly compiled <code>links.html</code> -page. It&#8217;s not portable to other websites but that doesn&#8217;t matter at all because -it&#8217;s not supposed to be. I&#8217;m not creating a tool for someone else to use, I&#8217;m -hacking out a script to perform a simple, repeatable function which would -otherwise be a pain to do manually.</p> - -<p>I created and refined the script over the course of about 30-60 minutes of -actual work and, in doing so, learned about how to properly use <code>vim</code>&#8217;s -scripting abilities, practiced my POSIX shell scripting skills, and had a bunch -of fun.</p> - -<p>That&#8217;s the beauty of scripting and the *nix environment. Any time I encounter a -similar problem, I write a script to handle it for me. Need to parse stats from -a log file? Script it. Need a way to download the content of an entire website? -Script it. Need to test how fast a program runs, then average the runtimes? -Script it. Need to generate an entire website from markdown files? Script it (<a href="">I -did for this -site</a>!).</p> - -<p>Scripting is also great for saving time at work; the more time saved doing -menial tasks, the more time can be spent doing interesting things. Plus, you get -to show off in front of your co-workers and that&#8217;s always a bonus.</p> - -<p>The next time you have a menial task to do, even if it&#8217;s just a small one, give -scripting a shot. It doesn&#8217;t matter whether or not it saves you time in the long -run (unless this is a critical task, then you should probably care), do it for -the fun of it!</p> - -<p><em>This is my thirty-ninth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why Email is the Best Discussion Platform</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-07T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20Email%20is%20the%20Best%20Discussion%20Platform">Why Email is the Best Discussion Platform</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-07</p> - -<p><em><strong>Update</strong>: Expand on asynchronous nature and federated structure. Additions in -italics.</em></p> - -<p>Lots of very vocal people online advocate moving discussion platforms for free -and open source projects from email to other platforms such as Discourse or -Slack citing that these platforms are &#8220;more modern&#8221; or &#8220;easier to use&#8221;. For the -most part, I understand where they&#8217;re coming from. To them, email seems like an -archaic platform where you can&#8217;t embed images, it&#8217;s not completely synchronous, -and&#8230; I honestly couldn&#8217;t think of a third thing&#8230;</p> - -<p>I get it. These platforms are perhaps more inviting because of a friendly UI, -inline image, GIF, and emoji support, and it all runs in the browser which is -where everything else is seemingly done nowadays. The problem is that these -features really aren&#8217;t necessary and they rarely improve discussions which could -otherwise happen, and work just fine, over email.</p> - -<p>Historically, and still to this day, many free and open source software projects -(Debian, git, the Linux kernel, etc) use a combination of email and IRC for -their communications.</p> - -<p>Email is the asynchronous platform where decisions can be announced, questions -can be asked no matter who is online, and there can be an open, infinite public -record of discussions and questions which can be freely searched by anybody -(public mailing list software typically preserves all the messages and they can -be viewed online).</p> - -<p>IRC is the synchronous, ephemeral platform where developers and users can go to -hash out quick discussions, get answers to their support questions quickly, and -generally hang out like one would in a Slack or Mattermost channel. IRC is a -topic for another day, so I&#8217;ll just be focusing on why email is better in this -post.</p> - -<p>The biggest problem with these so called &#8220;modern&#8221; platforms is that they&#8217;re -actually a regression from what already exists. Platforms such as Slack and -Discord are walled gardens requiring account creation, Discourse and Mattermost -are better, yet you still have to access them through a web browser and those -who wish to use their own clients are treated as second-class citizens.</p> - -<p>When using services such as Slack and others which use analytics, users have to -be conscious that they are effectively being monitored by that software all the -time and it&#8217;s entirely possible for platforms like Discord and Slack to be -sharing the information they collect with third party companies who then go on -to sell it (if they don&#8217;t already sell it themselves).</p> - -<figure> - <a href="/img/slack-tracking.png"><img src="/img/slack-tracking.png"/></a> - <figcaption>The log output of uBlock Origin while sitting in a Slack - workspace showing XHR requests to a 'track' URL.</figcaption> -</figure> - -<p>Not to mention the various other issues such as text-only content being far -better for accessibility than what the web can offer, most of the web-based -packages being very bloated where pages take seconds to load and megabytes of -bandwidth, and the fact that web browsers are very resource-hungry pieces of -software which can be difficult for those with fewer resources (e.g. people with -second-hand equipment in third world countries) to run as fast as how Silicon -Valley thinks everyone&#8217;s computer runs.</p> - -<p>So, what does email bring to the table over the &#8220;modern&#8221; options? Email is -federated, it allows one to use a variety of different clients, it can be used -both for patches and discussion, it&#8217;s nowhere near as difficult to use as people -make it out to be, <em>the asynchronous nature is very beneficial</em>, and it eschews -cruft and flash to leave you with nothing but plain text.</p> - -<p>The fact that email is federated allows anyone with an email address to -communicate with any public mailing list no matter who their provider is. For -example, there&#8217;s no need to create a Debian account to post on a Debian mailing -list, anyone with a Gmail account can communicate with anyone using a ProtonMail -account, and so on. The barrier to entry is actually lower than with other -platforms. <em>Also, it being federated means that you&#8217;re not at the mercy of a -couple of appointed moderators or administrators who could choose to ban you -over a disagreement or difference in opinion. Federation allows one to more -freely speak their mind without fear of being kicked off of the platform.</em></p> - -<p>With email, one can also choose whichever client they wish to use. If you work -in emacs you can choose mu4e. If you prefer Thunderbird then you can use that. -As long as your email client supports plain text email, you can use whichever -you like the most. This is very important for many hackers who often heavily -customize the software they run to fit their workflow and their needs. Using -email allows for this freedom.</p> - -<p>Another great thing about email is that it can be used for patches in addition -to discussion. <a href="">Sending patches via email</a> is as -simple and straightforward as using something like Pull Requests. Just like with -Pull Requests, the discussion can be had in the same thread as a submitted patch -and patches can be applied to a repository all without needing to open a web -browser or use a different piece of software.</p> - -<p>Unfortunately, email has a reputation of being hard to use because of what I -think is an unwillingness to learn a new paradigm after having become used to -the way of doing things over the web. The reality of it is that email is not -difficult to use at all, it&#8217;s just different and it takes just a little time and -effort to learn a different paradigm. Many thousands of people use it every day -contributing to projects like the Linux kernel without issue.</p> - -<p>Regarding things like bolding and italicizing, people make do just fine using -<code>&#47;italics&#47;</code>, <code>_underlines_</code>, or <code>*bolds*</code>. There&#8217;s even <code>ALL CAPS</code> for when -you&#8217;re really angry. In short, you&#8217;ll have no issue getting your point across. -Some also say that email conversations are difficult to follow, but that&#8217;s not -really true depending on your mail client; they&#8217;re more like Reddit threads in -any decent email client which supports conversation threading.</p> - -<figure> - <a href="/img/neomutt-threading.png"><img src="/img/neomutt-threading.png"/></a> - <figcaption>NeoMutt displaying a mailing list discussion with - threads.</figcaption> -</figure> - -<p><em>The fact that email is asynchronous is actually far better for discussions than -you might think. Since there are no features showing that someone is online and -people don&#8217;t expect immediate replies to emails, this gives one room to take the -time to draft a much more thoughtful response when compared to the instant -messaging structure of most other platforms. There&#8217;s also a lot less pressure on -one to respond immediately and there are no anxiety-inducing typing indicators.</em></p> - -<p>The final point that I want to make about email is that, just like IRC, there -are no frills; it&#8217;s just regular old plain text. There are no embedded images, -flashy moving pictures, reactions or anything else like that. It lets you truly -focus on just the content. The best part? Plain text email still supports emoji -because it&#8217;s all just Unicode.</p> - -<p><em>This is my thirty-seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Toggling Between Indentation Styles in Vim</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-06-02T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Toggling%20Between%20Indentation%20Styles%20in%20Vim">Toggling Between Indentation Styles in Vim</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-06-02</p> - -<p>Indentation style, much like which editor is superior, is a topic that is -constantly bickered about on the Internet to no end. Usually programmers are -either on the side of indenting with spaces (and typically with 4 spaces), or -indenting with tabs. Relatively few are in the camp of indenting with both -spaces and tabs, though this is still common in certain programming circles.</p> - -<p>I typically use 4 spaces of indentation because that&#8217;s what I learned to use -from using Python as my first language. It wasn&#8217;t until a couple years later -when I encountered Makefile&#8217;s strict reliance on tab characters and the argument -of spaces versus tabs for indentation. I didn&#8217;t see any really convincing -arguments to switch from using spaces, my peers were using spaces, and spaces -also helped me to line things up in languages like Scheme so I saw no real -reason to change.</p> - -<p>I have, however, recently encountered quite a few projects which use tabs and -have noticed many system configuration files using tabs instead of spaces for -indentation. When contributing to other projects, it&#8217;s essential to match the -style of the pre-existing code and when editing those system configuration files -I wanted to be consistent with the existing style so I needed a quick way to -toggle between indentation styles.</p> - -<p>Since I use Vim (Neovim, actually), basically any possible indentation -configuration is supported. It&#8217;s also easy to set up a keybind to toggle between -indentation styles by writing a function into my <code>vimrc</code>. I came up with the -following VimScript to switch between indentation styles:</p> - -<pre><code class="language-vim">" Toggle between 4 spaces and pure tab indentation styles -func! ToggleIndentStyle() - if &#38;expandtab == 1 - set noexpandtab - set softtabstop&#38; - set shiftwidth&#38; - echom "Switched to: Indent with tabs." - else - set expandtab - set softtabstop=4 - set shiftwidth=4 - echom "Switched to: Indent with 4 spaces." - endif -endfu -noremap &#60;C-_&#62; :call ToggleIndentStyle()&#60;CR&#62; -</code></pre> - -<p>Indenting with tabs is the default in Vim, so all I need to do to switch to -indenting with tabs is to unset my settings for <code>softtabstop</code> and <code>shiftwidth</code> -as well as unset <code>expandtab</code> so that Vim won&#8217;t expand my Tab keypresses into -space characters. To switch back to spaces, I revert to my normal settings.</p> - -<p>I chose the <code>Ctrl</code>+<code>_</code> keybinding because it was free and the underscore is -reminiscent of a &#8220;space&#8221; character so it would be easy to remember.</p> - -<p>Honestly, I do not strongly lean one way or the other in the indentation camp. -For some languages, such as Common Lisp, using spaces for indentation also -allows consistent alignment without mixing spaces and tabs. For other languages, -either spaces or tabs are required by the language&#8217;s style guides like Python or -Go respectively. For most languages, though, it makes no difference.</p> - -<p>I have heard murmurings of tabs being better for accessibility, but I&#8217;ve never -seen this claim backed up with hard evidence (I have seen anecdotal evidence for -both spaces being good for accessibility <em>and</em> tabs). If you have compelling -arguments for one style over another, I&#8217;d like to hear them.</p> - -<p><em>This is my thirty-sixth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>A Quick Rant About Web Font Sizes</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-28T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="A%20Quick%20Rant%20About%20Web%20Font%20Sizes">A Quick Rant About Web Font Sizes</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-28</p> - -<p>Once I discovered how font sizes actually work in CSS, sites that lock the font -size by specifying it in some value of <code>px</code> annoy me to no end. I typically have -my browser&#8217;s font size cranked up to 20px because it&#8217;s way easier to read and I -don&#8217;t need to strain my eyes just to fit more text on screen at once.</p> - -<p>For that reason, I used the CSS <code>max()</code> property to set my website&#8217;s font size -to <code>max(18px, 100%)</code> which essentially tells the browser to render the site at -<code>18px</code> or the font size that the user set in their browser settings if they set -it to something higher than 18px.</p> - -<p>I was recently thinking, though, that this rule is basically useless. I may as -well just set the font size to <code>100%</code> and let the user pick what font size they -want to see my site in because different users have different preferences and -different accessibility needs. Therefore, who am I to decide what size the text -should be on my website for other people?</p> - -<p>That&#8217;s my short rant on website font sizes. Just use some reasonable percent -value (like <code>100%</code>) and scale the rest of your font sizes based off of that. If -choosing a specific font size is necessary to make text fit in some specific box -or shape, consider scaling that whole box or re-design that section because it -wasn&#8217;t going to be accessible anyways.</p> - -<p><em>This is my thirty-second post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Choosing a Self-Hosted Git Service</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-26T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Choosing%20a%20Self-Hosted%20Git%20Service">Choosing a Self-Hosted Git Service</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-26</p> - -<p><em><strong>2020-05-27 Update</strong>: Add Gitolite.</em></p> - -<p><em><strong>2020-05-29 Update</strong>: Add cgit.</em></p> - -<p><em><strong>2020-09-21 Update</strong>: Add Pagure.</em></p> - -<p>Git is by far the most popular version control system right now and there are so -many options for self-hosting your repositories it can be difficult to figure -out which one is the best for you. In this post, I&#8217;ll go through many of the -more popular free and open source options with a brief opinion about each and -links to where you can find out more. I&#8217;ll also explain what I chose for myself -and why.</p> - -<h2 id="GitLab">GitLab</h2> - -<ul> -<li><a href="">Link to Gitlab</a></li> -<li><strong>Programmed in</strong>: Ruby, Go</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>GitLab is one of the most popular git hosting services next to GitHub. They -operate with an <a href="">open-core</a> -business model which means that core features of GitLab are open source, but -many other features are proprietary software.</p> - -<p>GitLab&#8217;s UI is somewhat similar to GitHub&#8217;s and it uses the same Pull Request -model for contributing to others&#8217; software projects where you &#8220;fork&#8221; a project -and then submit a pull request using the web UI.</p> - -<p>I will get straight to the point with this though. Don&#8217;t use GitLab. It&#8217;s a -bloated mess of a software forge that, yes, has a lot of features, but also has -a lot of problems. For example, <a href="">GitLab has memory -leaks</a> which, instead of fixing, -they created a duct-tape solution which kills a memory-hungry process and -re-starts it. They also recommend 8GB of RAM as a minimum for the application to -run smoothly. EIGHT GIGABYTES! I&#8217;m running Gitea on a PineA64 SBC and the entire -system&#8217;s RAM usage is at less than 0.5GB. GitLab is slow, bloated, and -definitely not a good candidate for someone looking to self-host a git service.</p> - -<h2 id="Gogs">Gogs</h2> - -<ul> -<li><a href="">Link to Gogs</a></li> -<li><strong>Programmed in</strong>: Go</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>Gogs is a GitHub-like software forge programmed in Go and designed to be fairly -easy to self-host. If you have some experience using GitHub, you&#8217;ll very quickly -get used to the interface of Gogs as it&#8217;s nearly identical. It also uses the -pull-request method of development and maintains a fairly clean-looking UI.</p> - -<p>Just like GitHub and GitLab, it&#8217;s a bit heavy on the front-end JavaScript and -thus its accessibility and client-side performance suffers as a result. It does -provide the features one would want from a software forge such as CI&#47;CD, Wikis, -and issue tracking.</p> - -<p>It&#8217;s easy to host since it&#8217;s a single, statically-compiled binary. One just -needs to install a backing database, set up some configuration, and run the -binary to have a fully-featured software forge up and running. It seems -appropriate for anywhere from single-user instances, to medium-sized groups and -teams.</p> - -<h2 id="Gitea">Gitea</h2> - -<ul> -<li><a href="">Link to Gitea</a></li> -<li><strong>Programmed in</strong>: Go</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>Gitea is a <a href="">fork of Gogs</a> hence -it looks and feels much the same. The development model for Gitea is more open -than the one for Gogs and so it tends to receive bugfixes and improvements -faster than Gogs. It&#8217;s also a better choice than Gogs if you&#8217;re someone who -would like the ability to send patches upstream.</p> - -<p>In most respects, Gitea looks and functions the same as Gogs though Gitea does -have many more features. A detailed list of differences between the two can be -found on the <a href="">Gitea comparison page</a>.</p> - -<h2 id="SourceHut">SourceHut</h2> - -<ul> -<li><a href="">Link to SourceHut</a></li> -<li><strong>Programmed in</strong>: Go, Python</li> -<li><strong>Supports</strong>: Git, Mercurial</li> -</ul> - -<p>SourceHut is a project created by <a href="">Drew DeVault</a> and -released in <a href="">public alpha on -2018-11-15</a> -through the hosted instance <a href=""></a>. Since then, it has been -steadily growing its user base and feature set. It now includes comprehensive -CI&#47;CD and Project Hubs.</p> - -<p>SourceHut is unique in that it&#8217;s a fully-featured software forge which uses no -front-end JavaScript and supports esoteric operating systems such as Plan 9 in -its automated build framework. Unlike GitHub and many of its clones, SourceHut -does not use pull requests and instead uses mailing lists for everything from -bug reporting to sending in patches (though this can still be done through the -web UI). The advantage to this is that one does not need an account on a -SourceHut instance to contribute. Some might say that the disadvantage is that -this workflow is hard to figure out, but in reality it&#8217;s just a different -development paradigm and doesn&#8217;t take much effort to learn. See -<a href=""></a> for a brief introduction.</p> - -<p>It&#8217;s important to note that SourceHut is still in alpha and requires at least a -moderate level of experience to self-host. It also uses individual, modular -services to make up the entirety of the forge. For example, if you want access -to mailing lists for your instance, you must host a service. This -makes the entire system much more resilient in the case of bugs or system -failures, but can be challenging for a novice sysadmin or not worth the effort -if all you want is a software forge for publicly showing off and working on your -own repositories. SourceHut is definitely worth checking out if you want a -software forge for a group or team of people.</p> - -<h2 id="Phabricator">Phabricator</h2> - -<ul> -<li><a href="">Link to Phabricator</a></li> -<li><strong>Programmed In</strong>: PHP</li> -<li><strong>Supports</strong>: Git, Mercurial, Subversion</li> -</ul> - -<p>I don&#8217;t have as much experience with Phabricator as I do other services on this -list so my overview essentially comes from reading documentation and poking -around the hosted instance.</p> - -<p>Phabricator is a software forge built by <a href="">Phacility</a>. It -offers the same features as the above-mentioned software forges and is also -straightforward to install, perhaps requiring a level of skill in between -SourceHut and Gitea if the installation guide is anything to go by.</p> - -<p>Similar to SourceHut, this service may be more than you need if you&#8217;re looking -for a simple way to show off your Git repositories. It is fully-featured and -competently developed though so, if you&#8217;re looking for an alternative to GitLab -for a group or team of people, Phabricator is worth checking out.</p> - -<h2 id="Pagure">Pagure</h2> - -<ul> -<li><a href="">Link to Pagure</a></li> -<li><strong>Programmed In</strong>: Python</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>Pagure is similar to the other software forges mentioned above. It has all the -features expected from a contemporary software forge including wikis, issue -trackers, releases, and more. From the <a href="">Pagure home -page</a>:</p> - -<blockquote> -<p>With pagure you can host your project with its documentation, let your users -report issues or request enhancements using the ticketing system and build -your community of contributors by allowing them to fork your projects and -contribute to it via the now-popular pull-request mechanism.</p> -</blockquote> - -<p>One advantage I can see for Pagure over many of the other options is that both -project and user discovery seem to be easier than with other software forges. -There are dedicated pages listing repositories, users, and groups with a search -bar allowing for the quick and easy discovery of different things on a specific -instance.</p> - -<p>It also offers several methods for installation: Docker, Vagrant, and a manual -installation. The manual installation process is very straightforward and clear -from the instructions given.</p> - -<h2 id="Gitolite">Gitolite</h2> - -<ul> -<li><a href="">Link to Gitolite</a></li> -<li><strong>Programmed In</strong>: Perl</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>Gitolite is different from any other Git service in this post; it isn&#8217;t a full -software forge and doesn&#8217;t have a web interface. Instead, it simply provides a -way to host many git repositories with virtual users and fine-grained access -control. <q>Gitolite is an access control layer on top of git.</q></p> - -<p>Notable current or past users of Gitolite include the Fedora Project, the KDE -project, Gentoo Linux, and</p> - -<p>This may be what you want if all you&#8217;re looking for is a way to host multiple -git repositories on a central server where each repository can have mutliple -developers. To learn more about what Gitolite does and its supported features, -see the <a href="">Gitolite overview</a>.</p> - -<h2 id="Gitweb">Gitweb</h2> - -<ul> -<li><a href="">Link to Gitweb Documentation</a></li> -<li><strong>Programmed In</strong>: Perl</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>Gitweb is the default web interface for Git repositories. It&#8217;s essentially a way -to view the contents of a repository and its git-related data (commits, -branches, blames, etc) using a web interface. It&#8217;s not a software forge like the -others in this article, but if all you want is a UI to view information about -git repositories, then this is a valid choice.</p> - -<h2 id="cgit">cgit</h2> - -<ul> -<li><a href="">Link to cgit</a></li> -<li><strong>Programmed In</strong>: C</li> -<li><strong>Supports</strong>: Git</li> -</ul> - -<p>cgit is a simple web interface for Git repositories. Like Gitolite or Gitweb, -cgit is not a software forge and only includes functionality for viewing Git -repositories, commit diffs, and the like. It&#8217;s basically the same as Gitweb, but -noticeably faster when viewing large repositories and with support for caching -the generated pages. It may also look better than Gitweb, depending on your -sensibilities.</p> - -<h2 id="My%20Choices">My Choices</h2> - -<p class="note">I have since changed what I use to cgit. I outline why in a more -recent blog post: <a -href="">Switching to cgit</a></p> - -<p>When looking for a self-hosted git service, I was looking for a service that -fulfilled the following criteria:</p> - -<ul> -<li><strong>Philosophy</strong>: Simple software, open development</li> -<li><strong>User Interface</strong>: Snappy, clean</li> -<li><strong>Resource Usage</strong>: Low, should run on an SBC</li> -<li><strong>Back-end Language</strong>: Anything but JavaScript (because of npm)</li> -<li><strong>Ease of Administration</strong>: The easier, the better</li> -</ul> - -<p>At <a href=""></a>, I currently host a Gitea -instance. Although I would have loved to host my own SourceHut instance, I feel -it&#8217;s not designed for my use case. I basically just use Gitea to mirror my -repositories which are also hosted on SourceHut and to allow a small group of -friends to collaborate with me in smaller, private projects. I could probably -get away with Gitweb, but Gitea also gives me a playground to experiment with -CI&#47;CD and other technologies I may encounter in my career. Gitea was also really -easy to set up, customize, and maintain. I use a script, -<a href="">gitea-updater</a>, created by a -friend of mine to easily update it too.</p> - -<p>As far as hosted services, I use SourceHut&#8217;s instance because it&#8217;s -lightweight, straightforward, and I like its email-driven development model. I -used to use GitHub and GitLab, but SourceHut performs way better and experiences -downtime far less often than the big providers such as GitHub and GitLab.</p> - -<p>There are also quite a few more, albeit less popular, free and open source -software forges available, many listed in <a href="">this comparison by Apache -Allura</a>. -Additionally, check out <a href=""></a> for a comparison -of the performance of some of the biggest hosted software forges.</p> - -<p>Let me know if I&#8217;ve failed to mention anything important here or if I&#8217;ve missed -a software forge you&#8217;d like to see mentioned.</p> - -<p><em>This is my thirtieth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Paying for Software</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-25T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Paying%20for%20Software">Paying for Software</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-25</p> - -<p>Most of the world now runs on free software; that&#8217;s free as in freedom, not -necessarily free as in beer. It seems though, that many people conflate the -two meanings and expect free and open source software to also come free of -charge. This is despite none of the widely accepted free and open source -software licenses including a non-commercial clause. In fact, the -<a href="">GPL</a> (section 6) explicitly -includes language which would allow one to make money off of one&#8217;s software -while still keeping it free and open source.</p> - -<p>It is also often brought up that Big Tech tends to use free and open source -software in their own products, which they then proceed to sell, and that this -is effectively commercial entities using the work of volunteers for their own -profit often without giving back code improvements or otherwise contributing to -the software. Some notable exceptions such as the Linux kernel exist, but it -seems that developers of a lot of software, such as -<a href="">OpenSSL</a> -and -<a href="">GNUPG</a> -(news article links), which are used by multi-billion-dollar companies and -critical to our digital infrastructure, typically have to wait until they&#8217;re in -a funding crisis to get the money they desperately need to keep developing and -maintaining their software.</p> - -<p>This is an unsustainable model for many of the services and software on which we -rely. Many developers work in their free time for the sole reason that they -enjoy making software; most don&#8217;t make enough off of donations to leave their -day jobs and develop free and open source software full-time. This is why -projects such as <a href="">ElementaryOS</a> try to push their users -into paying for the operating system they download and why they are trying to -build an app store which encourages the exchange of money for software.</p> - -<p>I try to give back to developers (and artists, but perhaps that&#8217;s a discussion -for a different blog post) as much as I possibly can. For example, I spend $2 -USD per month for <a href="">SourceHut</a>, I have a $3.50 USD per -month <a href=""></a> subscription, I donate $3.50 CAD per month to -<a href="">Wikipedia</a> and $25 per year to the <a href="">Electronic -Frontier Foundation</a>, and, before I self-hosted my email, -I didn&#8217;t hesitate to pay <a href="">ProtonMail</a> for those -services either. Now that I am self-hosting, I plan to donate $20 CAD to <a href="">the -creator of OpenSMTPD</a> which is a core part of that -infrastructure.</p> - -<p>Depending on your financial situation, it may not be viable to donate or pay a -lot and that is totally okay. Being a student, I am very cautious with my money -and so I tend not to give vast amounts, but if everyone gave $2 per month (the -price of a cup of coffee at a café) or even a larger, one-time donation to the -free software projects they use the most, it would make a huge difference. My -personal bias is towards prioritizing donations to not-for-profits and -development teams which largely or entirely rely on dontations or the proceeds -from people paying for an otherwise free service.</p> - -<p>If you really can&#8217;t afford to give anything, that&#8217;s alright. Not everyone can. -Something else you could do is send an email to the developer(s) thanking them -for the work that they do. Speaking from personal experience, it&#8217;s a huge -confidence boost when someone praises something you do and it can greatly help -morale.</p> - -<p>Essentially, the point is: don&#8217;t be so quick to recoil at the thought of having -to pay for free and open source software. Making free and open source software -is a lot of work which many developers do out of the kindness of their hearts -and it&#8217;s reasonable that they deserve compensation for their efforts. GitHub has -taken steps to improve the situation with their <a href="">sponsorship -program</a>, but I think that a fundamental culture -shift has to occur where people become more comfortable rewarding free and open -source developers for their time and effort for this model to become truly -sustainable.</p> - -<p><em>This is my twenty-eighth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Going From User to Contributor With FOSS</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-25T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Going%20From%20User%20to%20Contributor%20With%20FOSS">Going From User to Contributor With FOSS</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-25</p> - -<p>I used to be like the majority of people when it came to using my computers. I -would log onto Windows, open Chrome, browse to YouTube and social media sites, -and generally just consume content. If I was frustrated with a piece of -software or encountered a bug, I would learn to accept it because I thought I -had no other choice if I wanted to keep using that software. That was many years -ago now and, since then, things have changed quite a bit.</p> - -<p>Not only did I enter into a Computer Science program at university which exposed -me to many fundamental computing concepts, I also became acquainted with the -world of Free and Open Source Software. Slowly, I learned to program and do -things for myself. Eventually, I switched to using Linux full-time and spiralled -ever further down the rabbit hole of the history and philosophies behind -computing, Free and Open Source Software, and alternative operating systems.</p> - -<p>I&#8217;ve come a long way since those days of being nothing more than a consumer of -content and I think I can attribute a lot of my growth to FOSS. Now when I -encounter a problem, instead of my first thought being, &#8220;I <em>need</em> to find a -piece of software to solve this problem,&#8221; or, &#8220;oh well, nothing I can do against -these big companies&#8221;, my first thought is usually, &#8220;how can I solve this problem -myself.&#8221; Now, instead of giving up when web searches yield no useful results, -I&#8217;ll turn to the source code, official documentation, or specifications (most of -which are generally freely available) for answers.</p> - -<p>The availability of code under Free and Open Source licenses, and the ability to -freely share and collaborate online has changed the way that I view and interact -with computers. It&#8217;s turned me from a simple consumer of what others create, -into someone who tries to solve problems myself if an existing solution is not -available or is unsatisfactory.</p> - -<p>You might even say that FOSS has empowered me, as it has many others.</p> - -<p><em>This is my twenty-ninth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Two of the Most Valuable Lessons I've Learned</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-23T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Two%20of%20the%20Most%20Valuable%20Lessons%20I&amp;#8217;ve%20Learned">Two of the Most Valuable Lessons I&#8217;ve Learned</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-23</p> - -<p>This post is inspired by Craig Maloney&#8217;s recently released book <em><a href="">The Mediocre -Programmer</a></em>. I haven&#8217;t yet read the book, -but I read <a href="">the -synopsis</a> -and it got me thinking about these two lessons which I&#8217;ve learned since becoming -a massive computer nerd:</p> - -<ol> -<li><p>Given enough dedication, time, and effort, one can learn, become skilled at, -and eventually master any skill they wish.</p></li> -<li><p>Impostor syndrome can be a good thing; learn to recognize and embrace it.</p></li> -</ol> - -<p>I feel that both of the above lessons go hand-in-hand; one realization naturally -leads to the other. The first lesson is something I struggled with early on -during my time as a university student and something I constantly have to keep -in mind whenever I encounter a new technology, programming language, or concept. -It&#8217;s impossible for someone to be good at something with only a few hours of -study and practice yet this seems to be an expectation many of us have, myself -included. We shouldn&#8217;t feel bad about our lack of skill with something new after -only being briefly exposed to it.</p> - -<p>Learning this lesson was one of the best things to happen to me because it made -me realize that, although something may seem overwhelming at first, if I break -it down into bits and take my time practicing and learning, I will be able to -learn and eventually get good at it. Many things stopped feeling overwhelming -after I learned this and if I encounter something new, I know it&#8217;s all just a -matter of putting in the time and practise before I learn it.</p> - -<p>Regarding the second lesson, for those who don&#8217;t know, <a href="">Impostor -syndrome</a> is a syndrome in -which one feels like they are not really as knowledgeable or skilled as their -peers. It typically manifests itself as the feeling that they are faking their -credentials or level of skill and tricking others into thinking they are smarter -or better at something than they actually are. It&#8217;s a common condition among -many in the tech industry where there is an unimaginable breadth of concepts, -skills, and technologies one is expected to learn.</p> - -<p>Although I won&#8217;t say I have been afflicted by this syndrome to its fullest -extent, I have definitely experienced thoughts similar to those that are common -in someone with Impostor Syndrome. I have, however, come to realize that these -feelings can be used to positive effect with the realization that when I&#8217;m -feeling this way, it means that I&#8217;ve surrounded myself with people smarter and -more experienced than I, which I can take as an opportunity to learn and improve -my skills. I&#8217;ve turned the feelings of inadequacy and self-doubt into feeling -that, although I may be an amateur or completely inexperienced with something, I -can take this opportunity to better myself.</p> - -<p><em>This is my twenty-seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Rewriting My Static Site Generator</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-22T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Rewriting%20My%20Static%20Site%20Generator">Rewriting My Static Site Generator</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Posted:</strong> 2020-05-22</p> - -<p>After a brief, two day hiatus in posting to refill my creative juices, I&#8217;m back -with a rewrite of the script I use to generate my website. This has been a long -time coming (for me, anyways) as my old script had become too messy to work with -and I wanted to switch to using pandoc to compile my webpages. Back when I -originally wrote the script, I was still fairly new to shell scripting and the -quality of the code reflects that. This new script is much easier to read, much -better laid out, and is far easier to extend and adapt in the future. It&#8217;s also -now possible to use this script for sites other than my own, as long as those -sites have their markdown files structured the same way.</p> - -<p>Previously, I was using <code>markdown</code> as the program to take my <code>.md</code> files and -transform them into <code>.html</code> files. Unfortunately, it had a couple of issues: It -wouldn&#8217;t interpret triple-backticks as code blocks so I had to use <code>&#60;pre&#62;&#60;code&#62;</code> -anywhere I wanted a code block, and it would add empty <code>&#60;p&#62;</code> tags before and -after <code>&#60;img&#62;</code> and <code>&#60;figure&#62;</code> tags. Additionally, using <code>pandoc</code> also enables me -to add simple syntax highlighting for code blocks since it does syntax -highlighting as part of the transformation process.</p> - -<p>I also took the time to make sure that the syntax highlighting colour scheme I&#8217;m -using has an appropriate set of contrast ratios. I targeted a minimum ratio of -4.5:1 and I ended up basing the colour scheme off of the -<a href="">iceberg</a> colour scheme which I also use -in Vim.</p> - -<p>One other thing that I wanted to do with this rewrite was to make my script -POSIX-compliant so it is as portable as possible. My script used to require bash -but now it should work with any POSIX-compliant shell. It should also now only -be using POSIX-compliant flags in POSIX programs.</p> - -<p><em><strong>Update</strong>: After further testing, I&#8217;ve switched from using <code>tput</code> to ANSI -escape codes for colours, added the <code>-e</code> flag to the <code>sed</code> commands, and added a -newline everytime I use the <code>a</code> or <code>i</code> command with <code>sed</code>. These changes were -required to get the script to work on FreeBSD. As long as pandoc is available on -a system, the script should now be portable between all *nix systems (I -hope).</em></p> - -<p>This new script clocks in at 7207 bytes, 235 total lines, and 180 source lines -of code as of the time of writing. This is in comparison to the old script&#8217;s -10812 bytes, 253 total lines, and 152 source lines of code. This is mostly due -to the fact that the new script is easier to read and therefore doesn&#8217;t require -as many comments. Also, adding syntax highlighting only increased the size of -my main CSS file by ~1kB.</p> - -<p>I am considering releasing this script, along with documentation, examples, and -my publish script (which also needs to be made POSIX-compliant), as a separate -project which could be used by anyone looking for a simple static site -generator. Before I do that, however, I would like to work on scripts to -transform the HTML files output by the compilation script into Gemini- and -Gopher-compatible syntax. I am thinking of writing perl scripts to accomplish -this since parsing HTML is quite complicated and perl has a good set of -libraries to accomplish that.</p> - -<p>You can view the new script <a href="">on -SourceHut</a> -(<a href="">mirror</a>). -If you really want to see the horrors of the old script, you&#8217;ll find it lurking -in the commit history.</p> - -<p><em>This is my twenty-sixth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Self-Hosted Email is Now Live!</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-19T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Self-Hosted%20Email%20is%20Now%20Live!">Self-Hosted Email is Now Live!</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-19</p> - -<p>Following my experiments with self-hosting email, which I posted about in a -<a href="/blog/self-hosting-email">previous blog post</a>, I&#8217;ve now migrated email for this -domain off of ProtonMail and onto my mail server.</p> - -<p>Last night, I spun up a new mail server on Vultr, running OpenBSD (as previously -discussed), and got the machine ready so that I could quickly get email up and -running today. Humourously, I woke up this morning to the release of the next -version of OpenBSD but upgrading was about as painless as could be; a -<code>sysupgrade</code> followed by a <code>pkg_add -u</code> did the trick.</p> - -<p>Thanks to my previous experiments, I was able to get this mail server up and -running in about 20 minutes including switching over all of my DNS records. I&#8217;ve -<a href="">set up aerc</a> with my mail -account and I&#8217;m excited to now have completely hassle-free email.</p> - -<p>As always, contact and GPG details can be found on <a href="/contact">the contact page</a>. -My email address did not change and is still <code></code>. I also made -sure to have the appropriate <a href="">RFC 2142</a> -mailbox names for my domain, which are also listed on the contact page.</p> - -<p><em>This is my twenty-fifth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Self-Hosting Email</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-16T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Self-Hosting%20Email">Self-Hosting Email</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-16</p> - -<p>I just finished setting up self-hosted email and it was the easiest thing ever.</p> - -<p>As I discussed in my <a href="/blog/preparing-to-self-host-email">previous blog post</a>, I -set up a VPS with Vultr running OpenBSD. Following this <a href="">guide from one of the -developers of -OpenSMTPD</a> -, I was able to get the server up and running in less than two hours while -understanding every step and every configuration option along the way. None of -it felt like the black magic that it was made out to be by many on the Internet.</p> - -<p>To test the setup, I created the email address <code></code> and set up -Thunderbird. I tested sending and receiving emails and checked, using Wireshark, -that my mail was being correctly encrypted with the TLS certificates I -configured:</p> - -<figure> - <a href="/img/double-desktop-email.png"><img - src="/img/double-desktop-email-thumb.png" alt="A screenshot of both of my - monitors with Neomutt, Thunderbird, Wireshark, SSH, and Firefox with Vultr - open while testing if email is working."/></a> -</figure> - -<p>I also used <a href=""></a> to test that my mail server -and DNS records were correctly configured. This service was invaluable since I -can&#8217;t test port 25 connectivity to the mail server from my residential -connection.</p> - -<figure> - <a href="/img/mx-toolbox-results.png"><img - src="/img/mx-toolbox-results-thumb.png" alt="A screenshot of MX ToolBox - results with all green checkmarks."/></a> -</figure> - -<p>As of yet, I haven&#8217;t had much trouble getting my email delivered to the -addresses controlled by the Big Mail Corporations which was what I was most -worried about and which is an often-cited factor many use to advocate against -self-hosting email. So far, I&#8217;ve confirmed that both Gmail and ProtonMail -deliver my mail. Microsoft&#8217;s Office 365 marked my IP as being spam—which is -understandable since it&#8217;s a brand new mail server on a previously-unused -domain—but not only did they notify me that I was put on their spam list, they -offered a really easy way to remove my IP from the list:</p> - -<figure> - <a href="/img/office-365-spam.png"><img src="/img/office-365-spam-thumb.png" - alt="A screenshot of the Office 365 Anti-Spam Delist Portal showing all - green checkmarks."/></a> -</figure> - -<p>I didn&#8217;t bother setting up virtual mail accounts because it will just be me -using this mail server. If there are additional addresses I need to add, I can -just add them to the <code>&#47;etc&#47;mail&#47;aliases</code> file. If you want to set up your own -mail server and wish to use virtual mail accounts, <a href="">this tutorial from -Vultr</a> -discusses that.</p> - -<p>Some more things that I have to look into doing are setting up a backup mail -server in the case that mine experiences downtime, and setting up Rspamd -training using Dovecot as suggested at the end of the guide which I followed. -This whole experiment has also given me the opportunity to experience -administration of an OpenBSD system, which I&#8217;m enjoying so far. The manpages -have been excellent and the system is laid out in a really straightforward way. -There are a few things that I need to learn and get used to such as <code>pf</code> instead -of <code>nftables</code> for packet filtering, <code>rcctl</code> instead of <code>systemctl</code> for managing -services, and other little things that are OpenBSD-specific.</p> - -<p>Now that I&#8217;ve done it, I can heartily recommend giving self-hosted email a shot. -It&#8217;s nowhere near as difficult and scary as it&#8217;s made out to be and it rewards -one with control over one&#8217;s email data and infrastructure. I don&#8217;t see how -hosting an email server will be any different than something like a Web server -or Matrix server in terms of workload given that all one has to do once it&#8217;s set -up is standard system administration tasks.</p> - -<p><em>This is my twenty-first post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Diving Deeper Into the Small Internet</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-13T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Diving%20Deeper%20Into%20the%20Small%20Internet">Diving Deeper Into the Small Internet</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-13</p> - -<p>Yesterday I posted about making my website available over the <a -href="">Gopher protocol</a>. -After I posted that, I was alerted to another up-and-coming protocol called -<a href="">Gemini</a> which -promises to be somewhere in between the complexity of Gopher and the Web while -leaning more towards the Gopher side.</p> - -<p>In the morning, I awoke to some new activity in the Fediverse and on HackerNews -about a <a href="">Gemini browser called -Castor</a> through which I learned -about the <a href="">finger protocol</a>. I -spent probably about an hour or two reading about the two protocols and -exploring Gemini-space. My morning was a rabbit hole of discovery.</p> - -<p>I really like the idea of Gemini. It aims to combine the simplicity of Gopher -with a few of the conveniences of the Web. For example, it supports inline links -and requires connections be encrypted using TLS unlike Gopher which doesn&#8217;t -support inline links and is transmitted over plain text. If Gemini&#8217;s popularity -keeps growing, I can see it becoming the de-facto standard for the small -internet&#8217;s alternative to the web where Gopher would exist for compatibility -with older devices and browsers.</p> - -<p>To host a Gemini server, I found the -<a href="">GeGoBi</a> server which says that it -understands Gophernicus-style gophermap files and is able to serve them over the -Gemini protocol. Therefore, all I had to do was download the server, run it, and -it now serves my Gopher files over Gemini so I don&#8217;t have to maintain two -versions of the files for now.</p> - -<p>I am thinking that, once I&#8217;ve finished re-writing the program which compiles my -Web pages, I will write a program to translate those pages into Gemini pages and -then into Gopher pages so that I can support all three protocols without needing -to painstakingly convert each page manually. I&#8217;ve never written something like -this though, so I imagine it&#8217;s going to take me a while to figure out. I&#8217;ve also -thought about contributing this functionality to <a href="">pandoc</a> -but I&#8217;ll wait until I&#8217;ve solved the problem first, then figure out how to -integrate it into pandoc without having to figure out pandoc, Haskell, and how -to solve the problem all at the same time.</p> - -<p>Regarding the finger protocol, I&#8217;m not sure if I&#8217;ll be able to implement that on -my server. I currently run everything behind NAT and the Wikipedia page on the -finger protocol mentions that it does not work through NAT. It looks like it -would be a great alternative to a <a href="/now">Now page</a> and a <a href="/contact">Contact -page</a> for the small internet but I&#8217;m not sure if I&#8217;ll be able to get -it working with my setup.</p> - -<p>All of these technologies are very exciting. The text-only interfaces of things -like Gemini&#47;Gopher, IRC, finger, and e-mail feel really efficient not only in -relation to resource usage, but also in how they feel to interact with. I highly -recommend checking them out for your websites.</p> - -<p><em>This is my nineteenth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Setting Up a Gopher Site</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-12T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Setting%20Up%20a%20Gopher%20Site">Setting Up a Gopher Site</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-12</p> - -<figure> - <a href="/img/paritybit-gopher-lynx.png"><img - src="/img/paritybit-gopher-lynx-thumb.png" alt="A screenshot of the Lynx web - browser on the Gopher homepage."/></a> -</figure> - -<p>Today I made my website available over the <a -href="">Gopher protocol</a>! You -can now access at <a href="gopher://">gopher:&#47;&#47;</a> -with a Gopher-capable browser. To view Gopher sites (commonly referred to as -Gopher holes), I recommend using Lynx (Gopher is entirely text anyways) or a -browser extension from the <a href="">Overbite -Project</a>.</p> - -<p>It was very quick and easy to set up my Gopher hole. All I had to do was set up -a Gopher server and place files in the directory where it looks to serve them.</p> - -<p>For my Gopher server, I chose <a href="">Gophernicus</a> -because it&#8217;s actively maintained and has no dependencies. Many people on the -Internet choose to use <a href="">pygopherd</a> but -that relies on Python 2 which was officially deprecated earlier this year.</p> - -<p>It was really easy to install Gophernicus thanks to the excellent documentation. -All I had to do was install <code>build-essential</code>, <code>debhelper</code>, and <code>libwrap0-dev</code> -(the last one is optional), and then run <code>make deb</code> followed by <code>sudo apt -install ..&#47;gophernicus_&#60;version&#62;.deb</code>. I edited the <code>&#47;etc&#47;default&#47;gophernicus</code> -config file and added the <code>-nx -nt -nq -no -nl -nu</code> options (see the README for -what they do).</p> - -<p>At the moment, I just have a homepage set up which links to some of my recent -blog posts. I will need to find an easier way to convert an HTML&#47;Markdown -document to Gopher-compatible syntax (if possible) so that I don&#8217;t have to do a -bunch of conversion by hand. Ideally, I would like to mirror this website over -Gopher as much as possible.</p> - -<p>Gopher is refreshingly simple. If you&#8217;re willing and able, give setting up a -Gopher hole a shot!</p> - -<p><em>This is my eighteenth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>A Brief Review of Fedora 32</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-11T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="A%20Brief%20Review%20of%20Fedora%2032">A Brief Review of Fedora 32</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-11</p> - -<figure> - <a href="/img/fedora-tablet-desktop.png"><img - src="/img/fedora-tablet-desktop-thumb.png" alt="A screenshot of my tablet's - desktop with htop open on the left and neofetch open on the right."/></a> -</figure> - -<p>I <a href="/uses#Tablets">have a tablet</a> which I usually have docked at my desk for -watching livestreams or I bring it with me to read PDFs on the go (like D&#38;D or -software manuals). I was using ElementaryOS for a few months and it worked well -with the touch screen but there was one issue that completely killed the -experience for me: there was no virtual keyboard on the lock screen which meant -that if the tablet locked for any reason, I had to plug in an external keyboard -or restart it so that I could log in again (I configured autologin). <a href="">This is a -known issue</a> that was flagged -<strong>three</strong> years ago! I&#8217;m not sure why it hasn&#8217;t yet been fixed despite being a -huge usability&#47;accessibility issue.</p> - -<p>Anyways, enough with the ranting. I decided to install Fedora because of <a href="">the -recent release</a> and because I -have never played with it before. It uses the GNOME desktop which, so far, seems -just as touch-screen-friendly as the Juno desktop on ElementaryOS. I normally -can&#8217;t use GNOME on any system with which I need to be productive (tiling WMs for -the win), but for the case where only one or two applications are on the screen -at once, it works very well. Fedora, as a whole, also seems like a well-polished -system. The effort that has gone into making the boot splash feel seamless like -it is with Windows has paid off and I can&#8217;t tell when I&#8217;m using a flatpak versus -a native application.</p> - -<p>So far, I have only two gripes with Fedora. The first is that I had to add the -RPMFusion repositories and install <code>ffmpeg</code> to get the codecs necessary to watch -Twitch streams. That in itself is not a problem, but there was no obvious, -newb-friendly way to do it and I had to look up the issue in order to even -figure out why I couldn&#8217;t watch streams and what I had to do.</p> - -<p>The second is that the <code>dnf</code> package manager is <em>really</em> slow. When comparing it -to <code>apt</code> from Debian&#47;Ubuntu&#47;Elementary&#47;etc., and <code>pkg</code> from FreeBSD, and even -<code>pacman</code> from Arch, <code>dnf</code> feels like it takes forever even to install just a -single package. For example, I installed <code>neofetch</code> to take the screenshot -featured at the top of this post and it took over a minute for it to present me -with an &#8220;Are you sure you want to install this?&#8221; prompt just for that single -package. On a more positive note, the way that <code>dnf</code> presents package -installation to the user is really nice. It highlights package names, and splits -the listing of what it&#8217;s going to install into nice categories so you can -quickly see which packages are dependencies and which are suggestions and so on.</p> - -<p><em><strong>Update</strong>: I have since been informed that there is a really easy way to make -<code>dnf</code> faster. Just add the following to your <code>&#47;etc&#47;dnf&#47;dnf.conf</code>:</em></p> - -<pre><code class="language-ini">fastestmirror=true -deltarpm=true -</code></pre> - -<p><em>I&#8217;ve done this and it definitely makes it feel way faster; on par with the -other package managers as far as I can tell.</em></p> - -<p>Overall, it has been a positive experience. I don&#8217;t need to install packages -often and I&#8217;ve fixed the codec issue so the two problems I highlighted above are -really just non-issues now. The touch-screen experience has been great and it&#8217;s -a solid Linux platform so I think I will be sticking with it for the time being.</p> - -<p><em>This is my seventeenth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why I Love the Fediverse</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-10T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20I%20Love%20the%20Fediverse">Why I Love the Fediverse</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-10</p> - -<p>The <a href="">fediverse</a> (federated universe) is -made up of different pieces of <a href="">federating -software</a> such as -<a href="">Pleroma</a> or <a href="">Mastodon</a>. -There are some obvious benefits to this model such as having the ability to run -your own instance, the protocols and software being open source, and having -control over your own data unlike on other platforms such as Facebook or -Twitter, but that&#8217;s not what I want to focus on in this post.</p> - -<p>A few years back I, swore off of social media after experiencing the toxicity of -places like Reddit and Twitter which have undoubtedly been -<a href="">Septembered</a>. The influx of -&#8220;normal people&#8221; has lead to a decrease in the quality of discussions and an -increase in the number of unpleasant encounters and general rudeness. There are -bastions of sanity and most sites have the ability to block people, but it wears -down on one&#8217;s morale over time especially when it feels like one can&#8217;t have good -discussions anymore.</p> - -<p>Using Mastodon (which is the only part of the fediverse I currently use), on the -other hand, has been completely the opposite experience. I&#8217;ve noticed that -people on Mastodon have been super welcoming, willing to help and incredibly -nice. Perhaps its because Mastodon is still quite small compared to the walled -garden social networks, or perhaps it&#8217;s because each instance has its own -culture and set of people with common views, but regardless, it&#8217;s been a great -experience.</p> - -<p>&#8230; and here I was saying I&#8217;d never use social media.</p> - -<p>(If you&#8217;re looking to give Mastodon a shot, and are interested at all in the -FOSS community, a great hosted instance to sign up at is -<a href=""></a>. It&#8217;s run by some great folk and -many of the people I follow are from there.).</p> - -<p><em>This is my sixteenth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Submitting a Bug Report to FreeBSD</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-09T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Submitting%20a%20Bug%20Report%20to%20FreeBSD">Submitting a Bug Report to FreeBSD</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-09</p> - -<p>Today I installed and started using a FreeBSD system for the first time. I had -previously run through the installation and played around with it in a virtual -machine, but this time the plan is to keep it on the system for at least a -little while.</p> - -<p>On every system I own, I install either Vim or NeoVim depending on what is -available. On FreeBSD, when I went to <code>pkg install vim</code>, it reported that it -would use an extra 709MiB of space and would pull in a bunch of X and wayland -libraries! I then checked <code>pkg install neovim</code> and it reported that it would -only use an extra 29MiB of space. Being the FreeBSD newb that I am, I went ahead -and installed the <code>neovim</code> package and then posted about my experience on -Mastodon.</p> - -<p>Within a couple hours, it was pointed out to me that there is actually a -<code>vim-console</code> package which doesn&#8217;t include the graphical libraries and is -packaged specifically for use in the console only. In hindsight, this makes -perfect sense, but coming from Linux where Vim is usually packaged as <code>vim</code> for -the console version and <code>vim-gtk</code> for the graphical version, this didn&#8217;t even -cross my mind. Especially since neovim behaved as I expected it to.</p> - -<p>After some further discussion, it was suggested by @Evilham that I submit a bug -report about the difference in naming convention between the <code>vim</code> and <code>neovim</code> -packages. I thought this was a great idea and is exactly the right thing to do -when an issue such as this is identified. I created my account on -<a href=""></a> and <a href="">reported the -bug</a>.</p> - -<p>It was, overall, a really painless process. Many people dislike when they have -to create an account for each project just to report bugs but, with a password -manager like KeepassXC, it&#8217;s really easy to create and then store a lot of these -accounts. Reporting the bug was also super intuitive with the quick links -available on the front page of their Bugzilla instance. Plus, the suggestion -from @Evilham of what to write made me more confident that I was giving a -quality bug report.</p> - -<p>Will this be the start of my becoming a FreeBSD contributor?</p> - -<p><em>This is my fifteenth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>The Joys of Old Tech</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-07T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Joys%20of%20Old%20Tech">The Joys of Old Tech</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-07</p> - -<figure> - <a href="/img/floppy.jpg"><img src="/img/floppy-thumb.jpg" alt="A 3.5 inch - floppy disk, lying against a rock on a table. Text on the disk reads: - Grand&Toy IBM Formatted 2HD."/></a> -</figure> - -<p>There&#8217;s something magical about using old technology. Be it an old, grinding -hard disk, a floppy disk with a maximum capacity of 1.44MB, or a CRT monitor -with a maximum resolution of 1024x768. Unrivalled in their simplicity, -unchallenged in their whirs and clunks, there is an unmistakable allure of the -tech of days gone by. Just listen to <a href="">these sounds of an IBM PC -AT</a>, hard at work.</p> - -<p>Of course, it wasn&#8217;t all sunshine and rainbows. Much of the tech from past -decades was actually confusing and difficult to use at times. Remember having to -manually set IRQs? What about needing to manually configure X, and having your -CRT emit some of its magic smoke in the process? Or, how about needing to -terminate your SCSI bus, lest you have weird errors?</p> - -<p>Nevertheless, the satisfying clunk of the power switch on the back of your -computer, the whine of your monitor turning on, and the sound of your floppy -drive initializing as you sit down, ready to get stuck in for the night -programming whatever latest hack you were working on, come together to create an -inexplicable feeling sorely missed in the age of instant boot-up times and -quiet, solid state storage. Perhaps it&#8217;s just childhood nostalgia.</p> - -<p>Technology, in recent years, has become faster, easier to use, prettier, and -more affordable. These advancements, however, came at the cost of simplicity, -understanding the machine and protocols which one uses, and a deeper connection -and feeling of control over one&#8217;s system. Given the way that technology has -evolved in the past 30 years, it&#8217;s definitely easy to see why some would long -for &#8220;the good old days&#8221;.</p> - -<p>I think the majority of people who work with computers can agree that, on the -whole, the advancements have been good for society. People have quicker and -easier access to information, it&#8217;s easier to expose the wrong and celebrate the -right in society, and it has enabled whole new disciplines of science. The -problem is that this has come at the cost of the internet being controlled by -mega-corporations, protocols and specifications becoming bloated and hard to -understand, and many people becoming locked into ecosystems controlled by -whoever sold them their hardware or software; not to mention the myriad ways -technology is being used to oppress.</p> - -<p>The specifications defining everything one would need to know and understand for -developing a web browser <a href="">is 114 million -words</a> and the -specifications for modern technologies such as -<a href="">UEFI</a> -are orders of magnitude larger and more complex than those for a simple BIOS, -designed for basic hardware control and booting. Making new software for these -systems is incredibly difficult, if not impossible, and it usually requires -either months, if not years, of work, a dedicated team of engineers and millions -of dollars.</p> - -<p>Gone are the days when one could open up the 300 page manual which came in the -box with their microcomputer, turn to the page about making shapes appear on a -screen with BASIC, and program a productivity application in a single weekend. -Gone also, are the days of being able to fit a homework assignment on a floppy -disk, let alone an entire operating system.</p> - -<p>Despite all this doom and gloom, there is a small subset of programmers and -scientists creating software like the <a href="">Plan9 operating -system</a> or <a href="">SourceHut</a> designed to -bring simplicity and understandability back to the way we use our computers. -Many people still use such programs as the <a href="">Lynx web -browser</a> and such protocols as -<a href="">IRC</a> and <a -href="">Gopher</a> simply because -of how comfortable, calming, and simple they are compared to the alternatives. -In fact, Gopher has actually seen a <a -href="">increase in -usage</a> over the past few years.</p> - -<p>There is so much value in the simple, the plain, and the understandable that has -been lost in the rush to make systems more capable, larger, faster, and smarter. -Despite its own set of drawbacks, old technology is such a joy to use because it -has been kept unspoiled by the complexities of modern computing. One can only -hope that the industry as a whole will realize the harm that complicated systems -inevitably bring and return to making software and hardware which is capable -still, yet simple and understandable.</p> - -<p><em>This is my twelfth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Refining My NeoMutt Configuration</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-05T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Refining%20My%20NeoMutt%20Configuration">Refining My NeoMutt Configuration</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-05</p> - -<figure> - <a href="/img/neomutt.png"><img src="/img/neomutt-thumb.png"/></a> - <figcaption>Screenshot of NeoMutt on my system.</figcaption> -</figure> - -<p>I use NeoMutt as my email client. It&#8217;s fast, treats <code>text&#47;plain</code> email as a -first-class citizen, and is terminal based so I can use it with vim keybindings. -The configuration, though, is really complex and there&#8217;s a lot that can be -played with. Over the past few days, I&#8217;ve been tinkering and tweaking with it to -make my email experience on the command line just a little bit better.</p> - -<p>One thing that I found annoying were <code>text&#47;html</code> emails which relied so much on -image content they had to be viewed in their HTML form. I used to save the body -of these emails and then open them up in Firefox, but just by adding</p> - -<pre><code class="language-bash">text&#47;html; $BROWSER %s; -</code></pre> - -<p>to my <code>mailcap</code> file, I am able to open these bodies in Firefox from within -NeoMutt.</p> - -<p>Another thing I found cumbersome was the handling of contacts through an aliases -file. Instead, I opted to install and use <code>abook</code> which is a contact program, -used on the command line, designed for use with mutt. This should make storing -and referring to my contacts easier than it used to be. The options that I used -in my <code>neomuttrc</code> are:</p> - -<pre><code class="language-bash">set query_command="abook --mutt-query &#39;%s&#39;" -macro index,pager a \ - "&#60;pipe-message&#62;abook --add-email-quiet&#60;return&#62;" \ - "Add this sender to abook" -bind editor &#60;Tab&#62; complete-query -</code></pre> - -<p>Some other minor changes include:</p> - -<ul> -<li>Moving the colour configuration into its own file so that the main <code>neomuttrc</code> -file is less cluttered.</li> -<li>Changing the date format to the ISO standard YYYY-MM-DD with time now in the -24h clock.</li> -<li>Cleaning up unused keybindings</li> -<li>Moving my signature from my <code>~&#47;docs</code> folder into <code>~&#47;.config&#47;neomutt</code> so that -it can be tracked with git.</li> -</ul> - -<p>Don&#8217;t hesitate to share suggestions or comments!</p> - -<p><em>This is my eleventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>The Diefenbunker Museum</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-03T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Diefenbunker%20Museum">The Diefenbunker Museum</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-03</p> - -<p>A few months ago, I visited the <a href=",_Canada&#x27;s_Cold_War_Museum">Diefenbunker -museum</a> -located in Carp, Ottawa, Canada. It&#8217;s a Cold War era bunker, abandoned in 1994, -that has been undergoing restoration and conversion into a museum by a small -group of staff and volunteers. It was originally designed to hold hundreds of -the country&#8217;s top civil servants, military personnel, and politicians in the -event of an imminent nuclear attack on Canada so that the country could continue -functioning after nuclear devastation.</p> - -<p>So much cool history is preserved in this museum including old teletypewriters, -computing equipment, clothing, medical equipment, operating procedures, and -exhibits about Canada&#8217;s involvement in the Cold War. I try to experience things -with my own eyes rather than through a camera lens so I didn&#8217;t take many -photographs, but I did manage to take a few that showcase some of the really -interesting things to see:</p> - -<figure> - <a href="/img/diefen/situation-room.jpg"><img - src="/img/diefen/thumbnails/situation-room.jpg"/></a> - <figcaption>The situation room where responses would be co-ordinated.</figcaption> -</figure> -<figure> - <a href="/img/diefen/vintage-computer.jpg"><img - src="/img/diefen/thumbnails/vintage-computer.jpg"/></a> - <figcaption>A vintage computer in the situation room.</figcaption> -</figure> -<figure> - <a href="/img/diefen/conference-room.jpg"><img - src="/img/diefen/thumbnails/conference-room.jpg"/></a> - <figcaption>The room where senior government officials would meet to run - the emergency government.</figcaption> -</figure> -<figure> - <a href="/img/diefen/operating-theatre.jpg"><img - src="/img/diefen/thumbnails/operating-theatre.jpg"/></a> - <figcaption>The operating theatre in the bunker's medical wing.</figcaption> -</figure> -<figure> - <a href="/img/diefen/cafeteria-store.jpg"><img - src="/img/diefen/thumbnails/cafeteria-store.jpg"/></a> - <figcaption>The store in the bunker's mess hall.</figcaption> -</figure> -<figure> - <a href="/img/diefen/comms-room.jpg"><img - src="/img/diefen/thumbnails/comms-room.jpg"/></a> - <figcaption>The communications room.</figcaption> -</figure> -<figure> - <a href="/img/diefen/comms-rack.jpg"><img - src="/img/diefen/thumbnails/comms-rack.jpg"/></a> - <figcaption>Several racks full of communications equipment.</figcaption> -</figure> -<figure> - <a href="/img/diefen/workshop.jpg"><img - src="/img/diefen/thumbnails/workshop.jpg"/></a> - <figcaption>A workshop.</figcaption> -</figure> -<figure> - <a href="/img/diefen/mainframes.jpg"><img - src="/img/diefen/thumbnails/mainframes.jpg"/></a> - <figcaption>A number of vintage computing equipment including minicomputers, - tape machines, and a mainframe just off to the right.</figcaption> -</figure> -<figure> - <a href="/img/diefen/computers.jpg"><img - src="/img/diefen/thumbnails/computers.jpg"/></a> - <figcaption>Lots of vintage computing equipment including what I presume are - a couple of minicomputers.</figcaption> -</figure> -<figure> - <a href="/img/diefen/oscilloscope.jpg"><img - src="/img/diefen/thumbnails/oscilloscope.jpg"/></a> - <figcaption>An old Tektronix Type 545B Oscilloscope, presumably used in - maintaining the computing equipment.</figcaption> -</figure> -<figure> - <a href="/img/diefen/tape-rack.jpg"><img - src="/img/diefen/thumbnails/tape-rack.jpg"/></a> - <figcaption>A set of old-tapes and a cabinet labelled "Admin Tape - Container"</figcaption> -</figure> -<figure> - <a href="/img/diefen/hard-disk-platter.jpg"><img - src="/img/diefen/thumbnails/hard-disk-platter.jpg"/></a> - <figcaption>A platter from a vintage hard disk and an old RAM - card.</figcaption> -</figure> - -<p>The photographs here don&#8217;t even cover 10% of what the museum has to offer. There -are other exhibits like the Bank of Canada gold bullion vault, the rooms -dedicated to the various departments of the Government of Canada, living -quarters, and more that I didn&#8217;t capture. Many of the exhibits can also be -interacted with in one way or another. One can try typing on a typewriter or -teletypewriter, pick up and examine many of the old items, or read a book from -the time sitting on a shelf.</p> - -<p>I highly recommend that you visit this museum if you ever find yourself in -Ottawa. If you can, go on a guided tour first then explore the museum on your -own afterwards; one can easily spend an entire day exploring all the museum has -to offer.</p> - -<p><em>This is my ninth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>The Disappearance of _One_</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-02T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Disappearance%20of%20_One_">The Disappearance of _One_</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-02</p> - -<p><em>One</em> is a word that used to be quite popular but has since fallen to the -wayside in favour of the less specific and more casual <em>you</em>. <em>One</em> is a -gender-neutral, indefinite pronoun that is used to refer to the general concept -of <em>a person</em>. For example, one would say, &#8220;One goes down to the shop,&#8221; instead -of, &#8220;You go down to the shop,&#8221; when they mean, &#8220;In general, a person goes down to -the shop,&#8221; as opposed to specifically, &#8220;<em>You</em> go down to the shop.&#8221;</p> - -<p>There is great value to be found in the use of this word. Without it, the lines -of meaning become blurred regarding whether an author is referring to you, the -reader, or just speaking generally. Usually, this can be easily inferred from -context, but I have seen misunderstandings caused by the use of the word <em>you</em> -in the place of the word <em>one</em> where someone thought another person was -commenting on their actions when, in reality, the other person was speaking -generally. These misunderstandings could be easily avoided by using <em>one</em> -instead of the less-specific <em>you</em>.</p> - -<p>It&#8217;s a shame that this word is falling out of general use and has become -relegated to more formal writing and speaking. As hopeless as it may be to fight -against the unrelenting force of language evolution, it&#8217;s a valuable word that I -will try to keep using where appropriate because I don&#8217;t want to see its meaning -lost.</p> - -<p>If you want to learn more about the usage of <em>one</em>, see <a -href="">Wikipedia: One_(pronoun)</a>.</p> - -<p><em>This is my eighth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Caring About SEO</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-05-01T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Caring%20About%20SEO">Caring About SEO</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-05-01</p> - -<p>A few days ago, <a href="">Kev Quirk wrote a blog -post</a> in response to <a href="">Desmond -Rivet</a> -about how he follows basic SEO hygiene even though it&#8217;s not something at the top -of his mind when writing.</p> - -<p>For those unfamiliar with the abominable world of SEO, it stands for &#8220;Search -Engine Optimization&#8221; and is something that many sites to do appear higher up in -search results on sites like Google and Bing. The algorithms which decide what -is good SEO and what is bad SEO are constantly changing and we just have to -guess, based on the guidance of what corporations like Google say and what their -SEO reports tell us about our sites, if we&#8217;re doing a good job or not.</p> - -<p>Now, don&#8217;t get me wrong, I&#8217;m not saying that if one focuses on or optimizes for -SEO that they&#8217;re a bad person or anything like that. I call it abominable because -there are many sites which abuse SEO to appear higher in search rankings despite -having less useful information or unsubstantial content compared to sites which -don&#8217;t focus on it. It&#8217;s not enough to just be a good website or blog, if one -wants to appear very high up one must optimize the way one structures their site -and writes their content. There is a danger that if one focuses too much on SEO, -one can fall down the rabbit hole of writing SEO-optimized drivel to appeal to -the algorithm and therefore drive more visitors to their site at the expense of -the quality of their writing. They cease to be themselves and instead write to -appease an algorithm.</p> - -<p>Now, all that being said, my site scores quite well in SEO tests!</p> - -<figure> - <a href="/img/seo-report.png"><img src="/img/seo-report.png" alt="The - results page from a webpagetest lighthouse report showing an SEO score of - 100 for a recent blog post of mine."/></a> - <figcaption> - Test performed using <a - href=""></a> - </figcaption> -</figure> - -<p>I don&#8217;t actually focus on SEO at all. It&#8217;s just a coincidence that my site -happens to do quite well and I&#8217;m honestly not sure why. Perhaps it&#8217;s the blog -post being focused on one topic, the number of words on the page, or the lack of -dynamic media content which would cause problems if improperly implemented. No -idea.</p> - -<p>It&#8217;s not that I don&#8217;t care if people read my content; in <a href="">a previous -post</a> I explained that I enjoy it when -others read what I write. I do, however, not really have much interest in -putting in a lot of work or worrying much about optimizing things to appear -higher in search rankings. I do post about my content on Mastodon, though, and I -will happily link someone to something I&#8217;ve written if I think it will be useful -to them. I don&#8217;t make any money off of this site and I&#8217;m not writing for fame or -to be recognized so I don&#8217;t feel it worth it to put in so much effort to appease -an ever-changing, black-box algorithm; I&#8217;m fine with the more &#8220;organic&#8221; traffic -my site receives.</p> - -<p>Today on Mastodon, someone posted a link to an article entitled <em><a href="">41 SEO quick -wins you can do within an hour</a></em> -which I may read to learn a bit more about what affects a site&#8217;s SEO score. -After all, it&#8217;s not bad to make sure one&#8217;s site is following generally good -practises so long as one makes sure they&#8217;re not falling down that rabbit hole of -tailoring their content for SEO.</p> - -<p><em>This is my seventh post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>How Far Translation Tools Have Come</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-04-28T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="How%20Far%20Translation%20Tools%20Have%20Come">How Far Translation Tools Have Come</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-04-28</p> - -<p>Today, with over 100 tabs open at one point, I was reading a whole bunch of blog -posts from others partaking in the #100DaysToOffload challenge. As you can tell -by looking at my <a href="">blogroll</a>, although -most blogs are in English, there are a handful that I follow which aren&#8217;t.</p> - -<p>I have about an <a href="">A2-B1 -level</a> -of comprehension in both German and French. I can usually understand simple, -common texts with little difficulty while reading and comprehending at a pace -comparable to the speed at which I read English. Even so, most of the blogs -which I follow tend to use complex or technical terms which are currently way -above my comprehension level. This is where my trusty German-English dictionary, -French-English dictionary, or online translation services come in handy. Using -Google Translate, earlier today I was able to read <a href="">a blog post by -jolek78</a> written entirely -in Italian. Take a look at how well Google Translate was able to handle this -text:</p> - -<figure> - <a href="/img/giorno-3.png"><img src="/img/giorno-3.png" alt="A screenshot - of Google Translate translating Italian text into English with near-perfect - accuracy."/></a> -</figure> - -<p>That reads pretty much as if a native English speaker wrote that text. I was -surprised considering that, for most of my education, Google Translate was a -tool not to be trusted as it would often times get things very wrong. For -example, the humorous translation of the English word &#8220;preservative&#8221; into the -French word &#8220;préservatif&#8221;, which actually means &#8220;condom&#8221;.</p> - -<p>It is really cool that we can have services like this which are able to take -complex linguistic constructs and translate them from one language into another -with relative ease. Of course, these systems are nowhere near perfect, but -they&#8217;ve certainly come a long way over the years.</p> - -<p><em>This is my fourth post for the -<a href="">#100DaysToOffload</a> -challenge. You can learn more about this challenge over at -<a href="">https:&#47;&#47;</a>.</em></p> - ]]></content> - </entry> - - <entry> - <title>Why I Blog and #100DaysToOffload</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-04-25T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20I%20Blog%20and%20#100DaysToOffload">Why I Blog and #100DaysToOffload</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-04-25</p> - -<p>Today is my first day of the -<a href="">#100DaysToOffload</a> -challenge; a challenge started by <a href="">Kev Quirk</a> to encourage new -and seasoned bloggers alike to start writing. Since it&#8217;s currently <em>2020-04-25</em> -for me, this means I&#8217;ll try to post something new every day from today until -<em>2020-08-03</em>. That&#8217;s a lot of blogging!</p> - -<p>Kev also recently made a blog post, inspired by a <a href="">blog post by Jan-Lukas -Else</a>, <a href="">asking people why they -blog</a> which I think is a great topic to kick -off this challenge.</p> - -<p>I blog because it&#8217;s a way for me to share my thoughts. I could be promoting -something I&#8217;ve made, showcasing something I&#8217;ve found, sharing my thoughts on a -particular subject or technology, or discussing a topic which interests me. My -blog acts as my own free-form writing platform, a creative outlet allowing me to -shout my thoughts into the void for anybody who wants to listen, to practice my -writing in a less formal setting, or simply to share something from which I -think someone could derive value or find interesting.</p> - -<p>There is a great feeling of satisfaction that comes with posting and sharing a -new blog post. It&#8217;s that feeling of creating something and releasing it into the -world for others to enjoy that keeps me coming back to writing new posts. It -feels good to share and even better when someone lets me know that something -I&#8217;ve written inspired or helped them.</p> - -<p>That&#8217;s why I blog.</p> - -<p><a href="">#100DaysToOffload</a></p> - ]]></content> - </entry> - - <entry> - <title>Decommissioning My Rackmount Server</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-04-11T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Decommissioning%20My%20Rackmount%20Server">Decommissioning My Rackmount Server</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-04-11</p> - -<p>I love self-hosting stuff. It allows me to exercise system administration skills -and allows me to be in control of my data. I try to do this as cheaply as -possible which includes keeping my power usage down. Not only is power -efficiency light on my wallet, more importantly it&#8217;s better for the environment. -Power-efficient things also typically need less cooling which leads to lower -noise output from those machines.</p> - -<p>My Dell R415 rackmount server was basically the antithesis of all of those -values. It was hot, loud, and sucked down 200W when <em>idle</em>. All for a meagre 8 -threads and 16GB of RAM.</p> - -<p>Although I got this server for a really good price ($95 USD, shipping included), -the reason that I got it for such a low price was because the hardware isn&#8217;t -particularly high-end. It came with 16GB of RAM which is more than enough for my -needs but the problem is that it has two AMD Opteron 4130 CPUs which run at -2.26GHz and have 4 cores each with <em>no simultaneous multithreading</em>.</p> - -<p>One morning, I decided to run some benchmarks on my server versus one of my -spare laptops which couldn&#8217;t function as a laptop anymore due to missing the -screen. I used the program <code>stress</code> to run some CPU, RAM, and I&#47;O benchmarks and -to my surprise, my spare laptop with its i5-2450M (2 cores and 4 threads) beat -my server by about 33% in both CPU and RAM benchmarks although it was -unsurprisingly slower I&#47;O-wise.</p> - -<p>I had previously been using this laptop as a server to collect mail from my -virtual machines and it had been running as long as the R415 so I knew it could -reliably function as a server even though I would lose things like hard disk -redundancy.</p> - -<p>I decided I was fed up with the noise and heat from the R415 and decided to -switch over that same afternoon.</p> - -<p>I first installed Proxmox on the laptop, added both machines to a cluster, used -the migrate feature built in to Proxmox to move all of the VMs to the laptop, -and finally powered down and removed the R415 from the cluster. Silence at last.</p> - -<p>Once I finished moving around hardware (I am using a <a href="">Lack -Rack</a>), I powered everything back on -again and noticed that this new configuration was only drawing 65W on average -and that&#8217;s for my <em>entire</em> homelab. Where my entire homelab used to draw about -240W, it now draws 27% of what it used to and it&#8217;s almost completely silent -while doing it.</p> - -<p>The laptop sits at around 15% CPU and 45% RAM utilization with all of my -virtualized services running and I haven&#8217;t experienced any slowness in using -them. Although I don&#8217;t have redundant hard drives with this laptop, I do still -back up all of my VMs and configurations which means I&#8217;d have probably only a -few hours downtime if the hard drive fails. It&#8217;s something I can live with in -exchange for what the laptop offers.</p> - -<p>You can get more detailed information about the specs of my lab machines over on -the page <a href="">about what I use</a>. -Suffice to say, I&#8217;m now very happy with what I have.</p> - ]]></content> - </entry> - - <entry> - <title>Making My Own Vim Statusline</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-02-24T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Making%20My%20Own%20Vim%20Statusline">Making My Own Vim Statusline</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-02-24</p> - -<p>I was playing around with a plugin that I came across while browsing -<a href="">r&#47;vim</a> called -<a href="">vim-startuptime</a>. It&#8217;s a vim -plugin by Daniel Steinberg (<a href="">dstein64</a> on GitHub) -which measures the amount of time each component of your vim configuration takes -to load when you launch vim. This way, you can get an idea of what is taking the -most time and causing your previously-lightning-quick text editor to take what -feels like an eternity to become ready.</p> - -<p>I took 5 measurements, back to back, opening my vimrc and I noticed that my vim -configuration was taking roughly 132.35ms on average to finish loading (with a -standard deviation of 2.69ms). Although that sounds fast, it was definitely -noticeable as it was just past the <a href="">100ms commonly accepted -limit</a> for -a user interface to feel like it was responding instantaneously. Below is a -video showing a very clear and noticable delay when launching vim:</p> - -<figure> - <video controls> - <source src="/img/vim-airline.mp4" type="video/mp4"> - Your browser does not support the video tag, try the download links below. - </video> -</figure> - -<ul> -<li><a href="/img/vim-airline.mp4">Download the mp4 video (310K)</a></li> -<li><a href="/img/vim-airline.gif">Download a GIF (4.7M)</a></li> -</ul> - -<p>Although vim-startuptime showed me a graph of each component&#8217;s execution time, -the statistics shown didn&#8217;t reveal a specific component that could be causing -the startuptime to be this long. In fact, it appeared that it was the cumulative -effect of loading each of my plugins and parsing my vimrc which was causing the -overall startuptime to be noticeably long. So, I decided to figure out if this -was the case by experimenting. I removed all of my plugins (but kept my vimrc -the same) and, as expected, my startuptime dropped to the 20ms range. -One-by-one, I added my plugins back in. To my surprise, I noticed a huge jump in -startuptime when I added vim-airline back in. Vim-airline was the plugin that I -was using to display an aesthetically pleasing statusbar and buffer bar at the -bottom and top of my vim windows respectively and it was causing my startuptime -to effectively double! No other plugin had that drastic of an effect.</p> - -<p>I decided, then, that I was going to replace vim-airline with my own custom -statusline.</p> - -<p>I used a blog post by Irrellia (whose website seems to have since disappeared) -to get me started and found that it was actually really easy to make a -good-looking and functional statusline. About 100 lines of vimscript later and I -had a customized statusline that fulfilled my needs and looked really good (in -my humble opinion). I also put my custom statusline into a plugin folder in my -<code>.vim&#47;bundle&#47;</code> directory so that it would be automatically loaded by Pathogen as -if it was a regular plugin.</p> - -<p>I will fully admit that I pretty much copied the colour scheme used in the -tutorial verbatim because I really liked the way it looked. Little did I know, -this would start a whole week of tinkering with my setup.</p> - -<p>Something that I missed from vim-airline was that top line which displayed a -list of open buffers and highlighted the currently active buffer. I thought -about doing it myself but the implementation looked a little too complicated for -my mediocre vimscript skills. Instead, I replaced that specific functionality -with another really lightweight plugin called -<a href="">vim-buftabline</a>.</p> - -<p>Once I was finished tinkering, I tested my new custom statusline (with the -vim-buftabline plugin too) using the same method which I used to test my -previous configuration and found that the average startup time had dropped to a -mere 66.85ms (with a standard deviation of 1.79ms)! That&#8217;s a roughly 2 times -improvement in speed; it felt instantaneous again! Here, have a look at the -video below:</p> - -<figure> - <video controls> - <source src="/img/vim-no-airline.mp4" type="video/mp4"> - Your browser does not support the video tag, try the download links below. - </video> -</figure> - -<ul> -<li><a href="/img/vim-no-airline.mp4">Download the mp4 video (321K)</a></li> -<li><a href="/img/vim-no-airline.gif">Download a GIF (5.0M)</a></li> -</ul> - -<p>I&#8217;ve put my statusline in its own git repository which you can find <a href="">on -sourcehut</a> or <a href="">on my self-hosted git -server</a>. I&#8217;ve decided to call it -vim-fastline. I don&#8217;t plan to do anything even remotely comparable to -vim-airline with it but I want to make it available in case others want to hack -on it.</p> - -<p>Not only was it fun and educational to program my own statusline, it had -significant performance benefits, and it now sort of feels like my vim -configuration is much more personal and not just a collection of plugins. It -feels like it&#8217;s <em>&#8220;my configuration</em>&#8221; if that makes sense. I encourage you to -give it a try even if you&#8217;re happy with your current configuration.</p> - -<p>Happy hacking!</p> - ]]></content> - </entry> - - <entry> - <title>Switching from urxvt to st</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2020-02-14T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="Switching%20from%20urxvt%20to%20st">Switching from urxvt to st</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-02-14</p> - -<p>I spend most of my time working in the terminal. Whether it&#8217;s email with -Neomutt, music with ncmpcpp, programming with Neovim, or administrating my -systems, I feel the most comfortable and in control when using the terminal. -That&#8217;s why it&#8217;s really important for me to have a terminal application that -performs well, feels good to use, and has every feature that I need without me -noticing that something isn&#8217;t working or doesn&#8217;t look quite right.</p> - -<p>Unfortunately, since I started using urxvt about a year ago now, I&#8217;ve slowly -begun to notice things missing or not working quite right. For example, despite -being called &#8220;rxvt-unicode-256color&#8221;, urxvt doesn&#8217;t really handle unicode -characters that well. Take a look at the example below:</p> - -<figure> - <a href="/img/urxvt-vim.png"><img src="/img/urxvt-vim.png" alt="A screenshot of neovim - in urxvt showing the statusline with two boxes where unicode characters - should be."/></a> -</figure> - -<p>This was really noticeable and, even though those unicode characters aren&#8217;t -super important, it would still annoy me when I saw boxes where characters -should be. This was even worse when I was browsing the Internet using lynx in -urxvt (this page is the <a href="">W3 Schools HTML5 Symbols -Reference</a>):</p> - -<figure> - <a href="/img/urxvt-lynx.png"><img src="/img/urxvt-lynx-thumb.png" alt="A screenshot - of lynx in urxvt on an HTML5 symbols reference page showing boxes where - unicode symbols should be."/></a> -</figure> - -<p>Not to mention, urxvt doesn&#8217;t have truecolour support which, while not super -important to me, is definitely a bonus in st&#8217;s favour. The screenshot below -shows urxvt&#8217;s output for <a href="">this truecolour test</a>:</p> - -<figure> - <a href="/img/urxvt-tc.png"><img src="/img/urxvt-tc.png" alt="A screenshot of urxvt's - output when tested for truecolour support where there isn't a smooth colour - gradient and many characters don't look right."/></a> -</figure> - -<p>I heard about st from other people on the Internet and from videos that I came -across on Youtube and it intrigued me because of Suckless&#8217; (the creators of st) -unique philosophy regarding software development. I also gave some other -terminals a try (kitty, konsole, xfce4-terminal) but either found them to need -far too many dependencies, have far too many unnecessary features, or take far -too long to load so I decided to give st a shot.</p> - -<p>Once I got done configuring it and patching it with the couple additions that I -wanted (a scrollback buffer and the ability to copy URLs so that I could open -them in my browser), I compiled it and started playing around with it. -Immediately I noticed that it felt just as fast as urxvt, it used less -RAM (something like 10-15M per window instead of 20-25M), and, when testing -side-by-side with urxvt, I would sometimes forget which terminal was which -because st looked and felt just like urxvt. It was essentially a drop-in -replacement even for the scripts that I have which launched applications using -urxvt.</p> - -<p>But, of course, I was really after better unicode and truecolour support. St -delivered perfectly despite only being told to use my regular font (fallback -fonts aren&#8217;t supported in st without a patch). Have a look:</p> - -<figure> - <a href="/img/st-vim.png"><img src="/img/st-vim.png" alt="A screenshot of neovim in st - showing the statusline with the correct characters displayed."/></a> -</figure> - -<figure> - <a href="/img/st-lynx.png"><img src="/img/st-lynx-thumb.png" alt="A screenshot of lynx - in st on an HTML5 symbols reference page showing the right unicode - symbols."/></a> -</figure> - -<figure> - <a href="/img/st-tc.png"><img src="/img/st-tc.png" alt="A screenshot of st's output - when tested for truecolour support where there is the expected smooth colour - gradient."/></a> -</figure> - -<p>I am very happy with st and I don&#8217;t at all mind the fact that I have to -re-compile it when I want to make changes or if a new version is released. It -feels like a personal build of the software tailored to my needs without -anything else that I don&#8217;t need or don&#8217;t want.</p> - -<p>If you want to try out st, follow this link to the <a href="">st -website</a>. You can view my build of st in <a href="">my dotfiles -repository</a>.</p> - ]]></content> - </entry> - - <entry> - <title>The Difficulty of Educating People About Online Privacy</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2019-12-20T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="The%20Difficulty%20of%20Educating%20People%20About%20Online%20Privacy">The Difficulty of Educating People About Online Privacy</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2019-12-20</p> - -<p><em>Update: I just finished listening to the latest Jupiter Extras podcast -entitled <a href="">Brunch with Brent: Jason Spisak Part -2</a> -in which they touch on this topic a bit. It&#8217;s definitely worth a listen.</em></p> - -<p>I&#8217;ve recently been reflecting on the difficulty that I&#8217;ve had in conversations -with people about online privacy where it is frustratingly difficult to get them -to care about who has their data and how it is being misused.</p> - -<p>I have given it some thought and come upon three major sticking points in my -conversations with others about online privacy (which also apply to any kind of -debate in general):</p> - -<h2 id="Stubbornness">Stubbornness</h2> - -<p>When someone is really set in their ways, it is exceedingly difficult to get -them to consider changing their behaviour. For some people, even mentioning that -something they are doing (or not doing) is perhaps wrong or detrimental to them -is equivalent to insulting their favourite childhood television programme.</p> - -<p>There are also usually many logical fallacies and other psychological effects -that people fall into which contributes to this. For example, if someone has -purchased a $100 smart home lady cylinder, they may try to defend themselves -against the feeling of buyer&#8217;s remorse if you are telling them that this big -purchase may have been a bad choice.</p> - -<p>Usually, if you persist enough in subtle ways, you can erode someone&#8217;s -stubbornness by exposing them to things like news articles and practical -examples of data breaches and privacy violations but you obviously don&#8217;t want to -be a gnat in their ear constantly pestering them about this.</p> - -<h2 id="Ignorance">Ignorance</h2> - -<p>To the chagrin of myself and many of my colleagues, most of the general public -are not familiar with even the most basic workings of the devices which we use -every day. Most people don&#8217;t know what a hash is nor would they be familiar with -the many ways that attackers can steal their personal information.</p> - -<p>Even those who are relatively tech-savvy, as in those who are able to build -their own computers and install their own operating system, are not necessarily -knowledgeable about online privacy.</p> - -<p>This makes it really difficult because the points that you are making sound -really obvious to you but to others it sounds like you&#8217;re either speaking -gibberish or being overly paranoid. If you have to give someone a complicated -and technical crash course on the topic of which you are trying to convince them -before you can even begin to convince them, you have most likely already failed -to convince them.</p> - -<h2 id="Apathy">Apathy</h2> - -<p>This is probably the worst of all three. When you are very passionate about a -subject and want to educate others so that they can better protect themselves or -be more aware of their data, the worst thing is that they will simply not care. -In my experience, there is nothing you can do about this. The only way to get -someone to care and take action is to watch them fail to the point where they -recognize that they can&#8217;t not care anymore. Even that isn&#8217;t guaranteed as some -people, no matter how much they get hurt by something, will just carry on.</p> - -<p>There really isn&#8217;t all that much that we can do besides present our arguments, -politely attempt to present evidence, and let the news headlines do the rest of -the convincing for us. Sometimes getting the other person to explain their -position in detail can be an effective tactic in making them realise that their -reasoning is flawed but, even then, in the end it seems many people will always -choose convenience over all else despite the overwhelming evidence that their -choices could cause them significant harm.</p> - -<p>I&#8217;d be interested to know what, if any, strategies you have for discussing -online privacy with others. Let me know by <a href="">sending me an -email</a>.</p> - ]]></content> - </entry> - - <entry> - <title>China</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2019-11-23T00:00:00-05:00</updated> - <content type="text"><![CDATA[ -<h1 id="China">China</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2019-11-23</p> - -<p>I have just finished reading <a href="">Drew DeVault&#8217;s most recent blog -post</a> in which he writes about -China.</p> - -<p>Although I too would prefer to keep politics and world affairs out of my blog, I -am in complete agreement with him in that it would also betray my personal -beliefs and principles to remain publicly silent about what is taking place in -China and in Hong Kong right now.</p> - -<p>I strongly recommend that anyone who is reading this should read the blog post -linked above in its entirety. Every word is important.</p> - -<p>I have already been boycotting Chinese products and the companies that have -given in to China&#8217;s ridiculous demands (e.g. Apple, Blizzard, Gap Inc., etc.) as -much as I possibly can and I have encouraged my friend groups to do so as well. -I have also written a letter to my member of Parliament (I encourage you to -write physical letters as they are at least slightly harder to ignore than an -email).</p> - -<p>I know it&#8217;s not easy to boycott, especially if you are in the market for -electronics, but I believe that it is our moral imperative to do as much as we -possibly can to protest the actions of the Chinese government and to show our -support for the citizens of Hong Kong in their fight for the same freedoms and -democracy that we in the West take for granted.</p> - -<p>The excuse, &#8220;Boycotting&#47;Writing to my representative&#47;speaking up is useless, I -am just one person.&#8221;, is an old and tired one that people use so they can put -the issues of the day at the back of their minds and keep living life as if -thousands of people fighting for their freedom aren&#8217;t being slaughtered like -dogs. Don&#8217;t be the kind of person who stands by and watches as this happens.</p> - -<p>If you&#8217;re wondering, &#8220;What else can I do?&#8221;, here are some links:</p> - -<p><a href="">Band in China</a> – A list of -what can be done to support Hong Kong.</p> - -<p><a href="">Company -Blacklist</a> -– A list of companies you should boycott for spinelessly complying with the -demands of China.</p> - -<p><a href="">Company Whitelist</a> -– A list of companies that have stood up to China. These are companies&#47;people -you should support but some you should still keep a close eye on such as Epic -Games who are partially owned by the Chinese company Tencent.</p> - -<p>If you have already written to your representative, boycotted companies, and -spread the word about China&#8217;s despicable actions then I sincerely thank you for -being a good person and standing up for what you believe in. I also encourage -you to take a look at some of the other protests that have been happening around -the world in places like Spain, Lebanon, and Bolivia. Some similar to Hong Kong, -others about things like climate change and income inequality. <a href="">Here is an -article by the BBC</a>.</p> - -<p>To close out this post, I want to share one of my favourite quotes&#47;poems:</p> - -<pre><code>First they came for the Communists -And I did not speak out -Because I was not a Communist - -Then they came for the Socialists -And I did not speak out -Because I was not a Socialist - -Then they came for the trade unionists -And I did not speak out -Because I was not a trade unionist - -Then they came for the Jews -And I did not speak out -Because I was not a Jew - -Then they came for me -And there was no one left -To speak out for me - --- Martin Niemöller, 1946 -</code></pre> - ]]></content> - </entry> - - <entry> - <title>Why I Switched Back to Firefox from Qutebrowser</title> - <author><name>Jake Bauer</name></author> - <link href="" /> - <id></id> - <updated>2019-06-20T00:00:00-04:00</updated> - <content type="text"><![CDATA[ -<h1 id="Why%20I%20Switched%20Back%20to%20Firefox%20from%20Qutebrowser">Why I Switched Back to Firefox from Qutebrowser</h1> - -<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2019-06-20</p> - -<p>I&#8217;ve been using qutebrowser for about six months now as my primary browser after -switching to it from GNU&#47;IceCat seeking a browsing experience with solid -vim-like controls. At first, I enjoyed the simplicity and shortcuts afforded by -qutebrowser but noticed more and more issues as time went on. Qutebrowser, while -very usable as a browser, falls short in some key areas that are important to -me.</p> - -<p>Privacy online is something that is very important to me and should be important -to everyone who uses the internet. It&#8217;s one of the reasons I donate to the -<a href="">Electronic Frontier Foundation</a> and probably -the biggest reason I switched back to Firefox from qutebrowser. Although there -are limited things you can do in qutebrowser to block some trackers such as -changing your user agent string, it is still quite limited compared to Firefox. -You have to launch qutebrowser with a command line flag just to disable reading -from the HTML canvas and there isn&#8217;t even an option to disable WebRTC. This is -in stark contrast to Firefox which—even ignoring the capabilities of extensions -such as <a href="">Privacy Badger</a> -and <a href="">uBlock Origin</a>—allows -you to enable privacy features like fingerprinting resistance and disable -potentially bad features like WebRTC from within the built-in configuration -window.</p> - -<p>Another big factor is that some sites which I would use would have elements that -wouldn&#8217;t load or work properly in qutebrowser and I would have to switch over to -Firefox to use them. For example, I run a Proxmox virtualization host on my -server and any time I tried view my virtual machines using noVNC or Spice, the -screens would be black and it wouldn&#8217;t work. Another issue happens when websites -update search suggestions live as you type. With the way some websites would do -this, I would get kicked out of insert mode in the middle of typing which would -usually result in the tab suddenly closing or me activating something I didn&#8217;t -intend to activate since I was booted back to normal mode. This made for a very -frustrating browsing experience on those websites. This specific point isn&#8217;t so -much a fault with qutebrowser and more a fault with some modern websites but, -alas, it made using Firefox feel that much smoother and better.</p> - -<p>I also found Firefox much easier to develop on compared to qutebrowser. It could -be because I&#8217;m just not used to the Chromium-family set of web development tools -but I find Firefox&#8217;s set much more intuitive and the easy-to-use live stylesheet -editor makes it really easy for me to experiment with what my web pages look -like right in the browser. Plus I found the network-related tools easier to -understand and navigate in Firefox than in qutebrowser.</p> - -<p>Those are the big three reasons why I switched back to Firefox but I did have -some other very minor problems which, when put all together, pushed me over the -edge to switch. The first of which is that, since I use KeePassXC as my password -manager, the extension available for Firefox makes it much more convenient to -enter my credentials instead of having to copy-paste. The second is that Firefox -is using the Gecko web rendering engine which I feel better about using due to -Mozilla&#8217;s commitment to a free and open web. The last minor reason for making me -switch is that Firefox has multiple extensions which enable vim-like controls. -Although these can&#8217;t be as full-featured as a browser designed around those -controls, I have found the one I am using—<a -href="">Vim -Vixen</a>—to be good enough for my uses.</p> - -<p>Overall, qutebrowser still is a commendable browser and, if the reasons I listed -above don&#8217;t really concern you that much, I would recommend checking it out. -Unfortunately it didn&#8217;t fit well with what I wanted out of a browser and that&#8217;s -why I switched from qutebrowser to Firefox.</p> - ]]></content> - </entry> - -</feed>