<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Yottabyte</title><link>https://yottabyte.net/</link><description>Recent content on Yottabyte</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 12 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yottabyte.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Keeping script secrets in Proton Pass</title><link>https://yottabyte.net/notes/proton-pass-cli-for-scripts/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/notes/proton-pass-cli-for-scripts/</guid><description>&lt;p&gt;I keep configuration and wrapper scripts in Git, but credentials do not belong there. The usual compromise is an ignored &lt;code&gt;.env&lt;/code&gt; file, which avoids a public commit but still leaves long-lived plaintext secrets scattered across machines.&lt;/p&gt;
&lt;p&gt;The Proton Pass command-line client offers a better boundary: scripts contain references, and the real values are resolved from the vault only when they are needed.&lt;/p&gt;
&lt;p&gt;This note reflects the CLI as documented in July 2026. Secret-management tools evolve, so check the &lt;a href="https://protonpass.github.io/pass-cli/"&gt;official pass-cli documentation&lt;/a&gt; before building automation around it.&lt;/p&gt;</description></item><item><title>Notes from a Juwel lighting controller</title><link>https://yottabyte.net/notes/reverse-engineering-juwel-controller/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/notes/reverse-engineering-juwel-controller/</guid><description>&lt;p&gt;One of my favourite kinds of hardware is the appliance that quietly contains a complete little computer. A Juwel aquarium-lighting controller turned out to be exactly that: a web interface, HTTP endpoints, JavaScript state, and downloadable binary profiles hiding behind a straightforward consumer product.&lt;/p&gt;
&lt;p&gt;I wanted to understand how it represented a day of lighting and whether I could control it without depending on its browser interface. These are field notes from that exploration rather than a promise of a stable public API. Firmware changes may alter any of this.&lt;/p&gt;</description></item><item><title>Sockets hiding in the shell</title><link>https://yottabyte.net/notes/sockets-in-the-shell/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/notes/sockets-in-the-shell/</guid><description>&lt;p&gt;I like discovering that a familiar tool contains a lower-level machine than the one I normally use. Shell redirection is usually about files, but in Bash it can also open a network socket. Zsh takes a different route and exposes TCP through a loadable module.&lt;/p&gt;
&lt;p&gt;Neither replaces curl or netcat for routine work. They are useful for diagnostics, minimal systems, and understanding that a socket is ultimately something a process can read from and write to like any other file descriptor.&lt;/p&gt;</description></item><item><title>Monodraw MCP</title><link>https://yottabyte.net/projects/monodraw-mcp/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/monodraw-mcp/</guid><description>&lt;p&gt;I use &lt;a href="https://monodraw.helftone.com/"&gt;Monodraw&lt;/a&gt; because text diagrams occupy a useful middle ground. They are quicker than illustration software, clearer than prose, and can live beside the system they explain.&lt;/p&gt;
&lt;p&gt;Monodraw MCP connects that workflow to tools using the Model Context Protocol. A model can discover existing diagrams, export them as text, generate new ones, save editable Monodraw documents, and open them in the native application.&lt;/p&gt;
&lt;h2 id="drawing-is-mostly-alignment"&gt;Drawing is mostly alignment&lt;/h2&gt;
&lt;p&gt;Generating a box is easy. Generating a diagram that remains correct after labels vary in width is not.&lt;/p&gt;</description></item><item><title>Jlang</title><link>https://yottabyte.net/projects/jlang/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/jlang/</guid><description>&lt;p&gt;Jlang is my toy programming language. “Toy” is important: the goal is not to compete with established languages, but to understand lexical analysis, syntax trees, parsing, and eventually evaluation by building each layer myself.&lt;/p&gt;
&lt;p&gt;That kind of learning suits me. I can read an explanation of a parser, but it becomes real when a slightly ambiguous grammar turns into the wrong tree and I have to discover why.&lt;/p&gt;
&lt;h2 id="starting-with-a-language-not-a-parser"&gt;Starting with a language, not a parser&lt;/h2&gt;
&lt;p&gt;I began by sketching the language I wanted to write. It has typed values, global and local scopes, functions, classes with public and private members, ranges with steps, formatted strings, and a &lt;code&gt;NoVal&lt;/code&gt; value for missing data. The intended grammar lives alongside the implementation in EBNF.&lt;/p&gt;</description></item><item><title>Hrafnlingr</title><link>https://yottabyte.net/projects/hrafnlingr/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/hrafnlingr/</guid><description>&lt;p&gt;Hrafnlingr turns a topic into the working material for a narrated documentary: a researched and reviewed script, structured scenes, archival cues, visual prompts, dramatized interview segments, voiceover audio, and subtitles.&lt;/p&gt;
&lt;p&gt;It began as a pipeline experiment and grew into a complete local system. The Rust workspace contains the domain model, model providers, orchestration, manifest format, downstream tools, audio synthesis, two graphical interfaces, a command-line application, and a foreign-function boundary used by a native macOS app.&lt;/p&gt;</description></item><item><title>Quiver</title><link>https://yottabyte.net/projects/quiver/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/quiver/</guid><description>&lt;p&gt;API requests are source code in all but name. They change with the software, benefit from review, and ought to survive the application that created them. I built Quiver because I wanted a capable REST client without an opaque database or proprietary export format.&lt;/p&gt;
&lt;p&gt;Every request is a small &lt;a href="https://kdl.dev"&gt;KDL&lt;/a&gt; file. Collections are directories, folders are directories, and environments are ordinary TOML. The whole workspace can be searched, diffed, reviewed, and committed with the application it exercises.&lt;/p&gt;</description></item><item><title>Decoy</title><link>https://yottabyte.net/projects/decoy/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/decoy/</guid><description>&lt;p&gt;Decoy is a file-based mock API server. A route is a readable KDL file containing its method, path, responses, headers, documentation, and optional latency. Folders inherit defaults through their own KDL files, so an entire collection remains visible in the filesystem.&lt;/p&gt;
&lt;p&gt;It shares a philosophy and several core components with Quiver, but it solves the other side of the problem: Quiver sends requests; Decoy provides the service they can talk to.&lt;/p&gt;</description></item><item><title>Skald</title><link>https://yottabyte.net/projects/skald/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/skald/</guid><description>&lt;p&gt;Skald is a multi-tenant backend for orchestrating AI-assisted video production. A user supplies a channel configuration and a video idea; the system coordinates the work needed to produce scripts, titles, chapters, voiceover, visual prompts, generated media, an assembled video, and a thumbnail.&lt;/p&gt;
&lt;p&gt;The interesting problem is not making a single model call. It is turning many slow, failure-prone, provider-specific operations into a system with durable state, retries, workspace isolation, secure credentials, and large artifacts.&lt;/p&gt;</description></item><item><title>ChronoFence</title><link>https://yottabyte.net/projects/chronofence/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://yottabyte.net/projects/chronofence/</guid><description>&lt;p&gt;ChronoFence is an Android time tracker for contractors who move between work sites. Define a geofence around a location and the app records arrival and departure, then turns those visits into billable timesheets.&lt;/p&gt;
&lt;p&gt;The simple version of that idea is a geofence callback connected to a clock. The reliable version has to deal with delayed events, missed exits, device restarts, permissions, power management, manual corrections, billing rules, and the fact that location data deserves particular care.&lt;/p&gt;</description></item><item><title>About</title><link>https://yottabyte.net/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yottabyte.net/about/</guid><description>&lt;p&gt;Hi, I&amp;rsquo;m Jason. I am a self-taught developer, hardware hacker, and lifelong student in the Netherlands.&lt;/p&gt;
&lt;p&gt;I wrote my first program when I was eight, on a step controller for a lathe. There was no screen or friendly editor—just switches to toggle and a machine waiting for instructions. That experience never really left me: understand the system, experiment carefully, and make the physical world do something new.&lt;/p&gt;
&lt;p&gt;I grew up with the directness of early computing and taught myself the rest as the field changed around me. Software is part of it, but so are electronics, machines, science, nature, and the craft of engineering.&lt;/p&gt;</description></item></channel></rss>