paritybit.ca

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

commit 2100b21ce7054d84bcfd465c651ef367e0f42a19
parent 68b01cca8e632a63a498245cc553ef7e440f5431
Author: Jake Bauer <jbauer@paritybit.ca>
Date:   Mon, 28 Sep 2020 00:18:22 -0400

Geminize http site

Diffstat:
Mgemini/pages/about.gmi | 29+++++------------------------
Mgemini/pages/blog.gmi | 138+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Agemini/pages/blog/a-brief-review-of-fedora-32.gmi | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/a-month-and-a-half-of-self-hosted-email.gmi | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/a-quick-rant-about-web-font-sizes.gmi | 24++++++++++++++++++++++++
Agemini/pages/blog/adding-image-optimization-to-my-static-site-generator.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/adding-search-to-my-blog.gmi | 28++++++++++++++++++++++++++++
Agemini/pages/blog/announcing-kontaktb.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/are-todo-applications-a-waste-of-time.gmi | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/arguing-effectively.gmi | 14++++++++++++++
Agemini/pages/blog/attempting-to-replace-my-thinkpads-touchpad.gmi | 44++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/automating-publishing.gmi | 34++++++++++++++++++++++++++++++++++
Agemini/pages/blog/be-a-good-netizen.gmi | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/book-review-the-mediocre-programmer.gmi | 32++++++++++++++++++++++++++++++++
Agemini/pages/blog/btw-i-use-arch.gmi | 36++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/caring-about-seo.gmi | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/cat-v-considered-harmful.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/china.gmi | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/choosing-a-self-hosted-git-service.gmi | 192+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/choosing-an-investment-brokerage.gmi | 41+++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/clone-wars-finale.gmi | 22++++++++++++++++++++++
Agemini/pages/blog/colours-for-gitea-issues.gmi | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/curating-my-blogroll.gmi | 36++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/debian-with-btrfs.gmi | 131+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/decommissioning-my-rackmount-server.gmi | 34++++++++++++++++++++++++++++++++++
Agemini/pages/blog/difficulty-of-privacy-education.gmi | 44++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/diving-deeper-into-the-small-internet.gmi | 43+++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/dnd-xp-system.gmi | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/ethical-investing.gmi | 34++++++++++++++++++++++++++++++++++
Agemini/pages/blog/generating-my-geek-code.gmi | 39+++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/gentoo-isnt-for-me.gmi | 33+++++++++++++++++++++++++++++++++
Agemini/pages/blog/going-from-user-to-contributor-with-foss.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/gomux-is-the-best-cli-matrix-client.gmi | 36++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/housecleaning.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/how-far-translation-tools-have-come.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-i-keep-my-home-directory-clean.gmi | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-i-manage-my-dotfiles.gmi | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-much-ram-is-enough.gmi | 28++++++++++++++++++++++++++++
Agemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-1.gmi | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-2.gmi | 102+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-3.gmi | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/how-to-not-make-an-ass-of-yourself-internet-discussions.gmi | 45+++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/i-got-more-ram.gmi | 36++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/i-like-perl.gmi | 38++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/i-was-wrong.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/improving-blog-searching.gmi | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/improving-my-blog-post-publishing-script.gmi | 32++++++++++++++++++++++++++++++++
Agemini/pages/blog/interesting-things-for-today.gmi | 34++++++++++++++++++++++++++++++++++
Agemini/pages/blog/it-doesnt-have-to-be-perfect.gmi | 22++++++++++++++++++++++
Agemini/pages/blog/logo-redesign.gmi | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/machine-hostnames.gmi | 42++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/making-my-own-vim-statusline.gmi | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/making-my-site-easier-to-read.gmi | 35+++++++++++++++++++++++++++++++++++
Agemini/pages/blog/mastodon-to-pleroma-1-setting-up-a-pleroma-server.gmi | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/mastodon-to-pleroma-2-customizing-my-instance.gmi | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/mastodon-to-pleroma-3-shutting-down-mastodon.gmi | 92+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/migrating-my-wiki-off-of-mediawiki.gmi | 22++++++++++++++++++++++
Agemini/pages/blog/my-attempts-to-fix-my-mastodon-instance.gmi | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-beginnings-with-gentoo.gmi | 36++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-first-ctf.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/my-git-server-was-ddosed.gmi | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-journey-with-computers.gmi | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-lwn-theme.gmi | 110+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-new-t420s.gmi | 102+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-preferred-fediverse-mobile-client.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-todo-solution.gmi | 46++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/my-top-10-most-used-commands.gmi | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/new-desktop-checklist.gmi | 24++++++++++++++++++++++++
Agemini/pages/blog/new-server-checklist.gmi | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/nope-back-to-st.gmi | 41+++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/paying-for-software.gmi | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/posting-statuses-on-pleroma-with-a-shell-script.gmi | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/preparing-to-self-host-email.gmi | 46++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/qutebrowser-to-firefox.gmi | 22++++++++++++++++++++++
Agemini/pages/blog/refining-my-neomutt-config.gmi | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/reflecting-on-50-days-of-blogging.gmi | 26++++++++++++++++++++++++++
Agemini/pages/blog/rewriting-my-static-site-generator.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/scripting-my-way-to-success.gmi | 40++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/self-hosted-mail-now-live.gmi | 31+++++++++++++++++++++++++++++++
Agemini/pages/blog/self-hosting-email.gmi | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/setting-up-a-gopher-site.gmi | 42++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/setting-up-a-status-page.gmi | 43+++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/setting-up-gpg-keys-from-scratch.gmi | 147+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/setting-up-weechat-again.gmi | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/submitting-a-bug-report-to-freebsd.gmi | 33+++++++++++++++++++++++++++++++++
Agemini/pages/blog/switching-to-alacritty-removals.gmi | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/switching-to-alacritty.gmi | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/switching-to-cgit.gmi | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/switching-to-debian-sid.gmi | 30++++++++++++++++++++++++++++++
Agemini/pages/blog/the-diefenbunker-museum.gmi | 100+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/the-disappearance-of-one.gmi | 24++++++++++++++++++++++++
Agemini/pages/blog/the-hacker-quarterly-magazine.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/the-joys-of-old-tech.gmi | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/the-marble-man.gmi | 27+++++++++++++++++++++++++++
Agemini/pages/blog/toggling-between-indentation-styles-in-vim.gmi | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/trying-out-aerc.gmi | 38++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/trying-out-dwm.gmi | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/tweaking-some-css.gmi | 29+++++++++++++++++++++++++++++
Agemini/pages/blog/two-months-with-aerc.gmi | 32++++++++++++++++++++++++++++++++
Agemini/pages/blog/two-of-the-most-valuable-lessons-ive-learned.gmi | 42++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/two-truths-and-a-lie.gmi | 32++++++++++++++++++++++++++++++++
Agemini/pages/blog/unsure-what-to-write.gmi | 24++++++++++++++++++++++++
Agemini/pages/blog/urxvt-to-st.gmi | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/use-syncthing-to-sync-things.gmi | 40++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/use-xterm-256color-with-alacritty.gmi | 46++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/using-rm-with-trash.gmi | 41+++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/vortex-vibe-keyboard.gmi | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/website-redesign.gmi | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/why-dwm-swallowing-cant-swallow-tmux.gmi | 0
Agemini/pages/blog/why-email-is-the-best-discussion-platform.gmi | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/why-i-blog.gmi | 28++++++++++++++++++++++++++++
Agemini/pages/blog/why-i-hate-the-term-modern.gmi | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/why-i-love-the-fediverse.gmi | 37+++++++++++++++++++++++++++++++++++++
Agemini/pages/blog/why-irc-is-still-good.gmi | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgemini/pages/contact.gmi | 5+----
Mgemini/pages/links.gmi | 679+++++++++++++++++++++++++++++++++++--------------------------------------------
Mgemini/pages/now.gmi | 3+--
Mgemini/pages/projects.gmi | 4+---
Mgemini/pages/uses.gmi | 608+++++++++++++++++++++++++++++++++++++++----------------------------------------
119 files changed, 6240 insertions(+), 736 deletions(-)

diff --git a/gemini/pages/about.gmi b/gemini/pages/about.gmi @@ -1,35 +1,16 @@ # About Me -My name is Jake though I usually go by the handle "jbauer" online. I am a -student of computer science with a strong interest in computer security, -networking, and low-level stuff. I enjoy programming, figuring out how systems -work, and completing hacking challenges when I have/make the time. I try to -program software with simplicity and accessibility in mind. - -My spare time is usually occupied with learning, programming, gardening, or -getting outside. I also enjoy watching talks from conferences and listening to -technology podcasts such as Darknet Diaries and those from Jupiter Broadcasting -to expose me to new ideas and ways of thinking. I try to keep up with the goings -on in the Linux community by reading LWN.net of which I am a -subscriber. Additionally, I write the occasional blog post expressing my views -on various subjects or documenting my technological encounters/adventures. Those -can be found on the blog page [1]. +My name is Jake though I usually go by the handle "jbauer" online. I am a student of computer science with a strong interest in computer security, networking, and low-level stuff. I enjoy programming, figuring out how systems work, and completing hacking challenges when I have/make the time. I try to program software with simplicity and accessibility in mind. + +My spare time is usually occupied with learning, programming, gardening, or getting outside. I also enjoy watching talks from conferences and listening to technology podcasts such as Darknet Diaries and those from Jupiter Broadcasting to expose me to new ideas and ways of thinking. I try to keep up with the goings on in the Linux community by reading LWN.net of which I am a subscriber. Additionally, I write the occasional blog post expressing my views on various subjects or documenting my technological encounters/adventures. Those can be found on the blog page [1]. => gemini://paritybit.ca/blog.gmi -I am a staunch supporter of online freedom, privacy rights, and the advancement -of society through free and open access to information and knowledge. These are -the main reasons why I advocate for free (as in freedom) software and why I -support the Electronic Frontier Foundation and the Wikimedia Foundation through -monetary contributions. If you also share these values and have the means to -donate, I would encourage you to also make either a time- or money-based -contribution to those organizations or other organizations with similar values. +I am a staunch supporter of online freedom, privacy rights, and the advancement of society through free and open access to information and knowledge. These are the main reasons why I advocate for free (as in freedom) software and why I support the Electronic Frontier Foundation and the Wikimedia Foundation through monetary contributions. If you also share these values and have the means to donate, I would encourage you to also make either a time- or money-based contribution to those organizations or other organizations with similar values. ## Geek Code -The Geek Code is a humorous way to tell other geeks a bit about myself in the -context of geekiness. (It lacks a bit of nuance, so don't take it too -seriously). +The Geek Code is a humorous way to tell other geeks a bit about myself in the context of geekiness. (It lacks a bit of nuance, so don't take it too seriously). => https://geekcode.xyz/geek.html Create your own Geek Code => http://www.joereiss.net/geek/ungeek.html Decoding a Geek Code diff --git a/gemini/pages/blog.gmi b/gemini/pages/blog.gmi @@ -1,13 +1,125 @@ -# Blog - -This is the place where I put all of my ramblings, rants, essays, and random thoughts and ideas. You can find links to other blogs that I follow here: - -=> gemini://paritybit.ca/links.gmi Links Page and Blogroll - -For more short-form content, you can find me on my Pleroma instance: - -=> https://pleroma.paritybit.ca/ - -Please note, only new blog posts written after I created this geminispace will appear here for now. To view old posts please visit my website (it should work very well in a command-line browser like lynx or w3m): - -=> https://www.paritybit.ca/blog +# Blog + +This is the place where I put all of my ramblings, rants, essays, and random thoughts and ideas. You can find links to other blogs that I follow on my blogroll. + +=> gemini://paritybit.ca/links.gmi + +For more short-form content, you can find me on my instance of the social/microblogging platform Pleroma. + +=> https://pleroma.paritybit.ca/ + +## Blog Posts Converted from my Website + +The following blog posts were converted from my website using the md2gemini tool. It's not a perfect conversion because I originally wrote the posts with HTML in mind so expect some oddities like embedded HTML, broken links or broken tables. + +=> gemini://paritybit.ca/blog/gomux-is-the-best-cli-matrix-client.gmi 2020-09-24 Gomuks is the Best CLI Matrix Client +=> gemini://paritybit.ca/blog/why-irc-is-still-good.gmi 2020-08-30 Why IRC is Still Good in $CURRENT_YEAR +=> gemini://paritybit.ca/blog/btw-i-use-arch.gmi 2020-08-29 BTW, I Use Arch +=> gemini://paritybit.ca/blog/nope-back-to-st.gmi 2020-08-27 Nope, Back to st +=> gemini://paritybit.ca/blog/setting-up-weechat-again.gmi 2020-08-22 Setting Up WeeChat Again with weechat-matrix +=> gemini://paritybit.ca/blog/my-top-10-most-used-commands.gmi 2020-08-21 My Top 10 Most Used Commands +=> gemini://paritybit.ca/blog/the-hacker-quarterly-magazine.gmi 2020-08-14 The Hacker Quarterly Magazine +=> gemini://paritybit.ca/blog/ethical-investing.gmi 2020-08-13 Ethical Investing +=> gemini://paritybit.ca/blog/choosing-an-investment-brokerage.gmi 2020-08-12 Choosing An Investment Brokerage +=> gemini://paritybit.ca/blog/the-marble-man.gmi 2020-08-11 The Marble Man +=> gemini://paritybit.ca/blog/my-preferred-fediverse-mobile-client.gmi 2020-08-10 My Preferred Fediverse Mobile Client +=> gemini://paritybit.ca/blog/posting-statuses-on-pleroma-with-a-shell-script.gmi 2020-08-09 Posting Statuses on Pleroma with a Shell Script +=> gemini://paritybit.ca/blog/how-to-not-make-an-ass-of-yourself-internet-discussions.gmi 2020-08-08 How to Not Make an Ass of Yourself in Online Discussions +=> gemini://paritybit.ca/blog/gentoo-isnt-for-me.gmi 2020-08-08 Gentoo Isn't for Me +=> gemini://paritybit.ca/blog/adding-image-optimization-to-my-static-site-generator.gmi 2020-08-06 Adding Image Optimization to My Static Site Generator +=> gemini://paritybit.ca/blog/use-xterm-256color-with-alacritty.gmi 2020-08-05 Use xterm-256color With Alacritty For Better ls Output +=> gemini://paritybit.ca/blog/my-journey-with-computers.gmi 2020-08-03 My Journey With Computers +=> gemini://paritybit.ca/blog/vortex-vibe-keyboard.gmi 2020-08-02 The Vortex ViBE Mechanical Keyboard +=> gemini://paritybit.ca/blog/my-git-server-was-ddosed.gmi 2020-07-29 My Git Server Was DDoSed +=> gemini://paritybit.ca/blog/mastodon-to-pleroma-3-shutting-down-mastodon.gmi 2020-07-25 Mastodon to Pleroma — 3 — Shutting Down Mastodon +=> gemini://paritybit.ca/blog/i-was-wrong.gmi 2020-07-25 I Was Wrong +=> gemini://paritybit.ca/blog/switching-to-alacritty.gmi 2020-07-24 Switching From St to Alacritty +=> gemini://paritybit.ca/blog/two-truths-and-a-lie.gmi 2020-07-23 Two Truths and a Lie +=> gemini://paritybit.ca/blog/mastodon-to-pleroma-2-customizing-my-instance.gmi 2020-07-23 Mastodon to Pleroma — 2 — Customizing My Instance +=> gemini://paritybit.ca/blog/mastodon-to-pleroma-1-setting-up-a-pleroma-server.gmi 2020-07-21 Mastodon to Pleroma — 1 — Setting up a Pleroma Server +=> gemini://paritybit.ca/blog/two-months-with-aerc.gmi 2020-07-19 Two Months with aerc +=> gemini://paritybit.ca/blog/my-attempts-to-fix-my-mastodon-instance.gmi 2020-07-17 My Attempts to Fix My Mastodon Instance +=> gemini://paritybit.ca/blog/why-i-hate-the-term-modern.gmi 2020-07-16 Why I Hate The Term "Modern" +=> gemini://paritybit.ca/blog/be-a-good-netizen.gmi 2020-07-15 Be A Good Netizen +=> gemini://paritybit.ca/blog/debian-with-btrfs.gmi 2020-07-14 Installing Debian 10 Buster with Encrypted LVM and btrfs Subvolumes +=> gemini://paritybit.ca/blog/using-rm-with-trash.gmi 2020-07-13 Using the "rm" Command with Trash +=> gemini://paritybit.ca/blog/new-desktop-checklist.gmi 2020-07-13 New Desktop Checklist +=> gemini://paritybit.ca/blog/new-server-checklist.gmi 2020-07-12 New Server Checklist +=> gemini://paritybit.ca/blog/machine-hostnames.gmi 2020-07-12 Machine Hostnames +=> gemini://paritybit.ca/blog/colours-for-gitea-issues.gmi 2020-07-11 Colours for Gitea Issues +=> gemini://paritybit.ca/blog/migrating-my-wiki-off-of-mediawiki.gmi 2020-07-09 Migrating My Wiki Off of MediaWiki +=> gemini://paritybit.ca/blog/my-todo-solution.gmi 2020-07-08 My TODO Solution +=> gemini://paritybit.ca/blog/are-todo-applications-a-waste-of-time.gmi 2020-07-07 Are TODO Applications a Waste of Time? +=> gemini://paritybit.ca/blog/improving-blog-searching.gmi 2020-07-06 Improving Blog Searching +=> gemini://paritybit.ca/blog/switching-to-cgit.gmi 2020-07-05 Switching to cgit +=> gemini://paritybit.ca/blog/generating-my-geek-code.gmi 2020-07-04 Generating My Geek Code +=> gemini://paritybit.ca/blog/adding-search-to-my-blog.gmi 2020-07-03 Adding Search to my Blog +=> gemini://paritybit.ca/blog/a-month-and-a-half-of-self-hosted-email.gmi 2020-07-02 A Month-and-a-Half of Self-Hosted Email +=> gemini://paritybit.ca/blog/how-i-keep-my-home-directory-clean.gmi 2020-06-28 How I Keep My Home Directory Clean +=> gemini://paritybit.ca/blog/my-first-ctf.gmi 2020-06-27 My First CTF +=> gemini://paritybit.ca/blog/use-syncthing-to-sync-things.gmi 2020-06-26 Use Syncthing to Sync Things +=> gemini://paritybit.ca/blog/why-dwm-swallowing-cant-swallow-tmux.gmi 2020-06-26 Why dwm's Window Swallowing Patch Can't Swallow tmux +=> gemini://paritybit.ca/blog/switching-to-debian-sid.gmi 2020-06-23 Switching to Debian Sid +=> gemini://paritybit.ca/blog/my-lwn-theme.gmi 2020-06-22 My LWN Theme +=> gemini://paritybit.ca/blog/reflecting-on-50-days-of-blogging.gmi 2020-06-21 Reflecting on 50 Days of Blogging +=> gemini://paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-3.gmi 2020-06-20 How to Create an RSS Feed for Your Blog — 3 — Automating Updates +=> gemini://paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-2.gmi 2020-06-19 How to Create an RSS Feed for Your Blog — 2 — The Basics +=> gemini://paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-1.gmi 2020-06-18 How to Create an RSS Feed for Your Blog — 1 — Why? +=> gemini://paritybit.ca/blog/my-beginnings-with-gentoo.gmi 2020-06-16 My Beginnings with Gentoo +=> gemini://paritybit.ca/blog/my-new-t420s.gmi 2020-06-15 My New T420s +=> gemini://paritybit.ca/blog/announcing-kontaktb.gmi 2020-06-14 Announcing kontaktdb +=> gemini://paritybit.ca/blog/how-i-manage-my-dotfiles.gmi 2020-06-13 How I Manage My Dotfiles +=> gemini://paritybit.ca/blog/making-my-site-easier-to-read.gmi 2020-06-12 Making My Site Easier to Read +=> gemini://paritybit.ca/blog/improving-my-blog-post-publishing-script.gmi 2020-06-11 Improving My Blog Post Publishing Script +=> gemini://paritybit.ca/blog/trying-out-dwm.gmi 2020-06-11 Trying Out dwm +=> gemini://paritybit.ca/blog/setting-up-a-status-page.gmi 2020-06-09 Setting Up a Status Page +=> gemini://paritybit.ca/blog/scripting-my-way-to-success.gmi 2020-06-08 Scripting My Way to Success +=> gemini://paritybit.ca/blog/curating-my-blogroll.gmi 2020-06-07 Curating My Blogroll +=> gemini://paritybit.ca/blog/why-email-is-the-best-discussion-platform.gmi 2020-06-07 Why Email is the Best Discussion Platform +=> gemini://paritybit.ca/blog/toggling-between-indentation-styles-in-vim.gmi 2020-06-02 Toggling Between Indentation Styles in Vim +=> gemini://paritybit.ca/blog/dnd-xp-system.gmi 2020-06-02 My Custom XP System for DnD +=> gemini://paritybit.ca/blog/it-doesnt-have-to-be-perfect.gmi 2020-05-31 It Doesn't Have to Be Perfect +=> gemini://paritybit.ca/blog/book-review-the-mediocre-programmer.gmi 2020-05-29 Book Review: The Mediocre Programmer +=> gemini://paritybit.ca/blog/a-quick-rant-about-web-font-sizes.gmi 2020-05-28 A Quick Rant About Web Font Sizes +=> gemini://paritybit.ca/blog/i-like-perl.gmi 2020-05-27 I Like Perl +=> gemini://paritybit.ca/blog/choosing-a-self-hosted-git-service.gmi 2020-05-26 Choosing a Self-Hosted Git Service +=> gemini://paritybit.ca/blog/going-from-user-to-contributor-with-foss.gmi 2020-05-25 Going From User to Contributor With FOSS +=> gemini://paritybit.ca/blog/paying-for-software.gmi 2020-05-25 Paying for Software +=> gemini://paritybit.ca/blog/two-of-the-most-valuable-lessons-ive-learned.gmi 2020-05-23 Two of the Most Valuable Lessons I've Learned +=> gemini://paritybit.ca/blog/rewriting-my-static-site-generator.gmi 2020-05-22 Rewriting My Static Site Generator +=> gemini://paritybit.ca/blog/self-hosted-mail-now-live.gmi 2020-05-19 Self-Hosted Email is Now Live! +=> gemini://paritybit.ca/blog/attempting-to-replace-my-thinkpads-touchpad.gmi 2020-05-19 Attempting to Replace My Thinkpad's Touchpad +=> gemini://paritybit.ca/blog/trying-out-aerc.gmi 2020-05-18 Trying Out aerc +=> gemini://paritybit.ca/blog/setting-up-gpg-keys-from-scratch.gmi 2020-05-17 Setting Up GPG Keys from Scratch +=> gemini://paritybit.ca/blog/self-hosting-email.gmi 2020-05-16 Self-Hosting Email +=> gemini://paritybit.ca/blog/preparing-to-self-host-email.gmi 2020-05-15 Preparing to Self-Host Email +=> gemini://paritybit.ca/blog/diving-deeper-into-the-small-internet.gmi 2020-05-13 Diving Deeper Into the Small Internet +=> gemini://paritybit.ca/blog/setting-up-a-gopher-site.gmi 2020-05-12 Setting Up A Gopher Site +=> gemini://paritybit.ca/blog/a-brief-review-of-fedora-32.gmi 2020-05-11 A Brief Review of Fedora 32 +=> gemini://paritybit.ca/blog/why-i-love-the-fediverse.gmi 2020-05-10 Why I Love the Fediverse +=> gemini://paritybit.ca/blog/submitting-a-bug-report-to-freebsd.gmi 2020-05-09 Submitting a Bug Report to FreeBSD +=> gemini://paritybit.ca/blog/cat-v-considered-harmful.gmi 2020-05-08 Cat -v Considered Harmful +=> gemini://paritybit.ca/blog/unsure-what-to-write.gmi 2020-05-07 Unsure What To Write +=> gemini://paritybit.ca/blog/the-joys-of-old-tech.gmi 2020-05-07 The Joys of Old Tech +=> gemini://paritybit.ca/blog/refining-my-neomutt-config.gmi 2020-05-05 Refining My NeoMutt Configuration +=> gemini://paritybit.ca/blog/clone-wars-finale.gmi 2020-05-04 Star Wars: The Clone Wars Finale +=> gemini://paritybit.ca/blog/the-diefenbunker-museum.gmi 2020-05-03 The Diefenbunker Museum +=> gemini://paritybit.ca/blog/the-disappearance-of-one.gmi 2020-05-02 The Disappearance of <em>One</em> +=> gemini://paritybit.ca/blog/caring-about-seo.gmi 2020-05-01 Caring About SEO +=> gemini://paritybit.ca/blog/i-got-more-ram.gmi 2020-04-30 I Got More RAM! +=> gemini://paritybit.ca/blog/interesting-things-for-today.gmi 2020-04-29 Some Interesting Things For Today +=> gemini://paritybit.ca/blog/how-far-translation-tools-have-come.gmi 2020-04-28 How Far Translation Tools Have Come +=> gemini://paritybit.ca/blog/tweaking-some-css.gmi 2020-04-27 Tweaking Some CSS +=> gemini://paritybit.ca/blog/how-much-ram-is-enough.gmi 2020-04-26 I Ran Out of RAM... Again +=> gemini://paritybit.ca/blog/why-i-blog.gmi 2020-04-25 Why I Blog and #100DaysToOffload +=> gemini://paritybit.ca/blog/decommissioning-my-rackmount-server.gmi 2020-04-11 Decommissioning My Rackmount Server +=> gemini://paritybit.ca/blog/housecleaning.gmi 2020-04-07 Doing Some House Cleaning +=> gemini://paritybit.ca/blog/logo-redesign.gmi 2020-02-28 Redesigning My Website's Logo +=> gemini://paritybit.ca/blog/making-my-own-vim-statusline.gmi 2020-02-24 Making My Own Vim Statusline +=> gemini://paritybit.ca/blog/urxvt-to-st.gmi 2020-02-14 Switching from urxvt to st +=> gemini://paritybit.ca/blog/website-redesign.gmi 2020-02-06 Making My Website More Accessible +=> gemini://paritybit.ca/blog/automating-publishing.gmi 2019-12-30 Automating the Publishing of Articles +=> gemini://paritybit.ca/blog/arguing-effectively.gmi 2019-12-21 How to Argue Effectively +=> gemini://paritybit.ca/blog/difficulty-of-privacy-education.gmi 2019-12-20 The Difficulty of Educating People About Online Privacy +=> gemini://paritybit.ca/blog/china.gmi 2019-11-23 China +=> gemini://paritybit.ca/blog/qutebrowser-to-firefox.gmi 2019-06-20 Why I Switched Back to Firefox from Qutebrowser diff --git a/gemini/pages/blog/a-brief-review-of-fedora-32.gmi b/gemini/pages/blog/a-brief-review-of-fedora-32.gmi @@ -0,0 +1,49 @@ +## A Brief Review of Fedora 32 + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-11 | + <b>Last Updated:</b> 2020-05-11 +</div> +``` + +```html +<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> +``` + +I have a tablet[1] 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&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). This is a known issue[2] that was flagged **three** years ago! I'm not sure why it hasn't yet been fixed despite being a huge usability/accessibility issue. + +=> gemini://paritybit.ca/uses#Tablets 1: /uses#Tablets +=> https://github.com/elementary/greeter/issues/72 2: https://github.com/elementary/greeter/issues/72 + +Anyways, enough with the ranting. I decided to install Fedora because of the recent release[3] 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'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't tell when I'm using a flatpak versus a native application. + +=> https://fedoramagazine.org/announcing-fedora-32/ 3: https://fedoramagazine.org/announcing-fedora-32/ + +So far, I have only two gripes with Fedora. The first is that I had to add the RPMFusion repositories and install `ffmpeg` 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't watch streams and what I had to do. + +The second is that the `dnf` package manager is *really* slow. When comparing it to `apt` from Debian/Ubuntu/Elementary/etc., and `pkg` from FreeBSD, and even `pacman` from Arch, `dnf` feels like it takes forever even to install just a single package. For example, I installed `neofetch` to take the screenshot featured at the top of this post and it took over a minute for it to present me with an "Are you sure you want to install this?" prompt just for that single package. On a more positive note, the way that `dnf` presents package installation to the user is really nice. It highlights package names, and splits the listing of what it's going to install into nice categories so you can quickly see which packages are dependencies and which are suggestions and so on. + +***Update**: ShellOwl on Mastodon[4] informed me that there is a really easy way to make `dnf` faster. Just add the following to your `/etc/dnf/dnf.conf`:* + +=> https://social.paritybit.ca/web/statuses/104153133747326267 4: https://social.paritybit.ca/web/statuses/104153133747326267 + +```ini +fastestmirror=true +deltarpm=true +``` + +*I've done this and it definitely makes it feel way faster; on par with the other package managers as far as I can tell.* + +Overall, it has been a positive experience. I don't need to install packages often and I'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's a solid Linux platform so I think I will be sticking with it for the time being. + +*This is my seventeenth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/a-month-and-a-half-of-self-hosted-email.gmi b/gemini/pages/blog/a-month-and-a-half-of-self-hosted-email.gmi @@ -0,0 +1,50 @@ +## A Month-and-a-Half of Self-Hosted Email + +//: # "There's been a lot of talk in my Internet neighbourhood lately about the state of email and whether it's broken or not. Here's why I think email is just fine as it is, from the perspective of someone self-hosting. + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-02 | + <b>Last Updated:</b> 2020-07-02 +</div> +``` + +There's been a lot of talk in my Internet neighbourhood lately about the state of email and whether it's broken or not. I previously posted about how I think email is the best discussion platform[1] 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. + +=> https://www.paritybit.ca/blog/self-hosted-mail-now-live 1: https://www.paritybit.ca/blog/self-hosted-mail-now-live + +I went live with my self-hosted email server on 2020-05-19; almost a month and a half ago. Since then, I've been using it daily for all of my email-based communications through IMAP (there is no web interface). As I discussed in my blog posts about setting up email[2], I am using OpenBSD with OpenSMTPD, Dovecot, and Rspamd which is holding up well as a solid, reliable software stack. + +=> https://www.paritybit.ca/blog/preparing-to-self-host-email 2: https://www.paritybit.ca/blog/preparing-to-self-host-email + +I have had no issues sending email to any domain and I haven't had to do any maintenance on the server except for needing to ssh in a couple of times to run `doas sysupgrade` when a patch for the base system was released (I've signed up to the OpenBSD mailing list which notifies me when these updates are released, so it'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 `uptime` and the server says it's been `up 27 days, 23:16`. 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. + +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 mailto:jbauer@paritybit.ca[3] 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're outright blocked), and I haven't received *a single* 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's filter (usually from a Linux mailing list). I can count on one hand the number of those messages that I have received. + +=> mailto:jbauer@paritybit.ca 3: mailto:jbauer@paritybit.ca + +I'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: + +> I take absolutely no precaution hiding my e-mail address, gilles@poolp.org, +> 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 [...] (source for the quote[4]) +> +> +=> https://poolp.org/posts/2019-08-30/you-should-not-run-your-mail-server-because-mail-is-hard/ 4: https://poolp.org/posts/2019-08-30/you-should-not-run-your-mail-server-because-mail-is-hard/ +As far as privacy is concerned, I don'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's and Microsoft'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'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'm sending sensitive data, I would encrypt my message with GPG or use a different medium such as Matrix. + +Back in the early days of the Internet (back before it even *was* "the Internet"), email was used as a collaboration tool[5] (invidio.us link[6]) and it still excels at that purpose. Many people still find email better to use for collaboration[7], as do I. As much as it might seem natural to compare electronic mail to regular snail mail, it really isn'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. + +=> https://youtu.be/zqcoPrvXSqg 5: https://youtu.be/zqcoPrvXSqg +=> https://invidio.us/watch?v=zqcoPrvXSqg 6: https://invidio.us/watch?v=zqcoPrvXSqg +=> https://nhaehnle.blogspot.com/2020/06/they-want-to-be-small-they-want-to-be.html 7: https://nhaehnle.blogspot.com/2020/06/they-want-to-be-small-they-want-to-be.html + +I know the others talking about this weren't saying exactly this, but I do want to make the point that just because email doesn't provide the same security guarantees as snail mail, Matrix, or Signal, doesn't mean it's a broken system; it just means that it'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're not close friends. For those purposes, email is working just fine. + +*This is my fifty-eighth post for the #100DaysToOffload[8] challenge. You can learn more about this challenge over at https://100daystooffload.com[9][10].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 8: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 9: https://100daystooffload.com +=> https://100daystooffload.com 10: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/a-quick-rant-about-web-font-sizes.gmi b/gemini/pages/blog/a-quick-rant-about-web-font-sizes.gmi @@ -0,0 +1,23 @@ +## A Quick Rant About Web Font Sizes + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-28 | + <b>Last Updated:</b> 2020-05-28 +</div> +``` + +Once I discovered how font sizes actually work in CSS, sites that lock the font size by specifying it in some value of `px` annoy me to no end. I typically have my browser's font size cranked up to 20px because it's way easier to read and I don't need to strain my eyes just to fit more text on screen at once. + +For that reason, I used the CSS `max()` property to set my website's font size to `max(18px, 100%)` which essentially tells the browser to render the site at `18px` or the font size that the user set in their browser settings if they set it to something higher than 18px. + +I was recently thinking, though, that this rule is basically useless. I may as well just set the font size to `100%` 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? + +That's my short rant on website font sizes. Just use some reasonable percent value (like `100%`) 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't going to be accessible anyways. + +*This is my thirty-second post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/adding-image-optimization-to-my-static-site-generator.gmi b/gemini/pages/blog/adding-image-optimization-to-my-static-site-generator.gmi @@ -0,0 +1,25 @@ +## Adding Image Optimization to My Static Site Generator + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-06 | + <b>Last Updated:</b> 2020-08-06 +</div> +``` + +I just added image optimization and resizing to my website's static site generator so that uploading images to my website involves a lot less manual labour. + +For a while I've been using tinypng.com[1] to optimize the PNG, JPG, and JPEG images that I upload to my website since I found that it did a better job than the command line utility `pngquant` (which also only worked on PNGs). They have an API service which allows one to upload 500 images in a month for free which is much more convenient than visiting the website every time I need to optimize an image. Using the magic of `curl`, I added the ability to use this API from my `compile` script which also handles compiling Markdown to HTML and CSS minification. + +=> https://tinypng.com 1: https://tinypng.com + +Another thing I added to the script was a `-r` or `--resize` option which takes a number (let's call it x) as an argument and uses the `convert` utility from ImageMagick to resize the input image by x%. I would commonly do this on the command line to generate smaller images (thumbnails, sort of) for embedding in blog posts to make page load sizes smaller so including it in the script alongside image optimization was a no-brainer. + +I am slowly getting closer to releasing my scripts as a standalone project. It would be a set of static site generator scripts that anybody could use but without the bloat and complication of the existing ones such as Hugo or Jekyll. I'm aiming for it to be a static site generator for minimalists who don't want to go through the hassle of writing their own, plus I want to include HTML to Gopher/Gemini conversion scripts. + +*This is my eighty-sixth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/adding-search-to-my-blog.gmi b/gemini/pages/blog/adding-search-to-my-blog.gmi @@ -0,0 +1,27 @@ +## Adding Search to my Blog + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-03 | + <b>Last Updated:</b> 2020-07-03 +</div> +``` + +As my collection of blog posts keeps growing, it is becoming increasingly apparent to me that I need to offer visitors some way to search through my previous posts. It will also be a lot easier for me to find an old post where I half-remember the title and have some idea of the content by being able to search for it instead of needing to scroll through my list of previous posts. + +For those reasons, today I have added a way for people to search my blog posts. The feature is available through a link on the blog page[1]. Go ahead, check it out now. + +=> gemini://paritybit.ca/blog 1: /blog + +See? It took all of 30 seconds to implement and I didn't even have to program anything! All I did was go to duckduckgo.com[2], type in `site:www.paritybit.ca/blog` into the search bar, hit `Enter`, copy the URL, and link to that URL from my blog page. By using this method, I can still avoid having any JavaScript, back-end scripts building the search results dynamically, or complex search solutions such as ElasticSearch. + +=> https://duckduckgo.com 2: https://duckduckgo.com + +It really is super easy to add search to your site, even if all you want is a simple static site. + +*This is my fifty-ninth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/announcing-kontaktb.gmi b/gemini/pages/blog/announcing-kontaktb.gmi @@ -0,0 +1,25 @@ +## Announcing kontaktdb + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-14 | + <b>Last Updated:</b> 2020-06-14 +</div> +``` + +kontaktdb is a small utility I created to store and retrieve basic contact information in plain text because I didn't like the complexity of existing options like abook or khard. All I need is contact name, email, and perhaps some other information in a simple format that can be read by email clients like NeoMutt or aerc. + +kontaktdb is designed to store all of its entries in a plain text file with one line per contact where each line consists of tab-delimited fields. So far, just name and email address fields are supported. It allows adding, deleting, listing the contents of the database, retrieving contacts based on a simple query, and editing contact information (albeit editing an entire contact at once instead of a specific field for a contact). + +Since I'm working with text content and the program is supposed to be really simple, I figured a simple POSIX shell script would suffice. If, by the time the program is nearing feature-completeness, I notice that the shell script is becoming too cumbersome, I may switch to a different language such as Perl. + +=> gemini://paritybit.ca/projects/kontaktdb View the project page + +=> https://git.sr.ht/~jbauer/kontaktdb View the git repository + +*This is my forty-fifth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/are-todo-applications-a-waste-of-time.gmi b/gemini/pages/blog/are-todo-applications-a-waste-of-time.gmi @@ -0,0 +1,56 @@ +## Are TODO Applications a Waste of Time? + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-07 | + <b>Last Updated:</b> 2020-07-07 +</div> +``` + +A few days ago, the following video by Derek Taylor popped up on my feed and got me thinking about TODO applications: Are TODO Applications Hindering Your Productivity?[1] (invidio.us link[2]). Some points that he mentioned resonated with me, though I think he is slightly wrong in his conclusion. + +=> https://www.youtube.com/watch?v=BcxZj2qh4Kw 1: https://www.youtube.com/watch?v=BcxZj2qh4Kw +=> https://invidio.us/watch?v=BcxZj2qh4Kw 2: https://invidio.us/watch?v=BcxZj2qh4Kw + +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're getting things done when, in reality, you'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't think TODO applications are useless or hinder your productivity and there are ways, when applied correctly, that they can be helpful. + +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 "perfect" organization system that will prepare me to accomplish tasks effectively than actually doing the task itself. However, this hypothetical "perfect" 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. + +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'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's like starting a car engine on a cold day: turn the engine over a few times and eventually it'll spring to life and become self-sustaining. The problem here arises when one stops at just doing the small tasks, is "satisfied" by those tiny boosts of dopamine, and doesn'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. + +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't accomplish what we thought we could. This isn't a problem with TODO lists; it's a trapping that one has to be aware of and avoid when planning their days or getting organized. + +Essentially, TODO lists or TODO applications are not the problem here, it'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'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. + +Don't let the illusion of productivity that TODO lists and applications invite become a procrastinative outlet or a substitute for doing the actual tasks. + +***Note**: Procrastinative isn't a real word. Except it is now cause I just made it up:* + +```html +<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." + +```html +</div> +``` + +*This is my sixty-third post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/arguing-effectively.gmi b/gemini/pages/blog/arguing-effectively.gmi @@ -0,0 +1,13 @@ +## How to Argue Effectively + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2019-12-21 | + <b>Last Updated:</b> 2019-12-21 +</div> +``` + +A friend recently shared this article on arguing effectively[1] with me and I highly recommend that everyone give it a read. It's 31 pointers on how to argue effectively with people so that you can have productive discussions to avoid frustration and anger on both sides. + +=> https://perfect24hours.com/how-to-argue-effectively/ 1: https://perfect24hours.com/how-to-argue-effectively/ +\ No newline at end of file diff --git a/gemini/pages/blog/attempting-to-replace-my-thinkpads-touchpad.gmi b/gemini/pages/blog/attempting-to-replace-my-thinkpads-touchpad.gmi @@ -0,0 +1,43 @@ +## Attempting to Replace My Thinkpad's Touchpad + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-19 | + <b>Last Updated:</b> 2020-05-19 +</div> +``` + +***Note:** Apologies for the awful quality of the photos in this post, it seems my cellphone's camera is either failing or the number of microscratches on the glass covering the lens is resulting in poor quality.* + +I have a Thinkpad T440s which has a "buttonless" touchpad. Essentially, the entire touchpad clicks downward to make clicks and there are no separate touchpad keys. Although I don't mind how it works and feels (the clunk is quite satisfying), it doesn't feel good to use in conjunction with the trackpoint for which Thinkpads are famous. + +The T450s supposedly has a compatible touchpad which can be swapped with the T440s's to give the T440s the separate buttons in addition to a clickable touchpad. Ordering one of these cost me ~$20 CAD on eBay and it shipped from what appears to be a local warehouse. It arrived yesterday so I spent some time today fitting it into my Thinkpad: + +```html +<figure> + <a href="/img/laptop-open-with-touchpad.jpg"><img + src="/img/laptop-open-with-touchpad-thumb.jpg"/></a> + <figcaption>My T440s with internals exposed and the new touchpad laying + next to it.</figcaption> +</figure> +``` + +Unfortunately, when I replaced the touchpad and put everything together, the touchpad was not behaving properly. Touching it would cause multiple touch events to fire off, phantom clicks would happen, and clicking the touchpad buttons would actually move the mouse instead of clicking. In an attempt to diagnose the problem, I set up the laptop in a way that I could swap the two touchpads out and see what happened in a live-booted Linux distribution: + +```html +<figure> + <a href="/img/live-testing-touchpad.jpg"><img + src="/img/live-testing-touchpad-thumb.jpg"/></a> + <figcaption>Live testing the new touchpad with a Linux distro booted off of + a USB stick.</figcaption> +</figure> +``` + +It seemed that the touchpad was being correctly recognized in Ubuntu; it was recognized as an Alps touchpad. However, no matter what I tried, the new touchpad wouldn't behave properly where the original one worked just fine. I'm assuming that it's something to do with an incompatibility between the touchpad and the existing ribbon cable. I was only able to find one forum thread online with people experiencing similar problems, with no solutions proposed. So, unfortunately, I think I'll be returning this touchpad in a few days if I can't find a solution. It's a shame I couldn't get it to work, but ultimately I don't really mind the existing touchpad so it's not a big deal. + +*This is my twenty-fourth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/automating-publishing.gmi b/gemini/pages/blog/automating-publishing.gmi @@ -0,0 +1,33 @@ +## Automating the Publishing of Articles + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2019-12-30 | + <b>Last Updated:</b> 2019-12-30 +</div> +``` + +If you're seeing this, it means my automation script worked perfectly. + +There was too much manual work involved in publishing things to my website. + +In order to publish a blog post, guide, or project to my site I had to: + +* Write the RSS feed entry manually. +* Copy the RSS feed entry from the sitewide feed to the relevant other feed (blog-, project-, or guide-specific feeds). +* Manually add an entry under the What's New heading on the home page[1] and delete the oldest entry. +* Manually add an entry under the relevant category page (i.e. /blog[2], /guides[3], or /projects[4]). +* Manually compile and upload each of these pages. + +Since all of that is relatively easy to automate, I went ahead and wrote a script[5] to do all of that for me. All I have to do now is call `./publish <type> <file>` and everything listed above is done for me. + +=> gemini://paritybit.ca/ 1: / +=> gemini://paritybit.ca/blog 2: /blog +=> gemini://paritybit.ca/guides 3: /guides +=> gemini://paritybit.ca/projects 4: /projects +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish 5: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish + +Not only does this get rid of a lot of potential for error in the process, it also makes it a lot easier for me to post things which will enable me to post more frequently without having to worry about all the work that came along with posting something new. + +The script took me about 3-4 hours to brainstorm, write, realise that I was doing things inefficiently, look some stuff up on Stackoverflow, rewrite, realise that I wanted it to do more than just make RSS feeds (which is all I planned to automate at first), brainstorm some more, look some more stuff up on Stackoverflow, write some more, and then test and tweak. +\ No newline at end of file diff --git a/gemini/pages/blog/be-a-good-netizen.gmi b/gemini/pages/blog/be-a-good-netizen.gmi @@ -0,0 +1,71 @@ +## Be A Good Netizen + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-15 | + <b>Last Updated:</b> 2020-07-15 +</div> +``` + +I was working on my post for today and since that's taking a little longer than expected, I figured I'd tell this story in the hopes that it gets more people to do the same when they encounter a situation like this. + +A toot about some recent Cisco vulnerabilities[1] caught my attention. I'm used to seeing Cisco vulnerabilities, but what I wasn't used to was the following SSL connection error I encountered when trying to view the advisories: + +=> https://social.paritybit.ca/web/statuses/104521055804587168 1: https://social.paritybit.ca/web/statuses/104521055804587168 + +```html +<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 + tools.cisco.com with the following error message: Secure Connection Failed + An error occurred during a connection to tools.cisco.com. 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> +``` + +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: + +```html +<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> +``` + +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 fairly significant issue[2] so it's good to have those settings activated. + +=> https://wiki.mozilla.org/Security:Renegotiation 2: https://wiki.mozilla.org/Security:Renegotiation + +I poked fun at Cisco in a response to the original toot[3] because... well... 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? + +=> https://social.paritybit.ca/web/statuses/104521184568713589 3: https://social.paritybit.ca/web/statuses/104521184568713589 + +However, the moral of this story (aside from turning on those settings in Firefox), is: when something is broken be a good netizen[4] and let the siteowners know; things can't be fixed if they don't know about it. I submitted the following report to Cisco letting them know of the problem: + +=> https://www.merriam-webster.com/dictionary/netizen 4: https://www.merriam-webster.com/dictionary/netizen + +```html +<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 + tools.cisco.com. 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> +``` + +If you come across something like this in the future, I hope you too will be a good netizen and do the right thing! + +*This is my seventy-second post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/book-review-the-mediocre-programmer.gmi b/gemini/pages/blog/book-review-the-mediocre-programmer.gmi @@ -0,0 +1,31 @@ +## Book Review: The Mediocre Programmer + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-29 | + <b>Last Updated:</b> 2020-05-29 +</div> +``` + +*The Mediocre Programmer* by Craig Maloney was released this past week and can be found at themediocreprogrammer.com[1]. It's about the journey of becoming a better programmer passing through being a mediocre programmer and dealing with all that is associated with growing as a developer. Unlike other self-help books or books that teach one how to be better at their profession, this book is non-prescriptive and takes the reader on a journey through the many aspects of and feelings associated with being a mediocre programmer from an author with a well-established programming career. + +=> http://themediocreprogrammer.com/ 1: http://themediocreprogrammer.com/ + +The book is available in HTML, as a PDF, or in EPUB format. I opted to print the PDF version since I prefer reading physical copies of long texts; it's 114 pages so it printed nicely out onto 15 pieces of paper (double sided, 4 pages per side). I managed to finish the whole book in a single evening. I enjoyed the personal nature of the book and the fact that it wasn't written in an, "I am a super successful person, just do what I do to become like me," way. + +The book begins with a short introduction about what a mediocre programmer is and what Maloney's motivation was for writing it. It goes on to discuss various aspects of being a professional programmer such as how we learn, motivation to learn and complete projects, how our success is measured, and the kinds of feelings that professional programmers can have which can lead to burnout or mental illness. A particularly important section is about asking for help in our careers. Many times we will feel like asking for help is admitting defeat or admitting to ourselves that we are somehow inferior, but Maloney discusses how this isn't really the case and that seeking out help is one of the most important things a programmer can do in times of difficulty. + +I am familiar with many of the things discussed throughout the book, but I still found value in reading about the experiences of a programmer who has been in the business a lot longer than I have. There is also a section dedicated to using a strategy akin to Pomodoro timers as a way to ease oneself into starting to work on projects, which I could relate to from my own experiences procrastinating when I look at a large project and what must be done (I'm sure many of my fellow university students can relate). + +In my opinion, this book is an invaluable read for younger developers and new programmers. Those are the kinds of people who will benefit most from the wisdom the book has to offer, although there is still value in following along with Maloney's journey even if you are an experienced programmer. + +Also, Maloney was kind enough to release his book under the CC-BY-SA 4.0 International License so, if you enjoyed reading the book, consider donating to him[2]. + +=> https://liberapay.com/craigmaloney 2: https://liberapay.com/craigmaloney + +*This is my thirty-third post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/btw-i-use-arch.gmi b/gemini/pages/blog/btw-i-use-arch.gmi @@ -0,0 +1,35 @@ +## BTW, I Use Arch + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-29 | + <b>Last Updated:</b> 2020-08-29 +</div> +``` + +Okay, the title isn't exactly 100% accurate; I'm actually using Artix Linux[1], an Arch Linux derivative which offers a choice regarding init systems (between OpenRC, runit, or r6). + +=> https://artixlinux.org/ 1: https://artixlinux.org/ + +I originally wanted to try Alpine Linux[2] to get away from systemd and move towards a smaller, simpler operating system. Artix was suggested to me as an alternative operating system which also featured the OpenRC init system and I decided to give it a shot after trying out Alpine but finding its software availability to be a bit lacking. I think Artix provides a good compromise between lean-ness and software availability with full access to the Arch Linux package repositories as well as the AUR. If you're wondering why I chose Artix instead of a Debian-based OS such as Devuan, it's because I have a few friends also using Artix and they successfully peer-pressured me into using it. + +=> https://www.alpinelinux.org 2: https://www.alpinelinux.org + +To be honest, once the operating system is installed and my desktop environment is set up, there isn't that much of a difference between Artix and Debian Sid from the perspective of how the system feels to use. This is just about par for the course for most Linux distributions though because major differences usually lie under the hood in the form of different package management tools or OS utilities. I didn't even have to tweak much to get my desktop environment working the same as it does on Debian. + +Regarding what lies under the hood, I chose the OpenRC init system over the other choices Artix offers mostly because it was the other init system I was familiar with from my time with Gentoo[3]. OpenRC with its parallel startup setting turned on feels just as fast as systemd, though I didn't bother to take any empirical measurements. I also chose to install the `opendoas` package so that I could use `doas` instead of `sudo` because it uses slightly less RAM, is slightly faster to type, its configuration is way simpler, oh... and the codebase appears to be ~2.5% the size of sudo's (from running `sloccount` on their git repositories). Also of note is that, after a fresh boot, my Artix install uses ~200MiB of RAM less than my Debian install. + +=> https://www.paritybit.ca/blog/my-beginnings-with-gentoo 3: https://www.paritybit.ca/blog/my-beginnings-with-gentoo + +Pacman, while it has probably the worst syntax out of the contemporary package managers, didn't give me any trouble after a brief review of the manual page, a quick rundown from a friend, and the package manager Rosetta[4]. I think I'm going to have to make a bunch of aliases for commonly-used operations though. Interestingly, it also feels like the fastest package manager I've tried; I can say with confidence that it feels noticeably faster than zypper, dnf, apt, and emerge. For accessing the AUR, I installed yay which I now use for regular packages too since it just wraps pacman and uses the same syntax. + +=> https://wiki.archlinux.org/index.php/Pacman/Rosetta 4: https://wiki.archlinux.org/index.php/Pacman/Rosetta + +The only issue I've come across running Artix instead of Debian is noticeably worse battery life on my laptop. It's probably just that I have to play around with some tlp settings or dig into some acpi-related things to fix this though. Other than that, it's been excellent to use as an operating system and I'm strongly considering switching all of my workstation machines over to it while deploying new servers with Alpine Linux or OpenBSD. + +*This is my ninety-seventh post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 5: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/caring-about-seo.gmi b/gemini/pages/blog/caring-about-seo.gmi @@ -0,0 +1,48 @@ +## Caring About SEO + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-01 | + <b>Last Updated:</b> 2020-05-01 +</div> +``` + +A few days ago, Kev Quirk wrote a blog post[1] in response to Desmond Rivet[2] about how he follows basic SEO hygiene even though it's not something at the top of his mind when writing. + +=> https://kevq.uk/writing-with-seo-in-mind/ 1: https://kevq.uk/writing-with-seo-in-mind/ +=> https://desmondrivet.com/2020/04/28/writing-reasons 2: https://desmondrivet.com/2020/04/28/writing-reasons + +For those unfamiliar with the abominable world of SEO, it stands for "Search Engine Optimization" 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're doing a good job or not. + +Now, don't get me wrong, I'm not saying that if one focuses on or optimizes for SEO that they'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't focus on it. It'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. + +Now, all that being said, my site scores quite well in SEO tests! + +```html +<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="https://www.webpagetest.org">WebPageTest.org</a> + </figcaption> +</figure> +``` + +I don't actually focus on SEO at all. It's just a coincidence that my site happens to do quite well and I'm honestly not sure why. Perhaps it'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. + +It's not that I don't care if people read my content; in a previous post[3] 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've written if I think it will be useful to them. I don't make any money off of this site and I'm not writing for fame or to be recognized so I don't feel it worth it to put in so much effort to appease an ever-changing, black-box algorithm; I'm fine with the more "organic" traffic my site receives. + +=> https://www.paritybit.ca/blog/why-i-blog 3: https://www.paritybit.ca/blog/why-i-blog + +Today on Mastodon, someone posted a link to an article entitled *41 SEO quick wins you can do within an hour[4]* which I may read to learn a bit more about what affects a site's SEO score. After all, it's not bad to make sure one's site is following generally good practises so long as one makes sure they're not falling down that rabbit hole of tailoring their content for SEO. + +=> https://resignal.com/blog/seo-quick-wins/ 4: https://resignal.com/blog/seo-quick-wins/ + +*This is my seventh post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/cat-v-considered-harmful.gmi b/gemini/pages/blog/cat-v-considered-harmful.gmi @@ -0,0 +1,36 @@ +## Cat -v Considered Harmful + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-08 | + <b>Last Updated:</b> 2020-05-08 +</div> +``` + +I spent a long while today going through many of the articles on cat-v.org[1]. Particularly, I spent a lot of time going through each entry under *All software sucks[2]*. On that page is a table listing software considered harmful alongside non-harmful alternatives. + +=> http://harmful.cat-v.org/ 1: http://harmful.cat-v.org/ +=> http://harmful.cat-v.org/software/ 2: http://harmful.cat-v.org/software/ + +After having a cursory look through the table, I went on to read each page discussing why each bit of harmful software is considered harmful and, for the most part, there are valid criticisms and explanations given. In most of the mentioned software categories, in fact, it's easy to see why these programs would be considered harmful. For example, as much as GCC is a really popular compiler, there is a ton of complexity behind its code. It is not at all a simple piece of software. Though, frankly, I'm not experienced enough to know how much complexity in a compiler is too much nor would I know what could be changed in GCC to make it more simple. + +Despite most of the examples given making intuitive sense or being backed up with some quotes by experienced programmers (Rob Pike, Theo de Raadt, and the like), many of the "things considered harmful" seem to be entirely opinion-based. Take the license section as an example: "GPL, LGPL, Apache Software License, MPL, CC", is considered harmful where "ISC, MIT/X, BSD, CC0, public domain" is not. This is clearly just the authors' opinion and preference for permissive licenses which tend to be smaller and easier to read and understand simply because they hardly impose any conditions. Yes, those larger licenses are relatively harder for a layperson to understand, but hardly impossible assuming one takes the time to read them. Not to mention the benefits that copyleft licenses provide for preserving end-user freedom. + +Furthermore, for some of the pages specific to a piece of software, the only discussion provided is a humorous chat log such as for the GRUB page[3] or a simple "Q&A" such as for GNU Auto*hell[4]. For someone such as myself, unfamiliar with the particular complexities underlying some of this software, these pages aren't exactly helpful and don't do much to show how the software is harmful. They do explicitly say: + +=> http://harmful.cat-v.org/software/GNU/GRUB/ 3: http://harmful.cat-v.org/software/GNU/GRUB/ +=> http://harmful.cat-v.org/software/GNU/auto-hell 4: http://harmful.cat-v.org/software/GNU/auto-hell + +> **Note**: At the moment a detailed rationale is not provided for +most of this, so figuring out why some things are considered more or less harmful than others is left as an exercise for the reader. Here is a hint: complexity is the bane of all software, simplicity is the most important quality, + +though, so I wasn't expecting everything to be plainly spelled out for me with highly cogent arguments. + +On the whole, I agree with a lot of what is laid out in the explanations. In general: complexity bad; simple good. It's the viewpoint that I had going in and the examples definitely strengthened that opinion (I still don't particularly like Go though). + +*This is my fourteenth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/china.gmi b/gemini/pages/blog/china.gmi @@ -0,0 +1,68 @@ +## China + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2019-11-23 | + <b>Last Updated:</b> 2019-11-23 +</div> +``` + +I have just finished reading Drew DeVault's most recent blog post[1] in which he writes about China. + +=> https://drewdevault.com/2019/11/20/China.html 1: https://drewdevault.com/2019/11/20/China.html + +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. + +I strongly recommend that anyone who is reading this should read the blog post linked above in its entirety. Every word is important. + +I have already been boycotting Chinese products and the companies that have given in to China'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). + +I know it'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. + +The excuse, "Boycotting/Writing to my representative/speaking up is useless, I am just one person.", 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't being slaughtered like dogs. Don't be the kind of person who stands by and watches as this happens. + +If you're wondering, "What else can I do?", here are some links: + +Band in China[2] – A list of what can be done to support Hong Kong. + +=> https://caffeine-overload.github.io/bandinchina/ 2: https://caffeine-overload.github.io/bandinchina/ + +Company Blacklist[3] – A list of companies you should boycott for spinelessly complying with the demands of China. + +=> https://caffeine-overload.github.io/bandinchina/#blacklist 3: https://caffeine-overload.github.io/bandinchina/#blacklist + +Company Whitelist[4] – A list of companies that have stood up to China. These are companies/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. + +=> https://caffeine-overload.github.io/bandinchina/#whitelist 4: https://caffeine-overload.github.io/bandinchina/#whitelist + +If you have already written to your representative, boycotted companies, and spread the word about China'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. Here is an article by the BBC[5]. + +=> https://www.bbc.com/news/world-50123743 5: https://www.bbc.com/news/world-50123743 + +To close out this post, I want to share one of my favourite quotes/poems: + +```html +<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> +``` +\ No newline at end of file diff --git a/gemini/pages/blog/choosing-a-self-hosted-git-service.gmi b/gemini/pages/blog/choosing-a-self-hosted-git-service.gmi @@ -0,0 +1,191 @@ +## Choosing a Self-Hosted Git Service + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-26 | + <b>Last Updated:</b> 2020-09-21 +</div> +``` + +***2020-05-27 Update**: Add Gitolite.* + +***2020-05-29 Update**: Add cgit.* + +***2020-09-21 Update**: Add Pagure.* + +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'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'll also explain what I chose for myself and why. + +### GitLab + +* Link to Gitlab[1] +* **Programmed in**: Ruby, Go +* **Supports**: Git + +GitLab is one of the most popular git hosting services next to GitHub. They operate with an open-core[2] business model which means that core features of GitLab are open source, but many other features are proprietary software. + +=> https://about.gitlab.com/ 1: https://about.gitlab.com/ +=> https://en.wikipedia.org/wiki/Open-core_model 2: https://en.wikipedia.org/wiki/Open-core_model + +GitLab's UI is somewhat similar to GitHub's and it uses the same Pull Request model for contributing to others' software projects where you "fork" a project and then submit a pull request using the web UI. + +I will get straight to the point with this though. Don't use GitLab. It's a bloated mess of a software forge that, yes, has a lot of features, but also has a lot of problems. For example, GitLab has memory leaks[3] 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'm running Gitea on a PineA64 SBC and the entire system'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. + +=> https://news.ycombinator.com/item?id=17379523 3: https://news.ycombinator.com/item?id=17379523 + +### Gogs + +* Link to Gogs[4] +* **Programmed in**: Go +* **Supports**: Git + +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'll very quickly get used to the interface of Gogs as it's nearly identical. It also uses the pull-request method of development and maintains a fairly clean-looking UI. + +=> https://gogs.io/ 4: https://gogs.io/ + +Just like GitHub and GitLab, it'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/CD, Wikis, and issue tracking. + +It's easy to host since it'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. + +### Gitea + +* Link to Gitea[5] +* **Programmed in**: Go +* **Supports**: Git + +Gitea is a fork of Gogs[6] 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's also a better choice than Gogs if you're someone who would like the ability to send patches upstream. + +=> https://gitea.io/en-us/ 5: https://gitea.io/en-us/ +=> https://blog.gitea.io/2016/12/welcome-to-gitea/ 6: https://blog.gitea.io/2016/12/welcome-to-gitea/ + +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 Gitea comparison page[7]. + +=> https://docs.gitea.io/en-us/comparison/ 7: https://docs.gitea.io/en-us/comparison/ + +### SourceHut + +* Link to SourceHut[8] +* **Programmed in**: Go, Python +* **Supports**: Git, Mercurial + +SourceHut is a project created by Drew DeVault[9] and released in public alpha on 2018-11-15[10] through the hosted instance sr.ht[11]. Since then, it has been steadily growing its user base and feature set. It now includes comprehensive CI/CD and Project Hubs. + +=> https://sourcehut.org/ 8: https://sourcehut.org/ +=> https://drewdevault.com/ 9: https://drewdevault.com/ +=> https://drewdevault.com/2018/11/15/sr.ht-general-availability.html 10: https://drewdevault.com/2018/11/15/sr.ht-general-availability.html +=> https://sr.ht/ 11: https://sr.ht/ + +SourceHut is unique in that it'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's just a different development paradigm and doesn't take much effort to learn. See git-send-email.io[12] for a brief introduction. + +=> https://git-send-email.io/ 12: https://git-send-email.io/ + +It'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 lists.sr.ht 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. + +### Phabricator + +* Link to Phabricator[13] +* **Programmed In**: PHP +* **Supports**: Git, Mercurial, Subversion + +I don'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. + +=> https://secure.phabricator.com/ 13: https://secure.phabricator.com/ + +Phabricator is a software forge built by Phacility[14]. 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. + +=> https://phacility.com/ 14: https://phacility.com/ + +Similar to SourceHut, this service may be more than you need if you're looking for a simple way to show off your Git repositories. It is fully-featured and competently developed though so, if you're looking for an alternative to GitLab for a group or team of people, Phabricator is worth checking out. + +### Pagure + +* Link to Pagure[15] +* **Programmed In**: Python +* **Supports**: Git + +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 Pagure home page[16]: + +=> https://pagure.io/ 15: https://pagure.io/ +=> https://pagure.io/pagure 16: https://pagure.io/pagure + +> 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. +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. + +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. + +### Gitolite + +* Link to Gitolite[17] +* **Programmed In**: Perl +* **Supports**: Git + +Gitolite is different from any other Git service in this post; it isn't a full software forge and doesn'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> + +=> https://gitolite.com/gitolite/ 17: https://gitolite.com/gitolite/ + +Notable current or past users of Gitolite include the Fedora Project, the KDE project, Gentoo Linux, and kernel.org. + +This may be what you want if all you'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 Gitolite overview[18]. + +=> https://gitolite.com/gitolite/overview.html 18: https://gitolite.com/gitolite/overview.html + +### Gitweb + +* Link to Gitweb Documentation[19] +* **Programmed In**: Perl +* **Supports**: Git + +Gitweb is the default web interface for Git repositories. It'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'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. + +=> https://git-scm.com/docs/gitweb 19: https://git-scm.com/docs/gitweb + +### cgit + +* Link to cgit[20] +* **Programmed In**: C +* **Supports**: Git + +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'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. + +=> https://git.zx2c4.com/cgit/about/ 20: https://git.zx2c4.com/cgit/about/ + +### My Choices + +```html +<p class="note">I have since changed what I use to cgit. I outline why in a more +recent blog post: [Switching to +cgit](https://www.paritybit.ca/blog/switching-to-cgit)</p> +``` + +When looking for a self-hosted git service, I was looking for a service that fulfilled the following criteria: + +* **Philosophy**: Simple software, open development +* **User Interface**: Snappy, clean +* **Resource Usage**: Low, should run on an SBC +* **Back-end Language**: Anything but JavaScript (because of npm) +* **Ease of Administration**: The easier, the better + +At git.paritybit.ca[21], I currently host a Gitea instance. Although I would have loved to host my own SourceHut instance, I feel it'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/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, gitea-updater[22], created by a friend of mine to easily update it too. + +=> https://git.paritybit.ca 21: https://git.paritybit.ca +=> https://gitea.superposition.ca/Dan/gitea-updater 22: https://gitea.superposition.ca/Dan/gitea-updater + +As far as hosted services, I use SourceHut's sr.ht instance because it'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. + +There are also quite a few more, albeit less popular, free and open source software forges available, many listed in this comparison by Apache Allura[23]. Additionally, check out forgeperf.org[24] for a comparison of the performance of some of the biggest hosted software forges. + +=> https://forge-allura.apache.org/p/allura/wiki/Feature%20Comparison/ 23: https://forge-allura.apache.org/p/allura/wiki/Feature%20Comparison/ +=> https://forgeperf.org/ 24: https://forgeperf.org/ + +Let me know[25] if I've failed to mention anything important here or if I've missed a software forge you'd like to see mentioned. + +=> gemini://paritybit.ca/contact 25: /contact + +*This is my thirtieth post for the #100DaysToOffload[26] challenge. You can learn more about this challenge over at https://100daystooffload.com[27][28].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 26: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 27: https://100daystooffload.com +=> https://100daystooffload.com 28: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/choosing-an-investment-brokerage.gmi b/gemini/pages/blog/choosing-an-investment-brokerage.gmi @@ -0,0 +1,40 @@ +## Choosing An Investment Brokerage + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-12 | + <b>Last Updated:</b> 2020-08-12 +</div> +``` + +Now that my time at university is coming to an end, I'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. + +```html +<figure> + <a href="/img/brokerage-comparison.png"><img src="/img/brokerage-comparison-thumb.png"/></a> + <figcaption>Working on the Spreadsheet using NextCloud</figcaption> +</figure> +``` + +Download the spreadsheet here[1] (if you notice any incorrect or missing information, please contact me). + +=> https://ftp.paritybit.ca/brokerage-comparison.ods 1: https://ftp.paritybit.ca/brokerage-comparison.ods + +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 (Charlee Wayne's YouTube channel[2] 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. + +=> https://www.youtube.com/user/FlipC 2: https://www.youtube.com/user/FlipC + +We then set out to evaluate each one from the perspective of student/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. + +For a few of the categories, information might be missing (indicated by a '?') because we couldn't readily find the information on the websites of the respective brokerages and we couldn't open a practice account so that we could evaluate their platforms without creating a real account. Most of this information isn't all that important though, so I'm not too bothered. + +After doing all this research, I still haven'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. + +If you'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'd love to hear about other people's experiences! + +*This is my ninety-second post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100DaysToOffload 3: https://pleroma.paritybit.ca/tag/100DaysToOffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/clone-wars-finale.gmi b/gemini/pages/blog/clone-wars-finale.gmi @@ -0,0 +1,21 @@ +## Star Wars: The Clone Wars Finale + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-04 | + <b>Last Updated:</b> 2020-05-04 +</div> +``` + +Today the final episode for *Star Wars: The Clone Wars* was released. I had begun watching it years ago before it was prematurely cancelled and then moved off of Netflix and completely forgot about its existence until a family member subscribed to Disney+ and gave me access to the account (I don't pay for any streaming service myself). + +I have to say, the final story arc of *The Clone Wars* is some of the best Star Wars content Disney have ever made, and ranks among the original trilogy for quality. The writing, pacing, characters, and animation are all fantastic and draw you into the story a way that the sequel trilogy just wasn't able to do. I don't want to give any spoilers in case you are interested in watching *The Clone Wars* but I will say that they tie the end of the series into *Revenge of the Sith* (Episode 3) in a way that makes the animated series feel like it fits right in with the movies; it's very well done. The final episode marks the end of an era, both in the Star Wars universe and in the franchise and, in my opinion, it couldn't have been done better. + +I'm looking forward to seeing what Dave Filoni and Jon Favreau produce for the Star Wars universe next; they have been doing a phenomenal job. + +*This is my tenth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/colours-for-gitea-issues.gmi b/gemini/pages/blog/colours-for-gitea-issues.gmi @@ -0,0 +1,69 @@ +## Colours for Gitea Issues + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-11 | + <b>Last Updated:</b> 2020-07-11 +</div> +``` + +I don'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. + +```html +<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> +``` + +Here is the above table in the Gitea labels template format (the content below goes into a file in `custom/options/label/`: + +``` +#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't be fixed +``` + +*This is my sixty-sixth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/curating-my-blogroll.gmi b/gemini/pages/blog/curating-my-blogroll.gmi @@ -0,0 +1,35 @@ +## Curating My Blogroll + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-07 | + <b>Last Updated:</b> 2020-06-07 +</div> +``` + +***Update**: Add bit about special <link> element.* + +I follow over 100 blogs which is far too many to have to manually visit every time I want to see if there was new content. I'm not sure why I didn't do this sooner, but today I went through the entire list and added as many blogs as I could into my feed reader of choice (Newsboat) and took the opportunity to trim some blogs which have shut down or which I no longer follow. + +The most challenging part of this was finding the feeds on some people's websites. For those sites which had feeds, usually there was a button or link which was easy to find on the homepage, at the bottom of the page, or via some "about" link. However, I found that many people have feeds for their sites but don't advertise them so I had to go searching for them manually. Basically, if I couldn't find a link to a feed on the pages themselves, I searched for `index.xml`, `feed`, `feed.xml`, `feed.rss`, `rss`, or `rss.xml` either in the website's root directory, or the subdirectory containing the blog posts. + +If I couldn't find an RSS feed for a particular site, I added that site to the "No RSS Feed Found" section[1] of my blogroll. I will send an email to the owners of each of those sites asking them if they will consider adding an RSS feed to their site. If their answer is yes, I'll update my blogroll; if not, I'll remove them from my blogroll because I don't really have the time to manually visit a bunch of sites to check if there are new posts. + +=> gemini://paritybit.ca/links#no-rss-feed-found 1: /links#no-rss-feed-found + +I've also created and uploaded an OPML[2] file which contains all of my subscriptions from Newsboat. This allows you to download this file, import it into your feed reader, and have all of the blogs and news sources I follow in your feed list. A link to this file can be found on my blogroll[3], and at www.paritybit.ca/blogroll.opml[4]. + +=> https://en.wikipedia.org/wiki/OPML 2: https://en.wikipedia.org/wiki/OPML +=> gemini://paritybit.ca/links#blogroll 3: /links#blogroll +=> https://www.paritybit.ca/blogroll.opml 4: https://www.paritybit.ca/blogroll.opml + +A couple of final things I did was link `/feed.xml`, `/feed`, `/feed.rss`, and `/index.xml` to my site's feed as these links seemed to be the *de facto* standard for where feeds can be easily found (I'm not sure if it's an actual standard). I also added an HTML `<link>` element in the `<head>` as per this MDN article[5]. + +=> https://developer.mozilla.org/en-US/docs/Archive/RSS/Getting_Started/Syndicating 5: https://developer.mozilla.org/en-US/docs/Archive/RSS/Getting_Started/Syndicating + +*This is my thirty-eighth post for the #100DaysToOffload[6] challenge. You can learn more about this challenge over at https://100daystooffload.com[7][8].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 6: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 7: https://100daystooffload.com +=> https://100daystooffload.com 8: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/debian-with-btrfs.gmi b/gemini/pages/blog/debian-with-btrfs.gmi @@ -0,0 +1,130 @@ +## Installing Debian 10 Buster with Encrypted LVM and btrfs Subvolumes + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-14 | + <b>Last Updated:</b> 2020-07-14 +</div> +``` + +### Introduction + +Debian currently supports formatting partitions with btrfs, but doesn'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're familiar with this procedure, you will find that it is actually a lot easier than it seemed at first! + +This procedure has been adapted from this video found on YouTube: <a href="https://www.youtube.com/watch?v=wtMj8KPRlws">Debian 9 | Installation mit Btrfs Subvolumes (Debian Wochen)</a> by YouTube user "unicks.eu". This video is in German but you don'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. + +### Procedure + +After downloading a Debian installation image and putting it on a CD/DVD/USB, boot it and choose `Advanced options > Expert install` (or `Graphical expert install` if you want). + +Run through the installation as normal until you reach the section on partitioning: + +```html +<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> +``` + +On this screen, if you want an encrypted root file system then you probably want to choose the option `Guided - use entire disk and set up encrypted LVM`. 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 `Manual` and create the partitions necessary for your configuration. + +Once you have run through the setup of the partitions you should now see a screen similar to the one below: + +```html +<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> +``` + +Select your root file system (the one with the `/` as the mount point), change the `Use as:` field to `btrfs journaling file system` and select `Done setting up the partition`. After this, select `Finish partitioning and write changes to disk`, following the prompts until you arrive back in the installation menu. This will apply the chosen partitioning scheme. + +After this and before continuing with the installation, type `Ctrl`+`Alt`+`F2` to be put into a shell. Press `Enter` to activate this shell and follow the following procedure to set up subvolumes: + +```html +<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> +``` + +Use the `df` command to view what the current mounted partitions are. In my case there is `/dev/mapper/debianbtrfs--vg-root` mounted to `/target` and `/dev/vda1` mounted to `/target/boot`. `/target` 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. + +```html +<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> +``` + +The first step is to unmount both `/target/boot` and then `/target` using the `umount` command. + +Then, mount the btrfs root volume (i.e. the volume that used to be mounted to `/target` hereby referred to as `BTRFS_VOLUME`) to `/mnt` and then `cd /mnt`. + +Create the desired subvolumes with `btrfs subvolume create SUBVOLUME_NAME`. I have created `@`, `@home`, and `@snapshots`. + +Following this, mount the root subvolume to `/target` like so: `mount -o noatime,compress=lzo,space_cache,subvol=@ BTRFS_VOLUME /target`. + +```html +<p class="note">There are quite a few compression algorithms available for use +with btrfs now; learn more on [the btrfs +wiki](https://btrfs.wiki.kernel.org/index.php/Compression). I personally use +zstd.</p> +``` + +Now we want to `mkdir -p /target/etc` and copy `/mnt/etc/fstab` (and `/mnt/etc/crypttab` if you are using encrypted LVM volumes) into `/target/etc`. Once this is done we can `rm -r /mnt/boot /mnt/etc /mnt/media` otherwise these directories will remain in the final installation (which isn't a big deal but this is done just for the sake of cleanliness). When this is done, unmount `/mnt`. + +The next step is to make the necessary subdirectories in `/target` for your subvolumes. I did: `mkdir -p /target/home /target/.snapshots`. 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 `/dev/vda1` to `/target/boot/efi` (or just `/target/boot` for a legacy BIOS system). The following screenshots show the exact commands that I ran: + +```html +<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> +``` + +```html +<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> +``` + +Now, edit `/target/etc/fstab` (you must use `nano` as unfortunately there is no version of `vi` 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 `default` 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: + +``` +/dev/mapper/debianbtrfs--vg-root / btrfs defaults 0 0 +``` + +to: + +``` +/dev/mapper/debianbtrfs--vg-root / btrfs noatime,compress=lzo,space_cache,subvol=@ 0 0 +``` + +Where the other lines will look similar: + +```html +<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> +``` + +Once this is all done and you have saved your changes, you may exit out of this terminal (`Ctrl`+`D`) and return to the installation (`Ctrl`+`Alt`+`F1`). Proceed with the installation as normal and, when you boot, you should have a btrfs filesystem working with subvolumes! + +If you get stuck somewhere, try asking in the many helpful areas of the Internet such as the <a href="http://forums.debian.net/">Debian User Forums</a>, the `#debian` IRC channel on the Freenode network, or the `debian-user` mailing list. See this resource for <a href="https://www.debian.org/support">more information on getting help with Debian.</a> + +*This is my seventy-first post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/decommissioning-my-rackmount-server.gmi b/gemini/pages/blog/decommissioning-my-rackmount-server.gmi @@ -0,0 +1,33 @@ +## Decommissioning My Rackmount Server + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-11 | + <b>Last Updated:</b> 2020-04-11 + </div> +``` + +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's better for the environment. Power-efficient things also typically need less cooling which leads to lower noise output from those machines. + +My Dell R415 rackmount server was basically the antithesis of all of those values. It was hot, loud, and sucked down 200W when *idle*. All for a meagre 8 threads and 16GB of RAM. + +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'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 *no simultaneous multithreading*. + +One morning, I decided to run some benchmarks on my server versus one of my spare laptops which couldn't function as a laptop anymore due to missing the screen. I used the program `stress` to run some CPU, RAM, and I/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/O-wise. + +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. + +I decided I was fed up with the noise and heat from the R415 and decided to switch over that same afternoon. + +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. + +Once I finished moving around hardware (I am using a Lack Rack[1]), I powered everything back on again and noticed that this new configuration was only drawing 65W on average and that's for my *entire* homelab. Where my entire homelab used to draw about 240W, it now draws 27% of what it used to and it's almost completely silent while doing it. + +=> https://wiki.eth0.nl/index.php/LackRack 1: https://wiki.eth0.nl/index.php/LackRack + +The laptop sits at around 15% CPU and 45% RAM utilization with all of my virtualized services running and I haven't experienced any slowness in using them. Although I don't have redundant hard drives with this laptop, I do still back up all of my VMs and configurations which means I'd have probably only a few hours downtime if the hard drive fails. It's something I can live with in exchange for what the laptop offers. + +You can get more detailed information about the specs of my lab machines over on the page about what I use[2]. Suffice to say, I'm now very happy with what I have. + +=> https://www.paritybit.ca/uses#ServerEquipment 2: https://www.paritybit.ca/uses#ServerEquipment +\ No newline at end of file diff --git a/gemini/pages/blog/difficulty-of-privacy-education.gmi b/gemini/pages/blog/difficulty-of-privacy-education.gmi @@ -0,0 +1,43 @@ +## The Difficulty of Educating People About Online Privacy + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2019-12-20 | + <b>Last Updated:</b> 2019-12-20 +</div> +``` + +<em>Update: I just finished listening to the latest Jupiter Extras podcast entitled Brunch with Brent: Jason Spisak Part 2[1] in which they touch on this topic a bit. It's definitely worth a listen.</em> + +=> https://www.jupiterbroadcasting.com/137997/brunch-with-brent-jason-spisak-part-2-jupiter-extras-41/ 1: https://www.jupiterbroadcasting.com/137997/brunch-with-brent-jason-spisak-part-2-jupiter-extras-41/ + +I've recently been reflecting on the difficulty that I'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. + +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): + +### Stubbornness + +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. + +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's remorse if you are telling them that this big purchase may have been a bad choice. + +Usually, if you persist enough in subtle ways, you can erode someone's stubbornness by exposing them to things like news articles and practical examples of data breaches and privacy violations but you obviously don't want to be a gnat in their ear constantly pestering them about this. + +### Ignorance + +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't know what a hash is nor would they be familiar with the many ways that attackers can steal their personal information. + +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. + +This makes it really difficult because the points that you are making sound really obvious to you but to others it sounds like you'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. + +### Apathy + +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't not care anymore. Even that isn't guaranteed as some people, no matter how much they get hurt by something, will just carry on. + +There really isn'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. + +I'd be interested to know what, if any, strategies you have for discussing online privacy with others. Let me know by sending me an email[2]. + +=> mailto:feedback@paritybit.ca 2: mailto:feedback@paritybit.ca +\ No newline at end of file diff --git a/gemini/pages/blog/diving-deeper-into-the-small-internet.gmi b/gemini/pages/blog/diving-deeper-into-the-small-internet.gmi @@ -0,0 +1,42 @@ +## Diving Deeper Into the Small Internet + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-13 | + <b>Last Updated:</b> 2020-05-13 +</div> +``` + +Yesterday I posted about making my website available over the <a href="https://en.wikipedia.org/wiki/Gopher_(protocol)">Gopher protocol</a>. After I posted that, I was alerted to another up-and-coming protocol[1] called Gemini[2] which promises to be somewhere in between the complexity of Gopher and the Web while leaning more towards the Gopher side. + +=> https://social.paritybit.ca/web/statuses/104159150816402125 1: https://social.paritybit.ca/web/statuses/104159150816402125 +=> https://proxy.vulpes.one/gemini/gemini.circumlunar.space/ 2: https://proxy.vulpes.one/gemini/gemini.circumlunar.space/ + +In the morning, I awoke to some new activity in the Fediverse and on HackerNews about a Gemini browser called Castor[3] through which I learned about the finger protocol[4]. 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. + +=> https://news.ycombinator.com/item?id=23161922 3: https://news.ycombinator.com/item?id=23161922 +=> https://en.wikipedia.org/wiki/Finger_protocol 4: https://en.wikipedia.org/wiki/Finger_protocol + +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't support inline links and is transmitted over plain text. If Gemini's popularity keeps growing, I can see it becoming the de-facto standard for the small internet's alternative to the web where Gopher would exist for compatibility with older devices and browsers. + +To host a Gemini server, I found the GeGoBi[5] 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't have to maintain two versions of the files for now. + +=> https://tildegit.org/solderpunk/gegobi 5: https://tildegit.org/solderpunk/gegobi + +I am thinking that, once I'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've never written something like this though, so I imagine it's going to take me a while to figure out. I've also thought about contributing this functionality to pandoc[6] but I'll wait until I'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. + +=> https://pandoc.org/ 6: https://pandoc.org/ + +Regarding the finger protocol, I'm not sure if I'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 Now page[7] and a Contact page[8] for the small internet but I'm not sure if I'll be able to get it working with my setup. + +=> gemini://paritybit.ca/now 7: /now +=> gemini://paritybit.ca/contact 8: /contact + +All of these technologies are very exciting. The text-only interfaces of things like Gemini/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. + +*This is my nineteenth post for the #100DaysToOffload[9] challenge. You can learn more about this challenge over at https://100daystooffload.com[10][11].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 9: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 10: https://100daystooffload.com +=> https://100daystooffload.com 11: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/dnd-xp-system.gmi b/gemini/pages/blog/dnd-xp-system.gmi @@ -0,0 +1,71 @@ +## My Custom XP System for DnD + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-02 | + <b>Last Updated:</b> 2020-06-02 +</div> +``` + +*This is a different sort of post than I usually make, but here you go.* + +Playing Dungeons and Dragons with friends this past evening has made me realize that there doesn't really exist an XP system with which I'm fully satisfied. Either the system is too complicated, doesn't award XP for the things I want, or awards XP too slowly. So, I came up with my own basic system: + +### Overview + +A player must reach 100 XP to level up to the next level. Upon levelling up, the player's XP counter is reset to 0 and XP that went above 100 rolls over (e.g. if a player receives XP such that they are now at 102 XP, they level up and now have 2 XP). There is no increase in the amount of XP needed to level up; it is always 100 XP per level. + +* XP is gained through: * Killing enemies * Passing ability checks + +Assuming ample opportunity is given for the players to participate in combat or make ability checks, players should level up after two or three, 4-6 hour sessions. + +### Killing Enemies + +XP is awarded per enemy killed. If an enemy escapes, the DM can either choose to award a fraction of the XP depending on how much damage that creature sustained or no XP. + +* 2 XP if the enemy's CR is less than half the party's level +* 5 XP if the enemy's CR is half the party's level or higher +* 15 XP if the enemy's CR is equal to the party's level or higher + +After combat, the total amount of XP earned is distributed to each member of the party who was a part of the combat. Each player who participated in the combat receives the same amount of XP. + +#### Example + +There is a party of four players. Two of the players are level 10 and two are level 9 for an average level of 9.5. The players are in combat with two CR 3 goblins and one CR 5 troll (a medium difficulty encounter). The party kills the troll and one goblin, but the other goblin manages to escape with only a couple HP remaining. + +The DM awards 5 XP for killing the troll, 2 XP for killing one of the goblins, and 1 XP for injuring the goblin which escaped. Each member of the party receives 8 XP. + +### Passing Ability Checks + +Awarding XP for passing ability checks allows the party to gain XP for various non-combat actions such as successfully stealing something without being seen, passing a sneak check, avoiding a dangerous trap, or skillfully impressing an important character. + +* 1 XP for passing an easy (10 DC) check +* 2 XP for passing a medium (15 DC) check +* 3 XP for passing a hard (20 DC) check +* 4 XP for passing a very hard (25 DC) check +* 5 XP for passing a nearly impossible (30 DC) check + +It's up to the DM to decide when it is appropriate to award XP for passing an ability check so players do not attempt to "farm XP" by attempting trivial or nonsensical ability checks and so skill-heavy characters do not outpace the other party members. If an action is unimportant to the plot or the character's development (i.e. it's just a random thing the player decided to do for no reason), then XP should not be awarded. Ideally, XP should only be awarded for "pivotal" checks where there would be serious consequences to a failed check or the success of a check is integral to the plot. + +If the ability check is made at disadvantage and is passed, the XP awarded should be doubled. If players employ Working Together, all players who participate should be rewarded half the XP amount, rounded up. + +#### Examples + +The party has been tasked with tracking a spy through the streets of a densely packed city. A player wishes to attempt scaling a slippery wall to get a better vantage point. This is a hard task and it can only be accomplished alone. If the player succeeds, they can be awarded 3 XP. + +The party needs to subdue an irate man who has stolen a shield belonging to an NPC member of the party. This man is fairly strong so this is a hard task. They send in the two members of the party with the highest strength to handle the man. Working together, the two players successfully force the man to the ground and recover the shield, earning themselves 2 XP each. + +The party's thief was captured by the town guard and has been separated from the rest of the party. As the rest of the party earn combat experience by attempting to fight their way through the prison to free their comrade, the thief tries to get creative. They attempt to pickpocket the jail door keys off of a passing guard; a very hard thing to do. Should they succeed, they have the opportunity to earn 4 XP and keep pace with the XP that the rest of the party is earning. + +### Conclusion + +From the above examples, you can see that the aim is to incentivize players to work together and to incentivize them to attempt tasks that may otherwise seem hard. It rewards creative play where players can feel that their characters are becoming more skilled the more they use their character's abilities and ensures that players level up in a timely fashion by awarding a fair amount of XP for combat situations. This scheme also lets players who don't participate as much in combat to catch up to other party members by performing non-combat tasks. + +Give it a shot and let me know what you think. I'll be tweaking this scheme based on how it works out in campaigns I play and what other people say. + +*This is my thirty-fifth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/ethical-investing.gmi b/gemini/pages/blog/ethical-investing.gmi @@ -0,0 +1,33 @@ +## Ethical Investing + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-13 | + <b>Last Updated:</b> 2020-08-13 +</div> +``` + +The next step after choosing an investment brokerage[1] 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'll split my investment portfolio among things like ETFs, Stocks, GICs, and so on. However, aside from all of that, there's a big aspect to investing which I want to address today: ethics. + +=> https://www.paritybit.ca/blog/choosing-an-investment-brokerage 1: https://www.paritybit.ca/blog/choosing-an-investment-brokerage + +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. + +Of course, when you're trading stocks on the stock market, you won't actually be giving an unethical company your money directly (unless you're buying stocks from an IPO or something). You are, however, contributing to an increase in the company's value and participating in the buying and selling of parts of an unethical company. If you're holding on to these stocks, you own a part of an unethical company. + +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 wanton destruction of the environment[2]. Companies such as Tesla (NASDAQ:TSLA) or Equifax Inc. (NYSE:EFX) can be really profitable, but are also ultimately unethical companies (for different reasons). + +=> https://en.wikipedia.org/wiki/Enbridge#Spills_and_violations 2: https://en.wikipedia.org/wiki/Enbridge#Spills_and_violations + +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 are one of the largest renewable energy companies in Canada[3]. + +=> https://en.wikipedia.org/wiki/Innergex_Renewable_Energy#Corporate_history 3: https://en.wikipedia.org/wiki/Innergex_Renewable_Energy#Corporate_history + +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's incredibly important to consider ethics when deciding who to give my money to, just like I do when choosing what software I use. + +*This is my ninety-third post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 4: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/generating-my-geek-code.gmi b/gemini/pages/blog/generating-my-geek-code.gmi @@ -0,0 +1,38 @@ +## Generating My Geek Code + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-04 | + <b>Last Updated:</b> 2020-07-04 +</div> +``` + +I've seen something called the Geek Code around the Internet on some people's profiles. After reading a recent blog post by Marc Grondin[1], I figured it would be fun to create my own Geek Code and advertise it on my about page[2]. + +=> https://blog.marcg.pizza/marcg/new-keyboard-and-geekcode-100daystooffload-day-17 1: https://blog.marcg.pizza/marcg/new-keyboard-and-geekcode-100daystooffload-day-17 +=> gemini://paritybit.ca/about 2: /about + +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's straightforward to set up since you just have to go through the Geek Code document[3] 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't get too hung up on choosing *exactly* the right value. + +=> https://geekcode.xyz/geek.html 3: https://geekcode.xyz/geek.html + +My Geek Code (as of the time of writing) came out to: + +``` +-----BEGIN GEEK CODE BLOCK----- +Version: 3.1 +GCS/TW/O d-(+) s:- a-- C++(+++) UL+++/++++ P+>+++ L+++>++++ E--- W--(++) N+ o? +K- w--- O? M-- V? PS++ PE-- Y++ PGP+ t++@ 5? X? R !tv b+ DI+@ D G e>++ h+ r y? +------END GEEK CODE BLOCK------ +``` + +Which can be decoded here[4]. + +=> http://www.joereiss.net/geek/ungeek.html 4: http://www.joereiss.net/geek/ungeek.html + +*This is my sixtieth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/gentoo-isnt-for-me.gmi b/gemini/pages/blog/gentoo-isnt-for-me.gmi @@ -0,0 +1,32 @@ +## Gentoo Isn't for Me + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-08 | + <b>Last Updated:</b> 2020-08-08 +</div> +``` + +After using Gentoo on and off since I tried it out[1] a few months ago, I think I've come to the conclusion that it's just not for me. While I really like the idea, I just don't think that the paradigm is particularly good for me to use as a daily driver. + +=> https://www.paritybit.ca/blog/my-beginnings-with-gentoo 1: https://www.paritybit.ca/blog/my-beginnings-with-gentoo + +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/12T Ryzen 5 1600 CPU but, on my T420s with its 2C/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 `-j` flag in my `make.conf`. + +Now, there are ways to speed this up; I could use distcc[2] to compile things for my laptop on my desktop machine or I could also set up ccache[3] 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. + +=> https://en.wikipedia.org/wiki/Distcc 2: https://en.wikipedia.org/wiki/Distcc +=> https://en.wikipedia.org/wiki/Ccache 3: https://en.wikipedia.org/wiki/Ccache + +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'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. + +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't think it would suit me as a daily driver because of the fact that nearly *everything* has to be compiled from source. + +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's emerge (though I couldn't quickly find anything that could confirm if this is still the case). + +*This is my eighty-seventh post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/going-from-user-to-contributor-with-foss.gmi b/gemini/pages/blog/going-from-user-to-contributor-with-foss.gmi @@ -0,0 +1,25 @@ +## Going From User to Contributor With FOSS + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-25 | + <b>Last Updated:</b> 2020-05-25 +</div> +``` + +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. + +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. + +I'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, "I *need* to find a piece of software to solve this problem," or, "oh well, nothing I can do against these big companies", my first thought is usually, "how can I solve this problem myself." Now, instead of giving up when web searches yield no useful results, I'll turn to the source code, official documentation, or specifications (most of which are generally freely available) for answers. + +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'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. + +You might even say that FOSS has empowered me, as it has many others. + +*This is my twenty-ninth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/gomux-is-the-best-cli-matrix-client.gmi b/gemini/pages/blog/gomux-is-the-best-cli-matrix-client.gmi @@ -0,0 +1,35 @@ +## Gomuks is the Best CLI Matrix Client + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-09-24 | + <b>Last Updated:</b> 2020-09-24 +</div> +``` + +I've been using Element (formerly Riot.im) on both desktop and mobile as my Matrix messaging client since I started using Matrix but there's not doubt that it's quite slow, bloated, and resource-hungry since it is written using Electron. For that reason, I'm always on the lookout for better, faster, slimmer clients. I previously tried weechat-matrix[1] but found it to be too clunky and unpolished for me to continue using it over Element but this new client, gomuks[2], seems like it's what I've been looking for. + +=> https://www.paritybit.ca/blog/setting-up-weechat-again 1: https://www.paritybit.ca/blog/setting-up-weechat-again +=> https://maunium.net/go/gomuks/ 2: https://maunium.net/go/gomuks/ + +According to the matrix.org page for this client[3], its maturity level is Beta (on the scale of Alpha, Beta, Released) which matches my experience with it so far; implements the major features that a matrix client should have for me to deem it functional. As of writing this post, its latest release[4] is version 0.2.0 from a couple of weeks ago so it is still in active development. + +=> https://matrix.org/docs/projects/client/gomuks 3: https://matrix.org/docs/projects/client/gomuks +=> https://github.com/tulir/gomuks/releases/ 4: https://github.com/tulir/gomuks/releases/ + +Right now, the client supports all of features a Matrix client should have including encrypted chats, easy interaction with files, room management, message redaction, replying, and editing, setting different nicknames for different rooms, and desktop notifications. One of the biggest advantages this client has over weechat-matrix is it's intuitive, easy-to-use file support. + +Interacting with files is incredibly easy with gomuks. You type `/upload <filepath>` to upload a file to a chatroom, `/download <filepath>` to download a file from a chatroom (you can select the file to download with the arrow keys), and `/open` to open a file using `xdg-open` (which is very useful for looking at images without needing to download them). Furthermore, there is an option to render images in text right in the chat which can give you an idea of what the image is before opening it. + +Matrix-specific customizations are available through the `/toggle` command when you are connected to a Matrix server and these seem pretty comprehensive. The client itself, however, is missing several important customization options. There is currently a lack of customization for both theming/colours and keybindings which isn't that big of a deal for me, but is something I would like to see for the full-release of the client. + +The last issue I've noticed with the client at the moment is that text editing is also a little bit odd. For example, the keybinding `Alt+Enter` was chosen instead of `Shift+Enter` for entering in a newline, the `Delete`, `Home` and `End` keys do not work to move around the text entry field, and `Shift+Backspace` deletes the previous word instead of the more common `Ctrl+Backspace`. These problems could all be fixed when keybinding customizations are added though and I've gotten used to the way it works so it doesn't bother me much. + +Overall, the client is in a really good position right now. It's usable, has nearly all the features expected of a matrix client, and is much faster, smoother, and less resource hungry than Element. Once these issues around customization and the awkward keybindings get fixed, this client looks like it might be the perfect matrix client. + +*This is my ninety-ninth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 5: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/housecleaning.gmi b/gemini/pages/blog/housecleaning.gmi @@ -0,0 +1,25 @@ +## Doing Some House Cleaning + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-07 | + <b>Last Updated:</b> 2020-04-07 +</div> +``` + +The suite of sites under the paritybit.ca domain has been steadily growing as I've been hosting and playing around with new things. I now have a wiki[1], a Mastodon instance[2], a Matrix server[3], a git server[4] and even a simple HTTP-based (for now) file-sharing server[5]. + +=> https://wiki.paritybit.ca 1: https://wiki.paritybit.ca +=> https://social.paritybit.ca 2: https://social.paritybit.ca +=> https://matrix.paritybit.ca 3: https://matrix.paritybit.ca +=> https://git.paritybit.ca 4: https://git.paritybit.ca +=> https://ftp.paritybit.ca 5: https://ftp.paritybit.ca + +In an attempt to unify things a little bit and to clean some stuff up, I've decided to move all of the guides that were once hosted here on this website over to the wiki. + +I've also gone ahead and removed every one of the RSS feeds except the main feed[6]. I no longer need to maintain separate feeds for blogs, guides, and projects because guides are handled by the wiki and I don't update the projects feed that much. You should clean up those feeds from your newsreader if you are subscribed as they will now return `404`s. + +=> https://www.paritybit.ca/feeds/sitewide-feed.xml 6: https://www.paritybit.ca/feeds/sitewide-feed.xml + +Coming soon will be some additions to the home page of this site to showcase the other services (similar to what is on the front page of the wiki). I'll also be looking into auto-posting links to Mastodon for when I release a new blog post as that can be easily integrated into my publishing script (that script has also been simplified a lot now that I don't need to handle different feeds). +\ No newline at end of file diff --git a/gemini/pages/blog/how-far-translation-tools-have-come.gmi b/gemini/pages/blog/how-far-translation-tools-have-come.gmi @@ -0,0 +1,36 @@ +## How Far Translation Tools Have Come + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-28 | + <b>Last Updated:</b> 2020-04-28 +</div> +``` + +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 blogroll[1], although most blogs are in English, there are a handful that I follow which aren't. + +=> https://www.paritybit.ca/links#Blogroll 1: https://www.paritybit.ca/links#Blogroll + +I have about an A2-B1 level[2] 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 blog post by jolek78[3] written entirely in Italian. Take a look at how well Google Translate was able to handle this text: + +=> https://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages#Common_reference_levels 2: https://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages#Common_reference_levels +=> https://jolek78.writeas.com/100daystooffload-giorno-3 3: https://jolek78.writeas.com/100daystooffload-giorno-3 + +```html +<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> +``` + +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 "preservative" into the French word "préservatif", which actually means "condom". + +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've certainly come a long way over the years. + +*This is my fourth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-i-keep-my-home-directory-clean.gmi b/gemini/pages/blog/how-i-keep-my-home-directory-clean.gmi @@ -0,0 +1,52 @@ +## How I Keep My Home Directory Clean + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-28 | + <b>Last Updated:</b> 2020-06-29 +</div> +``` + +***Update**: The name of the tool mentioned later in the post is rehome[1]. Also added a screenshot showing the current state of my home directory.* + +=> https://github.com/lpar/rehome 1: https://github.com/lpar/rehome + +I am one of those people who likes to keep files organized and directories clean. Unfortunately, it seems many software developers don't care about this and like to dump their program's configuration and state information into my home directory, rather than putting it in the proper XDG specified directories. I've gone through quite a bit of effort, mainly using the Arch Wiki's page on the XDG Base Directory specification[2], to clean up my home directory from a lot of the cruft programs like to leave lying around. + +=> https://wiki.archlinux.org/index.php/XDG_Base_Directory 2: https://wiki.archlinux.org/index.php/XDG_Base_Directory + +```html +<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> +``` + +Most programs, if they don't already recognize the `XDG_CONFIG_HOME` environment variable, have their own environment variables that they look at to find the location of configuration data. Some examples from my `.profile` are: + +```bash +export XAUTHORITY="$XDG_CONFIG_HOME/X11/Xauthority" +export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc" +``` + +Which get rid of the `.xinitrc` and `.Xauthority` files which would normally sit in the home directory. + +Some programs, however, don't have environment variables but can still be told where to find configuration information using a command line switch. For example, in my `.bashrc` I have the aliases: + +```bash +alias tmux='tmux -f "$XDG_CONFIG_HOME"/tmux/tmux.conf' +alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"' +``` + +Which tell `tmux` to find its configuration in a directory in the `XDG_CONFIG_HOME` directory, and `wget` to store its history in the `XDG_CACHE_HOME` directory. + +Unfortunately, even with changes in `.profile` and aliases in `.bashrc`, 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. + +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'm alright with a few programs here and there in my home directory as long as it doesn't get needlessly cluttered. If you're developing a brand new application there's no excuse; please respect the XDG base directory specification! + +*This is my fifty-seventh post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-i-manage-my-dotfiles.gmi b/gemini/pages/blog/how-i-manage-my-dotfiles.gmi @@ -0,0 +1,69 @@ +## How I Manage My Dotfiles + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-13 | + <b>Last Updated:</b> 2020-09-09 +</div> +``` + +I'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've started fresh with a new repository for my dotfiles[1] and retired my old repository[2]. + +=> https://git.sr.ht/~jbauer/dotfiles 1: https://git.sr.ht/~jbauer/dotfiles +=> https://git.sr.ht/~jbauer/dotfiles-legacy 2: https://git.sr.ht/~jbauer/dotfiles-legacy + +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 managing dotfiles with a bare repository[3] and switched to doing it that way. + +=> https://www.atlassian.com/git/tutorials/dotfiles 3: https://www.atlassian.com/git/tutorials/dotfiles + +This is what's required to set it up: + +```bash +git init --bare $HOME/docs/proj/dotfiles +alias config='git --git-dir=$HOME/docs/proj/dotfiles --work-tree=$HOME' +config config --local status.showUntrackedFiles no +``` + +And this is what needs to be done on a new machine to deploy my dotfiles: + +```bash + git clone --bare https://git.paritybit.ca/~jbauer/dotfiles $HOME/docs/proj/dotfiles + rm ~/.bashrc ~/.profile + alias config='git --git-dir=$HOME/docs/proj/dotfiles --work-tree=$HOME' + config checkout + config config --local status.showUntrackedFiles no + config update-index --skip-worktree LICENSE README.md .gitignore + rm LICENSE README.md .gitignore +``` + +I opted for this method over using another application like chezmoi[4] or GNU Stow[5] because I didn't want *Yet Another Bit of Software* to manage what could be done by just using git. I also didn't want to make my entire home folder a git repository because I've heard that it can cause problems when you have nested repositories that aren't part of the same project, of which I have many. + +=> https://github.com/twpayne/chezmoi 4: https://github.com/twpayne/chezmoi +=> https://www.gnu.org/software/stow/ 5: https://www.gnu.org/software/stow/ + +You'll notice a `.gitignore`, `README.md`, and `LICENSE` file in that repository. Normally, that would mean I'd have to have those files in my home directory but, by using the `--skip-worktree` feature, I can write, add, commit, and then delete those files without git caring. For example, I would write the `README.md` file, then do: + +```bash +$ config add README.md +$ config commit -m "Add README" +$ rm README.md +$ config update-index --skip-worktree README.md +``` + +If I need to update any of those files, I can do something like: + +```bash +$ config update-index --no-skip-worktree README.md +$ config checkout -- README.md +``` + +then edit, add, commit, delete, and re-ignore that file. + +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't happen that often anyways. + +*This is my forty-fourth post for the #100DaysToOffload[6] challenge. You can learn more about this challenge over at https://100daystooffload.com[7][8].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 6: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 7: https://100daystooffload.com +=> https://100daystooffload.com 8: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-much-ram-is-enough.gmi b/gemini/pages/blog/how-much-ram-is-enough.gmi @@ -0,0 +1,27 @@ +## I Ran Out of RAM... Again + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-26 | + <b>Last Updated:</b> 2020-04-26 +</div> +``` + +I ran out of RAM yesterday. That is, I filled up all 16GB that I have installed in my computer and it became completely unresponsive to the point where I had to press the reset button. Technically, it's completely my fault that it happened. + +I was running a very RAM-hungry program (a certain well-known game called Minecraft) and I disabled the out-of-memory program killer that I use, earlyoom, so that it wouldn't kill my game as I was playing it. The game uses about 10-12GB on its own due to being heavily modded which left little headroom before earlyoom noticed and killed it for using too much memory. Although I'm able to play the game while having programs like Riot and Firefox open at the same time, my RAM utilization sits at a precarious 95%, as it was for most of last night. + +As I was playing though, this thought slowly faded into the back of my mind. Then, I had the bright idea to watch a video in the background to distract me while I was performing a few mindless in-game chores. I clicked on a link, the tab opened, and everything locked up. I glanced at my status bar and saw the RAM utilization indicator bar completely full; the number next to it read 99%. + +When I was installing my operating system and since I only have a 250GB drive, I opted to forgo a swap partition thinking that I had enough RAM to spare and that I'd much rather have the extra gigabytes available for storage. While doing my regular tasks like browsing the internet, using IRC, email, news reader, and chat clients, and listening to music, my RAM usage rarely climbs above 30%. Usually, it's just games or really intensive compilations which use a lot of RAM but it rarely goes higher than about 70%. On the other hand, however, there are some games which love to eat RAM. Notably, heavily modded versions of Minecraft, Rimworld, and Cities Skylines. + +Since I don't have swap, when I run out of RAM my computer locks up because it's unable to swap the memory currently used by inactive programs out to disk which means the active programs can't get the memory they need to continue working. The OOM killer built into the Linux kernel is also very slow to act and struggles to bring the system back into a usable state to the point where it's much easier to perform a hard reset than to wait the tens of minutes required hoping that my system will recover. Running a program like earlyoom or having a swap file or a swap partition does prevent this from happening except that running earlyoom wouldn't allow me to play Minecraft for very long before it gets killed, I can't have a swap file since I'm running btrfs on the 4.19 kernel (I run Debian stable and support for swap files did not come until kernel 5.0), and I didn't configure my system with a swap partition when installing and it's a royal pain in the butt to add one now with my encrypted LVM partition scheme. + +This series of events, which I have experienced at least half a dozen times now, tempts me to get another 16GB of RAM just so I never have to worry about it happening again. Is it worth it? Well… no, not really. For the work that I do, it's kind of overkill to spend another $100-$120 on RAM which will go unused for about 98% of the time I'm using my computer. Next time, I'll just configure my system with swap and hopefully the available OOM killer implementations will be a little more refined so that this rarely happens, if ever, again. + +*This is my second post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-1.gmi b/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-1.gmi @@ -0,0 +1,64 @@ +## How to Create an RSS Feed for Your Blog — 1 — Why? + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-18 | + <b>Last Updated:</b> 2020-06-18 +</div> +``` + +If you have a blog or run a website that posts content regularly, then you should be syndicating your posts through an RSS feed. If you're not using a platform such as Wordpress or Write.as which create them for you, then you'll probably have to find a tool to do it or do it yourself. For this blog, I create all of the RSS feed entries myself (though I have written a script that does it for me when I publish a new blog post). This is the first post in a series of posts which will cover the hows and whys of creating your own RSS feed. + +### Background + +Version 1.0 of RSS was released in December, 2000 and quickly grew in popularity in tandem with the rest of the Internet. In 2002, RSS 2.0 was released and has been the version in use for nearly two decades now. Atom feeds were created as a competitor to RSS which supposedly has several advantages, but RSS 2.0 has remained the dominant format on the Web thanks to its hand in making podcasts possible. You can read more about Atom feeds[1] or RSS feeds[2] on Wikipedia. + +=> https://en.wikipedia.org/wiki/Atom_(Web_standard) 1: https://en.wikipedia.org/wiki/Atom_(Web_standard) +=> https://en.wikipedia.org/wiki/RSS 2: https://en.wikipedia.org/wiki/RSS + +In recent times, many people have forgotten about RSS feeds as the Web has moved away from a collection of individual sites onto conglomerate platforms such as Facebook and Twitter. RSS feeds are great though; they're an easy way to improve your website and one of the cornerstone technologies of the independent Internet. Here are several really important reasons why you should have an RSS feed for your site: + +1. Accessibility +2. Ease of Use +3. Privacy and Security +4. Efficiency +5. Increasing Readership + +### Accessibility + +The number one reason why you should have an RSS feed for your website is because of accessibility. One of the advantages to using an RSS feed reader to read the posted content on a website is that users can use whichever feed reader program they wish and configure it however they wish. Although your website should already be following the WCAG (Web Content Accessibility Guidelines), providing an RSS feed would allow, for example, someone who uses a screen reader to cut away all of the rest of the stuff on a website and focus on the content or someone with poor eyesight to use a client with super high contrast—even higher than what you may already have on your site. + +### Ease of Use + +For some, an RSS feed reader is easier to use and fits better into their workflow than a Web browser. Nowadays, Web browsers are slow, bloated, privacy-invading platforms which can be difficult to run for those with older hardware (third-world countries are a thing). RSS feeds are just a single file which is much easier for those on weaker hardware to work with. + +For someone like me, who tends to spend most of his time on the command line or in text-based interfaces, a Web browser breaks from the keyboard-driven environment that I love and, on top of that, checking every site manually is tedious. Using a command-line RSS feed reader allows me to read articles and updates from people without disturbing my workflow. I can also set up my reader to display content just the way I like it (for me that's a large font with a screen width of 72 characters). + +### Privacy and Security + +Unlike having someone sign up for your mailing list, using an RSS feed allows someone to periodically download the feed and read it in their feed reader without the bother of any other Web-related technologies like HTML, Javascript or cookies. This means that the user doesn't have to worry about being tracked by whatever invasive analytics platform you might be running on your site and you can avoid having to put the work in to make sure that you are securely storing and handling users' contact information because there's no contact information to store. + +It's a win-win for both you and the user. Also, stop spying on your users. + +### Efficiency + +Viewing a website is expensive. Not necessarily in terms of money, but in terms of its environmental impact. Every byte that is sent over the Internet contributes to global warming[3]. If a user can check for and read new posts on your website by downloading a simple, easily cacheable file, you can not only reduce the environmental impact your site has on the planet, but also potentially reduce monetary costs if you pay for the amount of bandwidth your site uses. + +=> https://dannyvankooten.com/website-carbon-emissions/ 3: https://dannyvankooten.com/website-carbon-emissions/ + +### Increasing Readership + +You might be surprised to hear this, but there are millions of people still using RSS every day. Nowadays it's mostly through apps like Feedly, but the underlying technology hasn't changed. All of the above reasons to have an RSS feed culminate in your site being more convenient for your readers to read. The more convenience and options you provide, the more people you will attract to your platform. If the only option you have is an email newsletter, you might be driving away hundreds or thousands of people who don't want to sign up for yet another newsletter or are privacy-conscious. Not to mention, nobody wants to have to check every single site they like manually every day for updates. + +### Conclusion + +I hope that's convinced you that you should have an RSS feed for your site. As you'll see in the upcoming posts, it's not even that difficult to do. + +In the next post, I'll go over the basic structure that your feed should have as well as some of the content posting decisions you will have to make. In the post following that, I'll talk about automating updates to your feeds whenever you publish a new blog post. + +*This is my forty-eighth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-2.gmi b/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-2.gmi @@ -0,0 +1,101 @@ +## How to Create an RSS Feed for Your Blog — 2 — The Basics + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-19 | + <b>Last Updated:</b> 2020-06-19 +</div> +``` + +This is the second part in a series about creating an RSS feed for your website. Click here to read the first part[1] about why you should have an RSS feed if you don't already have one. In this part, I'll be describing the basics of creating an RSS feed for your site, what should it include, how to let people know about it, and how you might want to syndicate content through it. + +=> https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-1 1: https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-1 + +### Beginning + +RSS is written in XML. Therefore, it's a file composed of several tags with special meaning. The basic structure of an RSS file looks as follows: + +```xml +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + <channel> + <atom:link href="https://example.com/feed.xml" + rel="self" type="application/rss+xml" /> + <title></title> + <link></link> + <description></description> + [ ... ITEMS GO HERE ... ] + </channel> +</rss> +``` + +The first line is a bit of boilerplate which identifies this file as using version 1 of XML and defines the text encoding that the file uses. + +The next line is a bit of boilerplate which identifies the version of RSS we are using and "imports" the Atom namespace which allows us to use Atom tags in our RSS feed. + +The `<channel>` tag is a required bit of boilerplate and there can be only one per RSS 2.0 file. It encapsulates items and the feed metadata. + +According to rssboard.org[2], having an `atom:link` element, as seen on the next line, is highly recommended because it makes the feed more portable, self-contained, and easier to cache. The URL specified by the `href` attribute should point to the location of your feed on the Internet. + +=> https://rssboard.org/rss-profile#namespace-elements-aton 2: https://rssboard.org/rss-profile#namespace-elements-aton + +Inside the `<channel>` tag, there must be at least a `<title>` tag containing the title of your feed (e.g. "example.com's Blog"), a `<link>` tag containing a link to the site that the feed is for (e.g. `https://www.example.com`), and a `<description>` tag with a description of the feed (e.g. "The RSS feed for example.com"). + +After the final required channel element, `<item>` tags can be used to define individual entries in the RSS feed. + +### The Basic Format of a Post + +Posts are fairly simple to format. They are defined in `<item>` tags which generally look like this: + +```xml +<item> + <title></title> + <link></link> + <pubDate></pubDate> + <description></description> +</item> +``` + +Most of the tags are straightforward. `<title>` refers to the title of the post and is what will show up when someone is looking through a list of all items in the feed, `<link>` is a link to the post on the Internet, `<pubDate>` contains the date and time which the post was published and should look something like `Thu, 18 Jun 2020 20:01:46 -0400`, and `<description>` contains either the full content of the post, or just a description (if you choose to use Atom syntax, there are separate `<summary>` and `<content>` tags). + +All of those tags are technically optional in the `<item>` tag. In fact, an `<item>` tag is technically allowed to contain no elements at all so you're free to pick and choose which bits of information you wish to include. A complete list of tags and their uses is linked in the Conclusion section of this post. + +Regarding the `<description>` tag, much of the accessibility and ease-of-use benefits of an RSS feed are realized when the `<description>` contains the full text of the post. This allows someone to read your posts in their feed reader which means they don't have to open a Web browser just to get the full version. It is highly recommended (by me, and many other folks on the internet) to include the full text of your posts in the `<description>` tag. + +In order to include HTML text in the `<description>` tag, you must either convert HTML markup to HTML entities (e.g. `&lt;`, `&gt;`), or enclose the content of the description in a CDATA section which will look like this: + +```xml +<description><![CDATA[<h2>My very interesting post</h2><p>This post contains <a +href="https://www.example.com">a link</a>.]]></description> +``` + +I personally use the CDATA method, as it allows me to easily copy and paste the HTML of my posts into the `<description>` tags. + +### How to Link to Your Feed + +You may have seen the ubiquitous RSS Icon <img src="/img/feed-icon.png" width="15" height="15" alt="An image of the RSS Icon"/> around the Web. Its use is so pervasive that it's become like the floppy disk icon but for RSS feeds. Make sure that you prominently feature either this icon (or something like it) where people go to read your blogs, or provide a prominent link to where users can find your feed. For example, I have the icon on both my home page[3] and my blog page[4]. + +=> gemini://paritybit.ca/ 3: / +=> gemini://paritybit.ca/blog 4: /blog + +Another standard that you should incorporate into your site is the use of a `<link>` element in the `<head>` of your HTML files. It's a standard way to tell the user's Web browser that an RSS feed is available for this site and where to find it. The element should look something like this: + +```html +<link rel="alternate" type="application/rss+xml" title="RSS feed" + href="https://www.example.com/feed.xml"> +``` + +### Conclusion + +As you can see, RSS really isn't that complicated. You can get up and running with a feed for your site in less than a half-hour. It's not even that hard to write it by hand, though that will get tedious over time. In the next post, I'll talk about how I automate updates to my RSS feed and show you that it's also really simple to automate updating the feed. + +To learn more about available tags and what is and is not encouraged in RSS feeds, see the RSS Best Practices Profile[5]. + +=> https://www.rssboard.org/rss-profile 5: https://www.rssboard.org/rss-profile + +*This is my forty-ninth post for the #100DaysToOffload[6] challenge. You can learn more about this challenge over at https://100daystooffload.com[7][8].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 6: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 7: https://100daystooffload.com +=> https://100daystooffload.com 8: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-3.gmi b/gemini/pages/blog/how-to-create-an-rss-feed-for-your-blog-3.gmi @@ -0,0 +1,82 @@ +## How to Create an RSS Feed for Your Blog — 3 — Automating Updates + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-20 | + <b>Last Updated:</b> 2020-06-20 +</div> +``` + +This is the third part in a series about creating an RSS feed for your website. Click here to read the first part[1] about why you should have an RSS feed if you don't already have one and click here to read the second part[2] about writing a basic feed. In this part, I'll be talking a bit about automating updates to your feed and showing you how I do it. + +=> https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-1 1: https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-1 +=> https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-2 2: https://www.paritybit.ca/blog/how-to-create-an-rss-feed-for-your-blog-2 + +### The General Approach + +Once you know what sort of elements you want your feed items to have (e.g. `<author>`, `<link>`, etc), you can fairly easily script updates to your feed. Unfortunately, I can't describe exactly how you should do this since it would differ depending on what operating system you're using and what tools you have available. If you can leverage something like a static site generator to generate your feeds for you, then this article is probably not going to be of much help to you. + +To keep my feed up to date and to generate `<item>`s, I have a POSIX shell script that I use to publish my posts. You can view the publish script[3] in its entirety online, but I've extracted just the bit which updates my feed and pasted it below: + +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish 3: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish + +```bash +create_rss_entry() +{ + print_info_msg "Creating RSS entry" + + # Opening tag + rssEntry="${rssEntry}<item>" + + # Set <title> + rssEntry="${rssEntry} + <title>$pageTitle</title>" + + # Set <link> and <guid> + rssEntry="${rssEntry} + <link>$baseURL/$fileName</link>" + rssEntry="${rssEntry} + <guid>$baseURL/$fileName</guid>" + + # Set pubDate + rssEntry="${rssEntry} + <pubDate>$date</pubDate>" + + # Fill out content + pageContent=$(cat build/blog/"$fileName"-content.html) + rssEntry="${rssEntry} + <description><![CDATA[$pageContent]]></description>" + + # Close the entry + rssEntry="${rssEntry} + </item>" +} + +update_rss_feed() +{ + print_info_msg "Updating RSS feed" + mv "$mainFeed" "$mainFeed.bak" + head -n 8 "$mainFeed.bak" > "$mainFeed" + echo "$rssEntry" >> "$mainFeed" + tail -n +9 "$mainFeed.bak" >> "$mainFeed" +} +``` + +It's actually fairly easy to generate feed entries through a simple script such as this one, and the concepts used above could be easily translated into other scripting languages like Perl or Python if you're more comfortable using those languages. + +I have the benefit that the static site generator I use[4] outputs the HTML of just the post—no HTML `<head>` or `<body>` tags included—as an intermediate step in the process of compiling a page from Markdown to HTML. This allows me to easily include the text of the post in the `<description>` tags, but it would be fairly easy to extract just the HTML inside the `<main>` tag of your HTML page, should you not have a site generator which does something like this. + +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/compile 4: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/compile + +### Conclusion + +This concludes my simple, 3-part guide on creating an RSS feed for your own website or blog. It's not very difficult to do and it provides numerous benefits for your readers. If the process described in this mini-series seems like too much work or too complicated, there is numerous feed generation software available online. All that matters is that you create a feed for your site. + +In the future, I'll be looking more into Atom feeds and a series about them may be coming soon. + +*This is my fiftieth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/how-to-not-make-an-ass-of-yourself-internet-discussions.gmi b/gemini/pages/blog/how-to-not-make-an-ass-of-yourself-internet-discussions.gmi @@ -0,0 +1,44 @@ +## How to Not Make an Ass of Yourself in Online Discussions + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-08 | + <b>Last Updated:</b> 2020-08-08 +</div> +``` + +Here are three rules to not making an ass of yourself when having online or in-person discussions. + +### Have Sources + +If you're going to make a claim, any claim, be prepared to back it up with sources. If you're going to state a fact, you should not only be prepared to share your sources if asked, but you should probably just go ahead and put the sources right next to the claim you're making. + +No, "just look it up, you'll see," or "it's common sense," are not valid sources. In particular, don't rely on someone "just getting it." You might be surprised at how rarely someone "just gets" what you have to say if you're not willing to back it up with sources or at least logical reasoning. + +If you're going to make a claim: Provide :clap: Your :clap: Sources :clap: + +### Be Respectful + +Look, people are going to disagree with you. It's normal for someone not to instantly agree with everything you have to say, but if you're the kind of person who becomes hostile and tells someone to "go kill themselves" or something just because they don't agree with you, you're part of the problem. + +It's understandable to be frustrated when people can't see what you mean or don't want to listen to you, but you do yourself and your ideas a disservice when you become hostile. If you feel like lashing out, or someone is being disrespectful to you, walk away from the discussion. Not only is it not worth it, but people are going to eventually stop listening to you. + +### Be Aware of Logical Fallacies + +Check out this list of Formal Fallacies[1] and Informal Fallacies[2] if you really want to start having better, more well-reasoned discussions. + +=> https://en.wikipedia.org/wiki/Formal_fallacy 1: https://en.wikipedia.org/wiki/Formal_fallacy +=> https://en.wikipedia.org/wiki/Fallacy#Informal_fallacy 2: https://en.wikipedia.org/wiki/Fallacy#Informal_fallacy + +Be aware of fallacies both you and your opposition are making. Not only to be able to call out fallacies when they use them, but also to avoid making stupid arguments by using them yourself. + +### Conclusion + +So there you go, three simple rules to not making an ass of yourself when having discussions on the Internet (or in real life). If you do break one of these rules, don't be afraid to apologize. It's much better to own up to a mistake, learn, and grow from it than to be one of those people so stuck up you get lost in bad arguments and poor reasoning just to be right. + +*This is my eighty-eighth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/i-got-more-ram.gmi b/gemini/pages/blog/i-got-more-ram.gmi @@ -0,0 +1,35 @@ +## I Got More RAM! + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-30 | + <b>Last Updated:</b> 2020-04-30 +</div> +``` + +A few days ago, I posted about how I would sometimes run out of RAM while playing heavily modded video games[1] like Minecraft and how this would cause my computer to completely lock up, requiring a full restart. + +=> https://www.paritybit.ca/blog/how-much-ram-is-enough 1: https://www.paritybit.ca/blog/how-much-ram-is-enough + +Well, some time ago I built and upgraded a couple of computers for a friend and they gave me their old set of 2x4GB *G.Skill Ripjaws 4* DIMMs since they didn't need them anymore and as thanks for helping them. I already have 2x8GB 3200MHz *G.Skill Ripjaws V* DIMMs in my computer which I got to run with my *Ryzen 5 1600* at 2933MHz; first generation Ryzen is quite finicky when it comes to getting some memory to run at higher clock speeds and the XMP profile didn't work. Usually, you either need to choose RAM that your motherboard vendor has tested and confirmed to work at certain speeds, or you need to spend some time tinkering to get the best possible results. + +When I first got this RAM, I tried putting it in my computer but was only able to get it to run stably at a really low speed, something like one step above 2133MHz. I wasn't willing to make that sacrifice for what I thought at the time was an unnecessary increase in RAM. However, with me constantly running up against my computers limits, I decided to give it another go. + +I first tried keeping my settings the same and plugging in the two new modules into the two available slots on my motherboard. As expected, this failed to boot. Then, I tried a configuration where the two smaller capacity DIMMs were in the primary memory slots (A2 and B2) and were the only memory modules in the system. This, surprisingly, worked without any problems; the modules were running at 2933MHz and I had a total of 8GB of RAM. + +Then, I reset my memory settings and I put the 16GB modules in the remaining slots (A1 and B1). The computer booted fine, with 24GB of RAM running at a stock speed of 2133MHz. Slowly, I increased the speed and upped the voltage until my motherboard threw a tantrum, beeped loudly at me, and reset my settings. I landed on 2866MHz at 1.25V but there was an instance where the motherboard failed to boot, but tried again and succeeded which made me up the voltage to 1.35V hoping that it was just a voltage problem. + +So, as I am writing this, I have 24GB of RAM running at 2866MHz at 1.35V. Slots A2 and B2 are the *Ripjaws 4* 4GB DIMMs and slots A1 and B1 are the *Ripjaws V* 8GB DIMMs. I ran a few stress tests using `stress` and did a memory benchmark and things looked okay. Except that Firefox tabs keep crashing… and now the `apt` module in polybar is reporting "a corrupt package file or wrong hash". Hmm… + +Okay, I'm back! I dropped the speed down to 2800MHz at 1.35V and things seem to be running stable now. I tried dropping the voltage as well to reduce power consumption and heat generation but anything below 1.35V was not stable either. + +Despite running the RAM 133MHz slower, there is not a noticeable difference in the responsiveness of my computer or the performance of my games. Then again, even if there's something like a 5FPS drop in games, it's worth it for the peace of mind of not running into OOM situations. I'll see in the coming days if the current speed is causing instabilities and if I'll have to drop it down even further (the next lowest mark is 2733MHz) but, for now, I'm just enjoying my extra 8GB of RAM. + +(If you're wondering, I arrived at a maximum voltage of 1.35V because that's the voltage the XMP profile set and I didn't want to risk going higher than that.) + +*This is my sixth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/i-like-perl.gmi b/gemini/pages/blog/i-like-perl.gmi @@ -0,0 +1,37 @@ +## I Like Perl + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-27 | + <b>Last Updated:</b> 2020-05-27 +</div> +``` + +There. I said it. + +I don't have years of experience writing Perl, but what I've seen and done so far makes me like it a lot when I compare it to other languages such as Python. The Perl documentation[1] is really good, there are a ton of useful tutorials online since it has been around for so long, I like its package management (mostly the fact that nearly everything I want is in my distro's standard repos), there are a ton of high-quality modules available, and I really like its syntax. + +=> https://perldoc.perl.org/ 1: https://perldoc.perl.org/ + +The official Perl documentation has been the most useful resource as I've been learning and using the language. The Perl tutorials[2] also got me up and running really quickly and explained things clearly. Whenever I have a question about something in Perl, I can typically find the answer really quickly using the official documentation or code samples online. + +=> https://learn.perl.org/tutorials/ 2: https://learn.perl.org/tutorials/ + +Perl also has the long-standing CPAN (Comprehensive Perl Archive Network) which is a repository of Perl modules similar to PyPi or npm. Due to how long Perl has been around, there are a bunch of high-quality modules available. It also doesn't have the same problems as npm with things like malware being uploaded[3], and it feels easier to use than PyPi. + +=> https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry 3: https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry + +I love the fact that Perl uses semi-colons (`;`) and braces (`{}`) unlike Python which relies on whitespace for differentiating indented code blocks and lines of code. I'm also really fond of the simple ways to do things in Perl such as killing the script when something doesn't work with `or die`, and outputting to stderr with `warn`. + +There's also this indescribable feeling of joy I get whenever I program in Perl (and, by extension, in shell script). The freedom that I have to solve a problem and the ability to do it in so many different ways engages my brain in ways that other languages like Lua and Python don't. Perl is still a true-to-its-name scripting language, and the fact that its available on just about every platform means that scripts written in Perl are usually portable by default. + +Perl has a reputation for being a write-only language because of the number of scripts which use esoteric, hard to read, symbol-based syntax. Perl doesn't have to be written this way though, it simply allows one to do it because Perl doesn't impose strict "one way to do things" rules like Python does. Clean, readable Perl can be and is written fairly easily. Using `use strict;` and `use warnings;` as well as tools like `Perl::Critic` and `Perl::Tidy` also help one to write clean, readable code. + +Python may be better suited to building larger applications now, but Perl is still really good for scripts, simpler applications, and is, in my opinion, the gold standard for advanced text processing. + +*This is my thirty-first post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/i-was-wrong.gmi b/gemini/pages/blog/i-was-wrong.gmi @@ -0,0 +1,25 @@ +## I Was Wrong + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-25 | + <b>Last Updated:</b> 2020-07-25 +</div> +``` + +Yesterday I made a post about how I was switching away from St to Alacritty. I also took the opportunity to talk about the degrees of separation a work has from its creator such that (if the creator were to do something bad, would the work still be considered acceptable to enjoy or use?) because some allegations against the Suckless project made me reconsider using their software. + +Before continuing, if you haven't read the updates to yesterday's post[1] you should go do that now. + +=> https://www.paritybit.ca//blog/switching-to-alacritty.html 1: https://www.paritybit.ca//blog/switching-to-alacritty.html + +The insinuation that the Suckless folks were involved in neo-nazi behaviour was ultimately founded on very circumstantial evidence and I was wrong to jump to the conclusion that they were without trying harder to seek out responses from Suckless folk themselves. The discussion on the Fediverse alerted me to this, and I realized that the position I held was founded on weak ground and I was no longer even remotely confident that I was right. + +So, even though I updated the previous post, I wanted to write this one in case anyone read the previous article without seeing the updates and redactions. I also think it's important to publicly admit when one is wrong; it's behaviour I like to see in others and I must practice what I preach, as it were. + +*This is my eightieth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/improving-blog-searching.gmi b/gemini/pages/blog/improving-blog-searching.gmi @@ -0,0 +1,52 @@ +## Improving Blog Searching + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-06 | + <b>Last Updated:</b> 2020-07-06 +</div> +``` + +A few days ago I posted about the really simple solution I came up with for searching on my blog[1]. Since then, I've had a few good replies[2] 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. + +=> https://www.paritybit.ca/blog/adding-search-to-my-blog 1: https://www.paritybit.ca/blog/adding-search-to-my-blog +=> https://social.paritybit.ca/web/statuses/104451892409302622 2: https://social.paritybit.ca/web/statuses/104451892409302622 + +### Evaluating Other Suggestions + +First, let's talk about some of the other suggestions made. There was the suggestion from Amolith of secluded.site[3] that I use a tiny, JavaScript-less, static search engine called Tiny Search[4] and the suggestion from Kev Quirk of kevq.uk[5] who mentioned that DuckDuckGo provides an embeddable search bar[6] in the form of an iframe. Both were great suggestions, but let's look at why I think they wouldn't work for my site. + +=> https://secluded.site 3: https://secluded.site +=> https://endler.dev/2019/tinysearch/ 4: https://endler.dev/2019/tinysearch/ +=> https://kevq.uk 5: https://kevq.uk +=> https://duckduckgo.com/search_box 6: https://duckduckgo.com/search_box + +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't be able to make use of it. I could provide a fallback, but the other reason why I didn't choose it is because it advertises itself as being between "50kB-100kB gzipped" 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. + +I played around with Kev'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. + +To summarize, I didn'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. + +### The Solution I Chose + +However, Oscar Benedito[7] suggested something which caught my eye and which I didn'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's just a plain HTML form. This is what I have which now powers my site's search: + +=> https://oscarbenedito.com/ 7: https://oscarbenedito.com/ + +```html +<form action="https://duckduckgo.com/" method="get"> + <input name="sites" type="hidden" value="www.paritybit.ca/blog"> + <input aria-label="Search this blog." name="q" type="text" + placeholder="Search This Blog"> + <button aria-label="Submit search query.">&#128270;</button> +</form> +``` + +That'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. + +*This is my sixty-second post for the #100DaysToOffload[8] challenge. You can learn more about this challenge over at https://100daystooffload.com[9][10].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 8: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 9: https://100daystooffload.com +=> https://100daystooffload.com 10: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/improving-my-blog-post-publishing-script.gmi b/gemini/pages/blog/improving-my-blog-post-publishing-script.gmi @@ -0,0 +1,31 @@ +## Improving My Blog Post Publishing Script + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-11 | + <b>Last Updated:</b> 2020-06-11 +</div> +``` + +Like I previously did to my website compilation script[1], today I rewrote the script I use to publish posts to my website and syndicate those posts to Mastodon. It was about time since that script was a long list of commands with no functions, few clear variables, and written in Bash instead of POSIX shell code. + +=> https://www.paritybit.ca/blog/rewriting-my-static-site-generator 1: https://www.paritybit.ca/blog/rewriting-my-static-site-generator + +Thanks to the work I did for my compilation script, I could copy much of the structure and some functions over to the new publish script. The lessons I learned in making the compilation script portable also meant that I already had the skills and knowledge necessary to make the publish script portable with little effort. I've tested the publish script on FreeBSD as well as Linux and it seems to work without any issues. For the most part, since I only wanted to clean up and organize the script and didn't want to change its behaviour, I could just copy and paste most of what I already had in the script into functions with small tweaks here and there. + +The refactored version of the script weighs in at 7070 bytes, 267 lines, and 183 source lines of code as of the time of writing. This is in comparison to the previous iteration of the script which weighed in at 4543 bytes, 181 lines, and 106 source lines of code. The new script is definitely larger, but also way more maintainable and portable. + +As a consequence of this rewrite, I also noticed some undesirable behaviour: since `publish` calls `compile`, if auto-uploading was enabled in `compile`, the markdown files changed by `publish` would be uploaded twice. To solve this, and to make `compile` easier to use in general, I added argument parsing and a few command line options to the `compile` script. Now that script includes command line switches to print brief help text and toggle strict markdown compilation and auto uploading. + +Another addition I made was to include the text of the `<meta name=description>` tag in my Mastodon status updates. Before I used to just post "New Blog Post:" with the title of the post and a URL, but now a quick summary of the post will also be included in the status updates which provides extra context and makes it easier for people to decide if they care to read the post or not. + +You can view the updated version of the script[2] in the repository for this website. It's portable between operating systems but, unlike `compile`, it wasn't really written for other people to use for their sites. Therefore, if you wish to adapt it for your own site, there are a few changes you'll have to make and you should go through the entire file and make sure things like hard-coded paths and such are set for your environment. + +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish 2: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish + +*This is my forty-second post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/interesting-things-for-today.gmi b/gemini/pages/blog/interesting-things-for-today.gmi @@ -0,0 +1,33 @@ +## Some Interesting Things For Today + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-29 | + <b>Last Updated:</b> 2020-04-29 +</div> +``` + +I don't have anything particularly interesting to talk about today so here are a few links to some interesting things I've seen around the internet recently: + +* Notes on a Nightmare #6: Against Newspapers[1] +* 7 Years at Mozilla[2] +* True Descriptions of Languages[3] +* Atomic Shrimp YouTube Channel[4] +* I Took A COBOL Course and it Wasn't the Worst[5] +* The First Two Statements of Your Bash Script Should Be...[6] + +Stay safe. + +=> https://www.currentaffairs.org/2020/04/notes-on-a-nightmare-6-against-newspapers 1: https://www.currentaffairs.org/2020/04/notes-on-a-nightmare-6-against-newspapers +=> https://j.vehent.org/blog/index.php?post/2020/04/28/7-years-at-Mozilla 2: https://j.vehent.org/blog/index.php?post/2020/04/28/7-years-at-Mozilla +=> https://old.reddit.com/r/ProgrammerHumor/comments/4mo21b/true_descriptions_of_languages/ 3: https://old.reddit.com/r/ProgrammerHumor/comments/4mo21b/true_descriptions_of_languages/ +=> https://www.youtube.com/user/AtomicShrimp 4: https://www.youtube.com/user/AtomicShrimp +=> https://www.hackernoon.com/i-took-a-cobol-course-and-it-wasnt-the-worst-z1ba3yrp 5: https://www.hackernoon.com/i-took-a-cobol-course-and-it-wasnt-the-worst-z1ba3yrp +=> https://ashishb.net/all/the-first-two-statements-of-your-bash-script-should-be/ 6: https://ashishb.net/all/the-first-two-statements-of-your-bash-script-should-be/ + +*This is my fifth post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 7: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/it-doesnt-have-to-be-perfect.gmi b/gemini/pages/blog/it-doesnt-have-to-be-perfect.gmi @@ -0,0 +1,21 @@ +## It Doesn't Have to Be Perfect + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-31 | + <b>Last Updated:</b> 2020-05-31 +</div> +``` + +I've been putting off working on Gopherizer, the script to convert an HTML file to Gopher-compatible syntax, for a couple days now. I think the main reason is that I feel like I'm unfamiliar with how to solve the problem and don't know where to begin. I'm also worried about writing a script, having it work, but then it being a mess of spaghetti code which I wouldn't want to release to the public (since I actually intend for others to use this). + +Really though, if I don't start working on it, I'm never going to figure out how to solve the problem. If I don't bother to program it, nobody can even use it anyways. Procrastinating on it isn't going to solve those problems or ease my concerns. Instead, I should just get stuck in and write. If I try doing things one way and that doesn't work out, then I can just try different things. If the code is messy or inefficient, that can be improved later on by either myself or others. + +There really is no point procrastinating. It doesn't have to be perfect. I should just do it. + +*This is my thirty-fourth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/logo-redesign.gmi b/gemini/pages/blog/logo-redesign.gmi @@ -0,0 +1,63 @@ +## Redesigning My Website's Logo + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-02-28 | + <b>Last Updated:</b> 2020-02-28 +</div> +``` + +I got tired of the way my old logo looked so when my website redesign was complete I endeavoured to completely redesign my logo. I wanted a logo that was simple and clean looking but also supported being extended through adding different symbols which represent whichever paritybit site one is visiting. I also wanted it to be simple and clear enough that it could be recognizable at many different sizes which is important for a logo which will also be used as a favicon. A simple logo is also easier to print on mugs and t-shirts ;) + +I used Inkscape[1] to create my logo. Inkscape is a cross-platform, FLOSS vector graphics editor which I found to be intuitive to use. It was important that the master copy of my logo be in SVG format so that it can be scaled to many sizes without becoming pixellated. + +=> https://inkscape.org/ 1: https://inkscape.org/ + +After some work, trials, and revisions, I arrived at the following base logo design: + +```html +<figure> + <a href="/img/logo-256.png"><img src="/img/logo-256.png" + alt="The new logo's base design."/></a> +</figure> +Compare that to the old logo: +<figure> + <a href="/img/old-logo.png"><img src="/img/old-logo.png" + alt="The old paritybit.ca logo."/></a> +</figure> +I liked the colour scheme from my old logo so I decided to keep that. The yellow +circle part of the base design is the spot where I put symbols or emblems to +differentiate one paritybit.ca site or service from another. Take a look below +at the logos for this website and [git.paritybit.ca](https://git.paritybit.ca) +respectively: +<figure> + <a href="/img/logo-main-256.png"><img src="/img/logo-main-256.png" + alt="The new logo design for this website."/></a> +</figure> +<figure> + <a href="/img/logo-git-256.png"><img src="/img/logo-git-256.png" + alt="The new logo design for git.paritybit.ca."/></a> +</figure> +It took me a long time to decide on an appropriate symbol to represent my +website as a whole. I tried some designs related to parity bits similar to my +old logo but none of them felt right. While doing something completely +unrelated, the [glider emblem](http://www.catb.org/hacker-emblem/faqs.html) +popped into my mind and I immediately felt that it would be the perfect symbol +to incorporate into my site's logo. I feel this "hacker emblem" represents the +general values that I want this site to encourage and promote. Particularly, the +values of collaboration and openness. +``` + +In addition, this logo doesn't just represent paritybit.ca; I also use the logo with the glider as my profile picture across the Internet. It's become a personal emblem that represents me *and* my website. + +Luckily, coming up with a design for the git.paritybit.ca logo was much easier. The licensing information of the Git Logo and the place from where I obtained it are all detailed in the README of the paritybit.ca git repository[2] (mirror[3]). The SVG files for these logos are also in the repository under the `build/` directory. + +=> https://git.sr.ht/~jbauer/paritybit.ca 2: https://git.sr.ht/~jbauer/paritybit.ca +=> https://git.paritybit.ca/jbauer/paritybit.ca 3: https://git.paritybit.ca/jbauer/paritybit.ca + +Finally, in order to make sure that my logo looked good on every platform, I used a service called Real Favicon Generator[4] which takes a logo and generates the required files, sizes, and formats to make the image appear properly on every platform. This way, my logo will look good in the browser, on the home screen of an Android or iOS phone, and even on a MacBook Pro's touch bar. I highly recommend this service for checking and generating favicons for every platform. It saved a lot of manual work. + +=> https://realfavicongenerator.net/ 4: https://realfavicongenerator.net/ + +Happy hacking! +\ No newline at end of file diff --git a/gemini/pages/blog/machine-hostnames.gmi b/gemini/pages/blog/machine-hostnames.gmi @@ -0,0 +1,41 @@ +## Machine Hostnames + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-12 | + <b>Last Updated:</b> 2020-07-12 +</div> +``` + +Some sysadmins choose to name their machines using strict alphanumeric schemes which contain information like operating system, service, number, or location. Others choose to give their machines pet-like names which follow a certain theme or mean something to them. + +I am of the latter camp since I don't have many machines and my environment isn't complex enough that I have to worry about losing track of which machine is which. I tend to name my machines after elements of the Greek Underworld mythology because it's cool. Below is a table of hostnames that belong to my currently-running machines: + +```html +<table> <thead> +<tr><th>Name</th> <th>Description</th> <th>Current Use</th></tr> +</thead> </tbody> +<tr><td>Acheron</td> <td>River of pain</td> <td>Router/Firewall</td></tr> +<tr><td>Lethe</td> <td>River of forgetfullness</td> <td>Git server</td></tr> +<tr><td>Oceanus</td> <td>River that encircles the world, marks edge of Underworld</td> <td>Dell Venue Tablet</td></tr> +<tr><td>Curae</td> <td>Anxiety</td> <td>Matrix Server</td></tr> +<tr><td>Geras</td> <td>Old Age</td> <td>Thinkpad T420s</td></tr> +<tr><td>Eris</td> <td>Discord</td> <td>Mastodon Instance</td></tr> +<tr><td>Charon</td> <td>The ferryman of the dead</td> <td>Nginx Web Server/Reverse Proxy</td></tr> +<tr><td>Cerberus</td> <td>Guardian of the gates to the Underworld</td> <td>Proxmox VE</td></tr> +<tr><td>Minos</td> <td>Judge of the final vote</td> <td>Monitoring Server</td></tr> +<tr><td>Hades</td> <td>God of the Underworld</td> <td>Desktop Computer</td></tr> +<tr><td>Tartarus</td> <td>Pits of oblivion, dungeon of torment and suffering</td> <td>Mail Server</td></tr> +</tbody> </table> +``` + +This used to be a page on my wiki and will now become part of my Uses[1] page. + +=> gemini://paritybit.ca/uses 1: /uses + +*This is my sixty-seventh post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/making-my-own-vim-statusline.gmi b/gemini/pages/blog/making-my-own-vim-statusline.gmi @@ -0,0 +1,73 @@ +## Making My Own Vim Statusline + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-02-24 | + <b>Last Updated:</b> 2020-02-24 +</div> +``` + +I was playing around with a plugin that I came across while browsing r/vim[1] called vim-startuptime[2]. It's a vim plugin by Daniel Steinberg (dstein64[3] 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. + +=> https://old.reddit.com/r/vim 1: https://old.reddit.com/r/vim +=> https://github.com/dstein64/vim-startuptime 2: https://github.com/dstein64/vim-startuptime +=> https://github.com/dstein64 3: https://github.com/dstein64 + +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 100ms commonly accepted limit[4] 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: + +=> https://www.nngroup.com/articles/response-times-3-important-limits/ 4: https://www.nngroup.com/articles/response-times-3-important-limits/ + +```html +<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> +``` + +* Download the mp4 video (310K)[5] +* Download a GIF (4.7M)[6] + +Although vim-startuptime showed me a graph of each component's execution time, the statistics shown didn'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. + +=> gemini://paritybit.ca/img/vim-airline.mp4 5: /img/vim-airline.mp4 +=> gemini://paritybit.ca/img/vim-airline.gif 6: /img/vim-airline.gif + +I decided, then, that I was going to replace vim-airline with my own custom statusline. + +I used a blog post by Irrellia[7] 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 `.vim/bundle/` directory so that it would be automatically loaded by Pathogen as if it was a regular plugin. + +=> https://irrellia.github.io/blogs/vim-statusline/ 7: https://irrellia.github.io/blogs/vim-statusline/ + +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. + +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 vim-buftabline[8]. + +=> https://github.com/ap/vim-buftabline 8: https://github.com/ap/vim-buftabline + +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's a roughly 2 times improvement in speed; it felt instantaneous again! Here, have a look at the video below: + +```html +<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> +``` + +* Download the mp4 video (321K)[9] +* Download a GIF (5.0M)[10] + +I've put my statusline in its own git repository which you can find on sourcehut[11] or on my self-hosted git server[12]. I've decided to call it vim-fastline. I don'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. + +=> gemini://paritybit.ca/img/vim-no-airline.mp4 9: /img/vim-no-airline.mp4 +=> gemini://paritybit.ca/img/vim-no-airline.gif 10: /img/vim-no-airline.gif +=> https://git.sr.ht/~jbauer/vim-fastline 11: https://git.sr.ht/~jbauer/vim-fastline +=> https://git.paritybit.ca/jbauer/vim-fastline 12: https://git.paritybit.ca/jbauer/vim-fastline + +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's *"my configuration*" if that makes sense. I encourage you to give it a try even if you're happy with your current configuration. + +Happy hacking! +\ No newline at end of file diff --git a/gemini/pages/blog/making-my-site-easier-to-read.gmi b/gemini/pages/blog/making-my-site-easier-to-read.gmi @@ -0,0 +1,34 @@ +## Making My Site Easier to Read + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-12 | + <b>Last Updated:</b> 2020-06-24 +</div> +``` + +Kev Quirk recently posted an article about improving his website's design[1] which sparked me to review my own site's typography and design. During my previous site redesign[2], I tried to make sure that things were as readable as possible but it never hurts to review things. There may be something I like more now or something I missed the first time. + +=> https://kevq.uk/whats-in-a-font-researching-website-typography/ 1: https://kevq.uk/whats-in-a-font-researching-website-typography/ +=> https://www.paritybit.ca/blog/website-redesign 2: https://www.paritybit.ca/blog/website-redesign + +There were a few things in his article which caught my eye and made me reconsider if I was doing all I could regarding typography. For one, I had my line height set at `1.4em` which I've lowered to `1.3em` and I also increased the spacing between paragraph headers and the paragraph above so that individual paragraphs or sections feel more like a single unit. This made text- and section-heavy pages like my About This Site[3] page much nicer to read. + +=> gemini://paritybit.ca/about-site 3: /about-site + +I also played around with different fonts and line widths, but nothing other than what I currently have looked good to me. I've also considered adding a light theme back to my website via a `@media` query because it's supposedly easier to read, but I originally got rid of it because I didn't like the look of the light theme that I had, despite my best efforts to tweak it. I do also personally prefer dark themes, so I think I'll just stick with what I have for now. + +***Update**: I decreased the width of the site from 50rem to 40rem so each line of text has roughly 60-80 characters making the site much more pleasant to read.* + +There was one thing I disagree with Kev about: font sizes. I laid out my thoughts regarding font sizes[4] in a previous blog post, but to summarize: font sizes should not be specified in `px`, they should be specified using some relative measurement like `rem`s or `%`s. + +=> https://www.paritybit.ca/blog/a-quick-rant-about-web-font-sizes 4: https://www.paritybit.ca/blog/a-quick-rant-about-web-font-sizes + +Other than that (😉), I think it's an excellent post and I hope it influences others to make their websites more readable. Thanks Kev! + +*This is my forty-third post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/mastodon-to-pleroma-1-setting-up-a-pleroma-server.gmi b/gemini/pages/blog/mastodon-to-pleroma-1-setting-up-a-pleroma-server.gmi @@ -0,0 +1,53 @@ +## Mastodon to Pleroma — 1 — Setting up a Pleroma Server + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-21 | + <b>Last Updated:</b> 2020-07-21 +</div> +``` + +```html +<p class="note">Since this is a Mastodon to Pleroma conversion, followers will +not auto-migrate. You should [follow me on Pleroma +here](https://pleroma.paritybit.ca/jbauer) and unfollow me on Mastodon.</p> +``` + +Unfortunately, I have been unable to resolve my Mastodon troubles[1] and migrating my instance to a fresh install didn't work so I'm giving up on self-hosting Mastodon. Luckily, I don't have to give up on the Fediverse because there's an alternative called Pleroma. + +=> https://www.paritybit.ca/blog/my-attempts-to-fix-my-mastodon-instance 1: https://www.paritybit.ca/blog/my-attempts-to-fix-my-mastodon-instance + +Pleroma is another social media/microblogging platform similar to Mastodon. It also interoperates with the rest of the Fediverse using ActivityPub so it still allows me to follow people who use Mastodon, just like Mastodon allowed me to follow people who use Pleroma. However, there are a number of advantages that Pleroma brings to the table over Mastodon. + +For one, Pleroma requires far, far fewer resources to run than Mastodon due to its technology stack. Pleroma is built on Elixir, a functional programming language which runs on the Erlang virtual machine as opposed to Mastodon which is built with Ruby, Node.js, and a React.js frontend. When I was running Mastodon, I gave my VM 3GB of RAM and it would use close to 1.5GB, sometimes creeping up closer to 2GB of RAM during periods of high activity. I didn't notice Mastodon using excessive amounts of CPU power, but then again it was a one-person instance incomparable to an instance like Fosstodon with its 10.5k people (I'm curious how many resources Fosstodon requires). + +Another advantage, also related to the tech stack, is that Pleroma feels and looks like it will be a lot easier to perform maintenance on and troubleshoot errors with. If you read my previous blog post about troubleshooting my Mastodon troubles or followed my rants on social.paritybit.ca, you'll know that the tech stack Mastodon uses feels (to me, anyways) like a bunch of things loosely connected together where it can be very difficult to figure out what's going wrong and why unless you have a strong familiarity with the tech stack or the software. + +The other thing I've noticed about Pleroma is that it's far more customizable and hackable than Mastodon. Both the front-end in styling and the back-end in the number of settings you can change on your server give a sense of having a lot more freedom in making an instance *your instance*. For example, through adding resources to a customizations directory called the "static directory", I am able to add custom themes to the frontend that ships with Pleroma, and change the background, favicon, and logo site-wide (as opposed to just my profile background and avatar). One can also use different frontends with Pleroma; it notably ships with a version of the Mastodon frontend in addition to the default Pleroma frontend. + +So, now that you know why I wanted to switch to Pleroma, let's look at installing a server: + +Unfortunately, I was unable to get the Mastodon->Pleroma migration script[2] working on my system (probably due to something wrong with my environment or the Masto VM), so I have to create a new profile on Pleroma and notify people that I've moved because, unlike a Mastodon->Mastodon transfer, I can't bring my followers with me to Pleroma. If you are considering moving from self-hosting Mastodon to self-hosting Pleroma, try that script first and see if you can get it working for you because it makes the whole process a lot easier. Masto->Pleroma follower migration may be coming in the future[3], but it wasn't available when I moved. + +=> https://gitlab.com/soapbox-pub/migrator 2: https://gitlab.com/soapbox-pub/migrator +=> https://git.pleroma.social/pleroma/pleroma/-/merge_requests/2773 3: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/2773 + +I chose to install using an OTP release as that seemed like the better choice for a production server than installing from source. I stood up a VM with 1 CPU and 512 MB of RAM on my extremely super powerful server (it's a laptop from 2012), pretty much just followed the instructions in the documentation[4], and everything worked without hassle. I did modify the nginx config, removing the SSL bits and the first server block, since I am serving it from behind a reverse proxy which handles SSL for all the servers behind it. + +=> https://docs.pleroma.social/backend/installation/otp_en/ 4: https://docs.pleroma.social/backend/installation/otp_en/ + +I chose to host the new server at pleroma.paritybit.ca[5] so that I could still have Mastodon running concurrently at social.paritybit.ca[6] which would allow me to pester my followers to go follow me over at my new instance. If I instead deleted and replaced my Mastodon instance with Pleroma, I would disappear off the face of the Fediverse for many people and would be dropped from their following list. + +=> https://pleroma.paritybit.ca 5: https://pleroma.paritybit.ca +=> https://social.paritybit.ca 6: https://social.paritybit.ca + +So far, the Pleroma server is running just fine with one virtual CPU and only 512MB of RAM. As of writing this blog post, my Pleroma server is sitting at 300/483M RAM usage, 196/510M swap usage, and about 16% CPU usage. My Mastodon server is sitting at 1.33/2.93G RAM usage, 40.7M/2.0G swap usage, and about 15% CPU usage. + +After a few weeks and once at least most of my followers have realized I've moved, I'll be decommissioning my Mastodon server and sticking with Pleroma full-time. It seems to have been a worthwhile switch so far. + +*This is my seventy-sixth post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 7: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/mastodon-to-pleroma-2-customizing-my-instance.gmi b/gemini/pages/blog/mastodon-to-pleroma-2-customizing-my-instance.gmi @@ -0,0 +1,61 @@ +## Mastodon to Pleroma — 2 — Customizing My Instance + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-23 | + <b>Last Updated:</b> 2020-07-24 +</div> +``` + +```html +<p class="note">Since this is a Mastodon to Pleroma conversion, followers will +not auto-migrate. You should [follow me on Pleroma +here](https://pleroma.paritybit.ca/jbauer) and unfollow me on Mastodon.</p> +``` + +Now that I have a Pleroma instance up and running with an account, it's time to make that instance my own through backend and frontend customizations. + +Pleroma provides so many customization options, it took me a while to go through all of them and customize my instance to my liking. That is by no means a bad thing; it was a really enjoyable process and it makes it feel like it's social media but for hackers (not the Hollywood kind). + +There weren't many backend customizations I wanted to do. For one, the default character limit of 5000 is more than enough for me, and far less restrictive feeling than Mastodon's unchangeable 500. I turned off the chat room (which I do think is a really cool feature) and closed registrations because I didn't need those features on my single-person instance. I was pretty much satisfied with the rest of the defaults. I want to point out that I found it really cool to see an option for exposing my instance over Tor[1] as a hidden service as well as an option to expose my instance over the Gopher protocol. That's rare to see for a web application, and really makes me like Pleroma a lot more (even if I don't end up using those features). + +=> https://docs.pleroma.social/backend/configuration/onion_federation/ 1: https://docs.pleroma.social/backend/configuration/onion_federation/ + +As far as customizing the frontend, well, this is where it got fun and interesting. I could change pretty much anything I wanted about the instance's frontend down to the UI itself (though I stuck with the default Pleroma frontend because I actually quite like it). I changed the favicon of the site (something I couldn't do at all with Mastodon), the background for the entire instance, the logo for the site as it appears at the top-center of the page, and even the default theme for the UI. + +I created a new logo for my Pleroma instance just like I did with my Mastodon instance: + +```html +<figure> + <a href="/img/logo-pleroma-512.png"><img src="/img/logo-pleroma-128.png" + alt="My Pleroma instance's logo: A black circle around a dark red circle all + encircling a yellow circle which has a black coloured Pleroma logo in the + centre."/></a> +</figure> +``` + +I also set the background of both my profile and my Pleroma instance to a 1 pixel by 1 pixel solid colour image. I liked the background colour that I used for my profile banner on Mastodon and wanted to keep it for this new instance. The colour is: <span style="colour:#fff;background-color:#282c37">#282c37</span>, in case you're curious. + +Finally, for the theme, I landed on the Vulpes One theme created by <a href="https://pleroma.paritybit.ca/users/9xJeso1U3l4rBr2o4W">@Feuerfuchs@fedi.vulpes.one</a> which I found via plthemes.vulpes.one[2], and added it to my instance by following the Pleroma documentation on adding themes[3]. I think it's a great theme that complements the colour scheme I went for well. + +=> https://plthemes.vulpes.one/ 2: https://plthemes.vulpes.one/ +=> https://docs-develop.pleroma.social/backend/configuration/howto_theming_your_instance/ 3: https://docs-develop.pleroma.social/backend/configuration/howto_theming_your_instance/ + +As far as emoji packs, just like with Mastodon one can also add custom emoji to Pleroma instances. I'm not a big user of emoji though, so I <del>didn't really bother for my instance</del> have now installed a couple of blobcat emoji packs (because they're adorable) thanks to Puniko's emoji repository[4]. + +=> https://fedi.absturztau.be/emoji-packs/ 4: https://fedi.absturztau.be/emoji-packs/ + +Except for profile-specific settings, all of the above customizations were accomplished by putting files into the "static directory", a place the Pleroma server looks to serve custom resources. I set mine at `/var/lib/pleroma/static` because that's what the installation instructions used and I didn't have a reason to change it. + +Some other minor changes I made were: setting the default page to show non-logged-in users (i.e. anyone who isn't me but is visiting pleroma.paritybit.ca in their browser) my profile page, turned off showing the instance-specific panel, and updating the About page for the instance. + +The more I use Pleroma, the more I like it. It allows me to customize so much that I can truly make an instance feel like my own rather than yet another instance using the same software. The plethora of tunables and customizables from things like the number of options one can add to a poll to even being able to turn off federation all-together, really make it feel like the hacker's version of Mastodon. + +*Disclaimer: I am in no way trying to disparage the effort's of the Mastodon folk, I just really like Pleroma and I am realizing it's the better choice for me.* + +*This is my seventy-seventh post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/mastodon-to-pleroma-3-shutting-down-mastodon.gmi b/gemini/pages/blog/mastodon-to-pleroma-3-shutting-down-mastodon.gmi @@ -0,0 +1,91 @@ +## Mastodon to Pleroma — 3 — Shutting Down Mastodon + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-25 | + <b>Last Updated:</b> 2020-07-25 +</div> +``` + +Now that I've settled into Pleroma, I'm going to decommission my Mastodon instance. I was originally planning to do it on 2020-08-08, but now that a majority of my followers have followed the new account, I figure it's time to take Mastodon off of life support and shut down the instance. + +To make sure that everyone has been notified about the account switch and nobody will be left wondering where I went, I have decided to turn my old account (@jbauer@social.paritybit.ca) into a bot which will post an announcement every 30 minutes until the death of the server. + +```html +<figure> + <a href="/img/mastodon-status-announcement.png"><img + src="/img/mastodon-status-announcement.png" alt="A screenshot of one of the + announcements on my Mastodon instance. Announcing that the instance is + shutting down and that followers should follow me on Pleroma instead."/></a> +</figure> +``` + +```html +<p>I tried to tweak the script I'm using to post a friendlier link to my profile +(in the form of @jbauer@pleroma.paritybit.ca) which would have been better for +mobile users, but for some reason unknown to me, Mastodon refuses to federate +with instances using LAN addresses and this caused it to give me an HTTP error +422 when trying to link to my Pleroma instance. I really don't know why but +[this behaviour annoyed me a +lot](https://pleroma.paritybit.ca/notice/9xSKKyy9huLG3WXfcG).</p> +``` + +Anyways, I got the idea to do the automated posting from a post by Alex Gleason[1] on the Fediverse and this is the script that I wrote to make the posts: + +=> https://gleasonator.com/notice/9xMfeRlpcqrSkFv9nM 1: https://gleasonator.com/notice/9xMfeRlpcqrSkFv9nM + +```bash +#!/bin/sh + +TTD=$(cat /tmp/ttd) + +printf "ANNOUNCEMENT: I have moved accounts from Mastodon to Pleroma. + +Followers will NOT auto-migrate. You must manually follow my new account at +https://pleroma.paritybit.ca/jbauer (@jbauer @pleroma.paritybit.ca) and you +should unfollow this account. (Sorry mobile users, I can't generate an @link to +the new profile.) + +social.paritybit.ca will be shutting down in >> $TTD hours\n + +This account is now a bot. This status will repeat every 30 minutes until the +instance is destroyed." > /tmp/status.txt + +accessToken="haha no" +resp="$(curl -s -S -i -X POST \ + -H "Authorization: Bearer $accessToken" \ + -F status="$(cat /tmp/status.txt)" \ + -F visibility=public \ + https://social.paritybit.ca/api/v1/statuses)" +httpCode="$(echo "$resp" | grep HTTP/ | awk '{print $2}')" + +if [ "$httpCode" = "200" ]; then + echo "Successfully posted status update" +else + echo "ERROR: Failed to post status update" + echo "$resp" +fi + +echo "$TTD-0.5" | bc -ql > /tmp/ttd +``` + +The script is run with the following cron job: + +``` +*/30 * * * * /home/jbauer/masto-last-hours.sh +``` + +I calculated the number of hours from the time I started the script to 2020-07-27 at noon using this time calculator[2] and put the value in `/tmp/ttd`. As the script runs, it will keep decrementing this value until the instance is terminated. Using the `at` command, I have scheduled a shutdown so that, once the time hits 12:00 on 2020-07-27, my Mastodon instance will go offline for the final time. + +=> https://datayze.com/time-until 2: https://datayze.com/time-until + +Friendship ended with Mastodon, now Pleroma is my best friend (meme reference[3]). + +=> https://knowyourmeme.com/memes/friendship-ended-with-mudasir 3: https://knowyourmeme.com/memes/friendship-ended-with-mudasir + +*This is my eighty-first post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/migrating-my-wiki-off-of-mediawiki.gmi b/gemini/pages/blog/migrating-my-wiki-off-of-mediawiki.gmi @@ -0,0 +1,21 @@ +## Migrating My Wiki Off of MediaWiki + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-09 | + <b>Last Updated:</b> 2020-07-09 +</div> +``` + +MediaWiki is a cool bit of software (it powers Wikipedia, after all), but after using it as my wiki software for a few months, I've come to the conclusion that it's not a good solution for me. + +It's quite pretty, built to do wiki things well, and is very easy to use but, like with most other things I cut out of my life, it comes with a lot of unnecessary complexity and inefficiency for what I'm doing with it. For example, it's really designed as a collaborative editing platform but I'm the only one who makes changes and creates pages because it's a personal wiki. + +I have decided instead to migrate all of my wiki pages off of MediaWiki and back onto my website, which is what I was using before MediaWiki. This way I can use my regular workflow to add and update pages and I can get rid of a service that no longer gets much use. I will be moving things over slowly and I will be reviewing, updating, expanding on and releasing the pages I move over as blog posts since my blog has a search function and I think some pages might make interesting posts. + +*This is my sixty-fifth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-attempts-to-fix-my-mastodon-instance.gmi b/gemini/pages/blog/my-attempts-to-fix-my-mastodon-instance.gmi @@ -0,0 +1,50 @@ +## My Attempts to Fix My Mastodon Instance + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-17 | + <b>Last Updated:</b> 2020-07-17 +</div> +``` + +Self-hosting Mastodon was going so well until about a month-and-a-half ago when, seemingly out of nowhere, I started getting HTTP error 422 in response to any action I took to update my profile or instance from the web UI. I could still update things like my profile description using the Tusky mobile app, yet it wouldn't work in the web interface. I also couldn't even log out, as clicking the log out button gave me the exact same error page and HTTP response: + +```html +<figure> + <a href="/img/mastodon-error.png"><img src="/img/mastodon-error-thumb.png" + alt="A mastodon error page with the text 'Security verification failed. Are + you blocking cookies?'."/></a> +</figure> +``` + +I tried fiddling with the server, re-compiling the UI pages, updating it and its dependencies, all to no avail. Just today I spent about 4 hours (mostly just waiting for things to backup, copy, transfer, etc) standing up a new mastodon server and migrating the database over but, although the back-end seemed to work just fine, the front-end kept giving me webpack errors that I have no idea how to fix: + +``` +Jul 18 02:03:31 eris bundle[901]: [f0b3cdd5-a423-43ac-beba-9484b5100b10] method=GET path=/ format=html controller=HomeController action=index status=302 duration=22.14 view=0.00 db=17.60 location=https://social.paritybit.ca/@jbauer +Jul 18 02:03:31 eris bundle[902]: [7187785d-5345-413e-a08a-3854c43a0e94] method=GET path=/@jbauer format=html controller=AccountsController action=show status=500 error='ActionView::Template::Error: Webpacker can't find public.js in /home/mastodon/live/public/packs/manifest.json. Possible causes: +Jul 18 02:03:31 eris bundle[902]: 1. You want to set webpacker.yml value of compile to true for your environment +Jul 18 02:03:31 eris bundle[902]: unless you are using the `webpack -w` or the webpack-dev-server. +Jul 18 02:03:31 eris bundle[902]: 2. webpack has not yet re-run to reflect updates. +Jul 18 02:03:31 eris bundle[902]: 3. You have misconfigured Webpacker's config/webpacker.yml file. +Jul 18 02:03:31 eris bundle[902]: 4. Your webpack configuration is not creating a manifest. +Jul 18 02:03:31 eris bundle[902]: Your manifest contains: +Jul 18 02:03:31 eris bundle[902]: { +Jul 18 02:03:31 eris bundle[902]: } +Jul 18 02:03:31 eris bundle[902]: ' duration=233.72 view=0.00 db=9.78 +Jul 18 02:03:31 eris bundle[902]: [7187785d-5345-413e-a08a-3854c43a0e94] +``` + +I've tried re-compiling the front-end assets, checking the content of the stated `webpacker.yml` and the `manifest.json` files (they looked fine to my untrained eye and contained the things Webpacker says it can't find), and even things like what was suggested here on StackOverflow[1]. Nothing worked. + +=> https://stackoverflow.com/questions/58520418 1: https://stackoverflow.com/questions/58520418 + +I'm kind of getting fed up with the technologies used by Mastodon. Not only does my server eat RAM because of the use of things like Ruby and Node.js, it feels very duct-taped together and difficult to diagnose without being intimately familiar with either Mastodon's workings or Ruby environments in general. I appreciate the efforts of the Mastodon developers in creating this software, but I don't think the technologies used are particularly good. + +For this reason, unless I can figure out how to solve the above problems, I will be standing up a Pleroma instance (it's basically like Mastodon but doesn't eat as much RAM and only externally requires a database, as opposed to a whole suite of web technologies, among other things). The migration won't be quick and I'll probably lose a few followers along the way, but I think it'll be worth it in the end to move to a platform that won't be as frustrating to diagnose or fix. + +*This is my seventy-fourth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-beginnings-with-gentoo.gmi b/gemini/pages/blog/my-beginnings-with-gentoo.gmi @@ -0,0 +1,35 @@ +## My Beginnings with Gentoo + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-16 | + <b>Last Updated:</b> 2020-06-16 +</div> +``` + +I'm not sure what possessed me to try out Gentoo, but here we are. + +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 *long* time to compile. + +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's like Arch but... more. + +I find the concept to be really cool considering I'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'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. + +I started by printing out the excellent Gentoo Handbook[1] (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' 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. + +=> https://wiki.gentoo.org/wiki/Handbook:AMD64 1: https://wiki.gentoo.org/wiki/Handbook:AMD64 + +I used the easy options for most of the installation, sticking with mostly what the wiki told me to do and using `genkernel` 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't want to risk breaking things by trying to get fancy my first time around. + +I held my breath after issuing the `reboot` command from the installation environment and got incremental boosts of dopamine as I got through the GRUB menu, loading the kernel, watching OpenRC's output scroll by, and finally reaching a login prompt. Setting up the general user account was easy and I chose to go with `doas` instead of `sudo` because I like the simplicity of it. + +As of right now, I'm compiling the software necessary to get my desktop environment in order. It'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 `startx` which interestingly ignored my `XINITRC` variable and just launched the `xinitrc` found in `/etc` (I checked with the `env` command that the variable did exist in my environment). Starting it with `startx .config/X11/xinitrc` worked though, and I had my desktop environment up and running (albeit without all of the flash). + +My first impressions of the distribution are overall positive, though I still feel very out of my depth. I'm going to have to do a lot of reading about the various Gentoo-specific tools, recommended USE flags, how `emerge` 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'm enjoying the challenge. + +*This is my forty-seventh post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-first-ctf.gmi b/gemini/pages/blog/my-first-ctf.gmi @@ -0,0 +1,25 @@ +## My First CTF + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-27 | + <b>Last Updated:</b> 2020-06-27 +</div> +``` + +Today I completed my first ever capture the flag (CTF) event; the GeekSeek CTF hosted by the Canadian Centre for Cyber Security[1]. I was worried about how well I would do since I didn't get much sleep the night before and, unfortunately, the two people my friend and I were paired up with did not show up to the event but, despite that, we placed 7th out of 50 teams and even managed to hold 3rd place for a bit at one point! + +=> https://cyber.gc.ca/en/ 1: https://cyber.gc.ca/en/ + +The CTF was a ton of fun. I both practiced the skills I already had and learned about a whole bunch of new things. Every time I got an answer right was a rush of dopamine and a boost to keep solving more problems. There were a couple problems that kicked me in the butt because of my unfamiliarity with the tools or languages, but that just highlights areas where I can improve and learn more. + +I highly recommend participating in CTFs if you're interested in the world of infosec/cracking. They're a ton of fun, a good way to meet people, and a great way to learn and practice new skills. + +The CTF lasted from 10:00 to 22:00, so I'm going to go to bed now... + +*This is my fifty-sixth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-git-server-was-ddosed.gmi b/gemini/pages/blog/my-git-server-was-ddosed.gmi @@ -0,0 +1,92 @@ +## My Git Server Was DDoSed + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-29 | + <b>Last Updated:</b> 2020-07-29 +</div> +``` + +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 status.paritybit.ca[1], 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. + +=> https://status.paritybit.ca 1: https://status.paritybit.ca + +It wasn't until the notifications became so numerous and noticing that turning the machine off and on again wasn't working that I figured something wasn'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. + +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. + +My next step in diagnosing the problem was to check the server logs. Normally, I have both the `access.log` and `error.log` turned off on my servers because I don't need the content of those logs under normal circumstances. I proceeded to turn on logging again just for git.paritybit.ca[2] and watched them with `tail -f` to try to get an idea of what was going on. + +=> https://git.paritybit.ca 2: https://git.paritybit.ca + +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 `.tar.gz`, `.tar.bz2` and `.zip` files for every single snapshot. Luckily, it was just the webserver that kept going down; git access through SSH was unaffected. + +These are the kinds of user agents I noticed: + +``` +"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)" + +"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)" + +"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0" + +"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11" + +"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)" +``` + +My first thought upon seeing this traffic was that they were just some overzealous bots. I changed my `robots.txt` file to deny scraping all but the index page of my git server and I changed the robots setting in `cgitrc` to `robots=none` to prevent the site from being indexed. + +Unfortunately, that didn't help one bit. When a bot ignores robots directives, it'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 `nginx-badbots` filter (by copying the `apache-badbots` filter and adding the malicious user agents to the `badbots-custom` 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 `nftables` firewall. + +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: + +```html +<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> +``` + +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: + +```html +<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> +``` + +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's an extreme measure that has the very real implication of locking out good people from viewing my sites. It's not like everyone in China is a malicious actor and there may even be people over there who find my stuff useful. + +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. + +It doesn'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: + +```html +<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> +``` + +Clearly the attack is still going on but, thanks to Fail2Ban, it's no longer significant enough to keep bringing down my Git server. I also don't notice any lag out of the ordinary when using it myself which is a good sign. + +What perplexes me about this DDoS is that this person or group, whoever they are, is only attacking git.paritybit.ca[3] and none of my other services. My website, Pleroma, and Matrix all seem to be behaving just fine and there'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... + +=> https://git.paritybit.ca 3: https://git.paritybit.ca + +I'll give it a few more days and see if I can unblock China from accessing my web services because I'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'll have to leave the block in place (though I may try rate-limiting IPs that Fail2Ban catches instead of outright blocking them). + +*This is my eighty-second post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-journey-with-computers.gmi b/gemini/pages/blog/my-journey-with-computers.gmi @@ -0,0 +1,55 @@ +## My Journey With Computers + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-03 | + <b>Last Updated:</b> 2020-08-03 +</div> +``` + +Nearly two weeks ago (wow, time flies), I wrote a blog post about two truths and a lie[1] where I presented three things about me and you would have to guess which one was a lie. There were a few people on the thread about the post[2] who were surprised I've only been into computers for about three years. That, along with DistroTube's latest video[3], and a recent post by Mike Stone[4] is why I'm writing this post. + +=> https://www.paritybit.ca/blog/two-truths-and-a-lie 1: https://www.paritybit.ca/blog/two-truths-and-a-lie +=> https://pleroma.paritybit.ca/notice/9xOnIFvbDVvSOpjoWm 2: https://pleroma.paritybit.ca/notice/9xOnIFvbDVvSOpjoWm +=> https://www.youtube.com/watch?v=wi89hjQvfBg 3: https://www.youtube.com/watch?v=wi89hjQvfBg +=> https://mikestone.me/programming-language-of-choice 4: https://mikestone.me/programming-language-of-choice + +My journey begins before I can really clearly remember. I'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. + +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're curious I'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/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. + +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't support my video games. I only knew to go to the command line to use `sudo apt-get` not even knowing what those commands did, just that I had to use them to update my computer and install new software. I didn'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's what I found interesting at the time. + +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't have anything I wanted to program and soon lost interest, especially since it didn'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't teach one how to use it properly. + +I finished High School and went to university... 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. + +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. + +That winter I built my own PC[5] 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. + +=> https://ca.pcpartpicker.com/b/vpLJ7P 5: https://ca.pcpartpicker.com/b/vpLJ7P + +It was the summer of 2018 where I feel my knowledge really exploded and hasn'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 *shudders* other people'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. + +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 Derek Taylor[6] and Luke Smith[7] 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'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've also tried non-Linuxes like FreeBSD, OpenBSD, and Plan9. I've learned more about the history of computing than my naïve younger self ever knew existed. I've programmed in Scheme and Prolog. I was even tempted by Emacs at one point (scary, I know). + +=> https://www.youtube.com/distrotube 6: https://www.youtube.com/distrotube +=> https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA 7: https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA + +All that being said, I'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 `w`, `e`, and `b` in Vim. I went from not even having a good reason to use Linux to now running Debian Sid[8], using dwm[9] and a bunch of other Suckless software, writing my own Vim statusline[10], self-hosting my own email server[11], participating in my first CTF[12] and more. + +=> https://www.paritybit.ca/blog/switching-to-debian-sid 8: https://www.paritybit.ca/blog/switching-to-debian-sid +=> https://www.paritybit.ca/blog/trying-out-dwm 9: https://www.paritybit.ca/blog/trying-out-dwm +=> https://www.paritybit.ca/blog/making-my-own-vim-statusline 10: https://www.paritybit.ca/blog/making-my-own-vim-statusline +=> https://www.paritybit.ca/blog/self-hosting-email 11: https://www.paritybit.ca/blog/self-hosting-email +=> https://www.paritybit.ca/blog/my-first-ctf 12: https://www.paritybit.ca/blog/my-first-ctf + +I am *deep* in the rabbit hole now... + +*This is my eighty-fourth post for the #100DaysToOffload[13] challenge. You can learn more about this challenge over at https://100daystooffload.com[14][15].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 13: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 14: https://100daystooffload.com +=> https://100daystooffload.com 15: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-lwn-theme.gmi b/gemini/pages/blog/my-lwn-theme.gmi @@ -0,0 +1,109 @@ +## My LWN Theme + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-22 | + <b>Last Updated:</b> 2020-06-22 +</div> +``` + +A recent blog post by Amolith[1] 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'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'd post about it too in case people are looking for more theme ideas: + +=> https://secluded.site/lwn-theming/ 1: https://secluded.site/lwn-theming/ + +### Display Preferences + +```table ++----------------------------------------------+-----------+ +| Option | Value | ++==============================================+===========+ +| Page background colour | `#25252a` | ++----------------------------------------------+-----------+ +| Left column background | `#36363a` | ++----------------------------------------------+-----------+ +| Middle column background | `#36363a` | ++----------------------------------------------+-----------+ +| Headline background | `#36363a` | ++----------------------------------------------+-----------+ +| Form/byline background | `#36363a` | ++----------------------------------------------+-----------+ +| Sidebar background | `#36363a` | ++----------------------------------------------+-----------+ +| Text colour | `#cccccc` | ++----------------------------------------------+-----------+ +| Link colour | `#83b3d8` | ++----------------------------------------------+-----------+ +| Visited link colour | `#a696cc` | ++----------------------------------------------+-----------+ +| Quoted text (in email) colour | `#dc00dc` | ++----------------------------------------------+-----------+ +| Old (seen) comment background colour | `#111111` | ++----------------------------------------------+-----------+ +| Navigation box on printable page | Checked | ++----------------------------------------------+-----------+ +| Minimum width of main text column (em) | `40` | ++----------------------------------------------+-----------+ +| Maximum width of main text column (em) | `50` | ++----------------------------------------------+-----------+ +| Display old parent in unread comments screen | Unchecked | ++----------------------------------------------+-----------+ +``` +### New page engine preferences + +```table ++---------------------------------------------+----------------------+ +| Option | Value | ++=============================================+======================+ +| Use the new page engine | Checked | ++---------------------------------------------+----------------------+ +| Left column color | `#36363a` | ++---------------------------------------------+----------------------+ +| Maximum width for handset presentation (em) | `48` | ++---------------------------------------------+----------------------+ +| Fixed navigation menu on small screens | Checked | ++---------------------------------------------+----------------------+ +| Font family to use | `browser-determined` | ++---------------------------------------------+----------------------+ +``` +### Quoted text preferences + +```table ++------------------------+-----------+ +| Option | Value | ++========================+===========+ +| Quoted text style | `italic` | ++------------------------+-----------+ +| Quoted text weight | `normal` | ++------------------------+-----------+ +| Quoted text colour | `#bb5555` | ++------------------------+-----------+ +| Quoted text background | `#25252a` | ++------------------------+-----------+ +``` +### Screenshots + +```html +<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> +``` + +```html +<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> +``` + +### Conclusion + +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's a good reason to subscribe to them. + +*This is my fifty-second post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-new-t420s.gmi b/gemini/pages/blog/my-new-t420s.gmi @@ -0,0 +1,101 @@ +## My New T420s + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-15 | + <b>Last Updated:</b> 2020-06-26 +</div> +``` + +***Update**: Add two new photographs from after the trackpad sticker arrived.* + +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'm glad I looked when I did. + +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's not like I'm going anywhere any time soon. + +Here are the specifications it came with: + +* Thinkpad T420s +* Intel Core i5-2520M +* 1600x900 TN Screen +* 4GB DDR3 +* 128GB Crucial SSD +* Ports: * 1 DisplayPort * 1 VGA * 1 Multi card reader * 2 USB 2.0 Ports (with 1 always-on charge port) * 1 USB 3.0 Port * Gigabit ethernet * 3.5mm Audio jack +* Weight: 1.771kg or 3.904lbs + +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't get me started, I've been having a number of issues with it recently[1]). + +=> https://social.paritybit.ca/web/statuses/104350278767001051 1: https://social.paritybit.ca/web/statuses/104350278767001051 + +The screen is definitely nowhere near as good as the 1080p IPS display I have on my T440s, but it's still a matte screen, the resolution is not bad and I can live with the viewing angles. It's an alright screen overall. + +The keyboard, on the other hand, is amazing. It's the classic keyboard used on Thinkpads before the switch to chiclet style keys starting with the models after this one. It's an absolute pleasure to type on though definitely louder than the keyboard on my T440s. + +The other distinguishing feature of this and older models of Thinkpads is the Thinklight. Instead of having a backlit keyboard, there's a light at the top of the screen which shines down on the keyboard. I think it's a much better solution since it illuminates the surrounding area a little bit more and it feels less straining on the eyes. It's basically a tiny lamp. + +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'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. + +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'm hesitatnt to buy a new battery because it's quite expensive and, since I already have my T440s I don'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. + +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. + +Here are a couple pictures of it: + +```html +<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> +``` + +```html +<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> +``` + +```html +<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> +``` + +```html +<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> +``` + +```html +<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> +``` + +```html +<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> +``` + +[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 "posted" date on this post. + +*This is my forty-sixth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-preferred-fediverse-mobile-client.gmi b/gemini/pages/blog/my-preferred-fediverse-mobile-client.gmi @@ -0,0 +1,36 @@ +## My Preferred Fediverse Mobile Client + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-10 | + <b>Last Updated:</b> 2020-08-10 +</div> +``` + +After switching to Pleroma, the Tusky app felt too Mastodon-like and was missing some of the features that Pleroma brings to the table. Luckily a1batross@expired.mentality.rip[1] came to the rescue by forking Tusky to create Husky, a client that behaves just like Tusky, but with more Pleroma features and a more Pleroma-like appearance. + +=> https://expired.mentality.rip/users/a1batross 1: https://expired.mentality.rip/users/a1batross + +```html +<figure> + <a href="/img/husky-screenshot.png"><img + src="/img/husky-screenshot-thumb.png"/></a> + <figcaption>A screenshot of the Husky app.</figcaption> +</figure> +``` + +Some of the additional features I've noticed Husky adds over Tusky are things such as Markdown/HTML/BBCode formatting for statuses, emoji reaction support, and no attachment limits. All of these features are present in Pleroma but not in Mastodon, so they were missing from Tusky. Furthermore, the Pleroma theming makes it feel like I'm using a Pleroma app instead of a Mastodon app, even if they work exactly the same on the back-end. + +Otherwise, the apps are quite similar and the Husky fork hasn't differed much from Tusky. Both still offer scheduled toots, bookmarks, lists, the ability to edit basic profile information, and so on. I definitely recommend the Husky app if you're on a Pleroma instance and looking for the exact same experience as Tusky but with more of a Pleroma feel and the extra Pleroma features. + +View the Husky source code here[2]. The application can be downloaded for Android from F-Droid[3]. + +=> https://github.com/FWGS/Husky 2: https://github.com/FWGS/Husky +=> https://f-droid.org/en/packages/su.xash.husky/ 3: https://f-droid.org/en/packages/su.xash.husky/ + +*This is my ninetieth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-todo-solution.gmi b/gemini/pages/blog/my-todo-solution.gmi @@ -0,0 +1,45 @@ +## My TODO Solution + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-08 | + <b>Last Updated:</b> 2020-07-08 +</div> +``` + +Yesterday I posted about why I don't think TODO lists or applications are useless[1]. Today, I want to talk about my TODO solution or what I do to keep myself organized. + +=> https://www.paritybit.ca/blog/are-todo-applications-a-waste-of-time 1: https://www.paritybit.ca/blog/are-todo-applications-a-waste-of-time + +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. + +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's vintage vi which I use to finely craft my text files. + +By "literal TODO lists" 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: + +``` +Thursday, 1 January, 1970 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +○ Lunch with Brian and Ken @ 12:30 +□ Create UNIX time +■ Refill TTY with paper +□ Destroy undergrads in Spacewar! +``` + +An empty square `□` represents a task that is yet to be completed. A filled in square `■` represents a task that has been completed. Similarly, an empty circle `○` and a filled circle `●` 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. + +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't complete a task written down on one day, I'll just write down the same task (or what'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. + +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. + +So, that'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'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 sending me a link to a response blog post[2] or by mentioning me on Mastodon[3]. + +=> mailto:jbauer@paritybit.ca 2: mailto:jbauer@paritybit.ca +=> https://social.paritybit.ca/@jbauer 3: https://social.paritybit.ca/@jbauer + +*This is my sixty-fourth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/my-top-10-most-used-commands.gmi b/gemini/pages/blog/my-top-10-most-used-commands.gmi @@ -0,0 +1,51 @@ +## My Top 10 Most Used Commands + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-21 | + <b>Last Updated:</b> 2020-08-21 +</div> +``` + +Another fun thing I came across recently, this time on r/linux: What are your top 10 most used CLI commands?[1]. I know I should stop browsing Reddit... it's just such a good time-waster. + +=> https://old.reddit.com/r/linux/comments/idrfo3/for_fun_what_are_your_top_10_most_used_cli/ 1: https://old.reddit.com/r/linux/comments/idrfo3/for_fun_what_are_your_top_10_most_used_cli/ + +I was curious to see which commands I run most often so I ran the following on my main desktop: + +```bash +history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10 +``` + +It came up with the following: + +``` +1080 ls +832 git +769 vi +708 cd +452 sudo +280 ./compile +259 rm +215 ssh +110 config +109 mv +``` + +You can probably guess what I do most with my computer... + +Most of them are standard commands except for `./compile` and `config`. `./compile` is what I run when I compile anything for my website (like this blog post you're reading, for example) and `config` is the alias I have to work with the git repository I have for my dotifles[2]. + +=> https://www.paritybit.ca/blog/how-i-manage-my-dotfiles 2: https://www.paritybit.ca/blog/how-i-manage-my-dotfiles + +I'm curious what your most commonly used CLI commands are. Let me know in this thread on the Fediverse[3] (or by email[4], if you want). + +=> https://pleroma.paritybit.ca/notice/9yMX21YNjbElElYgUq 3: https://pleroma.paritybit.ca/notice/9yMX21YNjbElElYgUq +=> mailto:jbauer@paritybit.ca 4: mailto:jbauer@paritybit.ca + +*This is my ninety-fifth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 5: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/new-desktop-checklist.gmi b/gemini/pages/blog/new-desktop-checklist.gmi @@ -0,0 +1,23 @@ +## New Desktop Checklist + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-13 | + <b>Last Updated:</b> 2020-07-13 +</div> +``` + +Similar to the list of things I need to do to set up a server[1], setting up a desktop system is relatively simple (especially now that I've created a script that does a lot of it for me). Below is a list of basic things I do when setting up a new Debian system on one of my laptop or desktop computers: + +=> gemini://paritybit.ca/blog/new-server-checklist 1: /blog/new-server-checklist + +<input type="checkbox" id="1"><label for="1">Install git: `sudo apt install git`</label><br> <input type="checkbox" id="2"><label for="2">Get the deployment script: `git clone https://git.sr.ht/~jbauer/deploy-system`</label><br> <input type="checkbox" id="3"><label for="3">Run the deployment script: `./deploy-system/deploy-system.sh`</label><br> <input type="checkbox" id="4"><label for="4">Customize slstatus to the hardware of the system, re-install and restart slstatus.</label><br> <input type="checkbox" id="5"><label for="5">Copy in KeepassXC databases and configure KeepassXC.</label><br> <input type="checkbox" id="6"><label for="6">Customize Firefox with extensions and activate KeepassXC-browser.</label><br> <input type="checkbox" id="7"><label for="7">Install microcode/firmware for processor/wifi chip if needed.</label><br> + +Unfortunately the setup script which does the hard work for me doesn't work for non-Debian systems, but right now Debian is the only distribution I use full-time. If I switch to Alpine or Gentoo then I'll make and post scripts for those too. + +*This is my sixty-ninth (nice!) post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/new-server-checklist.gmi b/gemini/pages/blog/new-server-checklist.gmi @@ -0,0 +1,67 @@ +## New Server Checklist + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-12 | + <b>Last Updated:</b> 2020-07-12 +</div> +``` + +Setting up a new server is a really simple and straightforward process for me. As of right now, I pretty much exclusively use Debian servers for their stability, readily-available support, and package availability and this is what I do to set up a new server: + +### Checklist + +<input type="checkbox" id="1"><label for="1">Copy ssh public key to server with `ssh-copy-id`</label><br> <input type="checkbox" id="2"><label for="2">Disable SSH password authentication and root login</label><br> <input type="checkbox" id="3"><label for="3">Set SSH port to 56022</label><br> <input type="checkbox" id="4"><label for="4">Set desired mirrors in `/etc/apt/sources.list`</label><br> <input type="checkbox" id="5"><label for="5">Set a static IP in `/etc/network/interfaces` (see Static IP Example)</label><br> <input type="checkbox" id="6"><label for="6">Run the following (leave out `qemu-quest-agent` if not VM):</label><br> + +```bash +sudo apt update && sudo apt -y upgrade && sudo apt install \ + tmux htop vim postfix qemu-guest-agent unattended-upgrades nftables \ + && sudo apt --purge autoremove vim-tiny nano iptables +``` + +<input type="checkbox" id="7"><label for="7">Configure unattended upgrades with "origin=*", remove unused dependencies, automatic reboot at 02:00</label><br> <input type="checkbox" id="8"><label for="8">Configure nftables firewall (see Base nftables Configuration)</label><br> <input type="checkbox" id="9"><label for="9">Reboot</label><br> + +### Static IP Example + +``` +allow-hotplug <interface> +iface <interface> inet static + address 10.0.0.{2..254} + netmask 255.255.255.0 + gateway 10.0.0.1 +``` + +### Base nftables Configuration + +``` +#!/usr/sbin/nft -f + +flush ruleset + +table inet filter { + chain INPUT { + type filter hook input priority 0; policy drop; + ct state { established, related } accept + ct state invalid drop + iif "lo" accept + tcp dport {56022} accept + ip protocol icmp limit rate 1/second accept + counter packets 0 bytes 0 drop + } + chain OUTPUT { + type filter hook output priority 0; policy accept; + counter packets 0 bytes 0 accept + } + chain FORWARD { + type filter hook forward priority 0; policy drop; + counter packets 0 bytes 0 drop + } +} +``` + +*This is my sixty-eighth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/nope-back-to-st.gmi b/gemini/pages/blog/nope-back-to-st.gmi @@ -0,0 +1,40 @@ +## Nope, Back to st + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-27 | + <b>Last Updated:</b> 2020-08-27 +</div> +``` + +I've been using Alacritty for about a month since I switched to it from st[1] back at the end of July. It's been a solid terminal, but it has one major drawback and one minor annoyance which have drawn me once again back to st. + +=> https://www.paritybit.ca/blog/switching-to-alacritty 1: https://www.paritybit.ca/blog/switching-to-alacritty + +In the blog post I linked above, I mentioned that Alacritty uses a lot more RAM compared to st. Granted, Alacritty does have a lot of features compared to st, but it's not like I made any use of them nor can it really justify RAM usage that is this high: + +``` + 22.0 MiB + 25.2 MiB = 47.2 MiB st (4) + 59.1 MiB + 84.4 MiB = 143.6 MiB alacritty (4) +``` + +RAM usage was measured with `ps_mem`. Yep, that's four st windows open and four Alacritty windows open. One of those st windows is the terminal in which I'm writing this blog post, and I also ran `ps_mem` in an st window. All of the terminals were freshly opened. + +It's not uncommon for me to have multiple terminal windows open like this. I'll often have `newsboat`, `aerc`, `weechat`, two or more development terminals, and a scratchpad terminal all open at once. I also tend to jump between what I'm working on so I'll frequently have something like four terminal windows open just for development as I'm working on two or three separate things at once. I might have 24GB of RAM on my desktop machine, but I'd still rather not have 0.5-1.0GB taken up by just terminal windows (this can easily happen when they have a lot of lines in their scrollback buffers). + +My minor gripe with Alacritty is that it's configured in YAML. Sure, I'm not changing my configuration often, but I still dislike it and prefer the method of configuring st over writing YAML. Besides, the two issues that I noted about st: crashing when displaying colour emoji and the delete key not working right in SSH sessions, are easy to work around. + +The emoji problem is simply solved by either installing the `libxft-bgra` package, a patched version of libxft which can be found[2] as a `.deb` package or in the Arch User Repositories, or by installing the Symbola font (`ttf-symbola` for Arch or `fonts-symbola` for Debian) which will be used as the font for rendering emoji and works just fine without `libxft-bgra`. + +=> https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 2: https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 + +Regarding the delete key, I was already using `set enable-keypad on` in my `.inputrc` which fixes the problem locally, but in an SSH session all that is required is to run `tput smkx` and the delete key works on the remote server normally. Given how rarely I'm using the delete key on a remote server, this is not a big deal. + +With all that Alacritty has to offer, I just haven't realized any benefit over using st. st is very nice to both use and configure and I simply don't need the features Alacritty has. I haven't noticed it being any faster than st, it's noticeably slower to launch than st, and it uses a lot more RAM than st. + +*This is my ninety-seventh post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 3: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/paying-for-software.gmi b/gemini/pages/blog/paying-for-software.gmi @@ -0,0 +1,49 @@ +## Paying for Software + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-25 | + <b>Last Updated:</b> 2020-05-25 +</div> +``` + +*This post is inspired by a recent discussion I had on Mastodon[1].* + +=> https://social.paritybit.ca/web/statuses/104202591060926966 1: https://social.paritybit.ca/web/statuses/104202591060926966 + +Most of the world now runs on free software; that'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 GPL[2] (section 6) explicitly includes language which would allow one make money off of one's software while still keeping it free and open source. + +=> https://www.gnu.org/licenses/gpl-3.0.html 2: https://www.gnu.org/licenses/gpl-3.0.html + +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 OpenSSL[3] and GNUPG[4] (news article links), which are used by multi-billion-dollar companies and critical to our digital infrastructure, typically have to wait until they're in a funding crisis to get the money they desperately need to keep developing and maintaining their software. + +=> https://arstechnica.com/information-technology/2014/04/tech-giants-chastened-by-heartbleed-finally-agree-to-fund-openssl/ 3: https://arstechnica.com/information-technology/2014/04/tech-giants-chastened-by-heartbleed-finally-agree-to-fund-openssl/ +=> https://www.propublica.org/article/the-worlds-email-encryption-software-relies-on-one-guy-who-is-going-broke 4: https://www.propublica.org/article/the-worlds-email-encryption-software-relies-on-one-guy-who-is-going-broke + +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'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 ElementaryOS[5] 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. + +=> https://elementary.io/ 5: https://elementary.io/ + +I try to give back to developers (and artists, but perhaps that's a discussion for a different blog post) as much as I possibly can. For example, I spend $2 USD per month for SourceHut[6], I have a $3.50 USD per month LWN.net[7] subscription, I donate $3.50 CAD per month to Wikipedia[8] and $25 per year to the Electronic Frontier Foundation[9], and, before I self-hosted my email, I didn't hesitate to pay ProtonMail[10] for those services either. Now that I am self-hosting, I plan to donate $20 CAD to the creator of OpenSMTPD[11] which is a core part of that infrastructure. + +=> https://sourcehut.org/ 6: https://sourcehut.org/ +=> https://lwn.net 7: https://lwn.net +=> https://www.wikipedia.org 8: https://www.wikipedia.org +=> https://www.eff.org/ 9: https://www.eff.org/ +=> https://protonmail.com/ 10: https://protonmail.com/ +=> https://poolp.org/ 11: https://poolp.org/ + +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. + +If you really can't afford to give anything, that'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's a huge confidence boost when someone praises something you do and it can greatly help morale. + +Essentially, the point is: don'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's reasonable that they deserve compensation for their efforts. GitHub has taken steps to improve the situation with their sponsorship program[12], 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. + +=> https://github.com/sponsors 12: https://github.com/sponsors + +*This is my twenty-eighth post for the #100DaysToOffload[13] challenge. You can learn more about this challenge over at https://100daystooffload.com[14][15].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 13: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 14: https://100daystooffload.com +=> https://100daystooffload.com 15: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/posting-statuses-on-pleroma-with-a-shell-script.gmi b/gemini/pages/blog/posting-statuses-on-pleroma-with-a-shell-script.gmi @@ -0,0 +1,51 @@ +## Posting Statuses on Pleroma with a Shell Script + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-09 | + <b>Last Updated:</b> 2020-08-09 +</div> +``` + +With the help of alex@gleasonator.com[1], I was able to figure out finally how to get an OAuth access token so that I could post status updates whenever I publish a new blog post just like I used to do when I was running Mastodon. In reality it was actually very simple to do, but I was missing something that could be done because it was undocumented. + +=> https://gleasonator.com/@alex 1: https://gleasonator.com/@alex + +Everything that I tried is documented in the issue on the Pleroma GitLab[2] in case you're curious. + +=> https://git.pleroma.social/pleroma/pleroma/-/issues/2031 2: https://git.pleroma.social/pleroma/pleroma/-/issues/2031 + +The right way to do what I wanted to do was, after creating an app with something like: + +```bash +curl -s -S -i -X POST \ + -F client_name="Blog Post Publishing Script" \ + -F redirect_uris="urn:ietf:wg:oauth:2.0:oob" \ + -F scopes="read write" \ + https://pleroma.paritybit.ca/api/v1/apps +``` + +Do the following to get an access token: + +```bash +curl -s -S -i -X POST \ + -F client_id="LjLZPKhnDnwwrleqa85ODJXzhOubLF9bSi6TDyW602A" \ + -F client_secret="<secret>" \ + -F redirect_uri="urn:ietf:wg:oauth:2.0:oob" \ + -F scope="read,write" \ + -F grant_type="password" \ + -F username="jbauer" \ + -F password="<account_password>" \ + https://pleroma.paritybit.ca/oauth/token +``` + +As opposed to everything else that I was trying to do with visiting the webpage and whatnot. It really is this simple. Now I just put this access token into my publish script[3] and it will automatically post a status update whenever I publish a new blog post. + +=> https://git.paritybit.ca/paritybit.ca/tree/publish 3: https://git.paritybit.ca/paritybit.ca/tree/publish + +*This is my eighty-ninth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/preparing-to-self-host-email.gmi b/gemini/pages/blog/preparing-to-self-host-email.gmi @@ -0,0 +1,45 @@ +## Preparing to Self-Host Email + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-15 | + <b>Last Updated:</b> 2020-05-15 +</div> +``` + +Email is one of the oldest and most fundamental underpinnings of the Inernet as a whole. Unfortunately, it has a reputation of being very difficult to self-host, let alone self-host correctly. I've seen many online talk about the issues they've run into getting their mail past the spam filters of the Big Mail Corps or keeping their servers safe against the onslaught of crackers trying to gain access which eventually leads them to give up on self-hosting email and return to using Big Mail Corps. + +Despite all this, I think that self-hosting email is one of the best ways to take control of your data and be digitally independent. Regardless of which email provider you choose, there is always the posibility that they could shut down, intercept and analyze your emails and sell that data to advertisers, or to block you from using their service. If you're dependent on email (which I'm sure many of us are to a certain extent), this can be a serious problem. + +I am currently with ProtonMail. My only complaint, now that they've open-sourced all of their client applications, is that I have to use the ProtonMail Bridge, and therefore be a paying user, in order to be able to interact with my email using open protocols like IMAP and SMTP. It's also somewhat annoying that I have to have a separate (electron-based) application running any time I wanted to send or receive email. I understand why they do it, but it's still something I wish I didn't have to deal with. Besides, I'm also coming to terms with the fact that email is almost a completely public form of communication; the only way that I can be sure that my communications are secure is by using PGP-based encryption with my emails, or a separate secure messaging system like Matrix. I wish this wasn't the case, but with nearly every email passing through Big Mail Corp's servers and being stored unencrypted in most others' mailboxes, it seems an unavoidable truth. + +This is the first time I'll attempt to properly self-host email. I've previously set up mail communication inside my LAN and I have experience with SPF, DKIM, and DMARC, but I've never set up proper mail from scratch. I plan to run OpenBSD, OpenSMTPD, Dovecot, and Rspamd; OpenBSD because of its reputation for taking security *very* seriously and because I want to become more familiar with the BSD ecosystem, OpenSMTPD because it seems very easy to configure when compared with Postfix or Sendmail (though I know Postfix isn't that hard from experience), Dovecot because right now it seems to be the best software available for doing what it does, and Rspamd because it's what seems to be recommended the most alongside the other options I've listed. + +I plan to run my mailserver using a hosted VPS because I don't have a static IP at my house and I need more reliable infrastructure for a service as critical as email. Although this somewhat lessens my digital independence, since the VPS provider could theoretically shut down or ban me, I think it's the best solution given my circumstances right now. Right now, I'm going with Vultr because they've been highly recommended to me, they have good hosting rates, and they offer deployment of OpenBSD VPSes. Here is a referral link[1] if you'd like to give them a try while supporting me. It will give you a $100 credit which is a good amount to try the service without commitment. If, for whatever reason, the link above doesn't work, here is an alternative referral link[2] which won't give you a credit but does still reward me. + +=> https://www.vultr.com/?ref=8575855-6G 1: https://www.vultr.com/?ref=8575855-6G +=> https://www.vultr.com/?ref=8575845 2: https://www.vultr.com/?ref=8575845 + +As the final component, I plan to first trial a setup using a spare domain which I own: `jbauer.ca`, just in case things don't work out well. I wouldn't want to lose access to my current email by messing up my first time self-hosting. I am also considering using that domain permanently for personal mail if things work out since it's slightly easier than spelling out `paritybit.ca` for people, but we'll see. + +Also, here are some of the resources I've been reading to prepare for self-hosting email, in case you also want to give it a go: + +* Yarmo's Blog - Selfhost email[3] +* Setting up a mail server with OpenSMTPD, Dovecot and Rspamd[4] +* You should not run your mail server because mail is hard[5] +* Decentralised SMTP is for the greater good[6] +* Vultr - OpenBSD mail server with OpenSMTPD, Dovecot, Rspamd, and Rainloop[7] +* Setting Up Your Own Email Server With OpenBSD[8] + +*This is my twentieth post for the #100DaysToOffload[9] challenge. You can learn more about this challenge over at https://100daystooffload.com[10][11].* + +=> https://yarmo.eu/blog/selfhost-email 3: https://yarmo.eu/blog/selfhost-email +=> https://poolp.org/posts/2019-09-14/setting-up-a-mail-server-with-opensmtpd-dovecot-and-rspamd/ 4: https://poolp.org/posts/2019-09-14/setting-up-a-mail-server-with-opensmtpd-dovecot-and-rspamd/ +=> https://poolp.org/posts/2019-08-30/you-should-not-run-your-mail-server-because-mail-is-hard/ 5: https://poolp.org/posts/2019-08-30/you-should-not-run-your-mail-server-because-mail-is-hard/ +=> https://poolp.org/posts/2019-12-15/decentralised-smtp-is-for-the-greater-good/ 6: https://poolp.org/posts/2019-12-15/decentralised-smtp-is-for-the-greater-good/ +=> https://www.vultr.com/docs/an-openbsd-e-mail-server-using-opensmtpd-dovecot-rspamd-and-rainloop 7: https://www.vultr.com/docs/an-openbsd-e-mail-server-using-opensmtpd-dovecot-rspamd-and-rainloop +=> https://codedharma.com/posts/openbsd_email_1/ 8: https://codedharma.com/posts/openbsd_email_1/ +=> https://pleroma.paritybit.ca/tag/100daystooffload 9: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 10: https://100daystooffload.com +=> https://100daystooffload.com 11: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/qutebrowser-to-firefox.gmi b/gemini/pages/blog/qutebrowser-to-firefox.gmi @@ -0,0 +1,21 @@ +## Why I Switched Back to Firefox from Qutebrowser + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2019-06-20 | + <b>Last Updated:</b> 2019-06-20 +</div> +``` + +I've been using qutebrowser for about six months now as my primary browser after switching to it from GNU/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. + +Privacy online is something that is very important to me and should be important to everyone who uses the internet. It's one of the reasons I donate to the <a href="https://www.eff.org">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'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="https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/">Privacy Badger</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/">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. + +Another big factor is that some sites which I would use would have elements that wouldn'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'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'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'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. + +I also found Firefox much easier to develop on compared to qutebrowser. It could be because I'm just not used to the Chromium-family set of web development tools but I find Firefox'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. + +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'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't be as full-featured as a browser designed around those controls, I have found the one I am using—<a href="https://addons.mozilla.org/en-US/firefox/addon/vim-vixen/">Vim Vixen</a>—to be good enough for my uses. + +Overall, qutebrowser still is a commendable browser and, if the reasons I listed above don't really concern you that much, I would recommend checking it out. Unfortunately it didn't fit well with what I wanted out of a browser and that's why I switched from qutebrowser to Firefox. +\ No newline at end of file diff --git a/gemini/pages/blog/refining-my-neomutt-config.gmi b/gemini/pages/blog/refining-my-neomutt-config.gmi @@ -0,0 +1,54 @@ +## Refining My NeoMutt Configuration + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-05 | + <b>Last Updated:</b> 2020-05-05 +</div> +``` + +```html +<figure> + <a href="/img/neomutt.png"><img src="/img/neomutt-thumb.png"/></a> + <figcaption>Screenshot of NeoMutt on my system.</figcaption> +</figure> +``` + +I use NeoMutt as my email client. It's fast, treats `text/plain` 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's a lot that can be played with. Over the past few days, I've been tinkering and tweaking with it to make my email experience on the command line just a little bit better. + +One thing that I found annoying were `text/html` 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 + +```bash +text/html; $BROWSER %s; +``` + +to my `mailcap` file, I am able to open these bodies in Firefox from within NeoMutt. + +Another thing I found cumbersome was the handling of contacts through an aliases file. Instead, I opted to install and use `abook` 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 `neomuttrc` are: + +```bash +set query_command="abook --mutt-query '%s'" +macro index,pager a \ + "<pipe-message>abook --add-email-quiet<return>" \ + "Add this sender to abook" +bind editor <Tab> complete-query +``` + +Some other minor changes include: + +* Moving the colour configuration into its own file so that the main `neomuttrc` file is less cluttered. +* Changing the date format to the ISO standard YYYY-MM-DD with time now in the 24h clock. +* Cleaning up unused keybindings +* Moving my signature from my `~/docs` folder into `~/.config/neomutt` so that it can be tracked with git. + +You can view my dotfiles on sourcehut[1] or mirrored on git.paritybit.ca[2]. Don't hesitate to share suggestions or comments! + +=> https://git.sr.ht/~jbauer/dotfiles/tree/master/.config/neomutt 1: https://git.sr.ht/~jbauer/dotfiles/tree/master/.config/neomutt +=> https://git.paritybit.ca/jbauer/dotfiles/src/branch/master/.config/neomutt 2: https://git.paritybit.ca/jbauer/dotfiles/src/branch/master/.config/neomutt + +*This is my eleventh post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/reflecting-on-50-days-of-blogging.gmi b/gemini/pages/blog/reflecting-on-50-days-of-blogging.gmi @@ -0,0 +1,25 @@ +## Reflecting on 50 Days of Blogging + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-21 | + <b>Last Updated:</b> 2020-06-21 +</div> +``` + +I'm glad I decided to take part in this challenge when I saw Kev Quirk's toot some three months ago. It's given me the push I needed to stop keeping my post ideas and drafts on paper and just publish what I want to talk about. I've blogged for a near-continuous 50 days now so I want to reflect back on completing half of the 100DaysToOffload challenge. + +At first, I was very much concerned with keeping the one post per day cadence but, as the challenge went on, I became more concerned with making sure what I put out was actually what I wanted to put out rather than feeling like I was forced to write something, anything, just to get my post in for the day. This is exactly what Kev noted on the 100DaysToOffload site[1]; it's not about posting literally every day, just about getting more people to blog more regularly. I've taken breaks when I felt like I wasn't up to writing a new post and I think I've been all the better for it. + +=> https://100daystooffload.com 1: https://100daystooffload.com + +So far, aside from two posts early on, I think I've been happy with what I've been posting nearly every day. Through the challenge, I've been sharing thoughts and experiences on things like Vim, email, programming, computing, and general technology which is exactly what I wanted this blog to be about. I've also received emails from people thanking me for the things I've posted on my site and I've had great discussions with folks on Mastodon about the things I've posted. + +Participating in the challenge has been great for not only increasing the number of people who read what I write, but also for giving me that push to put my thoughts and opinions out into the world. It's helped me improve my writing skills, introduced me to cool, new people on the internet, and provided me an almost daily dopamine boost whenever I hit publish on a new post. The 100 day mark doesn't even seem so far away now... + +*This is my fifty-first post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/rewriting-my-static-site-generator.gmi b/gemini/pages/blog/rewriting-my-static-site-generator.gmi @@ -0,0 +1,36 @@ +## Rewriting My Static Site Generator + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-22 | + <b>Last Updated:</b> 2020-05-24 +</div> +``` + +After a brief, two day hiatus in posting to refill my creative juices, I'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'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. + +Previously, I was using `markdown` as the program to take my `.md` files and transform them into `.html` files. Unfortunately, it had a couple of issues: It wouldn't interpret triple-backticks as code blocks so I had to use `<pre><code>` anywhere I wanted a code block, and it would add empty `<p>` tags before and after `<img>` and `<figure>` tags. Additionally, using `pandoc` also enables me to add simple syntax highlighting for code blocks since it does syntax highlighting as part of the transformation process. + +I also took the time to make sure that the syntax highlighting colour scheme I'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 iceberg[1] colour scheme which I also use in Vim. + +=> https://cocopon.github.io/iceberg.vim/ 1: https://cocopon.github.io/iceberg.vim/ + +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. + +<em>**Update**: After further testing, I've switched from using `tput` to ANSI escape codes for colours, added the `-e` flag to the `sed` commands, and added a newline everytime I use the `a` or `i` command with `sed`. 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> + +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'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't require as many comments. Also, adding syntax highlighting only increased the size of my main CSS file by ~1kB. + +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. + +You can view the new script on SourceHut[2] (mirror[3]). If you really want to see the horrors of the old script, you'll find it lurking in the commit history. + +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/compile 2: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/compile +=> https://git.paritybit.ca/jbauer/paritybit.ca/src/branch/master/compile 3: https://git.paritybit.ca/jbauer/paritybit.ca/src/branch/master/compile + +*This is my twenty-sixth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/scripting-my-way-to-success.gmi b/gemini/pages/blog/scripting-my-way-to-success.gmi @@ -0,0 +1,39 @@ +## Scripting My Way to Success + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-08 | + <b>Last Updated:</b> 2020-06-08 +</div> +``` + +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. + +Yesterday, when I was curating my blogroll, I needed a way to update the list of blogs and feeds I follow on my links page[1]. Of course I didn'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 `generate-blogroll.sh` (view the script here[2]) which composes the export functionality of `newsboat`, the standard `awk`, `cut`, `tr`, `sort`, and `sed` utilities along with `vim`/`nvim`'s scripting abilities and `rsync` for uploading the changed files. + +=> gemini://paritybit.ca/links#blogroll 1: /links#blogroll +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/generate-blogroll.sh 2: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/generate-blogroll.sh + +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's done, it uploads the exported `blogroll.opml` file and the newly compiled `links.html` page. It's not portable to other websites but that doesn't matter at all because it's not supposed to be. I'm not creating a tool for someone else to use, I'm hacking out a script to perform a simple, repeatable function which would otherwise be a pain to do manually. + +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 `vim`'s scripting abilities, practiced my POSIX shell scripting skills, and had a bunch of fun. + +That'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 (I did for this site!). + +In addition to the blogroll script, I have a script to compile this website[3], a script to publish new blog posts[4], a script to update the site's uptime display[5], and even a script to handle uploading files to my webserver[6]. Those are just the scripts for this website! Some of them need to be rewritten for portability to other *nix systems, and some are from when I first started this site so they're not as good as my more recently-written scripts, but that's alright because they do the thing they're supposed to do and haven't failed me yet. + +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/generate-blogroll.sh 3: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/generate-blogroll.sh +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish 4: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/publish +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/tuptime-update.pl 5: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/tuptime-update.pl +=> https://git.sr.ht/~jbauer/paritybit.ca/tree/master/uploadwatch.sh 6: https://git.sr.ht/~jbauer/paritybit.ca/tree/master/uploadwatch.sh + +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's always a bonus. + +The next time you have a menial task to do, even if it's just a small one, give scripting a shot. It doesn'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! + +*This is my thirty-ninth post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 7: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/self-hosted-mail-now-live.gmi b/gemini/pages/blog/self-hosted-mail-now-live.gmi @@ -0,0 +1,30 @@ +## Self-Hosted Email is Now Live! + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-19 | + <b>Last Updated:</b> 2020-05-19 +</div> +``` + +Following my experiments with self-hosting email, which I posted about in a previous blog post[1], I've now migrated email for this domain off of ProtonMail and onto my mail server. + +=> gemini://paritybit.ca/blog/self-hosting-email 1: /blog/self-hosting-email + +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 `sysupgrade` followed by a `pkg_add -u` did the trick. + +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've set up aerc[2] with my mail account and I'm excited to now have completely hassle-free email. + +=> https://www.paritybit.ca/blog/trying-out-aerc 2: https://www.paritybit.ca/blog/trying-out-aerc + +As always, contact and GPG details can be found on the contact page[3]. My email address did not change and is still `jbauer@paritybit.ca`. I also made sure to have the appropriate RFC 2142[4] mailbox names for my domain, which are also listed on the contact page. + +=> gemini://paritybit.ca/contact 3: /contact +=> https://www.ietf.org/rfc/rfc2142.txt 4: https://www.ietf.org/rfc/rfc2142.txt + +*This is my twenty-fifth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/self-hosting-email.gmi b/gemini/pages/blog/self-hosting-email.gmi @@ -0,0 +1,65 @@ +## Self-Hosting Email + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-16 | + <b>Last Updated:</b> 2020-05-16 +</div> +``` + +I just finished setting up self-hosted email and it was the easiest thing ever. + +As I discussed in my previous blog post[1], I set up a VPS with Vultr[2] running OpenBSD (that's a regular referral link, this one will give you a $100 credit[3]). Following this guide from one of the developers of OpenSMTPD[4] (I think he may be the creator), 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. + +=> gemini://paritybit.ca/blog/preparing-to-self-host-email 1: /blog/preparing-to-self-host-email +=> https://www.vultr.com/?ref=8575845 2: https://www.vultr.com/?ref=8575845 +=> https://www.vultr.com/?ref=8575855-6G 3: https://www.vultr.com/?ref=8575855-6G +=> https://poolp.org/posts/2019-09-14/setting-up-a-mail-server-with-opensmtpd-dovecot-and-rspamd/ 4: https://poolp.org/posts/2019-09-14/setting-up-a-mail-server-with-opensmtpd-dovecot-and-rspamd/ + +To test the setup, I created the email address `me@jbauer.ca` 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: + +```html +<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> +``` + +I also used MXToolBox.com[5] to test that my mail server and DNS records were correctly configured. This service was invaluable since I can't test Port 25 connectivity to the mail server from my residential connection. + +=> https://mxtoolbox.com 5: https://mxtoolbox.com + +```html +<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> +``` + +As of yet, I haven't had much trouble getting my email delivered to different addresses from Big Mail Corps 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've confirmed that both Gmail and ProtonMail deliver my mail. Microsoft's Office 365 marked my IP as being spam—which is understandable since it'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: + +```html +<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> +``` + +I didn'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 `/etc/mail/aliases` file. If you want to set up your own mail server and wish to use virtual mail accounts, this tutorial from Vultr[6] discusses that. + +=> https://www.vultr.com/docs/an-openbsd-e-mail-server-using-opensmtpd-dovecot-rspamd-and-rainloop 6: https://www.vultr.com/docs/an-openbsd-e-mail-server-using-opensmtpd-dovecot-rspamd-and-rainloop + +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'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 `pf` instead of `nftables` for packet filtering, `rcctl` instead of `systemctl` for managing services, and other little things that are OpenBSD-specific. + +Now that I've done it, I can heartily recommend giving self-hosted email a shot. It's nowhere near as difficult and scary as it's made out to be and it rewards one with control over one's email data and infrastructure. I don'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's set up is standard system administration tasks. + +*This is my twenty-first post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 7: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/setting-up-a-gopher-site.gmi b/gemini/pages/blog/setting-up-a-gopher-site.gmi @@ -0,0 +1,41 @@ +## Setting Up a Gopher Site + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-12 | + <b>Last Updated:</b> 2020-05-12 +</div> +``` + +```html +<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 paritybit.ca Gopher homepage."/></a> +</figure> +``` + +Today I made my website available over the <a href="https://en.wikipedia.org/wiki/Gopher_(protocol)">Gopher protocol</a>! You can now access paritybit.ca at gopher://paritybit.ca[1] 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 Overbite Project[2]. + +=> gopher://paritybit.ca 1: gopher://paritybit.ca +=> https://gopher.floodgap.com/overbite/ 2: https://gopher.floodgap.com/overbite/ + +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. + +For my Gopher server, I chose Gophernicus[3] because it's actively maintained and has no dependencies. Many people on the Internet choose to use pygopherd[4] but that relies on Python 2 which was officially deprecated earlier this year. + +=> http://gophernicus.org/index.html 3: http://gophernicus.org/index.html +=> https://github.com/jgoerzen/pygopherd 4: https://github.com/jgoerzen/pygopherd + +It was really easy to install Gophernicus thanks to the excellent documentation. All I had to do was install `build-essential`, `debhelper`, and `libwrap0-dev` (the last one is optional), and then run `make deb` followed by `sudo apt install ../gophernicus_<version>.deb`. I edited the `/etc/default/gophernicus` config file and added the `-nx -nt -nq -no -nl -nu` options (see the README for what they do). + +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/Markdown document to Gopher-compatible syntax (if possible) so that I don't have to do a bunch of conversion by hand. Ideally, I would like to mirror this website over Gopher as much as possible. + +Gopher is refreshingly simple. If you're willing and able, give setting up a Gopher hole a shot! + +*This is my eighteenth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/setting-up-a-status-page.gmi b/gemini/pages/blog/setting-up-a-status-page.gmi @@ -0,0 +1,42 @@ +## Setting Up a Status Page + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-09 | + <b>Last Updated:</b> 2020-06-10 +</div> +``` + +***Update**: Fix up some grammar errors and improve wording.* + +I've wanted to have a status page for my services for a while so that others and I can get a quick look at which of them are experiencing downtime. Ideally, I would also receive notifications when unexpected downtime is expected. + +I figured I would use something like SmokePing or a simple set of scripts and a basic webpage but in either case I'd have to spend another $3.50-$5.00 per month on a VPS so that I'd have a unique host from which to monitor all the rest. I didn't particularly fancy spending that much just to ping my servers, so when I found out about UptimeRobot[1], I was very intrigued. + +=> https://uptimerobot.com/ 1: https://uptimerobot.com/ + +They provide status monitoring with various notification options and a hosted webpage with either a free or paid plan. The free plan allows one to receive email alerts, set up 50 monitors, and update each monitor as fast as once every 5 minutes. They appear to make their money off of providing the paid plan which allows monitoring an increased number of hosts as fast as once every minute among other things. + +After having a read through their Privacy Policy and deciding it seemed quite reasonable, I decided to make an account and try it out. I plan to stick with the free plan since I don't need any of the features that the paid plan is offering. + +The configuration panel on the site is very simple (in a good way). Everything is clearly laid out and very easy to navigate and interact with. Two factor authentication is offered and was painless to set up, and adding new hosts is very easy as is setting up the web page which displays a summary of your statistics. I set up my monitoring page at status.paritybit.ca[2]. + +=> https://status.paritybit.ca 2: https://status.paritybit.ca + +I looked around at this status page and noticed that it only transfers ~73KB of data with a cold cache which is quite good. This is with Google fonts blocked since I noticed that the site was making requests to the following URLs: + +``` +fonts.gstatic.com +fonts.googleapis.com +``` + +As much as I'd prefer if the site didn't make these third party requests, they are easy enough to blog using DNS filtering like PiHole or with uBlock Origin's custom filters. + +So far, my experience using the service has been very good. I like that both the service and configuration are simple and the web page it generates is not super heavy. I may, in future, roll my own status page but this seems like a sufficient solution for now. + +*This is my fortieth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/setting-up-gpg-keys-from-scratch.gmi b/gemini/pages/blog/setting-up-gpg-keys-from-scratch.gmi @@ -0,0 +1,146 @@ +## Setting Up GPG Keys from Scratch + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-17 | + <b>Last Updated:</b> 2020-05-17 +</div> +``` + +### Introduction + +***Disclaimer:** This isn't really supposed to be a comprehensive guide on how you should set up GPG, it's more a record of what I did and why. This post will inevitably become outdated in the future so please use good judgement when it comes to your security.* + +Now that I'm self-hosting mail and moving off of ProtonMail, I figured I need to actually properly figure out GPG so I can send and receive encrypted emails. It will also be essential as I get further involved in free and open source software development since GPG is commonly used to sign software releases, among other things. + +GPG is notorious for being quite complicated and not user-friendly. To assist in my GPG adventures, I enlisted the help of the Internet; mainly the Arch wiki[1]. + +=> https://wiki.archlinux.org/index.php/GnuPG 1: https://wiki.archlinux.org/index.php/GnuPG + +I previously played around with GPG so I could use it for encrypting local backups and for signing git commits. I wasn't using it seriously in any other respect so I began by `rm -rf`ing my `~/.gnupg` directory for a fresh start. I also set the `GNUPGHOME` environment variable to a directory on the SD card which I use specifically to store key data. On this SD card are key files, SSH keys, and now GPG keys all under LUKS encryption (don't worry, I keep many copies of this SD card on other cards, USB sticks, and hard drives). Having a separate portable medium for my keys makes it so that I only have to worry about updating what's on the card instead of what's on all of the machines on which I am using GPG. It's also technically a lot easier to hide or destroy, but I don't see myself realistically needing to do that. + +### Generating the Master Key + +Generating the master key is pretty straightforward. + +```bash +$ gpg --full-gen-key --expert +``` + +`--expert` is required because I wanted to use Elliptic Curve Cryptography[2] (`ed25519` keys in particular) instead of RSA since ECC keys are smaller for a similar level of security. From the article linked above: "a 256-bit elliptic curve public key should provide comparable security to a 3072-bit RSA public key". This will make typing in the key a lot easier and less error-prone should I have to restore it from paper backups. It's also fewer bits to send over the Internet when sharing my public keys. + +=> https://en.wikipedia.org/wiki/Elliptic-curve_cryptography 2: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography + +### Generating a Revocation Certificate + +It's very important to have a revocation certificate since it's what one publishes if their key is ever compromised or otherwise needs to be revoked. It's essentially a way for one to tell the world "under no circumstances should you use or trust this key." Unlike with subkeys, revoking a master key is much more significant since, once that becomes compromised or lost, one has to start again from scratch. + +```bash +$ gpg --gen-revoke --armor --output=revocation-certificate.asc <user-id> +``` + +Where `<user-id>` in this case is the email I specified when generating my key: `jbauer@paritybit.ca`. + +### Generating Subkeys + +Typically, one shouldn't be using their master key for every-day use. That's because one's master key is used for signing others' keys, issuing new keys, and it's the ultimate representation of one's GPG identity. Instead, one should use subkeys as it's far easier to revoke them and issue new ones in the case that they become compromised. + +I generated one subkey specifically for signing and one subkey specifically for encryption: + +```bash +$ gpg --edit-key --expert jbauer@paritybit.ca +>addkey +``` + +I also set a one month expiry on both of those subkeys. While I think having an expiring master key is overkill for my uses and would be too much hassle, having subkeys expire is useful in the case that access to those subkeys is lost. This allows me to be less neurotic about backing up my subkeys compared to backing up my master key. + +I chose a length of one month because it will keep me coming back to GPG regularly. This way, I can both make sure that my master key backups have not become corrupted without my knowledge and that I keep my GPG skills honed. It also gets me in the habit of doing monthly maintenance on my keyring. + +### Going Backup Crazy + +To make sure that my master key and revocation certificate stay as private as possible and to minimize the risk of me ever losing access to them, I went a little bit crazy with the number of backup copies I made. + +It's extremely important to have physical copies of both because digital media can fail over time in ways that are hard to detect until one needs to access the data. I printed my revocation certificate directly since it's just a short bit of ascii text and I printed out my master key using `paperkey`. Both of these pieces of paper went into my fire- and water-proof storage bag. + +```bash +$ gpg --export-secret-key jbauer@paritybit.ca > privkey.gpg +$ paperkey --secret-key privkey.gpg --output printed.txt +$ lpr printed.txt +$ rm privkey.gpg printed.txt +``` + +I also made several digital copies of my private key. First, I exported my master key using: + +```bash +$ gpg --export-secret-keys --armor jbauer@paritybit.ca > master.asc +``` + +Then, using GPG's symmetric encryption capabilities, I encrypted both it and my revocation certificate using a completely new, randomly generated passphrase: + +```bash +$ gpg -c master.asc +$ gpg -c revocation-certificate.asc +$ rm master.asc revocation-certificate.asc +``` + +I then put both of the new encrypted files: `master.asc.gpg` and `revocation-certificate.asc.gpg` onto two separate CDs—one went into my fireproof bag—and onto a floppy disk which also went into my fireproof bag. As soon as I have a free USB key, I'll be making a copy on that too. + +### Uploading My Keys to a Keyserver + +Using a keyserver allows for both easier access to my public keys for others as well as convenient offsite storage for the public part of my master key which is required to restore the private part of my master key using `paperkey`. A while back, an attack on the SKS keyserver network was discovered[3] which caused many to become apprehensive about using keyservers. A solution proposed in the linked article was to use keys.openpgp.org[4] which is a new keyserver designed to mitigate the issues with the old keyservers. Following the given instructions[5], I uploaded my public keys so others should now be able to find me by searching for my email. Any time I need to use my master key (e.g. to sign another's key or renew my subkeys), I can re-sync my public keys with the keyserver so they always stay up to date in others' keyrings. + +=> https://gist.github.com/rjhansen/67ab921ffb4084c865b3618d6955275f 3: https://gist.github.com/rjhansen/67ab921ffb4084c865b3618d6955275f +=> https://keys.openpgp.org 4: https://keys.openpgp.org +=> https://keys.openpgp.org/about/usage 5: https://keys.openpgp.org/about/usage + +### Configuring GPG and GPG-Agent + +This is pretty simple and straightforward. Taking a few notes from the Arch wiki and setting options that I wanted to avoid having to type each time I ran `gpg`, I came up with the following configuration files: + +``` +gpg.conf +-------- +keyserver hkps://keys.openpgp.org +keyid-format long +with-fingerprint +with-subkey-fingerprint +personal-digest-preferences SHA512 +cert-digest-algo SHA512 +default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed +``` + +``` +gpg-agent.conf +-------------- +# Cache for a day +max-cache-ttl 86400 +default-cache-ttl 86400 +# Use curses-based pinentry program +pinentry-program /usr/bin/pinentry-curses +``` + +### Deleting My Master Key + +All of that backing up and making offline copies of my master key is so that I can do daily tasks with just my subkeys. To make this make sense, I have to delete my master key out of my keyring so it only exists offline until I need to use it. Since GnuPGv2.1, this is fairly straightforward: + +```bash +$ gpg --list-keys --with-keygrip +$ rm /media/jbauer/keys/gpg/private-keys-v1.d/<keygrip>.key +``` + +After decrypting it from one of my backups, I can then later restore this key (which I'll have to do at least once a month) by re-importing it with: + +```bash +$ gpg --import master.asc +``` + +### Conclusion + +Without a doubt, using GPG is quite complicated. There are a variety of decisions that one can make depending on their desired level of security or anonymity which can be overwhelming if one doesn't have much experience. I've spent probably 3 or 4 hours making sure that my processes are sound and making sure I'm doing everything right. To be honest, since I'm relatively new to using GPG seriously, I won't be 100% sure I'm doing things right until I can experience using it in the real world. + +*This is my twenty-second post for the #100DaysToOffload[6] challenge. You can learn more about this challenge over at https://100daystooffload.com[7][8].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 6: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 7: https://100daystooffload.com +=> https://100daystooffload.com 8: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/setting-up-weechat-again.gmi b/gemini/pages/blog/setting-up-weechat-again.gmi @@ -0,0 +1,61 @@ +## Setting Up WeeChat Again with weechat-matrix + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-22 | + <b>Last Updated:</b> 2020-08-22 +</div> +``` + +I used to have WeeChat set up and configured for IRC, but I really don't have much of a reason to use IRC. If I'm getting more into FOSS development though, I'd want to have my preferred client up and running again. Plus, if I want to access support resources offered through IRC or get into communicating more with the communities present on IRC—since those tend to be quite technical and are filled with people I think I might enjoy associating with—I'd want to be able to jump in quickly with a client already set up. + +I used to use irssi, but found WeeChat to have saner defaults out of the box and be easier to work with in general. Plus, I can use plugins like weechat-matrix to be able to use the Matrix protocol in WeeChat without needing to use a bloated, slow, memory-hungry electron app like Element. + +I already have a Freenode account from my previous IRC adventures so I set it up in WeeChat with: + +``` +/server add freenode chat.freenode.net/6697 -ssl +/set irc.server.freenode.nicks "jbauer" +/set irc.server.freenode.command "/msg NickServ identify <my_password>" +``` + +I also made a couple of customizations to the look and feel of WeeChat: + +``` +/set weechat.bar.status.color_bg 235 +/set weechat.bar.title.color_bg 235 +/set weechat.color.separator grey +/set weechat.color.chat_nick_self _blue +/set weechat.color.status_time *white +/set buflist.format.buffer_current "${color:,236}${format_buffer}" +/alias add b /buffer +``` + +In addition to that, I installed the weechat-notify-send[1] plugin which allows me to receive desktop notifications when I get a new message in WeeChat. + +=> https://github.com/s3rvac/weechat-notify-send 1: https://github.com/s3rvac/weechat-notify-send + +Another thing I wanted to try was weechat-matrix[2], a set of Python scripts which allows one to use a Matrix server in WeeChat. Following the instructions in the Git repository made installation easy enough. Adding my Matrix server and logging in was also easy. However, I've come across three issues which I want to highlight in case anybody else is thinking of using weechat-matrix: + +=> https://github.com/poljar/weechat-matrix 2: https://github.com/poljar/weechat-matrix + +The Matrix client I normally use (Element) supports device cross-signing. This means that if I add a new device to my list of devices, I can verify that device using one of my other devices which have already been set up. This allows me to add as many devices I want, mark them as trusted from my own devices, and other people won't need to individually verify each of the devices that I add. weechat-matrix doesn't have this which means I pretty much have to do a `/olm verify * *` unless I want to sit there for an hour verifying everyone's devices individually. + +Furthermore, it seems that the connection to my Matrix server randomly drops out about every dozen minutes or so. It always reconnects in about 10 seconds but it's a bit annoying when you're sending a series of messages and all of a sudden you can't. It seems that to fix this I'd have to enable HTTP/2 connections on my Matrix server and reverse proxy[3] which I don't particularly care to do. Instead, I fixed this with: `/set matrix.server.paritybit.ca.autoreconnect_delay 1`. A lazy solution... but it works I guess? + +=> https://github.com/poljar/weechat-matrix/issues/123 3: https://github.com/poljar/weechat-matrix/issues/123 + +Also, uploading and downloading files is a huge pain in the butt. It has to be done through helper scripts which is far less convenient than just seeing the file or being able to type a quick command such as `upload ~/image.png` or `download secret_codes.txt` from within the WeeChat window. + +Anyhow, a complete rewrite of weechat-matrix is coming in the form of weechat-matrix-rs[4], a Rust implementation as a WeeChat *plugin* instead of a series of WeeChat *scripts*. This will allow much better integration and much more powerful stuff like device cross-signing to be done. + +=> https://github.com/poljar/weechat-matrix-rs 4: https://github.com/poljar/weechat-matrix-rs + +For now, I'm definitely glad I got it up and running again for use with IRC, but I'm not 100% sure I'll stick with using it for Matrix. As much as I would prefer to use a nice CLI application instead of an Electron one, the current state of it seems to be more hassle than it's worth. I may go back to using Element and just wait for the Rust rewrite to be ready :/ + +*This is my ninety-sixth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 5: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/submitting-a-bug-report-to-freebsd.gmi b/gemini/pages/blog/submitting-a-bug-report-to-freebsd.gmi @@ -0,0 +1,32 @@ +## Submitting a Bug Report to FreeBSD + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-09 | + <b>Last Updated:</b> 2020-05-09 +</div> +``` + +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. + +On every system I own, I install either Vim or NeoVim depending on what is available. On FreeBSD, when I went to `pkg install vim`, 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 `pkg install neovim` 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 `neovim` package and then posted about my experience on Mastodon[1]. + +=> https://social.paritybit.ca/web/statuses/104139315294826147 1: https://social.paritybit.ca/web/statuses/104139315294826147 + +Within a couple hours, it was pointed out to me that there is actually a `vim-console` package which doesn'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 `vim` for the console version and `vim-gtk` for the graphical version, this didn't even cross my mind. Especially since neovim behaved as I expected it to. + +After some further discussion, it was suggested by @Evilham that I submit a bug report about the difference in naming convention between the `vim` and `neovim` 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 bugs.freebsd.org[2] and reported the bug[3]. + +=> https://bugs.freebsd.org/bugzilla/ 2: https://bugs.freebsd.org/bugzilla/ +=> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=246343 3: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=246343 + +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'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. + +Will this be the start of my becoming a FreeBSD contributor? + +*This is my fifteenth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/switching-to-alacritty-removals.gmi b/gemini/pages/blog/switching-to-alacritty-removals.gmi @@ -0,0 +1,48 @@ +## Switching to Alacritty Removals + +```html +<p class="note">Below are the outtakes from my [switching to alacritty +blogpost](/blog/switching-to-alacritty) which I decided to split off into its +own page because all the strikethrough text made the original post difficult to +read. In case anyone is interested in what was removed, here it all is:</p> +``` + +From the responses in the Fediverse and Lobste.rs threads, I can no longer say that the Suckless folk were espousing far-right rhetoric or partaking in neo-nazi-like activities. As it turns out, at least from the responses in that thread, there was nothing political behind the torch march and the use of "Cultural Marxism" was taken out of context and the word was probably misused. + +We can still call out the use of "Wolfsschanze" as the name of the mail server is in bad taste and is offensive considering where the term comes from[1], but it is hardly evidence that they are "literal neo-Nazis." + +=> https://en.wikipedia.org/wiki/Wolf%27s_Lair 1: https://en.wikipedia.org/wiki/Wolf%27s_Lair + +The people who responded on the Fediverse I think were ultimately right, the evidence here is largely circumstantial and I was mistaken in drawing the conclusions that I did. I am sorry for that. + +-------------------------------------------------------------------------------- + +I've been a pretty happy user of St, the Simple Terminal from Suckless for quite a few months now. However, as I was scrolling through my Fediverse timeline this afternoon, I noticed a discussion about the attitudes of prominent software contributors in the FOSS community which made me re-think my software choices. + +It's no secret that a lot of people in FOSS can be abrasive, hard to deal with, and/or unaware of common social norms to the point where it can seriously harm a project's image, as it did, for example, with the Linux kernel in the time before Linus Torvalds took some leave to learn how to control his aggression. It's another story, however, when a group of people use and spread far-right rhetoric or partake in neo-nazi-like activities as I've recently learned prominent people from the Suckless group have done. + +Here are the resources that were shared with me: + +* Twitter thread 1[2] +* Twitter thread 2[3] +* Cat-v ≠ Suckless[4] + +From this, I can say that even if the Suckless team just has a really screwed up sense of humour, it's not a group I'd want to promote or ever associate with. + +=> https://twitter.com/kuschku/status/1156488420413362177 2: https://twitter.com/kuschku/status/1156488420413362177 +=> https://twitter.com/pid_eins/status/1113738764797534208 3: https://twitter.com/pid_eins/status/1113738764797534208 +=> https://harmful.neocities.org/ 4: https://harmful.neocities.org/ + +This issue once again stirs up the debate about the separation of a piece of work from the creators of the work. Do we stop using or shun something that someone has created, even if it was previously loved, because of the actions of the creator? There's no black-and-white or one-size-fits-all answer to that question. Some works are easier to separate from the creator, like the ReiserFS[5] filesystem for example, because there are far more people than just Hans Resier (who, by the way, murdered his wife) developing it. On the other hand, other works have the creator's personality strewn through it like, for example, the Harry Potter novels (if you didn't know, J.K. Rowling is transphobic and is also an asshole about it[6]). + +=> https://en.wikipedia.org/wiki/ReiserFS 5: https://en.wikipedia.org/wiki/ReiserFS +=> https://www.scotsman.com/arts-and-culture/books/jk-rowling-twitter-why-harry-potter-author-has-been-accused-transphobia-2877977 6: https://www.scotsman.com/arts-and-culture/books/jk-rowling-twitter-why-harry-potter-author-has-been-accused-transphobia-2877977 + +In the future, I will definitely avoid recommending Suckless' software and I'll be far more hesitant to consider them when evaluating tools to use. For now, one thing that I know I can switch from with little friction and with an actual technical benefit is St. + +As for the other suckless programs I use, if I am to switch I'd need to find suitable replacements for dwm, slstatus, and dmenu. That's a little harder than switching from St because, not only do I have no technical issues with that software, there is also dwm's window swallowing patch which I consider to be a killer feature and which is lacking from pretty much every other window manager (I don't want to go back to bspwm). + +Ultimately, this is a tricky thing. How closely tied should we consider Suckless' software from the Suckless people themselves? It would be easy enough to fork it and maintain it under a different group and wantonly throwing away software which is objectively useful because the creators are bad seems a little extreme given that fact (look at what happened to ReiserFS). I will absolutely not be recommending them anymore, but, in terms of switching off of something that works really well for me, I really don't know. I'm curious what you think, send me an email[7] or reply to this post in the Fediverse[8]. + +=> mailto:jbauer@paritybit.ca 7: mailto:jbauer@paritybit.ca +=> https://pleroma.paritybit.ca/notice/9xQZNCVzQRiZdtxoeG 8: https://pleroma.paritybit.ca/notice/9xQZNCVzQRiZdtxoeG +\ No newline at end of file diff --git a/gemini/pages/blog/switching-to-alacritty.gmi b/gemini/pages/blog/switching-to-alacritty.gmi @@ -0,0 +1,48 @@ +## Switching From St to Alacritty + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-24 | + <b>Last Updated:</b> 2020-07-31 +</div> +``` + +```html +<p class="note">This post was originally also about separating creators from +their work but, thanks to [the discussion on the +Fediverse](https://pleroma.paritybit.ca/notice/9xQZNCVzQRiZdtxoeG), I was +alerted to the following Lobste.rs thread containing [responses from one of the +Suckless folk](https://lobste.rs/s/kpuj8p/why_i_use_suckless_tools#c_4g2lqi) +(username "FRIGN").<br><br>I have since moved the redacted text to its own page +so you can view what I was wrong about on this [page of +removals](/blog/switching-to-alacritty-removals). I decided to move the stuff +because it was making this post hard to read and, since none of the +non-technical stuff was true, this post should just be about the technical +reasons for my switch.</p> +``` + +I've been a pretty happy user of St, the Simple Terminal from Suckless for quite a few months now but a few annoying issues with it have tempted me to switch. + +I've been eyeing Alacritty as an alternative if I ever got tired of St because it seems to also be lightweight, fast, and supportive of the features I left urxvt for[1]. It also still has a scrollback buffer, zooming in and out, clickable URLS, and it seems a Vi mode is also coming in the next release which I am very excited for. The only thing I didn't really like about it was the YAML configuration and its size in RAM. + +=> https://www.paritybit.ca/blog/urxvt-to-st 1: https://www.paritybit.ca/blog/urxvt-to-st + +I did give some alternatives a shot. I tried Termite but found it to be too big a pain in the butt to compile because of the need to also compile vte-ng which itself was a pain, Kitty felt like it took too long to load coming from St's ~100ms launch time, and other terminals like xfce4-terminal or konsole wanted to bring in extra libraries and dependencies which I didn't want. + +The only things I've noticed that I would consider inferior about Alacritty is that each terminal window uses about 30-40M of RAM (RES minus SHR) compared to St's 4-5M and it still feels noticeably slower to launch. I'd estimate it takes Alacritty about twice as long to launch as St (somewhere in the ballpark of 200-300ms) but I don't have a great way of measuring it. The size of the Alacritty binary is 41M whereas the size of the St binary is 104K—a significant increase, but ultimately meaningless when you consider the size of contemporary storage. Also, Alacritty is configured with YAML which is a very annoying configuration format because it's white space sensitive (like Python). + +The technical advantages Alacritty does have over St is its support of colour eomji without the libxft-bgra patch[2] and the ability to properly make use of the `Delete` key without needing to set `set enable-keypad on` in my `inputrc` (which didn't even work on remote machines over SSH). Both of these workarounds are needed because Suckless refuses to patch what are technically flaws in different programs—libxft and bash respectively (and I could never get St to behave with the Delete key even after trying some patches). + +=> https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 2: https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1 + +As always, my dotfiles can be found in the dotfiles git repository[3] (mirror[4]). + +=> https://git.sr.ht/~jbauer/dotfiles 3: https://git.sr.ht/~jbauer/dotfiles +=> https://git.paritybit.ca/dotfiles 4: https://git.paritybit.ca/dotfiles + +*This is my seventy-ninth post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/switching-to-cgit.gmi b/gemini/pages/blog/switching-to-cgit.gmi @@ -0,0 +1,52 @@ +## Switching to cgit + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-05 | + <b>Last Updated:</b> 2020-07-05 +</div> +``` + +I'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'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't have any need for the plethora of features it offers. + +### What I Didn't Like About Gitea + +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'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. + +Regarding the features, Gitea comes with things like built-in repo wikis, CI/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. + +### Setting up cgit + +When I did my comparison of self-hosted git services[1], 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't a software forge, only allowing viewing repositories and downloading files, but it has all I need out of a self-hosted git solution. + +=> https://www.paritybit.ca/blog/choosing-a-self-hosted-git-service 1: https://www.paritybit.ca/blog/choosing-a-self-hosted-git-service + +Setting up cgit was fairly straightforward. I just followed the Arch wiki tutorial on setting up cgit[2] 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 `/etc/cgitrc` config file. + +=> https://wiki.archlinux.org/index.php/Cgit 2: https://wiki.archlinux.org/index.php/Cgit + +Switching over was really easy too. I just copied the repositories that already existed on the server to a new location (I chose `/srv/git`) and then switched my reverse proxy to point to the new git server's port instead of Gitea's port. Following that, I just decommissioned Gitea by stopping the server and deleting any trace of it off of my system. + +### Improving cgit + +One thing that I wanted to try doing to cgit was adding a dark theme that would be activated by a CSS `@media` 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's because the file has been growing over time as features have been added and it doesn't get a lot of development time. + +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's completely accessible), but I feel like the CSS will be a lot easier to work with now. + +I did also make some other improvements throughout the CSS. For example, I set my base font-size to `100%` instead of the ridiculously tiny `10pt`, 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 `borland` theme in python-pygments because it had no contrast issues against the white background unlike `default`. + +### Conclusion + +I'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't have to feel bad about hosting really bloated, JavaScript-heavy webpages. + +I'm not quite sure if I'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 sourcehut repository[3] and here is the repository on my git server[4]. + +=> https://git.sr.ht/~jbauer/cgit-config 3: https://git.sr.ht/~jbauer/cgit-config +=> https://git.paritybit.ca/cgit-config/ 4: https://git.paritybit.ca/cgit-config/ + +*This is my sixty-first post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/switching-to-debian-sid.gmi b/gemini/pages/blog/switching-to-debian-sid.gmi @@ -0,0 +1,29 @@ +## Switching to Debian Sid + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-23 | + <b>Last Updated:</b> 2020-06-23 +</div> +``` + +I've been running Debian 10 Buster on all of my computers since it was released almost a year ago (July 6, 2019). The packages becoming ever so slightly out of date over time didn't really bother me too much until recently when I started to find newer features of some software alluring. Software like KeepassXC and Firefox which have had many improvements in the past year now feel quite dated compared to what I got when I tried out Gentoo[1] a few days back. + +=> https://www.paritybit.ca/blog/my-beginnings-with-gentoo 1: https://www.paritybit.ca/blog/my-beginnings-with-gentoo + +One of my favourite things about running Debian stable on everything is that it really does live up to its namesake. It is *super* stable. The only package updates I have to perform are the odd security update here and there and, even then, I could use my computer for weeks without actually ever needing to reboot. The downside is, of course, that things start to feel old for a desktop system the farther away one gets from release. + +I wanted newer packages and a newer kernel (yay more btrfs stuff) and since I'm not really that comfortable with Gentoo yet as a system for me to do my work on, I decided I would switch to Debian's rolling release option called Sid. This is as simple as changing the word `buster` to `sid` in `/etc/apt/sources.list` and running an `apt update && apt full-upgrade`. Note that Debian sid is not really the *intended* way to run Debian, but it is still available and one just has to be completely aware of what they're updating in case there's a known bug that might mess something up. That means I have to break my `sudo apt update && sudo apt -y upgrade` habit. + +In switching to Debian Sid, I also wanted to do complete re-installs on all of my computers. Over time they've become full of programs I tried once and forgot about, files I no longer really need, and, though they haven't become slow or anything, it feels good to have a fresh start and get properly organized again. To make deploying a new Debian desktop system on all of my computers a lot easier and more hands-off, I created a deploy-system script[2] which does pretty much everything I'd otherwise have to do manually when setting up a Debian desktop. + +=> https://git.sr.ht/~jbauer/deploy-system 2: https://git.sr.ht/~jbauer/deploy-system + +In addition to re-organizing my files, I'm also going to start using Syncthing to synchronize certain files between all of my computers. No more moving KeepassXC databases around with USB sticks for me. I'll also have a cleaner home directory, and a re-organized file hierarchy that feels better. Reinstalling is fun. + +*This is my fifty-third post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/the-diefenbunker-museum.gmi b/gemini/pages/blog/the-diefenbunker-museum.gmi @@ -0,0 +1,99 @@ +## The Diefenbunker Museum + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-03 | + <b>Last Updated:</b> 2020-05-03 +</div> +``` + +A few months ago, I visited the Diefenbunker museum[1] located in Carp, Ottawa, Canada. It'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'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. + +=> https://en.wikipedia.org/wiki/CFS_Carp#Diefenbunker,_Canada%27s_Cold_War_Museum 1: https://en.wikipedia.org/wiki/CFS_Carp#Diefenbunker,_Canada%27s_Cold_War_Museum + +So much cool history is preserved in this museum including old teletypewriters, computing equipment, clothing, medical equipment, operating procedures, and exhibits about Canada's involvement in the Cold War. I try to experience things with my own eyes rather than through a camera lens so I didn't take many photographs, but I did manage to take a few that showcase some of the really interesting things to see: + +```html +<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> +``` + +The photographs here don'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'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. + +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. + +*This is my ninth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/the-disappearance-of-one.gmi b/gemini/pages/blog/the-disappearance-of-one.gmi @@ -0,0 +1,23 @@ +## The Disappearance of *One* + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-02 | + <b>Last Updated:</b> 2020-05-02 +</div> +``` + +*One* 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 *you*. *One* is a gender-neutral, indefinite pronoun that is used to refer to the general concept of *a person*. For example, one would say, "One goes down to the shop," instead of, "You go down to the shop," when they mean, "In general, a person goes down to the shop," as opposed to specifically, "*You* go down to the shop." + +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 *you* in the place of the word *one* 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 *one* instead of the less-specific *you*. + +It'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's a valuable word that I will try to keep using where appropriate because I don't want to see its meaning lost. + +If you want to learn more about the usage of *one*, see <a href="https://en.wikipedia.org/wiki/One_(pronoun)">Wikipedia: One_(pronoun)</a>. + +*This is my eighth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/the-hacker-quarterly-magazine.gmi b/gemini/pages/blog/the-hacker-quarterly-magazine.gmi @@ -0,0 +1,36 @@ +## The Hacker Quarterly Magazine + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-14 | + <b>Last Updated:</b> 2020-08-14 +</div> +``` + +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. + +I was pointed to 2600.com[1] where I could buy a magazine called *The Hacker Quarterly*. It's a magazine sent out 4 times a year and the subscription cost for one year is $26.00 USD. That's honestly not that much given the fact that it's a physical magazine and there'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's Spring edition) in the mail yesterday. + +=> https://2600.com 1: https://2600.com + +```html +<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> +``` + +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. + +One of the articles that stood out to me was an article entitled "Has Your Password Been Pwned?" which discussed submitting your passwords to Troy Hunt's haveibeenpwned.com[2] service to check if they'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? + +=> https://haveibeenpwned.com 2: https://haveibeenpwned.com + +This magazine is one of the few remaining physical hacker/computer magazines from the days of old. There's something... humanizing about reading a physical magazine over consuming everything through digital publications. It's definitely worth checking out if you're into hacker culture (if you're reading this blog post now, you'd probably be interested in it). + +*This is my ninety-fourth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/the-joys-of-old-tech.gmi b/gemini/pages/blog/the-joys-of-old-tech.gmi @@ -0,0 +1,51 @@ +## The Joys of Old Tech + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-07 | + <b>Last Updated:</b> 2020-05-07 +</div> +``` + +```html +<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> +``` + +There'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 these sounds of an IBM PC AT[1], hard at work. + +=> https://invidio.us/watch?v=eSNqzTwHiuU 1: https://invidio.us/watch?v=eSNqzTwHiuU + +Of course, it wasn'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? + +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's just childhood nostalgia. + +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's system. Given the way that technology has evolved in the past 30 years, it's definitely easy to see why some would long for "the good old days". + +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'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. + +The specifications defining everything one would need to know and understand for developing a web browser is 114 million words[2] and the specifications for modern technologies such as UEFI[3] 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. + +=> https://drewdevault.com/2020/03/18/Reckless-limitless-scope.html 2: https://drewdevault.com/2020/03/18/Reckless-limitless-scope.html +=> https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_A_Feb14.pdf 3: https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_A_Feb14.pdf + +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. + +Despite all this doom and gloom, there is a small subset of programmers and scientists creating software like the Plan9 operating system[4] or SourceHut[5] designed to bring simplicity and understandability back to the way we use our computers. Many people still use such programs as the Lynx web browser[6] and such protocols as IRC[7] and <a href="https://en.wikipedia.org/wiki/Gopher_(protocol)">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="https://en.wikipedia.org/wiki/Gopher_(protocol)#Server_census">increase in usage</a> over the past few years. + +=> http://9front.org/ 4: http://9front.org/ +=> https://sourcehut.org/ 5: https://sourcehut.org/ +=> https://invisible-island.net/lynx/ 6: https://invisible-island.net/lynx/ +=> https://en.wikipedia.org/wiki/Internet_Relay_Chat 7: https://en.wikipedia.org/wiki/Internet_Relay_Chat + +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. + +*This is my twelfth post for the #100DaysToOffload[8] challenge. You can learn more about this challenge over at https://100daystooffload.com[9][10].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 8: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 9: https://100daystooffload.com +=> https://100daystooffload.com 10: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/the-marble-man.gmi b/gemini/pages/blog/the-marble-man.gmi @@ -0,0 +1,26 @@ +## The Marble Man + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-11 | + <b>Last Updated:</b> 2020-08-11 +</div> +``` + +A shorter blog post for today, but something I wanted to share. Today, a friend introduced me to Jelle's Marble Runs[1], a YouTube channel dedicated to casting marble sporting events. + +=> https://www.youtube.com/c/JellesMarbleRuns/ 1: https://www.youtube.com/c/JellesMarbleRuns/ + +There are MarbleLympics, Marbula One, a Marble League, and more! There also seems to be a pretty sizeable fanbase around it with a marble wiki[2] and a marble subreddit[3]. + +=> https://jellesmarbleruns.fandom.com/wiki/Marble_League_Wiki 2: https://jellesmarbleruns.fandom.com/wiki/Marble_League_Wiki +=> https://old.reddit.com/r/JellesMarbleRuns 3: https://old.reddit.com/r/JellesMarbleRuns + +The production quality is very good and the sports casting is amazing. If you want a good way to pass the time, I highly recommend giving it a shot! + +*This is my ninety-first post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/toggling-between-indentation-styles-in-vim.gmi b/gemini/pages/blog/toggling-between-indentation-styles-in-vim.gmi @@ -0,0 +1,49 @@ +## Toggling Between Indentation Styles in Vim + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-02 | + <b>Last Updated:</b> 2020-06-02 +</div> +``` + +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. + +I typically use 4 spaces of indentation because that's what I learned to use from using Python as my first language. It wasn't until a couple years later when I encountered Makefile's strict reliance on tab characters and the argument of spaces versus tabs for indentation. I didn'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. + +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'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. + +Since I use Vim (Neovim, actually), basically any possible indentation configuration is supported. It's also easy to set up a keybind to toggle between indentation styles by writing a function into my `vimrc`. I came up with the following VimScript to switch between indentation styles: + +```vim +" Toggle between 4 spaces and pure tab indentation styles +func! ToggleIndentStyle() + if &expandtab == 1 + set noexpandtab + set softtabstop& + set shiftwidth& + 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 <C-_> :call ToggleIndentStyle()<CR> +``` + +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 `softtabstop` and `shiftwidth` as well as unset `expandtab` so that Vim won't expand my Tab keypresses into space characters. To switch back to spaces, I revert to my normal settings. + +I chose the `Ctrl`+`_` keybinding because it was free and the underscore is reminiscent of a "space" character so it would be easy to remember. + +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's style guides like Python or Go respectively. For most languages, though, it makes no difference. + +I have heard murmurings of tabs being better for accessibility, but I've never seen this claim backed up with hard evidence (I have seen anecdotal evidence for both spaces being good for accessibility *and* tabs). If you have compelling arguments for one style over another, I'd like to hear them. + +*This is my thirty-sixth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/trying-out-aerc.gmi b/gemini/pages/blog/trying-out-aerc.gmi @@ -0,0 +1,37 @@ +## Trying Out aerc + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-18 | + <b>Last Updated:</b> 2020-05-18 +</div> +``` + +aerc[1] is a new terminal-based email client created by Drew DeVault that aims to offer a highly efficient and extensible mail experience. I decided to take a look at it after hearing quite a few good reviews of it and its capabilities in the Fediverse. + +=> https://aerc-mail.org/ 1: https://aerc-mail.org/ + +I currently use NeoMutt[2], a fork of Mutt, which is also a powerful, terminal-based email client. However, I've found it a little clunky to use at times and the sheer amount of configuration that must be done to make it usable (in my opinion) is crazy. It's still a perfectly capable email client which has served me well, but my search for simpler, more "minimal", software has led me to try aerc. (Some other mail clients which I may also try in the future are S-nail[3] and meli[4].) + +=> https://neomutt.org/ 2: https://neomutt.org/ +=> https://wiki.archlinux.org/index.php/S-nail 3: https://wiki.archlinux.org/index.php/S-nail +=> https://git.meli.delivery/meli/meli.git 4: https://git.meli.delivery/meli/meli.git + +To get aerc up and running on my system, I cloned the git repository[5] and checked out the `0.3.0` branch. I installed `scdoc` and `go-1.14` to build the software from source using `make install`. Upon running aerc with the `aerc` command, I was presented with a straightforward setup process which got me up and running with my mail account configured. + +=> https://git.sr.ht/~sircmpwn/aerc 5: https://git.sr.ht/~sircmpwn/aerc + +Most of the controls were immediately intuitive. `j` and `k` for scrolling, `J` and `K` for switching folders, `D` for deleting mail, `Enter` for opening mail, and so on. It also seems like aerc has far better support for multiple email accounts. Using multiple accounts in NeoMutt feels unintuitive and hacky by comparison. Another thing that I really appreciate about aerc is that it puts its configuration files in `~/.config/aerc/` by default instead of dumping them in a folder like `~/.aerc`. + +Something of note which may be useful to others is that I needed to install `dante-client` to get the default `text/html` filter to work because it relies on the `socksify` command to run `w3m` sandboxed for viewing HTML emails. + +I'll be playing around with aerc for the next little while to decide if I'm going to fully switch to it from NeoMutt. Expect configuration files to appear in my dotfiles repository[6] and a much more comprehensive look in the future. + +=> https://git.sr.ht/~jbauer/dotfiles 6: https://git.sr.ht/~jbauer/dotfiles + +*This is my twenty-third post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 7: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/trying-out-dwm.gmi b/gemini/pages/blog/trying-out-dwm.gmi @@ -0,0 +1,68 @@ +## Trying Out dwm + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-11 | + <b>Last Updated:</b> 2020-06-11 +</div> +``` + +I've been using the Simple Terminal[1] (st) by suckless[2] for two^W three^W four months now (damn, it's already June) and I've been enjoying it thoroughly. By "enjoying it thoroughly" I mean it gets out of my way and hasn't caused any problems. I haven't had to recompile it either after I first set it up since I created the configuration and keybindings that I like and I've stuck with them since. + +=> https://st.suckless.org/ 1: https://st.suckless.org/ +=> https://suckless.org/ 2: https://suckless.org/ + +dwm[3] has been on my radar for a while from content that I've seen on the Internet (mostly from the popular Linux YouTubers: DistroTube, Luke Smith, and Mental Outlaw). I like the minimalism of suckless software and I enjoy the paradigm where one compiles software to suit their needs and desired features, but the window manager that I currently use (bspwm) is really comfortable[4]. + +=> https://dwm.suckless.org/ 3: https://dwm.suckless.org/ +=> https://www.urbandictionary.com/define.php?term=Comfy 4: https://www.urbandictionary.com/define.php?term=Comfy + +However, I came across this video by Luke Smith[5] (invidious link[6]) which sold me on trying out dwm. Window swallowing (the topic of the video), is something that I instantly knew I wanted when I saw it. According to the patch page, it's a feature taken from Plan9's windowing system; yet another thing they got right. + +=> https://www.youtube.com/watch?v=92uo5OBOKfY 5: https://www.youtube.com/watch?v=92uo5OBOKfY +=> https://www.invidio.us/watch?v=92uo5OBOKfY 6: https://www.invidio.us/watch?v=92uo5OBOKfY + +Since I've been planning to re-install the OS on my laptop, I figured I'd take the opportunity to destroy my existing environment and set up dwm so I'd have it all ready for the new OS. Setting up dwm is as easy as setting up other suckless tools: clone the git repo, choose which patches I want, apply the patches, configure my settings, and compile. All-in-all a fairly straightforward process. Since I don't use many patches, I didn't have to spend a lot of time manually patching; just a few lines here and there. + +The default statusbar that ships with dwm is quite spartan. It's configured by using `xsetroot -name <string>` where `<string>` is the content of the bar (CPU usage, RAM usage, etc). It's possible to do all this yourself with a bash script that you call from your `xinitrc` or through your crontab, but I chose to use slstatus[7] since it comes with a bunch of modules ready to go and does the whole `xsetroot` thing itself. If there are any custom thing I want to add to the bar, I can use slstatus to call a script for me. + +=> https://tools.suckless.org/slstatus/ 7: https://tools.suckless.org/slstatus/ + +One thing I made sure to do for this new environment was to compile all of dmenu, dwm, and st with their corresponding Xresources patches so that I can define colours, fonts, and more in my Xresources file. This allows me to update the colourscheme and whatnot without needing to recompile. I also noticed that vanilla dwm, straight out of the box, is actually completely usable. It comes with sane keybindings and settings and looks great (in my opinion, of course). The only thing I had to get used to was the master and stack layout that dwm uses compared to bspwm's fibonacci layout. With dwm, there is no moving left and right between windows, just up and down the stack. It makes sense given the way dwm's layout works and I found it easy to work with once I got used to it. + +Anyways, here's a picture of my desktop: + +```html +<figure> + <a href="/img/dwm-laptop.png"><img src="/img/dwm-laptop-thumb.png" + alt="dwm as it appears on my laptop. A screen is open and floating showing + the output of the neofetch command"/></a> +</figure> +``` + +I've implemented things like taking screenshots, changing brightness, new update notifications, and battery charge status notifications through scripts which are called either by using shortcuts in dwm or by cron. I've also decided that I'm going to change from using the status bar to using my notification daemon dunst for brightness and audio level indicators with the help of this Arch wiki article[8]. + +=> https://wiki.archlinux.org/index.php/Dunst#Using_dunstify_as_volume/brightness_level_indicator 8: https://wiki.archlinux.org/index.php/Dunst#Using_dunstify_as_volume/brightness_level_indicator + +Now, I know this doesn't really matter given the size of sotrage devices nowadays, but the size of my dwm setup is also *way* lower compared to my bspwm setup. bspwm, plus its necessary tools bspc and sxhkd, weigh in at 324,200 bytes or 316.60 KiB whereas dwm is only 77,936 bytes or 76.11 KiB. + +If I tally up the entire environment I was using when I first started (bspwm+components, urxvt, nitrogen, rofi, polybar) compared to what I'm using now (dwm, st, feh, dmenu, slstatus), that's 138,276,704 bytes (131.87 **MiB**) versus only 463,432 bytes (452.57 KiB); a huge savings which no doubt also increased how much RAM my system has available for doing other things. Also, letting my system idle with nothing but a terminal window open, I let my system load average settle and measured it once every 5 seconds with a while loop. After a 15 minute interval passed, it was reading 0.00/0.00/0.00 consistently. + +My final verdict is that dwm is great. It's starting to feel as comfy as bspwm with the added benefit of the software feeling like it's custom built and tailored for my needs (which it is). It's also really fun to use because of how much I love scripting[9]. + +=> gemini://paritybit.ca/blog/scripting-my-way-to-success 9: /blog/scripting-my-way-to-success + +You can view the scripts I use as well as other configuration information in my dotfiles repo[10]. My custom builds for each of the suckless tools I use are contained in the `custom` branch of each tool's repository: dwm[11], st[12], slstatus[13], and dmenu[14]. The patches I chose to apply are in the `patches` folder in each repository. Please note that the dotfiles repo is going to be retired to `dotfiles-legacy` as I switch over to using dwm full time on all of my machines. I am keeping the `dotfiles-legacy` repository around so others can view and use my configuration for things like `bspwm` and `neomutt`. + +=> https://git.sr.ht/~jbauer/dotfiles-legacy 10: https://git.sr.ht/~jbauer/dotfiles-legacy +=> https://git.sr.ht/~jbauer/dwm 11: https://git.sr.ht/~jbauer/dwm +=> https://git.sr.ht/~jbauer/st 12: https://git.sr.ht/~jbauer/st +=> https://git.sr.ht/~jbauer/slstatus 13: https://git.sr.ht/~jbauer/slstatus +=> https://git.sr.ht/~jbauer/dmenu 14: https://git.sr.ht/~jbauer/dmenu + +*This is my forty-first post for the #100DaysToOffload[15] challenge. You can learn more about this challenge over at https://100daystooffload.com[16][17].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 15: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 16: https://100daystooffload.com +=> https://100daystooffload.com 17: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/tweaking-some-css.gmi b/gemini/pages/blog/tweaking-some-css.gmi @@ -0,0 +1,28 @@ +## Tweaking Some CSS + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-27 | + <b>Last Updated:</b> 2020-04-27 +</div> +``` + +Today is a work day so I didn't do much that I can talk about in a blog post. I was also not really browsing the internet today so I don't have interesting things to share. However, I did do a little bit of fiddling with the look of my website. + +Taking inspiration from different site themes that I've seen around the internet, I decided to make a few tweaks. I made the backgrounds a little bit brighter, gave them a slight blue tinge to match with the link colours, and I also made a few elements like the table of contents and code tags have rounded corners. Using the Firefox accessibility tools and sites like Tanaguru Contrast Finder[1] and WebAIM: Contrast Checker[2], I made sure that these new colours had enough contrast so that there weren't accessibility issues with the new scheme. + +=> https://contrast-finder.tanaguru.com/&amp;distanceSort=asc 1: https://contrast-finder.tanaguru.com/&amp;distanceSort=asc +=> https://webaim.org/resources/contrastchecker/ 2: https://webaim.org/resources/contrastchecker/ + +I also did a little bit of code cleanup in the CSS file. I removed colours and elements that I no longer use on the site such as the `danger` colour and `kbd` element styling and I consolidated some often-used values like `font-size` into variables. This shrunk the size of my unminified CSS file from 4.7K to 3.6K. + +That's all I've got for today. Check out some of the other blogs taking part in the #100DaysToOffload challenge using the new challenge blogroll[3]. + +=> https://100daystooffload.com/blogroll.html 3: https://100daystooffload.com/blogroll.html + +*This is my third post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/two-months-with-aerc.gmi b/gemini/pages/blog/two-months-with-aerc.gmi @@ -0,0 +1,31 @@ +## Two Months with aerc + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-19 | + <b>Last Updated:</b> 2020-07-19 +</div> +``` + +Two months ago I wrote about trying out aerc[1], 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'm looking forward to seeing with it. + +=> https://www.paritybit.ca/blog/trying-out-aerc 1: https://www.paritybit.ca/blog/trying-out-aerc + +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'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's. + +Even though aerc is still well in development, there's not a whole lot that feels like it's missing and I've only encountered a couple of issues; nothing that would make me stop using the client though. + +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't such a big deal since I can count on one hand the number of times I've wanted to send PGP-encrypted emails in my (admittedly short) lifetime and this feature looks like it's being actively worked on. + +The only other major issue that I'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's connection to my email server. However, the bar at the bottom still says "Connected." and I have to restart aerc to get it to reconnect. This also seems like it's receiving some attention (at least judging by my brief skims of the mailing lists). + +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'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. + +Overall, it's been a really good experience and I'm going to keep using aerc into the foreseeable future. I'm glad to have a desktop mail client that integrates well with git, isn't super complicated, and makes email not feel like a chore to manage. + +*This is my seventy-fifth post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/two-of-the-most-valuable-lessons-ive-learned.gmi b/gemini/pages/blog/two-of-the-most-valuable-lessons-ive-learned.gmi @@ -0,0 +1,41 @@ +## Two of the Most Valuable Lessons I've Learned + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-23 | + <b>Last Updated:</b> 2020-05-23 +</div> +``` + +This post is inspired by Craig Maloney's recently released book *The Mediocre Programmer[1]*. I haven't yet read the book, but I read the synopsis[2] and it got me thinking about these two lessons which I've learned since becoming a massive computer nerd: + +=> http://themediocreprogrammer.com/ 1: http://themediocreprogrammer.com/ +=> http://themediocreprogrammer.com/what-is-the-mediocre-programmer.html 2: http://themediocreprogrammer.com/what-is-the-mediocre-programmer.html + +1. Given enough dedication, time, and effort, one can learn, become skilled at, and eventually master any skill they wish. + + +2. Impostor syndrome can be a good thing; learn to recognize and embrace it. + + + +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'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't feel bad about our lack of skill with something new after only being briefly exposed to it. + +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's all just a matter of putting in the time and practise before I learn it. + +Regarding the second lesson, for those who don't know, Impostor syndrome[3] 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'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. + +=> https://en.wikipedia.org/wiki/Impostor_syndrome 3: https://en.wikipedia.org/wiki/Impostor_syndrome + +Although I won'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'm feeling this way, it means that I'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'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. + +Do you have any bits of wisdom like this that you find valuable? Tell me about them[4]. + +=> gemini://paritybit.ca/contact 4: /contact + +*This is my twenty-seventh post for the #100DaysToOffload[5] challenge. You can learn more about this challenge over at https://100daystooffload.com[6][7].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 5: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 6: https://100daystooffload.com +=> https://100daystooffload.com 7: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/two-truths-and-a-lie.gmi b/gemini/pages/blog/two-truths-and-a-lie.gmi @@ -0,0 +1,32 @@ +## Two Truths and a Lie + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-23 | + <b>Last Updated:</b> 2020-07-23 +</div> +``` + +<a href="https://pleroma.paritybit.ca/users/9xGSHOgIKTF2WNt4LY">@mike@fosstodon.org</a> played two truths and a lie in one of his recent blog posts[1]. Since I currently don't feel like writing about anything else and this seems like a fun idea, let's give it a shot! + +=> https://mikestone.me/two-truths-and-a-lie 1: https://mikestone.me/two-truths-and-a-lie + +I'll be using the same format as he did: No technicalities and give me your guess by responding to the post on the Fediverse[2] (follow me here[3]). + +=> https://pleroma.paritybit.ca/notice/9xOnIFvbDVvSOpjoWm 2: https://pleroma.paritybit.ca/notice/9xOnIFvbDVvSOpjoWm +=> https://pleroma.paritybit.ca/jbauer 3: https://pleroma.paritybit.ca/jbauer + +Here are the two truths and the lie, guess which one is the lie: + +1. I am red-green colourblind. +2. I've only been into computers/programming for three years. +3. I've never been on an airplane. + +I'll be responding to the post with the answer in ~24 hours. + +*This is my seventy-eighth post for the #100DaysToOffload[4] challenge. You can learn more about this challenge over at https://100daystooffload.com[5][6].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 4: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 5: https://100daystooffload.com +=> https://100daystooffload.com 6: https://100daystooffload.com diff --git a/gemini/pages/blog/unsure-what-to-write.gmi b/gemini/pages/blog/unsure-what-to-write.gmi @@ -0,0 +1,23 @@ +## Unsure What To Write + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-07 | + <b>Last Updated:</b> 2020-05-07 +</div> +``` + +***Note**: This post is pretty much just filler and doesn't contain anything really important, it was written to keep up with #100DaysToOffload before I decided it would be better if I just refrained from posting if I didn't have anything I wanted to talk about.* + +I'm unsure what to write about today. I looked through the list of topics I have written down but none of them really sparked inspiration. + +My days have been mostly work, cooking, writing these blog posts, and slacking off enjoying content online like streams and videos. I haven't felt much of a drive to play video games or solve problems. I'm hoping to get started on a project I've wanted to start for a while now in the coming days and I want to rewrite the script used to build the pages for this site. The existing one has become quite the mess and I would like to switch to using `pandoc` instead of `markdown` since `pandoc` seems to handle converting markdown to HTML much better than the `markdown` tool... despite that tool being explicitly designed to do that. I'll post about my experience when I make that change. + +That's all for today, thanks for reading. + +*This is my thirteenth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/urxvt-to-st.gmi b/gemini/pages/blog/urxvt-to-st.gmi @@ -0,0 +1,83 @@ +## Switching from urxvt to st + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-02-14 | + <b>Last Updated:</b> 2020-02-15 +</div> +``` + +***Update:** Reworded paragraph on trying other terminals.* + +I spend most of my time working in the terminal. Whether it'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's why it'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't working or doesn't look quite right. + +Unfortunately, since I started using urxvt about a year ago now, I've slowly begun to notice things missing or not working quite right. For example, despite being called "rxvt-unicode-256color", urxvt doesn't really handle unicode characters that well. Take a look at the example below: + +```html +<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> +``` + +This was really noticeable and, even though those unicode characters aren'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 W3 Schools HTML5 Symbols Reference[1]): + +=> https://www.w3schools.com/charsets/ref_utf_symbols.asp 1: https://www.w3schools.com/charsets/ref_utf_symbols.asp + +```html +<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> +``` + +Not to mention, urxvt doesn't have truecolour support which, while not super important to me, is definitely a bonus in st's favour. The screenshot below shows urxvt's output for this truecolour test[2]: + +=> https://gist.github.com/XVilka/8346728 2: https://gist.github.com/XVilka/8346728 + +```html +<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> +``` + +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' (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. + +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. + +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't supported in st without a patch). Have a look: + +```html +<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> +``` + +```html +<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> +``` + +```html +<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> +``` + +I am very happy with st and I don'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't need or don't want. + +If you want to try out st, follow this link to the st website[3]. You can view my build of st in my dotfiles repository[4]. + +=> https://st.suckless.org/ 3: https://st.suckless.org/ +=> https://git.sr.ht/~jbauer/dotfiles 4: https://git.sr.ht/~jbauer/dotfiles +\ No newline at end of file diff --git a/gemini/pages/blog/use-syncthing-to-sync-things.gmi b/gemini/pages/blog/use-syncthing-to-sync-things.gmi @@ -0,0 +1,39 @@ +## Use Syncthing to Sync Things + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-26 | + <b>Last Updated:</b> 2020-06-26 +</div> +``` + +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't want something like a NAS because I don'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'd have the files on every computer I own and they would be kept constantly in sync with each other. + +I chose to use Syncthing[1], a program designed for the sole purpose of synchronizing files and folders between computers. It'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. + +=> https://syncthing.net/ 1: https://syncthing.net/ + +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's it. + +```html +<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> +``` + +I entered my desktop's ID into my laptop and vice-versa. I told both computers to find each other at `https://<hostname>.paritybit.ca:22000` (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're both on and awake at the same time, they'll keep in sync with each other and I don't have to worry about manually syncing my files. + +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'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's definitely slower than the direct connection by IP/FQDN. Besides, syncing over the LAN is good enough for me. + +Syncthing is probably the most painless experience I've had synchronizing files between my devices. As Nikita said in his blog post about Syncthing[2], "It brings the joy of use and makes you believe the collapse of civilization can be slowed down a bit." + +=> https://tonsky.me/blog/syncthing/ 2: https://tonsky.me/blog/syncthing/ + +*This is my fifty-fifth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/use-xterm-256color-with-alacritty.gmi b/gemini/pages/blog/use-xterm-256color-with-alacritty.gmi @@ -0,0 +1,45 @@ +## Use xterm-256color With Alacritty For Better ls Output + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-05 | + <b>Last Updated:</b> 2020-08-05 +</div> +``` + +In switching to alacritty[1], I noticed something off about my `ls` output. Previously, when I was using st, ls would highlight different files in different colours. For example, image files would be bold and purple and other files like `.deb.` or `.zip` files would be bold and red. Here is an example: + +=> https://www.paritybit.ca/blog/switching-to-alacritty 1: https://www.paritybit.ca/blog/switching-to-alacritty + +```html +<figure> + <a href="/img/ls-highlights.png"><img src="/img/ls-highlights.png" alt="A + screenshot of a terminal where ls shows media files highlighted in purple + and .deb files in red."/></a> +</figure> +``` + +As opposed to what I was encountering: + +```html +<figure> + <a href="/img/ls-no-highlights.png"><img src="/img/ls-no-highlights.png" alt="A + screenshot of a terminal where ls shows every non-folder and non-executable + with default colours (i.e. non-bold white)"/></a> +</figure> +``` + +Which is what you get if you use a `TERM` variable set to `alacritty` in your `alacritty.yml` while you have another `TERM` variable set in `.profile`. Since changing that variable in my `alacritty.yml` file to `xterm-256color` and removing it entirely from my `.profile`, the highlights have returned. + +It would seem that the terminfo for alacritty is not in the default installations for any of the systems I use (Debian and OpenBSD, at the moment) nor is it included in the `.deb` package I grabbed from their GitHub releases page. Therefore, setting the `TERM` variable to `alacritty` in `alacritty.yml` without having anything in `.profile` actually results in an almost completely broken terminal experience where there are no colours by default and SSH sessions do not behave well unless I `export TERM=xterm-256color` beforehand. + +Also, Alacritty 0.5 is out[2] which includes a new Vi mode! + +=> https://github.com/alacritty/alacritty/releases 2: https://github.com/alacritty/alacritty/releases + +*This is my eighty-fifth post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/using-rm-with-trash.gmi b/gemini/pages/blog/using-rm-with-trash.gmi @@ -0,0 +1,40 @@ +## Using the "rm" Command with Trash + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-13 | + <b>Last Updated:</b> 2020-07-13 +</div> +``` + +Those who use regular file browsers like Nautilus, Dolphin, or Thunar are used to having an item go into the Trash folder (or "Recycle Bin" 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 `rm` 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 `rm` remove a file to the Trash folder first so that you can prevent yourself from accidentally irreversibly deleting something really important. + +### POSIX, Bash and Bash-like, Fish, and Korn Shells + +```bash +alias rm='mv -t $XDG_DATA_HOME/Trash/' +alias rm!='\rm' +``` + +### C Shell (csh) and TENEX C Shell (tcsh) + +```bash +alias rm 'mv -t $XDG_DATA_HOME/Trash/' +alias rm! '\rm' +``` + +### Explanation + +The aliases above do the following: + +* Alias `rm` to `mv` where any files specified will be moved to the XDG standard trash folder instead of being deleted. +* Alias `rm!` to the normal `rm` program which effectively makes `rm!` a "permanently delete this" command. + +If you choose not to have `$XDG_DATA_HOME` defined, you can replace that bit with whichever path you prefer such as `$HOME/.Trash`. The folder you choose must already exist or else `mv` will be angry. + +*This is my seventieth post for the #100DaysToOffload[1] challenge. You can learn more about this challenge over at https://100daystooffload.com[2][3].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 2: https://100daystooffload.com +=> https://100daystooffload.com 3: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/vortex-vibe-keyboard.gmi b/gemini/pages/blog/vortex-vibe-keyboard.gmi @@ -0,0 +1,61 @@ +## The Vortex ViBE Mechanical Keyboard + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-02 | + <b>Last Updated:</b> 2020-08-02 +</div> +``` + +```html +<figure> + <a href="/img/keyboard-side.jpg"><img + src="/img/keyboard-side-thumb.jpg"/></a> + <figcaption>The Vortex ViBE Mechanical Keyboard</figcaption> +</figure> +``` + +I've been using the Vortex ViBE as my keyboard for at least six months and I have to say it's one of the best mechanical keyboards I've used. It's very unique in that it'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. + +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's easier to clean. + +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't really mind that this uses Micro-USB since it'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 the process still being manual[1]. + +=> https://www.youtube.com/watch?v=Y1Tmtd51clI 1: https://www.youtube.com/watch?v=Y1Tmtd51clI + +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'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'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. + +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/Down, Home/End, and PrtScn/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. + +```html +<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> +``` + +You may also notice a lack of a tilde/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'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. + +Some other very interesting features of the keyboard are: + +* A built-in toggle to go between Qwerty, Dvorak, and Colemak keyboard layouts +* The keys are all the same height so they can be freely swapped around anywhere on the keyboard to conform to any desired layout +* There are three programmable layers plus the default layer so it's possible to program custom macros on different layers of the keyboard +* 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) +* It's available with a ton of different Cherry MX keyswitches. + +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. + +It'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 mechanicalkeyboards.com[2]), it's competitive with offerings from big brand name companies such as Corsair, Cooler Master, and Razer. + +=> https://mechanicalkeyboards.com/shop/index.php?l=product_detail&amp;p=3923 2: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&amp;p=3923 + +I highly recommend it if you're looking for a compact keyboard but don'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. + +*This is my eighty-third post for the #100DaysToOffload[3] challenge. You can learn more about this challenge over at https://100daystooffload.com[4][5].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 3: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 4: https://100daystooffload.com +=> https://100daystooffload.com 5: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/website-redesign.gmi b/gemini/pages/blog/website-redesign.gmi @@ -0,0 +1,59 @@ +## Making My Website More Accessible + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-02-06 | + <b>Last Updated:</b> 2020-02-13 +</div> +``` + +***Update**: Added more links to helpful validators and resources at the bottom of the page.* + +For about one and a half months now I've been working on redesigning paritybit.ca to make it more accessible. In that time I've completely overhauled the design of the website to make it scale better on different screen sizes and make use of as many accessibility features as I can. I've gone from this: + +```html +<figure> + <a href="/img/website-before.png"><img src="/img/website-before-thumb.png" + alt="My website before the redesign."/></a> +</figure> +``` + +To this: + +```html +<figure> + <a href="/img/website-after.png"><img src="/img/website-after-thumb.png" + alt="My website after the redesign."/></a> +</figure> +``` + +Which I think also looks a lot better and cleaner in addition to being much better in terms of accessibility. + +To make my website more accessible, I've added page landmarks using `<header>`, `<nav>`, `<main>`, `<footer>`, and `<section>` tags to make it easier for those with screen readers to navigate throughout the macro-structure of the page, I re-designed the link styling to make differing between regular text and links easier, I shrunk the width of the page to keep the text within a reasonable field of view so that you don't have to move side to side while reading, I increased the font size, and I made heavy use of a contrast checker to make sure that my colours had a bare minimum contrast ratio of 4.5:1 (WCAG AA) with an ideal goal of 7:1 (WCAG AAA) for regular text. I also ran my colour scheme through the Toptal Colour Blind Filter website to make sure that the different colours I chose didn't cause critical issues with understanding page content for the (quite sizeable) population with a form of colourblindness. + +I also tested my website using Firefox's built-in accessibility tools which notified me of anything that I may have missed with other tools and helped me realize that I was being dumb with the way I added internal page links for pages with a table of contents. + +As the ultimate test, I used the Orca screen reader software so that I could experience my website as someone who actually needs to use screen reader software would experience it. + +In terms of page content, I made sure that all of my images have `alt` text, all of my links are descriptive instead of just reading "click here" or "this", and all of my `<input>` elements have a `label` tag. + +In addition to accessibility for those with disabilities, I also made my website more accessible to those with slower internet connections by attempting to optimize page loading times by shrinking images and keeping requests down to a minimum. The only thing I didn't do was embed images, no matter how small, into my HTML because that would needlessly increase page sizes for those who browse using browsers that don't render images or display favicons. I tried to make my website look good with any browser, no matter how old. + +I also took this opportunity to add a light-mode theme to the website by making use of the `@media` query `prefers-color-scheme: light`. If you are using a light OS theme, you should be able to see my website in a light colour scheme. + +Below is a list of resources that I used in redesigning my website: + +* Tanaguru Contrast Finder[1] +* Toptal Colour Blind Filter[2] +* Viewable with Any Browser[3] +* WebAIM Contrast Checker[4] +* Website Accessibility Checklist[5] +* W3 Introduction to Accesibility[6] +* W3 Page Structure Explanation[7] +* W3 Schools CSS Reference[8] +* WAVE Web Accessibility Validation Tool[9] +* Google's PageSpeed Insights[10] +* Inclusively Hidden (a blog post about hiding things accessibly)[11] +* WebPageTest[12] +* WebPageTest's Lighthouse Test (run Lighthouse without Google Chrome)[13] +\ No newline at end of file diff --git a/gemini/pages/blog/why-dwm-swallowing-cant-swallow-tmux.gmi b/gemini/pages/blog/why-dwm-swallowing-cant-swallow-tmux.gmi Binary files differ. diff --git a/gemini/pages/blog/why-email-is-the-best-discussion-platform.gmi b/gemini/pages/blog/why-email-is-the-best-discussion-platform.gmi @@ -0,0 +1,67 @@ +## Why Email is the Best Discussion Platform + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-06-07 | + <b>Last Updated:</b> 2020-06-07 +</div> +``` + +***Update**: Expand on asynchronous nature and federated structure. Additions in italics.* + +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 "more modern" or "easier to use". For the most part, I understand where they're coming from. To them, email seems like an archaic platform where you can't embed images, it's not completely synchronous, and... I honestly couldn't think of a third thing... + +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't necessary and they rarely improve discussions which could otherwise happen, and work just fine, over email. + +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. + +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). + +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'll just be focusing on why email is better in this post. + +The biggest problem with these so called "modern" platforms is that they'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. + +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'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't already sell it themselves). + +```html +<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> +``` + +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's computer runs. + +So, what does email bring to the table over the "modern" options? Email is federated, it allows one to use a variety of different clients, it can be used both for patches and discussion, it's nowhere near as difficult to use as people make it out to be, *the asynchronous nature is very beneficial*, and it eschews cruft and flash to leave you with nothing but plain text. + +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'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. *Also, it being federated means that you'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.* + +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. + +Another great thing about email is that it can be used for patches in addition to discussion. Sending patches via email[1] 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. + +=> https://git-send-email.io 1: https://git-send-email.io + +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'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. + +Regarding things like bolding and italicizing, people make do just fine using `/italics/`, `_underlines_`, or `*bolds*`. There's even `ALL CAPS` for when you're really angry. In short, you'll have no issue getting your point across. Some also say that email conversations are difficult to follow, but that's not really true depending on your mail client; they're more like Reddit threads in any decent email client which supports conversation threading. + +```html +<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> +``` + +*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'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's also a lot less pressure on one to respond immediately and there are no anxiety-inducing typing indicators.* + +The final point that I want to make about email is that, just like IRC, there are no frills; it'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's all just Unicode. + +*This is my thirty-seventh post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/why-i-blog.gmi b/gemini/pages/blog/why-i-blog.gmi @@ -0,0 +1,27 @@ +## Why I Blog and #100DaysToOffload + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-04-25 | + <b>Last Updated:</b> 2020-04-25 +</div> +``` + +Today is my first day of the #100DaysToOffload[1] challenge; a challenge started by Kev Quirk[2] to encourage new and seasoned bloggers alike to start writing. Since it's currently *2020-04-25* for me, this means I'll try to post something new every day from today until *2020-08-03*. That's a lot of blogging! + +=> https://pleroma.paritybit.ca/tag/100daystooffload 1: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://kevq.uk/ 2: https://kevq.uk/ + +Kev also recently made a blog post, inspired by a blog post by Jan-Lukas Else[3], asking people why they blog[4] which I think is a great topic to kick off this challenge. + +=> https://jlelse.blog/posts/why-no-blog/ 3: https://jlelse.blog/posts/why-no-blog/ +=> https://kevq.uk/why-i-have-a-blog/ 4: https://kevq.uk/why-i-have-a-blog/ + +I blog because it's a way for me to share my thoughts. I could be promoting something I've made, showcasing something I'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. + +There is a great feeling of satisfaction that comes with posting and sharing a new blog post. It'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've written inspired or helped them. + +That's why I blog. + +=> https://pleroma.paritybit.ca/tag/100daystooffload #100DaysToOffload +\ No newline at end of file diff --git a/gemini/pages/blog/why-i-hate-the-term-modern.gmi b/gemini/pages/blog/why-i-hate-the-term-modern.gmi @@ -0,0 +1,52 @@ +## Why I Hate The Term "Modern" + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-07-16 | + <b>Last Updated:</b> 2020-07-16 +</div> +``` + +I strongly despise the word "modern" because of its use as a term to demean and refuse to consider something just because it wasn't created in the last handful of years and even to market something as being good because it's new. The word modern has somehow become associated with "something better" even though, in the context of computing, that is rarely true. + +According to Merriam-Webster[1], the word "modern" is defined as: + +=> https://www.merriam-webster.com/dictionary/modern 1: https://www.merriam-webster.com/dictionary/modern + +``` +1 a : of, relating to, or characteristic of the present or the immediate past : + contemporary + // the modern American family + b : of, relating to, or characteristic of a period extending from a relevant + remote past to the present time + // modern history + +2 : involving recent techniques, methods, or ideas : up-to-date + // 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 + //Modern English + +4 : of or relating to modernism : modernist + // Modern art has abandoned the representation of recognizable objects. +``` + +Really what I'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. + +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 "Why not use a modern editor like VS Code?" or "Why not use a modern web interface for your email?". + +Naturally I'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 "modern" (whatever that actually means), that my guard instantly goes up and I assume I'm about to be chastised for using something uncommon. + +For a more specific, generally relatable example, there's the Git email workflow. I have seen the argument made that using Git via email is not "modern" and the GitHub way to contribute to projects is the "modern" 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'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. + +To stop myself from rambling on (many paragraphs have been deleted and re-written), I will end by saying that it'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't look pretty or follow a common way of doing things perpetuated or created by Silicon Valley companies doesn't make it automatically bad. ¬□("Modern" = "Good"). + +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. Please don'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. + +*This is my seventy-third post for the #100DaysToOffload[2] challenge. You can learn more about this challenge over at https://100daystooffload.com[3][4].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 2: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 3: https://100daystooffload.com +=> https://100daystooffload.com 4: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/blog/why-i-love-the-fediverse.gmi b/gemini/pages/blog/why-i-love-the-fediverse.gmi @@ -0,0 +1,37 @@ +## Why I Love the Fediverse + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-05-10 | + <b>Last Updated:</b> 2020-05-10 +</div> +``` + +The fediverse[1] (federated universe) is made up of different pieces of federating software[2] such as Pleroma[3] or Mastodon[4]. 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's not what I want to focus on in this post. + +=> https://en.wikipedia.org/wiki/Fediverse 1: https://en.wikipedia.org/wiki/Fediverse +=> https://en.wikipedia.org/wiki/Distributed_social_network 2: https://en.wikipedia.org/wiki/Distributed_social_network +=> https://pleroma.social/ 3: https://pleroma.social/ +=> https://joinmastodon.org/ 4: https://joinmastodon.org/ + +A few years back I, swore off of social media after experiencing the toxicity of places like Reddit and Twitter which have undoubtedly been Septembered[5]. The influx of "normal people" 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's morale over time especially when it feels like one can't have good discussions anymore. + +=> https://en.wikipedia.org/wiki/Eternal_September 5: https://en.wikipedia.org/wiki/Eternal_September + +Using Mastodon (which is the only part of the fediverse I currently use), on the other hand, has been completely the opposite experience. I've noticed that people on Mastodon have been super welcoming, willing to help[6] and incredibly nice[7]. Perhaps its because Mastodon is still quite small compared to the walled garden social networks, or perhaps it's because each instance has its own culture and set of people with common views, but regardless, it's been a great experience. + +=> https://social.paritybit.ca/web/statuses/104139315294826147 6: https://social.paritybit.ca/web/statuses/104139315294826147 +=> https://social.paritybit.ca/web/statuses/104132480060820626 7: https://social.paritybit.ca/web/statuses/104132480060820626 + +... and here I was saying I'd never use social media. + +(If you'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 fosstodon.org[8]. It's run by some great folk and many of the people I follow are from there.). + +=> https://fosstodon.org/about 8: https://fosstodon.org/about + +*This is my sixteenth post for the #100DaysToOffload[9] challenge. You can learn more about this challenge over at https://100daystooffload.com[10][11].* + +=> https://pleroma.paritybit.ca/tag/100daystooffload 9: https://pleroma.paritybit.ca/tag/100daystooffload +=> https://100daystooffload.com 10: https://100daystooffload.com +=> https://100daystooffload.com 11: https://100daystooffload.com diff --git a/gemini/pages/blog/why-irc-is-still-good.gmi b/gemini/pages/blog/why-irc-is-still-good.gmi @@ -0,0 +1,62 @@ +## Why IRC is Still Good in $CURRENT_YEAR + +```html +<div class="byline"> +<b>Written By:</b> Jake Bauer | + <b>Posted:</b> 2020-08-30 | + <b>Last Updated:</b> 2020-09-02 +</div> +``` + +```html +<figure> + <a href="https://xkcd.com/1782/"> + <img src="https://imgs.xkcd.com/comics/team_chat.png"/></a> + <figcaption>XKCD Comic #1782: Team Chat ([CC-BY-NC + 2.5](https://creativecommons.org/licenses/by-nc/2.5/))</figcaption> +</figure> +``` + +Similar to how I think e-mail is still the best discussion platform[1], I think there is still a solid place for IRC in our lives. + +=> https://www.paritybit.ca/blog/why-email-is-the-best-discussion-platform 1: https://www.paritybit.ca/blog/why-email-is-the-best-discussion-platform + +IRC (Internet Relay Chat) is a communications protocol created in 1988[2] and, yeah, it shows. IRC is 100% plain text; no images, no videos, no stickers, no emoji reactions, just good ol' 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 1337 h4x0rs[3] were pretty much just kids using their modems to make long distance calls for free. + +=> https://daniel.haxx.se/irchistory.html 2: https://daniel.haxx.se/irchistory.html +=> https://www.urbandictionary.com/define.php?term=1337%20h4x0r 3: https://www.urbandictionary.com/define.php?term=1337%20h4x0r + +Nowadays, IRC is probably not such a good platform for private personal chats, but that doesn't mean it's not good for other things. + +Arguably the best "feature" of IRC is that it'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'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 send files using IRC[4]. + +=> https://en.wikipedia.org/wiki/Internet_Relay_Chat#File_sharing 4: https://en.wikipedia.org/wiki/Internet_Relay_Chat#File_sharing + +One aspect of computing and software design that many developers nowadays seem to forget is that over half of the world's population does not have access to fast Internet[5] 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/tmux session on a remote server to not miss things if their connection is that spotty. + +=> https://en.wikipedia.org/wiki/List_of_countries_by_Internet_connection_speeds 5: https://en.wikipedia.org/wiki/List_of_countries_by_Internet_connection_speeds + +```html +<p class="note">Did you know, [IRC played a critical role in getting networks +back up](https://twitter.com/JobSnijders/status/1300068892719697920) during the +[recent CenturyLink +outage](https://www.businessinsider.com/centurylink-internet-outage-takes-amazon-xbox-live-hulu-cloudflare-down-2020-8)?</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're not connected, you'd have to use an IRC bouncer or screen/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'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't really care what's happening when you're not there because these are synchronous conversations which is perfect for the ephemeral nature of IRC. + +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's entirely possible to set up an IRC server which mandates encryption and doesn't store logs long-term. If you're in a group of people you can trust to be competent then it's entirely possible to make IRC work this way and have a reasonable guarantee of privacy and security. + +I suppose I should also mention the federating aspect of IRC since that's quite a hot topic in the open source social platform world. IRC does federate in a way, but it'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/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. + +The reason why this isn't really such a big issue when it comes to IRC though is that IRC doesn't really have accounts. Sure, you can usually register a nickname with a network's NickServ bot to reserve it, but that'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. + +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't mean it'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 IRCv3[6]. + +=> https://ircv3.net/ 6: https://ircv3.net/ + +*This is my ninety-eighth post for the #100DaysToOffload[7] challenge. You can learn more about this challenge over at https://100daystooffload.com[8][9].* + +=> https://social.paritybit.ca/tags/100DaysToOffload 7: https://social.paritybit.ca/tags/100DaysToOffload +=> https://100daystooffload.com 8: https://100daystooffload.com +=> https://100daystooffload.com 9: https://100daystooffload.com +\ No newline at end of file diff --git a/gemini/pages/contact.gmi b/gemini/pages/contact.gmi @@ -15,10 +15,7 @@ The master public key should have the following fingerprint: 8A55 347B 2845 6BA7 0E43 B864 C3EB 9CAF 610B B4FB ``` -To send feedback, comment on an article or the content of a page, or to let me -know that you've posted something that refers to my site and you want to draw my -attention to it (e.g. a reply to one of my blog posts), send me an email or let -me know via Pleroma: +To send feedback, comment on an article or the content of a page, or to let me know that you've posted something that refers to my site and you want to draw my attention to it (e.g. a reply to one of my blog posts), send me an email or let me know via Pleroma: => https://pleroma.paritybit.ca diff --git a/gemini/pages/links.gmi b/gemini/pages/links.gmi @@ -1,381 +1,298 @@ -# Links - -## General Life - -* [How To Argue Effectively And Productively: 31 Rules of Argument](https://perfect24hours.com/how-to-argue-effectively/) - - Solve yourself a lot of pain and headache by learning how to argue the right - way. - -* [A cheatsheet on Discourse](https://wiki.xxiivv.com/site/discourse.html) - - A nice cheatsheet on having good discourse. - -## Internet and Hacker Culture - -* [Hacker Laws](https://github.com/dwmkerr/hacker-laws) - "Laws, Theories, - Principles and Patterns that developers will find useful." - -* [How To Ask Questions The Smart Way](http://catb.org/~esr/faqs/smart-questions.html) - - A document by [Eric S. - Raymond](https://en.wikipedia.org/wiki/Eric_S._Raymond) about how to ask - questions on the Internet. An essential read for everyone seeking help of - strangers on the Internet. - -* [How to ask good questions](https://jvns.ca/blog/good-questions/) - - An article by [Julia Evans](https://jvns.ca/about/) about asking good - questions. This deals more with asking questions of people you know rather - than of strangers on the Internet and it is also more friendly in its tone - (although I do like and respect the - ["kick-in-the-pants"](https://idioms.thefreedictionary.com/a+kick+in+the+pants) - tone of Eric S. Raymond's essay). - -* [How to Become a Hacker](http://www.catb.org/~esr/faqs/hacker-howto.html) - - A valuable read for anyone wanting to become a programmer, wanting to - contribute to free/open source projects, or anyone who is a self-proclaimed - "hacker". - -* [Use plaintext email](https://useplaintext.email) - A website detailing the - reasons why you should use plaintext email instead of HTML email. Also talks - about email etiquette which makes this a must-read if you are thinking of - contributing to software projects which do most of their communication over - email (e.g. Debian, the Linux kernel). - -* [Email Etiquette](http://david.woodhou.se/email.html) - - Bits of email etiquette which remain relevant to this day. - -* [Thoughts on the subject of ethical licenses](https://lists.sr.ht/~sircmpwn/public-inbox/%3CC125C6RFZ9JQ.2PYJMAKMD2F8A@homura%3E) - - An email Drew DeVault sent to license-discuss (an OSI mailing list) about - his feelings on Ethical Software licenses. His words pretty closely echo my - own feelings about Ethical Software licenses. - -* [How I do my computing](https://stallman.org/stallman-computing.html) - - An interesting article written by [Richard - Stallman](https://en.wikipedia.org/wiki/Richard_Stallman) on how he uses his - computers. - -* [Should I Block Ads?](https://shouldiblockads.com/) - -* [Tech’s Masturbatory Historiography](https://medium.com/@enkiv2/techs-masturbatory-historiography-6d7ae12abf1f) - - A criticism of the way we look at the history of technology when, in - reality, we are so far off the mark of what the creator's originally - envisioned. - -* [Rediscovering the Small Web](https://neustadt.fr/essays/the-small-web/) - -* [unixgraybeard.com](http://unixgraybeard.com/) - What is a greybeard anyways? - -* [The ASCII Ribbon Campaign](http://www.asciiribbon.org) - - One of the first movements shunning HTML email. - -* [Conduct unbecoming of a hacker](https://sealedabstract.com/rants/conduct-unbecoming-of-a-hacker/index.html) - - Stop bikeshedding and flaming, start solving problems with patches. - -* [Delightful-CLI](https://codeberg.org/shellowl/delightful-cli) - - "A curated list of delightful CLI software for the console lovers, and all FOSS." - -* [HTTP/2.0 — The IETF is Phoning It In](https://queue.acm.org/detail.cfm?id=2716278) - - Why HTTP/2.0 is not a good successor to HTTP/1.1. - -* [Permacomputing](http://viznut.fi/texts-en/permacomputing.html) - - "A collection of random thoughts regarding the application of permacultural - ideas to the computer world." - -## Writing - -* [George Orwell's Essay: Politics and the English Language](https://www.orwell.ru/library/essays/politics/english/e_polit/) - - A very compelling essay on how writers and speakers use the English language - to say very little and what we should try to do in our writing to not - succumb to these anti-patterns. Although this was written in 1946, it easily - sounds like it could have been written in 2020. - -## The Workplace - -* [The Unspoken Truth About Managing Geeks](https://www.computerworld.com/article/2527153/opinion-the-unspoken-truth-about-managing-geeks.html) - - A valuable read for anyone managing a technical group of people. - -## Business - -* [Doordash and Pizza Arbitrage](https://themargins.substack.com/p/doordash-and-pizza-arbitrage) - - More evidence of the unsustainable, ridiculous business models behind food - delivery startups. - -* [Why Mastodon and the fediverse are “doomed to fail”](https://write.as/eloquence/why-mastodon-and-the-fediverse-are-doomed-to-fail) - -* [Killed by Google](https://killedbygoogle.com/) - A list of things (apps, - services, etc.) created/owned then killed by Google. - -* [Killed by Mozilla](https://killedbymozilla.com/) - A list of things (apps, - services, etc.) created/owned then killed by Mozilla. - -## Videos and Lectures - -* [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) - - A great resource on the things that are really helpful as a programmer and - computer scientist but which school glosses over and expects you to figure - out on your own. Things like making effective use of the terminal, using - tools like vim, and version control. - -* [FOSDEM 2020 - The Selfish Contributor Explained](https://fosdem.org/2020/schedule/event/selfish_contributor/) - - A talk about what motivates open source contributors and what can happen - when people feel like they're being taken advantage of. - -* ["I accept scientific consensus — and you prob should too"](https://www.youtube.com/watch?v=gpdsbpCZVZw) - - A short video on the value of trusting the scientific consensus despite the - fact that we get things wrong sometimes. Read the top pinned comment for - additional information. - -* [What is Right to Repair? An introduction for curious people.](https://www.youtube.com/watch?v=Npd_xDuNi9k) - - A simple, clear explanation of what Right to Repair is from respected repair - technician and business owner Louis Rossmann. - -* [Words and Buttons Online](https://wordsandbuttons.online/) - - A growing collection of interactive tutorials, guides and quizzes about - things generally considered boring. - -* [Free software, free society: Richard Stallman at TEDxGeneva 2014](https://www.youtube.com/watch?v=Ag1AKIl_2GM) - - A talk by Richard Stallman, the founder of the Free Software movement, on - how free software leads to a free society. - -* [Clean Coders Hate What Happens to Your Code When You Use These Enterprise Programming Tricks](https://www.youtube.com/watch?v=FyCYva9DhsI) - - Kevlin Henney talks about programming anti-patterns and cargo cult - programming. - -* [Jonathan Blow - Preventing the Collapse of Civilization](https://www.youtube.com/watch?v=pW-SOdj4Kkk) - - Discussing the very real risk of knowledge loss in the software industry - with historical context and a look at the direction the industry is heading. - -## Programming - -* [Computers Can Be Understood](https://blog.nelhage.com/post/computers-can-be-understood/) - -* [What is a "Black Triangle" moment?](https://philosophistry.com/archives/2009/01/what-is-a-black.html) - -* [Seven Stages of Open Software](https://coiled.io/blog/stages-of-openness.html) - - "This post lays out the different stages of openness in Open Source Software - (OSS) and the benefits and costs of each." - -* [Bjarne Stroustrup: “I Did It For You All...”](http://harmful.cat-v.org/software/c++/I_did_it_for_you_all) - - A complete transcript of an interview with C++ creator Bjarne Stroustrup - from 1998. A very interesting look into the creation of C++. - -* [systemd, 10 years later: a historical and technical retrospective](https://blog.darknedgy.net/technology/2020/05/02/0/index.html) - - A retrospective and critique of systemd. - -* [Don't apologize, analyze](https://zerokspot.com/weblog/2020/05/07/dont-apologize-analyze/) - - Reduce the blame-game for bugs and stop making people feel shameful for - introducing them. - -* [All software sucks](http://harmful.cat-v.org/software/) - - Several examples of how complexity in software is the ultimate bane of - computing. - -* [Software Disenchantment](https://tonsky.me/blog/disenchantment/) - - A good read about the current state of software development. - -* [Where Did Software Go Wrong?](https://blog.jse.li/posts/software/) - - What happened to take software from what it was intended to be to what it is - now? - -* [My favourite Git commit](https://dhwthompson.com/2019/my-favourite-git-commit) - - A short story about a really good git commit. - -* [General-purpose OS, special-purpose OS, and now: vendor-purpose OS](https://drewdevault.com/2020/06/26/Vendor-purpose-OS.html) - - We used to have OSes that would allow users to solve problems. Now we're - seeing a rise in OSes designed around what vendors will allow users to do. - -* [The code I'm still ashamed of](https://www.freecodecamp.org/news/the-code-im-still-ashamed-of-e4c021dff55e/) - - A good lesson on thinking about the consequences of the code you right and - why ethics are so important in programming. - -* [Etcd, or, why modern software makes me sad](https://www.roguelazer.com/2020/07/etcd-or-why-modern-software-makes-me-sad/) - -* [Problems with Systemd and Why I like BSD Init](https://www.textplain.net/blog/2015/problems-with-systemd-and-why-i-like-bsd-init/) - -* [‘Real’ Programming Is an Elitist Myth](https://www.wired.com/story/databases-coding-real-programming-myth/) - -* [The Second-system effect](https://en.wikipedia.org/wiki/Second-system_effect) - -* [Compilers in OpenBSD](https://marc.info/?l=openbsd-misc&m=137530560232232) - -* [Semantic Versioning](https://semver.org/spec/v2.0.0.html) - -### Vim - -* [Vim anti-patterns](https://sanctum.geek.nz/arabesque/vim-anti-patterns/) - - A writeup of some of the traps people can fall into when using vim and how - to get out of them (I know I'm guilty of a few). - -* [vimways.org](https://vimways.org/) - A collection of some good tips and - tricks for using vim more efficiently/effectively. - -* [vimcasts.org](http://vimcasts.org/) - A collection of useful tutorials and - webcasts on using vim. - -* [How to Do 90% of What Plugins Do (With Just Vim)](https://www.invidio.us/watch?v=XA2WjJbmmoM) - -### Web Design - -* [CO2 emissions on the web](https://dannyvankooten.com/website-carbon-emissions/) - - A fantastic article about the hidden impact of our websites and Internet - traffic. Every byte counts. - -* [Website Carbon Calculator](https://www.websitecarbon.com/) - See the estimated impact - your website is having on the environment. - -* [The Website Obestiy Crisis](https://idlewords.com/talks/website_obesity.htm) - - A detailed overview of the current crisis regarding the size of modern - websites and the issues arising from this "obesity crisis". - -* [How to fix the broken web as a site owner and web developer](https://markosaric.com/broken-web/) - - Tips on how to make the experience of browsing your website more privacy and - user friendly. - -* [Guidelines for Brutalist Web Design](https://brutalist-web.design/) - - Describing the brutalist web design philosophy. - -* [Page Weight Matters](https://blog.chriszacharias.com/page-weight-matters) - - The story of how a YouTube developer was able to make YouTube accessible to - far more people by slimming down the codebase. - -* [Obese websites and planet-sized metronomes](https://kevingal.com/blog/metronome.html) - - Building a web-based metronome in under 1KB of code to prove the point that - websites need not be 8 times the size of Jupiter. - -### Blogroll - -Below are a bunch of feeds (blogs/podcasts/YouTube channels) which I follow, -listed in alphabetical order. The content of any site below does not necessarily -represent my views or opinions. - -[Click here for an OPML file of all of the feeds I follow](/blogroll.opml). - -* [#SUGARFREEGAMER](https://sugarfreegamer.com/) ([feed](https://sugarfreegamer.com/rss.xml)) -* [2.5 Admins](https://2.5admins.com/) ([feed](https://2.5admins.com/feed/podcast)) -* [A Bit](https://baez.link/) ([feed](https://baez.link/feed/)) -* [Aaron's Ramblings](https://geekgonecrazy.com/) ([feed](https://geekgonecrazy.com/feed.xml)) -* [Adventures in Tech Land](https://brandelune.github.io/) ([feed](https://brandelune.github.io/adventuresintechland.xml)) -* [All Jupiter Broadcasting Shows](http://www.jupiterbroadcasting.com/) ([feed](http://feed.jupiter.zone/allshows)) -* [Anil Dash](https://anildash.com/) ([feed](https://anildash.com/rss/)) -* [Aral Balkan](https://ar.al/) ([feed](https://ar.al/index.xml)) -* [BSD Now](https://www.bsdnow.tv/) ([feed](https://feeds.fireside.fm/bsdnow/rss)) -* [Bad Voltage &#xBB; Ogg Vorbis](https://www.badvoltage.org/) ([feed](https://www.badvoltage.org/feed/ogg/)) -* [Beyond the Garden Walls](https://write.privacytools.io/darylsun/) ([feed](https://write.privacytools.io/darylsun/feed/)) -* [Blogs on Drew DeVault's blog](https://drewdevault.com/blog.html) ([feed](https://drewdevault.com/feed.xml)) -* [Blogtastic](http://blogtastic.blog/) ([feed](http://blogtastic.blog/index.xml)) -* [CanCookRice](https://cancookrice.com/) ([feed](https://cancookrice.com/rss.xml)) -* [Case Duckworth](https://www.acdw.net/atom.xml) ([feed](https://www.acdw.net/atom.xml)) -* [CassidyJames.com](https://cassidyjames.com/) ([feed](https://cassidyjames.com/feed.xml)) -* [Chris Were's code design blog](https://chriswere.neocities.org/design.html) ([feed](https://chriswere.uk/design.rss.txt)) -* [Chris Wiegman](https://chriswiegman.com/) ([feed](https://chriswiegman.com/index.xml)) -* [Christine Dodrill's Blog](https://christine.website/blog) ([feed](https://christine.website/blog.rss)) -* [Codesections](https://www.codesections.com/) ([feed](https://www.codesections.com/rss.xml)) -* [Coding Blocks](https://www.codingblocks.net/) ([feed](https://www.codingblocks.net/podcast-feed.xml)) -* [Command Line Heroes](https://www.redhat.com/en/command-line-heroes) ([feed](https://feeds.pacific-content.com/commandlineheroes)) -* [Craig Maloney](http://decafbad.net/) ([feed](http://decafbad.net/feed)) -* [Ctrl blog](https://www.ctrl.blog/) ([feed](https://feed.ctrl.blog/latest.atom)) -* [Daniel Playfair Cal&#x2019;s Blog](https://www.danielplayfaircal.com/) ([feed](https://www.danielplayfaircal.com/feed.xml)) -* [Danny van Kooten](https://dannyvankooten.com/) ([feed](https://dannyvankooten.com/feed.xml)) -* [Darknet Diaries](https://darknetdiaries.com/) ([feed](https://feeds.megaphone.fm/darknetdiaries)) -* [Debian News](https://www.debian.org/News/) ([feed](https://www.debian.org/News/news)) -* [Debian Security](http://security.debian.org/) ([feed](https://www.debian.org/security/dsa)) -* [Desmond Rivet - blog](https://desmondrivet.com/) ([feed](https://desmondrivet.com/feeds/blog.rss)) -* [DistroWatch.com: News](http://distrowatch.com/) ([feed](https://distrowatch.com/news/dw.xml)) -* [Dusty Phillips Codes](https://dusty.phillips.codes/) ([feed](https://dusty.phillips.codes/index.xml)) -* [Eleos in space](https://blog.eleos.space/) ([feed](https://blog.eleos.space/rss.xml)) -* [Emanuel Pina](https://emanuelpina.pt/) ([feed](https://emanuelpina.pt/index.xml)) -* [Everything from andy-bell.design](https://hankchizljaw.com/feed/all.xml) ([feed](https://hankchizljaw.com/feed/all.xml)) -* [Fnux's thoughts](https://fnux.ch/atom.xml) ([feed](https://fnux.ch/atom.xml)) -* [Fred's notes](https://ramblings.fred.moe/) ([feed](https://ramblings.fred.moe/rss.xml)) -* [Freddy's Ramblings](https://write.privacytools.io/freddy/) ([feed](https://write.privacytools.io/freddy/feed/)) -* [G's Blog](https://blog.marcg.pizza/marcg/) ([feed](https://blog.marcg.pizza/marcg//feed/)) -* [GarrettDimon.com](https://garrettdimon.com/) ([feed](https://garrettdimon.com/feed.xml)) -* [Gerrit Niezen](https://gerritniezen.com/) ([feed](https://gerritniezen.com/feed/)) -* [Gokberk Yaltirakli](https://www.gkbrk.com/) ([feed](https://www.gkbrk.com/feed.xml)) -* [Gregory Hammond](https://gregoryhammond.ca/) ([feed](https://gregoryhammond.ca/feed/)) -* [Hackable?](https://hackablepodcast.com/) ([feed](https://feeds.hackablepodcast.com/hackable)) -* [Humaid AlQassimi's Blog](https://humaidq.ae/blog/) ([feed](https://humaidq.ae/blog/index.xml)) -* [In a stream of Random Thoughts ..](https://randomthoughts.dk/) ([feed](https://randomthoughts.dk/index.xml)) -* [J.R. Swab's Blog](https://jrswab.com/blog.atom) ([feed](https://jrswab.com/blog.atom)) -* [Jakob's Personal Webpage](http://jakob.space/feed.xml) ([feed](http://jakob.space/feed.xml)) -* [JeffJessie](https://write.as/jeffjessie/) ([feed](https://write.as/jeffjessie/feed/)) -* [Justin Vollmer](https://www.justinvollmer.com/) ([feed](https://www.justinvollmer.com/feed/)) -* [Karan Goel](https://goel.io/) ([feed](https://goel.io/feed.xml)) -* [Kev Quirk](https://kevq.uk/) ([feed](https://kevq.uk/feed)) -* [Kevin's Blog](https://kevingal.com/) ([feed](https://kevingal.com/feed.xml)) -* [Kyle Piira](https://www.kylepiira.com/) ([feed](https://www.kylepiira.com/feed)) -* [LOW&#x2190;TECH MAGAZINE](https://solar.lowtechmagazine.com/) ([feed](https://solar.lowtechmagazine.com/feeds/all-en.atom.xml)) -* [Late Night Linux](https://latenightlinux.com/) ([feed](https://latenightlinux.com/feed/mp3)) -* [Laura Kalbag&#x2019;s Blog Posts, Photos and Notes](https://laurakalbag.com/) ([feed](https://laurakalbag.com/index.xml)) -* [Leonora Tindall on Nora Codes](https://nora.codes/) ([feed](https://nora.codes/index.xml)) -* [Linux For Poets](http://linuxforpoets.com/) ([feed](http://linuxforpoets.com/feed.xml)) -* [Lopeztel's Blog](https://qua.name/lopeztel/) ([feed](https://qua.name/lopeztel/feed/)) -* [Lukas Rosenstock's Blog](https://lukasrosenstock.net/) ([feed](https://lukasrosenstock.net/feed.xml)) -* [Mastering the Web - Roman Zolotarev](https://www.romanzolotarev.com/) ([feed](https://www.romanzolotarev.com/rss.xml)) -* [Matt](https://write.as/matt/) ([feed](https://write.as/matt/feed/)) -* [Matthias Ott &#x2013; User Experience Designer](https://matthiasott.com/rss) ([feed](https://matthiasott.com/rss)) -* [Matthias Thym](https://matthias.thym.at/blog/) ([feed](https://matthias.thym.at/blog/index.xml)) -* [Max B&#xF6;ck](https://mxb.dev/) ([feed](https://mxb.dev/feed.xml)) -* [Mike Stone](https://mikestone.me/) ([feed](https://mikestone.me/feed/)) -* [Nduli's World](https://jnduli.co.ke/) ([feed](https://jnduli.co.ke/feeds/all.atom.xml)) -* [Newsletter feed for Surya's Technical Blog](https://buttondown.email/surya) ([feed](https://buttondown.email/surya/rss)) -* [Nixing | Linux Adventures](https://nixing.mx/feed.xml%3E) ([feed](https://nixing.mx/feed.xml)) -* [Normand](https://blog.gemnoc.ca/) ([feed](https://blog.gemnoc.ca/feed/)) -* [Open Source Security Podcast](http://opensourcesecuritypodcast.com/) ([feed](https://opensourcesecuritypodcast.libsyn.com/rss)) -* [Pierre Neidhardt's homepage](https://ambrevar.xyz/atom.xml) ([feed](https://ambrevar.xyz/atom.xml)) -* [Pleroma Admin Announcements](https://pleroma.social/announcements/feed.xml) ([feed](https://pleroma.social/announcements/feed.xml)) -* [Posts on Made of Bugs](https://blog.nelhage.com/post/) ([feed](https://blog.nelhage.com/atom.xml)) -* [Posts on On LinuxLiaison](https://bnolet.me/posts/) ([feed](https://bnolet.me/posts/index.xml)) -* [Posts on Rocket Nine Labs](https://rocketnine.space/post/) ([feed](https://rocketnine.space/post/index.xml)) -* [Posts on Secluded.Site](https://secluded.site/posts/) ([feed](https://secluded.site/posts/index.xml)) -* [Posts on bn4t.me](https://bn4t.me/posts/) ([feed](https://bn4t.me/posts/index.xml)) -* [Posts on fribbledom's Journal](https://fribbledom.com/posts/) ([feed](https://fribbledom.com/posts/index.xml)) -* [PostsonRandom Geekery](https://randomgeekery.org/post/) ([feed](https://randomgeekery.org/post/index.xml)) -* [Protesilaos Stavrou: Coding blog](https://protesilaos.com/codelog.xml) ([feed](https://protesilaos.com/codelog.xml)) -* [Rahul Chowdhury](https://rahulchowdhury.co/) ([feed](https://rahulchowdhury.co/feed.xml)) -* [Ramblings from Jessie](https://blog.jessfraz.com/) ([feed](https://blog.jessfraz.com/index.xml)) -* [Read the Tea Leaves](https://nolanlawson.com/) ([feed](https://nolanlawson.com/feed)) -* [Roscoe's Notebook](https://write.as/write-as-roscoes-notebook/) ([feed](https://write.as/write-as-roscoes-notebook/feed/)) -* [Ru Singh - Articles, Notes, Replies &amp; more.](https://rusingh.com/feed.xml) ([feed](https://rusingh.com/feed.xml)) -* [SamWhited|blog](https://blog.samwhited.com/atom.xml) ([feed](https://blog.samwhited.com/atom.xml)) -* [Saura's Blog](https://blog.sasach.work/) ([feed](https://blog.sasach.work/feed)) -* [Sean Behan](https://www.seanbehan.dev/) ([feed](https://www.seanbehan.dev/index.xml)) -* [Seth's Blog](https://seths.blog/) ([feed](https://seths.blog/rss)) -* [Simbly Me](https://simbly.me/) ([feed](https://simbly.me/feed/)) -* [Software Freedom Conservancy News](https://sfconservancy.org/news/) ([feed](https://sfconservancy.org/feeds/news/)) -* [Sulairris&#x2019;s blog](https://blog.sulairris.com/) ([feed](https://blog.sulairris.com/feed/)) -* [The New Show](https://thenew.show/) ([feed](https://thenew.show/feed/podcast)) -* [The Privacy, Security, &amp; OSINT Show](http://soundcloud.com/user-98066669) ([feed](http://feeds.soundcloud.com/users/soundcloud:users:261098918/sounds.rss)) -* [The Software Freedom Conservancy Blog.](https://sfconservancy.org/blog/) ([feed](https://sfconservancy.org/feeds/blog/)) -* [TheWKBlog.com](https://www.thewkblog.com/) ([feed](https://www.thewkblog.com/?feed=rss2)) -* [Todd Davies' Blog](https://todddavies.co.uk/blog) ([feed](https://todddavies.co.uk/blog/rss.xml)) -* [Trivial Observations](https://trivial.observer/) ([feed](https://trivial.observer/index.xml)) -* [Up and to the Right](https://jborichevskiy.com/posts/) ([feed](https://jborichevskiy.com/posts/index.xml)) -* [YOUTUBE: Ben Eater](https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCS0N5baNlQWJCUrhCEo8WlA)) -* [YOUTUBE: Gamer's Nexus](https://www.youtube.com/channel/UChIs72whgZI9w6d6FhwGGHA) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UChIs72whgZI9w6d6FhwGGHA)) -* [YOUTUBE: James Hoffmann](https://www.youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCMb0O2CdPBNi-QqPk5T3gsQ)) -* [YOUTUBE: LinusTechTips](https://www.youtube.com/channel/UCXuqSBlHAE6Xw-yeJA0Tunw) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw)) -* [YOUTUBE: Nile Red](https://www.youtube.com/channel/UCFhXFikryT4aFcLkLw2LBLA) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA)) -* [YOUTUBE: Sebastian Lague](https://www.youtube.com/channel/UCmtyQOKKmrMVaKuRXz02jbQ) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ)) -* [YOUTUBE: SmarterEveryDay](https://www.youtube.com/channel/UC6107grRI4m0o2-emgoDnAA) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA)) -* [YOUTUBE: Tech Tangents](https://www.youtube.com/channel/UCerEIdrEW-IqwvlH8lTQUJQ) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCerEIdrEW-IqwvlH8lTQUJQ)) -* [YOUTUBE: Technology Connections](https://www.youtube.com/channel/UCy0tKL1T7wFoYcxCe0xjN6Q) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q)) -* [YOUTUBE: Tom Scott](https://www.youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A) ([feed](https://www.youtube.com/feeds/videos.xml?channel_id=UCBa659QWEk1AI4Tg--mrJ2A)) -* [Yarmo's blog and notes](https://yarmo.eu/) ([feed](https://yarmo.eu/rss/all)) -* []() ([feed](https://degruchy.org/feed)) -* []() ([feed](https://ttmd.grayw.co.uk/rss/)) -* [ayekat.ch](http://ayekat.ch/atom.xml) ([feed](http://ayekat.ch/atom.xml)) -* [buffer = NULL;](http://nullbuffer.com/) ([feed](https://nullbuffer.com/feed.xml)) -* [davd.io](https://www.davd.io/) ([feed](https://www.davd.io/index.xml)) -* [fasterthanli.me](https://fasterthanli.me/index.xml) ([feed](https://fasterthanli.me/index.xml)) -* [humbug](https://humbug.pw/) ([feed](https://humbug.pw/feed.xml)) -* [jlelse's Blog](https://jlelse.blog/) ([feed](https://jlelse.blog/index.xml)) -* [jolek78](https://jolek78.writeas.com/) ([feed](https://jolek78.writeas.com/feed/)) -* [kindly](https://pensinspace.net/kindly/) ([feed](https://pensinspace.net/kindly/feed/)) -* [kriscience](https://krsc.amk.land/) ([feed](https://krsc.amk.land/feed.xml)) -* [musicmatzes blog](https://beyermatthias.de/) ([feed](https://beyermatthias.de/index.xml)) -* [opensource.org News](https://opensource.org/news) ([feed](https://opensource.org/news.xml)) -* [parasurv's webspace](https://parasurv.neocities.org/) ([feed](https://parasurv.neocities.org/rss.xml)) -* [paritybit.ca - What's New](https://www.paritybit.ca/) ([feed](https://www.paritybit.ca/feeds/sitewide-feed.xml)) -* [remy sharp's b:log](https://remysharp.com/) ([feed](https://remysharp.com/feed.xml)) -* [sergio](https://pista36.es/wordpress) ([feed](https://pista36.es/wordpress/index.php/feed/)) -* [tonsky.me](https://tonsky.me/) ([feed](http://tonsky.me/blog/atom.xml)) -* [zerokspot.com](https://zerokspot.com/) ([feed](https://zerokspot.com/index.xml)) +# Links + +## General Life + +* How To Argue Effectively And Productively: 31 Rules of Argument[1] - Solve yourself a lot of pain and headache by learning how to argue the right way. + +=> https://perfect24hours.com/how-to-argue-effectively/ 1: https://perfect24hours.com/how-to-argue-effectively/ + +* A cheatsheet on Discourse[2] - A nice cheatsheet on having good discourse. + +=> https://wiki.xxiivv.com/site/discourse.html 2: https://wiki.xxiivv.com/site/discourse.html + +## Internet and Hacker Culture + +* Hacker Laws[3] - "Laws, Theories, Principles and Patterns that developers will find useful." + +=> https://github.com/dwmkerr/hacker-laws 3: https://github.com/dwmkerr/hacker-laws + +* How To Ask Questions The Smart Way[4] - A document by Eric S. Raymond[5] about how to ask questions on the Internet. An essential read for everyone seeking help of strangers on the Internet. + +=> http://catb.org/~esr/faqs/smart-questions.html 4: http://catb.org/~esr/faqs/smart-questions.html +=> https://en.wikipedia.org/wiki/Eric_S._Raymond 5: https://en.wikipedia.org/wiki/Eric_S._Raymond + +* How to ask good questions[6] - An article by Julia Evans[7] about asking good questions. This deals more with asking questions of people you know rather than of strangers on the Internet and it is also more friendly in its tone (although I do like and respect the "kick-in-the-pants"[8] tone of Eric S. Raymond's essay). + +=> https://jvns.ca/blog/good-questions/ 6: https://jvns.ca/blog/good-questions/ +=> https://jvns.ca/about/ 7: https://jvns.ca/about/ +=> https://idioms.thefreedictionary.com/a+kick+in+the+pants 8: https://idioms.thefreedictionary.com/a+kick+in+the+pants + +* How to Become a Hacker[9] - A valuable read for anyone wanting to become a programmer, wanting to contribute to free/open source projects, or anyone who is a self-proclaimed "hacker". + +=> http://www.catb.org/~esr/faqs/hacker-howto.html 9: http://www.catb.org/~esr/faqs/hacker-howto.html + +* Use plaintext email[10] - A website detailing the reasons why you should use plaintext email instead of HTML email. Also talks about email etiquette which makes this a must-read if you are thinking of contributing to software projects which do most of their communication over email (e.g. Debian, the Linux kernel). + +=> https://useplaintext.email 10: https://useplaintext.email + +* Email Etiquette[11] - Bits of email etiquette which remain relevant to this day. + +=> http://david.woodhou.se/email.html 11: http://david.woodhou.se/email.html + +* Thoughts on the subject of ethical licenses[12] - An email Drew DeVault sent to license-discuss (an OSI mailing list) about his feelings on Ethical Software licenses. His words pretty closely echo my own feelings about Ethical Software licenses. + +=> https://lists.sr.ht/~sircmpwn/public-inbox/%3CC125C6RFZ9JQ.2PYJMAKMD2F8A@homura%3E 12: https://lists.sr.ht/~sircmpwn/public-inbox/%3CC125C6RFZ9JQ.2PYJMAKMD2F8A@homura%3E + +* How I do my computing[13] - An interesting article written by Richard Stallman[14] on how he uses his computers. + +=> https://stallman.org/stallman-computing.html 13: https://stallman.org/stallman-computing.html +=> https://en.wikipedia.org/wiki/Richard_Stallman 14: https://en.wikipedia.org/wiki/Richard_Stallman + +* +=> https://shouldiblockads.com/ Should I Block Ads? + +* Tech’s Masturbatory Historiography[15] - A criticism of the way we look at the history of technology when, in reality, we are so far off the mark of what the creator's originally envisioned. + +=> https://medium.com/@enkiv2/techs-masturbatory-historiography-6d7ae12abf1f 15: https://medium.com/@enkiv2/techs-masturbatory-historiography-6d7ae12abf1f + +* +=> https://neustadt.fr/essays/the-small-web/ Rediscovering the Small Web + +* unixgraybeard.com[16] - What is a greybeard anyways? + +=> http://unixgraybeard.com/ 16: http://unixgraybeard.com/ + +* The ASCII Ribbon Campaign[17] - One of the first movements shunning HTML email. + +=> http://www.asciiribbon.org 17: http://www.asciiribbon.org + +* Conduct unbecoming of a hacker[18] - Stop bikeshedding and flaming, start solving problems with patches. + +=> https://sealedabstract.com/rants/conduct-unbecoming-of-a-hacker/index.html 18: https://sealedabstract.com/rants/conduct-unbecoming-of-a-hacker/index.html + +* Delightful-CLI[19] - "A curated list of delightful CLI software for the console lovers, and all FOSS." + +=> https://codeberg.org/shellowl/delightful-cli 19: https://codeberg.org/shellowl/delightful-cli + +* HTTP/2.0 — The IETF is Phoning It In[20] - Why HTTP/2.0 is not a good successor to HTTP/1.1. + +=> https://queue.acm.org/detail.cfm?id=2716278 20: https://queue.acm.org/detail.cfm?id=2716278 + +* Permacomputing[21] - "A collection of random thoughts regarding the application of permacultural ideas to the computer world." + +=> http://viznut.fi/texts-en/permacomputing.html 21: http://viznut.fi/texts-en/permacomputing.html + +## Writing + +* George Orwell's Essay: Politics and the English Language[22] - A very compelling essay on how writers and speakers use the English language to say very little and what we should try to do in our writing to not succumb to these anti-patterns. Although this was written in 1946, it easily sounds like it could have been written in 2020. + +## The Workplace + +* The Unspoken Truth About Managing Geeks[23] - A valuable read for anyone managing a technical group of people. + +## Business + +* Doordash and Pizza Arbitrage[24] - More evidence of the unsustainable, ridiculous business models behind food delivery startups. + +=> https://www.orwell.ru/library/essays/politics/english/e_polit/ 22: https://www.orwell.ru/library/essays/politics/english/e_polit/ +=> https://www.computerworld.com/article/2527153/opinion-the-unspoken-truth-about-managing-geeks.html 23: https://www.computerworld.com/article/2527153/opinion-the-unspoken-truth-about-managing-geeks.html +=> https://themargins.substack.com/p/doordash-and-pizza-arbitrage 24: https://themargins.substack.com/p/doordash-and-pizza-arbitrage + +* +=> https://write.as/eloquence/why-mastodon-and-the-fediverse-are-doomed-to-fail Why Mastodon and the fediverse are “doomed to fail” + +* Killed by Google[25] - A list of things (apps, services, etc.) created/owned then killed by Google. + +=> https://killedbygoogle.com/ 25: https://killedbygoogle.com/ + +* Killed by Mozilla[26] - A list of things (apps, services, etc.) created/owned then killed by Mozilla. + +=> https://killedbymozilla.com/ 26: https://killedbymozilla.com/ + +## Videos and Lectures + +* The Missing Semester of Your CS Education[27] - A great resource on the things that are really helpful as a programmer and computer scientist but which school glosses over and expects you to figure out on your own. Things like making effective use of the terminal, using tools like vim, and version control. + +=> https://missing.csail.mit.edu/ 27: https://missing.csail.mit.edu/ + +* FOSDEM 2020 - The Selfish Contributor Explained[28] - A talk about what motivates open source contributors and what can happen when people feel like they're being taken advantage of. + +=> https://fosdem.org/2020/schedule/event/selfish_contributor/ 28: https://fosdem.org/2020/schedule/event/selfish_contributor/ + +* "I accept scientific consensus — and you prob should too"[29] - A short video on the value of trusting the scientific consensus despite the fact that we get things wrong sometimes. Read the top pinned comment for additional information. + +=> https://www.youtube.com/watch?v=gpdsbpCZVZw 29: https://www.youtube.com/watch?v=gpdsbpCZVZw + +* What is Right to Repair? An introduction for curious people.[30] - A simple, clear explanation of what Right to Repair is from respected repair technician and business owner Louis Rossmann. + +=> https://www.youtube.com/watch?v=Npd_xDuNi9k 30: https://www.youtube.com/watch?v=Npd_xDuNi9k + +* Words and Buttons Online[31] - A growing collection of interactive tutorials, guides and quizzes about things generally considered boring. + +=> https://wordsandbuttons.online/ 31: https://wordsandbuttons.online/ + +* Free software, free society: Richard Stallman at TEDxGeneva 2014[32] - A talk by Richard Stallman, the founder of the Free Software movement, on how free software leads to a free society. + +=> https://www.youtube.com/watch?v=Ag1AKIl_2GM 32: https://www.youtube.com/watch?v=Ag1AKIl_2GM + +* Clean Coders Hate What Happens to Your Code When You Use These Enterprise Programming Tricks[33] - Kevlin Henney talks about programming anti-patterns and cargo cult programming. + +=> https://www.youtube.com/watch?v=FyCYva9DhsI 33: https://www.youtube.com/watch?v=FyCYva9DhsI + +* Jonathan Blow - Preventing the Collapse of Civilization[34] - Discussing the very real risk of knowledge loss in the software industry with historical context and a look at the direction the industry is heading. + +=> https://www.youtube.com/watch?v=pW-SOdj4Kkk 34: https://www.youtube.com/watch?v=pW-SOdj4Kkk + +## Programming + +=> https://blog.nelhage.com/post/computers-can-be-understood/ Computers Can Be Understood + +=> https://philosophistry.com/archives/2009/01/what-is-a-black.html What is a "Black Triangle" moment? + + +* Seven Stages of Open Software[35] - "This post lays out the different stages of openness in Open Source Software (OSS) and the benefits and costs of each." + +=> https://coiled.io/blog/stages-of-openness.html 35: https://coiled.io/blog/stages-of-openness.html + +* Bjarne Stroustrup: “I Did It For You All...”[36] - A complete transcript of an interview with C++ creator Bjarne Stroustrup from 1998. A very interesting look into the creation of C++. + +=> http://harmful.cat-v.org/software/c++/I_did_it_for_you_all 36: http://harmful.cat-v.org/software/c++/I_did_it_for_you_all + +* systemd, 10 years later: a historical and technical retrospective[37] - A retrospective and critique of systemd. + +=> https://blog.darknedgy.net/technology/2020/05/02/0/index.html 37: https://blog.darknedgy.net/technology/2020/05/02/0/index.html + +* Don't apologize, analyze[38] - Reduce the blame-game for bugs and stop making people feel shameful for introducing them. + +=> https://zerokspot.com/weblog/2020/05/07/dont-apologize-analyze/ 38: https://zerokspot.com/weblog/2020/05/07/dont-apologize-analyze/ + +* All software sucks[39] - Several examples of how complexity in software is the ultimate bane of computing. + +=> http://harmful.cat-v.org/software/ 39: http://harmful.cat-v.org/software/ + +* Software Disenchantment[40] - A good read about the current state of software development. + +=> https://tonsky.me/blog/disenchantment/ 40: https://tonsky.me/blog/disenchantment/ + +* Where Did Software Go Wrong?[41] - What happened to take software from what it was intended to be to what it is now? + +=> https://blog.jse.li/posts/software/ 41: https://blog.jse.li/posts/software/ + +* My favourite Git commit[42] - A short story about a really good git commit. + +=> https://dhwthompson.com/2019/my-favourite-git-commit 42: https://dhwthompson.com/2019/my-favourite-git-commit + +* General-purpose OS, special-purpose OS, and now: vendor-purpose OS[43] - We used to have OSes that would allow users to solve problems. Now we're seeing a rise in OSes designed around what vendors will allow users to do. + +=> https://drewdevault.com/2020/06/26/Vendor-purpose-OS.html 43: https://drewdevault.com/2020/06/26/Vendor-purpose-OS.html + +* The code I'm still ashamed of[44] - A good lesson on thinking about the consequences of the code you right and why ethics are so important in programming. + +=> https://www.freecodecamp.org/news/the-code-im-still-ashamed-of-e4c021dff55e/ 44: https://www.freecodecamp.org/news/the-code-im-still-ashamed-of-e4c021dff55e/ + +=> https://www.roguelazer.com/2020/07/etcd-or-why-modern-software-makes-me-sad/ Etcd, or, why modern software makes me sad + +=> https://www.textplain.net/blog/2015/problems-with-systemd-and-why-i-like-bsd-init/ Problems with Systemd and Why I like BSD Init + +=> https://www.wired.com/story/databases-coding-real-programming-myth/ ‘Real’ Programming Is an Elitist Myth + +=> https://en.wikipedia.org/wiki/Second-system_effect The Second-system effect + +=> https://marc.info/?l=openbsd-misc&amp;m=137530560232232 Compilers in OpenBSD + +=> https://semver.org/spec/v2.0.0.html Semantic Versioning + +## Vim + +* Vim anti-patterns[45] - A writeup of some of the traps people can fall into when using vim and how to get out of them (I know I'm guilty of a few). + +=> https://sanctum.geek.nz/arabesque/vim-anti-patterns/ 45: https://sanctum.geek.nz/arabesque/vim-anti-patterns/ + +* vimways.org[46] - A collection of some good tips and tricks for using vim more efficiently/effectively. + +=> https://vimways.org/ 46: https://vimways.org/ + +* vimcasts.org[47] - A collection of useful tutorials and webcasts on using vim. + +=> http://vimcasts.org/ 47: http://vimcasts.org/ + +=> https://www.invidio.us/watch?v=XA2WjJbmmoM How to Do 90% of What Plugins Do (With Just Vim) + +## Web Design + +* CO2 emissions on the web[48] - A fantastic article about the hidden impact of our websites and Internet traffic. Every byte counts. + +=> https://dannyvankooten.com/website-carbon-emissions/ 48: https://dannyvankooten.com/website-carbon-emissions/ + +* Website Carbon Calculator[49] - See the estimated impact your website is having on the environment. + +=> https://www.websitecarbon.com/ 49: https://www.websitecarbon.com/ + +* The Website Obestiy Crisis[50] - A detailed overview of the current crisis regarding the size of modern websites and the issues arising from this "obesity crisis". + +=> https://idlewords.com/talks/website_obesity.htm 50: https://idlewords.com/talks/website_obesity.htm + +* How to fix the broken web as a site owner and web developer[51] - Tips on how to make the experience of browsing your website more privacy and user friendly. + +=> https://markosaric.com/broken-web/ 51: https://markosaric.com/broken-web/ + +* Guidelines for Brutalist Web Design[52] - Describing the brutalist web design philosophy. + +=> https://brutalist-web.design/ 52: https://brutalist-web.design/ + +* Page Weight Matters[53] - The story of how a YouTube developer was able to make YouTube accessible to far more people by slimming down the codebase. + +=> https://blog.chriszacharias.com/page-weight-matters 53: https://blog.chriszacharias.com/page-weight-matters + +* Obese websites and planet-sized metronomes[54] - Building a web-based metronome in under 1KB of code to prove the point that websites need not be 8 times the size of Jupiter. + +=> https://kevingal.com/blog/metronome.html 54: https://kevingal.com/blog/metronome.html + +## Blogroll + +Below are a bunch of feeds (blogs/podcasts/YouTube channels) which I follow, listed in alphabetical order. The content of any site below does not necessarily represent my views or opinions. + +* Blogs on Drew DeVault's blog[56] (feed[57]) +* Chris Wiegman[58] (feed[59]) +* Christine Dodrill's Blog[60] (feed[61]) +* Craig Maloney[62] (feed[63]) +* Ctrl blog[64] (feed[65]) +* Danny van Kooten[66] (feed[67]) +* Debian News[68] (feed[69]) +* Debian Security[70] (feed[71]) +* Desmond Rivet - blog[72] (feed[73]) +* DistroWatch.com: News[74] (feed[75]) +* Dusty Phillips Codes[76] (feed[77]) +* Fnux's thoughts[78] (feed[79]) +* Freddy's Ramblings[80] (feed[81]) +* G's Blog[82] (feed[83]) +* In a stream of Random Thoughts ..[84] (feed[85]) +* Jakob's Personal Webpage[86] (feed[87]) +* Kev Quirk[88] (feed[89]) +* LOW&#x2190;TECH MAGAZINE[90] (feed[91]) +* Leonora Tindall on Nora Codes[92] (feed[93]) +* Linux For Poets[94] (feed[95]) +* Lopeztel's Blog[96] (feed[97]) +* Mastering the Web - Roman Zolotarev[98] (feed[99]) +* Max B&#xF6;ck[100] (feed[101]) +* Pierre Neidhardt's homepage[102] (feed[103]) +* Pleroma Admin Announcements[104] (feed[105]) +* Posts on Secluded.Site[106] (feed[107]) +* Posts on fribbledom's Journal[108] (feed[109]) +* Saura's Blog[110] (feed[111]) +* Software Freedom Conservancy News[112] (feed[113]) +* The Software Freedom Conservancy Blog.[114] (feed[115]) +* YOUTUBE: Ben Eater[116] (feed[117]) +* YOUTUBE: Gamer's Nexus[118] (feed[119]) +* YOUTUBE: James Hoffmann[120] (feed[121]) +* YOUTUBE: Nile Red[122] (feed[123]) +* YOUTUBE: Sebastian Lague[124] (feed[125]) +* YOUTUBE: SmarterEveryDay[126] (feed[127]) +* YOUTUBE: Tech Tangents[128] (feed[129]) +* YOUTUBE: Technology Connections[130] (feed[131]) +* YOUTUBE: Tom Scott[132] (feed[133]) +* jlelse's Blog[134] (feed[135]) +* jolek78[136] (feed[137]) +* opensource.org News[138] (feed[139]) +* paritybit.ca - What's New[140] (feed[141]) +* tonsky.me[142] (feed[143]) diff --git a/gemini/pages/now.gmi b/gemini/pages/now.gmi @@ -1,7 +1,6 @@ # Now -This is a "now" page. It gives an overview of what's going on in my life at the -moment. +This is a "now" page. It gives an overview of what's going on in my life at the moment. => https://nownownow.com/about Learn more about now pages. diff --git a/gemini/pages/projects.gmi b/gemini/pages/projects.gmi @@ -7,9 +7,7 @@ The source code for all of my projects can be found hosted in either of these pl => https://git.sr.ht/~jbauer SourceHut => https://git.paritybit.ca My Git Server -Although SourceHut is my preferred hosted git service, I also have a to -collaborate with other free software projects. However, I don't host any of my -own repositories on there anymore. +Although SourceHut is my preferred hosted git service, I also have a to collaborate with other free software projects. However, I don't host any of my own repositories on there anymore. ## Major Projects diff --git a/gemini/pages/uses.gmi b/gemini/pages/uses.gmi @@ -1,309 +1,299 @@ -# What I Use - -This page is for those who are curious about the programs and equipment I use -to get work done. It is inspired by: - -=> https://uses.tech/ uses.tech - -## Hardware - -### Desktop - -* **CPU:** Ryzen 5 1600 w/ Stock Cooler -* **RAM:** 2x8GB + 2x4GB (24GB) G.Skill Ripjaws V and 4 respectively -* **GPU:** PowerColor Red Dragon RX 580 4GB -* **PSU:** EVGA SuperNova G2 Gold 650W -* **Motherboard:** AsRock AB350M Pro4 -* **Case:** Deepcool Kendomen Black ATX Mid -* **Storage:** - - **Boot Drive:** Samsung 970 Evo 250GB NVMe SSD - - **Additional Storage:** HGST Deskstar 5K4000 4.0TB 5700RPM HDD - - **Windows Boot:** Crucial MX300 275GB SATA SSD - - **Windows Games:** Samsung 860 Evo 250GB SATA SSD -* **Monitors:** 2x ASUS VP239H-P 23" 1080 IPS - -You can see the original build that I did, along with the cost for each item in -Canadian dollars at the time that it was purchased, by clicking this link to [a -PCPartPicker build list](https://ca.pcpartpicker.com/b/vpLJ7P). RAM prices at -the time (November, 2017) were absolutely horrendous. - -### Laptops - -I own a Thinkpad T440s (I don't actually mind the trackpad) which I purchased -second-hand off of eBay for a grand total of $215 USD after shipping/etc with -the following specifications: - -* **CPU:** Intel i5-4300U -* **RAM:** 4GB Soldered + 4GB Samsung DDR3L SO-DIMM -* **GPU:** Intel Integrated Graphics -* **Storage:** Crucial 250GB SATA SSD -* **Screen:** 1080p IPS - -I also [bought a T420s](/blog/my-new-t420s) which tends to get a bit more use -around the home: - -* **CPU:** Intel i5-2520M -* **RAM:** 2x4GB DDR3 SO-DIMM -* **GPU:** Intel Integrated Graphics -* **Storage:** - * Crucial 128GB SATA SSD - * Kingston 120GB SATA SSD -* **Screen:** 1600x900 TN - -### Tablets - -* Dell Venue 11 Pro 7130 - Used mostly as a portable display for when I need to -reference things like datasheets or D&D rulebooks. - - **CPU:** Intel i5-4300Y - - **RAM:** 8GB DDR3 - - **GPU:** Intel Integrated Graphics - - **Storage:** 128GB SATA M.2 SSD - - **Screen:** 1080p w/ Touch - - With dock and keyboard - - Runs the latest Fedora - -* Samsung Galaxy Tab 3 Lite - Used for reading PDFs, kept entirely offline. - - 1GB RAM - - 8GB Storage - - With protective folding case - -### Phone - -Purchased in 2015 and still going strong almost 5 years later. I haven't even -had to swap the battery yet. - -* ASUS Zenfone 2 Laser - - 3GB RAM - - 16GB Storage - - Runs LineageOS with no Google stuff added - -Once this phone becomes unusable, I'll be replacing it with a -[PinePhone](https://www.pine64.org/pinephone/). - -## Server Equipment - -I try to self-host most of my services and I aim for low-cost, power-efficient, -and silent equipment. Below is a list of the equipment which I currently use: - -### OPNSense Router - -I got this computer as a reward for helping a friend build a PC. I added 2 more -gigabit NICs with a PCIe card for a total of three (one WAN, one LAN, one -Wi-Fi). It has more horsepower than a router typically needs, but it also does -more than a typical router. For example, it runs intrusion detection software -which scans every packet. It also typically only draws 15-20W and stays very -quiet. Here are the specifications: - -* HP SFF Desktop PC w/ Proprietary Motherboard/Case/PSU - - **CPU:** Intel Core i3-3220 CPU @ 3.30GHz (4C/4T) - - **RAM:** 2x2GB DDR3 - - **Storage:** 160GB Fujitsu 2.5" SATA-II HDD - -### Proxmox Server - -This is one of my old laptops. I've owned it for at least 7 years if not longer -and I'm pretty sure it was my second laptop ever. - -* Lenovo V570 Laptop (missing display) - - **CPU:** i5-2450M @ 2.50GHz (2C/4T) - - **RAM:** 12GB DDR3 SO-DIMM - - **Storage:** Seagate Momentus 500GB 5400RPM - - **Backup Storage:** Seagate Expansion 8TB External HDD - -### Git Server - -Purchased for $20 including a case from a local seller. - -* PineA64+ (Original, not LTS) - - **CPU:** Allwinner A64 - - **RAM:** 2GB DDR3 - - **Storage:** 32GB SanDisk Ultra SD Card - -## Hostnames - -These are the names I give my computers/VMs. They are chosen from elements of -the Greek Underworld mythology. - -<table> <thead> -<tr><th>Name</th> <th>Description</th> <th>Current Use</th></tr> -</thead> </tbody> -<tr><td>Acheron</td> <td>River of pain</td> <td>Router/Firewall</td></tr> -<tr><td>Lethe</td> <td>River of forgetfullness</td> <td>Git server</td></tr> -<tr><td>Oceanus</td> <td>River that encircles the world, marks edge of Underworld</td> <td>Dell Venue Tablet</td></tr> -<tr><td>Curae</td> <td>Anxiety</td> <td>Matrix Server</td></tr> -<tr><td>Geras</td> <td>Old Age</td> <td>Thinkpad T420s</td></tr> -<tr><td>Eris</td> <td>Discord</td> <td>Pleroma Instance</td></tr> -<tr><td>Charon</td> <td>The ferryman of the dead</td> <td>Web Server and Reverse Proxy</td></tr> -<tr><td>Cerberus</td> <td>Guardian of the gates to the Underworld</td> <td>Proxmox VE</td></tr> -<tr><td>Hades</td> <td>God of the Underworld</td> <td>Desktop Computer</td></tr> -<tr><td>Tartarus</td> <td>Pits of oblivion, dungeon of torment and suffering</td> <td>Mail Server</td></tr> -</tbody> </table> - -## Software - -<figure> - <a href="/img/dwm-laptop.png"><img src="/img/dwm-laptop.png" alt="A picture - of my desktop with neofetch open."/></a> -</figure> - -I try to stay as far away from proprietary applications as I possibly can. I -typically use terminal-based applications over GUI ones as I find that they feel -more efficient once I've learned how to use them. Many also support vim-like -keybindings which are burned into my muscle memory now. - -View [my dotfiles](https://git.sr.ht/~jbauer/dotfiles) -([mirror](https://git.paritybit.ca/jbauer/dotfiles)). - -### Operating System(s) - -My operating system of choice is [Debian GNU/Linux](https://www.debian.org). I -run the stable variant (which is Debian 10 Buster at the time of writing) on all -of my machines as I love how stable and dependable it is. I also like the fact -that I can do a minimal install with no GUI environment and build my system up -from that (much like Arch). - -Although I really like Debian, I have been experimenting with other -distributions and operating systems. Gentoo has piqued my interest and I've -enjoyed using FreeBSD and OpenBSD (though I don't think I'll be using BSDs on -the desktop for now). - -I am not evangelistic about running specific Linux distributions and prefer to -encourage others to use whichever distribution they are most comfortable with. - -### Desktop Environment/Window Manager - -I use a tiling window manager and have essentially built my own desktop -environment from the ground up by gluing together different components à la the -Unix philosophy. I don't use a display manager; the environment is started with -`startx`. - -I use: - -* [dwm](https://dwm.suckless.org) as my tiling window manager, -* [slstatus](https://tools.suckless.org/slstatus) as my status bar, -* [dmenu](https://tools.suckless.org/dmenu) as my application launcher, -* [dunst](https://dunst-project.org/) as my notification daemon, -* [feh](https://feh.finalrewind.org/) to set my desktop background, -* and [betterlockscreen](https://github.com/pavanjadhaw/betterlockscreen) as my - lock screen. - -### Colourscheme - -I use the [iceberg](https://cocopon.github.io/iceberg.vim/) colourscheme and try -to make the rest of my desktop environment follow that colourscheme. - -### Fonts - -I am partial to the [DejaVu](https://dejavu-fonts.github.io/) font family. I -use them pretty much everywhere. - -### Terminal - -I use [st](https://st.suckless.org/) (aka Simple Terminal). I actually really -like the model of patching a minimal piece of software with the features that I -need and I enjoy the simplicity, speed, and light feeling of it. - -I used to use [urxvt](http://software.schmorp.de/pkg/rxvt-unicode.html) but it -didn't handle unicode that well and lacked truecolour support so [I switched to -st](/blog/urxvt-to-st). - -### File Manager - -I don't use one. I find the tools available on the command line (`mv`, `rm`, -etc) allow me to accomplish what I need to do faster than a dedicated file -manager. - -### Text Editor/IDE - -I use [Neovim](https://neovim.io/). I am very comfortable with the keybindings -and modal nature of vim and vim-like editors. I use a select few plugins and a -colour scheme but try to keep things as minimal as possible. - -### Web Browser - -[Firefox](https://www.mozilla.org/en-US/firefox/new/). I tried using some other -browsers such as qutebrowser but always [kept coming back to -Firefox](/blog/qutebrowser-to-firefox) thanks to its focus on privacy, excellent -ad-blocking support, and general usability. I also use -[lynx](https://lynx.invisible-island.net/) for browsing on the command line. - -I use Firefox with the following addons: - -* uBlock Origin -* Privacy Badger -* HTTPS Everywhere -* Vim Vixen -* KeepassXC-Browser -* Video Speed Controller - -### Mail Client - -I use [aerc](https://aerc-mail.org/). It's light, fast, and lets me efficiently -manage my mail. When I need to go offline, I synchronize my mail with -[mbsync](http://isync.sourceforge.net/). - -### IRC Client - -I use [weechat](https://weechat.org/) as my client. It's customizable, powerful, -and yet simple with sane defaults. - -### Instant Messaging - -I use [Riot](https://about.riot.im/) for [Matrix](https://matrix.org/)-based -communication and [Signal](https://www.signal.org/) with people for whom Matrix -would be a bit too complicated. - -### Password Manager - -I use [KeepassXC](https://keepassxc.org/). I chose it for being really simple to -manage compared to something like BitWarden and because I really like the user -interface. - -### Music Player - -I now use [cmus](https://cmus.github.io/) for its simplicity and ease-of-use. It -does everything I need from a music player. - -### Video Player - -[mpv](https://mpv.io/) is my video player of choice. It's light, simple, and -versatile. It also integrates with youtube-dl so I can watch Youtube videos or -Twitch streams without opening my web browser. - -### RSS Feed Reader - -[Newsboat](https://newsboat.org/) because it's simple, easy, terminal-based, and -I can program a bunch of macros to open up whichever feed in whichever -application I want (e.g. open a Youtube feed in MPV). - -### Document Creation - -I will typically write documents in either markdown or LaTeX. For instances -where I need to interact with `.docx` files and whatnot, I use -[Libreoffice](https://www.libreoffice.org/). - -### Presentations - -I prefer using [sent](https://tools.suckless.org/sent/) because I like the style -of presentation that the tool produces. If I ever need anything more complex I -opt for [Beamer](https://ctan.org/pkg/beamer). - -### Day Planning/Organization/Notes - -I use pen and paper for this. For whatever reason, I find it cumbersome to use -electronic organizers/calendars for keeping track of my life and I much prefer -having something physical to store this information. If you're curious, I use a -Leuchtturm1917 A5 Dot Grid Notebook and a Burgundy/Gold Parker 51 with Waterman -Inspired Blue ink. - -### Image Viewing - -[sxiv](https://github.com/muennich/sxiv) since it handles all the image types I -need it to and has nice keybindings. - -### PDF Viewer - -[Zathura](https://pwmt.org/projects/zathura/) for its excellent keybindings, -nearly instant launching compared to something like Evince, and for being a very -nice minimalist piece of software. Chosen over MuPDF because Zathura has an -index mode. +## What I Use + +This page is for those who are curious about the programs and equipment I use to get work done. It is inspired by uses.tech[1]. + +=> https://uses.tech/ 1: https://uses.tech/ + +### Hardware + +#### Desktop + +* CPU: Ryzen 5 1600 w/ Stock Cooler +* RAM: 2x8GB + 2x4GB (24GB) G.Skill Ripjaws V and 4 respectively +* GPU: PowerColor Red Dragon RX 580 4GB +* PSU: EVGA SuperNova G2 Gold 650W +* Motherboard: AsRock AB350M Pro4 +* Case: Deepcool Kendomen Black ATX Mid +* Storage: + * Boot Drive: Samsung 970 Evo 250GB NVMe SSD + * Additional Storage: HGST Deskstar 5K4000 4.0TB 5700RPM HDD + * Windows Boot: Crucial MX300 275GB SATA SSD + * Windows Games: Samsung 860 Evo 250GB SATA SSD +* Monitors: 2x ASUS VP239H-P 23" 1080 IPS + +You can see the original build that I did, along with the cost for each item in Canadian dollars at the time that it was purchased, by clicking this link to a PCPartPicker build list[2]. RAM prices at the time (November, 2017) were absolutely horrendous. + +=> https://ca.pcpartpicker.com/b/vpLJ7P 2: https://ca.pcpartpicker.com/b/vpLJ7P + +#### Laptops + +I own a Thinkpad T440s (I don't actually mind the trackpad) which I purchased second-hand off of eBay for a grand total of $215 USD after shipping/etc with the following specifications: + +* CPU: Intel i5-4300U +* RAM: 4GB Soldered + 4GB Samsung DDR3L SO-DIMM +* GPU: Intel Integrated Graphics +* Storage: Crucial 250GB SATA SSD +* Screen: 1080p IPS + +I also bought a T420s[3] which tends to get a bit more use around the home: + +=> gemini://paritybit.ca/blog/my-new-t420s 3: /blog/my-new-t420s + +* CPU: Intel i5-2520M +* RAM: 2x4GB DDR3 SO-DIMM +* GPU: Intel Integrated Graphics +* Storage: + * Crucial 128GB SATA SSD + * Kingston 120GB SATA SSD +* Screen: 1600x900 TN + +#### Tablets + +* Dell Venue 11 Pro 7130 - Used mostly as a portable display for when I need to reference things like datasheets or D&D rulebooks. + * CPU: Intel i5-4300Y + * RAM: 8GB DDR3 + * GPU: Intel Integrated Graphics + * Storage: 128GB SATA M.2 SSD + * Screen: 1080p w/ Touch + * With dock and keyboard + * Runs the latest Fedora + +* Samsung Galaxy Tab 3 Lite - Used for reading PDFs, kept entirely offline. + * 1GB RAM + * 8GB Storage + * With protective folding case + +#### Phone + +Purchased in 2015 and still going strong almost 5 years later. I haven't even had to swap the battery yet. + +* ASUS Zenfone 2 Laser + * 3GB RAM + * 16GB Storage + * Runs LineageOS with no Google stuff added + +Once this phone becomes unusable, I'll be replacing it with a PinePhone[4]. + +=> https://www.pine64.org/pinephone/ 4: https://www.pine64.org/pinephone/ + +#### Server Equipment + +I try to self-host most of my services and I aim for low-cost, power-efficient, and silent equipment. Below is a list of the equipment which I currently use: + +##### OPNSense Router + +I got this computer as a reward for helping a friend build a PC. I added 2 more gigabit NICs with a PCIe card for a total of three (one WAN, one LAN, one Wi-Fi). It has more horsepower than a router typically needs, but it also does more than a typical router. For example, it runs intrusion detection software which scans every packet. It also typically only draws 15-20W and stays very quiet. Here are the specifications: + +* HP SFF Desktop PC w/ Proprietary Motherboard/Case/PSU + * CPU: Intel Core i3-3220 CPU @ 3.30GHz (4C/4T) + * RAM: 2x2GB DDR3 + * Storage: 160GB Fujitsu 2.5" SATA-II HDD + +##### Proxmox Server + +This is one of my old laptops. I've owned it for at least 7 years if not longer and I'm pretty sure it was my second laptop ever. + +* Lenovo V570 Laptop (missing display) + * CPU: i5-2450M @ 2.50GHz (2C/4T) + * RAM: 12GB DDR3 SO-DIMM + * Storage: Seagate Momentus 500GB 5400RPM + * Backup Storage: Seagate Expansion 8TB External HDD + +##### Git Server + +Purchased for $20 including a case from a local seller. + +* PineA64+ (Original, not LTS) + * CPU: Allwinner A64 + * RAM: 2GB DDR3 + * Storage: 32GB SanDisk Ultra SD Card + +#### Hostnames + +These are the names I give my computers/VMs. They are chosen from elements of the Greek Underworld mythology. + +```html +<table> <thead> +<tr><th>Name</th> <th>Description</th> <th>Current Use</th></tr> +</thead> </tbody> +<tr><td>Acheron</td> <td>River of pain</td> <td>Router/Firewall</td></tr> +<tr><td>Lethe</td> <td>River of forgetfullness</td> <td>Git server</td></tr> +<tr><td>Oceanus</td> <td>River that encircles the world, marks edge of Underworld</td> <td>Dell Venue Tablet</td></tr> +<tr><td>Curae</td> <td>Anxiety</td> <td>Matrix Server</td></tr> +<tr><td>Geras</td> <td>Old Age</td> <td>Thinkpad T420s</td></tr> +<tr><td>Eris</td> <td>Discord</td> <td>Pleroma Instance</td></tr> +<tr><td>Charon</td> <td>The ferryman of the dead</td> <td>Web Server and Reverse Proxy</td></tr> +<tr><td>Cerberus</td> <td>Guardian of the gates to the Underworld</td> <td>Proxmox VE</td></tr> +<tr><td>Hades</td> <td>God of the Underworld</td> <td>Desktop Computer</td></tr> +<tr><td>Tartarus</td> <td>Pits of oblivion, dungeon of torment and suffering</td> <td>Mail Server</td></tr> +</tbody> </table> +``` + +### Software + +```html +<figure> + <a href="/img/dwm-laptop.png"><img src="/img/dwm-laptop.png" alt="A picture + of my desktop with neofetch open."/></a> +</figure> +``` + +I try to stay as far away from proprietary applications as I possibly can. I typically use terminal-based applications over GUI ones as I find that they feel more efficient once I've learned how to use them. Many also support vim-like keybindings which are burned into my muscle memory now. + +View my dotfiles[5] (mirror[6]). + +=> https://git.sr.ht/~jbauer/dotfiles 5: https://git.sr.ht/~jbauer/dotfiles +=> https://git.paritybit.ca/jbauer/dotfiles 6: https://git.paritybit.ca/jbauer/dotfiles + +#### Operating System(s) + +My operating system of choice is Debian GNU/Linux[7]. I run the stable variant (which is Debian 10 Buster at the time of writing) on all of my machines as I love how stable and dependable it is. I also like the fact that I can do a minimal install with no GUI environment and build my system up from that (much like Arch). + +=> https://www.debian.org 7: https://www.debian.org + +Although I really like Debian, I have been experimenting with other distributions and operating systems. Gentoo has piqued my interest and I've enjoyed using FreeBSD and OpenBSD (though I don't think I'll be using BSDs on the desktop for now). + +I am not evangelistic about running specific Linux distributions and prefer to encourage others to use whichever distribution they are most comfortable with. + +#### Desktop Environment/Window Manager + +I use a tiling window manager and have essentially built my own desktop environment from the ground up by gluing together different components à la the Unix philosophy. I don't use a display manager; the environment is started with startx. + +I use: + +* dwm[8] as my tiling window manager, +* slstatus[9] as my status bar, +* dmenu[10] as my application launcher, +* dunst[11] as my notification daemon, +* feh[12] to set my desktop background, +* and betterlockscreen[13] as my lock screen. + +#### Colourscheme + +I use the iceberg[14] colourscheme and try to make the rest of my desktop environment follow that colourscheme. + +=> https://dwm.suckless.org 8: https://dwm.suckless.org +=> https://tools.suckless.org/slstatus 9: https://tools.suckless.org/slstatus +=> https://tools.suckless.org/dmenu 10: https://tools.suckless.org/dmenu +=> https://dunst-project.org/ 11: https://dunst-project.org/ +=> https://feh.finalrewind.org/ 12: https://feh.finalrewind.org/ +=> https://github.com/pavanjadhaw/betterlockscreen 13: https://github.com/pavanjadhaw/betterlockscreen +=> https://cocopon.github.io/iceberg.vim/ 14: https://cocopon.github.io/iceberg.vim/ + +#### Fonts + +I am partial to the DejaVu[15] font family. I use them pretty much everywhere. + +=> https://dejavu-fonts.github.io/ 15: https://dejavu-fonts.github.io/ + +#### Terminal + +I use st[16] (aka Simple Terminal). I actually really like the model of patching a minimal piece of software with the features that I need and I enjoy the simplicity, speed, and light feeling of it. + +=> https://st.suckless.org/ 16: https://st.suckless.org/ + +I used to use urxvt[17] but it didn't handle unicode that well and lacked truecolour support so I switched to st[18]. + +=> http://software.schmorp.de/pkg/rxvt-unicode.html 17: http://software.schmorp.de/pkg/rxvt-unicode.html +=> gemini://paritybit.ca/blog/urxvt-to-st 18: /blog/urxvt-to-st + +#### File Manager + +I don't use one. I find the tools available on the command line (mv, rm, etc) allow me to accomplish what I need to do faster than a dedicated file manager. + +#### Text Editor/IDE + +I use Neovim[19]. I am very comfortable with the keybindings and modal nature of vim and vim-like editors. I use a select few plugins and a colour scheme but try to keep things as minimal as possible. + +=> https://neovim.io/ 19: https://neovim.io/ + +#### Web Browser + +Firefox[20]. I tried using some other browsers such as qutebrowser but always kept coming back to Firefox[21] thanks to its focus on privacy, excellent ad-blocking support, and general usability. I also use lynx[22] for browsing on the command line. + +=> https://www.mozilla.org/en-US/firefox/new/ 20: https://www.mozilla.org/en-US/firefox/new/ +=> gemini://paritybit.ca/blog/qutebrowser-to-firefox 21: /blog/qutebrowser-to-firefox +=> https://lynx.invisible-island.net/ 22: https://lynx.invisible-island.net/ + +I use Firefox with the following addons: + +* uBlock Origin +* Privacy Badger +* HTTPS Everywhere +* Vim Vixen +* KeepassXC-Browser +* Video Speed Controller + +#### Mail Client + +I use aerc[23]. It's light, fast, and lets me efficiently manage my mail. When I need to go offline, I synchronize my mail with mbsync[24]. + +=> https://aerc-mail.org/ 23: https://aerc-mail.org/ +=> http://isync.sourceforge.net/ 24: http://isync.sourceforge.net/ + +#### IRC Client + +I use weechat[25] as my client. It's customizable, powerful, and yet simple with sane defaults. + +=> https://weechat.org/ 25: https://weechat.org/ + +#### Instant Messaging + +I use Riot[26] for Matrix[27]-based communication and Signal[28] with people for whom Matrix would be a bit too complicated. + +=> https://about.riot.im/ 26: https://about.riot.im/ +=> https://matrix.org/ 27: https://matrix.org/ +=> https://www.signal.org/ 28: https://www.signal.org/ + +#### Password Manager + +I use KeepassXC[29]. I chose it for being really simple to manage compared to something like BitWarden and because I really like the user interface. + +=> https://keepassxc.org/ 29: https://keepassxc.org/ + +#### Music Player + +I now use cmus[30] for its simplicity and ease-of-use. It does everything I need from a music player. + +=> https://cmus.github.io/ 30: https://cmus.github.io/ + +#### Video Player + +mpv[31] is my video player of choice. It's light, simple, and versatile. It also integrates with youtube-dl so I can watch Youtube videos or Twitch streams without opening my web browser. + +=> https://mpv.io/ 31: https://mpv.io/ + +#### RSS Feed Reader + +Newsboat[32] because it's simple, easy, terminal-based, and I can program a bunch of macros to open up whichever feed in whichever application I want (e.g. open a Youtube feed in MPV). + +=> https://newsboat.org/ 32: https://newsboat.org/ + +#### Document Creation + +I will typically write documents in either markdown or LaTeX. For instances where I need to interact with .docx files and whatnot, I use Libreoffice[33]. + +=> https://www.libreoffice.org/ 33: https://www.libreoffice.org/ + +#### Presentations + +I prefer using sent[34] because I like the style of presentation that the tool produces. If I ever need anything more complex I opt for Beamer[35]. + +=> https://tools.suckless.org/sent/ 34: https://tools.suckless.org/sent/ +=> https://ctan.org/pkg/beamer 35: https://ctan.org/pkg/beamer + +#### Day Planning/Organization/Notes + +I use pen and paper for this. For whatever reason, I find it cumbersome to use electronic organizers/calendars for keeping track of my life and I much prefer having something physical to store this information. If you're curious, I use a Leuchtturm1917 A5 Dot Grid Notebook and a Burgundy/Gold Parker 51 with Waterman Inspired Blue ink. + +#### Image Viewing + +sxiv[36] since it handles all the image types I need it to and has nice keybindings. + +=> https://github.com/muennich/sxiv 36: https://github.com/muennich/sxiv + +#### PDF Viewer + +Zathura[37] for its excellent keybindings, nearly instant launching compared to something like Evince, and for being a very nice minimalist piece of software. Chosen over MuPDF because Zathura has an index mode. + +=> https://pwmt.org/projects/zathura/ 37: https://pwmt.org/projects/zathura/