This commit is contained in:
ckaczor
2024-11-21 23:16:54 +00:00
parent 48f46f5794
commit 8137f6ac40
23 changed files with 447 additions and 447 deletions

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chris Kaczor</title> <title>Chris Kaczor</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -339,22 +339,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -366,7 +366,7 @@ img[width][height] {
<heading-anchors> <heading-anchors>
<h1 id="content-not-found">Content not found.</h1> <h1 id="content-not-found">Content not found.</h1>
<p>Go <a href="/eleventy-base-blog/">home</a>.</p> <p>Go <a href="/Blog/">home</a>.</p>
<!-- <!--
Read more: https://www.11ty.dev/docs/quicktips/not-found/ Read more: https://www.11ty.dev/docs/quicktips/not-found/
@@ -387,7 +387,7 @@ This will work for both GitHub pages and Netlify:
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/404.html` was built on 2024-11-21T23:06:36.400Z --> <!-- This page `/Blog/404.html` was built on 2024-11-21T23:16:50.529Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chris Kaczor</title> <title>Chris Kaczor</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -339,22 +339,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/" aria-current="page"> <a href="/Blog/about/" aria-current="page">
About About
</a> </a>
</li> </li>
@@ -378,7 +378,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/about/` was built on 2024-11-21T23:06:36.400Z --> <!-- This page `/Blog/about/` was built on 2024-11-21T23:16:50.529Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Back Again</title> <title>Back Again</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,10 +540,10 @@ img[width][height] {
<time datetime="2019-12-13">13 December 2019</time> <time datetime="2019-12-13">13 December 2019</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="post-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="post-tag">Excuses</a>
</li> </li>
</ul> </ul>
@@ -558,11 +558,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/etsy-shop-widget/">Etsy Shop Widget</a> <a href="/Blog/blog/etsy-shop-widget/">Etsy Shop Widget</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/where-did-the-time-go/">Where did the time go?</a> <a href="/Blog/blog/where-did-the-time-go/">Where did the time go?</a>
</li> </li>
</ul> </ul>
@@ -575,7 +575,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/back-again/` was built on 2024-11-21T23:06:36.395Z --> <!-- This page `/Blog/blog/back-again/` was built on 2024-11-21T23:16:50.529Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CPU Usage Status Window</title> <title>CPU Usage Status Window</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,15 +540,15 @@ img[width][height] {
<time datetime="2018-03-08">08 March 2018</time> <time datetime="2018-03-08">08 March 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
<p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p> <p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p>
<p><a href="/eleventy-base-blog/blog/cpu-usage-status-window/images/ProcessCpuUsageStatusWindow.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/L-UgyKZ-NI-373.avif 373w"><source type="image/webp" srcset="/eleventy-base-blog/img/L-UgyKZ-NI-373.webp 373w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/L-UgyKZ-NI-373.png" alt="" width="373" height="139"></picture></a></p> <p><a href="/Blog/blog/cpu-usage-status-window/images/ProcessCpuUsageStatusWindow.png"><picture><source type="image/avif" srcset="/Blog/img/L-UgyKZ-NI-373.avif 373w"><source type="image/webp" srcset="/Blog/img/L-UgyKZ-NI-373.webp 373w"><img loading="lazy" decoding="async" src="/Blog/img/L-UgyKZ-NI-373.png" alt="" width="373" height="139"></picture></a></p>
<p>It is basically a mini task manager showing the top X processes by CPU usage and the total CPU usage of the system. The values update automatically every 2 seconds.</p> <p>It is basically a mini task manager showing the top X processes by CPU usage and the total CPU usage of the system. The values update automatically every 2 seconds.</p>
<p>CPU usage is calculated by taking a snapshot of &quot;% processor time&quot; for the &quot;Process&quot; performance counter category every 2 seconds and having the counter sample calculate the percent usage for each process based on the previous snapshot.</p> <p>CPU usage is calculated by taking a snapshot of &quot;% processor time&quot; for the &quot;Process&quot; performance counter category every 2 seconds and having the counter sample calculate the percent usage for each process based on the previous snapshot.</p>
<p>This ended needing a lot more calculation than I had hoped although I don't remember all the details as to why - one of the perils of blogging so long after the code was written. From what I remember what I first tried was built into .NET and was easier to code but used a lot more processor time than I was comfortable with. Perhaps that has since been fixed in a later framework version - someday I'll have to try to recreate what I was doing.</p> <p>This ended needing a lot more calculation than I had hoped although I don't remember all the details as to why - one of the perils of blogging so long after the code was written. From what I remember what I first tried was built into .NET and was easier to code but used a lot more processor time than I was comfortable with. Perhaps that has since been fixed in a later framework version - someday I'll have to try to recreate what I was doing.</p>
@@ -557,11 +557,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/floating-status-window/">Floating Status Window</a> <a href="/Blog/blog/floating-status-window/">Floating Status Window</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/system-temperature-status-window/">System Temperature Status Window</a> <a href="/Blog/blog/system-temperature-status-window/">System Temperature Status Window</a>
</li> </li>
</ul> </ul>
@@ -574,7 +574,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/cpu-usage-status-window/` was built on 2024-11-21T23:06:36.395Z --> <!-- This page `/Blog/blog/cpu-usage-status-window/` was built on 2024-11-21T23:16:50.530Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Etsy Shop Widget</title> <title>Etsy Shop Widget</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,16 +540,16 @@ img[width][height] {
<time datetime="2018-04-20">20 April 2018</time> <time datetime="2018-04-20">20 April 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a> <a href="/Blog/tags/code/" class="post-tag">Code</a>
</li> </li>
</ul> </ul>
<p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p> <p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p>
<p>When we were initially setting up the website using WordPress we looked for a widget that would generate a listing of their Etsy shop items but we weren't really happy with the ones we found - they either required that the Etsy shop be broken up into sections or they didn't quite display the way we wanted. I decided to try to write my own instead of tweaking one of the existing ones and <a href="https://github.com/ckaczor/etsy-shop-widget">Etsy Shop Widget</a> was born.</p> <p>When we were initially setting up the website using WordPress we looked for a widget that would generate a listing of their Etsy shop items but we weren't really happy with the ones we found - they either required that the Etsy shop be broken up into sections or they didn't quite display the way we wanted. I decided to try to write my own instead of tweaking one of the existing ones and <a href="https://github.com/ckaczor/etsy-shop-widget">Etsy Shop Widget</a> was born.</p>
<p><a href="/eleventy-base-blog/blog/etsy-shop-widget/images/etsy-shop-widget-widget.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/ZuxNaFUA1y-280.avif 280w"><source type="image/webp" srcset="/eleventy-base-blog/img/ZuxNaFUA1y-280.webp 280w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/ZuxNaFUA1y-280.png" alt="" width="280" height="391"></picture></a></p> <p><a href="/Blog/blog/etsy-shop-widget/images/etsy-shop-widget-widget.png"><picture><source type="image/avif" srcset="/Blog/img/ZuxNaFUA1y-280.avif 280w"><source type="image/webp" srcset="/Blog/img/ZuxNaFUA1y-280.webp 280w"><img loading="lazy" decoding="async" src="/Blog/img/ZuxNaFUA1y-280.png" alt="" width="280" height="391"></picture></a></p>
<p>I decided early on that I wanted to avoid generating the HTML in PHP as much as possible. I knew I'd have use some PHP for the WordPress admin settings but I wanted to use a front-end framework for the widget itself. I was already using <a href="https://vuejs.org/">Vue.js</a> in other projects so when I found a <a href="https://github.com/caldera-learn/vue-webpack-wordpress-plugin">template project</a> for creating a WordPress plugin that used Vue.js I was good to go.</p> <p>I decided early on that I wanted to avoid generating the HTML in PHP as much as possible. I knew I'd have use some PHP for the WordPress admin settings but I wanted to use a front-end framework for the widget itself. I was already using <a href="https://vuejs.org/">Vue.js</a> in other projects so when I found a <a href="https://github.com/caldera-learn/vue-webpack-wordpress-plugin">template project</a> for creating a WordPress plugin that used Vue.js I was good to go.</p>
<p>The <a href="https://www.etsy.com/developers/documentation/getting_started/api_basics">Etsy API</a> requires an API key and is rate limited so I wanted to cache the results rather than fetch them each time the page loaded. I added standard WordPress settings for the API key, the shop name, and the cache time and put them all in a settings section.</p> <p>The <a href="https://www.etsy.com/developers/documentation/getting_started/api_basics">Etsy API</a> requires an API key and is rate limited so I wanted to cache the results rather than fetch them each time the page loaded. I added standard WordPress settings for the API key, the shop name, and the cache time and put them all in a settings section.</p>
<p><a href="/eleventy-base-blog/blog/etsy-shop-widget/images/etsy-shop-widget-settings.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/rbvGYcCS3i-544.avif 544w"><source type="image/webp" srcset="/eleventy-base-blog/img/rbvGYcCS3i-544.webp 544w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/rbvGYcCS3i-544.png" alt="" width="544" height="289"></picture></a></p> <p><a href="/Blog/blog/etsy-shop-widget/images/etsy-shop-widget-settings.png"><picture><source type="image/avif" srcset="/Blog/img/rbvGYcCS3i-544.avif 544w"><source type="image/webp" srcset="/Blog/img/rbvGYcCS3i-544.webp 544w"><img loading="lazy" decoding="async" src="/Blog/img/rbvGYcCS3i-544.png" alt="" width="544" height="289"></picture></a></p>
<p>Right now this limits the widget to only one shop per WordPress installation but that's all we need right now. In the future I'll move the shop name to an attribute of the widget instead.</p> <p>Right now this limits the widget to only one shop per WordPress installation but that's all we need right now. In the future I'll move the shop name to an attribute of the widget instead.</p>
<p>On the back end I created a custom WordPress action that uses the WordPress <a href="https://codex.wordpress.org/Transients_API">transients API</a> to store the cached data from Etsy. Basically if get_transient returns some data then that data is simply returned to the caller, otherwise wp_remote_request is used to make the call to the Etsy API and the returned data is stored using set_transient with the appropriate cache duration.</p> <p>On the back end I created a custom WordPress action that uses the WordPress <a href="https://codex.wordpress.org/Transients_API">transients API</a> to store the cached data from Etsy. Basically if get_transient returns some data then that data is simply returned to the caller, otherwise wp_remote_request is used to make the call to the Etsy API and the returned data is stored using set_transient with the appropriate cache duration.</p>
<pre class="language-php" tabindex="0"><code class="language-php"><span class="token keyword">function</span> <span class="token function-definition function">ESW_Listings_request</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <pre class="language-php" tabindex="0"><code class="language-php"><span class="token keyword">function</span> <span class="token function-definition function">ESW_Listings_request</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
@@ -607,11 +607,11 @@ export default class App extends Vue {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/feed-center/">Feed Center</a> <a href="/Blog/blog/feed-center/">Feed Center</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/back-again/">Back Again</a> <a href="/Blog/blog/back-again/">Back Again</a>
</li> </li>
</ul> </ul>
@@ -624,7 +624,7 @@ export default class App extends Vue {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/etsy-shop-widget/` was built on 2024-11-21T23:06:36.396Z --> <!-- This page `/Blog/blog/etsy-shop-widget/` was built on 2024-11-21T23:16:50.530Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Feed Center</title> <title>Feed Center</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,16 +540,16 @@ img[width][height] {
<time datetime="2018-04-04">04 April 2018</time> <time datetime="2018-04-04">04 April 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a> <a href="/Blog/tags/code/" class="post-tag">Code</a>
</li> </li>
</ul> </ul>
<p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p> <p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p>
<p><a href="/eleventy-base-blog/blog/feed-center/images/Feed-Center.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/uZeAJYpepW-300.avif 300w"><source type="image/webp" srcset="/eleventy-base-blog/img/uZeAJYpepW-300.webp 300w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/uZeAJYpepW-300.png" alt="" width="300" height="188"></picture></a></p> <p><a href="/Blog/blog/feed-center/images/Feed-Center.png"><picture><source type="image/avif" srcset="/Blog/img/uZeAJYpepW-300.avif 300w"><source type="image/webp" srcset="/Blog/img/uZeAJYpepW-300.webp 300w"><img loading="lazy" decoding="async" src="/Blog/img/uZeAJYpepW-300.png" alt="" width="300" height="188"></picture></a></p>
<p>Years ago when push technology was the hot new thing I got my online news from applications like PointCast and MSNBC News Alert - but they were eventually discontinued as web sites moved to other delivery mechanisms like RSS feeds. I tried to find an RSS reader but never really found one that I liked. I didn't want some Outlook lookalike that I had to specifically open and read through. I wanted an app that would blend in with my desktop as much as possible and be something that I could glance at every so often for the latest news. At some point I started fiddling with creating my own and Feed Center is the result.</p> <p>Years ago when push technology was the hot new thing I got my online news from applications like PointCast and MSNBC News Alert - but they were eventually discontinued as web sites moved to other delivery mechanisms like RSS feeds. I tried to find an RSS reader but never really found one that I liked. I didn't want some Outlook lookalike that I had to specifically open and read through. I wanted an app that would blend in with my desktop as much as possible and be something that I could glance at every so often for the latest news. At some point I started fiddling with creating my own and Feed Center is the result.</p>
<p>In theory Feed Center supports all of the common RSS versions and Atom with some special handling for common errors. The fact that I'm parsing the feeds with an XML parser makes it a little harder to handle the edge cases but it works well enough so far.</p> <p>In theory Feed Center supports all of the common RSS versions and Atom with some special handling for common errors. The fact that I'm parsing the feeds with an XML parser makes it a little harder to handle the edge cases but it works well enough so far.</p>
<p>Feeds are added in a &quot;default&quot; category but they can optionally be organized into any number of other categories. The top of the main window has a selector for the current category - I'm not sure I like the way it looks but I haven't come up with anything better yet.</p> <p>Feeds are added in a &quot;default&quot; category but they can optionally be organized into any number of other categories. The top of the main window has a selector for the current category - I'm not sure I like the way it looks but I haven't come up with anything better yet.</p>
<p><a href="/eleventy-base-blog/blog/feed-center/images/Options-Feed.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/4GWlZwTcq7-706.avif 706w"><source type="image/webp" srcset="/eleventy-base-blog/img/4GWlZwTcq7-706.webp 706w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/4GWlZwTcq7-706.png" alt="" width="706" height="353"></picture></a></p> <p><a href="/Blog/blog/feed-center/images/Options-Feed.png"><picture><source type="image/avif" srcset="/Blog/img/4GWlZwTcq7-706.avif 706w"><source type="image/webp" srcset="/Blog/img/4GWlZwTcq7-706.webp 706w"><img loading="lazy" decoding="async" src="/Blog/img/4GWlZwTcq7-706.png" alt="" width="706" height="353"></picture></a></p>
<p>The arrows at the top of the window (as well as mouse buttons 4 and 5 if you have them) will scroll through the feeds in the current category in alphabetical order. The current feed will also scroll automatically every minute unless the mouse is hovering over the window - it would be annoying to have the feed change when you're getting ready to read one.</p> <p>The arrows at the top of the window (as well as mouse buttons 4 and 5 if you have them) will scroll through the feeds in the current category in alphabetical order. The current feed will also scroll automatically every minute unless the mouse is hovering over the window - it would be annoying to have the feed change when you're getting ready to read one.</p>
<p>Double clicking an article will open the web page for the article. By default the system default browser will be used but there's an option to choose another browser instead. There's also buttons to open all of the articles for the current feed and to mark all of the articles as having been read.</p> <p>Double clicking an article will open the web page for the article. By default the system default browser will be used but there's an option to choose another browser instead. There's also buttons to open all of the articles for the current feed and to mark all of the articles as having been read.</p>
<p>The code base has had some major changes over the years - originally the UI was done using WinForms and I used XML files as storage. After a few corrupt XML files from power failures I switched to using SQLite and then to SQL Server Compact. At some point I rewrote the UI using WPF so I could get rid of a bunch of custom painting for the feed list.</p> <p>The code base has had some major changes over the years - originally the UI was done using WinForms and I used XML files as storage. After a few corrupt XML files from power failures I switched to using SQLite and then to SQL Server Compact. At some point I rewrote the UI using WPF so I could get rid of a bunch of custom painting for the feed list.</p>
@@ -558,11 +558,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/laundry-monitor-software/">Laundry Monitor Software</a> <a href="/Blog/blog/laundry-monitor-software/">Laundry Monitor Software</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/etsy-shop-widget/">Etsy Shop Widget</a> <a href="/Blog/blog/etsy-shop-widget/">Etsy Shop Widget</a>
</li> </li>
</ul> </ul>
@@ -575,7 +575,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/feed-center/` was built on 2024-11-21T23:06:36.396Z --> <!-- This page `/Blog/blog/feed-center/` was built on 2024-11-21T23:16:50.530Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floating Status Window</title> <title>Floating Status Window</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,20 +540,20 @@ img[width][height] {
<time datetime="2018-02-21">21 February 2018</time> <time datetime="2018-02-21">21 February 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
<p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p> <p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p>
<p><a href="/eleventy-base-blog/blog/floating-status-window/images/Windows-Locked.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/-IG3SLpr1H-770.avif 770w"><source type="image/webp" srcset="/eleventy-base-blog/img/-IG3SLpr1H-770.webp 770w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/-IG3SLpr1H-770.png" alt="" width="770" height="303"></picture></a></p> <p><a href="/Blog/blog/floating-status-window/images/Windows-Locked.png"><picture><source type="image/avif" srcset="/Blog/img/-IG3SLpr1H-770.avif 770w"><source type="image/webp" srcset="/Blog/img/-IG3SLpr1H-770.webp 770w"><img loading="lazy" decoding="async" src="/Blog/img/-IG3SLpr1H-770.png" alt="" width="770" height="303"></picture></a></p>
<p>Each one is a separate project that uses the core library to create and manage the window. The code for a few of these is on <a href="https://github.com/ckaczor">GitHub</a> and I'm working to add more.</p> <p>Each one is a separate project that uses the core library to create and manage the window. The code for a few of these is on <a href="https://github.com/ckaczor">GitHub</a> and I'm working to add more.</p>
<p>The windows are locked by default to prevent accidentally moving them but they can be unlocked in order to move or resize them. When moving or resizing the windows will snap to each other and the sides of the screen. This is what the example above looks like unlocked:</p> <p>The windows are locked by default to prevent accidentally moving them but they can be unlocked in order to move or resize them. When moving or resizing the windows will snap to each other and the sides of the screen. This is what the example above looks like unlocked:</p>
<p><a href="/eleventy-base-blog/blog/floating-status-window/images/Windows-Unlocked.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/2zWtBO5eyV-1358.avif 1358w"><source type="image/webp" srcset="/eleventy-base-blog/img/2zWtBO5eyV-1358.webp 1358w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/2zWtBO5eyV-1358.png" alt="" width="1358" height="354"></picture></a></p> <p><a href="/Blog/blog/floating-status-window/images/Windows-Unlocked.png"><picture><source type="image/avif" srcset="/Blog/img/2zWtBO5eyV-1358.avif 1358w"><source type="image/webp" srcset="/Blog/img/2zWtBO5eyV-1358.webp 1358w"><img loading="lazy" decoding="async" src="/Blog/img/2zWtBO5eyV-1358.png" alt="" width="1358" height="354"></picture></a></p>
<p>Basic appearance settings are built into the library itself along with a dialog to change them:</p> <p>Basic appearance settings are built into the library itself along with a dialog to change them:</p>
<p><a href="/eleventy-base-blog/blog/floating-status-window/images/Window-Appearance.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/mcAwKnxf5g-436.avif 436w"><source type="image/webp" srcset="/eleventy-base-blog/img/mcAwKnxf5g-436.webp 436w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/mcAwKnxf5g-436.png" alt="" width="436" height="298"></picture></a></p> <p><a href="/Blog/blog/floating-status-window/images/Window-Appearance.png"><picture><source type="image/avif" srcset="/Blog/img/mcAwKnxf5g-436.avif 436w"><source type="image/webp" srcset="/Blog/img/mcAwKnxf5g-436.webp 436w"><img loading="lazy" decoding="async" src="/Blog/img/mcAwKnxf5g-436.png" alt="" width="436" height="298"></picture></a></p>
<p>Each individual project is responsible for the text, the text layout, using a non-default text color, and keeping the text up to date. Some projects will update using a timer while others will wait for some sort of event and update as needed.</p> <p>Each individual project is responsible for the text, the text layout, using a non-default text color, and keeping the text up to date. Some projects will update using a timer while others will wait for some sort of event and update as needed.</p>
<p>I had tried a number of applications that could do custom widgets but none of them quite worked the way I wanted. I read an article about transparent WPF windows and decided to create something myself.</p> <p>I had tried a number of applications that could do custom widgets but none of them quite worked the way I wanted. I read an article about transparent WPF windows and decided to create something myself.</p>
<p>Originally it was implemented as a single application that could load a number of plugins but that ended up being a bit of a pain - when working on a new window I had to close and restart everything and if a plugin crashed it'd take down all of the rest. I decided to convert it into a library that could detect other instances of the window so they worked together but were implemented as separate binaries.</p> <p>Originally it was implemented as a single application that could load a number of plugins but that ended up being a bit of a pain - when working on a new window I had to close and restart everything and if a plugin crashed it'd take down all of the rest. I decided to convert it into a library that could detect other instances of the window so they worked together but were implemented as separate binaries.</p>
@@ -561,11 +561,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/weather-station/">Weather Station</a> <a href="/Blog/blog/weather-station/">Weather Station</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/">CPU Usage Status Window</a> <a href="/Blog/blog/cpu-usage-status-window/">CPU Usage Status Window</a>
</li> </li>
</ul> </ul>
@@ -578,7 +578,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/floating-status-window/` was built on 2024-11-21T23:06:36.396Z --> <!-- This page `/Blog/blog/floating-status-window/` was built on 2024-11-21T23:16:50.531Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello world!</title> <title>Hello world!</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,10 +540,10 @@ img[width][height] {
<time datetime="2018-02-05">05 February 2018</time> <time datetime="2018-02-05">05 February 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/critters/" class="post-tag">Critters</a> <a href="/Blog/tags/critters/" class="post-tag">Critters</a>
</li> </li>
</ul> </ul>
@@ -554,7 +554,7 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/weather-station/">Weather Station</a> <a href="/Blog/blog/weather-station/">Weather Station</a>
</li> </li>
</ul> </ul>
@@ -567,7 +567,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/hello-world/` was built on 2024-11-21T23:06:36.397Z --> <!-- This page `/Blog/blog/hello-world/` was built on 2024-11-21T23:16:50.531Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laundry Monitor - Hardware</title> <title>Laundry Monitor - Hardware</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,7 +540,7 @@ img[width][height] {
<time datetime="2018-03-29">29 March 2018</time> <time datetime="2018-03-29">29 March 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a> <a href="/Blog/tags/code/" class="post-tag">Code</a>
</li> </li>
</ul> </ul>
@@ -549,21 +549,21 @@ img[width][height] {
<p>My first thought was to use a <a href="http://www.powerswitchtail.com/powerstate-tail">PowerState Tail</a> but only a 120V version was available - there was nothing like it I could use for the 240V of the dryer. Eventually I settled on a <a href="https://smile.amazon.com/gp/product/B00I9IFJOM/ref=oh_aui_search_detailpage?ie=UTF8&amp;psc=1">Dwyer Miniature Current Switch</a> and I'd use one each for both the washer and dryer just to be consistent.</p> <p>My first thought was to use a <a href="http://www.powerswitchtail.com/powerstate-tail">PowerState Tail</a> but only a 120V version was available - there was nothing like it I could use for the 240V of the dryer. Eventually I settled on a <a href="https://smile.amazon.com/gp/product/B00I9IFJOM/ref=oh_aui_search_detailpage?ie=UTF8&amp;psc=1">Dwyer Miniature Current Switch</a> and I'd use one each for both the washer and dryer just to be consistent.</p>
<p>Next up was to figure out how to monitor the switch. I was going to use a <a href="https://www.phidgets.com/?tier=1&amp;catid=2&amp;pcid=1">Phidget I/O Board</a> attached to a central server and run wires across the house from the washer and dryer to the I/O board but the idea of running all the wires wasn't too appealing. I was about to try some sort of <a href="https://www.sparkfun.com/pages/xbee_guide">XBee</a> setup when I found the <a href="https://getchip.com/pages/chip">C.H.I.P.</a> Kickstarter and it seemed like it was worth a try - the C.H.I.P. was cheap, had digital I/O, had WiFi, and I could use anything that'd run on Linux to make it all work. The full board is probably a bit of overkill for just monitoring two switches but at $9 a device it really didn't bother me that much.</p> <p>Next up was to figure out how to monitor the switch. I was going to use a <a href="https://www.phidgets.com/?tier=1&amp;catid=2&amp;pcid=1">Phidget I/O Board</a> attached to a central server and run wires across the house from the washer and dryer to the I/O board but the idea of running all the wires wasn't too appealing. I was about to try some sort of <a href="https://www.sparkfun.com/pages/xbee_guide">XBee</a> setup when I found the <a href="https://getchip.com/pages/chip">C.H.I.P.</a> Kickstarter and it seemed like it was worth a try - the C.H.I.P. was cheap, had digital I/O, had WiFi, and I could use anything that'd run on Linux to make it all work. The full board is probably a bit of overkill for just monitoring two switches but at $9 a device it really didn't bother me that much.</p>
<p>Hooking up the dryer was relatively easy - I opened the control panel, used the schematic to find the wire that powers the motor, disconnected the wire, ran the wire through the current switch, and reconnected the wire. I mounted the sensor on the back of the dryer for easy access in case I needed to adjust it but the motor draws enough current that the switch was able to detect it easily.</p> <p>Hooking up the dryer was relatively easy - I opened the control panel, used the schematic to find the wire that powers the motor, disconnected the wire, ran the wire through the current switch, and reconnected the wire. I mounted the sensor on the back of the dryer for easy access in case I needed to adjust it but the motor draws enough current that the switch was able to detect it easily.</p>
<p><a href="/eleventy-base-blog/blog/laundry-monitor-hardware/images/Dryer.jpg"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/7D8kV0Tyqw-225.avif 225w"><source type="image/webp" srcset="/eleventy-base-blog/img/7D8kV0Tyqw-225.webp 225w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/7D8kV0Tyqw-225.jpeg" alt="" width="225" height="300"></picture></a></p> <p><a href="/Blog/blog/laundry-monitor-hardware/images/Dryer.jpg"><picture><source type="image/avif" srcset="/Blog/img/7D8kV0Tyqw-225.avif 225w"><source type="image/webp" srcset="/Blog/img/7D8kV0Tyqw-225.webp 225w"><img loading="lazy" decoding="async" src="/Blog/img/7D8kV0Tyqw-225.jpeg" alt="" width="225" height="300"></picture></a></p>
<p>The washer was pretty much the same but I decided to monitor the main power line so I could detect if the washer was running at any point in the cycle. The trouble was that at certain times (like when the washer was filling) the current draw was way too low for the switch to detect even with the sensitivity set as low as possible. I solved this by looping the wire through the sensor several times to amplify the current to the point where the switch could pick it up.</p> <p>The washer was pretty much the same but I decided to monitor the main power line so I could detect if the washer was running at any point in the cycle. The trouble was that at certain times (like when the washer was filling) the current draw was way too low for the switch to detect even with the sensitivity set as low as possible. I solved this by looping the wire through the sensor several times to amplify the current to the point where the switch could pick it up.</p>
<p><a href="/eleventy-base-blog/blog/laundry-monitor-hardware/images/Washer.jpg"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/Qvfav4t14w-225.avif 225w"><source type="image/webp" srcset="/eleventy-base-blog/img/Qvfav4t14w-225.webp 225w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/Qvfav4t14w-225.jpeg" alt="" width="225" height="300"></picture></a></p> <p><a href="/Blog/blog/laundry-monitor-hardware/images/Washer.jpg"><picture><source type="image/avif" srcset="/Blog/img/Qvfav4t14w-225.avif 225w"><source type="image/webp" srcset="/Blog/img/Qvfav4t14w-225.webp 225w"><img loading="lazy" decoding="async" src="/Blog/img/Qvfav4t14w-225.jpeg" alt="" width="225" height="300"></picture></a></p>
<p>From here on out things were simple - I just had to run some smaller wires from the switch to the digital I/O ports on the C.H.I.P. and then start working on the software. I ended up sticking the C.H.I.P. a few feet away by the power outlet so I didn't need too long a USB cable to power it.</p> <p>From here on out things were simple - I just had to run some smaller wires from the switch to the digital I/O ports on the C.H.I.P. and then start working on the software. I ended up sticking the C.H.I.P. a few feet away by the power outlet so I didn't need too long a USB cable to power it.</p>
<p><a href="/eleventy-base-blog/blog/laundry-monitor-hardware/images/Chip.jpg"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/y6v3-1HpL1-225.avif 225w"><source type="image/webp" srcset="/eleventy-base-blog/img/y6v3-1HpL1-225.webp 225w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/y6v3-1HpL1-225.jpeg" alt="" width="225" height="300"></picture></a></p> <p><a href="/Blog/blog/laundry-monitor-hardware/images/Chip.jpg"><picture><source type="image/avif" srcset="/Blog/img/y6v3-1HpL1-225.avif 225w"><source type="image/webp" srcset="/Blog/img/y6v3-1HpL1-225.webp 225w"><img loading="lazy" decoding="async" src="/Blog/img/y6v3-1HpL1-225.jpeg" alt="" width="225" height="300"></picture></a></p>
<p>So far this has been running for a little over two years and the hardware continues to work well. I'm planning to do a similar build to monitor two sump pumps - the only change is that I'm planning to use the PowerState Tail since they're both 120V with standard plugs so it'll be a lot easier to hook up.</p> <p>So far this has been running for a little over two years and the hardware continues to work well. I'm planning to do a similar build to monitor two sump pumps - the only change is that I'm planning to use the PowerState Tail since they're both 120V with standard plugs so it'll be a lot easier to hook up.</p>
<p>I'll cover the software side of the project in my next post - right now the monitor is a standalone service that does all the work but since I'm going to be adding more devices I'm thinking that I need to break things up a bit.</p> <p>I'll cover the software side of the project in my next post - right now the monitor is a standalone service that does all the work but since I'm going to be adding more devices I'm thinking that I need to break things up a bit.</p>
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/work-indicator/">Work Indicator</a> <a href="/Blog/blog/work-indicator/">Work Indicator</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/laundry-monitor-software/">Laundry Monitor Software</a> <a href="/Blog/blog/laundry-monitor-software/">Laundry Monitor Software</a>
</li> </li>
</ul> </ul>
@@ -576,7 +576,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/laundry-monitor-hardware/` was built on 2024-11-21T23:06:36.397Z --> <!-- This page `/Blog/blog/laundry-monitor-hardware/` was built on 2024-11-21T23:16:50.531Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laundry Monitor Software</title> <title>Laundry Monitor Software</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,26 +540,26 @@ img[width][height] {
<time datetime="2018-04-02">02 April 2018</time> <time datetime="2018-04-02">02 April 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
<p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p> <p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p>
<p><a href="/eleventy-base-blog/blog/laundry-monitor-software/images/HomeStatusWindow.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/t0izVudIyW-107.avif 107w"><source type="image/webp" srcset="/eleventy-base-blog/img/t0izVudIyW-107.webp 107w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/t0izVudIyW-107.png" alt="" width="107" height="48"></picture></a></p> <p><a href="/Blog/blog/laundry-monitor-software/images/HomeStatusWindow.png"><picture><source type="image/avif" srcset="/Blog/img/t0izVudIyW-107.avif 107w"><source type="image/webp" srcset="/Blog/img/t0izVudIyW-107.webp 107w"><img loading="lazy" decoding="async" src="/Blog/img/t0izVudIyW-107.png" alt="" width="107" height="48"></picture></a></p>
<p><a href="/eleventy-base-blog/blog/laundry-monitor-software/images/LaundryBot.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/MWYQsdWfr9-238.avif 238w"><source type="image/webp" srcset="/eleventy-base-blog/img/MWYQsdWfr9-238.webp 238w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/MWYQsdWfr9-238.png" alt="" width="238" height="300"></picture></a></p> <p><a href="/Blog/blog/laundry-monitor-software/images/LaundryBot.png"><picture><source type="image/avif" srcset="/Blog/img/MWYQsdWfr9-238.avif 238w"><source type="image/webp" srcset="/Blog/img/MWYQsdWfr9-238.webp 238w"><img loading="lazy" decoding="async" src="/Blog/img/MWYQsdWfr9-238.png" alt="" width="238" height="300"></picture></a></p>
<p>I use the <a href="https://github.com/fivdi/onoff">onoff</a> library to poll the GPIO pins every 500 milliseconds and wait for a pin to be steady for 10 seconds before registering the new state. Originally I tried to use an interrupt but during testing I found that the onoff library could get stuck if switch events came in too fast. I decided that I didn't need real-time updates so a polling mechanism would be enough. I also originally didn't have the 10 second wait time but I found that the washer had a few periods where it would stop completely between wash phases and it made the Telegram alerts somewhat spammy. It looks like there have been a lot of updates to onoff since I first created the application so I plan to see if the interrupt issue has been fixed and if I can use the new debounce support rather than my own custom code.</p> <p>I use the <a href="https://github.com/fivdi/onoff">onoff</a> library to poll the GPIO pins every 500 milliseconds and wait for a pin to be steady for 10 seconds before registering the new state. Originally I tried to use an interrupt but during testing I found that the onoff library could get stuck if switch events came in too fast. I decided that I didn't need real-time updates so a polling mechanism would be enough. I also originally didn't have the 10 second wait time but I found that the washer had a few periods where it would stop completely between wash phases and it made the Telegram alerts somewhat spammy. It looks like there have been a lot of updates to onoff since I first created the application so I plan to see if the interrupt issue has been fixed and if I can use the new debounce support rather than my own custom code.</p>
<p>Since I'm planning to monitor more devices in the future I'm thinking about making the application that runs on each C.H.I.P. generic and moving the alert and websocket implementation to a central &quot;home monitor&quot; service. The monitor application on each C.H.I.P. would be the same (other than configuration settings) and just report the status to the central service which would be in charge of everything else.</p> <p>Since I'm planning to monitor more devices in the future I'm thinking about making the application that runs on each C.H.I.P. generic and moving the alert and websocket implementation to a central &quot;home monitor&quot; service. The monitor application on each C.H.I.P. would be the same (other than configuration settings) and just report the status to the central service which would be in charge of everything else.</p>
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/">Laundry Monitor - Hardware</a> <a href="/Blog/blog/laundry-monitor-hardware/">Laundry Monitor - Hardware</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/feed-center/">Feed Center</a> <a href="/Blog/blog/feed-center/">Feed Center</a>
</li> </li>
</ul> </ul>
@@ -572,7 +572,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/laundry-monitor-software/` was built on 2024-11-21T23:06:36.397Z --> <!-- This page `/Blog/blog/laundry-monitor-software/` was built on 2024-11-21T23:16:50.531Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>System Temperature Status Window</title> <title>System Temperature Status Window</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,15 +540,15 @@ img[width][height] {
<time datetime="2018-03-19">19 March 2018</time> <time datetime="2018-03-19">19 March 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
<p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p> <p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p>
<p><a href="/eleventy-base-blog/blog/system-temperature-status-window/images/SystemTemperatureStatusWindow.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/LBCvSAQh1L-121.avif 121w"><source type="image/webp" srcset="/eleventy-base-blog/img/LBCvSAQh1L-121.webp 121w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/LBCvSAQh1L-121.png" alt="" width="121" height="118"></picture></a></p> <p><a href="/Blog/blog/system-temperature-status-window/images/SystemTemperatureStatusWindow.png"><picture><source type="image/avif" srcset="/Blog/img/LBCvSAQh1L-121.avif 121w"><source type="image/webp" srcset="/Blog/img/LBCvSAQh1L-121.webp 121w"><img loading="lazy" decoding="async" src="/Blog/img/LBCvSAQh1L-121.png" alt="" width="121" height="118"></picture></a></p>
<p>The sensor data is read using the <a href="http://openhardwaremonitor.org/">Open Hardware Monitor</a> library which is pretty straightforward - the one catch is that it requires running as an administrator and getting a UAC prompt each time the application starts got a bit annoying after a while.</p> <p>The sensor data is read using the <a href="http://openhardwaremonitor.org/">Open Hardware Monitor</a> library which is pretty straightforward - the one catch is that it requires running as an administrator and getting a UAC prompt each time the application starts got a bit annoying after a while.</p>
<p>I first tried to solve this by splitting the application into two parts - a Windows service that ran with administrator privileges to read the sensors and a normal application to handle the display. While this got past the annoying UAC prompts (after the service was installed) I found that Windows doesn't let you get GPU information from inside a Windows service.</p> <p>I first tried to solve this by splitting the application into two parts - a Windows service that ran with administrator privileges to read the sensors and a normal application to handle the display. While this got past the annoying UAC prompts (after the service was installed) I found that Windows doesn't let you get GPU information from inside a Windows service.</p>
<p>After doing some more research I came across a workaround of using the Windows Task Scheduler to run the service as an administrator. I just turned the service into a regular application and set up the Task Scheduler to run it on system startup - problem solved.</p> <p>After doing some more research I came across a workaround of using the Windows Task Scheduler to run the service as an administrator. I just turned the service into a regular application and set up the Task Scheduler to run it on system startup - problem solved.</p>
@@ -557,11 +557,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/">CPU Usage Status Window</a> <a href="/Blog/blog/cpu-usage-status-window/">CPU Usage Status Window</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/work-indicator/">Work Indicator</a> <a href="/Blog/blog/work-indicator/">Work Indicator</a>
</li> </li>
</ul> </ul>
@@ -574,7 +574,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/system-temperature-status-window/` was built on 2024-11-21T23:06:36.397Z --> <!-- This page `/Blog/blog/system-temperature-status-window/` was built on 2024-11-21T23:16:50.532Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Weather Station</title> <title>Weather Station</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,10 +540,10 @@ img[width][height] {
<time datetime="2018-02-17">17 February 2018</time> <time datetime="2018-02-17">17 February 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a>, <a href="/Blog/tags/code/" class="post-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/weather/" class="post-tag">Weather</a> <a href="/Blog/tags/weather/" class="post-tag">Weather</a>
</li> </li>
</ul> </ul>
@@ -553,21 +553,21 @@ img[width][height] {
<p>The code and application has changed quite a bit over the years. Originally it was split into two libraries - one for the 1-Wire network and one for weather devices like temperature and pressure - and a WinForms application that displayed the current readings and graphs of the last 24 hours of readings.</p> <p>The code and application has changed quite a bit over the years. Originally it was split into two libraries - one for the 1-Wire network and one for weather devices like temperature and pressure - and a WinForms application that displayed the current readings and graphs of the last 24 hours of readings.</p>
<p>Eventually I wanted to view the readings remotely so the application was refactored into a service that ran on the server with the hardware connection and a viewer that could run anywhere. It used .NET remoting (the recommended technique at the time) to connect the two pieces. This worked okay for a while and I created a few different applications to view the data - more about them in later posts.</p> <p>Eventually I wanted to view the readings remotely so the application was refactored into a service that ran on the server with the hardware connection and a viewer that could run anywhere. It used .NET remoting (the recommended technique at the time) to connect the two pieces. This worked okay for a while and I created a few different applications to view the data - more about them in later posts.</p>
<p>Later when I got a smartphone it made sense to create something that would let me view things from my phone. I started down the path of creating an Android application but then decided that it'd be better to create a web application that could be used everywhere. I added a <a href="https://www.asp.net/signalr">SignalR</a> interface to the service and created a basic AngularJS 1.x web application as the viewer.</p> <p>Later when I got a smartphone it made sense to create something that would let me view things from my phone. I started down the path of creating an Android application but then decided that it'd be better to create a web application that could be used everywhere. I added a <a href="https://www.asp.net/signalr">SignalR</a> interface to the service and created a basic AngularJS 1.x web application as the viewer.</p>
<p><a href="/eleventy-base-blog/blog/weather-station/images/Weather-Old-Current.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/CRIFD7TqRl-397.avif 397w"><source type="image/webp" srcset="/eleventy-base-blog/img/CRIFD7TqRl-397.webp 397w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/CRIFD7TqRl-397.png" alt="" width="397" height="210"></picture></a></p> <p><a href="/Blog/blog/weather-station/images/Weather-Old-Current.png"><picture><source type="image/avif" srcset="/Blog/img/CRIFD7TqRl-397.avif 397w"><source type="image/webp" srcset="/Blog/img/CRIFD7TqRl-397.webp 397w"><img loading="lazy" decoding="async" src="/Blog/img/CRIFD7TqRl-397.png" alt="" width="397" height="210"></picture></a></p>
<p><a href="/eleventy-base-blog/blog/weather-station/images/Weather-Old-Chart.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/_AHvzLh23d-790.avif 790w"><source type="image/webp" srcset="/eleventy-base-blog/img/_AHvzLh23d-790.webp 790w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/_AHvzLh23d-790.png" alt="" width="790" height="434"></picture></a></p> <p><a href="/Blog/blog/weather-station/images/Weather-Old-Chart.png"><picture><source type="image/avif" srcset="/Blog/img/_AHvzLh23d-790.avif 790w"><source type="image/webp" srcset="/Blog/img/_AHvzLh23d-790.webp 790w"><img loading="lazy" decoding="async" src="/Blog/img/_AHvzLh23d-790.png" alt="" width="790" height="434"></picture></a></p>
<p>The AngularJS 1.x application worked well for a while but started to show its age so I decided to re-write it with Vue.js and that's where things are now. The new web application also integrates with some of my more recent projects like the laundry monitor that I'll write more about soon.</p> <p>The AngularJS 1.x application worked well for a while but started to show its age so I decided to re-write it with Vue.js and that's where things are now. The new web application also integrates with some of my more recent projects like the laundry monitor that I'll write more about soon.</p>
<p><a href="/eleventy-base-blog/blog/weather-station/images/Weather-New-Dashboard.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/TfbGZVfftX-1361.avif 1361w"><source type="image/webp" srcset="/eleventy-base-blog/img/TfbGZVfftX-1361.webp 1361w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/TfbGZVfftX-1361.png" alt="" width="1361" height="350"></picture></a></p> <p><a href="/Blog/blog/weather-station/images/Weather-New-Dashboard.png"><picture><source type="image/avif" srcset="/Blog/img/TfbGZVfftX-1361.avif 1361w"><source type="image/webp" srcset="/Blog/img/TfbGZVfftX-1361.webp 1361w"><img loading="lazy" decoding="async" src="/Blog/img/TfbGZVfftX-1361.png" alt="" width="1361" height="350"></picture></a></p>
<p><a href="/eleventy-base-blog/blog/weather-station/images/Weather-New-Chart.png"><picture><source type="image/avif" srcset="/eleventy-base-blog/img/DdGjKWFTJJ-1363.avif 1363w"><source type="image/webp" srcset="/eleventy-base-blog/img/DdGjKWFTJJ-1363.webp 1363w"><img loading="lazy" decoding="async" src="/eleventy-base-blog/img/DdGjKWFTJJ-1363.png" alt="" width="1363" height="643"></picture></a></p> <p><a href="/Blog/blog/weather-station/images/Weather-New-Chart.png"><picture><source type="image/avif" srcset="/Blog/img/DdGjKWFTJJ-1363.avif 1363w"><source type="image/webp" srcset="/Blog/img/DdGjKWFTJJ-1363.webp 1363w"><img loading="lazy" decoding="async" src="/Blog/img/DdGjKWFTJJ-1363.png" alt="" width="1363" height="643"></picture></a></p>
<p>At this point the <a href="https://github.com/ckaczor/WeatherService">WeatherService</a> project is responsible for reading the sensors, writing the readings to the database, and providing historical data for charting. It still uses my original <a href="https://github.com/ckaczor/OneWireAPI">OneWireAPI</a> library to access the 1-Wire network.</p> <p>At this point the <a href="https://github.com/ckaczor/WeatherService">WeatherService</a> project is responsible for reading the sensors, writing the readings to the database, and providing historical data for charting. It still uses my original <a href="https://github.com/ckaczor/OneWireAPI">OneWireAPI</a> library to access the 1-Wire network.</p>
<p>Unfortunately AAG seems to have gone out of business so it is probably impossible to create the same setup or for me to get replacement parts. I've been looking at some off-the-shelf weather stations that I can read in a similar way but I haven't found anything I like so far. I'll probably be forced to find something soon since I'm starting to have some problems that look like hardware issues.</p> <p>Unfortunately AAG seems to have gone out of business so it is probably impossible to create the same setup or for me to get replacement parts. I've been looking at some off-the-shelf weather stations that I can read in a similar way but I haven't found anything I like so far. I'll probably be forced to find something soon since I'm starting to have some problems that look like hardware issues.</p>
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/hello-world/">Hello world!</a> <a href="/Blog/blog/hello-world/">Hello world!</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/floating-status-window/">Floating Status Window</a> <a href="/Blog/blog/floating-status-window/">Floating Status Window</a>
</li> </li>
</ul> </ul>
@@ -580,7 +580,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/weather-station/` was built on 2024-11-21T23:06:36.398Z --> <!-- This page `/Blog/blog/weather-station/` was built on 2024-11-21T23:16:50.532Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Where did the time go?</title> <title>Where did the time go?</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,7 +540,7 @@ img[width][height] {
<time datetime="2024-11-11">11 November 2024</time> <time datetime="2024-11-11">11 November 2024</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="post-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="post-tag">Excuses</a>
</li> </li>
</ul> </ul>
@@ -558,7 +558,7 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/back-again/">Back Again</a> <a href="/Blog/blog/back-again/">Back Again</a>
</li> </li>
</ul> </ul>
@@ -571,7 +571,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/where-did-the-time-go/` was built on 2024-11-21T23:06:36.398Z --> <!-- This page `/Blog/blog/where-did-the-time-go/` was built on 2024-11-21T23:16:50.532Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Work Indicator</title> <title>Work Indicator</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -507,22 +507,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -540,7 +540,7 @@ img[width][height] {
<time datetime="2018-03-19">19 March 2018</time> <time datetime="2018-03-19">19 March 2018</time>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a> <a href="/Blog/tags/code/" class="post-tag">Code</a>
</li> </li>
</ul> </ul>
@@ -553,11 +553,11 @@ img[width][height] {
<ul class="links-nextprev"> <ul class="links-nextprev">
<li class="links-nextprev-prev">← Previous<br> <li class="links-nextprev-prev">← Previous<br>
<a href="/eleventy-base-blog/blog/system-temperature-status-window/">System Temperature Status Window</a> <a href="/Blog/blog/system-temperature-status-window/">System Temperature Status Window</a>
</li> </li>
<li class="links-nextprev-next">Next →<br> <li class="links-nextprev-next">Next →<br>
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/">Laundry Monitor - Hardware</a> <a href="/Blog/blog/laundry-monitor-hardware/">Laundry Monitor - Hardware</a>
</li> </li>
</ul> </ul>
@@ -570,7 +570,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/blog/work-indicator/` was built on 2024-11-21T23:06:36.398Z --> <!-- This page `/Blog/blog/work-indicator/` was built on 2024-11-21T23:16:50.533Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -2,18 +2,18 @@
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title>Chris Kaczor</title> <title>Chris Kaczor</title>
<subtitle>Code, Critters, and whatever I feel like writing about.</subtitle> <subtitle>Code, Critters, and whatever I feel like writing about.</subtitle>
<link href="https://chriskaczor.com/eleventy-base-blog/feed/feed.xml" rel="self" /> <link href="https://chriskaczor.com/Blog/feed/feed.xml" rel="self" />
<link href="https://chriskaczor.com/eleventy-base-blog/" /> <link href="https://chriskaczor.com/Blog/" />
<updated>2024-11-11T00:00:00Z</updated> <updated>2024-11-11T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/</id> <id>https://chriskaczor.com/Blog/</id>
<author> <author>
<name>Chris Kaczor</name> <name>Chris Kaczor</name>
</author> </author>
<entry> <entry>
<title>Where did the time go?</title> <title>Where did the time go?</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/where-did-the-time-go/" /> <link href="https://chriskaczor.com/Blog/blog/where-did-the-time-go/" />
<updated>2024-11-11T00:00:00Z</updated> <updated>2024-11-11T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/where-did-the-time-go/</id> <id>https://chriskaczor.com/Blog/blog/where-did-the-time-go/</id>
<content type="html">&lt;p&gt;Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That&#39;s crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.&lt;/p&gt; <content type="html">&lt;p&gt;Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That&#39;s crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.&lt;/p&gt;
&lt;p&gt;I&#39;ll fill in more details in upcoming posts but some highlights of the last 5 years:&lt;/p&gt; &lt;p&gt;I&#39;ll fill in more details in upcoming posts but some highlights of the last 5 years:&lt;/p&gt;
&lt;ul&gt; &lt;ul&gt;
@@ -29,9 +29,9 @@
</entry> </entry>
<entry> <entry>
<title>Back Again</title> <title>Back Again</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/back-again/" /> <link href="https://chriskaczor.com/Blog/blog/back-again/" />
<updated>2019-12-13T00:00:00Z</updated> <updated>2019-12-13T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/back-again/</id> <id>https://chriskaczor.com/Blog/blog/back-again/</id>
<content type="html">&lt;p&gt;When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I&#39;m hoping to be a bit more consistent this time around but only time will tell.&lt;/p&gt; <content type="html">&lt;p&gt;When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I&#39;m hoping to be a bit more consistent this time around but only time will tell.&lt;/p&gt;
&lt;p&gt;I&#39;ve been mostly working on completely recreating my home monitoring project with both new hardware and software - I&#39;ll write more about that in upcoming posts.&lt;/p&gt; &lt;p&gt;I&#39;ve been mostly working on completely recreating my home monitoring project with both new hardware and software - I&#39;ll write more about that in upcoming posts.&lt;/p&gt;
&lt;p&gt;For the last week or so I&#39;ve been doing &lt;a href=&quot;https://adventofcode.com/&quot;&gt;Advent of Code 2019&lt;/a&gt; so that I can follow along with my son. He got a good head start due to a few snow days at the beginning of the month but I&#39;ve gotten ahead of him a bit as the challenges have gotten harder. We just spent some time getting his Intcode computer for day 9 working properly and I nearly swore off the entire contest while doing the second part of day 12 - the coding for that part wasn&#39;t really a problem but it took me a bit to figure out the concept for doing it without brute force. I think it would have been more fair if the challenge better explained how to solve the problem and left the coding up to the participant but that&#39;s probably just me being whiny. =) We&#39;ve been posting our code in our GitHub repos in case anyone wants a peek:&lt;/p&gt; &lt;p&gt;For the last week or so I&#39;ve been doing &lt;a href=&quot;https://adventofcode.com/&quot;&gt;Advent of Code 2019&lt;/a&gt; so that I can follow along with my son. He got a good head start due to a few snow days at the beginning of the month but I&#39;ve gotten ahead of him a bit as the challenges have gotten harder. We just spent some time getting his Intcode computer for day 9 working properly and I nearly swore off the entire contest while doing the second part of day 12 - the coding for that part wasn&#39;t really a problem but it took me a bit to figure out the concept for doing it without brute force. I think it would have been more fair if the challenge better explained how to solve the problem and left the coding up to the participant but that&#39;s probably just me being whiny. =) We&#39;ve been posting our code in our GitHub repos in case anyone wants a peek:&lt;/p&gt;
@@ -44,15 +44,15 @@
</entry> </entry>
<entry> <entry>
<title>Etsy Shop Widget</title> <title>Etsy Shop Widget</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/etsy-shop-widget/" /> <link href="https://chriskaczor.com/Blog/blog/etsy-shop-widget/" />
<updated>2018-04-20T00:00:00Z</updated> <updated>2018-04-20T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/etsy-shop-widget/</id> <id>https://chriskaczor.com/Blog/blog/etsy-shop-widget/</id>
<content type="html">&lt;p&gt;My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &amp;quot;IT guy&amp;quot; by handling the web/email hosting and other technical stuff.&lt;/p&gt; <content type="html">&lt;p&gt;My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &amp;quot;IT guy&amp;quot; by handling the web/email hosting and other technical stuff.&lt;/p&gt;
&lt;p&gt;When we were initially setting up the website using WordPress we looked for a widget that would generate a listing of their Etsy shop items but we weren&#39;t really happy with the ones we found - they either required that the Etsy shop be broken up into sections or they didn&#39;t quite display the way we wanted. I decided to try to write my own instead of tweaking one of the existing ones and &lt;a href=&quot;https://github.com/ckaczor/etsy-shop-widget&quot;&gt;Etsy Shop Widget&lt;/a&gt; was born.&lt;/p&gt; &lt;p&gt;When we were initially setting up the website using WordPress we looked for a widget that would generate a listing of their Etsy shop items but we weren&#39;t really happy with the ones we found - they either required that the Etsy shop be broken up into sections or they didn&#39;t quite display the way we wanted. I decided to try to write my own instead of tweaking one of the existing ones and &lt;a href=&quot;https://github.com/ckaczor/etsy-shop-widget&quot;&gt;Etsy Shop Widget&lt;/a&gt; was born.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/etsy-shop-widget/images/etsy-shop-widget-widget.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/ZuxNaFUA1y-280.avif 280w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/ZuxNaFUA1y-280.webp 280w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/ZuxNaFUA1y-280.png&quot; alt=&quot;&quot; width=&quot;280&quot; height=&quot;391&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/etsy-shop-widget/images/etsy-shop-widget-widget.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/ZuxNaFUA1y-280.avif 280w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/ZuxNaFUA1y-280.webp 280w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/ZuxNaFUA1y-280.png&quot; alt=&quot;&quot; width=&quot;280&quot; height=&quot;391&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I decided early on that I wanted to avoid generating the HTML in PHP as much as possible. I knew I&#39;d have use some PHP for the WordPress admin settings but I wanted to use a front-end framework for the widget itself. I was already using &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt; in other projects so when I found a &lt;a href=&quot;https://github.com/caldera-learn/vue-webpack-wordpress-plugin&quot;&gt;template project&lt;/a&gt; for creating a WordPress plugin that used Vue.js I was good to go.&lt;/p&gt; &lt;p&gt;I decided early on that I wanted to avoid generating the HTML in PHP as much as possible. I knew I&#39;d have use some PHP for the WordPress admin settings but I wanted to use a front-end framework for the widget itself. I was already using &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt; in other projects so when I found a &lt;a href=&quot;https://github.com/caldera-learn/vue-webpack-wordpress-plugin&quot;&gt;template project&lt;/a&gt; for creating a WordPress plugin that used Vue.js I was good to go.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.etsy.com/developers/documentation/getting_started/api_basics&quot;&gt;Etsy API&lt;/a&gt; requires an API key and is rate limited so I wanted to cache the results rather than fetch them each time the page loaded. I added standard WordPress settings for the API key, the shop name, and the cache time and put them all in a settings section.&lt;/p&gt; &lt;p&gt;The &lt;a href=&quot;https://www.etsy.com/developers/documentation/getting_started/api_basics&quot;&gt;Etsy API&lt;/a&gt; requires an API key and is rate limited so I wanted to cache the results rather than fetch them each time the page loaded. I added standard WordPress settings for the API key, the shop name, and the cache time and put them all in a settings section.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/etsy-shop-widget/images/etsy-shop-widget-settings.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/rbvGYcCS3i-544.avif 544w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/rbvGYcCS3i-544.webp 544w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/rbvGYcCS3i-544.png&quot; alt=&quot;&quot; width=&quot;544&quot; height=&quot;289&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/etsy-shop-widget/images/etsy-shop-widget-settings.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/rbvGYcCS3i-544.avif 544w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/rbvGYcCS3i-544.webp 544w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/rbvGYcCS3i-544.png&quot; alt=&quot;&quot; width=&quot;544&quot; height=&quot;289&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Right now this limits the widget to only one shop per WordPress installation but that&#39;s all we need right now. In the future I&#39;ll move the shop name to an attribute of the widget instead.&lt;/p&gt; &lt;p&gt;Right now this limits the widget to only one shop per WordPress installation but that&#39;s all we need right now. In the future I&#39;ll move the shop name to an attribute of the widget instead.&lt;/p&gt;
&lt;p&gt;On the back end I created a custom WordPress action that uses the WordPress &lt;a href=&quot;https://codex.wordpress.org/Transients_API&quot;&gt;transients API&lt;/a&gt; to store the cached data from Etsy. Basically if get_transient returns some data then that data is simply returned to the caller, otherwise wp_remote_request is used to make the call to the Etsy API and the returned data is stored using set_transient with the appropriate cache duration.&lt;/p&gt; &lt;p&gt;On the back end I created a custom WordPress action that uses the WordPress &lt;a href=&quot;https://codex.wordpress.org/Transients_API&quot;&gt;transients API&lt;/a&gt; to store the cached data from Etsy. Basically if get_transient returns some data then that data is simply returned to the caller, otherwise wp_remote_request is used to make the call to the Etsy API and the returned data is stored using set_transient with the appropriate cache duration.&lt;/p&gt;
&lt;pre class=&quot;language-php&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;ESW_Listings_request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;pre class=&quot;language-php&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;ESW_Listings_request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
@@ -111,15 +111,15 @@ export default class App extends Vue {
</entry> </entry>
<entry> <entry>
<title>Feed Center</title> <title>Feed Center</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/feed-center/" /> <link href="https://chriskaczor.com/Blog/blog/feed-center/" />
<updated>2018-04-04T00:00:00Z</updated> <updated>2018-04-04T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/feed-center/</id> <id>https://chriskaczor.com/Blog/blog/feed-center/</id>
<content type="html">&lt;p&gt;One of my most complete projects is &lt;a href=&quot;https://github.com/ckaczor/FeedCenter&quot;&gt;Feed Center&lt;/a&gt; - an RSS feed reader designed to blend in with the Windows desktop.&lt;/p&gt; <content type="html">&lt;p&gt;One of my most complete projects is &lt;a href=&quot;https://github.com/ckaczor/FeedCenter&quot;&gt;Feed Center&lt;/a&gt; - an RSS feed reader designed to blend in with the Windows desktop.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/feed-center/images/Feed-Center.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/uZeAJYpepW-300.avif 300w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/uZeAJYpepW-300.webp 300w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/uZeAJYpepW-300.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;188&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/feed-center/images/Feed-Center.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/uZeAJYpepW-300.avif 300w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/uZeAJYpepW-300.webp 300w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/uZeAJYpepW-300.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;188&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Years ago when push technology was the hot new thing I got my online news from applications like PointCast and MSNBC News Alert - but they were eventually discontinued as web sites moved to other delivery mechanisms like RSS feeds. I tried to find an RSS reader but never really found one that I liked. I didn&#39;t want some Outlook lookalike that I had to specifically open and read through. I wanted an app that would blend in with my desktop as much as possible and be something that I could glance at every so often for the latest news. At some point I started fiddling with creating my own and Feed Center is the result.&lt;/p&gt; &lt;p&gt;Years ago when push technology was the hot new thing I got my online news from applications like PointCast and MSNBC News Alert - but they were eventually discontinued as web sites moved to other delivery mechanisms like RSS feeds. I tried to find an RSS reader but never really found one that I liked. I didn&#39;t want some Outlook lookalike that I had to specifically open and read through. I wanted an app that would blend in with my desktop as much as possible and be something that I could glance at every so often for the latest news. At some point I started fiddling with creating my own and Feed Center is the result.&lt;/p&gt;
&lt;p&gt;In theory Feed Center supports all of the common RSS versions and Atom with some special handling for common errors. The fact that I&#39;m parsing the feeds with an XML parser makes it a little harder to handle the edge cases but it works well enough so far.&lt;/p&gt; &lt;p&gt;In theory Feed Center supports all of the common RSS versions and Atom with some special handling for common errors. The fact that I&#39;m parsing the feeds with an XML parser makes it a little harder to handle the edge cases but it works well enough so far.&lt;/p&gt;
&lt;p&gt;Feeds are added in a &amp;quot;default&amp;quot; category but they can optionally be organized into any number of other categories. The top of the main window has a selector for the current category - I&#39;m not sure I like the way it looks but I haven&#39;t come up with anything better yet.&lt;/p&gt; &lt;p&gt;Feeds are added in a &amp;quot;default&amp;quot; category but they can optionally be organized into any number of other categories. The top of the main window has a selector for the current category - I&#39;m not sure I like the way it looks but I haven&#39;t come up with anything better yet.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/feed-center/images/Options-Feed.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/4GWlZwTcq7-706.avif 706w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/4GWlZwTcq7-706.webp 706w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/4GWlZwTcq7-706.png&quot; alt=&quot;&quot; width=&quot;706&quot; height=&quot;353&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/feed-center/images/Options-Feed.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/4GWlZwTcq7-706.avif 706w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/4GWlZwTcq7-706.webp 706w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/4GWlZwTcq7-706.png&quot; alt=&quot;&quot; width=&quot;706&quot; height=&quot;353&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The arrows at the top of the window (as well as mouse buttons 4 and 5 if you have them) will scroll through the feeds in the current category in alphabetical order. The current feed will also scroll automatically every minute unless the mouse is hovering over the window - it would be annoying to have the feed change when you&#39;re getting ready to read one.&lt;/p&gt; &lt;p&gt;The arrows at the top of the window (as well as mouse buttons 4 and 5 if you have them) will scroll through the feeds in the current category in alphabetical order. The current feed will also scroll automatically every minute unless the mouse is hovering over the window - it would be annoying to have the feed change when you&#39;re getting ready to read one.&lt;/p&gt;
&lt;p&gt;Double clicking an article will open the web page for the article. By default the system default browser will be used but there&#39;s an option to choose another browser instead. There&#39;s also buttons to open all of the articles for the current feed and to mark all of the articles as having been read.&lt;/p&gt; &lt;p&gt;Double clicking an article will open the web page for the article. By default the system default browser will be used but there&#39;s an option to choose another browser instead. There&#39;s also buttons to open all of the articles for the current feed and to mark all of the articles as having been read.&lt;/p&gt;
&lt;p&gt;The code base has had some major changes over the years - originally the UI was done using WinForms and I used XML files as storage. After a few corrupt XML files from power failures I switched to using SQLite and then to SQL Server Compact. At some point I rewrote the UI using WPF so I could get rid of a bunch of custom painting for the feed list.&lt;/p&gt; &lt;p&gt;The code base has had some major changes over the years - originally the UI was done using WinForms and I used XML files as storage. After a few corrupt XML files from power failures I switched to using SQLite and then to SQL Server Compact. At some point I rewrote the UI using WPF so I could get rid of a bunch of custom painting for the feed list.&lt;/p&gt;
@@ -129,40 +129,40 @@ export default class App extends Vue {
</entry> </entry>
<entry> <entry>
<title>Laundry Monitor Software</title> <title>Laundry Monitor Software</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-software/" /> <link href="https://chriskaczor.com/Blog/blog/laundry-monitor-software/" />
<updated>2018-04-02T00:00:00Z</updated> <updated>2018-04-02T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-software/</id> <id>https://chriskaczor.com/Blog/blog/laundry-monitor-software/</id>
<content type="html">&lt;p&gt;The software side of &lt;a href=&quot;https://github.com/ckaczor/LaundryMonitor&quot;&gt;LaundryMonitor&lt;/a&gt; is currently pretty straightforward. The &lt;a href=&quot;https://getchip.com/pages/chip&quot;&gt;C.H.I.P.&lt;/a&gt; runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like &lt;a href=&quot;https://github.com/ckaczor/HomeStatusWindow&quot;&gt;HomeStatusWindow&lt;/a&gt; can watch and messages are sent to a family Telegram channel.&lt;/p&gt; <content type="html">&lt;p&gt;The software side of &lt;a href=&quot;https://github.com/ckaczor/LaundryMonitor&quot;&gt;LaundryMonitor&lt;/a&gt; is currently pretty straightforward. The &lt;a href=&quot;https://getchip.com/pages/chip&quot;&gt;C.H.I.P.&lt;/a&gt; runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like &lt;a href=&quot;https://github.com/ckaczor/HomeStatusWindow&quot;&gt;HomeStatusWindow&lt;/a&gt; can watch and messages are sent to a family Telegram channel.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-software/images/HomeStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/t0izVudIyW-107.avif 107w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/t0izVudIyW-107.webp 107w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/t0izVudIyW-107.png&quot; alt=&quot;&quot; width=&quot;107&quot; height=&quot;48&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/laundry-monitor-software/images/HomeStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/t0izVudIyW-107.avif 107w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/t0izVudIyW-107.webp 107w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/t0izVudIyW-107.png&quot; alt=&quot;&quot; width=&quot;107&quot; height=&quot;48&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-software/images/LaundryBot.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/MWYQsdWfr9-238.avif 238w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/MWYQsdWfr9-238.webp 238w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/MWYQsdWfr9-238.png&quot; alt=&quot;&quot; width=&quot;238&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/laundry-monitor-software/images/LaundryBot.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/MWYQsdWfr9-238.avif 238w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/MWYQsdWfr9-238.webp 238w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/MWYQsdWfr9-238.png&quot; alt=&quot;&quot; width=&quot;238&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I use the &lt;a href=&quot;https://github.com/fivdi/onoff&quot;&gt;onoff&lt;/a&gt; library to poll the GPIO pins every 500 milliseconds and wait for a pin to be steady for 10 seconds before registering the new state. Originally I tried to use an interrupt but during testing I found that the onoff library could get stuck if switch events came in too fast. I decided that I didn&#39;t need real-time updates so a polling mechanism would be enough. I also originally didn&#39;t have the 10 second wait time but I found that the washer had a few periods where it would stop completely between wash phases and it made the Telegram alerts somewhat spammy. It looks like there have been a lot of updates to onoff since I first created the application so I plan to see if the interrupt issue has been fixed and if I can use the new debounce support rather than my own custom code.&lt;/p&gt; &lt;p&gt;I use the &lt;a href=&quot;https://github.com/fivdi/onoff&quot;&gt;onoff&lt;/a&gt; library to poll the GPIO pins every 500 milliseconds and wait for a pin to be steady for 10 seconds before registering the new state. Originally I tried to use an interrupt but during testing I found that the onoff library could get stuck if switch events came in too fast. I decided that I didn&#39;t need real-time updates so a polling mechanism would be enough. I also originally didn&#39;t have the 10 second wait time but I found that the washer had a few periods where it would stop completely between wash phases and it made the Telegram alerts somewhat spammy. It looks like there have been a lot of updates to onoff since I first created the application so I plan to see if the interrupt issue has been fixed and if I can use the new debounce support rather than my own custom code.&lt;/p&gt;
&lt;p&gt;Since I&#39;m planning to monitor more devices in the future I&#39;m thinking about making the application that runs on each C.H.I.P. generic and moving the alert and websocket implementation to a central &amp;quot;home monitor&amp;quot; service. The monitor application on each C.H.I.P. would be the same (other than configuration settings) and just report the status to the central service which would be in charge of everything else.&lt;/p&gt; &lt;p&gt;Since I&#39;m planning to monitor more devices in the future I&#39;m thinking about making the application that runs on each C.H.I.P. generic and moving the alert and websocket implementation to a central &amp;quot;home monitor&amp;quot; service. The monitor application on each C.H.I.P. would be the same (other than configuration settings) and just report the status to the central service which would be in charge of everything else.&lt;/p&gt;
</content> </content>
</entry> </entry>
<entry> <entry>
<title>Laundry Monitor - Hardware</title> <title>Laundry Monitor - Hardware</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/" /> <link href="https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/" />
<updated>2018-03-29T00:00:00Z</updated> <updated>2018-03-29T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/</id> <id>https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/</id>
<content type="html">&lt;p&gt;The next project up is &lt;a href=&quot;https://github.com/ckaczor/LaundryMonitor&quot;&gt;LaundryMonitor&lt;/a&gt; which uses the most hardware of anything I&#39;ve done so far.&lt;/p&gt; <content type="html">&lt;p&gt;The next project up is &lt;a href=&quot;https://github.com/ckaczor/LaundryMonitor&quot;&gt;LaundryMonitor&lt;/a&gt; which uses the most hardware of anything I&#39;ve done so far.&lt;/p&gt;
&lt;p&gt;I&#39;d always wanted something that would let us tell if the washing machine or dryer was running but I never knew exactly the right way to detect it. After we got our solar panels I was doing research on how to track power usage and came across an article about current sensors and had the idea that I could hook up a current sensor to each appliance and watch the output voltage to know if the appliance was running. While trying to find a decent sensor I stumbled across a current switch which was more or less the same idea but had everything in one package - when the current was over a certain threshold the switch would close and that could be easily detected.&lt;/p&gt; &lt;p&gt;I&#39;d always wanted something that would let us tell if the washing machine or dryer was running but I never knew exactly the right way to detect it. After we got our solar panels I was doing research on how to track power usage and came across an article about current sensors and had the idea that I could hook up a current sensor to each appliance and watch the output voltage to know if the appliance was running. While trying to find a decent sensor I stumbled across a current switch which was more or less the same idea but had everything in one package - when the current was over a certain threshold the switch would close and that could be easily detected.&lt;/p&gt;
&lt;p&gt;My first thought was to use a &lt;a href=&quot;http://www.powerswitchtail.com/powerstate-tail&quot;&gt;PowerState Tail&lt;/a&gt; but only a 120V version was available - there was nothing like it I could use for the 240V of the dryer. Eventually I settled on a &lt;a href=&quot;https://smile.amazon.com/gp/product/B00I9IFJOM/ref=oh_aui_search_detailpage?ie=UTF8&amp;amp;psc=1&quot;&gt;Dwyer Miniature Current Switch&lt;/a&gt; and I&#39;d use one each for both the washer and dryer just to be consistent.&lt;/p&gt; &lt;p&gt;My first thought was to use a &lt;a href=&quot;http://www.powerswitchtail.com/powerstate-tail&quot;&gt;PowerState Tail&lt;/a&gt; but only a 120V version was available - there was nothing like it I could use for the 240V of the dryer. Eventually I settled on a &lt;a href=&quot;https://smile.amazon.com/gp/product/B00I9IFJOM/ref=oh_aui_search_detailpage?ie=UTF8&amp;amp;psc=1&quot;&gt;Dwyer Miniature Current Switch&lt;/a&gt; and I&#39;d use one each for both the washer and dryer just to be consistent.&lt;/p&gt;
&lt;p&gt;Next up was to figure out how to monitor the switch. I was going to use a &lt;a href=&quot;https://www.phidgets.com/?tier=1&amp;amp;catid=2&amp;amp;pcid=1&quot;&gt;Phidget I/O Board&lt;/a&gt; attached to a central server and run wires across the house from the washer and dryer to the I/O board but the idea of running all the wires wasn&#39;t too appealing. I was about to try some sort of &lt;a href=&quot;https://www.sparkfun.com/pages/xbee_guide&quot;&gt;XBee&lt;/a&gt; setup when I found the &lt;a href=&quot;https://getchip.com/pages/chip&quot;&gt;C.H.I.P.&lt;/a&gt; Kickstarter and it seemed like it was worth a try - the C.H.I.P. was cheap, had digital I/O, had WiFi, and I could use anything that&#39;d run on Linux to make it all work. The full board is probably a bit of overkill for just monitoring two switches but at $9 a device it really didn&#39;t bother me that much.&lt;/p&gt; &lt;p&gt;Next up was to figure out how to monitor the switch. I was going to use a &lt;a href=&quot;https://www.phidgets.com/?tier=1&amp;amp;catid=2&amp;amp;pcid=1&quot;&gt;Phidget I/O Board&lt;/a&gt; attached to a central server and run wires across the house from the washer and dryer to the I/O board but the idea of running all the wires wasn&#39;t too appealing. I was about to try some sort of &lt;a href=&quot;https://www.sparkfun.com/pages/xbee_guide&quot;&gt;XBee&lt;/a&gt; setup when I found the &lt;a href=&quot;https://getchip.com/pages/chip&quot;&gt;C.H.I.P.&lt;/a&gt; Kickstarter and it seemed like it was worth a try - the C.H.I.P. was cheap, had digital I/O, had WiFi, and I could use anything that&#39;d run on Linux to make it all work. The full board is probably a bit of overkill for just monitoring two switches but at $9 a device it really didn&#39;t bother me that much.&lt;/p&gt;
&lt;p&gt;Hooking up the dryer was relatively easy - I opened the control panel, used the schematic to find the wire that powers the motor, disconnected the wire, ran the wire through the current switch, and reconnected the wire. I mounted the sensor on the back of the dryer for easy access in case I needed to adjust it but the motor draws enough current that the switch was able to detect it easily.&lt;/p&gt; &lt;p&gt;Hooking up the dryer was relatively easy - I opened the control panel, used the schematic to find the wire that powers the motor, disconnected the wire, ran the wire through the current switch, and reconnected the wire. I mounted the sensor on the back of the dryer for easy access in case I needed to adjust it but the motor draws enough current that the switch was able to detect it easily.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/images/Dryer.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/7D8kV0Tyqw-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/7D8kV0Tyqw-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/7D8kV0Tyqw-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/images/Dryer.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/7D8kV0Tyqw-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/7D8kV0Tyqw-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/7D8kV0Tyqw-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The washer was pretty much the same but I decided to monitor the main power line so I could detect if the washer was running at any point in the cycle. The trouble was that at certain times (like when the washer was filling) the current draw was way too low for the switch to detect even with the sensitivity set as low as possible. I solved this by looping the wire through the sensor several times to amplify the current to the point where the switch could pick it up.&lt;/p&gt; &lt;p&gt;The washer was pretty much the same but I decided to monitor the main power line so I could detect if the washer was running at any point in the cycle. The trouble was that at certain times (like when the washer was filling) the current draw was way too low for the switch to detect even with the sensitivity set as low as possible. I solved this by looping the wire through the sensor several times to amplify the current to the point where the switch could pick it up.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/images/Washer.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/Qvfav4t14w-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/Qvfav4t14w-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/Qvfav4t14w-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/images/Washer.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/Qvfav4t14w-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/Qvfav4t14w-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/Qvfav4t14w-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From here on out things were simple - I just had to run some smaller wires from the switch to the digital I/O ports on the C.H.I.P. and then start working on the software. I ended up sticking the C.H.I.P. a few feet away by the power outlet so I didn&#39;t need too long a USB cable to power it.&lt;/p&gt; &lt;p&gt;From here on out things were simple - I just had to run some smaller wires from the switch to the digital I/O ports on the C.H.I.P. and then start working on the software. I ended up sticking the C.H.I.P. a few feet away by the power outlet so I didn&#39;t need too long a USB cable to power it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/images/Chip.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/y6v3-1HpL1-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/y6v3-1HpL1-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/y6v3-1HpL1-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/images/Chip.jpg&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/y6v3-1HpL1-225.avif 225w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/y6v3-1HpL1-225.webp 225w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/y6v3-1HpL1-225.jpeg&quot; alt=&quot;&quot; width=&quot;225&quot; height=&quot;300&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So far this has been running for a little over two years and the hardware continues to work well. I&#39;m planning to do a similar build to monitor two sump pumps - the only change is that I&#39;m planning to use the PowerState Tail since they&#39;re both 120V with standard plugs so it&#39;ll be a lot easier to hook up.&lt;/p&gt; &lt;p&gt;So far this has been running for a little over two years and the hardware continues to work well. I&#39;m planning to do a similar build to monitor two sump pumps - the only change is that I&#39;m planning to use the PowerState Tail since they&#39;re both 120V with standard plugs so it&#39;ll be a lot easier to hook up.&lt;/p&gt;
&lt;p&gt;I&#39;ll cover the software side of the project in my next post - right now the monitor is a standalone service that does all the work but since I&#39;m going to be adding more devices I&#39;m thinking that I need to break things up a bit.&lt;/p&gt; &lt;p&gt;I&#39;ll cover the software side of the project in my next post - right now the monitor is a standalone service that does all the work but since I&#39;m going to be adding more devices I&#39;m thinking that I need to break things up a bit.&lt;/p&gt;
</content> </content>
</entry> </entry>
<entry> <entry>
<title>Work Indicator</title> <title>Work Indicator</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/work-indicator/" /> <link href="https://chriskaczor.com/Blog/blog/work-indicator/" />
<updated>2018-03-19T00:00:00Z</updated> <updated>2018-03-19T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/work-indicator/</id> <id>https://chriskaczor.com/Blog/blog/work-indicator/</id>
<content type="html">&lt;p&gt;I&#39;m going to take a break from status windows for a little bit to cover my &lt;a href=&quot;https://github.com/ckaczor/WorkIndicator&quot;&gt;WorkIndicator&lt;/a&gt; project.&lt;/p&gt; <content type="html">&lt;p&gt;I&#39;m going to take a break from status windows for a little bit to cover my &lt;a href=&quot;https://github.com/ckaczor/WorkIndicator&quot;&gt;WorkIndicator&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;I&#39;ve been working remotely for almost 14 years now and my family found it hard to tell when I was working or on the phone. It often looks the same whether I&#39;m working or not - I&#39;m sitting at my computer, sometimes with my headset on. At some point I came across a &lt;a href=&quot;https://www.hanselman.com/blog/IsDaddyOnACallABusyLightPresenceIndicatorForLyncForMyHomeOffice.aspx&quot;&gt;blog post&lt;/a&gt; by Scott Hanselman that described hooking up a status light to Lync and I was inspired to create something similar.&lt;/p&gt; &lt;p&gt;I&#39;ve been working remotely for almost 14 years now and my family found it hard to tell when I was working or on the phone. It often looks the same whether I&#39;m working or not - I&#39;m sitting at my computer, sometimes with my headset on. At some point I came across a &lt;a href=&quot;https://www.hanselman.com/blog/IsDaddyOnACallABusyLightPresenceIndicatorForLyncForMyHomeOffice.aspx&quot;&gt;blog post&lt;/a&gt; by Scott Hanselman that described hooking up a status light to Lync and I was inspired to create something similar.&lt;/p&gt;
&lt;p&gt;The first task was to find something I could use as a status light - after some research I settled on a &lt;a href=&quot;https://www.delcomproducts.com/productdetails.asp?PartNumber=907241&quot;&gt;USB HID Green/Yellow/Red Visual Indicator&lt;/a&gt; from Delcom. I liked that it had a stoplight design and it came with a C# sample - perfect!&lt;/p&gt; &lt;p&gt;The first task was to find something I could use as a status light - after some research I settled on a &lt;a href=&quot;https://www.delcomproducts.com/productdetails.asp?PartNumber=907241&quot;&gt;USB HID Green/Yellow/Red Visual Indicator&lt;/a&gt; from Delcom. I liked that it had a stoplight design and it came with a C# sample - perfect!&lt;/p&gt;
@@ -173,11 +173,11 @@ export default class App extends Vue {
</entry> </entry>
<entry> <entry>
<title>System Temperature Status Window</title> <title>System Temperature Status Window</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/system-temperature-status-window/" /> <link href="https://chriskaczor.com/Blog/blog/system-temperature-status-window/" />
<updated>2018-03-19T00:00:00Z</updated> <updated>2018-03-19T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/system-temperature-status-window/</id> <id>https://chriskaczor.com/Blog/blog/system-temperature-status-window/</id>
<content type="html">&lt;p&gt;Next up in the &amp;quot;floating status window&amp;quot; category is &lt;a href=&quot;https://github.com/ckaczor/SystemTemperatureStatusWindow&quot;&gt;SystemTemperatureStatusWindow&lt;/a&gt;. This one does exactly what it says on the tin - it shows various system temperature values.&lt;/p&gt; <content type="html">&lt;p&gt;Next up in the &amp;quot;floating status window&amp;quot; category is &lt;a href=&quot;https://github.com/ckaczor/SystemTemperatureStatusWindow&quot;&gt;SystemTemperatureStatusWindow&lt;/a&gt;. This one does exactly what it says on the tin - it shows various system temperature values.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/system-temperature-status-window/images/SystemTemperatureStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/LBCvSAQh1L-121.avif 121w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/LBCvSAQh1L-121.webp 121w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/LBCvSAQh1L-121.png&quot; alt=&quot;&quot; width=&quot;121&quot; height=&quot;118&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/system-temperature-status-window/images/SystemTemperatureStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/LBCvSAQh1L-121.avif 121w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/LBCvSAQh1L-121.webp 121w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/LBCvSAQh1L-121.png&quot; alt=&quot;&quot; width=&quot;121&quot; height=&quot;118&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The sensor data is read using the &lt;a href=&quot;http://openhardwaremonitor.org/&quot;&gt;Open Hardware Monitor&lt;/a&gt; library which is pretty straightforward - the one catch is that it requires running as an administrator and getting a UAC prompt each time the application starts got a bit annoying after a while.&lt;/p&gt; &lt;p&gt;The sensor data is read using the &lt;a href=&quot;http://openhardwaremonitor.org/&quot;&gt;Open Hardware Monitor&lt;/a&gt; library which is pretty straightforward - the one catch is that it requires running as an administrator and getting a UAC prompt each time the application starts got a bit annoying after a while.&lt;/p&gt;
&lt;p&gt;I first tried to solve this by splitting the application into two parts - a Windows service that ran with administrator privileges to read the sensors and a normal application to handle the display. While this got past the annoying UAC prompts (after the service was installed) I found that Windows doesn&#39;t let you get GPU information from inside a Windows service.&lt;/p&gt; &lt;p&gt;I first tried to solve this by splitting the application into two parts - a Windows service that ran with administrator privileges to read the sensors and a normal application to handle the display. While this got past the annoying UAC prompts (after the service was installed) I found that Windows doesn&#39;t let you get GPU information from inside a Windows service.&lt;/p&gt;
&lt;p&gt;After doing some more research I came across a workaround of using the Windows Task Scheduler to run the service as an administrator. I just turned the service into a regular application and set up the Task Scheduler to run it on system startup - problem solved.&lt;/p&gt; &lt;p&gt;After doing some more research I came across a workaround of using the Windows Task Scheduler to run the service as an administrator. I just turned the service into a regular application and set up the Task Scheduler to run it on system startup - problem solved.&lt;/p&gt;
@@ -187,11 +187,11 @@ export default class App extends Vue {
</entry> </entry>
<entry> <entry>
<title>CPU Usage Status Window</title> <title>CPU Usage Status Window</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/cpu-usage-status-window/" /> <link href="https://chriskaczor.com/Blog/blog/cpu-usage-status-window/" />
<updated>2018-03-08T00:00:00Z</updated> <updated>2018-03-08T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/cpu-usage-status-window/</id> <id>https://chriskaczor.com/Blog/blog/cpu-usage-status-window/</id>
<content type="html">&lt;p&gt;Now that I&#39;ve written about my &lt;a href=&quot;https://github.com/ckaczor/FloatingStatusWindow&quot;&gt;FloatingStatusWindow&lt;/a&gt; library I can start to talk about the projects that use it. First up is the &lt;a href=&quot;https://github.com/ckaczor/ProcessCpuUsageStatusWindow&quot;&gt;ProcessCpuUsageStatusWindow&lt;/a&gt; project.&lt;/p&gt; <content type="html">&lt;p&gt;Now that I&#39;ve written about my &lt;a href=&quot;https://github.com/ckaczor/FloatingStatusWindow&quot;&gt;FloatingStatusWindow&lt;/a&gt; library I can start to talk about the projects that use it. First up is the &lt;a href=&quot;https://github.com/ckaczor/ProcessCpuUsageStatusWindow&quot;&gt;ProcessCpuUsageStatusWindow&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/cpu-usage-status-window/images/ProcessCpuUsageStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/L-UgyKZ-NI-373.avif 373w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/L-UgyKZ-NI-373.webp 373w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/L-UgyKZ-NI-373.png&quot; alt=&quot;&quot; width=&quot;373&quot; height=&quot;139&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/cpu-usage-status-window/images/ProcessCpuUsageStatusWindow.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/L-UgyKZ-NI-373.avif 373w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/L-UgyKZ-NI-373.webp 373w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/L-UgyKZ-NI-373.png&quot; alt=&quot;&quot; width=&quot;373&quot; height=&quot;139&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is basically a mini task manager showing the top X processes by CPU usage and the total CPU usage of the system. The values update automatically every 2 seconds.&lt;/p&gt; &lt;p&gt;It is basically a mini task manager showing the top X processes by CPU usage and the total CPU usage of the system. The values update automatically every 2 seconds.&lt;/p&gt;
&lt;p&gt;CPU usage is calculated by taking a snapshot of &amp;quot;% processor time&amp;quot; for the &amp;quot;Process&amp;quot; performance counter category every 2 seconds and having the counter sample calculate the percent usage for each process based on the previous snapshot.&lt;/p&gt; &lt;p&gt;CPU usage is calculated by taking a snapshot of &amp;quot;% processor time&amp;quot; for the &amp;quot;Process&amp;quot; performance counter category every 2 seconds and having the counter sample calculate the percent usage for each process based on the previous snapshot.&lt;/p&gt;
&lt;p&gt;This ended needing a lot more calculation than I had hoped although I don&#39;t remember all the details as to why - one of the perils of blogging so long after the code was written. From what I remember what I first tried was built into .NET and was easier to code but used a lot more processor time than I was comfortable with. Perhaps that has since been fixed in a later framework version - someday I&#39;ll have to try to recreate what I was doing.&lt;/p&gt; &lt;p&gt;This ended needing a lot more calculation than I had hoped although I don&#39;t remember all the details as to why - one of the perils of blogging so long after the code was written. From what I remember what I first tried was built into .NET and was easier to code but used a lot more processor time than I was comfortable with. Perhaps that has since been fixed in a later framework version - someday I&#39;ll have to try to recreate what I was doing.&lt;/p&gt;
@@ -201,16 +201,16 @@ export default class App extends Vue {
</entry> </entry>
<entry> <entry>
<title>Floating Status Window</title> <title>Floating Status Window</title>
<link href="https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/" /> <link href="https://chriskaczor.com/Blog/blog/floating-status-window/" />
<updated>2018-02-21T00:00:00Z</updated> <updated>2018-02-21T00:00:00Z</updated>
<id>https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/</id> <id>https://chriskaczor.com/Blog/blog/floating-status-window/</id>
<content type="html">&lt;p&gt;Something that shows up in a lot of my projects is my &lt;a href=&quot;https://github.com/ckaczor/FloatingStatusWindow&quot;&gt;FloatingStatusWindow&lt;/a&gt; library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:&lt;/p&gt; <content type="html">&lt;p&gt;Something that shows up in a lot of my projects is my &lt;a href=&quot;https://github.com/ckaczor/FloatingStatusWindow&quot;&gt;FloatingStatusWindow&lt;/a&gt; library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/images/Windows-Locked.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/-IG3SLpr1H-770.avif 770w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/-IG3SLpr1H-770.webp 770w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/-IG3SLpr1H-770.png&quot; alt=&quot;&quot; width=&quot;770&quot; height=&quot;303&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/floating-status-window/images/Windows-Locked.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/-IG3SLpr1H-770.avif 770w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/-IG3SLpr1H-770.webp 770w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/-IG3SLpr1H-770.png&quot; alt=&quot;&quot; width=&quot;770&quot; height=&quot;303&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Each one is a separate project that uses the core library to create and manage the window. The code for a few of these is on &lt;a href=&quot;https://github.com/ckaczor&quot;&gt;GitHub&lt;/a&gt; and I&#39;m working to add more.&lt;/p&gt; &lt;p&gt;Each one is a separate project that uses the core library to create and manage the window. The code for a few of these is on &lt;a href=&quot;https://github.com/ckaczor&quot;&gt;GitHub&lt;/a&gt; and I&#39;m working to add more.&lt;/p&gt;
&lt;p&gt;The windows are locked by default to prevent accidentally moving them but they can be unlocked in order to move or resize them. When moving or resizing the windows will snap to each other and the sides of the screen. This is what the example above looks like unlocked:&lt;/p&gt; &lt;p&gt;The windows are locked by default to prevent accidentally moving them but they can be unlocked in order to move or resize them. When moving or resizing the windows will snap to each other and the sides of the screen. This is what the example above looks like unlocked:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/images/Windows-Unlocked.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/2zWtBO5eyV-1358.avif 1358w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/2zWtBO5eyV-1358.webp 1358w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/2zWtBO5eyV-1358.png&quot; alt=&quot;&quot; width=&quot;1358&quot; height=&quot;354&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/floating-status-window/images/Windows-Unlocked.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/2zWtBO5eyV-1358.avif 1358w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/2zWtBO5eyV-1358.webp 1358w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/2zWtBO5eyV-1358.png&quot; alt=&quot;&quot; width=&quot;1358&quot; height=&quot;354&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basic appearance settings are built into the library itself along with a dialog to change them:&lt;/p&gt; &lt;p&gt;Basic appearance settings are built into the library itself along with a dialog to change them:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/images/Window-Appearance.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/mcAwKnxf5g-436.avif 436w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/eleventy-base-blog/img/mcAwKnxf5g-436.webp 436w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/eleventy-base-blog/img/mcAwKnxf5g-436.png&quot; alt=&quot;&quot; width=&quot;436&quot; height=&quot;298&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://chriskaczor.com/Blog/blog/floating-status-window/images/Window-Appearance.png&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://chriskaczor.com/Blog/img/mcAwKnxf5g-436.avif 436w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://chriskaczor.com/Blog/img/mcAwKnxf5g-436.webp 436w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://chriskaczor.com/Blog/img/mcAwKnxf5g-436.png&quot; alt=&quot;&quot; width=&quot;436&quot; height=&quot;298&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Each individual project is responsible for the text, the text layout, using a non-default text color, and keeping the text up to date. Some projects will update using a timer while others will wait for some sort of event and update as needed.&lt;/p&gt; &lt;p&gt;Each individual project is responsible for the text, the text layout, using a non-default text color, and keeping the text up to date. Some projects will update using a timer while others will wait for some sort of event and update as needed.&lt;/p&gt;
&lt;p&gt;I had tried a number of applications that could do custom widgets but none of them quite worked the way I wanted. I read an article about transparent WPF windows and decided to create something myself.&lt;/p&gt; &lt;p&gt;I had tried a number of applications that could do custom widgets but none of them quite worked the way I wanted. I read an article about transparent WPF windows and decided to create something myself.&lt;/p&gt;
&lt;p&gt;Originally it was implemented as a single application that could load a number of plugins but that ended up being a bit of a pain - when working on a new window I had to close and restart everything and if a plugin crashed it&#39;d take down all of the rest. I decided to convert it into a library that could detect other instances of the window so they worked together but were implemented as separate binaries.&lt;/p&gt; &lt;p&gt;Originally it was implemented as a single application that could load a number of plugins but that ended up being a bit of a pain - when working on a new window I had to close and restart everything and if a plugin crashed it&#39;d take down all of the rest. I decided to convert it into a library that could detect other instances of the window so they worked together but were implemented as separate binaries.&lt;/p&gt;

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chris Kaczor</title> <title>Chris Kaczor</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/" aria-current="page"> <a href="/Blog/" aria-current="page">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -371,7 +371,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/where-did-the-time-go/" class="postlist-link"> <a href="/Blog/blog/where-did-the-time-go/" class="postlist-link">
Where did the time go? Where did the time go?
@@ -380,19 +380,19 @@ img[width][height] {
<time class="postlist-date" datetime="2024-11-11">11 November 2024</time> <time class="postlist-date" datetime="2024-11-11">11 November 2024</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="postlist-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="postlist-tag">Excuses</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That's crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.</p> <p>Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That's crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.</p>
<a href="/eleventy-base-blog/blog/where-did-the-time-go/" class="postlist-read-more"> <a href="/Blog/blog/where-did-the-time-go/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-link"> <a href="/Blog/blog/back-again/" class="postlist-link">
Back Again Back Again
@@ -401,22 +401,22 @@ img[width][height] {
<time class="postlist-date" datetime="2019-12-13">13 December 2019</time> <time class="postlist-date" datetime="2019-12-13">13 December 2019</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="postlist-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="postlist-tag">Excuses</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p> <p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p>
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-read-more"> <a href="/Blog/blog/back-again/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/etsy-shop-widget/" class="postlist-link"> <a href="/Blog/blog/etsy-shop-widget/" class="postlist-link">
Etsy Shop Widget Etsy Shop Widget
@@ -425,19 +425,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-20">20 April 2018</time> <time class="postlist-date" datetime="2018-04-20">20 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p> <p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p>
<a href="/eleventy-base-blog/blog/etsy-shop-widget/" class="postlist-read-more"> <a href="/Blog/blog/etsy-shop-widget/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/feed-center/" class="postlist-link"> <a href="/Blog/blog/feed-center/" class="postlist-link">
Feed Center Feed Center
@@ -446,19 +446,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-04">04 April 2018</time> <time class="postlist-date" datetime="2018-04-04">04 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p> <p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p>
<a href="/eleventy-base-blog/blog/feed-center/" class="postlist-read-more"> <a href="/Blog/blog/feed-center/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-link"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-link">
Laundry Monitor Software Laundry Monitor Software
@@ -467,22 +467,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-02">02 April 2018</time> <time class="postlist-date" datetime="2018-04-02">02 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p> <p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p>
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-read-more"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/" class="postlist-link"> <a href="/Blog/blog/laundry-monitor-hardware/" class="postlist-link">
Laundry Monitor - Hardware Laundry Monitor - Hardware
@@ -491,19 +491,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-29">29 March 2018</time> <time class="postlist-date" datetime="2018-03-29">29 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>The next project up is <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> which uses the most hardware of anything I've done so far.</p> <p>The next project up is <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> which uses the most hardware of anything I've done so far.</p>
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/" class="postlist-read-more"> <a href="/Blog/blog/laundry-monitor-hardware/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/work-indicator/" class="postlist-link"> <a href="/Blog/blog/work-indicator/" class="postlist-link">
Work Indicator Work Indicator
@@ -512,19 +512,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-19">19 March 2018</time> <time class="postlist-date" datetime="2018-03-19">19 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>I'm going to take a break from status windows for a little bit to cover my <a href="https://github.com/ckaczor/WorkIndicator">WorkIndicator</a> project.</p> <p>I'm going to take a break from status windows for a little bit to cover my <a href="https://github.com/ckaczor/WorkIndicator">WorkIndicator</a> project.</p>
<a href="/eleventy-base-blog/blog/work-indicator/" class="postlist-read-more"> <a href="/Blog/blog/work-indicator/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-link"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-link">
System Temperature Status Window System Temperature Status Window
@@ -533,22 +533,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-19">19 March 2018</time> <time class="postlist-date" datetime="2018-03-19">19 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p> <p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p>
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-read-more"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-link"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-link">
CPU Usage Status Window CPU Usage Status Window
@@ -557,22 +557,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-08">08 March 2018</time> <time class="postlist-date" datetime="2018-03-08">08 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p> <p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p>
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-read-more"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-link"> <a href="/Blog/blog/floating-status-window/" class="postlist-link">
Floating Status Window Floating Status Window
@@ -581,22 +581,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-21">21 February 2018</time> <time class="postlist-date" datetime="2018-02-21">21 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p> <p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p>
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-read-more"> <a href="/Blog/blog/floating-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-link"> <a href="/Blog/blog/weather-station/" class="postlist-link">
Weather Station Weather Station
@@ -605,22 +605,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-17">17 February 2018</time> <time class="postlist-date" datetime="2018-02-17">17 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/weather/" class="postlist-tag">Weather</a> <a href="/Blog/tags/weather/" class="postlist-tag">Weather</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p> <p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p>
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-read-more"> <a href="/Blog/blog/weather-station/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-link"> <a href="/Blog/blog/hello-world/" class="postlist-link">
Hello world! Hello world!
@@ -629,16 +629,16 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-05">05 February 2018</time> <time class="postlist-date" datetime="2018-02-05">05 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/critters/" class="postlist-tag">Critters</a> <a href="/Blog/tags/critters/" class="postlist-tag">Critters</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p> <p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p>
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-read-more"> <a href="/Blog/blog/hello-world/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
@@ -653,7 +653,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/` was built on 2024-11-21T23:06:36.399Z --> <!-- This page `/Blog/` was built on 2024-11-21T23:16:50.528Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -2,82 +2,82 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/hello-world/</loc> <loc>https://chriskaczor.com/Blog/blog/hello-world/</loc>
<lastmod>2018-02-05</lastmod> <lastmod>2018-02-05</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/weather-station/</loc> <loc>https://chriskaczor.com/Blog/blog/weather-station/</loc>
<lastmod>2018-02-17</lastmod> <lastmod>2018-02-17</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/floating-status-window/</loc> <loc>https://chriskaczor.com/Blog/blog/floating-status-window/</loc>
<lastmod>2018-02-21</lastmod> <lastmod>2018-02-21</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/cpu-usage-status-window/</loc> <loc>https://chriskaczor.com/Blog/blog/cpu-usage-status-window/</loc>
<lastmod>2018-03-08</lastmod> <lastmod>2018-03-08</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/system-temperature-status-window/</loc> <loc>https://chriskaczor.com/Blog/blog/system-temperature-status-window/</loc>
<lastmod>2018-03-19</lastmod> <lastmod>2018-03-19</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/work-indicator/</loc> <loc>https://chriskaczor.com/Blog/blog/work-indicator/</loc>
<lastmod>2018-03-19</lastmod> <lastmod>2018-03-19</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-hardware/</loc> <loc>https://chriskaczor.com/Blog/blog/laundry-monitor-hardware/</loc>
<lastmod>2018-03-29</lastmod> <lastmod>2018-03-29</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/laundry-monitor-software/</loc> <loc>https://chriskaczor.com/Blog/blog/laundry-monitor-software/</loc>
<lastmod>2018-04-02</lastmod> <lastmod>2018-04-02</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/feed-center/</loc> <loc>https://chriskaczor.com/Blog/blog/feed-center/</loc>
<lastmod>2018-04-04</lastmod> <lastmod>2018-04-04</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/etsy-shop-widget/</loc> <loc>https://chriskaczor.com/Blog/blog/etsy-shop-widget/</loc>
<lastmod>2018-04-20</lastmod> <lastmod>2018-04-20</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/back-again/</loc> <loc>https://chriskaczor.com/Blog/blog/back-again/</loc>
<lastmod>2019-12-13</lastmod> <lastmod>2019-12-13</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/blog/where-did-the-time-go/</loc> <loc>https://chriskaczor.com/Blog/blog/where-did-the-time-go/</loc>
<lastmod>2024-11-11</lastmod> <lastmod>2024-11-11</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/about/</loc> <loc>https://chriskaczor.com/Blog/about/</loc>
<lastmod>2024-11-21</lastmod> <lastmod>2024-11-21</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/</loc> <loc>https://chriskaczor.com/Blog/</loc>
<lastmod>2024-11-21</lastmod> <lastmod>2024-11-21</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/tags/</loc> <loc>https://chriskaczor.com/Blog/tags/</loc>
<lastmod>2024-11-21</lastmod> <lastmod>2024-11-21</lastmod>
</url> </url>
<url> <url>
<loc>https://chriskaczor.com/eleventy-base-blog/feed/feed.xml</loc> <loc>https://chriskaczor.com/Blog/feed/feed.xml</loc>
<lastmod>2024-11-21</lastmod> <lastmod>2024-11-21</lastmod>
</url> </url>
</urlset> </urlset>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tagged &#39;Code&#39;</title> <title>Tagged &#39;Code&#39;</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -373,7 +373,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-link"> <a href="/Blog/blog/back-again/" class="postlist-link">
Back Again Back Again
@@ -382,22 +382,22 @@ img[width][height] {
<time class="postlist-date" datetime="2019-12-13">13 December 2019</time> <time class="postlist-date" datetime="2019-12-13">13 December 2019</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="postlist-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="postlist-tag">Excuses</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p> <p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p>
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-read-more"> <a href="/Blog/blog/back-again/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/etsy-shop-widget/" class="postlist-link"> <a href="/Blog/blog/etsy-shop-widget/" class="postlist-link">
Etsy Shop Widget Etsy Shop Widget
@@ -406,19 +406,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-20">20 April 2018</time> <time class="postlist-date" datetime="2018-04-20">20 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p> <p>My wife and a friend run The Crafty Coop (edit: now closed) - an event planning business that also sells handmade party decorations/favors online and at craft shows. One of the ways I help out is as the designated &quot;IT guy&quot; by handling the web/email hosting and other technical stuff.</p>
<a href="/eleventy-base-blog/blog/etsy-shop-widget/" class="postlist-read-more"> <a href="/Blog/blog/etsy-shop-widget/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/feed-center/" class="postlist-link"> <a href="/Blog/blog/feed-center/" class="postlist-link">
Feed Center Feed Center
@@ -427,19 +427,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-04">04 April 2018</time> <time class="postlist-date" datetime="2018-04-04">04 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p> <p>One of my most complete projects is <a href="https://github.com/ckaczor/FeedCenter">Feed Center</a> - an RSS feed reader designed to blend in with the Windows desktop.</p>
<a href="/eleventy-base-blog/blog/feed-center/" class="postlist-read-more"> <a href="/Blog/blog/feed-center/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-link"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-link">
Laundry Monitor Software Laundry Monitor Software
@@ -448,22 +448,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-02">02 April 2018</time> <time class="postlist-date" datetime="2018-04-02">02 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p> <p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p>
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-read-more"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/" class="postlist-link"> <a href="/Blog/blog/laundry-monitor-hardware/" class="postlist-link">
Laundry Monitor - Hardware Laundry Monitor - Hardware
@@ -472,19 +472,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-29">29 March 2018</time> <time class="postlist-date" datetime="2018-03-29">29 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>The next project up is <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> which uses the most hardware of anything I've done so far.</p> <p>The next project up is <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> which uses the most hardware of anything I've done so far.</p>
<a href="/eleventy-base-blog/blog/laundry-monitor-hardware/" class="postlist-read-more"> <a href="/Blog/blog/laundry-monitor-hardware/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/work-indicator/" class="postlist-link"> <a href="/Blog/blog/work-indicator/" class="postlist-link">
Work Indicator Work Indicator
@@ -493,19 +493,19 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-19">19 March 2018</time> <time class="postlist-date" datetime="2018-03-19">19 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a> <a href="/Blog/tags/code/" class="postlist-tag">Code</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>I'm going to take a break from status windows for a little bit to cover my <a href="https://github.com/ckaczor/WorkIndicator">WorkIndicator</a> project.</p> <p>I'm going to take a break from status windows for a little bit to cover my <a href="https://github.com/ckaczor/WorkIndicator">WorkIndicator</a> project.</p>
<a href="/eleventy-base-blog/blog/work-indicator/" class="postlist-read-more"> <a href="/Blog/blog/work-indicator/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-link"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-link">
System Temperature Status Window System Temperature Status Window
@@ -514,22 +514,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-19">19 March 2018</time> <time class="postlist-date" datetime="2018-03-19">19 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p> <p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p>
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-read-more"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-link"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-link">
CPU Usage Status Window CPU Usage Status Window
@@ -538,22 +538,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-08">08 March 2018</time> <time class="postlist-date" datetime="2018-03-08">08 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p> <p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p>
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-read-more"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-link"> <a href="/Blog/blog/floating-status-window/" class="postlist-link">
Floating Status Window Floating Status Window
@@ -562,22 +562,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-21">21 February 2018</time> <time class="postlist-date" datetime="2018-02-21">21 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p> <p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p>
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-read-more"> <a href="/Blog/blog/floating-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-link"> <a href="/Blog/blog/weather-station/" class="postlist-link">
Weather Station Weather Station
@@ -586,22 +586,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-17">17 February 2018</time> <time class="postlist-date" datetime="2018-02-17">17 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/weather/" class="postlist-tag">Weather</a> <a href="/Blog/tags/weather/" class="postlist-tag">Weather</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p> <p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p>
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-read-more"> <a href="/Blog/blog/weather-station/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-link"> <a href="/Blog/blog/hello-world/" class="postlist-link">
Hello world! Hello world!
@@ -610,23 +610,23 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-05">05 February 2018</time> <time class="postlist-date" datetime="2018-02-05">05 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/critters/" class="postlist-tag">Critters</a> <a href="/Blog/tags/critters/" class="postlist-tag">Critters</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p> <p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p>
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-read-more"> <a href="/Blog/blog/hello-world/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
</ul> </ul>
<p>See <a href="/eleventy-base-blog/tags/">all tags</a>.</p> <p>See <a href="/Blog/tags/">all tags</a>.</p>
</heading-anchors> </heading-anchors>
</main> </main>
@@ -636,7 +636,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/code/` was built on 2024-11-21T23:06:36.399Z --> <!-- This page `/Blog/tags/code/` was built on 2024-11-21T23:16:50.528Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tagged &#39;Critters&#39;</title> <title>Tagged &#39;Critters&#39;</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -373,7 +373,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-link"> <a href="/Blog/blog/hello-world/" class="postlist-link">
Hello world! Hello world!
@@ -382,23 +382,23 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-05">05 February 2018</time> <time class="postlist-date" datetime="2018-02-05">05 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/critters/" class="postlist-tag">Critters</a> <a href="/Blog/tags/critters/" class="postlist-tag">Critters</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p> <p>Being a programmer at heart it seems appropriate to stick with the classic &quot;hello world&quot; for starting off!</p>
<a href="/eleventy-base-blog/blog/hello-world/" class="postlist-read-more"> <a href="/Blog/blog/hello-world/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
</ul> </ul>
<p>See <a href="/eleventy-base-blog/tags/">all tags</a>.</p> <p>See <a href="/Blog/tags/">all tags</a>.</p>
</heading-anchors> </heading-anchors>
</main> </main>
@@ -408,7 +408,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/critters/` was built on 2024-11-21T23:06:36.523Z --> <!-- This page `/Blog/tags/critters/` was built on 2024-11-21T23:16:50.648Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tagged &#39;Excuses&#39;</title> <title>Tagged &#39;Excuses&#39;</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -373,7 +373,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/where-did-the-time-go/" class="postlist-link"> <a href="/Blog/blog/where-did-the-time-go/" class="postlist-link">
Where did the time go? Where did the time go?
@@ -382,19 +382,19 @@ img[width][height] {
<time class="postlist-date" datetime="2024-11-11">11 November 2024</time> <time class="postlist-date" datetime="2024-11-11">11 November 2024</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="postlist-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="postlist-tag">Excuses</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That's crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.</p> <p>Whoa - where the hell did all the time go?! I knew in the back of my mind that I was being a huge slacker by not updating in a while, but almost 5 years? That's crazy! My initial reaction was that the timestamp of my last post had gotten screwed up somehow, but the details of what I wrote proves that the time is right.</p>
<a href="/eleventy-base-blog/blog/where-did-the-time-go/" class="postlist-read-more"> <a href="/Blog/blog/where-did-the-time-go/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-link"> <a href="/Blog/blog/back-again/" class="postlist-link">
Back Again Back Again
@@ -403,23 +403,23 @@ img[width][height] {
<time class="postlist-date" datetime="2019-12-13">13 December 2019</time> <time class="postlist-date" datetime="2019-12-13">13 December 2019</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="postlist-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="postlist-tag">Excuses</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p> <p>When I started this blog I had recently been laid off and figured it was as good a time as any to give some visibility to the code I had been creating over the years rather than hoarding it like a jealous dragon. I intended to keep up with it but then I started a new job and the writing sort of fell by the wayside. I kept working on projects when I could but never really got the chance to write about them. I'm hoping to be a bit more consistent this time around but only time will tell.</p>
<a href="/eleventy-base-blog/blog/back-again/" class="postlist-read-more"> <a href="/Blog/blog/back-again/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
</ul> </ul>
<p>See <a href="/eleventy-base-blog/tags/">all tags</a>.</p> <p>See <a href="/Blog/tags/">all tags</a>.</p>
</heading-anchors> </heading-anchors>
</main> </main>
@@ -429,7 +429,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/excuses/` was built on 2024-11-21T23:06:36.512Z --> <!-- This page `/Blog/tags/excuses/` was built on 2024-11-21T23:16:50.637Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tagged &#39;Floating Status Window&#39;</title> <title>Tagged &#39;Floating Status Window&#39;</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -373,7 +373,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-link"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-link">
Laundry Monitor Software Laundry Monitor Software
@@ -382,22 +382,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-04-02">02 April 2018</time> <time class="postlist-date" datetime="2018-04-02">02 April 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p> <p>The software side of <a href="https://github.com/ckaczor/LaundryMonitor">LaundryMonitor</a> is currently pretty straightforward. The <a href="https://getchip.com/pages/chip">C.H.I.P.</a> runs a Node.js application that keeps track of a GPIO pin for each current switch - when the switch is closed the appliance is on and when the switch is open the appliance is off. The application exposes a websocket that applications like <a href="https://github.com/ckaczor/HomeStatusWindow">HomeStatusWindow</a> can watch and messages are sent to a family Telegram channel.</p>
<a href="/eleventy-base-blog/blog/laundry-monitor-software/" class="postlist-read-more"> <a href="/Blog/blog/laundry-monitor-software/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-link"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-link">
System Temperature Status Window System Temperature Status Window
@@ -406,22 +406,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-19">19 March 2018</time> <time class="postlist-date" datetime="2018-03-19">19 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p> <p>Next up in the &quot;floating status window&quot; category is <a href="https://github.com/ckaczor/SystemTemperatureStatusWindow">SystemTemperatureStatusWindow</a>. This one does exactly what it says on the tin - it shows various system temperature values.</p>
<a href="/eleventy-base-blog/blog/system-temperature-status-window/" class="postlist-read-more"> <a href="/Blog/blog/system-temperature-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-link"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-link">
CPU Usage Status Window CPU Usage Status Window
@@ -430,22 +430,22 @@ img[width][height] {
<time class="postlist-date" datetime="2018-03-08">08 March 2018</time> <time class="postlist-date" datetime="2018-03-08">08 March 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p> <p>Now that I've written about my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library I can start to talk about the projects that use it. First up is the <a href="https://github.com/ckaczor/ProcessCpuUsageStatusWindow">ProcessCpuUsageStatusWindow</a> project.</p>
<a href="/eleventy-base-blog/blog/cpu-usage-status-window/" class="postlist-read-more"> <a href="/Blog/blog/cpu-usage-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-link"> <a href="/Blog/blog/floating-status-window/" class="postlist-link">
Floating Status Window Floating Status Window
@@ -454,23 +454,23 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-21">21 February 2018</time> <time class="postlist-date" datetime="2018-02-21">21 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="postlist-tag">Floating Status Window</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p> <p>Something that shows up in a lot of my projects is my <a href="https://github.com/ckaczor/FloatingStatusWindow">FloatingStatusWindow</a> library. It allows the creation of something akin to a desktop widget that displays simple text and blends in with the Windows desktop. This is what several of them look like in the corner of my secondary monitor:</p>
<a href="/eleventy-base-blog/blog/floating-status-window/" class="postlist-read-more"> <a href="/Blog/blog/floating-status-window/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
</ul> </ul>
<p>See <a href="/eleventy-base-blog/tags/">all tags</a>.</p> <p>See <a href="/Blog/tags/">all tags</a>.</p>
</heading-anchors> </heading-anchors>
</main> </main>
@@ -480,7 +480,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/floating-status-window/` was built on 2024-11-21T23:06:36.517Z --> <!-- This page `/Blog/tags/floating-status-window/` was built on 2024-11-21T23:16:50.643Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chris Kaczor</title> <title>Chris Kaczor</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -339,22 +339,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/" aria-current="page"> <a href="/Blog/tags/" aria-current="page">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -371,27 +371,27 @@ img[width][height] {
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="post-tag">Code</a> <a href="/Blog/tags/code/" class="post-tag">Code</a>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/excuses/" class="post-tag">Excuses</a> <a href="/Blog/tags/excuses/" class="post-tag">Excuses</a>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a> <a href="/Blog/tags/floating-status-window/" class="post-tag">Floating Status Window</a>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/critters/" class="post-tag">Critters</a> <a href="/Blog/tags/critters/" class="post-tag">Critters</a>
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/weather/" class="post-tag">Weather</a> <a href="/Blog/tags/weather/" class="post-tag">Weather</a>
</li> </li>
</ul> </ul>
@@ -404,7 +404,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/` was built on 2024-11-21T23:06:36.399Z --> <!-- This page `/Blog/tags/` was built on 2024-11-21T23:16:50.528Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>

View File

@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tagged &#39;Weather&#39;</title> <title>Tagged &#39;Weather&#39;</title>
<meta name="description" content="Code, Critters, and whatever I feel like writing about."> <meta name="description" content="Code, Critters, and whatever I feel like writing about.">
<link rel="alternate" href="/eleventy-base-blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor"> <link rel="alternate" href="/Blog/feed/feed.xml" type="application/atom+xml" title="Chris Kaczor">
<link rel="apple-touch-icon" sizes="180x180" href="/eleventy-base-blog/img/apple-touch-icon.png?v=2"> <link rel="apple-touch-icon" sizes="180x180" href="/Blog/img/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="/eleventy-base-blog/img/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="/Blog/img/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="/eleventy-base-blog/img/favicon-16x16.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="/Blog/img/favicon-16x16.png?v=2">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -340,22 +340,22 @@ img[width][height] {
<a href="#skip" class="visually-hidden">Skip to main content</a> <a href="#skip" class="visually-hidden">Skip to main content</a>
<header> <header>
<a href="/eleventy-base-blog/" class="home-link">Chris Kaczor</a> <a href="/Blog/" class="home-link">Chris Kaczor</a>
<nav> <nav>
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2> <h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
<ul class="nav"> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/"> <a href="/Blog/">
Home Home
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/tags/"> <a href="/Blog/tags/">
Tags Tags
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="/eleventy-base-blog/about/"> <a href="/Blog/about/">
About About
</a> </a>
</li> </li>
@@ -373,7 +373,7 @@ img[width][height] {
<ul reversed="" class="postlist"> <ul reversed="" class="postlist">
<li class="postlist-item"> <li class="postlist-item">
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-link"> <a href="/Blog/blog/weather-station/" class="postlist-link">
Weather Station Weather Station
@@ -382,23 +382,23 @@ img[width][height] {
<time class="postlist-date" datetime="2018-02-17">17 February 2018</time> <time class="postlist-date" datetime="2018-02-17">17 February 2018</time>
<ul class="postlist-tags"> <ul class="postlist-tags">
<li> <li>
<a href="/eleventy-base-blog/tags/code/" class="postlist-tag">Code</a>, <a href="/Blog/tags/code/" class="postlist-tag">Code</a>,
</li> </li>
<li> <li>
<a href="/eleventy-base-blog/tags/weather/" class="postlist-tag">Weather</a> <a href="/Blog/tags/weather/" class="postlist-tag">Weather</a>
</li> </li>
</ul> </ul>
</span> </span>
<p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p> <p>One of the oldest projects I'm still working on today is my weather station. I had always wanted a weather station but it seemed boring to just install something on the roof, stick an LCD display on the wall somewhere, and then forget about it - I wanted something I could build, expand on, and write my own software for.</p>
<a href="/eleventy-base-blog/blog/weather-station/" class="postlist-read-more"> <a href="/Blog/blog/weather-station/" class="postlist-read-more">
Read more Read more
</a> </a>
</li> </li>
</ul> </ul>
<p>See <a href="/eleventy-base-blog/tags/">all tags</a>.</p> <p>See <a href="/Blog/tags/">all tags</a>.</p>
</heading-anchors> </heading-anchors>
</main> </main>
@@ -408,7 +408,7 @@ img[width][height] {
</p> </p>
</footer> </footer>
<!-- This page `/eleventy-base-blog/tags/weather/` was built on 2024-11-21T23:06:36.527Z --> <!-- This page `/Blog/tags/weather/` was built on 2024-11-21T23:16:50.653Z -->
<script type="module" src="/eleventy-base-blog/dist/rJ3_G-2ArF.js"></script> <script type="module" src="/Blog/dist/rJ3_G-2ArF.js"></script>
</body> </body>
</html> </html>