<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Marty Zalega</title><link>https://marty.zalega.me/</link><description>Recent content on Marty Zalega</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 15 Aug 2026 07:04:39 +0000</lastBuildDate><atom:link href="https://marty.zalega.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Rebuilding My Ring Light</title><link>https://marty.zalega.me/post/2026-08-15-rebuilding-my-ring-light/</link><pubDate>Sat, 15 Aug 2026 07:04:39 +0000</pubDate><guid>https://marty.zalega.me/post/2026-08-15-rebuilding-my-ring-light/</guid><description>&lt;p&gt;One day I was strolling through IKEA and stumbled upon VARMBLIXT wall lamp. I found the design intriguing and thought it would complement my living area perfectly. &lt;/p&gt;&#10;&lt;p&gt;&lt;img src="ikea-varmblixt.png" alt="Modern wall-mounted circular lamp with warm, ambient light." class="rounded-lg"&gt;&lt;/p&gt;&#10;&lt;p&gt;For the most part, the lamp sufficed my lighting needs, but its basic nature irked me because it did not take advantage of its peculiar design. The first thing I did when I purchased the lamp was spray paint it black to better suite my living room aesthetic. Then some time passed. A lot of time passed, and had motivation to continue returned. What I wanted to do next was replace the LEDs with ones that were programmable. I found a 1m LED strip on Amazon for $20 and once it arrived wired it up to a spare ESP micro-controller I had laying around. &lt;/p&gt;</description></item><item><title>Markdawn</title><link>https://marty.zalega.me/projects/markdawn/</link><pubDate>Wed, 12 Aug 2026 07:22:44 +0000</pubDate><guid>https://marty.zalega.me/projects/markdawn/</guid><description>&lt;p&gt;Markdawn is a web-based Markdown editor where the preview is the editor. It uses a rich-text Markdown editor so headings, lists, links, tables, code blocks, and images are directly editable in their styled form.&lt;/p&gt;</description></item><item><title>Moire</title><link>https://marty.zalega.me/projects/moire/</link><pubDate>Wed, 29 Jul 2026 07:58:59 +1000</pubDate><guid>https://marty.zalega.me/projects/moire/</guid><description>&lt;p&gt;Moire is a macOS application designed to synchronize photos across multiple providers, including Apple Photos, Google Photos, Facebook, S3-compatible, and Local Folders. It provides a flexible and robust sync engine that handles unidirectional and bidirectional synchronization with intelligent conflict resolution.&lt;/p&gt;</description></item><item><title>Hacking Combined Energy Bridge</title><link>https://marty.zalega.me/post/2026-07-27-hacking-combined-energy-bridge/</link><pubDate>Mon, 27 Jul 2026 19:01:23 +1000</pubDate><guid>https://marty.zalega.me/post/2026-07-27-hacking-combined-energy-bridge/</guid><description>&lt;p&gt;I created &lt;a href="https://github.com/evilmarty/combined_energy" class="link link-primary visited:link-secondary" rel="external" &gt;Combined Energy integration for Home Assistant&lt;/a&gt; back in 2024 after I got solar panels and replaced my gas hot water system with an electric one. The code was originally from a &lt;a href="https://github.com/home-assistant/core/pull/81724" class="link link-primary visited:link-secondary" rel="external" &gt;Pull Request&lt;/a&gt; by &lt;a href="https://github.com/timsavage" class="link link-primary visited:link-secondary" rel="external" &gt;@timsavage&lt;/a&gt;, who created it in 2022, that never got merged. I gave it a new home and has received numerous changes and updates since. It relied on Combined Energy&amp;rsquo;s cloud-based API to work, and for the most part worked well, but it irked me that it did not source the data locally. The bridge device sat next to my Home Assistant server yet did not communicate with each other and it was my ambition to ratify. Then one day, after some elbow grease and tenacity, I got my wish and made my integration source its data locally. This is that tale.&lt;/p&gt;</description></item><item><title>Spit</title><link>https://marty.zalega.me/projects/spit/</link><pubDate>Mon, 06 Jul 2026 21:49:01 +0000</pubDate><guid>https://marty.zalega.me/projects/spit/</guid><description>&lt;p&gt;A small Go CLI that sends chat-completion requests to an OpenAI-compatible endpoint and prints the assistant output.&lt;/p&gt;</description></item><item><title>Scratching an Itch With Duex</title><link>https://marty.zalega.me/post/2026-06-09-scratching-an-itch-with-duex/</link><pubDate>Tue, 09 Jun 2026 08:29:09 +1000</pubDate><guid>https://marty.zalega.me/post/2026-06-09-scratching-an-itch-with-duex/</guid><description>&lt;p&gt;&lt;a href="https://github.com/evilmarty/duex" class="link link-primary visited:link-secondary" rel="external" &gt;Duex&lt;/a&gt; was created out of pure necessity. All I wanted was a simple way to figure out what was using my storage space. Good ol &lt;code&gt;du&lt;/code&gt; can do the job but using it was cumbersome, mainly because the starting point would always be either the root or home folder. The number of files would be enormous and the output would be overwhelming. I just wanted to know what was taking up space in a specific folder. I wanted to be able to quickly navigate to a folder and run a command that would show me the top 10 largest files and folders. This is what lead me to create &lt;a href="https://github.com/evilmarty/duex" class="link link-primary visited:link-secondary" rel="external" &gt;Duex&lt;/a&gt;, a disk usage explorer that provides a simple interface to quickly find out what is taking up space in a folder.&lt;/p&gt;</description></item><item><title>Duex</title><link>https://marty.zalega.me/projects/duex/</link><pubDate>Thu, 28 May 2026 22:33:09 +0000</pubDate><guid>https://marty.zalega.me/projects/duex/</guid><description>&lt;p&gt;Duex is a Go-based terminal utility for visualizing and analyzing disk usage, featuring interactive navigation, accurate sizing, and real-time feedback.&lt;/p&gt;</description></item><item><title>Trivimania</title><link>https://marty.zalega.me/projects/trivimania/</link><pubDate>Thu, 02 Oct 2025 00:55:46 +0000</pubDate><guid>https://marty.zalega.me/projects/trivimania/</guid><description>&lt;p&gt;Trivimania is a multiplayer trivia game where players compete to answer questions correctly and quickly. Create a new game to challenge your friends.&lt;/p&gt;</description></item><item><title>URL Mate</title><link>https://marty.zalega.me/projects/urlmate/</link><pubDate>Wed, 06 Aug 2025 07:12:14 +0000</pubDate><guid>https://marty.zalega.me/projects/urlmate/</guid><description>&lt;p&gt;URL Mate is a React-based web application that provides helpful URL utilities, such as encoding, decoding, and parsing URL components.&lt;/p&gt;</description></item><item><title>CIDR Mate</title><link>https://marty.zalega.me/projects/cidrmate/</link><pubDate>Sat, 26 Jul 2025 08:33:28 +0000</pubDate><guid>https://marty.zalega.me/projects/cidrmate/</guid><description>&lt;p&gt;CIDR Mate is a React-based CIDR calculator web application designed to help users calculate and visualize IP address ranges and network masks.&lt;/p&gt;</description></item><item><title>Enode</title><link>https://marty.zalega.me/projects/enode/</link><pubDate>Mon, 21 Apr 2025 08:54:53 +0000</pubDate><guid>https://marty.zalega.me/projects/enode/</guid><description>&lt;p&gt;This Home Assistant integration connects to the Enode API to monitor and control energy devices, with current support focused on electric vehicles from various manufacturers.&lt;/p&gt;</description></item><item><title>The birth of ILC</title><link>https://marty.zalega.me/post/2024-08-04-the-birth-of-ilc/</link><pubDate>Sun, 04 Aug 2024 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2024-08-04-the-birth-of-ilc/</guid><description>&lt;p&gt;I don&amp;rsquo;t think I am the only one who creates a lot of ad-hoc Bash scripts and programs. Whether it be for work or for ourselves, they become part of our personal arsenal that assist with our tasks. When I begin creating a new Bash script, usually after noticing a pattern of frequent commands, I find myself beginning with the same boiler&amp;hellip;&lt;/p&gt;&#10;&lt;pre class="bg-neutral text-neutral-content p-4 rounded-lg overflow-auto my-6"&gt;&lt;code&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/usr/bin/env bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set -euo pipefail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;main&lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;main &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$@&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nothing out of the ordinary here but when I add logic to parse arguments things become complicated quickly and the intention of writing a quick helper script balloons out into a small application. Not to mention that not all scripts are equal. Some may be used semi-frequently while others may go unused for stretches of time only to appear unfamiliar with their usage when the time comes to dust them off. This is why I find it is important to include usage instructions but that just adds to the effort of creating the script.&lt;/p&gt;</description></item><item><title>Combined Energy</title><link>https://marty.zalega.me/projects/combined-energy/</link><pubDate>Thu, 25 Apr 2024 00:48:22 +0000</pubDate><guid>https://marty.zalega.me/projects/combined-energy/</guid><description>&lt;p&gt;The Combined Energy Home Assistant integration monitors and reports real-time energy production and consumption data from solar PV, batteries, and appliances, while providing detailed tracking of energy tariffs and costs.&lt;/p&gt;</description></item><item><title>Playing with Safari's bookmarks</title><link>https://marty.zalega.me/post/2023-08-16-playing-with-safaris-bookmarks/</link><pubDate>Wed, 16 Aug 2023 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2023-08-16-playing-with-safaris-bookmarks/</guid><description>&lt;p&gt;My journey playing with Safari&amp;rsquo;s bookmarks began unexpectedly trying to find an easy way to access Elixir module documentation. I keep a lot of docs stored locally and Elixir&amp;rsquo;s &lt;code&gt;mix&lt;/code&gt; tool makes it easy to download and access. The problem is that I don&amp;rsquo;t want to always have to type a command in the terminal to launch it and navigating folders in the Finder feels cumbersome. I use bookmarks extensively and would like to simply have a folder of docs accessible in the browser. And so the adventure begins.&lt;/p&gt;</description></item><item><title>Safari Bookmarks CLI</title><link>https://marty.zalega.me/projects/safari-bookmarks-cli/</link><pubDate>Mon, 14 Aug 2023 10:59:03 +0000</pubDate><guid>https://marty.zalega.me/projects/safari-bookmarks-cli/</guid><description>&lt;p&gt;safari-bookmarks-cli is a Python-based command-line utility for managing Safari web browser bookmarks by directly interacting with the &lt;code&gt;Bookmarks.plist&lt;/code&gt; file to list, add, move, and remove bookmarks and folders.&lt;/p&gt;</description></item><item><title>The perfect air-conditioner controller</title><link>https://marty.zalega.me/post/2023-02-26-air-conditioner-controller/</link><pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2023-02-26-air-conditioner-controller/</guid><description>&lt;p&gt;A few months ago I moved into a new home which meant having to re-setup all my home automation. One of the things which was going to be problematic was finding a way to control my new home&amp;rsquo;s existing air-conditioners. I also bit the bullet and opt to go the easy path of buying a couple &lt;a href="https://sensibo.com" class="link link-primary visited:link-secondary" rel="external" &gt;Sensibo&lt;/a&gt; devices but the price was a major turn-off. At my previous home I had setup an ESP2088 as an RF controller to control my fans, doing the same for IR shouldn&amp;rsquo;t be much more difficult.&lt;/p&gt;</description></item><item><title>Zalevent</title><link>https://marty.zalega.me/projects/zalevent/</link><pubDate>Mon, 16 Jan 2023 22:03:34 +0000</pubDate><guid>https://marty.zalega.me/projects/zalevent/</guid><description>&lt;p&gt;Zalevent is a real-time event management platform that simplifies hosting through customizable invitations, live RSVP tracking, and automated guest communication.&lt;/p&gt;</description></item><item><title>datemate rewritten</title><link>https://marty.zalega.me/post/2022-06-20-datemate-rewritten/</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2022-06-20-datemate-rewritten/</guid><description>&lt;p&gt;While in between jobs I decided to set myself some small goals to remain&#10;productive but also be able to deliver them. Usually when I begin a personal&#10;project I don&amp;rsquo;t even think how long it might take me to complete. This has lead&#10;me to take on very large projects with little to no chance of being in a usable&#10;state yet alone done. This time I took a different approach to only tackle&#10;small projects. This lead to actually accomplishing a complete rewrite of&#10;&lt;a href="https://marty.zalega.me/datemate" class="link link-primary visited:link-secondary" rel="external" &gt;datemate&lt;/a&gt; and&#10;&lt;a href="https://github.com/evilmarty/ilc" class="link link-primary visited:link-secondary" rel="external" &gt;ilc&lt;/a&gt;, which I&amp;rsquo;ll talk about another time.&lt;/p&gt;</description></item><item><title>ILC</title><link>https://marty.zalega.me/projects/ilc/</link><pubDate>Tue, 26 Apr 2022 09:17:08 +0000</pubDate><guid>https://marty.zalega.me/projects/ilc/</guid><description>&lt;p&gt;The ilc utility is a Go-based tool that simplifies the creation of custom command-line interfaces by allowing users to define nested commands, interactive input prompts, and templated workflows within a single configuration file.&lt;/p&gt;</description></item><item><title>The Big Change</title><link>https://marty.zalega.me/post/2021-01-11-the-big-change/</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2021-01-11-the-big-change/</guid><description>&lt;p&gt;After several months of running my Dell PowerEdge R420 server a few nuances&#10;arose that began to irk me. In an impulsive decision, I decided to replace the&#10;behemoth of a home server with a much smaller and almost unnoticeable Intel NUC.&lt;/p&gt;&#10;&lt;h1 id="prologue" class="text-3xl"&gt;Prologue&lt;/h1&gt;&#10;&lt;p&gt;The biggest culprit with the Dell Server was the noisy fans, even when set to&#10;the lowest setting. This meant that intensive operations would cause the fans to&#10;crank into overdrive and sound as if an airplane is about to take off from my&#10;kitchen. Because these are server-grade processors they don&amp;rsquo;t features such are&#10;multimedia acceleration, unlike their desktop counterparts, which again cause&#10;those delightful fans to spin up. Other joys these fans bring to the household&#10;is on system boot and are probably spinning at their maximum setting. It isn&amp;rsquo;t&#10;the most pleasant thing to hear when a blackout occurs in the middle of the&#10;night and triggers a reboot. My last criticism is that it&amp;rsquo;s very cumbersome.&#10;Tucked away behind a cabinet but I plan on removing said cabinet thus there will&#10;be no place for it to hide. The time came to take action.&lt;/p&gt;</description></item><item><title>Mjpeg Timelapse Plugin</title><link>https://marty.zalega.me/post/2020-12-02-mjpeg-timelapse-plugin/</link><pubDate>Wed, 02 Dec 2020 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2020-12-02-mjpeg-timelapse-plugin/</guid><description>&lt;p&gt;I was disappointed when &lt;a href="https://home-assistant.io" class="link link-primary visited:link-secondary" rel="external" &gt;Home Assistant&lt;/a&gt; removed the &lt;a href="https://github.com/home-assistant/core/pull/41941" class="link link-primary visited:link-secondary" rel="external" &gt;BOM integration&lt;/a&gt;. Whilst I don&amp;rsquo;t fault their reasons, and wish that &lt;a href="https://bom.gov.au" class="link link-primary visited:link-secondary" rel="external" &gt;BOM&lt;/a&gt; did provide a proper API, it still was an unfortunate outcome. The default weather integration uses data that&amp;rsquo;s to generalised thus lacks accuracy. This is typical of all weather applications that don&amp;rsquo;t source their information from the Bureau directly. Fortunately part of my problem was solved via &lt;a href="https://hacs.xyz" class="link link-primary visited:link-secondary" rel="external" &gt;HACS&lt;/a&gt; and &lt;a href="https://github.com/bremor/bureau_of_meteorology" class="link link-primary visited:link-secondary" rel="external" &gt;bremor&amp;rsquo;s bureau_of_meteorology plugin&lt;/a&gt;, which provides a weather component that sources its data from BOM. The only thing left is to display a radar image on the dashboard. Initially I simply created a &lt;a href="https://www.home-assistant.io/integrations/generic/" class="link link-primary visited:link-secondary" rel="external" &gt;Generic Camera&lt;/a&gt; with an image URL which sufficed my needs, but the lack of a historical timelapse began to wane on me. This is what was missing and took it upon myself to remedy.&lt;/p&gt;</description></item><item><title>Setting up Home Assistant/Hassio (Part 2)</title><link>https://marty.zalega.me/post/2020-07-07-setting-up-home-assistant-part-2/</link><pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2020-07-07-setting-up-home-assistant-part-2/</guid><description>&lt;div role="alert" class="alert alert-info my-6"&gt;&#10; &lt;span&gt;Please read &lt;a href="https://marty.zalega.me/post/2020-05-20-setting-up-home-assistant-part-1/" class="link link-primary visited:link-secondary" rel="external" &gt;Part 1&lt;/a&gt; of my guide if you haven&amp;rsquo;t yet done so.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h1 id="beyond-home-assistant" class="text-3xl"&gt;Beyond Home Assistant&lt;/h1&gt;&#10;&lt;p&gt;With Home Assistant, formally known as Hassio, all up and running the next step&#10;is to run Docker containers using the Supervisor. I should mention that running&#10;Docker containers through Home Assistant&amp;rsquo;s Supervisor is different than typical&#10;runtimes but it&amp;rsquo;s not difficult if you&amp;rsquo;re familiar building Docker containers.&#10;How this is accomplished is by using&#10;&lt;a href="https://developers.home-assistant.io/docs/add-ons" class="link link-primary visited:link-secondary" rel="external" &gt;Add-ons&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Date Mate</title><link>https://marty.zalega.me/projects/datemate/</link><pubDate>Mon, 15 Jun 2020 02:49:22 +0000</pubDate><guid>https://marty.zalega.me/projects/datemate/</guid><description>&lt;p&gt;Date Mate is a simple date helper web application built with React, TypeScript, and Vite, designed to provide utility tools for date-related operations.&lt;/p&gt;</description></item><item><title>Hacking the Momentum Niro Wi-Fi Garage Door Controller</title><link>https://marty.zalega.me/post/2020-06-02-hacking-momentum-niro/</link><pubDate>Tue, 02 Jun 2020 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2020-06-02-hacking-momentum-niro/</guid><description>&lt;div role="alert" class="alert alert-warning my-6"&gt;&#10; &lt;span&gt;&lt;strong&gt;Update&lt;/strong&gt; Momentum released updated their firmware on June 25 2020 which removes access that was exposed in this article.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Momentum&amp;rsquo;s &lt;a href="https://momentumcam.com/products/garage-door-controller" class="link link-primary visited:link-secondary" rel="external" &gt;Niro Wi-Fi Garage Door Controller&lt;/a&gt; is a web camera and garage controller in-one. Despite having a decent app to control the device my intention was to integrate it with &lt;a href="https://home-assistant.io" class="link link-primary visited:link-secondary" rel="external" &gt;Home Assistant&lt;/a&gt;. Unfortunately there is no public API or integrations available at the time so I ended up hacking the device in order to do so.&lt;/p&gt;</description></item><item><title>Setting up Home Assistant/Hassio (Part 1)</title><link>https://marty.zalega.me/post/2020-05-20-setting-up-home-assistant-part-1/</link><pubDate>Wed, 20 May 2020 00:00:00 +0000</pubDate><guid>https://marty.zalega.me/post/2020-05-20-setting-up-home-assistant-part-1/</guid><description>&lt;p&gt;My multi-part guide on setting up &lt;a href="https://home-assistant.io" class="link link-primary visited:link-secondary" rel="external" &gt;Home Assistant&lt;/a&gt; on a Dell&#10;PowerEdge R420 running CentOS 7.&lt;/p&gt;&#10;&lt;h1 id="prologue" class="text-3xl"&gt;Prologue&lt;/h1&gt;&#10;&lt;p&gt;At the end of last year my workplace was moving offices and as such was culling&#10;unnecessary items before the move. One of the things they were disposing were&#10;2015 Dell PowerEdge R610 and R40 servers. I snatched them up in an instant.&lt;/p&gt;&#10;&lt;p&gt;After I got these heavy beasts home the next question was what to do with them?&#10;The hard drives were removed so the first point of call was to get replacements.&#10;I decided to get a cheap 1Tb hard drive for the R610 (which supports 2.5&amp;quot; bays)&#10;but some bad search results from the computer part supplier website made me&#10;order a 3.5&amp;quot; drive instead. This was fortunate as the R420 is smaller and&#10;lighter than the R610. I also transferred the memory from the R610 into the&#10;R420, which happen to be of the same type, for a total of 24Gb!&lt;/p&gt;</description></item></channel></rss>