diff --git a/.aspell.en.pws b/.aspell.en.pws index 9788b82..3db2d27 100644 --- a/.aspell.en.pws +++ b/.aspell.en.pws @@ -1,6 +1,7 @@ personal_ws-1.1 en 0 AFAICT ai +AirBnB anon anon's Anthropic @@ -22,6 +23,7 @@ css Cyano Cyanogen debuffs +decrypt dev devs direnv @@ -68,6 +70,7 @@ nate nav Nephi NewPipe +nginx Nim Niri nixos diff --git a/.githooks/pre-commit b/.githooks/pre-commit index f2eb748..0d5dab3 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -38,7 +38,19 @@ else echo "⚠️ markdownlint not found, skipping markdown linting" fi -# --- Stage 2: Tag similarity check --- +# --- Stage 2: Interactive spell check --- +# Runs before tag check so typos in tags get corrected first +if [ -x "./scripts/spellcheck-interactive.sh" ]; then + if ! ./scripts/spellcheck-interactive.sh $STAGED_MD_FILES; then + echo "❌ Spell check failed." + OVERALL_RESULT=1 + fi +else + echo "⚠️ Spell check script not found or not executable, skipping spell check" +fi + +# --- Stage 3: Tag similarity check --- +# Runs after spell check so corrected tags are compared if command -v python3 &> /dev/null && [ -f "./scripts/check-tags.py" ]; then echo "Running tag similarity check..." if ! python3 ./scripts/check-tags.py $STAGED_MD_FILES; then @@ -49,16 +61,6 @@ else echo "⚠️ Tag checker (python3 or scripts/check-tags.py) not found, skipping tag check" fi -# --- Stage 3: Interactive spell check --- -if [ -x "./scripts/spellcheck-interactive.sh" ]; then - if ! ./scripts/spellcheck-interactive.sh $STAGED_MD_FILES; then - echo "❌ Spell check failed." - OVERALL_RESULT=1 - fi -else - echo "⚠️ Spell check script not found or not executable, skipping spell check" -fi - # --- Stage 4: Link validation --- if [ -x "./scripts/check-links.sh" ]; then echo "Running link validation..." diff --git a/config.toml b/config.toml index 42497ce..9c82128 100644 --- a/config.toml +++ b/config.toml @@ -53,7 +53,7 @@ customHeadHTML = ''' ''' # customFooterHTML = '

foot123

' togglePreviousAndNextButtons = "true" -avatarUrl = "/images/fosscat_icon.png" +avatarUrl = "/images/fosscat_icon.webp" avatarSize = "size-s" numberPostsOnHomePage = 5 numberProjectsOnHomePage = 3 diff --git a/content/posts/26-03-03-the-stoic-practice-of-negative-visualization.md b/content/posts/26-03-03-the-stoic-practice-of-negative-visualization.md new file mode 100644 index 0000000..819a1bf --- /dev/null +++ b/content/posts/26-03-03-the-stoic-practice-of-negative-visualization.md @@ -0,0 +1,66 @@ +--- +date: 2026-03-03T23:23:32-07:00 +# description: "" +# image: "" +lastmod: 2026-03-04T01:31:12-07:00 +showTableOfContents: false +tags: ["stoicism", "philosophy"] +title: "The Stoic Practice of Negative Visualization" +type: "post" +--- + +# Negative Visualization + +I experimented today during my walk and meditation. I've taken interest at times to different practices and beliefs of the [Stoic (Wikipedia)](https://en.wikipedia.org/wiki/Stoicism) philosophy. I feel like Meditations by Marcus Aurelius really made the rounds a year or two ago amongst young millennial / gen z guys. + +One of the standout practices to me is "futurorum malorum præmeditatio", or [negative visualization (Wikipedia)](https://en.wikipedia.org/wiki/Negative_visualization). It is believed to help with your resilience and gratitude. You imagine a bad scenario, losing something or someone dear to you. The reality of impermanence is brought forward intentionally in your mind. + +While sitting on the special meditation rock, I tried my darndest to simply take in the view. I thought to myself, "man, I will really miss this place". I know it will be gone eventually. Its either bulldozed to erect a wonderful office building, or I move to a faraway land. I'm not a pessimist. I think this is just a fact of life. Eventually, we all get check-mated. Including the sitting rock. + +![The view from the sitting rock. Landscape overlooking the Salt Lake Basin.](/images/salt-lake-basin-view.webp) + +## A Turn of Perspective + +I caught myself. I wondered at all the times I, and others, use phrases like + +> "I'm so excited for __ ..." + +or + +> "I'm going to miss __ ..." + +or + +> "I'm not looking forward to __ ..." + +All living for the future. + +Why don't I state how much I am enjoying the present moment? These are all futures that don't exist. They never will! Have I ever heard of someone pulling some future wish down to the present? The future is merely an idea in my head. Once I get to that future, its never what I thought exactly. Half of the time, I get to the future moment and am looking to the next one, not even enjoying the one I was really banking on enjoying. What a shame! + +So instead, I thought to the sitting rock that I really enjoyed its company. I was grateful for the seat. + +## Love & Loss + +I then had an unexpected experience. + +I sort of intuitively combined the Buddhist practice of Metta with the stoic's negative visualization. + +{{}} + +I don't recall ever willfully imagining a loss so profound, solely in my mind. + +Breathing with this sensation, I realized that sadness was not exactly what I was feeling. + +The loss was coupled with love. A love as deep as the sorrow. Like the two sides of your hand: one side clenches and the other releases, vice versa. + +## Gratitude + +I'm not claiming to be some wild guru, I don't really know what I'm doing with mindfulness considering my lack of time in the saddle. But this was an experience unlike I have ever had in a "spiritual" sense. + +I don't know how to describe it, but the sensation of love and loss resonated in me. Realizing that they are almost one in the same. + +I came home from that experience light on my feet. Giddy and grateful to get to kiss the love of my life, to see her as she is, and have another day to enjoy being with her. + +I will certainly try to make the time to imagine terrible things more often :wink: diff --git a/content/posts/a-feedback-loop,-adding-comments.md b/content/posts/a-feedback-loop,-adding-comments.md index a4df448..6d21053 100644 --- a/content/posts/a-feedback-loop,-adding-comments.md +++ b/content/posts/a-feedback-loop,-adding-comments.md @@ -5,7 +5,7 @@ draft: true tags: summary: cover: - image: "/images/img.jpg" + image: "" # can also paste direct link from external site # ex. https://i.ibb.co/K0HVPBd/paper-mod-profilemode.png alt: "" diff --git a/content/posts/ci-cd-and-why-its-cool.md b/content/posts/ci-cd-and-why-its-cool.md index a6c1b9c..03a4ac6 100644 --- a/content/posts/ci-cd-and-why-its-cool.md +++ b/content/posts/ci-cd-and-why-its-cool.md @@ -5,7 +5,7 @@ draft: true tags: summary: cover: - image: "/images/img.jpg" + image: "" # can also paste direct link from external site # ex. https://i.ibb.co/K0HVPBd/paper-mod-profilemode.png alt: "" diff --git a/content/posts/dog-based-search-path.md b/content/posts/dog-based-search-path.md index 8deb88c..26f7b3e 100644 --- a/content/posts/dog-based-search-path.md +++ b/content/posts/dog-based-search-path.md @@ -1,8 +1,8 @@ --- date: 2026-02-22T23:53:05-07:00 description: "Wondering what sort of algorithm my dog uses for navigation" -image: "/images/otto-on-nature-path-algorithm.jpg" -lastmod: 2026-02-24T00:35:36-07:00 +image: "/images/otto-on-nature-path-algorithm.webp" +lastmod: 2026-03-04T01:31:12-07:00 showTableOfContents: false tags: ["dogs", "optimization"] title: "Dog Based Search Path" diff --git a/content/posts/hammock-driven-development.md b/content/posts/hammock-driven-development.md index 8988436..921d5f7 100644 --- a/content/posts/hammock-driven-development.md +++ b/content/posts/hammock-driven-development.md @@ -1,11 +1,11 @@ --- date: 2025-03-03T09:19:07-07:00 description: "I learned the importance of taking time away from the computer in software development" -lastmod: 2026-02-23T01:08:53-07:00 +lastmod: 2026-03-04T01:31:12-07:00 showTableOfContents: true type: "post" title: "TIL: Hammock Driven Development" -image: "images/hammock.jpg" +image: "/images/hammock.webp" image_alt: "hammock with a cat" tags: ["clojure", "practices", "rich hickey", "til"] --- diff --git a/content/posts/hosting-mumble-on-a-subdomain-with-nginx.md b/content/posts/hosting-mumble-on-a-subdomain-with-nginx.md index 9758377..121e3af 100644 --- a/content/posts/hosting-mumble-on-a-subdomain-with-nginx.md +++ b/content/posts/hosting-mumble-on-a-subdomain-with-nginx.md @@ -4,7 +4,7 @@ date: 2024-01-04T10:04:57-07:00 description: 'How to host a mumble server on a subdomain behind nginx reverse proxy' tags: ["nginx"] showTableOfContents: true -image: "/images/nginx-mumble.png" +image: "/images/nginx-mumble.webp" weight: 1 type: "post" --- @@ -13,7 +13,7 @@ type: "post" Well I couldn't find any actual examples of someone doing what I wanted, namely, hosting the murmur server on a subdomain on my machine behind an nginx proxy. I only have ports 80 -and 443 opened on my router, so I chose to recieve the mumble traffic to come in on port 443. +and 443 opened on my router, so I chose to receive the mumble traffic to come in on port 443. Sounds easy enough, but the problem comes when you let nginx decrypt the packets in the process of passing them to the murmur server, it raises a TLS/SSL Termination Error. Murmur insists on End to End Encryption (E2EE), which is a good thing. @@ -23,7 +23,7 @@ an Ad riddled page, here is the nginx config that got my setup working, all of t on an Arch Linux install, minus the `stream` block. Ports need to be defined for your setup for `INTERNAL_MUMBLE_PORT` (port that murmur is listening on) and `NEW_NGINX_SSL_PORT`. Previously, `NEW_NGINX_SSL_PORT` was 443, but the stream block now will be using 443, and you can't bind to the same -port with seperate services. So pick a new port for the other ssl nginx services to listen on, +port with separate services. So pick a new port for the other ssl nginx services to listen on, as well as pass traffic to, internally. `nginx.conf` diff --git a/content/posts/how-i-made-this-site.md b/content/posts/how-i-made-this-site.md index 27ab6f9..454f114 100644 --- a/content/posts/how-i-made-this-site.md +++ b/content/posts/how-i-made-this-site.md @@ -4,7 +4,7 @@ date: 2022-08-31T20:38:09-06:00 tags: ['self host', 'raspberry pi'] description: 'I talk about how the "cloud" works, and show how one can host a site on the internet' type: "post" -image: "/images/ocean-aerial.jpg" +image: "/images/ocean-aerial.webp" showTableOfContents: true weight: 1 --- @@ -12,11 +12,11 @@ weight: 1 I've dreamed of this day but never imagined I'd actually think I've got ideas mature enough to do it. Turns out, kids can have good ideas too once in a while. # How do websites work? -Back in my senior year of highschool, my buddies and I thought it would be funny to have our own blog / website. I didn't think there was much to it, so I turned to godaddy.com, the only website-buying marketplace around. Little did I know that they only sell domain names, and what I could even do with one. Did I pay $20 for a domain name? Splashthetown.com sat vacant for exactly one year under my command. Two-thirds of a CS degree later and I think I am finally ready. Billions of webpages exist on the internet, so it can't be that difficult, right? I'm going to walk you through the steps I undertook to get this website to you, and how you are able to see the words you are reading on your screen right now. +Back in my senior year of high school, my buddies and I thought it would be funny to have our own blog / website. I didn't think there was much to it, so I turned to godaddy.com, the only website-buying marketplace around. Little did I know that they only sell domain names, and what I could even do with one. Did I pay $20 for a domain name? Splashthetown.com sat vacant for exactly one year under my command. Two-thirds of a CS degree later and I think I am finally ready. Billions of webpages exist on the internet, so it can't be that difficult, right? I'm going to walk you through the steps I undertook to get this website to you, and how you are able to see the words you are reading on your screen right now. ## Internet, I've Heard of That -I once heard the internet described as "the cloud", which is good to help people understand you know nothing about it. To give a marginally better explanation, imagine your brain, with all its neurons interconnected and whatnot. Lets call each neuron a "node". Each node holds information, and when it recieves a message it decides what to do with that information, modify it, store it, pass it on, sell it to the highest bidder for ad revenue, the possibilities are endless. In this way, the brain is much like the internet. These "nodes", or nuerons, are actually computers that make up the internet, a big web of interconnected, communicating devices. Our goal is to add a node to the network, and tell it to send specific information to anyone who calls on it. +I once heard the internet described as "the cloud", which is good to help people understand you know nothing about it. To give a marginally better explanation, imagine your brain, with all its neurons interconnected and whatnot. Lets call each neuron a "node". Each node holds information, and when it receives a message it decides what to do with that information, modify it, store it, pass it on, sell it to the highest bidder for ad revenue, the possibilities are endless. In this way, the brain is much like the internet. These "nodes", or nuerons, are actually computers that make up the internet, a big web of interconnected, communicating devices. Our goal is to add a node to the network, and tell it to send specific information to anyone who calls on it.