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