riazj.com

source code for this website
git clone https://riazj.com/git/riazj.com
Log | Files | Refs | LICENSE

commit b99ced3adf321a8c5a3f9427efe21f600cc00315
parent 032d3a08dd79badf1f80654688850395f206be6b
Author: Riaz <riaz@riazj.com>
Date:   Sun,  5 Apr 2026 09:48:56 -0700

Remove fluff

https://steinbaugh.com/posts/posix.html
https://romanzolotarev.com/bsd/vi.html

Diffstat:
MLICENSE | 29+++++++++++------------------
Darticles/dictionaries.html | 90-------------------------------------------------------------------------------
Marticles/efficiently-publish-to-website.html | 57+++++++++------------------------------------------------
Marticles/estrogeneration.html | 2+-
Marticles/fix-frogfind-content-display.html | 6+++---
Marticles/format-html.html | 2+-
Marticles/technology-i-use.html | 1+
Darticles/wifi.html | 31-------------------------------
Marticles/wmutils.html | 15+++------------
Mindex.html | 2--
Mlinks.html | 4----
11 files changed, 29 insertions(+), 210 deletions(-)

diff --git a/LICENSE b/LICENSE @@ -1,21 +1,14 @@ -MIT License +BSD Zero Clause License -Copyright (c) 2023 Riaz +Copyright (C) 2023 by Riaz -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/articles/dictionaries.html b/articles/dictionaries.html @@ -1,90 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> -<meta charset="utf-8"> -<title>Notes on Offline English Dictionaries | Riaz's Website</title> -<link rel="stylesheet" href="/style.css"> -<link rel="icon" href="data:,"> -<meta name="description" content="Notes on offline English dictionaries with dictd or a shell script for GCIDE"> -<meta name="viewport" content="width=device-width, initial-scale=1"> -</head> -<body> -<h1>Notes on Offline English Dictionaries</h1> -<hr> -<article> -<pre>export SDCV_PAGER=less</pre> -<pre> -alt + d - phrase="$(:|dmenu -p "Define:")" &amp;& st <a href="https://aur.archlinux.org/packages/stardict-wordnet">sdcv</a> "$phrase" -</pre> -<h2>Previous Setups</h2> -<h3>dictd</h3> -<p><a href="https://wiki.archlinux.org/title/Dictd">Install dictd, and configure it to use offline dictionaries.</a></p> -<p>To use dict with dmenu, create an index. The following assumes that you are using the WordNet dictionary.</p> -<pre> -cd ~/.local/state -cp /usr/share/dictd/wn.index . -sed "s/ .*//g" wn.index | sort -n &gt; wn.tmp &amp;& mv wn.tmp wn.index -</pre> -<p>Note that in the sed command above, there is a tab, but your browser might show a space. If you copy it to your clipboard, it should work regardless.</p> -<p>To use this with sxhkd:</p> -<pre> -alt + shift + d - definition="$XDG_RUNTIME_DIR/dmenu_dict"; \ - dict "$(dmenu -i -l 10 &lt; $XDG_STATE_HOME/wn.index)" &gt; "$definition"; \ - [ -s "$definition" ] &amp;& st less -+F -c "$definition" -</pre> -<h3>GCIDE</h3> -<pre> -cd gcide -for f in CIDE*; do; mv $f "${f#*.}"; done -mkdir info; find -maxdepth 1 -type f -not -name "?" -exec mv {} info \; -find -maxdepth 1 -type f -exec sh -c 'sed "s/&lt;ldquo\//&lt;q&gt;/g; s/&lt;rdquo\//&lt;\/q&gt;/g" "$1" &gt; tmp &amp;& mv tmp "$1" || rm tmp' echo {} \; -sed "s/&lt;ent&gt; /&lt;ent&gt;/" K &gt; K.tmp &amp;& mv K.tmp K -def word # or dmenu_def, shell scripts below, licensed under BSD0 -# repeat the following to replace GCIDE's non-standard markup while referencing webfont.txt -find -maxdepth 1 -type f -exec sh -c 'sed "s/&lt;cced\//ç/g; s/&lt;Cced\//Ç/" "$1" &gt; tmp &amp;& mv tmp "$1" || rm tmp' echo {} \; -</pre> -<pre> -#!/bin/sh -e - -DICT="$HOME/data/books/dictionary" - -phrase="${*:-$(cat)}" -# e.g. gum ammoniac is with dictionary entries that start with A -[ "$phrase" = "-t" ] &amp;& { thorough=1; phrase="$(cat)"; } -phrase="$(printf "%s" "$phrase" | tr '[:lower:]' '[:upper:]' | sed 's=\\=\\\\=g; s=\/=\\\/=g')" - -letter="$(printf "%.1s" "$phrase")" -case "$letter" in - "'") end="${phrase#?}"; letter="${end%"${end#?}"}" ;; # second char - "-") search_files="$(grep -irl "&lt;ent&gt;$phrase&lt;/ent&gt;" "$DICT")" ;; - ".") letter="V" ;; - [0-9]|"\\") letter="A" ;; -esac - -: "${search_files="$DICT/$letter"}" -definitions="$(printf "%s\n" "$search_files" | xargs sed -n "/&lt;ent&gt;$phrase&lt;\/ent&gt;/I,/^$/p")" -[ "$thorough" ] &amp;& [ -z "$definitions" ] &amp;& { - search_files="$(grep -irl "&lt;ent&gt;$phrase&lt;/ent&gt;" "$DICT")" - definitions="$(printf "%s\n" "$search_files" | xargs sed -n "/&lt;ent&gt;$phrase&lt;\/ent&gt;/I,/^$/p")" -} - -printf "%s" "$definitions" | w3m -dump -T text/html -</pre> -<pre> -#!/bin/sh -e - -DICT="$HOME/data/books/dictionary" -CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/dmenu_def" - -[ -f "$CACHE" ] || grep -orh --exclude-dir=info "&lt;ent&gt;.*&lt;/ent&gt;" "$DICT" | - sed "s/&lt;.\?ent&gt;//g" | sort -n | uniq &gt; "$CACHE" - -dmenu -i -l 10 &lt; "$CACHE" | def -t -</pre></article> -<footer> -<hr> -<a href="/">Home Page</a></footer> -</body> -</html> diff --git a/articles/efficiently-publish-to-website.html b/articles/efficiently-publish-to-website.html @@ -5,73 +5,34 @@ <title>Efficiently Publish to a Website | Riaz's Website</title> <link rel="stylesheet" href="/style.css"> <link rel="icon" href="data:,"> -<meta name="description" content="Alternatives to typing out the full path of the host for publishing to a website (upload, rsync, and git)"> +<meta name="description" content="How to use rsync instead of scp to transfer files to a host"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <h1>Efficiently Publish to a Website</h1> <hr> <article> -<p>Summary: <code>alias publish="rsync -rtvzP --filter=':- .gitignore' --exclude='.git*' ~/website_path/ user@hostname.com:/path/to/destination"</code></p> -<h2>Abbreviated SCP</h2> <p>I used to run the following commands to upload files to this website:</p> <pre> -scp file user@hostname.com:/home/public -scp articles/article-name user@hostname.com:/home/public/articles</pre> -<p>Typing out the path of the host is tedious, so I wrote a shell script to do it.</p> -<pre> -#!/bin/sh - -[ "$1" = "-a" ] &amp;& shift &amp;& scp "$@" user@hostname.com:/home/public/articles &amp;& exit -scp "$@" user@hostname.com:/home/public</pre> -<p><code>[ "$1" = "-a" ]</code> checks if the first argument is <code>-a</code>. <code>&amp;&</code> causes the following command to run only if the previous statement succeeded. <code>shift</code> removes the first argument. Then, the files (<code>$@</code>) are uploaded to the articles' folder. If the <code>-a</code> option is not present, the files will be uploaded to the public folder.</p> -<p>Now, the process of uploading files looks like this:</p> -<pre> -upload file -upload -a articles/article-name</pre> -<h2>Rsync</h2> -<p>The problem with that method is that the files need to be stated. To avoid this, rsync can be used.</p> -<pre>rsync -rtvzP --filter=':- .gitignore' --exclude='.git*' ~/riazj.com/ user@hostname.com:/home/public</pre> -<p>Those options mean the following:</p> +scp file1 file2 user@host: +scp articles/file3 user@host:/home/public/articles</pre> +<p>Typing out the path of the host is tedious, so rsync can be used. This command can be added to <code>.git/hooks/pre-push</code> to run on <code>git push</code>.</p> +<pre>rsync -rtzP --delete --exclude="*git" ~/website/ user@host:/home/public</pre> <ul> <li>-r: recursively</li> <li>-t: transfer modification times, allowing unmodified files to be skipped</li> -<li>-v: increase verbosity, showing the files uploaded</li> <li>-z: compress files for uploading</li> <li>-P: if a large file fails to be uploaded, continue from where it was instead of uploading its entirety</li> -<li>--filter':- .gitignore': do not upload files that are listed in .gitignore</li> -<li>--exclude='.git*': do not upload files or folders starting with ".git" in the name</li> +<li>--delete: delete files from the receiving side that aren't locally present</li> +<li>--exclude="*git": exclude this pattern from uploading and following rules like --delete</li> </ul> -<p>The slash after the folder name (<code>riazj.com/</code>) is there for uploading the contents of the folder and not the folder itself to the location. Without the slash, it would result in <code>/home/public/riazj.com</code>.</p> -<h2>Git and SCP</h2> -<p>I do not recommend using this method unless there is a reason to not use rsync. rsync is faster than this script. I wrote this before I decided to use rsync for my website.</p> -<p>An <a href="https://docs.codeberg.org/security/ssh-key/">SSH key</a> to automatically sign in to the host is required.</p> -<pre> -#!/bin/sh - -changed_files="$(git diff-tree --no-commit-id --name-only origin/main..HEAD -r)" - -for file in "$changed_files"; do - [ -e "$file" ] || { ssh user@hostname.com "rm -f $file"; continue; } - [ "${file#*articles/}" != "$file" ] &amp;& scp "$file" user@hostname.com:/home/public/articles &amp;& continue - scp "$file" user@hostname.com:/home/public -done - -git push</pre> -<p>This script is meant to be run before <code>git push</code> so that it can see the files that were changed in the local commits.</p> -<p><code>[ -e "$file" ]</code> checks if the file exists. If it does not, it is removed. <code>continue</code> skips to the next iteration of the loop.</p> -<p><code>[ "${file#*articles/}" != "$file" ]</code> checks if the file's path is not the same after trying to remove the string "articles/" from the start of it. If it is not the same as before, it must mean that the file path starts with "articles/". The file is then uploaded to the articles' folder.</p> -<p>If the previous commands did not run, the file is uploaded to the public folder.</p> -<p>This script does not account for removing an old file that has been renamed. It can be expanded on by using <code>git diff-tree --no-commit-id --name-status origin/main..HEAD -r</code> and grep to find the renamed files.</p> -<h2>Update: 2025 Feb 25th</h2> -<p>I added the following to <code>.ssh/config</code>, allowing me to run <code>ssh riazj</code> or <code>rsync file riazj:</code>.</p> +<p>The slash after the folder name is there for uploading the contents of the folder and not the folder itself. Without the slash, it would result in <code>/home/public/website</code>.</p> +<p>I wrote the following in <code>.ssh/config</code>, allowing me to run <code>ssh riazj</code> or <code>rsync file riazj:</code>.</p> <pre> Host riazj Hostname nfsnssh.com User riazpy_riazj Port 22</pre> -<h2>Update: 2025 Jul 2nd</h2> -<p>I added the rsync command to <code>.git/hooks/pre-push</code> so that I can publish to the website with <code>git push</code> instead of using a script to run both commands.</p> </article> <footer> <hr> diff --git a/articles/estrogeneration.html b/articles/estrogeneration.html @@ -23,7 +23,7 @@ <p>Fasting for a challenging period of time can exchange old fat for improved cells and remove estrogenics. The schedule that I find to be beneficial is fasting on Mondays and Thursdays from dawn to sunset.</p> <p>Many estrogenics can be found in crowded swimming pools at levels concerning for children because people's lotion, shampoo, deodorant, and lipstick can be washed into the pool. Avoid crowded pools.</p> <p>The author says in the book that silicone is fine. However, make sure that it is not brightly colored, as the colorants may contain endocrine disruptors.</p> -<p>Dr. Jay's website and the products that he uses to avoid estrogenics can be viewed <a href="https://www.ajconsultingcompany.com/whatiuse.html">here</a>. <a href="https://www.ajconsultingcompany.com/plans.html">Here is a list of recommendations from the book</a>:</p> +<p>Dr. Jay's website and the products that he uses to avoid estrogenics can be viewed <a href="https://www.ajconsultingcompany.com/whatiuse.html">here</a>. <a href="https://www.ajconsultingcompany.com/plans.html">The author has avoidance plans for different levels of effort</a>.</p> <p>Eliminate foods and drinks that are in the category of or include:</p> <ul> <li>processed food</li> diff --git a/articles/fix-frogfind-content-display.html b/articles/fix-frogfind-content-display.html @@ -12,12 +12,12 @@ <h1>How to Fix FrogFind's Incorrect Display of Websites</h1> <hr> <article> -<p><a href="http://frogfind.com/">FrogFind</a> would not load the information on my home page. However, other pages, such as the articles that I have written, would load. This was likely due to FrogFind using <a href="https://github.com/mozilla/readability">Mozilla's Readability library</a> to find the main content of a page.</p> -<p>Wrapping a &lt;main&gt; tag around the index page allowed FrogFind to properly detect the HTML. When I tried the same solution on my contact page, FrogFind was still unable to show its information. The work-around was to wrap it in an &lt;article&gt; tag.</p> +<p><a href="http://frogfind.com/">FrogFind</a> would not load the information on my home page. However, other pages, such as the articles that I have written, would load. This was likely a result of FrogFind using a <a href="https://github.com/fivefilters/readability.php">PHP port of Mozilla's Readability.js</a> to find the main content of a page.</p> +<p>Wrapping a &lt;main&gt; tag around the index page allowed FrogFind to properly detect the HTML. When I tried the same solution on my contact page, FrogFind was still unable to show its information. The workaround was to wrap it in an &lt;article&gt; tag.</p> <p>The &lt;main&gt; tag tends to work more on pages with list items. If a page does not include lists, the &lt;article&gt; tag should be used.</p> <h2>FrogFind Does Not Read Relative Paths Correctly</h2> <p>On modern browsers, if <code>https://riazj.com/articles/fix-frogfind-content-display</code> is opened, any links on that page to another file like <a href="repairing-thinkpads-and-macbooks"><code>href="repairing-thinkpads-and-macbooks"</code></a> will be within the articles' folder because the current page is in that folder. With FrogFind, it will instead search from the root domain (<code>https://riazj.com</code>). This means that if one article links to another without stating the absolute path (<code>/articles/article-name</code>), FrogFind will look at <code>https://riazj.com/article-name</code>.</p> -<p>The solutions that I have found are to add a &lt;base&gt; tag in the &lt;head&gt; tag of the affected pages, or to type out the full path. Since the number of people visiting this site through FrogFind besides me is likely zero, I have decided to not change the articles' links.</p> +<p>The solutions that I have found are to add a &lt;base&gt; tag in the &lt;head&gt; tag of the affected pages or to type out the full path. Since the number of people visiting this site through FrogFind besides me is likely zero, I have decided not to change the articles' links.</p> </article> <footer> <hr> diff --git a/articles/format-html.html b/articles/format-html.html @@ -12,7 +12,7 @@ <h1>I Quit Using Prettier to Format HTML</h1> <hr> <article> -<p>Lugging a node_modules folder <a href="https://tsh.io/wp-content/uploads/2019/06/node-modules-app-performance_.png">larger</a> than the size of my website and installing a JavaScript package manager to get something as simple as an HTML formatter carries too much software complexity.</p> +<p>Lugging a node_modules folder larger than the size of my website and installing a JavaScript package manager to get something as simple as an HTML formatter carries too much software complexity.</p> <p>A less bloated alternative is <a href="https://www.html-tidy.org/">Tidy</a>. I decided against switching since it doesn't result in the same style of indentation and line wrapping as Prettier.</p> <p>More recently, I considered how many websites I visit use Prettier's code style. Later, I realized even prettier.io's HTML, including its page <a href="https://prettier.io/users">highlighting its users</a>, doesn't follow its format! The author of Prettier doesn't use it for <a href="https://jlongster.com/">his own website</a>. If the author doesn't care, why should I?</p> <h2>Options</h2> diff --git a/articles/technology-i-use.html b/articles/technology-i-use.html @@ -23,6 +23,7 @@ </li> <li>Text Editor: <a href="https://martanne.github.io/vis/">vis</a></li> <li>Document Viewer: <a href="https://pwmt.org/projects/zathura/">zathura</a></li> +<li>Dictionary: <a href="https://aur.archlinux.org/packages/stardict-wordnet">sdcv</a></li> <li>Terminal: <a href="https://st.suckless.org/">st</a></li> <li>Hotkey Daemon: <a href="https://github.com/baskerville/sxhkd">sxhkd</a></li> <li>Status Bar: <a href="https://github.com/LemonBoy/bar">lemonbar</a></li> diff --git a/articles/wifi.html b/articles/wifi.html @@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> -<meta charset="utf-8"> -<title>System Crash Due to Wi-Fi Card | Riaz's Website</title> -<link rel="stylesheet" href="/style.css"> -<link rel="icon" href="data:,"> -<meta name="description" content="Solution to system-wide freezes due to Wi-Fi card and Linux kernel"> -<meta name="viewport" content="width=device-width, initial-scale=1"> -</head> -<body> -<h1>System Crash Due to Wi-Fi Card</h1> -<hr> -<article> -<p>I recently changed Wi-Fi cards and started experiencing crashes. Switching network managers, init systems, and browsers did not work, but switching from linux to linux-lts did.</p> -<p>After shutting down from a crash, dinit mentioned this.</p> -<pre>eth0: NIC Link is down</pre> -<p>When I tried shutting down after switching to OpenRC, there was a mention of <code>[drm] GPU</code> and an error about unmounting file systems.</p> -<p>If I waited too long, all keyboard input was locked, and I had to remove the laptop's battery. Sometimes, the Caps Lock key flashed, indicating kernel panic. Some examples that caused the crashes were</p> -<ul> -<li>playing a video, closing the laptop for it to suspend, and reopening the laptop</li> -<li>pressing next on a Google form</li> -<li>joining a Zoom meeting</li> -<li>doing actions that use plenty of bandwidth, such as loading many videos</li> -</ul> -</article> -<footer> -<hr> -<a href="/">Home Page</a></footer> -</body> -</html> diff --git a/articles/wmutils.html b/articles/wmutils.html @@ -13,18 +13,9 @@ <hr> <article> <p><a href="https://github.com/wmutils/core">wmutils</a> is a set of tools for X window manipulation. These individual programs can be combined to uniquely manage windows.</p> -<p>When I used dwm, I set the monocle layout to the default and rarely used the tiling mode. My workflow looked like this:</p> -<ol> -<li>Work in a window.</li> -<li>Open a second window that is referenced (such as a web browser).</li> -<li>Run a few commands in a third window.</li> -<li>Try to go to the previous one for reference.</li> -<li>Waddle around with Alt+j or Alt+k after realizing the opposite was needed, or move a window to a different tag.</li> -</ol> -<p>With wmutils, this is no longer a problem as it provides a program to change the stacking order, allowing me to bind Alt+Tab to switch between the last two focused windows.</p> -<p>The scripts I use are based on z3bra's from the <a href="https://github.com/wmutils/contrib">contrib repo</a>. In my <a href="/git/dotfiles/file/.config/xinitrc">xinitrc</a>, I call the <a href="/git/dotfiles/file/.local/bin/winwatch.html">winwatch script</a> (depends on <a href="https://github.com/wmutils/opt">wew</a>) to fullscreen windows on the MAP X event and focus the previous window when one is destroyed. The MAP event is used rather than CREATE to work with web browsers that create multiple windows.</p> -<p>In dwm, even when in monocle mode, other windows were still visible at a small gap to the bottom of my screen. With the <a href="/git/dotfiles/file/.local/bin/fullscreen.html">script for fullscreening</a>, a fullscreen means a fullscreen.</p> -<p>For a status bar, instead of using xsetroot, I now use <a href="https://github.com/LemonBoy/bar">lemonbar</a> with this command: <code>while status; do sleep 1m; done | lemonbar -d -F '#ccc' &</code>. The -d option prevents it from being focused or deleted by <a href="/git/dotfiles/file/.config/sxhkd/sxhkdrc.html">my keybinds</a>. The <a href="/git/dotfiles/file/.local/bin/status.html">status command</a> does the following: <code>echo "%{r} $(cat /sys/class/power_supply/BAT0/capacity)% | $(date +%I:%M) | $(uptime -p)"</code>. The <code>%{r}</code> right-aligns the text.</p> +<p>The scripts I use are based on z3bra's from the <a href="https://github.com/wmutils/contrib">contrib repo</a>. When <a href="/git/dotfiles/file/.config/sx/sxrc">starting an Xorg server</a>, I call the <a href="/git/dotfiles/file/.local/bin/winwatch">winwatch script</a> (depends on <a href="https://github.com/wmutils/opt">wew</a>) to fullscreen windows on the MAP X event and focus the previous window when one is destroyed. The MAP event is used rather than CREATE to work with web browsers that create multiple windows.</p> +<p>When I used dwm, even when in monocle mode, other windows were still visible in a small gap at the bottom of my screen. With the <a href="/git/dotfiles/file/.local/bin/fullscreen">script for fullscreening</a>, a fullscreen means a fullscreen.</p> +<p>For a status bar, I use <a href="https://github.com/LemonBoy/bar">lemonbar</a> with this command: <code>while status; do sleep 1m; done | lemonbar -d -F '#ccc' &</code>. The -d option prevents it from being focused or deleted by <a href="/git/dotfiles/file/.config/sxhkd/sxhkdrc">my keybinds</a>. The <a href="/git/dotfiles/file/.local/bin/status">status command</a> does the following: <code>echo "%{r} $(cat /sys/class/power_supply/BAT0/capacity)% | $(date +%I:%M) | $(uptime -p)"</code>. The <code>%{r}</code> right-aligns the text.</p> <p>In the fullscreen script, there is an offset, preventing the windows from hiding the status bar. xprop can be used to find the resolution of a window.</p> </article> <footer> diff --git a/index.html b/index.html @@ -16,11 +16,9 @@ <h2>Articles</h2> <ul> <li><time datetime="2025-10-15">2025 Oct 15</time> <a href="/articles/interracial">Interracial Couples</a></li> -<li><time datetime="2025-10-04">2025 Oct 04</time> <a href="/articles/wifi">System Crash Due to Wi-Fi Card</a></li> <li><time datetime="2025-08-08">2025 Aug 08</time> <a href="/articles/git">Self-Host Git Repositories with Stagit</a></li> <li><time datetime="2025-07-28">2025 Jul 28</time> <a href="/articles/wmutils">Managing Windows Without a WM</a></li> <li><time datetime="2025-07-24">2025 Jul 24</time> <a href="/articles/pw">Write a Password Manager in POSIX Shell</a></li> -<li><time datetime="2025-06-08">2025 Jun 08</time> <a href="/articles/dictionaries">Notes on Offline English Dictionaries</a></li> <li><time datetime="2025-02-27">2025 Feb 27</time> <a href="/articles/format-html">I Quit Using Prettier to Format HTML</a></li> <li><time datetime="2024-12-06">2024 Dec 06</time> <a href="/articles/powerschool-absence">Unable to Submit PowerSchool Absence Reports</a></li> <li><time datetime="2024-11-09">2024 Nov 09</time> <a href="/articles/installing-alpine-linux">Notes on Installing Alpine Linux</a></li> diff --git a/links.html b/links.html @@ -15,13 +15,10 @@ <li><a href="https://x220.mcdonnelltech.com/resources/">ThinkPad X220s</a></li> <li><a href="https://wttr.in/">Weather Forecast (curl wttr.in)</a></li> <li><a href="https://cht.sh/">Cheat Sheets (curl cht.sh)</a></li> -<li><a href="https://steinbaugh.com/">Technology Cheat Sheets</a></li> <li><a href="https://github.com/filiparag/wikiman">Offline Unix Documentation</a></li> -<li><a href="https://romanzolotarev.com/vi.html">Edit Text with vi(1)</a></li> <li><a href="https://www.shellcheck.net/">ShellCheck: Linter</a></li> <li><a href="https://explainshell.com/">Shell Commands Explained</a></li> <li><a href="https://github.com/StevenBlack/hosts">Host Files for Blocking Websites</a></li> -<li><a href="https://jgthms.com/web-design-in-4-minutes/">Web Design in 4 Minutes</a></li> <li><a href="https://systemfontstack.com/">System Font Stack</a></li> <li><a href="https://spencermortensen.com/articles/email-obfuscation/">Email Obfuscation for Websites</a></li> <li><a href="https://useplaintext.email/">Use Plain Text Emails</a></li> @@ -34,7 +31,6 @@ <li><a href="https://www.eff.org/nsa-spying">The NSA is Spying on Americans</a></li> <li><a href="https://img.washingtonpost.com/wp-srv/special/politics/prism-collection-documents/images/prism-slide-4.jpg">PRISM Internet Surveilance</a> (<a href="https://img.washingtonpost.com/wp-srv/special/politics/prism-collection-documents/images/prism-slide-5.jpg">Timeline</a>)</li> <li><a href="/files/NIBRS_Table_11_Offenders_Race_by_Offense_Category_2024.pdf">NIBRS Offenders by Race 2024</a> (<a href="https://cde.ucr.cjis.gov/LATEST/webapp/#/pages/downloads">Source</a>)</li> -<li><a href="https://www.unpopulation.org/en/development/desa/population/publications/pdf/ageing/replacement-es.pdf">Jewish Replacement Migration</a></li> <li><a href="https://xyproblem.info/">The XY Problem</a></li> <li><a href="https://zenofpython.org/">Zen of Python</a></li> </ul>