<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ByteLogger]]></title><description><![CDATA[Building dev tools & AI projects]]></description><link>https://bytelogger.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69f5baa1ec32cba9e5ce4379/e73efed5-2847-4449-b6de-021b36d2630d.png</url><title>ByteLogger</title><link>https://bytelogger.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 19:13:29 GMT</lastBuildDate><atom:link href="https://bytelogger.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[watchr - Automate Your Dev Workflow When Files Change]]></title><description><![CDATA[The Problem
Every dev has been there - you save a file, switch to the terminal, run the tests, switch back. Save, switch, run, switch back. It's just constant friction that breaks your flow. watchr el]]></description><link>https://bytelogger.hashnode.dev/watchr-automate-your-dev-workflow-when-files-change</link><guid isPermaLink="true">https://bytelogger.hashnode.dev/watchr-automate-your-dev-workflow-when-files-change</guid><category><![CDATA[Rust]]></category><category><![CDATA[cli]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[automation]]></category><category><![CDATA[workflow]]></category><dc:creator><![CDATA[ByteLogger]]></dc:creator><pubDate>Mon, 01 Jun 2026 18:02:26 GMT</pubDate><content:encoded><![CDATA[<h3>The Problem</h3>
<p>Every dev has been there - you save a file, switch to the terminal, run the tests, switch back. Save, switch, run, switch back. It's just constant friction that breaks your flow. <code>watchr</code> eliminates that loop entirely by watching your directories and running commands automatically the monent something changes.</p>
<hr />
<h3>What watchr Does</h3>
<p><code>watchr</code> is a Rust CLI tool that watches one or more directories for file changes and runs a command in response. You configure it once, either via a <code>.watchr.toml</code> or directly on the CLI, and it handles the rest. Save a file, whatever you've configured for that directory runs automatically. No switching, no manual re-runs.</p>
<hr />
<h3>How It Works Under the Hood</h3>
<p><code>watchr</code> uses <code>notify-deboucer-full</code> for efficient filesystem monitoring. The debouce window prevents multiple runs from triggersing when you save repeatedly in a short period. Commands are executed via <code>sh -c</code>  so you can chain them with &amp;&amp;, use pipes, or run anything you'd normally type in a shell.</p>
<hr />
<h3>Installation</h3>
<pre><code class="language-bash">git clone https://github.com/mg4603/watchr.git
cd watchr
cargo build --release
# Binary will be at target/release/watchr

cargo install --path . 
# To install to local Cargo bin dir
</code></pre>
<hr />
<h3>Quick Start</h3>
<pre><code class="language-bash">watchr watch src/ --cmd "cargo test"
</code></pre>
<p>Filter by extension:</p>
<pre><code class="language-bash">watchr watch src/ --ext rs,toml --cmd "cargo test"
</code></pre>
<hr />
<h3>Using a Config File</h3>
<p>For anything beyond a single watchr, a <code>.watchr.toml</code> is the right move. Generate a template:</p>
<pre><code class="language-bash">watchr init
</code></pre>
<p>Then edit it:</p>
<pre><code class="language-toml">debounce_ms = 500

[[watcher]]
name = "tests"
dirs = ["src/", "tests/"]
ext = ["rs"]
command = "cargo test"

