<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Journal</title><link>https://blog.rokson.dev</link><description>A personal notebook on AI tools, self-hosted technology, and things learned by building.</description><language>en</language><lastBuildDate>Sun, 18 Oct 2026 11:38:42 GMT</lastBuildDate><item><title>A local publishing example</title><link>https://blog.rokson.dev/articles/local-publishing-example/</link><guid>https://blog.rokson.dev/articles/local-publishing-example/</guid><description>From a Markdown file to a finished page. An example article for trying out this notebook.</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This is example content for verifying the blog. It describes the publishing workflow, not the results of a completed experiment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;section-start-with-a-question&quot;&gt;Start with a question&lt;/h2&gt;
&lt;p&gt;A useful experiment starts with something specific to find out. Write down the question, the setup, and what would count as a useful result before changing settings.&lt;/p&gt;
&lt;p&gt;This notebook keeps articles as Markdown files. The site is built ahead of time, so reading a finished article does not require a model, a database, or a JavaScript server.&lt;/p&gt;
&lt;h2 id=&quot;section-keep-the-details&quot;&gt;Keep the details&lt;/h2&gt;
&lt;p&gt;When writing up a test, include the software versions, hardware, prompts, and configuration. Separate what you observed from what you think explains it.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# Example article metadata
title: A question worth testing
draft: true
tags: [Local AI]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;section-show-the-trade-offs&quot;&gt;Show the trade-offs&lt;/h2&gt;
&lt;p&gt;Results become more useful when readers can see what failed, what changed between attempts, and the limits of the setup. A table can summarize the things you measured:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;What to record&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hardware&lt;/td&gt;
&lt;td&gt;CPU, GPU, and available memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software&lt;/td&gt;
&lt;td&gt;Model name, release, and configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Method&lt;/td&gt;
&lt;td&gt;Inputs, repetitions, and evaluation criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outcome&lt;/td&gt;
&lt;td&gt;Observations and supporting material&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;section-publish-the-finding&quot;&gt;Publish the finding&lt;/h2&gt;
&lt;p&gt;Change the draft flag when the article is ready. A build validates the Markdown, generates the pages, and packages the result for the server.&lt;/p&gt;
&lt;p&gt;For an actual experiment, replace this example with your own measured findings and supporting material.&lt;/p&gt;</content:encoded></item><item><title>A voice for the notebook</title><link>https://blog.rokson.dev/articles/voice-notebook-example/</link><guid>https://blog.rokson.dev/articles/voice-notebook-example/</guid><description>Planning article narration that is generated once and stays available when the model is offline.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This is an example article. Narration generation will be connected in the next milestone; this page does not claim a voice-model benchmark.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;section-generate-once-listen-whenever&quot;&gt;Generate once, listen whenever&lt;/h2&gt;
&lt;p&gt;Article audio should be prepared on the main server. The small public server only needs to send the finished recording to a reader.&lt;/p&gt;
&lt;h2 id=&quot;section-write-for-listening&quot;&gt;Write for listening&lt;/h2&gt;
&lt;p&gt;Long code blocks and tables need a prose explanation rather than a word-for-word reading of punctuation. A good narrated article preserves the argument and gives listeners enough context to follow it.&lt;/p&gt;
&lt;h2 id=&quot;section-keep-recordings-in-sync&quot;&gt;Keep recordings in sync&lt;/h2&gt;
&lt;p&gt;Each recording belongs to an exact revision of the article. If the text changes, an outdated recording should disappear until the matching audio is ready.&lt;/p&gt;</content:encoded></item><item><title>Keeping a small server small</title><link>https://blog.rokson.dev/articles/small-server-example/</link><guid>https://blog.rokson.dev/articles/small-server-example/</guid><description>Move the build work elsewhere and let the public server serve the finished result.</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This is an example article describing the platform design. Resource figures will be added only after the actual deployment is measured.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;section-do-the-expensive-work-before-publishing&quot;&gt;Do the expensive work before publishing&lt;/h2&gt;
&lt;p&gt;Markdown parsing, frontend compilation, image preparation, and voice generation happen on the main server. None of those jobs need to run each time a reader opens a page.&lt;/p&gt;
&lt;h2 id=&quot;section-serve-completed-files&quot;&gt;Serve completed files&lt;/h2&gt;
&lt;p&gt;The public container runs a Go process that serves HTML, styles, scripts, images, and available article audio. The existing Caddy edge handles public HTTPS.&lt;/p&gt;
&lt;h2 id=&quot;section-measure-the-real-deployment&quot;&gt;Measure the real deployment&lt;/h2&gt;
&lt;p&gt;Idle memory is only one part of the picture. Measure the container and the whole host while pages, images, and recordings are being requested together.&lt;/p&gt;</content:encoded></item></channel></rss>