Commit af67e996dc

af67e996dc93ade1acd4eed47d25da55c0c63b50

parent: 4a48163d5b

Unsigned

cmc <hello@cleberg.net> · 2025-11-12 02:56 UTC

fix grammar in 2020 posts

Layout: unified · split

content/blog/2020-01-25-linux-software.org +28 −28
@@ -3,14 +3,14 @@
3#+description: Inventory and description of key Linux applications including graphical and command-line tools, with installation instructions for various distributions. 3#+description: Inventory and description of key Linux applications including graphical and command-line tools, with installation instructions for various distributions.
4#+slug: linux-software 4#+slug: linux-software
5 5
6* GUI Applications 6* Graphical Applications
7 7
8** Etcher 8** Etcher
9 9
10[[https://www.balena.io/etcher/][Etcher]] is a quick and easy way to burn ISO images to CDs and USB devices. There 10[[https://www.balena.io/etcher/][Etcher]] is a quick and easy way to burn an optical disc image (ISO) to a compact
11are two different ways you can install this program. First, you can navigate to 11disc (CD) or universal serial bus (USB) device. There are two different ways you
12the [[https://www.balena.io/etcher/][official website]] and download the AppImage file, which can run without 12can install this program. First, you can navigate to the [[https://www.balena.io/etcher/][official website]] and
13installation. 13download the AppImage file, which can run without installation.
14 14
15However, AppImage files are not executable by default, so you'll either need to 15However, AppImage files are not executable by default, so you'll either need to
16right-click to open the properties of the file and click the "Allow executing 16right-click to open the properties of the file and click the "Allow executing
@@ -24,13 +24,13 @@ If you don't like AppImage files or just prefer repositories, you can use the
24following commands to add the author's repository and install it through the 24following commands to add the author's repository and install it through the
25command-line only. 25command-line only.
26 26
27First, you'll have to echo the repo and write it to a list file: 27First, you'll have to write the repository to a list file:
28 28
29#+begin_src sh 29#+begin_src sh
30echo "deb https://deb.etcher.iostable etcher" | sudo tee /etc/apt/sources.list.d/balena-etcher.list 30echo "deb https://deb.etcher.iostable etcher" | sudo tee /etc/apt/sources.list.d/balena-etcher.list
31#+end_src 31#+end_src
32 32
33Next, add the application keys to Ubuntu's keyring: 33Next, add the application keys to Ubuntu's key ring:
34 34
35#+begin_src sh 35#+begin_src sh
36sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61 36sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
@@ -42,7 +42,8 @@ Finally, update the repositories and install the app.
42sudo apt update && sudo apt install balena-etcher-electron 42sudo apt update && sudo apt install balena-etcher-electron
43#+end_src 43#+end_src
44 44
45Using Arch, Manjaro, or another distro using the AUR? Use this command instead: 45Using Arch, Manjaro, or another distribution using the Arch User Repository
46(AUR)? Use this command instead:
46 47
47#+begin_src sh 48#+begin_src sh
48sudo pacman -S etcher 49sudo pacman -S etcher
@@ -50,9 +51,9 @@ sudo pacman -S etcher
50 51
51** Atom 52** Atom
52 53
53[[https://atom.io][Atom]] is the self-proclaimed "hackable text editor for the 21st century". This 54[[https://atom.io][Atom]] is the self-proclaimed "hackable text editor for the 21st century". GitHub
54text editor is made by GitHub, [[https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/][now owned by Microsoft]], and has some of the best 55develops this editor, [[https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/][now owned by Microsoft]], and has some of the best add-ons
55add-ons available to customize the layout and abilities of the app. 56available to customize the layout and abilities of the app.
56 57
57First, add the Atom repository to your sources. 58First, add the Atom repository to your sources.
58 59
@@ -74,7 +75,7 @@ repository we just added, use this command:
74sudo add-apt-repository -r ppa:webupd8team/atom 75sudo add-apt-repository -r ppa:webupd8team/atom
75#+end_src 76#+end_src
76 77
77You can also install Atom as a snap package, but it must be installed with the 78You can also install Atom as a snap package, but you must install it with the
78=--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more 79=--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more
79about why you need the classic flag. 80about why you need the classic flag.
80 81
@@ -90,11 +91,11 @@ sudo pacman -S atom
90 91
91** Visual Studio Code 92** Visual Studio Code
92 93
93[[https://code.visualstudio.com][Visual Studio Code]] is yet another fantastic choice for programming on Linux, 94[[https://code.visualstudio.com][Visual Studio Code]] (VS Code) is yet another fantastic choice for programming on
94especially if you need those extra add-ons to spice up your late-night coding 95Linux, especially if you need those extra add-ons to spice up your late-night
95sessions. The theme used in the screenshot is [[https://marketplace.visualstudio.com/items?itemName=EliverLara.mars][Mars]] by theme creator [[https://github.com/EliverLara][Eliver Lara]], 96coding sessions. The theme used in the screenshot is [[https://marketplace.visualstudio.com/items?itemName=EliverLara.mars][Mars]] by theme creator
96who makes a ton of great themes for VS Code, Atom, and various Linux desktop 97[[https://github.com/EliverLara][Eliver Lara]], who makes a ton of great themes for VS Code, Atom, and Linux
97environments. 98desktop environments.
98 99
99To install VS Code, you'll need to download the =.deb= file from the official 100To install VS Code, you'll need to download the =.deb= file from the official
100website. Once you've downloaded the file, either double-click it to install 101website. Once you've downloaded the file, either double-click it to install
@@ -104,8 +105,8 @@ through the Software Center or run the following command:
104sudo dpkg -i FILE_NAME.deb 105sudo dpkg -i FILE_NAME.deb
105#+end_src 106#+end_src
106 107
107You can also install VS Code as a snap package, but it must be installed with 108You can also install VS Code as a snap package, but you must install it with the
108the =--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more 109=--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more
109about why you need the classic flag. 110about why you need the classic flag.
110 111
111#+begin_src sh 112#+begin_src sh
@@ -141,9 +142,9 @@ sudo dnf install gnome-tweaks
141** Steam 142** Steam
142 143
143[[https://steampowered.com][Steam]] is one of the most popular gaming libraries for computers and is one of 144[[https://steampowered.com][Steam]] is one of the most popular gaming libraries for computers and is one of
144the main reasons that many people have been able to switch to Linux in recent 145the main reasons that people have been able to switch to Linux in recent years,
145years, thanks to Steam Proton, which makes it easier to play games not 146thanks to Steam Proton, which makes it easier to play games not officially
146officially created for Linux platforms. 147created for Linux platforms.
147 148
148To install Steam on Ubuntu, you just need to install the official package. 149To install Steam on Ubuntu, you just need to install the official package.
149 150
@@ -210,11 +211,10 @@ sudo pacman -S neofetch
210 211
211** yt-dlp 212** yt-dlp
212 213
213[[https://github.com/yt-dlp/yt-dlp][yt-dlp]] is an extremely handy command-line tool that allows you to download video 214[[https://github.com/yt-dlp/yt-dlp][yt-dlp]] is a handy command-line tool that allows you to download video or audio
214or audio files from various websites, such as YouTube. There are a ton of 215files from websites, such as YouTube. There are a ton of different options when
215different options when running this package, so be sure to run =yt-dlp --help= 216running this package, so be sure to run =yt-dlp --help= first to look through
216first to look through everything you can do (or give up and search for the best 217everything you can do (or give up and search for the best configuration online).
217config online).
218 218
219While this shouldn't be a problem for most users, yt-dlp requires Python 2.6, 219While this shouldn't be a problem for most users, yt-dlp requires Python 2.6,
2202.7, or 3.2+ to work correctly, so install Python if you don't have it already. 2202.7, or 3.2+ to work correctly, so install Python if you don't have it already.
@@ -231,7 +231,7 @@ sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o
231/usr/local/bin/yt-dlp 231/usr/local/bin/yt-dlp
232#+end_src 232#+end_src
233 233
234Finally, make the file executable so that it can be run from the command-line. 234Finally, make the file executable so that you can run it from the command-line.
235 235
236#+begin_src sh 236#+begin_src sh
237sudo chmod a+rx /usr/local/bin/yt-dlp 237sudo chmod a+rx /usr/local/bin/yt-dlp
content/blog/2020-01-26-steam-on-ntfs.org +18 −17
@@ -9,13 +9,14 @@ If you want to see how to install Steam on Linux, see my other post: [[../linux-
9Software]]. 9Software]].
10 10
11Are you having trouble launching games, even though they've installed correctly? 11Are you having trouble launching games, even though they've installed correctly?
12This may happen if you're storing your games on an NTFS-formatted drive. This 12This may happen if you're storing your games on an NT File System
13shouldn't be an issue if you're storing your games on the same drive that Steam 13(NTFS)-formatted drive. This shouldn't be an issue if you're storing your games
14is on, but some gamers prefer to put Steam on their main drive and game files on 14on the same drive that Steam is on, but some gamers prefer to put Steam on their
15another SSD or HDD. 15main drive and game files on another solid state drive (SSD) or hard disk drive
16 16(HDD).
17To fix this problem, you'll need to try a few things. First, you'll need to 17
18install the =ntfs-3g= package, which is meant for better interoperability with 18To fix this problem, you'll need to try two things. First, you'll need to
19install the =ntfs-3g= package, which allows for better interoperability with
19Linux. 20Linux.
20 21
21#+begin_src sh 22#+begin_src sh
@@ -38,9 +39,9 @@ For example:
38mkdir /mnt/steam_library 39mkdir /mnt/steam_library
39#+end_src 40#+end_src
40 41
41To automatically mount drives upon system boot, you will need to collect a few 42To automatically mount drives upon system boot, you will need to collect five
42items. The UUID is the identification number connected to whichever drive you're 43items. The universally unique identifier (UUID) is the identification number
43using to store Steam games. 44connected to whichever drive you're using to store Steam games.
44 45
45Drives are usually labeled similar to =/dev/nvme0n1p1= or =/dev/sda1=, so you'll 46Drives are usually labeled similar to =/dev/nvme0n1p1= or =/dev/sda1=, so you'll
46need to find the line in the output of the command below that correlates to your 47need to find the line in the output of the command below that correlates to your
@@ -50,8 +51,8 @@ drive and copy the UUID over to the =/etc/fstab= file.
50sudo blkid | grep UUID= 51sudo blkid | grep UUID=
51#+end_src 52#+end_src
52 53
53Next, you'll need your =uid= and =gid=. To find these, run the following 54Next, you'll need your user identified (=uid=) and group identifier (=gid=). To
54command: 55find these, run the following command:
55 56
56#+begin_src sh 57#+begin_src sh
57id -u && id -g 58id -u && id -g
@@ -71,13 +72,13 @@ Each drive you want to mount on boot should have its own line in the
71UUID=B64E53824E5339F7 /mnt/steam_library ntfs-3g uid=1000,gid=1000 0 0 72UUID=B64E53824E5339F7 /mnt/steam_library ntfs-3g uid=1000,gid=1000 0 0
72#+end_src 73#+end_src
73 74
74Now all you need to do is unmount your drive and re-mount it. You can unmount
75the drive by doing this (be sure to use the correct drive name here):
76
77#+begin_src sh 75#+begin_src sh
78sudo umount /dev/sdxX 76sudo umount /dev/sdxX
79#+end_src 77#+end_src
80 78
79Now all you need to do is unmount your drive and re-mount it. You can unmount
80the drive by doing this (be sure to use the correct drive name here):
81
81You can re-mount all your drives by executing the following: 82You can re-mount all your drives by executing the following:
82 83
83#+begin_src sh 84#+begin_src sh
@@ -85,5 +86,5 @@ sudo mount -a
85#+end_src 86#+end_src
86 87
87If you don't know what your drive name is, or you're nervous about unmounting 88If you don't know what your drive name is, or you're nervous about unmounting
88and re-mounting, simply reboot your computer, and it will be done for you 89and re-mounting, simply reboot your computer, and the system will mount the
89automatically. 90drive for you automatically.
content/blog/2020-02-09-cryptography-basics.org +7 −7
@@ -26,8 +26,8 @@ data to an intelligible form.
26 26
27Cryptography cannot offer protection against the loss of data; it simply offers 27Cryptography cannot offer protection against the loss of data; it simply offers
28encryption methods to protect data at-rest and data in-traffic. At a high-level, 28encryption methods to protect data at-rest and data in-traffic. At a high-level,
29encrypted is when plaintext data is encrypted to ciphertext (a secure form of 29encrypted is when plain text data is encrypted to cipher text (a secure form of
30text that cannot be understood unless decrypted back to plaintext). The 30text that cannot be understood unless decrypted back to plain text). The
31encryption process is completed through the use of a mathematical function that 31encryption process is completed through the use of a mathematical function that
32utilizes one or more values called keys to encrypt or decrypt the data. 32utilizes one or more values called keys to encrypt or decrypt the data.
33 33
@@ -41,7 +41,7 @@ pieces to the system:
41- *Encryption Key:* A string of bits used within the encryption algorithm as the 41- *Encryption Key:* A string of bits used within the encryption algorithm as the
42 secret that allows successful encryption or decryption of data. 42 secret that allows successful encryption or decryption of data.
43- *Key Length (Size):* The maximum number of bits within the encryption key. 43- *Key Length (Size):* The maximum number of bits within the encryption key.
44 It's important to remember that key size is regulated in many countries. 44 It's important to remember that key size is regulated in certain countries.
45- *Message Digest:* A smaller, fixed-size bit string version of the original 45- *Message Digest:* A smaller, fixed-size bit string version of the original
46 message. This is practically infeasible to reverse, which is why it's commonly 46 message. This is practically infeasible to reverse, which is why it's commonly
47 used to verify integrity. 47 used to verify integrity.
@@ -102,8 +102,8 @@ security while using fewer resources.
102 102
103* Applications of Cryptographic Systems 103* Applications of Cryptographic Systems
104 104
105There are quite a few implementations of cryptographic systems around the world. 105There are numerous implementations of cryptographic systems around the world.
106Here are a few popular examples: 106Here are six popular examples:
107 107
108*Transport Layer Security (TLS):* One of the most famous cryptographic solutions 108*Transport Layer Security (TLS):* One of the most famous cryptographic solutions
109created is TLS, a session-layered or connection-layered internet protocol that 109created is TLS, a session-layered or connection-layered internet protocol that
@@ -148,7 +148,7 @@ encryption method for Windows Active Directory (AD).
148* Cybersecurity Controls 148* Cybersecurity Controls
149 149
150If you're someone who needs solutions on how to control risks associated with 150If you're someone who needs solutions on how to control risks associated with
151utilizing a crytograhpic system, start with a few basic controls: 151utilizing a crytograhpic system, start with these basic controls:
152 152
153- *Policies:* A policy on the use of cryptographic controls for protection of 153- *Policies:* A policy on the use of cryptographic controls for protection of
154 information is implemented and is in accordance with organizational 154 information is implemented and is in accordance with organizational
@@ -162,4 +162,4 @@ utilizing a crytograhpic system, start with a few basic controls:
162 the business of the organization, robust, and align with recommended 162 the business of the organization, robust, and align with recommended
163 guidelines. 163 guidelines.
164- *Protocol configuration:* Protocols have been reviewed and configured suitable 164- *Protocol configuration:* Protocols have been reviewed and configured suitable
165 to the purpose of the business.\ No newline at end of file 165 to the purpose of the business.
content/blog/2020-03-25-session-messenger.org +10 −10
@@ -7,7 +7,7 @@
7 7
8The company behind Session (Loki Foundation) is from Australia. If you didn't 8The company behind Session (Loki Foundation) is from Australia. If you didn't
9know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with 9know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with
10government requests to build backdoor access into applications. For more 10government requests to build back door access into applications. For more
11information, read my article on [[./2020-01-25-aes-encryption.html][AES Encryption]]. 11information, read my article on [[./2020-01-25-aes-encryption.html][AES Encryption]].
12 12
13* About Session 13* About Session
@@ -41,7 +41,7 @@ Since most people are looking for an alternative to a popular chat app, I am
41going to list out the features that Session has so that you are able to 41going to list out the features that Session has so that you are able to
42determine if the app would suit your needs: 42determine if the app would suit your needs:
43 43
44- Multiple device linking (via QR code or ID) 44- Multiple device linking [via a quick-response (QR) code or identifier (ID)]
45- App locking via device screen lock, password, or fingerprint 45- App locking via device screen lock, password, or fingerprint
46- Screenshot blocking 46- Screenshot blocking
47- Incognito keyboard 47- Incognito keyboard
@@ -55,7 +55,7 @@ determine if the app would suit your needs:
55* Downloads 55* Downloads
56 56
57I have tested this app on Ubuntu 19.10, Android 10, macOS Monterey, and iOS 15. 57I have tested this app on Ubuntu 19.10, Android 10, macOS Monterey, and iOS 15.
58All apps have worked well without many issues. 58All apps have worked well without issue.
59 59
60Below is a brief overview of the Session app on Linux. To get this app, you'll 60Below is a brief overview of the Session app on Linux. To get this app, you'll
61need to go to the [[https://getsession.org/download/][Downloads]] page and click to link to the operating system 61need to go to the [[https://getsession.org/download/][Downloads]] page and click to link to the operating system
@@ -81,8 +81,8 @@ password, you will need to enter it every time you open the app.
81 81
82Once you've created your account and set up your profile details, the next step 82Once you've created your account and set up your profile details, the next step
83is to start messaging other people. To do so, you'll need to share your Session 83is to start messaging other people. To do so, you'll need to share your Session
84ID with other people. From this point, it's fairly straightforward and acts like 84ID with other people. From this point, it's straightforward and acts like any
85any other messaging app, so I won't dive into much detail here. 85other messaging app, so I won't dive into much detail here.
86 86
87** macOS 87** macOS
88 88
@@ -91,7 +91,7 @@ pop-up box explaining the process that Session uses to hide your IP address:
91 91
92** iOS 92** iOS
93 93
94The mobile app is quite simple and effective, giving you all the standard mobile 94The mobile app is simple and effective, giving you all the standard mobile
95messaging options you'd expect. 95messaging options you'd expect.
96 96
97* Potential Issues 97* Potential Issues
@@ -100,9 +100,9 @@ I've discovered one annoying issue that would prevent from using this app
100regularly. On a mobile device, there have been issues with receiving messages on 100regularly. On a mobile device, there have been issues with receiving messages on
101time. Even with battery optimization disabled and no network restrictions, 101time. Even with battery optimization disabled and no network restrictions,
102Session notifications sometimes do not display until I open the app or the 102Session notifications sometimes do not display until I open the app or the
103conversation itself and wait a few moments. This is actually one of the reasons 103conversation itself and wait. This is actually one of the reasons I stopped
104I stopped using Signal (this seems fixed as of my updates in 2021/2022, so I 104using Signal (this seems fixed as of my updates in 2021/2022, so I wouldn't
105wouldn't worry about this issue anymore). 105worry about this issue anymore).
106 106
107Looking for another messenger instead of Session? I recommend Signal, Matrix, 107Looking for another messenger instead of Session? I recommend Signal, Matrix,
108and IRC. 108and internet relay chat (IRC).
content/blog/2020-05-03-homelab.org +16 −11
@@ -5,14 +5,14 @@
5 5
6* What is a Homelab? 6* What is a Homelab?
7 7
8Starting as a developer, I have largely stayed away from hardware-based hobbies 8Starting as a developer, I have stayed away from hardware-based hobbies (other
9(other than building a gaming desktop). However, as the quarantine for COVID-19 9than building a gaming desktop). However, as the quarantine for COVID-19
10stretches out further and further, I found myself bored and in search of new 10stretches out further and further, I found myself bored and in search of new
11hobbies. After spending the last few months browsing the [[https://www.reddit.com/r/homelab/][r/homelab]] subreddit, I 11hobbies. After spending the last few months browsing the [[https://www.reddit.com/r/homelab/][r/homelab]] subreddit, I
12decided it was time to jump in and try things out for myself. 12decided it was time to jump in and try things out for myself.
13 13
14Since I am a beginner and just recently graduated from college, everything I've 14Since I am a beginner and just recently graduated from college, everything I've
15done so far in my homelab is fairly low-budget. 15done so far in my homelab is low-budget.
16 16
17* Hardware 17* Hardware
18 18
@@ -50,14 +50,15 @@ Here are the specifications for the Dell Optiplex 5040:
50 50
51While this hardware would be awful for a work computer or a gaming rig, it 51While this hardware would be awful for a work computer or a gaming rig, it
52turned out to be wonderful for my server purposes. The only limitation I have 52turned out to be wonderful for my server purposes. The only limitation I have
53found so far is the CPU. The i3-6100 only has enough power for a single 4k video 53found so far is the central processing unit (CPU). The i3-6100 only has enough
54transcode at a time. I haven't tested more than three 1080p streams at a time, 54power for a single 4k video transcode at a time. I haven't tested more than
55but the maximum amount of streams I've ever actually used is two. 55three 1080p streams at a time, but the maximum amount of streams I've ever
56actually used is two.
56 57
57** WD easystore 10TB & 8TB 58** WD easystore 10TB & 8TB
58 59
59Application storage and temporary files are stored on the internal hard drive of 60Application storage and temporary files are stored on the internal hard drive of
60the server, but all media files (movies, tv, games, books, etc) are stored 61the server, but all media files (movies, television, games, books, etc) are stored
61externally on my WD easystore hard drive. Creating auto-boot configurations in 62externally on my WD easystore hard drive. Creating auto-boot configurations in
62the =/etc/fstab= file on my server allows the hard drives to automatically mount 63the =/etc/fstab= file on my server allows the hard drives to automatically mount
63whenever I need to restart my server. 64whenever I need to restart my server.
@@ -65,7 +66,8 @@ whenever I need to restart my server.
65#+begin_quote 66#+begin_quote
66Update: In March 2022, I shucked the hard drives out of their external cases, 67Update: In March 2022, I shucked the hard drives out of their external cases,
67put some Kapton tape on the third power pin to prevent power shutdowns, and 68put some Kapton tape on the third power pin to prevent power shutdowns, and
68stuck them inside my server tower using internal SATA cables. 69stuck them inside my server tower using internal Serial AT Attachment (SATA)
70cables.
69#+end_quote 71#+end_quote
70 72
71** Netgear Unmanaged Switch 73** Netgear Unmanaged Switch
@@ -78,15 +80,18 @@ unmanaged switch, but I am comfortable with the choice.
78** TP-Link Managed Switch 80** TP-Link Managed Switch
79 81
80Since I use the unmanaged switch to group all living room devices together, I 82Since I use the unmanaged switch to group all living room devices together, I
81use the managed switch to configure VLANs and secure my network. 83use the managed switch to configure virtual local area networks (VLANs) and
84secure my network.
82 85
83** Arris TM1602A Modem & Sagecom Fast 5280 Router 86** Arris TM1602A Modem & Sagecom Fast 5280 Router
84 87
85My default modem and router, provided by my ISP, are fairly standard. The Arris 88My default modem and router, provided by my ISP, are fairly standard. The Arris
86modem supports DOCSIS 3.0, which is something that I definitely wanted as a 89modem supports DOCSIS 3.0, which is something that I definitely wanted as a
87minimum. The Sagecom router is also standard, no fancy bells or whistles. 90minimum. The Sagecom router is also standard, no fancy bells or whistles.
88However, it does support DHCP and DHCPv6, which is something you can use to 91However, it does support the dynamic host configuration protocol (DHCP) for
89route all household traffic through a pi-hole or firewall. 92internet protocol version 4 (IPv4) and internet protocol version 6 (IPv6), which
93is something iyou can use to route all household traffic through a pi-hole or
94firewall.
90 95
91** TP-Link EAP 96** TP-Link EAP
92 97
content/blog/2020-05-19-customizing-ubuntu.org +5 −5
@@ -5,8 +5,8 @@
5 5
6* More Information 6* More Information
7 7
8For inspiration on designing your *nix computer, check out the 8For inspiration on designing your *nix computer, check out the [[https://libredd.it/r/unixporn][r/unixporn]]
9[[https://libredd.it/r/unixporn][r/unixporn]] subreddit! 9subreddit!
10 10
11* Customizing Ubuntu 11* Customizing Ubuntu
12 12
@@ -36,7 +36,7 @@ default on Ubuntu. You might even like some of the pre-installed options.
36** GNOME Application Themes 36** GNOME Application Themes
37 37
38To change the themes applied to applications in GNOME, you will need to change 38To change the themes applied to applications in GNOME, you will need to change
39the Applications dropdown in the Appearance section of Tweaks. To add more 39the Applications drop-down in the Appearance section of Tweaks. To add more
40themes, you will have to find your preferred theme online and follow the steps 40themes, you will have to find your preferred theme online and follow the steps
41below to have it show up in the Tweaks tool. While you may find themes anywhere, 41below to have it show up in the Tweaks tool. While you may find themes anywhere,
42one of the most popular sites for GNOME themes is [[https://www.gnome-look.org/][gnome-look.org]]. This website 42one of the most popular sites for GNOME themes is [[https://www.gnome-look.org/][gnome-look.org]]. This website
@@ -55,7 +55,7 @@ Steps to import themes into Tweaks:
55 can move them to the =/usr/share/fonts/opentype/= or 55 can move them to the =/usr/share/fonts/opentype/= or
56 =/usr/share/fonts/opentype/= folders, if you have a specific font type. 56 =/usr/share/fonts/opentype/= folders, if you have a specific font type.
574. Close tweaks if it is open. Re-open Tweaks and your new theme will be 574. Close tweaks if it is open. Re-open Tweaks and your new theme will be
58 available in the Applications dropdown in the Appearance section of Tweaks. 58 available in the Applications drop-down in the Appearance section of Tweaks.
59 59
60If the theme is not showing up after you've moved it into the themes folder, you 60If the theme is not showing up after you've moved it into the themes folder, you
61may have uncompressed the folder into a sub-folder. You can check this by 61may have uncompressed the folder into a sub-folder. You can check this by
@@ -113,7 +113,7 @@ instead.
113If you spend a lot of time typing commands, you know how important the style and 113If you spend a lot of time typing commands, you know how important the style and
114functionality of the terminal is. After spending a lot of time using the default 114functionality of the terminal is. After spending a lot of time using the default
115GNOME terminal with [[https://en.wikipedia.org/wiki/Bash_(Unix_shell)][unix shell]], I decided to try some different options. I ended 115GNOME terminal with [[https://en.wikipedia.org/wiki/Bash_(Unix_shell)][unix shell]], I decided to try some different options. I ended
116up choosing [[https://terminator-gtk3.readthedocs.io/en/latest/][Terminator]] with [[https://en.wikipedia.org/wiki/Z_shell][zsh]]. 116up choosing [[https://terminator-gtk3.readthedocs.io/en/latest/][Terminator]] with [[https://en.wikipedia.org/wiki/Z_shell][zsh]] (Z Shell).
117 117
118Terminator is great if you need to open multiple terminals at one time by simply 118Terminator is great if you need to open multiple terminals at one time by simply
119right-clicking and splitting the screen into as many terminals as you want. 119right-clicking and splitting the screen into as many terminals as you want.
content/blog/2020-07-26-business-analysis.org +6 −6
@@ -36,9 +36,9 @@ from sklearn.cluster import KMeans
36#+end_src 36#+end_src
37 37
38To begin our analysis, we need to import the data for this project. The data we 38To begin our analysis, we need to import the data for this project. The data we
39are using in this project comes directly from the Foursquare API. The first step 39are using in this project comes directly from the Foursquare application
40is to get the latitude and longitude of the city being studied (Lincoln, NE) and 40programming interface (API). The first step is to get the latitude and longitude
41setting up the folium map. 41of the city being studied (Lincoln, NE) and setting up the folium map.
42 42
43#+begin_src python 43#+begin_src python
44# Define the latitude and longitude, then map the results 44# Define the latitude and longitude, then map the results
@@ -119,7 +119,7 @@ results3 = requests.get(url3).json()
119 119
120Now that we have our data in three separate dataframes, we need to combine them 120Now that we have our data in three separate dataframes, we need to combine them
121into a single dataframe and make sure to reset the index so that we have a 121into a single dataframe and make sure to reset the index so that we have a
122unique ID for each business. The =get~categorytype~= function below will pull 122unique ID for each business. The =get_category_type= function below will pull
123the categories and name from each business's entry in the Foursquare data 123the categories and name from each business's entry in the Foursquare data
124automatically. Once all the data has been labeled and combined, the results are 124automatically. Once all the data has been labeled and combined, the results are
125stored in the =nearby_venues= dataframe. 125stored in the =nearby_venues= dataframe.
@@ -221,8 +221,8 @@ as close as possible to each other, while being as far as possible away from
221other clusters. 221other clusters.
222 222
223However, we first have to figure out how many clusters to use (defined as the 223However, we first have to figure out how many clusters to use (defined as the
224variable /'k'/). To do so, we will use the next two functions to calculate the 224variable 'k'). To do so, we will use the next two functions to calculate the sum
225sum of squares within clusters and then return the optimal number of clusters. 225of squares within clusters and then return the optimal number of clusters.
226 226
227#+begin_src python 227#+begin_src python
228# This function will return the sum of squares found in the data 228# This function will return the sum of squares found in the data
content/blog/2020-08-22-redirect-github-pages.org +11 −11
@@ -7,8 +7,8 @@
7 7
8** Step 1 8** Step 1
9 9
10Add a new file CNAME to your GitHub Pages repository containing only one line: 10Add a new file called =CNAME= (canonical name) to your GitHub Pages repository
11your top-level domain name. E.g.: =example.com= 11containing only one line: your top-level domain name. E.g.: =example.com=
12 12
13** Step 2 13** Step 2
14 14
@@ -17,11 +17,12 @@ your top-level domain name. E.g.: =example.com=
172.1: Remove all other top-level records (prefixed with @) of type A from your 172.1: Remove all other top-level records (prefixed with @) of type A from your
18DNS configuration. 18DNS configuration.
19 19
202.2: Remove a CNAME record for the second-level domain www if it is present. 202.2: Remove a CNAME record for the second-level domain =www=, if it is present.
21 21
22** Step 3 22** Step 3
23 23
24Add these 5 entries to the very top of your DNS configuration: 24Add these 5 entries to the very top of your domain name system (DNS)
25configuration:
25 26
26#+begin_src txt 27#+begin_src txt
27@ A 185.199.108.153 28@ A 185.199.108.153
@@ -41,7 +42,7 @@ immediately. They can take up to a full day to propagate.
41* Long answer 42* Long answer
42 43
43This issue has two sides. One is the DNS configuration itself. Another one is 44This issue has two sides. One is the DNS configuration itself. Another one is
44the way GitHub Pages will forward HTTP requests. 45the way GitHub Pages will forward hypertext transfer protocol (HTTP) requests.
45 46
46We need to know a few things to understand what GitHub is trying to say in their 47We need to know a few things to understand what GitHub is trying to say in their
47documentation. 48documentation.
@@ -52,7 +53,7 @@ There are two types of DNS records which interest us: CNAME and A.
52 53
53=A= is also known as =Apex= or sometimes as =root entry=. It forwards requests 54=A= is also known as =Apex= or sometimes as =root entry=. It forwards requests
54to a specified fixed IP address. =CNAME= entry forwards requests to a specified 55to a specified fixed IP address. =CNAME= entry forwards requests to a specified
55URL (actual valid plain text URL, not an IP address). 56URL (actual valid plain text URL, not an internet protocol (IP) address).
56 57
57** DNS Load balancing 58** DNS Load balancing
58 59
@@ -82,11 +83,10 @@ URL address (e.g. =username.github.io=) instead of a fixed IP address.
82 83
83** How GitHub Pages treats HTTP requests 84** How GitHub Pages treats HTTP requests
84 85
85After a DNS request for =your_github_username.github.io= is resolved 86After a DNS request for =your_github_username.github.io= is resolved into an IP
86into an IP address, e.g. =185.199.108.153= your browser sends an HTTP 87address, e.g. =185.199.108.153= your browser sends an HTTP request to that
87request to that server with an HTTP header =Host=. Below are =curl= 88server with an HTTP header =Host=. Below are =curl= examples that load the same
88examples that load the same website (these examples might not work if 89website (these examples might not work if you are behind a proxy server):
89you are behind a proxy server):
90 90
91#+begin_src sh 91#+begin_src sh
92curl --header "Host: your_github_username.github.io" http://185.199.108.153/ 92curl --header "Host: your_github_username.github.io" http://185.199.108.153/
content/blog/2020-08-29-php-auth-flow.org +3 −2
@@ -7,8 +7,9 @@
7 7
8When creating websites that will allow users to create accounts, the developer 8When creating websites that will allow users to create accounts, the developer
9always needs to consider the proper authentication flow for their app. For 9always needs to consider the proper authentication flow for their app. For
10example, some developers will utilize an API for authentication, some will use 10example, some developers will utilize an application programming interface (API)
11OAuth, and some may just use their own simple database. 11for authentication, some will use OAuth, and some may just use their own simple
12database.
12 13
13For those using pre-built libraries, authentication may simply be a problem of 14For those using pre-built libraries, authentication may simply be a problem of
14copying and pasting the code from their library's documentation. For example, 15copying and pasting the code from their library's documentation. For example,
content/blog/2020-09-01-visual-recognition.org +12 −12
@@ -5,13 +5,13 @@
5 5
6* What is IBM Watson? 6* What is IBM Watson?
7 7
8If you've never heard of [[https://www.ibm.com/watson][Watson]], this service is a suite of enterprise-ready AI 8If you've never heard of [[https://www.ibm.com/watson][Watson]], this service is a suite of enterprise-ready
9services, applications, and tooling provided by IBM. Watson contains quite a few 9artificial intelligence (AI) services, applications, and tooling provided by
10useful tools for data scientists and students, including the subject of this 10IBM. Watson contains quite a few useful tools for data scientists and students,
11post today: visual recognition. 11including the subject of this post today: visual recognition.
12 12
13If you'd like to view the official documentation for the Visual Recognition API, 13If you'd like to view the official documentation for the Visual Recognition
14visit the [[https://cloud.ibm.com/apidocs/visual-recognition/visual-recognition-v3?code=python][API Docs]]. 14application programming interface (API), visit the [[https://cloud.ibm.com/apidocs/visual-recognition/visual-recognition-v3?code=python][API Docs]].
15 15
16* Prerequisites 16* Prerequisites
17 17
@@ -19,12 +19,12 @@ To be able to use Watson Visual Recognition, you'll need the following:
19 19
201. Create a free account on [[https://www.ibm.com/cloud/watson-studio][IBM Watson Studio]]. 201. Create a free account on [[https://www.ibm.com/cloud/watson-studio][IBM Watson Studio]].
212. Add the [[https://www.ibm.com/cloud/watson-visual-recognition][Watson Visual Recognition]] service to your IBM Watson account. 212. Add the [[https://www.ibm.com/cloud/watson-visual-recognition][Watson Visual Recognition]] service to your IBM Watson account.
223. Get your API key and URL. To do this, first go to the [[https://dataplatform.cloud.ibm.com/home2?context=cpdaas][profile dashboard]] for 223. Get your API key and URL (uniform resource locator). To do this, first go to
23 your IBM account and click on the Watson Visual Recognition service you 23 the [[https://dataplatform.cloud.ibm.com/home2?context=cpdaas][profile dashboard]] for your IBM account and click on the Watson Visual
24 created. This will be listed in the section titled *Your services*. Then 24 Recognition service you created. This will be listed in the section titled
25 click the *Credentials* tab and open the *Auto-generated credentials* 25 *Your services*. Then click the *Credentials* tab and open the
26 dropdown. Copy your API key and URL so that you can use them in the Python 26 *Auto-generated credentials* dropdown. Copy your API key and URL so that you
27 script later. 27 can use them in the Python script later.
284. *[Optional]* While not required, you can also create the Jupyter Notebook for 284. *[Optional]* While not required, you can also create the Jupyter Notebook for
29 this project right inside [[https://www.ibm.com/cloud/watson-studio][Watson Studio]]. Watson Studio will save your 29 this project right inside [[https://www.ibm.com/cloud/watson-studio][Watson Studio]]. Watson Studio will save your
30 notebooks inside an organized project and allow you to use their other 30 notebooks inside an organized project and allow you to use their other
content/blog/2020-09-22-internal-audit.org +4 −5
@@ -50,11 +50,10 @@ evidence to provide opinions or conclusions regarding an entity, operation,
50function, process, system, or other subject matters. The internal auditor 50function, process, system, or other subject matters. The internal auditor
51determines the nature and scope of an assurance engagement. Generally, three 51determines the nature and scope of an assurance engagement. Generally, three
52parties are participants in assurance services: (1) the person or group directly 52parties are participants in assurance services: (1) the person or group directly
53involved with the entity, operation, function, process, system, or other subject 53involved with the entity, operation, function, process, system, or other
54 54subject - (the process owner), (2) the person or group making the assessment -
55- (the process owner), (2) the person or group making the assessment - (the 55(the internal auditor), and (3) the person or group using the assessment - (the
56 internal auditor), and (3) the person or group using the assessment - (the 56user).
57 user).
58 57
59** Consulting 58** Consulting
60 59
content/blog/2020-09-25-happiness-map.org +1 −1
@@ -76,7 +76,7 @@ Some countries need to be renamed, or they will be lost when you merge the
76happiness and GeoJSON dataframes. This is something I discovered when the map 76happiness and GeoJSON dataframes. This is something I discovered when the map
77below showed empty countries. I searched both data frames for the missing 77below showed empty countries. I searched both data frames for the missing
78countries to see the naming differences. Any countries that do not have records 78countries to see the naming differences. Any countries that do not have records
79in the =happy_data= df will not show up on the map. 79in the =happy_data= data frame will not show up on the map.
80 80
81#+begin_src python 81#+begin_src python
82# Rename some countries to match our GeoJSON data 82# Rename some countries to match our GeoJSON data
content/blog/2020-12-27-website-redesign.org +11 −11
@@ -19,10 +19,10 @@ anything on my main webpage that's vital, it allows me the freedom to change
19things as inspiration strikes. 19things as inspiration strikes.
20 20
21Historically, I've relied on core utilities for spacing, components, and layouts 21Historically, I've relied on core utilities for spacing, components, and layouts
22from [[https://getbootstrap.com][Bootstrap]] and added custom CSS for fonts, accents, colors, and other items. 22from [[https://getbootstrap.com][Bootstrap]] and added custom cascading style sheets (CSS) for fonts, accents,
23I also tend to create sites with no border radius on items, visible borders, and 23colors, and other items. I also tend to create sites with no border radius on
24content that takes up the entire screen (using whitespace inside components 24items, visible borders, and content that takes up the entire screen (using
25instead of whitespace around my components). 25whitespace inside components instead of whitespace around my components).
26 26
27* The Redesign Process 27* The Redesign Process
28 28
@@ -75,13 +75,13 @@ transferred (22 KB total), and my blog is at 6.5 KB transferred (13 KB total).
75*That means the redesigned pages are less than 2% the size of the old designs.* 75*That means the redesigned pages are less than 2% the size of the old designs.*
76 76
77Google Lighthouse ranks the new webpage as 100 in performance, accessibility, 77Google Lighthouse ranks the new webpage as 100 in performance, accessibility,
78and best practices, with SEO at 92 since they think tap targets are not sized 78and best practices, with search engine optimization (SEO) at 92 since they think
79appropriately for mobile users. First contextual paints of the pages are under 79tap targets are not sized appropriately for mobile users. First contextual
800.8 seconds with 0 ms of blocking time. However, the blog subdomain ranks at 100 80paints of the pages are under 0.8 seconds with 0 ms (millisecond) of blocking
81for all four categories! First contextual paints of the blog homepage are under 81time. However, the blog subdomain ranks at 100 for all four categories! First
821.0 seconds with 0 ms of blocking time, due to the fact that the CSS for my blog 82contextual paints of the blog homepage are under 1.0 seconds with 0 ms of
83is within a separate CSS file, and the CSS for my main website is simply 83blocking time, due to the fact that the CSS for my blog is within a separate CSS
84embedded in the HTML file. 84file, and the CSS for my main website is simply embedded in the HTML file.
85 85
86Now that everything is complete, I can confidently say I'm happy with the result 86Now that everything is complete, I can confidently say I'm happy with the result
87and proud to look at the fastest set of websites I've created so far. 87and proud to look at the fastest set of websites I've created so far.