[[watcher]]
name = "lint"
dirs = ["src/"]
command = "cargo clippy"
</code></pre>
<p>Start watching:</p>
<pre><code class="language-bash">watchr watch
</code></pre>
<p><code>watchr</code> walks up the directory tree to find <code>.watchr.toml</code> automatically. You can also point it at an explicit path:</p>
<pre><code class="language-bash">watchr watch --config ~/my-project/.watchr.toml
</code></pre>
<hr />
<h3>Get the Code</h3>
<p>Full source at <a href="https://github.com/mg4603/watchr">GitHub</a>. If it save you a few hundred manual test runs, give it a star.</p>
]]></content:encoded></item><item><title><![CDATA[denoiser - Clean audio for Dev Screencasts Without a Soundproof Room]]></title><description><![CDATA[The Problem
If you've ever recorded a screencast or a demo video, you've probably experienced this: you play it back and all you can hear is the hum of your pc, the fan in the background, or streetnoi]]></description><link>https://bytelogger.hashnode.dev/denoiser-clean-audio-for-dev-screencasts-without-a-soundproof-room</link><guid isPermaLink="true">https://bytelogger.hashnode.dev/denoiser-clean-audio-for-dev-screencasts-without-a-soundproof-room</guid><category><![CDATA[Python]]></category><category><![CDATA[cli]]></category><category><![CDATA[audio]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[screencast]]></category><dc:creator><![CDATA[ByteLogger]]></dc:creator><pubDate>Mon, 01 Jun 2026 14:41:00 GMT</pubDate><content:encoded><![CDATA[<h3>The Problem</h3>
<p>If you've ever recorded a screencast or a demo video, you've probably experienced this: you play it back and all you can hear is the hum of your pc, the fan in the background, or streetnoise bleeding through your window. Fixing it means either buying expensive equipment, building a makeshift soundproof setup, or just putting out bad audio and hoping nobody notices. None of these are good options. <code>denoiser</code> is a simple CLI tool that cleans your audio in one command.</p>
<hr />
<h3>What denoiser Does</h3>
<p><code>denoiser</code> takes your video file, builds a noise profile from a short sample of background noise at the beginning, and uses that profile to strip the noise from the entire recording. The result is cleaner audio without touching your recording setup.</p>
<hr />
<h3>How It Works Under the Hood</h3>
<p>Under the hood, denoiser uses the <code>noisereduce</code> library to do the heavy lifting. It samples a configuration duration of audio from the start of your file, defaulting to the first 2 seconds, treats that as the noise floor, and applies spectral gating across the full track to suppress it. The <code>--prop-decrease</code> flag controls how aggressively the noise is reduced.</p>
<hr />
<h3>Installation</h3>
<pre><code class="language-bash">git clone https://github.com/mg4603/denoiser.git
cd denoiser
pipx install .
</code></pre>
<hr />
<h3>Basic Usage</h3>
<pre><code class="language-bash">denoiser denoiser input.mp4 output.mp4
</code></pre>
<p>That's it. Default work well for most recordings.</p>
<hr />
<h3>The Flags Explained</h3>
<ul>
<li><code>--noise-reduce</code> (default: <code>2.0</code>): how many seconds from the start of the file are used to build the noise profile. </li>
<li><code>--prop-decrease (default: 1.0)</code>: how aggressively noise is reduced. <code>1.0</code> is full suppression. If output sounds hollow or over-processed, try <code>0.7</code> or <code>0.8</code>.</li>
</ul>
<pre><code class="language-bash">denoiser denoise --noise-duration 1.5 --prop-decrease input.mp4 output.mp4
</code></pre>
<hr />
<h3>Get the Code</h3>
<p>The full source is on <a href="https://github.com/mg4603/denoiser">GitHub</a>. If this saves you a reshoot, git it a star.</p>
]]></content:encoded></item><item><title><![CDATA[I got tired of switching terminals - so I built logsnap]]></title><description><![CDATA[A while back I was trying to install an audio driver on my laptop. Every time I tried a different configuration, I had to check three different log files to see what went wrong. Three terminals open, ]]></description><link>https://bytelogger.hashnode.dev/i-got-tired-of-switching-terminals-so-i-built-logsnap</link><guid isPermaLink="true">https://bytelogger.hashnode.dev/i-got-tired-of-switching-terminals-so-i-built-logsnap</guid><category><![CDATA[Python]]></category><category><![CDATA[cli]]></category><category><![CDATA[devtools]]></category><dc:creator><![CDATA[ByteLogger]]></dc:creator><pubDate>Tue, 12 May 2026 10:56:40 GMT</pubDate><content:encoded><![CDATA[<p>A while back I was trying to install an audio driver on my laptop. Every time I tried a different configuration, I had to check three different log files to see what went wrong. Three terminals open, constantly switching between them, grepping for errors, losing context. It was painful enough that I decided to build something to fix it.</p>
<h2>What I built</h2>
<p>logsnap is a Python CLI tools that lets you tail mutliple log files in one place, filter output by keyword, and snapshot the results for later analysis. Instead of juggling three terminals, you run one command and see everything in one unified view.</p>
<h2>Getting started</h2>
<p>Clone the repo and install locally:</p>
<pre><code class="language-bash">git clone https://github.com/mg4603/logsnap.git
cd logsnap
pipx install .
</code></pre>
<p>Initialize your config:</p>
<pre><code class="language-bash">logsnap config init
</code></pre>
<p>This creates a config file at <code>~/.config/logsnap/config.toml</code>. Edit it to point at your log files:</p>
<pre><code class="language-toml">[sources]
files = [
    "/var/log/syslog",
    "/var/log/app.log"
]
</code></pre>
<p>Then run:</p>
<pre><code class="language-bash">logsnap watch
</code></pre>
<p>Every line is timestamped and prefixed with its source file so you always know where output is coming from. When you see somthing worth saving:</p>
<pre><code class="language-bash">logsnap snap
</code></pre>
<p>Snapshots export in either plain text or JSONL format - useful if you want to query them later.</p>
<h2>How it works</h2>
<p>No external file-watching library. logsnap opens each log file, seeks to the end, then polls for new lines every 100ms. New lines get timestamped, tagged with their source path, written to your terminal and buffered to a session file simultaneously. Simple, dependency-light, and easy to extend.</p>
<h2>What's next</h2>
<p>The code is on <a href="https://github.com/mg4603/logsnap">GitHub</a>. Feel free to open an issue or submit a PR if you have ideas or run into bugs.</p>
]]></content:encoded></item></channel></rss>