Files
rsmsn_blog/public/posts.html

277 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Posts | Norm-working Packets 💾</title>
<meta name="keywords" content="">
<meta name="description" content="Posts - Norm-working Packets 💾">
<meta name="author" content="Norm Rasmussen">
<link rel="canonical" href="./posts.html">
<link crossorigin="anonymous" href="./assets/css/stylesheet.5cfc680b1eeaeef9efbced92d46c2a9e876b72ee14fba85846afc4cff9e6e6f8.css" integrity="sha256-XPxoCx7q7vnvvO2S1Gwqnodrcu4U&#43;6hYRq/Ez/nm5vg=" rel="preload stylesheet" as="style">
<link rel="icon" href="./favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="./rsmsncircles.ico">
<link rel="apple-touch-icon" href="./apple-touch-icon.png">
<link rel="mask-icon" href="./safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="./posts/index.xml">
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Posts" />
<meta property="og:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab" />
<meta property="og:type" content="website" />
<meta property="og:url" content="/posts.html" /><meta property="og:site_name" content="Norm-working Packets" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Posts"/>
<meta name="twitter:description" content="A semi-technical blog &amp; series of experiences working in tech and my homelab"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "/posts.html"
}
]
}
</script>
</head>
<body class="list dark" id="top">
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="./" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="./posts.html" title="Posts">
<span>Posts</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="./">Home</a></div>
<h1>
Posts
</h1>
</header>
<article class="post-entry">
<header class="entry-header">
<h2>QuickHits: OpenResty and Package Updates
</h2>
</header>
<div class="entry-content">
<p>Turns out I wrote this back in November, but on a different machine and I never pushed my changes up to git. So here it is now!
The last two times Ive run apt update &amp;&amp; apt upgrade -y on my web server and OpenResty has an update to push out, I will get some errors including Openresty is not setup correctly. There are a few other errors in the systemctl status openresty output such as process 223478 [nginx] is still running....</p>
</div>
<footer class="entry-footer"><span title='2023-12-04 10:32:58 -0500 EST'>December 4, 2023</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;492 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to QuickHits: OpenResty and Package Updates" href="./posts/openresty_and_package_update_issues.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Neovim Subtitute Magic
</h2>
</header>
<div class="entry-content">
<p>This week, Ive had to make some changes to an automation we had setup for a customer in Workato. The original recipe was made by a co-worker with a bunch of javascript nodes. Even though Im customer facing and generally not considered a technical employee, I knew the engineer who worked on this was swamped, so I decided to jump in.
In order to greatly reduce the number of nodes needed in the single recipe, I created a list of dictionaries in python (with one of the values being another list!...</p>
</div>
<footer class="entry-footer"><span title='2023-11-15 08:08:49 -0500 EST'>November 15, 2023</span>&nbsp;·&nbsp;6 min&nbsp;·&nbsp;1221 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Neovim Subtitute Magic" href="./posts/find_and_replace_in_neovim.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Mini Neovim
</h2>
</header>
<div class="entry-content">
<p>If Im being honest, when I started this quick project to reduce my Neovim plugin footprint size, I thought I was going to be able to get rid of way more plugins! Inspired by this Reddit post that setup a Neovim config using only echasnovskis mini library, I was reminded that some of my remote server environments were still using Packer as their plugin manager, where my main machine has upgraded to Lazy....</p>
</div>
<footer class="entry-footer"><span title='2023-10-20 18:38:13 -0400 EDT'>October 20, 2023</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;602 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Mini Neovim" href="./posts/mini_neovim.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>ESP8266 Medicine Indicator Light
</h2>
</header>
<div class="entry-content">
<p>This is a quick treat! We recently learned that one of our children needs to take medicine twice a day for the foreseeable future. Hes too young to take it on his own, so the twice-a-day responsibility is split up between my partner and I. However, sometimes our schedules dont overlap so succinctly, so we needed some sort of indicator to let the other know if the previous dose was (or wasnt!...</p>
</div>
<footer class="entry-footer"><span title='2023-10-16 11:34:14 -0400 EDT'>October 16, 2023</span>&nbsp;·&nbsp;6 min&nbsp;·&nbsp;1170 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to ESP8266 Medicine Indicator Light" href="./posts/medicine_indicator_light.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>BirdNET-PI &amp; HomeAssistant: Part 2
</h2>
</header>
<div class="entry-content">
<p>Checking for Entities If youre following up on this from my first post, youve already added your AppDaemon script and confirmed that the AppDaemon logs dont show any errors. Now is the true test if its working: do you have the new sensors in HomeAssistant?!
The best way to do this is by just type e from any screen in the HomeAssistant UI! That will bring up a list of entities....</p>
</div>
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;1986 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to BirdNET-PI &amp; HomeAssistant: Part 2" href="./posts/birdnet_homeassistant_part2.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
</h2>
</header>
<div class="entry-content">
<p>This is Part One of a Two Part Series. You can find Part Two, here.
Update: 10/11/2023. A huge thanks to Mastodon User e_mobile2014 who found a broken link in this guide and pointed out that I never explained how to get the mqtt sensors into HomeAssistant!
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used....</p>
</div>
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span>&nbsp;·&nbsp;12 min&nbsp;·&nbsp;2484 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="./posts/birdnet_homeassistant.html"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Pushing a Single Local Git Repo to Multiple Remote Repos
</h2>
</header>
<div class="entry-content">
<p>Why push to multiple repos? Do want to use both Github &amp; and a Self-hosted Git Repo? Heres how Ive been doing it!
I really enjoy self-hosting services that I use everyday. One of those includes a git-style version control software. In my case, Ive been running Gitea for a few years now and have been really satisfied with everything (except for that one time that an update broke all my templates)....</p>
</div>
<footer class="entry-footer"><span title='2023-09-22 15:07:10 -0400 EDT'>September 22, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;403 words&nbsp;·&nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Pushing a Single Local Git Repo to Multiple Remote Repos" href="./posts/multiple_git_remotes.html"></a>
</article>
<footer class="page-footer">
<nav class="pagination">
<a class="next" href="./posts/page/2.html">Next&nbsp;&nbsp;»
</a>
</nav>
</footer>
</main>
<footer class="footer">
<span>&copy; 2023 <a href="./">Norm-working Packets 💾</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>